summaryrefslogtreecommitdiffstats
path: root/lldb/tools/debugserver
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/tools/debugserver')
-rw-r--r--lldb/tools/debugserver/source/JSON.cpp12
-rw-r--r--lldb/tools/debugserver/source/JSON.h2
2 files changed, 12 insertions, 2 deletions
diff --git a/lldb/tools/debugserver/source/JSON.cpp b/lldb/tools/debugserver/source/JSON.cpp
index 1b37767256d..12d96d4ed4d 100644
--- a/lldb/tools/debugserver/source/JSON.cpp
+++ b/lldb/tools/debugserver/source/JSON.cpp
@@ -516,13 +516,16 @@ JSONValue::SP JSONParser::ParseJSONArray() {
std::string value;
std::string key;
while (true) {
- JSONValue::SP value_sp = ParseJSONValue();
+ JSONParser::Token token = GetToken(value);
+ if (token == JSONParser::Token::ArrayEnd)
+ return JSONValue::SP(array_up.release());
+ JSONValue::SP value_sp = ParseJSONValue(value, token);
if (value_sp)
array_up->AppendObject(value_sp);
else
break;
- JSONParser::Token token = GetToken(value);
+ token = GetToken(value);
if (token == JSONParser::Token::Comma) {
continue;
} else if (token == JSONParser::Token::ArrayEnd) {
@@ -537,6 +540,11 @@ JSONValue::SP JSONParser::ParseJSONArray() {
JSONValue::SP JSONParser::ParseJSONValue() {
std::string value;
const JSONParser::Token token = GetToken(value);
+ return ParseJSONValue(value, token);
+}
+
+JSONValue::SP JSONParser::ParseJSONValue(const std::string &value,
+ const Token &token) {
switch (token) {
case JSONParser::Token::ObjectStart:
return ParseJSONObject();
diff --git a/lldb/tools/debugserver/source/JSON.h b/lldb/tools/debugserver/source/JSON.h
index b1c4a4c9db8..70bfdd7259a 100644
--- a/lldb/tools/debugserver/source/JSON.h
+++ b/lldb/tools/debugserver/source/JSON.h
@@ -292,6 +292,8 @@ public:
JSONValue::SP ParseJSONValue();
protected:
+ JSONValue::SP ParseJSONValue(const std::string &value, const Token &token);
+
JSONValue::SP ParseJSONObject();
JSONValue::SP ParseJSONArray();
OpenPOWER on IntegriCloud