summaryrefslogtreecommitdiff
path: root/json-glib/json-parser.c
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@linux.intel.com>2010-03-18 17:09:38 +0000
committerEmmanuele Bassi <ebassi@linux.intel.com>2010-03-18 17:11:58 +0000
commit54756457de3f01d1a487fc6b90c5bd9b5b50bcf3 (patch)
tree3444cbd76f94e39ea3978dd041716ee673bd1e26 /json-glib/json-parser.c
parent3355987049560b4d31af22476a7c2b20c9d6665b (diff)
downloadjson-glib-54756457de3f01d1a487fc6b90c5bd9b5b50bcf3.tar.gz
parser: Re-use json_parse_value()
The main switch inside json_parse_statement() is re-implementing the bare value parsing that is also provided by json_parse_value(). We should kill it off to avoid redundant code.
Diffstat (limited to 'json-glib/json-parser.c')
-rw-r--r--json-glib/json-parser.c57
1 files changed, 2 insertions, 55 deletions
diff --git a/json-glib/json-parser.c b/json-glib/json-parser.c
index 082e9b1..4e22572 100644
--- a/json-glib/json-parser.c
+++ b/json-glib/json-parser.c
@@ -841,67 +841,14 @@ json_parse_statement (JsonParser *parser,
break;
case JSON_TOKEN_NULL:
- priv->root = priv->current_node = json_node_new (JSON_NODE_NULL);
- json_scanner_get_next_token (scanner);
- return G_TOKEN_NONE;
-
case JSON_TOKEN_TRUE:
case JSON_TOKEN_FALSE:
- priv->root = priv->current_node = json_node_new (JSON_NODE_VALUE);
- json_node_set_boolean (priv->current_node,
- token == JSON_TOKEN_TRUE ? TRUE : FALSE);
- json_scanner_get_next_token (scanner);
- return G_TOKEN_NONE;
-
case '-':
- {
- guint next_token;
-
- token = json_scanner_get_next_token (scanner);
- next_token = json_scanner_peek_next_token (scanner);
-
- if (next_token == G_TOKEN_INT || next_token == G_TOKEN_FLOAT)
- {
- priv->root = priv->current_node = json_node_new (JSON_NODE_VALUE);
-
- token = json_scanner_get_next_token (scanner);
- switch (token)
- {
- case G_TOKEN_INT:
- json_node_set_int (priv->current_node,
- scanner->value.v_int64 * -1);
- break;
- case G_TOKEN_FLOAT:
- json_node_set_double (priv->current_node,
- scanner->value.v_float * -1.0);
- break;
- default:
- return G_TOKEN_INT;
- }
-
- json_scanner_get_next_token (scanner);
- return G_TOKEN_NONE;
- }
- else
- return G_TOKEN_INT;
- }
- break;
-
case G_TOKEN_INT:
case G_TOKEN_FLOAT:
case G_TOKEN_STRING:
- json_scanner_get_next_token (scanner);
- priv->root = priv->current_node = json_node_new (JSON_NODE_VALUE);
-
- if (token == G_TOKEN_INT)
- json_node_set_int (priv->current_node, scanner->value.v_int64);
- else if (token == G_TOKEN_FLOAT)
- json_node_set_double (priv->current_node, scanner->value.v_float);
- else
- json_node_set_string (priv->current_node, scanner->value.v_string);
-
- json_scanner_get_next_token (scanner);
- return G_TOKEN_NONE;
+ token = json_scanner_get_next_token (scanner);
+ return json_parse_value (parser, scanner, token, &priv->root);
default:
json_scanner_get_next_token (scanner);