diff options
author | Zefram <zefram@fysh.org> | 2010-10-19 21:16:11 +0100 |
---|---|---|
committer | Father Chrysostomos <sprout@cpan.org> | 2010-10-25 12:29:46 -0700 |
commit | eae48c8938e50ebb341a72c2886c5ae8587092a5 (patch) | |
tree | a581082ad6e284de2600033f738b631b475e702e /embed.fnc | |
parent | ff0c75af8a61dcd9e5fa0e07c8c01e142cadd899 (diff) | |
download | perl-eae48c8938e50ebb341a72c2886c5ae8587092a5.tar.gz |
refactor and regularise label/statement grammar
Refactoring of the grammar around statements. New production <barestmt>
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 <fullstmt> production has just one rule, consisting of
optional label followed by <barestmt>. 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 <fullstmt> 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.
Diffstat (limited to 'embed.fnc')
-rw-r--r-- | embed.fnc | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -780,7 +780,7 @@ Ap |OP* |newFORM |I32 floor|NULLOK OP* o|NULLOK OP* block #else Ap |void |newFORM |I32 floor|NULLOK OP* o|NULLOK OP* block #endif -Apda |OP* |newFOROP |I32 flags|NULLOK char* label|line_t forline \ +Apda |OP* |newFOROP |I32 flags|line_t forline \ |NULLOK OP* sv|NN OP* expr|NULLOK OP* block|NULLOK OP* cont Apda |OP* |newGIVENOP |NN OP* cond|NN OP* block|PADOFFSET defsv_off Apda |OP* |newLOGOP |I32 optype|I32 flags|NN OP *first|NN OP *other |