diff --git a/uppsrc/Core/JSON.cpp b/uppsrc/Core/JSON.cpp index 6c9ab48cf..f35b38896 100644 --- a/uppsrc/Core/JSON.cpp +++ b/uppsrc/Core/JSON.cpp @@ -28,23 +28,24 @@ Value ParseJSON(CParser& p) return false; if(p.Char('{')) { ValueMap m; - if(!p.IsChar('}')) - do { - String key = p.ReadString(); - p.PassChar(':'); - m.Add(key, ParseJSON(p)); - } - while(p.Char(',')); - p.PassChar('}'); + while(!p.Char('}')) { + String key = p.ReadString(); + p.PassChar(':'); + m.Add(key, ParseJSON(p)); + if(p.Char('}')) // Stray ',' at the end of list is allowed... + break; + p.PassChar(','); + } return m; } if(p.Char('[')) { ValueArray va; - if(!p.IsChar(']')) - do - va.Add(ParseJSON(p)); - while(p.Char(',')); - p.PassChar(']'); + while(!p.Char(']')) { + va.Add(ParseJSON(p)); + if(p.Char(']')) // Stray ',' at the end of list is allowed... + break; + p.PassChar(','); + } return va; } p.ThrowError("Unrecognized JSON element"); @@ -57,8 +58,8 @@ Value ParseJSON(const char *s) CParser p(s); return ParseJSON(p); } - catch(CParser::Error) { - return ErrorValue(); + catch(CParser::Error e) { + return ErrorValue(e); } } diff --git a/uppsrc/ide/Json.cpp b/uppsrc/ide/Json.cpp index dba504ded..b8b3232d5 100644 --- a/uppsrc/ide/Json.cpp +++ b/uppsrc/ide/Json.cpp @@ -27,6 +27,10 @@ bool JsonView::Key(dword key, int count) int JsonView::AddNode(int parent_id, const Value& id, const String& name, const Value& v) { + if(IsError(v)) { + parent_id = tree.Add(parent_id, IdeImg::Error(), "ERROR", "[@R [* " + GetErrorText(v)); + } + else if(v.Is()) { ValueMap m = v; parent_id = tree.Add(parent_id, IdeImg::JsonStruct(), id, "[G1 [* " + name); diff --git a/uppsrc/ide/ide.iml b/uppsrc/ide/ide.iml index 52f528bd1..69174c88b 100644 --- a/uppsrc/ide/ide.iml +++ b/uppsrc/ide/ide.iml @@ -91,6 +91,7 @@ IMAGE_ID(JsonArray) IMAGE_ID(JsonString) IMAGE_ID(JsonNumber) IMAGE_ID(JsonBool) +IMAGE_ID(Error) IMAGE_BEGIN_DATA IMAGE_DATA(120,156,237,152,141,153,131,32,12,134,29,161,35,220,116,157,163,163,117,179,92,181,141,66,126,72,20,17,84,194,147,167) @@ -2350,11 +2351,15 @@ IMAGE_DATA(255,45,72,215,220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 IMAGE_END_DATA(1632, 17) IMAGE_BEGIN_DATA -IMAGE_DATA(120,156,237,148,81,14,131,48,8,134,57,194,246,216,100,39,219,105,246,226,21,118,131,222,171,55,97,105,172,209,24,160) -IMAGE_DATA(80,156,235,84,146,63,49,218,126,253,41,8,220,225,6,7,13,116,106,100,32,182,137,99,192,107,150,244,174,198,96,207) -IMAGE_DATA(189,24,205,12,111,93,90,251,195,223,167,125,196,129,135,9,21,222,34,169,219,197,203,216,203,195,244,179,172,159,183,216) -IMAGE_DATA(255,79,247,240,75,15,6,245,29,215,48,177,13,147,7,190,85,242,50,52,251,67,8,228,179,150,145,247,80,178,230,32) -IMAGE_DATA(249,208,230,193,249,176,220,35,231,195,194,248,70,45,107,12,131,250,142,19,13,147,1,252,133,27,98,140,152,82,18,149) -IMAGE_DATA(215,148,243,72,15,121,205,242,44,138,81,190,81,12,156,60,44,247,174,57,26,15,53,70,241,240,148,60,72,185,104,61) -IMAGE_DATA(72,62,52,247,32,49,44,30,184,92,44,30,132,126,216,98,152,80,30,186,137,15,135,168,203,80,0,0,0,0,0,0) -IMAGE_END_DATA(224, 4) +IMAGE_DATA(120,156,237,150,209,17,130,48,12,134,59,129,167,143,220,241,230,18,44,194,139,91,184,129,47,60,250,234,6,188,48,8) +IMAGE_DATA(19,56,0,231,34,145,28,5,17,210,146,180,136,21,201,93,174,180,144,191,95,211,152,83,29,212,94,173,212,192,211,27) +IMAGE_DATA(13,0,55,55,105,168,203,203,109,107,83,26,198,125,55,13,103,13,223,123,113,173,15,255,58,13,195,86,220,76,40,243) +IMAGE_DATA(189,36,118,185,248,106,44,197,208,254,88,134,207,115,196,255,82,30,190,201,32,240,176,109,107,38,178,102,18,195,141,229) +IMAGE_DATA(190,26,156,248,40,138,200,103,174,6,198,80,46,61,131,141,131,123,14,19,135,36,143,38,14,137,198,39,238,114,74,67) +IMAGE_DATA(224,97,219,31,53,147,76,249,95,92,150,231,57,84,85,101,117,252,70,239,71,50,224,55,253,189,40,13,253,142,210,128) +IMAGE_DATA(150,161,31,59,212,225,48,76,105,104,134,147,141,193,118,22,46,131,141,131,147,7,155,134,132,193,116,22,9,131,165,30) +IMAGE_DATA(230,104,38,20,67,56,182,64,51,153,163,227,66,17,211,127,31,113,157,169,145,166,59,90,3,215,241,61,247,60,247,227) +IMAGE_DATA(123,60,206,153,12,70,22,33,195,136,197,129,97,196,226,200,208,177,8,238,194,200,162,227,93,25,58,22,207,248,115,237) +IMAGE_DATA(133,30,93,236,145,36,117,62,10,5,56,226,92,24,159,98,92,191,62,180,142,36,47,113,237,112,189,54,241,56,170,38) +IMAGE_DATA(47,177,144,37,169,189,212,177,165,158,147,246,4,79,58,77,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) +IMAGE_END_DATA(352, 5)