]> andersk Git - libyaml.git/blobdiff - src/parser.c
Removed trailing-whitespaces
[libyaml.git] / src / parser.c
index ed3c019ae6fc4ede9ba8a1f413e914f8f21b799c..dc5430b09fc27c7795606204c6f9ff01ed14ec35 100644 (file)
@@ -172,12 +172,14 @@ yaml_parser_parse(yaml_parser_t *parser, yaml_event_t *event)
     assert(parser);     /* Non-NULL parser object is expected. */
     assert(event);      /* Non-NULL event object is expected. */
 
+    /* Erase the event object. */
+
+    memset(event, 0, sizeof(yaml_event_t));
+
     /* No events after the end of the stream or error. */
 
     if (parser->stream_end_produced || parser->error ||
             parser->state == YAML_PARSE_END_STATE) {
-        memset(event, 0, sizeof(yaml_event_t));
-
         return 1;
     }
 
@@ -317,7 +319,7 @@ yaml_parser_parse_stream_start(yaml_parser_t *parser, yaml_event_t *event)
 
     if (token->type != YAML_STREAM_START_TOKEN) {
         return yaml_parser_set_parser_error(parser,
-                "did not found expected <stream-start>", token->start_mark);
+                "did not find expected <stream-start>", token->start_mark);
     }
 
     parser->state = YAML_PARSE_IMPLICIT_DOCUMENT_START_STATE;
