summaryrefslogtreecommitdiff
path: root/json-glib/json-parser.c
diff options
context:
space:
mode:
authorPhilip Withnall <philip.withnall@collabora.co.uk>2016-03-01 15:01:07 +0000
committerEmmanuele Bassi <ebassi@gnome.org>2016-03-01 15:01:07 +0000
commit6ddbc94c9888e5ddcd1cbb15845d2f1b5524b3ed (patch)
treecba11bd7504d1f33e48209d2d67b2fd5f0ef00eb /json-glib/json-parser.c
parent1de237a502ceee96df7091c2df4492b8bc08b2c5 (diff)
downloadjson-glib-6ddbc94c9888e5ddcd1cbb15845d2f1b5524b3ed.tar.gz
core: Add JSON node, object, array hashes
Now that these objects can be marked as immutable, it is possible to calculate and cache hash values for each of them. This allows efficient hash-based deduplication of large numbers of JSON nodes, as needed by Walbottle for JSON test vector generation. To complement the new hash functions, each of JsonNode, JsonValue, JsonObject and JsonArray also now have an equal() comparison method. This compares them structurally and recursively, using the definition of equality from the JSON Schema specification, which seems as good as any other. http://json-schema.org/latest/json-schema-core.html#anchor9 https://bugzilla.gnome.org/show_bug.cgi?id=756121 Signed-off-by: Emmanuele Bassi <ebassi@gnome.org>
Diffstat (limited to 'json-glib/json-parser.c')
-rw-r--r--json-glib/json-parser.c8
1 files changed, 2 insertions, 6 deletions
diff --git a/json-glib/json-parser.c b/json-glib/json-parser.c
index a7b1c32..a48e9b2 100644
--- a/json-glib/json-parser.c
+++ b/json-glib/json-parser.c
@@ -610,9 +610,7 @@ json_parse_array (JsonParser *parser,
array_done:
json_scanner_get_next_token (scanner);
- /* We can guarantee that all the array elements are immutable, so we
- * can skip the formal loop over them to seal them again. */
- array->immutable = TRUE;
+ json_array_seal (array);
json_node_take_array (priv->current_node, array);
if (priv->immutable)
@@ -793,9 +791,7 @@ json_parse_object (JsonParser *parser,
json_scanner_get_next_token (scanner);
- /* We can guarantee that all the object members are immutable, so we
- * can skip the formal loop over them to seal them again. */
- object->immutable = TRUE;
+ json_object_seal (object);
json_node_take_object (priv->current_node, object);
if (priv->immutable)