summaryrefslogtreecommitdiff
path: root/json-glib/json-parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'json-glib/json-parser.c')
-rw-r--r--json-glib/json-parser.c51
1 files changed, 30 insertions, 21 deletions
diff --git a/json-glib/json-parser.c b/json-glib/json-parser.c
index d129774..02524a7 100644
--- a/json-glib/json-parser.c
+++ b/json-glib/json-parser.c
@@ -140,16 +140,12 @@ static guint json_parse_object (JsonParser *parser,
GScanner *scanner,
gboolean nested);
-static void
-json_parser_dispose (GObject *gobject)
+static inline void
+json_parser_clear (JsonParser *parser)
{
- JsonParserPrivate *priv = JSON_PARSER_GET_PRIVATE (gobject);
+ JsonParserPrivate *priv = parser->priv;
- if (priv->root)
- {
- json_node_free (priv->root);
- priv->root = NULL;
- }
+ g_free (priv->variable_name);
if (priv->last_error)
{
@@ -157,7 +153,17 @@ json_parser_dispose (GObject *gobject)
priv->last_error = NULL;
}
- g_free (priv->variable_name);
+ if (priv->root)
+ {
+ json_node_free (priv->root);
+ priv->root = NULL;
+ }
+}
+
+static void
+json_parser_dispose (GObject *gobject)
+{
+ json_parser_clear (JSON_PARSER (gobject));
G_OBJECT_CLASS (json_parser_parent_class)->dispose (gobject);
}
@@ -973,19 +979,13 @@ json_parser_load_from_data (JsonParser *parser,
g_return_val_if_fail (JSON_IS_PARSER (parser), FALSE);
g_return_val_if_fail (data != NULL, FALSE);
- priv = parser->priv;
-
- g_free (priv->variable_name);
-
- if (priv->root)
- {
- json_node_free (priv->root);
- priv->root = NULL;
- }
+ json_parser_clear (parser);
if (length < 0)
length = strlen (data);
+ priv = parser->priv;
+
scanner = json_scanner_new (parser);
g_scanner_input_text (scanner, data, length);
@@ -1069,6 +1069,7 @@ json_parser_load_from_data (JsonParser *parser,
g_signal_emit (parser, parser_signals[PARSE_END], 0);
+ /* remove the scanner */
g_scanner_destroy (scanner);
priv->scanner = NULL;
priv->current_node = NULL;
@@ -1121,7 +1122,11 @@ json_parser_get_root (JsonParser *parser)
*
* Retrieves the line currently parsed, starting from 1.
*
- * Return value: the currently parsed line.
+ * This function has defined behaviour only while parsing; calling this
+ * function from outside the signal handlers emitted by #JsonParser will
+ * yield 0.
+ *
+ * Return value: the currently parsed line, or 0.
*/
guint
json_parser_get_current_line (JsonParser *parser)
@@ -1141,7 +1146,11 @@ json_parser_get_current_line (JsonParser *parser)
* Retrieves the current position inside the current line, starting
* from 0.
*
- * Return value: the position in the current line
+ * This function has defined behaviour only while parsing; calling this
+ * function from outside the signal handlers emitted by #JsonParser will
+ * yield 0.
+ *
+ * Return value: the position in the current line, or 0.
*/
guint
json_parser_get_current_pos (JsonParser *parser)
@@ -1162,7 +1171,7 @@ json_parser_get_current_pos (JsonParser *parser)
* A JSON data stream might sometimes contain an assignment, even though
* it would technically constitute a violation of the RFC. #JsonParser
* will ignore the left hand identifier and parse the right hand value
- * of the assignment. It will record, though, the existence of the
+ * of the assignment. #JsonParser will record, though, the existence of the
* assignment in the data stream and the variable name used.
*
* Return value: %TRUE if there was an assignment, %FALSE otherwise. If