@@ -350,6 +352,17 @@ yaml_parser_parse_document_start(yaml_parser_t *parser, yaml_event_t *event,
     token = PEEK_TOKEN(parser);
     if (!token) return 0;
 
+    /* Parse extra document end indicators. */
+
+    if (!implicit)
+    {
+        while (token->type == YAML_DOCUMENT_END_TOKEN) {
+            SKIP_TOKEN(parser);
+            token = PEEK_TOKEN(parser);
+            if (!token) return 0;
+        }
+    }
+
     /* Parse an implicit document. */
 
     if (implicit && token->type != YAML_VERSION_DIRECTIVE_TOKEN &&
@@ -380,7 +393,7 @@ yaml_parser_parse_document_start(yaml_parser_t *parser, yaml_event_t *event,
         if (!token) goto error;
         if (token->type != YAML_DOCUMENT_START_TOKEN) {
             yaml_parser_set_parser_error(parser,
-                    "did not found expected <document start>", token->start_mark);
+                    "did not find expected <document start>", token->start_mark);
             goto error;
         }
         if (!PUSH(parser, parser->states, YAML_PARSE_DOCUMENT_END_STATE))
@@ -465,11 +478,9 @@ yaml_parser_parse_document_end(yaml_parser_t *parser, yaml_event_t *event)
 
     start_mark = end_mark = token->start_mark;
 
-    while (token->type == YAML_DOCUMENT_END_TOKEN) {
+    if (token->type == YAML_DOCUMENT_END_TOKEN) {
         end_mark = token->end_mark;
         SKIP_TOKEN(parser);
-        token = PEEK_TOKEN(parser);
-        if (!token) return 0;
         implicit = 0;
     }
 
@@ -690,7 +701,7 @@ yaml_parser_parse_node(yaml_parser_t *parser, yaml_event_t *event,
                 yaml_parser_set_parser_error_context(parser,
                         (block ? "while parsing a block node"
                          : "while parsing a flow node"), start_mark,
-                        "did not found expected node content", token->start_mark);
+                        "did not find expected node content", token->start_mark);
                 goto error;
             }
         }
@@ -748,8 +759,9 @@ yaml_parser_parse_block_sequence_entry(yaml_parser_t *parser,
 
     else if (token->type == YAML_BLOCK_END_TOKEN)
     {
+        yaml_mark_t dummy_mark;     /* Used to eliminate a compiler warning. */
         parser->state = POP(parser, parser->states);
-        POP(parser, parser->marks);
+        dummy_mark = POP(parser, parser->marks);
         SEQUENCE_END_EVENT_INIT(*event, token->start_mark, token->end_mark);
         SKIP_TOKEN(parser);
         return 1;
@@ -759,7 +771,7 @@ yaml_parser_parse_block_sequence_entry(yaml_parser_t *parser,
     {
         return yaml_parser_set_parser_error_context(parser,
                 "while parsing a block collection", POP(parser, parser->marks),
-                "did not found expected '-' indicator", token->start_mark);
+                "did not find expected '-' indicator", token->start_mark);
     }
 }
 
@@ -857,8 +869,9 @@ yaml_parser_parse_block_mapping_key(yaml_parser_t *parser,
 
     else if (token->type == YAML_BLOCK_END_TOKEN)
     {
+        yaml_mark_t dummy_mark;     /* Used to eliminate a compiler warning. */
         parser->state = POP(parser, parser->states);
-        POP(parser, parser->marks);
+        dummy_mark = POP(parser, parser->marks);
         MAPPING_END_EVENT_INIT(*event, token->start_mark, token->end_mark);
         SKIP_TOKEN(parser);
         return 1;
@@ -868,7 +881,7 @@ yaml_parser_parse_block_mapping_key(yaml_parser_t *parser,
     {
         return yaml_parser_set_parser_error_context(parser,
                 "while parsing a block mapping", POP(parser, parser->marks),
-                "did not found expected key", token->start_mark);
+                "did not find expected key", token->start_mark);
     }
 }
 
@@ -939,6 +952,7 @@ yaml_parser_parse_flow_sequence_entry(yaml_parser_t *parser,
         yaml_event_t *event, int first)
 {
     yaml_token_t *token;
+    yaml_mark_t dummy_mark;     /* Used to eliminate a compiler warning. */
 
     if (first) {
         token = PEEK_TOKEN(parser);
@@ -961,7 +975,7 @@ yaml_parser_parse_flow_sequence_entry(yaml_parser_t *parser,
             else {
                 return yaml_parser_set_parser_error_context(parser,
                         "while parsing a flow sequence", POP(parser, parser->marks),
-                        "did not found expected ',' or ']'", token->start_mark);
+                        "did not find expected ',' or ']'", token->start_mark);
             }
         }
 
@@ -983,7 +997,7 @@ yaml_parser_parse_flow_sequence_entry(yaml_parser_t *parser,
     }
 
     parser->state = POP(parser, parser->states);
-    POP(parser, parser->marks);
+    dummy_mark = POP(parser, parser->marks);
     SEQUENCE_END_EVENT_INIT(*event, token->start_mark, token->end_mark);
     SKIP_TOKEN(parser);
     return 1;
@@ -1090,6 +1104,7 @@ yaml_parser_parse_flow_mapping_key(yaml_parser_t *parser,
         yaml_event_t *event, int first)
 {
     yaml_token_t *token;
+    yaml_mark_t dummy_mark;     /* Used to eliminate a compiler warning. */
 
     if (first) {
         token = PEEK_TOKEN(parser);
@@ -1112,7 +1127,7 @@ yaml_parser_parse_flow_mapping_key(yaml_parser_t *parser,
             else {
                 return yaml_parser_set_parser_error_context(parser,
                         "while parsing a flow mapping", POP(parser, parser->marks),
-                        "did not found expected ',' or '}'", token->start_mark);
+                        "did not find expected ',' or '}'", token->start_mark);
             }
         }
 
@@ -1143,7 +1158,7 @@ yaml_parser_parse_flow_mapping_key(yaml_parser_t *parser,
     }
 
     parser->state = POP(parser, parser->states);
-    POP(parser, parser->marks);
+    dummy_mark = POP(parser, parser->marks);
     MAPPING_END_EVENT_INIT(*event, token->start_mark, token->end_mark);
     SKIP_TOKEN(parser);
     return 1;
@@ -1250,7 +1265,7 @@ yaml_parser_process_directives(yaml_parser_t *parser,
                 goto error;
             }
             if (token->data.version_directive.major != 1
-                    && token->data.version_directive.minor != 1) {
+                    || token->data.version_directive.minor != 1) {
                 yaml_parser_set_parser_error(parser,
                         "found incompatible YAML document", token->start_mark);
                 goto error;
@@ -1265,10 +1280,10 @@ yaml_parser_process_directives(yaml_parser_t *parser,
         }
 
         else if (token->type == YAML_TAG_DIRECTIVE_TOKEN) {
-            yaml_tag_directive_t value = {
-                token->data.tag_directive.handle,
-                token->data.tag_directive.prefix
-            };
+            yaml_tag_directive_t value;
+            value.handle = token->data.tag_directive.handle;
+            value.prefix = token->data.tag_directive.prefix;
+
             if (!yaml_parser_append_tag_directive(parser, value, 0,
                         token->start_mark))
                 goto error;
@@ -1280,7 +1295,7 @@ yaml_parser_process_directives(yaml_parser_t *parser,
         token = PEEK_TOKEN(parser);
         if (!token) goto error;
     }
-    
+
     for (default_tag_directive = default_tag_directives;
             default_tag_directive->handle; default_tag_directive++) {
         if (!yaml_parser_append_tag_directive(parser, *default_tag_directive, 1,
@@ -1318,6 +1333,10 @@ error:
     return 0;
 }
 
+/*
+ * Append a tag directive to the directives stack.
+ */
+
 static int
 yaml_parser_append_tag_directive(yaml_parser_t *parser,
         yaml_tag_directive_t value, int allow_duplicates, yaml_mark_t mark)
This page took 0.069776 seconds and 4 git commands to generate.