+ if(Parse_NextToken(json, 1) != ':')
+ {
+ Parse_Error(json, PARSE_ERR_INVAL, "':'");
+ return NULL;
+ }
+
+ token = Json_Parse_NewToken(json, parent);
+ token->key = (char *)Z_Malloc(length + 1);
+ memcpy(token->key, start, length);
+
+ return Json_Parse_Value(json, parent, token);
+}
+
+static inline qjson_token_t *Json_Parse_Terminator(qparser_state_t *json, qjson_token_t *parent, qjson_token_t *token)
+{
+ switch(Parse_NextToken(json, 0))
+ {
+ case ']':
+ case '}':
+ if(!parent->parent)
+ return parent;
+ return Json_Parse_Terminator(json, parent->parent, NULL);
+ case ',':
+ if(parent->type == JSON_TYPE_ARRAY)
+ return Json_Parse_Single(json, parent, NULL);
+ else
+ return Json_Parse_Pair(json, parent, NULL);
+ default:
+ Parse_Error(json, PARSE_ERR_INVAL, "']', '}', or ','");
+ return NULL;
+ }