From eae48c8938e50ebb341a72c2886c5ae8587092a5 Mon Sep 17 00:00:00 2001 From: Zefram Date: Tue, 19 Oct 2010 21:16:11 +0100 Subject: refactor and regularise label/statement grammar Refactoring of the grammar around statements. New production encompasses a statement without label. It includes all statement types, including declarations, with no unnecessary intermediate non-terminals. It generates an op tree for the statement's content, with no leading state op. The production has just one rule, consisting of optional label followed by . It puts a state op on the front of the statement's content ops. To support the regular statement op structure, the op sequence for for(;;) loops no longer has a second state op between the initialisation and the loop. Instead, the unstack op type is slightly adapted to achieve the stack clearing without a state op. The newFOROP() constructor function no longer generates a state op, that now being the job of the production. Consequently it no longer takes a parameter stating what label is to go in the state op. This brings it in line with the other op constructors. --- op.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'op.c') diff --git a/op.c b/op.c index f616761818..c082921874 100644 --- a/op.c +++ b/op.c @@ -5429,7 +5429,7 @@ whileline, OP *expr, OP *block, OP *cont, I32 has_my) } /* -=for apidoc Am|OP *|newFOROP|I32 flags|char *label|line_t forline|OP *sv|OP *expr|OP *block|OP *cont +=for apidoc Am|OP *|newFOROP|I32 flags|line_t forline|OP *sv|OP *expr|OP *block|OP *cont Constructs, checks, and returns an op tree expressing a C loop (iteration through a list of values). This is a heavyweight loop, @@ -5447,16 +5447,13 @@ I gives the eight bits of C for the C op and, shifted up eight bits, the eight bits of C for the C op, except that (in both cases) some bits will be set automatically. I is the line number that should be attributed -to the loop's list expression. If I