]> ocean-lang.org Git - ocean/commitdiff
parsergen: make sure result in start symbol is returned.
authorNeilBrown <neil@brown.name>
Sat, 31 May 2014 10:12:20 +0000 (20:12 +1000)
committerNeilBrown <neilb@suse.de>
Sun, 15 Jun 2014 07:20:40 +0000 (17:20 +1000)
Because we synthesize production-zero, we need to make sure
to add the relevant 'code' to it to preserve the returned value.

Signed-off-by: NeilBrown <neil@brown.name>
csrc/parsergen.mdc

index 8e088b5b70c5150671f0afbbf84933739c073ef6..f8d8a39c47a8861a079135d6d3753b10b4ddc482 100644 (file)
@@ -540,8 +540,13 @@ where `START` is the first non-terminal given.
        struct production *p = calloc(1,sizeof(*p));
        struct text start = {"$start",6};
        struct text eof = {"$eof",4};
+       struct text code = {"$0 = $<1;", 9};
        p->head = sym_find(g, start);
        p->head->type = Nonterminal;
+       p->head->struct_name = g->current_type;
+       p->head->isref = g->type_isref;
+       if (g->current_type.txt)
+               p->code = code;
        array_add(&p->body, &p->body_size, head);
        array_add(&p->body, &p->body_size, sym_find(g, eof));
        p->head->first_production = g->production_count;