| 80 | } |
| 81 | |
| 82 | JSON::Object* JSON::Parser::ParseObject(const std::string & textFile) |
| 83 | { |
| 84 | JSON::Object* ret = new JSON::Object; |
| 85 | bool parseSuccess = false; |
| 86 | bool parseFail = false; |
| 87 | bool prevPair = false; |
| 88 | bool prevDelim = false; |
| 89 | while (!m_Completed && !parseSuccess && !parseFail) |
| 90 | { |
| 91 | MoveToNonWhitespace(textFile); |
| 92 | if(CheckEOF(textFile))continue; |
| 93 | Token token = ReadToken(textFile); |
| 94 | if(!(token == JT_EndObject) && CheckEOF(textFile))continue; |
| 95 | switch (token) |
| 96 | { |
| 97 | case JT_EndObject: |
| 98 | if(prevDelim) |
| 99 | { |
| 100 | LOG("Expected a new Key Value pair after delimiter", Warning); |
| 101 | parseFail = true; |
| 102 | continue; |
| 103 | } |
| 104 | parseSuccess = true; |
| 105 | break; |
| 106 | case JT_String: |
| 107 | { |
| 108 | if (prevPair) |
| 109 | { |
| 110 | LOG("Expected a delimiter before new key value pair", Warning); |
| 111 | parseFail = true; |
| 112 | continue; |
| 113 | } |
| 114 | prevDelim = false; |
| 115 | JSON::Pair keyVal = ParsePair(textFile); |
| 116 | if (keyVal.second) |
| 117 | { |
| 118 | ret->value.push_back(keyVal); |
| 119 | prevPair = true; |
| 120 | continue; |
| 121 | } |
| 122 | parseFail = true; |
| 123 | continue; |
| 124 | } |
| 125 | case JT_Delim: |
| 126 | if (!prevPair) |
| 127 | { |
| 128 | LOG("Expected a new Key Value pair before delimiter", Warning); |
| 129 | parseFail = true; |
| 130 | continue; |
| 131 | } |
| 132 | prevPair = false; |
| 133 | prevDelim = true; |
| 134 | continue; |
| 135 | default: |
| 136 | parseFail = true; |
| 137 | continue; |
| 138 | } |
| 139 | } |
nothing calls this directly
no outgoing calls
no test coverage detected