This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
refactor and regularise label/statement grammar
authorZefram <zefram@fysh.org>
Tue, 19 Oct 2010 20:16:11 +0000 (21:16 +0100)
committerFather Chrysostomos <sprout@cpan.org>
Mon, 25 Oct 2010 19:29:46 +0000 (12:29 -0700)
commiteae48c8938e50ebb341a72c2886c5ae8587092a5
treea581082ad6e284de2600033f738b631b475e702e
parentff0c75af8a61dcd9e5fa0e07c8c01e142cadd899
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.
13 files changed:
dist/B-Deparse/Deparse.pm
embed.fnc
embed.h
ext/B/t/f_map.t
ext/B/t/optree_samples.t
op.c
perly.act
perly.tab
perly.y
pp_ctl.c
pp_hot.c
proto.h
t/run/switchd.t