]> andersk Git - libyaml.git/blobdiff - src/parser.c
Update upstream source from tag 'upstream/0.2.2'
[libyaml.git] / src / parser.c
index 0b5b54377e23b2d4e556bf64bc8e59eb30e9fed7..1198c73704a108ebb0ce3ccd5e9d249d81c55123 100644 (file)
@@ -319,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;
@@ -352,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 &&
@@ -382,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))
@@ -467,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;
     }
 
@@ -596,7 +605,7 @@ yaml_parser_parse_node(yaml_parser_t *parser, yaml_event_t *event,
                     if (strcmp((char *)tag_directive->handle, (char *)tag_handle) == 0) {
                         size_t prefix_len = strlen((char *)tag_directive->prefix);
                         size_t suffix_len = strlen((char *)tag_suffix);
-                        tag = yaml_malloc(prefix_len+suffix_len+1);
+                        tag = YAML_MALLOC(prefix_len+suffix_len+1);
                         if (!tag) {
                             parser->error = YAML_MEMORY_ERROR;
                             goto error;
@@ -676,7 +685,7 @@ yaml_parser_parse_node(yaml_parser_t *parser, yaml_event_t *event,
                 return 1;
             }
             else if (anchor || tag) {
-                yaml_char_t *value = yaml_malloc(1);
+                yaml_char_t *value = YAML_MALLOC(1);
                 if (!value) {
                     parser->error = YAML_MEMORY_ERROR;
                     goto error;
@@ -692,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;
             }
         }
@@ -751,7 +760,7 @@ yaml_parser_parse_block_sequence_entry(yaml_parser_t *parser,
     else if (token->type == YAML_BLOCK_END_TOKEN)
     {
         parser->state = POP(parser, parser->states);
-        POP(parser, parser->marks);
+        (void)POP(parser, parser->marks);
         SEQUENCE_END_EVENT_INIT(*event, token->start_mark, token->end_mark);
         SKIP_TOKEN(parser);
         return 1;
@@ -761,7 +770,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);
     }
 }
 
@@ -860,7 +869,7 @@ yaml_parser_parse_block_mapping_key(yaml_parser_t *parser,
     else if (token->type == YAML_BLOCK_END_TOKEN)
     {
         parser->state = POP(parser, parser->states);
-        POP(parser, parser->marks);
+        (void)POP(parser, parser->marks);
         MAPPING_END_EVENT_INIT(*event, token->start_mark, token->end_mark);
         SKIP_TOKEN(parser);
         return 1;
@@ -870,7 +879,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);
     }
 }
 
@@ -963,7 +972,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);
             }
         }
 
@@ -985,7 +994,7 @@ yaml_parser_parse_flow_sequence_entry(yaml_parser_t *parser,
     }
 
     parser->state = POP(parser, parser->states);
-    POP(parser, parser->marks);
+    (void)POP(parser, parser->marks);
     SEQUENCE_END_EVENT_INIT(*event, token->start_mark, token->end_mark);
     SKIP_TOKEN(parser);
     return 1;
@@ -1114,7 +1123,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);
             }
         }
 
@@ -1145,7 +1154,7 @@ yaml_parser_parse_flow_mapping_key(yaml_parser_t *parser,
     }
 
     parser->state = POP(parser, parser->states);
-    POP(parser, parser->marks);
+    (void)POP(parser, parser->marks);
     MAPPING_END_EVENT_INIT(*event, token->start_mark, token->end_mark);
     SKIP_TOKEN(parser);
     return 1;
@@ -1199,7 +1208,7 @@ yaml_parser_process_empty_scalar(yaml_parser_t *parser, yaml_event_t *event,
 {
     yaml_char_t *value;
 
-    value = yaml_malloc(1);
+    value = YAML_MALLOC(1);
     if (!value) {
         parser->error = YAML_MEMORY_ERROR;
         return 0;
@@ -1236,7 +1245,7 @@ yaml_parser_process_directives(yaml_parser_t *parser,
     } tag_directives = { NULL, NULL, NULL };
     yaml_token_t *token;
 
-    if (!STACK_INIT(parser, tag_directives, INITIAL_STACK_SIZE))
+    if (!STACK_INIT(parser, tag_directives, yaml_tag_directive_t*))
         goto error;
 
     token = PEEK_TOKEN(parser);
@@ -1252,12 +1261,12 @@ 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;
             }
-            version_directive = yaml_malloc(sizeof(yaml_version_directive_t));
+            version_directive = YAML_MALLOC_STATIC(yaml_version_directive_t);
             if (!version_directive) {
                 parser->error = YAML_MEMORY_ERROR;
                 goto error;
@@ -1267,10 +1276,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;
@@ -1282,7 +1291,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,
@@ -1307,6 +1316,8 @@ yaml_parser_process_directives(yaml_parser_t *parser,
         STACK_DEL(parser, tag_directives);
     }
 
+    if (!version_directive_ref)
+        yaml_free(version_directive);
     return 1;
 
 error:
This page took 0.04032 seconds and 4 git commands to generate.