summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZefram <zefram@fysh.org>2010-12-11 01:31:03 +0000
committerFather Chrysostomos <sprout@cpan.org>2010-12-11 16:59:54 -0800
commit78cdf10786e359ee461137c8a18efb13ea76c331 (patch)
treec9510d0ed5c75f7aa97bbe780318c347318b5ce7
parent72aa120d9a32a14196c9e39aa26993909423f096 (diff)
downloadperl-78cdf10786e359ee461137c8a18efb13ea76c331.tar.gz
recursive-descent expression parsing
New API functions parse_fullexpr(), parse_listexpr(), parse_termexpr(), and parse_arithexpr(), to parse an expression at various precedence levels.
-rw-r--r--MANIFEST1
-rw-r--r--embed.fnc4
-rw-r--r--embed.h4
-rw-r--r--ext/XS-APItest/APItest.pm2
-rw-r--r--ext/XS-APItest/APItest.xs67
-rw-r--r--ext/XS-APItest/t/arrayexpr.t366
-rw-r--r--global.sym4
-rw-r--r--parser.h21
-rw-r--r--perly.act799
-rw-r--r--perly.h306
-rw-r--r--perly.tab1564
-rw-r--r--perly.y11
-rw-r--r--proto.h4
-rw-r--r--toke.c501
14 files changed, 2272 insertions, 1382 deletions
diff --git a/MANIFEST b/MANIFEST
index 7a017fc4da..084f8f152c 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -3426,6 +3426,7 @@ ext/XS-APItest/MANIFEST XS::APItest extension
ext/XS-APItest/notcore.c Test API functions when PERL_CORE is not defined
ext/XS-APItest/numeric.xs XS::APItest wrappers for numeric.c
ext/XS-APItest/README XS::APItest extension
+ext/XS-APItest/t/arrayexpr.t test recursive descent expression parsing
ext/XS-APItest/t/BHK.pm Helper for ./blockhooks.t
ext/XS-APItest/t/blockasexpr.t test recursive descent block parsing
ext/XS-APItest/t/blockhooks-csc.t XS::APItest: more tests for PL_blockhooks
diff --git a/embed.fnc b/embed.fnc
index cca7a78a19..ed1cd714c2 100644
--- a/embed.fnc
+++ b/embed.fnc
@@ -627,6 +627,10 @@ AMpd |I32 |lex_peek_unichar|U32 flags
AMpd |I32 |lex_read_unichar|U32 flags
AMpd |void |lex_read_space |U32 flags
: Public parser API
+AMpd |OP* |parse_arithexpr|U32 flags
+AMpd |OP* |parse_termexpr |U32 flags
+AMpd |OP* |parse_listexpr |U32 flags
+AMpd |OP* |parse_fullexpr |U32 flags
AMpd |OP* |parse_block |U32 flags
AMpd |OP* |parse_barestmt |U32 flags
AMpd |SV* |parse_label |U32 flags
diff --git a/embed.h b/embed.h
index 85ec05cda7..5f846f5545 100644
--- a/embed.h
+++ b/embed.h
@@ -380,11 +380,15 @@
#define pack_cat(a,b,c,d,e,f,g) Perl_pack_cat(aTHX_ a,b,c,d,e,f,g)
#define packlist(a,b,c,d,e) Perl_packlist(aTHX_ a,b,c,d,e)
#define pad_findmy(a,b,c) Perl_pad_findmy(aTHX_ a,b,c)
+#define parse_arithexpr(a) Perl_parse_arithexpr(aTHX_ a)
#define parse_barestmt(a) Perl_parse_barestmt(aTHX_ a)
#define parse_block(a) Perl_parse_block(aTHX_ a)
+#define parse_fullexpr(a) Perl_parse_fullexpr(aTHX_ a)
#define parse_fullstmt(a) Perl_parse_fullstmt(aTHX_ a)
#define parse_label(a) Perl_parse_label(aTHX_ a)
+#define parse_listexpr(a) Perl_parse_listexpr(aTHX_ a)
#define parse_stmtseq(a) Perl_parse_stmtseq(aTHX_ a)
+#define parse_termexpr(a) Perl_parse_termexpr(aTHX_ a)
#define pmop_dump(a) Perl_pmop_dump(aTHX_ a)
#define pop_scope() Perl_pop_scope(aTHX)
#define pregcomp(a,b) Perl_pregcomp(aTHX_ a,b)
diff --git a/ext/XS-APItest/APItest.pm b/ext/XS-APItest/APItest.pm
index 1427e0dc4d..6c3e48a4a4 100644
--- a/ext/XS-APItest/APItest.pm
+++ b/ext/XS-APItest/APItest.pm
@@ -36,7 +36,7 @@ sub import {
}
}
foreach (keys %{$exports||{}}) {
- next unless /\A(?:rpn|calcrpn|stufftest|swaptwostmts|looprest|scopelessblock|stmtasexpr|stmtsasexpr|loopblock|blockasexpr|swaplabel|labelconst)\z/;
+ next unless /\A(?:rpn|calcrpn|stufftest|swaptwostmts|looprest|scopelessblock|stmtasexpr|stmtsasexpr|loopblock|blockasexpr|swaplabel|labelconst|arrayfullexpr|arraylistexpr|arraytermexpr|arrayarithexpr|arrayexprflags)\z/;
$^H{"XS::APItest/$_"} = 1;
delete $exports->{$_};
}
diff --git a/ext/XS-APItest/APItest.xs b/ext/XS-APItest/APItest.xs
index 03bbc921f8..dda137f72d 100644
--- a/ext/XS-APItest/APItest.xs
+++ b/ext/XS-APItest/APItest.xs
@@ -601,6 +601,9 @@ static SV *hintkey_scopelessblock_sv;
static SV *hintkey_stmtasexpr_sv, *hintkey_stmtsasexpr_sv;
static SV *hintkey_loopblock_sv, *hintkey_blockasexpr_sv;
static SV *hintkey_swaplabel_sv, *hintkey_labelconst_sv;
+static SV *hintkey_arrayfullexpr_sv, *hintkey_arraylistexpr_sv;
+static SV *hintkey_arraytermexpr_sv, *hintkey_arrayarithexpr_sv;
+static SV *hintkey_arrayexprflags_sv;
static int (*next_keyword_plugin)(pTHX_ char *, STRLEN, OP **);
/* low-level parser helpers */
@@ -849,6 +852,45 @@ static OP *THX_parse_keyword_labelconst(pTHX)
return newSVOP(OP_CONST, 0, parse_label(0));
}
+#define parse_keyword_arrayfullexpr() THX_parse_keyword_arrayfullexpr(aTHX)
+static OP *THX_parse_keyword_arrayfullexpr(pTHX)
+{
+ return newANONLIST(parse_fullexpr(0));
+}
+
+#define parse_keyword_arraylistexpr() THX_parse_keyword_arraylistexpr(aTHX)
+static OP *THX_parse_keyword_arraylistexpr(pTHX)
+{
+ return newANONLIST(parse_listexpr(0));
+}
+
+#define parse_keyword_arraytermexpr() THX_parse_keyword_arraytermexpr(aTHX)
+static OP *THX_parse_keyword_arraytermexpr(pTHX)
+{
+ return newANONLIST(parse_termexpr(0));
+}
+
+#define parse_keyword_arrayarithexpr() THX_parse_keyword_arrayarithexpr(aTHX)
+static OP *THX_parse_keyword_arrayarithexpr(pTHX)
+{
+ return newANONLIST(parse_arithexpr(0));
+}
+
+#define parse_keyword_arrayexprflags() THX_parse_keyword_arrayexprflags(aTHX)
+static OP *THX_parse_keyword_arrayexprflags(pTHX)
+{
+ U32 flags = 0;
+ I32 c;
+ OP *o;
+ lex_read_space(0);
+ c = lex_peek_unichar(0);
+ if (c != '!' && c != '?') croak("syntax error");
+ lex_read_unichar(0);
+ if (c == '?') flags |= PARSE_OPTIONAL;
+ o = parse_listexpr(flags);
+ return o ? newANONLIST(o) : newANONHASH(newOP(OP_STUB, 0));
+}
+
/* plugin glue */
#define keyword_active(hintkey_sv) THX_keyword_active(aTHX_ hintkey_sv)
@@ -913,6 +955,26 @@ static int my_keyword_plugin(pTHX_
keyword_active(hintkey_labelconst_sv)) {
*op_ptr = parse_keyword_labelconst();
return KEYWORD_PLUGIN_EXPR;
+ } else if(keyword_len == 13 && strnEQ(keyword_ptr, "arrayfullexpr", 13) &&
+ keyword_active(hintkey_arrayfullexpr_sv)) {
+ *op_ptr = parse_keyword_arrayfullexpr();
+ return KEYWORD_PLUGIN_EXPR;
+ } else if(keyword_len == 13 && strnEQ(keyword_ptr, "arraylistexpr", 13) &&
+ keyword_active(hintkey_arraylistexpr_sv)) {
+ *op_ptr = parse_keyword_arraylistexpr();
+ return KEYWORD_PLUGIN_EXPR;
+ } else if(keyword_len == 13 && strnEQ(keyword_ptr, "arraytermexpr", 13) &&
+ keyword_active(hintkey_arraytermexpr_sv)) {
+ *op_ptr = parse_keyword_arraytermexpr();
+ return KEYWORD_PLUGIN_EXPR;
+ } else if(keyword_len == 14 && strnEQ(keyword_ptr, "arrayarithexpr", 14) &&
+ keyword_active(hintkey_arrayarithexpr_sv)) {
+ *op_ptr = parse_keyword_arrayarithexpr();
+ return KEYWORD_PLUGIN_EXPR;
+ } else if(keyword_len == 14 && strnEQ(keyword_ptr, "arrayexprflags", 14) &&
+ keyword_active(hintkey_arrayexprflags_sv)) {
+ *op_ptr = parse_keyword_arrayexprflags();
+ return KEYWORD_PLUGIN_EXPR;
} else {
return next_keyword_plugin(aTHX_ keyword_ptr, keyword_len, op_ptr);
}
@@ -2659,6 +2721,11 @@ BOOT:
hintkey_blockasexpr_sv = newSVpvs_share("XS::APItest/blockasexpr");
hintkey_swaplabel_sv = newSVpvs_share("XS::APItest/swaplabel");
hintkey_labelconst_sv = newSVpvs_share("XS::APItest/labelconst");
+ hintkey_arrayfullexpr_sv = newSVpvs_share("XS::APItest/arrayfullexpr");
+ hintkey_arraylistexpr_sv = newSVpvs_share("XS::APItest/arraylistexpr");
+ hintkey_arraytermexpr_sv = newSVpvs_share("XS::APItest/arraytermexpr");
+ hintkey_arrayarithexpr_sv = newSVpvs_share("XS::APItest/arrayarithexpr");
+ hintkey_arrayexprflags_sv = newSVpvs_share("XS::APItest/arrayexprflags");
next_keyword_plugin = PL_keyword_plugin;
PL_keyword_plugin = my_keyword_plugin;
}
diff --git a/ext/XS-APItest/t/arrayexpr.t b/ext/XS-APItest/t/arrayexpr.t
new file mode 100644
index 0000000000..01a43cb843
--- /dev/null
+++ b/ext/XS-APItest/t/arrayexpr.t
@@ -0,0 +1,366 @@
+use warnings;
+use strict;
+
+use Test::More tests => 2*10;
+
+BEGIN { $^H |= 0x20000; }
+
+my @t;
+
+sub mymap(&@) { my $sub = shift; return map { $sub->($_) } @_; }
+sub myneg(@) { return map { -$_ } @_; }
+package AA { sub listmeth { shift; return map { -$_ } @_; } }
+
+@t = ();
+eval q{
+ use XS::APItest qw(arrayfullexpr);
+ no warnings "void";
+ push @t, arrayfullexpr 1+2;
+ push @t, arrayfullexpr 0 || 2;
+ push @t, arrayfullexpr 1 || 2;
+ push @t, arrayfullexpr 0 || 2, 3;
+ push @t, arrayfullexpr 1 || 2, 3;
+ push @t, arrayfullexpr 1, 2;
+ push @t, arrayfullexpr 0 or 2;
+ push @t, arrayfullexpr 1 or 2;
+ push @t, arrayfullexpr 0 or 2, 3;
+ push @t, arrayfullexpr 1 or 2, 3;
+ { push @t, arrayfullexpr 1, 2 }
+ push @t, (arrayfullexpr 1, 2), 3;
+ push @t, arrayfullexpr do { 1; 1 }, 2;
+ push @t, arrayfullexpr 3, 4 if 1;
+ push @t, arrayfullexpr 5, 6 if 0;
+ push @t, arrayfullexpr (7, 8), 9;
+ push @t, arrayfullexpr a => "b";
+ push @t, arrayfullexpr 1 ? reverse 2, 3 : 4, 5;
+ push @t, arrayfullexpr 0 ? reverse 2, 3 : 4, 5;
+ push @t, 1 ? reverse arrayfullexpr 2, 3 : 4, 5;
+ push @t, 0 ? reverse arrayfullexpr 2, 3 : 4, 5;
+ push @t, arrayfullexpr reverse 1, 2, 3;
+ push @t, sub { arrayfullexpr return 1, 2, 3 }->();
+ push @t, arrayfullexpr myneg 1, 2, 3;
+ push @t, arrayfullexpr map { -$_ } 1, 2, 3;
+ push @t, arrayfullexpr mymap { -$_[0] } 1, 2, 3;
+ push @t, arrayfullexpr AA->listmeth(1, 2), 3;
+ push @t, arrayfullexpr listmeth AA (1, 2), 3;
+ push @t, arrayfullexpr listmeth AA 1, 2, 3;
+ push @t, arrayfullexpr not 1, 2;
+ push @t, arrayfullexpr reverse 6, 7, 8 or 9;
+ push @t, arrayfullexpr reverse 6, 7, 8 and 9;
+ push @t, arrayfullexpr 1 << 2;
+ push @t, arrayfullexpr 7 < 8;
+};
+is $@, "";
+is_deeply \@t, [
+ [3],
+ [2],
+ [1],
+ [2,3],
+ [1,3],
+ [1,2],
+ [2],
+ [1],
+ [2,3],
+ [1],
+ [1,2],
+ [1,2], 3,
+ [1,2],
+ [3,4],
+ [7,8,9],
+ ["a","b"],
+ [3,2,5],
+ [4,5],
+ [2,3], 5,
+ 4, 5,
+ [3,2,1],
+ 1, 2, 3,
+ [-1,-2,-3],
+ [-1,-2,-3],
+ [-1,-2,-3],
+ [-1,-2,3],
+ [-1,-2,3],
+ [-1,-2,-3],
+ [!1],
+ [876],
+ [9],
+ [4],
+ [!!1],
+];
+
+@t = ();
+eval q{
+ use XS::APItest qw(arraylistexpr);
+ no warnings "void";
+ push @t, arraylistexpr 1+2;
+ push @t, arraylistexpr 0 || 2;
+ push @t, arraylistexpr 1 || 2;
+ push @t, arraylistexpr 0 || 2, 3;
+ push @t, arraylistexpr 1 || 2, 3;
+ push @t, arraylistexpr 1, 2;
+ push @t, arraylistexpr 0 or 2;
+ push @t, arraylistexpr 1 or 2;
+ push @t, arraylistexpr 0 or 2, 3;
+ push @t, arraylistexpr 1 or 2, 3;
+ { push @t, arraylistexpr 1, 2 }
+ push @t, (arraylistexpr 1, 2), 3;
+ push @t, arraylistexpr do { 1; 1 }, 2;
+ push @t, arraylistexpr 3, 4 if 1;
+ push @t, arraylistexpr 5, 6 if 0;
+ push @t, arraylistexpr (7, 8), 9;
+ push @t, arraylistexpr a => "b";
+ push @t, arraylistexpr 1 ? reverse 2, 3 : 4, 5;
+ push @t, arraylistexpr 0 ? reverse 2, 3 : 4, 5;
+ push @t, 1 ? reverse arraylistexpr 2, 3 : 4, 5;
+ push @t, 0 ? reverse arraylistexpr 2, 3 : 4, 5;
+ push @t, arraylistexpr reverse 1, 2, 3;
+ push @t, sub { arraylistexpr return 1, 2, 3 }->();
+ push @t, arraylistexpr myneg 1, 2, 3;
+ push @t, arraylistexpr map { -$_ } 1, 2, 3;
+ push @t, arraylistexpr mymap { -$_[0] } 1, 2, 3;
+ push @t, arraylistexpr AA->listmeth(1, 2), 3;
+ push @t, arraylistexpr listmeth AA (1, 2), 3;
+ push @t, arraylistexpr listmeth AA 1, 2, 3;
+ push @t, arraylistexpr not 1, 2;
+ push @t, arraylistexpr reverse 6, 7, 8 or 9;
+ push @t, arraylistexpr reverse 6, 7, 8 and 9;
+ push @t, arraylistexpr 1 << 2;
+ push @t, arraylistexpr 7 < 8;
+};
+is $@, "";
+is_deeply \@t, [
+ [3],
+ [2],
+ [1],
+ [2,3],
+ [1,3],
+ [1,2],
+ [0],
+ [1],
+ [0],
+ [1],
+ [1,2],
+ [1,2], 3,
+ [1,2],
+ [3,4],
+ [7,8,9],
+ ["a","b"],
+ [3,2,5],
+ [4,5],
+ [2,3], 5,
+ 4, 5,
+ [3,2,1],
+ 1, 2, 3,
+ [-1,-2,-3],
+ [-1,-2,-3],
+ [-1,-2,-3],
+ [-1,-2,3],
+ [-1,-2,3],
+ [-1,-2,-3],
+ [!1],
+ [8,7,6],
+ [8,7,6],
+ [4],
+ [!!1],
+];
+
+@t = ();
+eval q{
+ use XS::APItest qw(arraytermexpr);
+ no warnings "void";
+ push @t, arraytermexpr 1+2;
+ push @t, arraytermexpr 0 || 2;
+ push @t, arraytermexpr 1 || 2;
+ push @t, arraytermexpr 0 || 2, 3;
+ push @t, arraytermexpr 1 || 2, 3;
+ push @t, arraytermexpr 1, 2;
+ push @t, arraytermexpr 0 or 2;
+ push @t, arraytermexpr 1 or 2;
+ push @t, arraytermexpr 0 or 2, 3;
+ push @t, arraytermexpr 1 or 2, 3;
+ { push @t, arraytermexpr 1 }
+ push @t, (arraytermexpr 1, 2), 3;
+ push @t, arraytermexpr do { 1; 1 }, 2;
+ push @t, arraytermexpr 3, 4 if 1;
+ push @t, arraytermexpr 5, 6 if 0;
+ push @t, arraytermexpr (7, 8), 9;
+ push @t, arraytermexpr a => "b";
+ push @t, arraytermexpr 1 ? reverse 2, 3 : 4, 5;
+ push @t, arraytermexpr 0 ? reverse 2, 3 : 4, 5;
+ push @t, 1 ? reverse arraytermexpr 2, 3 : 4, 5;
+ push @t, 0 ? reverse arraytermexpr 2, 3 : 4, 5;
+ push @t, arraytermexpr reverse 1, 2, 3;
+ push @t, sub { arraytermexpr return 1, 2, 3 }->();
+ push @t, arraytermexpr myneg 1, 2, 3;
+ push @t, arraytermexpr map { -$_ } 1, 2, 3;
+ push @t, arraytermexpr mymap { -$_[0] } 1, 2, 3;
+ push @t, arraytermexpr AA->listmeth(1, 2), 3;
+ push @t, arraytermexpr listmeth AA (1, 2), 3;
+ push @t, arraytermexpr listmeth AA 1, 2, 3;
+ push @t, arraytermexpr not 1, 2;
+ push @t, arraytermexpr reverse 6, 7, 8 or 9;
+ push @t, arraytermexpr reverse 6, 7, 8 and 9;
+ push @t, arraytermexpr 1 << 2;
+ push @t, arraytermexpr 7 < 8;
+};
+is $@, "";
+is_deeply \@t, [
+ [3],
+ [2],
+ [1],
+ [2], 3,
+ [1], 3,
+ [1], 2,
+ [0],
+ [1],
+ [0],
+ [1],
+ [1],
+ [1], 2, 3,
+ [1], 2,
+ [3], 4,
+ [7,8], 9,
+ ["a"], "b",
+ [3,2], 5,
+ [4], 5,
+ 3, [2], 5,
+ 4, 5,
+ [3,2,1],
+ 1, 2, 3,
+ [-1,-2,-3],
+ [-1,-2,-3],
+ [-1,-2,-3],
+ [-1,-2], 3,
+ [-1,-2], 3,
+ [-1,-2,-3],
+ [!1],
+ [8,7,6],
+ [8,7,6],
+ [4],
+ [!!1],
+];
+
+@t = ();
+eval q{
+ use XS::APItest qw(arrayarithexpr);
+ no warnings "void";
+ push @t, arrayarithexpr 1+2;
+ push @t, arrayarithexpr 0 || 2;
+ push @t, arrayarithexpr 1 || 2;
+ push @t, arrayarithexpr 0 || 2, 3;
+ push @t, arrayarithexpr 1 || 2, 3;
+ push @t, arrayarithexpr 1, 2;
+ push @t, arrayarithexpr 0 or 2;
+ push @t, arrayarithexpr 1 or 2;
+ push @t, arrayarithexpr 0 or 2, 3;
+ push @t, arrayarithexpr 1 or 2, 3;
+ { push @t, arrayarithexpr 1 }
+ push @t, (arrayarithexpr 1, 2), 3;
+ push @t, arrayarithexpr do { 1; 1 }, 2;
+ push @t, arrayarithexpr 3, 4 if 1;
+ push @t, arrayarithexpr 5, 6 if 0;
+ push @t, arrayarithexpr (7, 8), 9;
+ push @t, arrayarithexpr a => "b";
+ push @t, arrayarithexpr 1 ? reverse 2, 3 : 4, 5;
+ push @t, arrayarithexpr 0 ? reverse 2, 3 : 4, 5;
+ push @t, 1 ? reverse arrayarithexpr 2, 3 : 4, 5;
+ push @t, 0 ? reverse arrayarithexpr 2, 3 : 4, 5;
+ push @t, arrayarithexpr reverse 1, 2, 3;
+ push @t, sub { arrayarithexpr return 1, 2, 3 }->();
+ push @t, arrayarithexpr myneg 1, 2, 3;
+ push @t, arrayarithexpr map { -$_ } 1, 2, 3;
+ push @t, arrayarithexpr mymap { -$_[0] } 1, 2, 3;
+ push @t, arrayarithexpr AA->listmeth(1, 2), 3;
+ push @t, arrayarithexpr listmeth AA (1, 2), 3;
+ push @t, arrayarithexpr listmeth AA 1, 2, 3;
+ push @t, arrayarithexpr not 1, 2;
+ push @t, arrayarithexpr reverse 6, 7, 8 or 9;
+ push @t, arrayarithexpr reverse 6, 7, 8 and 9;
+ push @t, arrayarithexpr 1 << 2;
+ push @t, arrayarithexpr 7 < 8;
+};
+is $@, "";
+is_deeply \@t, [
+ [3],
+ [0],
+ [1],
+ [0], 3,
+ [1], 3,
+ [1], 2,
+ [0],
+ [1],
+ [0],
+ [1],
+ [1],
+ [1], 2, 3,
+ [1], 2,
+ [3], 4,
+ [7,8], 9,
+ ["a"], "b",
+ 3, 2, 5,
+ 3, 2, 5,
+ 3, [2], 5,
+ 4, 5,
+ [3,2,1],
+ 1, 2, 3,
+ [-1,-2,-3],
+ [-1,-2,-3],
+ [-1,-2,-3],
+ [-1,-2], 3,
+ [-1,-2], 3,
+ [-1,-2,-3],
+ [!1],
+ [8,7,6],
+ [8,7,6],
+ [4],
+ !!0,
+];
+
+@t = ();
+eval q{
+ use XS::APItest qw(arrayexprflags);
+ push @t, arrayexprflags! 1, 2;
+};
+is $@, "";
+is_deeply \@t, [ [1,2] ];
+
+@t = ();
+eval q{
+ use XS::APItest qw(arrayexprflags);
+ push @t, arrayexprflags? 1, 2;
+};
+is $@, "";
+is_deeply \@t, [ [1,2] ];
+
+@t = ();
+eval q{
+ use XS::APItest qw(arrayexprflags);
+ push @t, arrayexprflags! [);
+};
+like $@, qr/\A(?:Parse|syntax) error/;
+is_deeply \@t, [];
+
+@t = ();
+eval q{
+ use XS::APItest qw(arrayexprflags);
+ push @t, arrayexprflags? [);
+};
+like $@, qr/\A(?:Parse|syntax) error/;
+is_deeply \@t, [];
+
+@t = ();
+eval q{
+ use XS::APItest qw(arrayexprflags);
+ push @t, arrayexprflags! ;
+};
+like $@, qr/\A(?:Parse|syntax) error/;
+is_deeply \@t, [];
+
+@t = ();
+eval q{
+ use XS::APItest qw(arrayexprflags);
+ push @t, arrayexprflags? ;
+};
+is $@, "";
+is_deeply \@t, [ {} ];
+
+1;
diff --git a/global.sym b/global.sym
index 3831f004f9..cf19e6cf28 100644
--- a/global.sym
+++ b/global.sym
@@ -431,11 +431,15 @@ Perl_pack_cat
Perl_packlist
Perl_pad_findmy
Perl_pad_push
+Perl_parse_arithexpr
Perl_parse_barestmt
Perl_parse_block
+Perl_parse_fullexpr
Perl_parse_fullstmt
Perl_parse_label
+Perl_parse_listexpr
Perl_parse_stmtseq
+Perl_parse_termexpr
perl_alloc
perl_construct
perl_destruct
diff --git a/parser.h b/parser.h
index e2769a7cca..e4a06dc554 100644
--- a/parser.h
+++ b/parser.h
@@ -39,7 +39,7 @@ typedef struct yy_parser {
/* lexer state */
- I32 lex_brackets; /* bracket count */
+ I32 lex_brackets; /* square and curly bracket count */
I32 lex_casemods; /* casemod count */
char *lex_brackstack;/* what kind of brackets to pop */
char *lex_casestack; /* what kind of case mods in effect */
@@ -61,7 +61,7 @@ typedef struct yy_parser {
char multi_close; /* delimiter of said string */
char pending_ident; /* pending identifier lookup */
bool preambled;
- /* XXX I32 space */
+ I32 lex_allbrackets;/* (), [], {}, ?: bracket count */
SUBLEXINFO sublex_info;
SV *linestr; /* current chunk of src text */
char *bufptr;
@@ -106,6 +106,7 @@ typedef struct yy_parser {
char tokenbuf[256];
bool in_pod; /* lexer is within a =pod section */
+ U8 lex_fakeeof; /* precedence at which to fake EOF */
} yy_parser;
/* flags for lexer API */
@@ -115,6 +116,22 @@ typedef struct yy_parser {
/* flags for parser API */
#define PARSE_OPTIONAL 0x00000001
+/* values for lex_fakeeof */
+enum {
+ LEX_FAKEEOF_NEVER, /* don't fake EOF */
+ LEX_FAKEEOF_CLOSING, /* fake EOF at unmatched closing punctuation */
+ LEX_FAKEEOF_NONEXPR, /* ... and at token that can't be in expression */
+ LEX_FAKEEOF_LOWLOGIC, /* ... and at low-precedence logic operator */
+ LEX_FAKEEOF_COMMA, /* ... and at comma */
+ LEX_FAKEEOF_ASSIGN, /* ... and at assignment operator */
+ LEX_FAKEEOF_IFELSE, /* ... and at ?: operator */
+ LEX_FAKEEOF_RANGE, /* ... and at range operator */
+ LEX_FAKEEOF_LOGIC, /* ... and at logic operator */
+ LEX_FAKEEOF_BITWISE, /* ... and at bitwise operator */
+ LEX_FAKEEOF_COMPARE, /* ... and at comparison operator */
+ LEX_FAKEEOF_MAX
+};
+
/*
* Local variables:
* c-indentation-style: bsd
diff --git a/perly.act b/perly.act
index c3aed71c30..98bef36c23 100644
--- a/perly.act
+++ b/perly.act
@@ -16,30 +16,27 @@ case 2:
case 4:
#line 152 "perly.y"
{
- parser->expect = XBLOCK;
+ parser->expect = XTERM;
;}
break;
case 5:
#line 156 "perly.y"
{
- PL_pad_reset_pending = TRUE;
PL_eval_root = (ps[(3) - (3)].val.opval);
(yyval.ival) = 0;
- yyunlex();
- parser->yychar = YYEOF;
;}
break;
case 6:
-#line 164 "perly.y"
+#line 161 "perly.y"
{
- parser->expect = XSTATE;
+ parser->expect = XBLOCK;
;}
break;
case 7:
-#line 168 "perly.y"
+#line 165 "perly.y"
{
PL_pad_reset_pending = TRUE;
PL_eval_root = (ps[(3) - (3)].val.opval);
@@ -50,14 +47,14 @@ case 2:
break;
case 8:
-#line 176 "perly.y"
+#line 173 "perly.y"
{
parser->expect = XSTATE;
;}
break;
case 9:
-#line 180 "perly.y"
+#line 177 "perly.y"
{
PL_pad_reset_pending = TRUE;
PL_eval_root = (ps[(3) - (3)].val.opval);
@@ -68,22 +65,40 @@ case 2:
break;
case 10:
-#line 188 "perly.y"
+#line 185 "perly.y"
{
parser->expect = XSTATE;
;}
break;
case 11:
-#line 192 "perly.y"
+#line 189 "perly.y"
{
+ PL_pad_reset_pending = TRUE;
PL_eval_root = (ps[(3) - (3)].val.opval);
(yyval.ival) = 0;
+ yyunlex();
+ parser->yychar = YYEOF;
;}
break;
case 12:
-#line 200 "perly.y"
+#line 197 "perly.y"
+ {
+ parser->expect = XSTATE;
+ ;}
+ break;
+
+ case 13:
+#line 201 "perly.y"
+ {
+ PL_eval_root = (ps[(3) - (3)].val.opval);
+ (yyval.ival) = 0;
+ ;}
+ break;
+
+ case 14:
+#line 209 "perly.y"
{ if (PL_parser->copline > (line_t)IVAL((ps[(1) - (4)].val.i_tkval)))
PL_parser->copline = (line_t)IVAL((ps[(1) - (4)].val.i_tkval));
(yyval.opval) = block_end((ps[(2) - (4)].val.ival), (ps[(3) - (4)].val.opval));
@@ -92,18 +107,18 @@ case 2:
;}
break;
- case 13:
-#line 209 "perly.y"
+ case 15:
+#line 218 "perly.y"
{ (yyval.ival) = block_start(TRUE); ;}
break;
- case 14:
-#line 213 "perly.y"
+ case 16:
+#line 222 "perly.y"
{ (yyval.ival) = (I32) Perl_allocmy(aTHX_ STR_WITH_LEN("$_"), 0); ;}
break;
- case 15:
-#line 217 "perly.y"
+ case 17:
+#line 226 "perly.y"
{ if (PL_parser->copline > (line_t)IVAL((ps[(1) - (4)].val.i_tkval)))
PL_parser->copline = (line_t)IVAL((ps[(1) - (4)].val.i_tkval));
(yyval.opval) = block_end((ps[(2) - (4)].val.ival), (ps[(3) - (4)].val.opval));
@@ -112,18 +127,18 @@ case 2:
;}
break;
- case 16:
-#line 226 "perly.y"
+ case 18:
+#line 235 "perly.y"
{ (yyval.ival) = block_start(FALSE); ;}
break;
- case 17:
-#line 231 "perly.y"
+ case 19:
+#line 240 "perly.y"
{ (yyval.opval) = (OP*)NULL; ;}
break;
- case 18:
-#line 233 "perly.y"
+ case 20:
+#line 242 "perly.y"
{ (yyval.opval) = op_append_list(OP_LINESEQ, (ps[(1) - (2)].val.opval), (ps[(2) - (2)].val.opval));
PL_pad_reset_pending = TRUE;
if ((ps[(1) - (2)].val.opval) && (ps[(2) - (2)].val.opval))
@@ -131,8 +146,8 @@ case 2:
;}
break;
- case 19:
-#line 242 "perly.y"
+ case 21:
+#line 251 "perly.y"
{
if (PVAL((ps[(1) - (2)].val.p_tkval)) || (ps[(2) - (2)].val.opval)) {
(yyval.opval) = newSTATEOP(0, PVAL((ps[(1) - (2)].val.p_tkval)), (ps[(2) - (2)].val.opval));
@@ -144,21 +159,21 @@ case 2:
;}
break;
- case 20:
-#line 255 "perly.y"
+ case 22:
+#line 264 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
break;
- case 21:
-#line 257 "perly.y"
+ case 23:
+#line 266 "perly.y"
{
(yyval.opval) = newOP(OP_NULL,0);
TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'p');
;}
break;
- case 22:
-#line 262 "perly.y"
+ case 24:
+#line 271 "perly.y"
{
CV *fmtcv = PL_compcv;
SvREFCNT_inc_simple_void(PL_compcv);
@@ -178,8 +193,8 @@ case 2:
;}
break;
- case 23:
-#line 280 "perly.y"
+ case 25:
+#line 289 "perly.y"
{
SvREFCNT_inc_simple_void(PL_compcv);
#ifdef MAD
@@ -202,8 +217,8 @@ case 2:
;}
break;
- case 24:
-#line 301 "perly.y"
+ case 26:
+#line 310 "perly.y"
{
/* Unimplemented "my sub foo { }" */
SvREFCNT_inc_simple_void(PL_compcv);
@@ -217,8 +232,8 @@ case 2:
;}
break;
- case 25:
-#line 313 "perly.y"
+ case 27:
+#line 322 "perly.y"
{
#ifdef MAD
(yyval.opval) = package((ps[(3) - (4)].val.opval));
@@ -235,13 +250,13 @@ case 2:
;}
break;
- case 26:
-#line 328 "perly.y"
+ case 28:
+#line 337 "perly.y"
{ CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ ;}
break;
- case 27:
-#line 330 "perly.y"
+ case 29:
+#line 339 "perly.y"
{
SvREFCNT_inc_simple_void(PL_compcv);
#ifdef MAD
@@ -258,8 +273,8 @@ case 2:
;}
break;
- case 28:
-#line 345 "perly.y"
+ case 30:
+#line 354 "perly.y"
{
(yyval.opval) = block_end((ps[(3) - (7)].val.ival),
newCONDOP(0, (ps[(4) - (7)].val.opval), op_scope((ps[(6) - (7)].val.opval)), (ps[(7) - (7)].val.opval)));
@@ -270,8 +285,8 @@ case 2:
;}
break;
- case 29:
-#line 354 "perly.y"
+ case 31:
+#line 363 "perly.y"
{
(yyval.opval) = block_end((ps[(3) - (7)].val.ival),
newCONDOP(0, (ps[(4) - (7)].val.opval), op_scope((ps[(6) - (7)].val.opval)), (ps[(7) - (7)].val.opval)));
@@ -282,8 +297,8 @@ case 2:
;}
break;
- case 30:
-#line 363 "perly.y"
+ case 32:
+#line 372 "perly.y"
{
(yyval.opval) = block_end((ps[(3) - (7)].val.ival),
newGIVENOP((ps[(5) - (7)].val.opval), op_scope((ps[(7) - (7)].val.opval)), (PADOFFSET)(ps[(4) - (7)].val.ival)));
@@ -291,18 +306,18 @@ case 2:
;}
break;
- case 31:
-#line 369 "perly.y"
+ case 33:
+#line 378 "perly.y"
{ (yyval.opval) = block_end((ps[(3) - (6)].val.ival), newWHENOP((ps[(4) - (6)].val.opval), op_scope((ps[(6) - (6)].val.opval)))); ;}
break;
- case 32:
-#line 371 "perly.y"
+ case 34:
+#line 380 "perly.y"
{ (yyval.opval) = newWHENOP(0, op_scope((ps[(2) - (2)].val.opval))); ;}
break;
- case 33:
-#line 373 "perly.y"
+ case 35:
+#line 382 "perly.y"
{
(yyval.opval) = block_end((ps[(3) - (8)].val.ival),
newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
@@ -314,8 +329,8 @@ case 2:
;}
break;
- case 34:
-#line 383 "perly.y"
+ case 36:
+#line 392 "perly.y"
{
(yyval.opval) = block_end((ps[(3) - (8)].val.ival),
newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
@@ -327,8 +342,8 @@ case 2:
;}
break;
- case 35:
-#line 394 "perly.y"
+ case 37:
+#line 403 "perly.y"
{
OP *initop = IF_MAD((ps[(4) - (11)].val.opval) ? (ps[(4) - (11)].val.opval) : newOP(OP_NULL, 0), (ps[(4) - (11)].val.opval));
OP *forop = newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
@@ -350,8 +365,8 @@ case 2:
;}
break;
- case 36:
-#line 414 "perly.y"
+ case 38:
+#line 423 "perly.y"
{
(yyval.opval) = block_end((ps[(3) - (9)].val.ival), newFOROP(0, (ps[(4) - (9)].val.opval), (ps[(6) - (9)].val.opval), (ps[(8) - (9)].val.opval), (ps[(9) - (9)].val.opval)));
TOKEN_GETMAD((ps[(1) - (9)].val.i_tkval),(yyval.opval),'W');
@@ -362,8 +377,8 @@ case 2:
;}
break;
- case 37:
-#line 423 "perly.y"
+ case 39:
+#line 432 "perly.y"
{
(yyval.opval) = block_end((ps[(4) - (8)].val.ival), newFOROP(0,
op_lvalue((ps[(2) - (8)].val.opval), OP_ENTERLOOP), (ps[(5) - (8)].val.opval), (ps[(7) - (8)].val.opval), (ps[(8) - (8)].val.opval)));
@@ -374,8 +389,8 @@ case 2:
;}
break;
- case 38:
-#line 432 "perly.y"
+ case 40:
+#line 441 "perly.y"
{
(yyval.opval) = block_end((ps[(3) - (7)].val.ival),
newFOROP(0, (OP*)NULL, (ps[(4) - (7)].val.opval), (ps[(6) - (7)].val.opval), (ps[(7) - (7)].val.opval)));
@@ -386,8 +401,8 @@ case 2:
;}
break;
- case 39:
-#line 441 "perly.y"
+ case 41:
+#line 450 "perly.y"
{
/* a block is a loop that happens once */
(yyval.opval) = newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
@@ -395,8 +410,8 @@ case 2:
;}
break;
- case 40:
-#line 447 "perly.y"
+ case 42:
+#line 456 "perly.y"
{
int save_3_latefree = (ps[(3) - (5)].val.opval)->op_latefree;
(ps[(3) - (5)].val.opval)->op_latefree = 1;
@@ -411,8 +426,8 @@ case 2:
;}
break;
- case 41:
-#line 460 "perly.y"
+ case 43:
+#line 469 "perly.y"
{
/* a block is a loop that happens once */
(yyval.opval) = newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
@@ -427,8 +442,8 @@ case 2:
;}
break;
- case 42:
-#line 473 "perly.y"
+ case 44:
+#line 482 "perly.y"
{
PL_parser->expect = XSTATE;
(yyval.opval) = (ps[(1) - (2)].val.opval);
@@ -436,8 +451,8 @@ case 2:
;}
break;
- case 43:
-#line 479 "perly.y"
+ case 45:
+#line 488 "perly.y"
{
PL_parser->expect = XSTATE;
(yyval.opval) = IF_MAD(newOP(OP_NULL, 0), (OP*)NULL);
@@ -446,64 +461,64 @@ case 2:
;}
break;
- case 44:
-#line 489 "perly.y"
+ case 46:
+#line 498 "perly.y"
{ (yyval.opval) = (OP*)NULL; ;}
break;
- case 45:
-#line 491 "perly.y"
+ case 47:
+#line 500 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
break;
- case 46:
-#line 493 "perly.y"
+ case 48:
+#line 502 "perly.y"
{ (yyval.opval) = newLOGOP(OP_AND, 0, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval));
TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'i');
;}
break;
- case 47:
-#line 497 "perly.y"
+ case 49:
+#line 506 "perly.y"
{ (yyval.opval) = newLOGOP(OP_OR, 0, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval));
TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'i');
;}
break;
- case 48:
-#line 501 "perly.y"
+ case 50:
+#line 510 "perly.y"
{ (yyval.opval) = newLOOPOP(OPf_PARENS, 1, scalar((ps[(3) - (3)].val.opval)), (ps[(1) - (3)].val.opval));
TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'w');
;}
break;
- case 49:
-#line 505 "perly.y"
+ case 51:
+#line 514 "perly.y"
{ (yyval.opval) = newLOOPOP(OPf_PARENS, 1, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval));
TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'w');
;}
break;
- case 50:
-#line 509 "perly.y"
+ case 52:
+#line 518 "perly.y"
{ (yyval.opval) = newFOROP(0, (OP*)NULL, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval), (OP*)NULL);
TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'w');
PL_parser->copline = (line_t)IVAL((ps[(2) - (3)].val.i_tkval));
;}
break;
- case 51:
-#line 514 "perly.y"
+ case 53:
+#line 523 "perly.y"
{ (yyval.opval) = newWHENOP((ps[(3) - (3)].val.opval), op_scope((ps[(1) - (3)].val.opval))); ;}
break;
- case 52:
-#line 519 "perly.y"
+ case 54:
+#line 528 "perly.y"
{ (yyval.opval) = (OP*)NULL; ;}
break;
- case 53:
-#line 521 "perly.y"
+ case 55:
+#line 530 "perly.y"
{
((ps[(2) - (2)].val.opval))->op_flags |= OPf_PARENS;
(yyval.opval) = op_scope((ps[(2) - (2)].val.opval));
@@ -511,8 +526,8 @@ case 2:
;}
break;
- case 54:
-#line 527 "perly.y"
+ case 56:
+#line 536 "perly.y"
{ PL_parser->copline = (line_t)IVAL((ps[(1) - (6)].val.i_tkval));
(yyval.opval) = newCONDOP(0,
newSTATEOP(OPf_SPECIAL,NULL,(ps[(3) - (6)].val.opval)),
@@ -524,60 +539,60 @@ case 2:
;}
break;
- case 55:
-#line 540 "perly.y"
+ case 57:
+#line 549 "perly.y"
{ (yyval.opval) = (OP*)NULL; ;}
break;
- case 56:
-#line 542 "perly.y"
+ case 58:
+#line 551 "perly.y"
{
(yyval.opval) = op_scope((ps[(2) - (2)].val.opval));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 57:
-#line 550 "perly.y"
+ case 59:
+#line 559 "perly.y"
{ (yyval.ival) = (PL_min_intro_pending &&
PL_max_intro_pending >= PL_min_intro_pending);
intro_my(); ;}
break;
- case 58:
-#line 556 "perly.y"
+ case 60:
+#line 565 "perly.y"
{ (yyval.opval) = (OP*)NULL; ;}
break;
- case 60:
-#line 562 "perly.y"
+ case 62:
+#line 571 "perly.y"
{ YYSTYPE tmplval;
(void)scan_num("1", &tmplval);
(yyval.opval) = tmplval.opval; ;}
break;
- case 62:
-#line 570 "perly.y"
+ case 64:
+#line 579 "perly.y"
{ (yyval.opval) = invert(scalar((ps[(1) - (1)].val.opval))); ;}
break;
- case 63:
-#line 575 "perly.y"
+ case 65:
+#line 584 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); intro_my(); ;}
break;
- case 64:
-#line 579 "perly.y"
+ case 66:
+#line 588 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); intro_my(); ;}
break;
- case 65:
-#line 583 "perly.y"
+ case 67:
+#line 592 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); intro_my(); ;}
break;
- case 66:
-#line 588 "perly.y"
+ case 68:
+#line 597 "perly.y"
{
#ifdef MAD
YYSTYPE tmplval;
@@ -589,36 +604,36 @@ case 2:
;}
break;
- case 68:
-#line 600 "perly.y"
+ case 70:
+#line 609 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
break;
- case 69:
-#line 601 "perly.y"
+ case 71:
+#line 610 "perly.y"
{ (yyval.opval) = (OP*)NULL; ;}
break;
- case 70:
-#line 605 "perly.y"
+ case 72:
+#line 614 "perly.y"
{ (yyval.ival) = start_subparse(FALSE, 0);
SAVEFREESV(PL_compcv); ;}
break;
- case 71:
-#line 611 "perly.y"
+ case 73:
+#line 620 "perly.y"
{ (yyval.ival) = start_subparse(FALSE, CVf_ANON);
SAVEFREESV(PL_compcv); ;}
break;
- case 72:
-#line 616 "perly.y"
+ case 74:
+#line 625 "perly.y"
{ (yyval.ival) = start_subparse(TRUE, 0);
SAVEFREESV(PL_compcv); ;}
break;
- case 73:
-#line 621 "perly.y"
+ case 75:
+#line 630 "perly.y"
{ const char *const name = SvPV_nolen_const(((SVOP*)(ps[(1) - (1)].val.opval))->op_sv);
if (strEQ(name, "BEGIN") || strEQ(name, "END")
|| strEQ(name, "INIT") || strEQ(name, "CHECK")
@@ -627,25 +642,25 @@ case 2:
(yyval.opval) = (ps[(1) - (1)].val.opval); ;}
break;
- case 74:
-#line 631 "perly.y"
+ case 76:
+#line 640 "perly.y"
{ (yyval.opval) = (OP*)NULL; ;}
break;
- case 76:
-#line 637 "perly.y"
+ case 78:
+#line 646 "perly.y"
{ (yyval.opval) = (OP*)NULL; ;}
break;
- case 77:
-#line 639 "perly.y"
+ case 79:
+#line 648 "perly.y"
{ (yyval.opval) = (ps[(2) - (2)].val.opval);
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),':');
;}
break;
- case 78:
-#line 643 "perly.y"
+ case 80:
+#line 652 "perly.y"
{ (yyval.opval) = IF_MAD(
newOP(OP_NULL, 0),
(OP*)NULL
@@ -654,15 +669,15 @@ case 2:
;}
break;
- case 79:
-#line 653 "perly.y"
+ case 81:
+#line 662 "perly.y"
{ (yyval.opval) = (ps[(2) - (2)].val.opval);
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),':');
;}
break;
- case 80:
-#line 657 "perly.y"
+ case 82:
+#line 666 "perly.y"
{ (yyval.opval) = IF_MAD(
newOP(OP_NULL, 0),
(OP*)NULL
@@ -671,13 +686,13 @@ case 2:
;}
break;
- case 81:
-#line 666 "perly.y"
+ case 83:
+#line 675 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
break;
- case 82:
-#line 667 "perly.y"
+ case 84:
+#line 676 "perly.y"
{ (yyval.opval) = IF_MAD(
newOP(OP_NULL,0),
(OP*)NULL
@@ -687,29 +702,29 @@ case 2:
;}
break;
- case 83:
-#line 678 "perly.y"
+ case 85:
+#line 687 "perly.y"
{ (yyval.opval) = newLOGOP(OP_AND, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 84:
-#line 682 "perly.y"
+ case 86:
+#line 691 "perly.y"
{ (yyval.opval) = newLOGOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 85:
-#line 686 "perly.y"
+ case 87:
+#line 695 "perly.y"
{ (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 87:
-#line 694 "perly.y"
+ case 89:
+#line 703 "perly.y"
{
#ifdef MAD
OP* op = newNULLLIST();
@@ -721,8 +736,8 @@ case 2:
;}
break;
- case 88:
-#line 704 "perly.y"
+ case 90:
+#line 713 "perly.y"
{
OP* term = (ps[(3) - (3)].val.opval);
DO_MAD(
@@ -733,16 +748,16 @@ case 2:
;}
break;
- case 90:
-#line 717 "perly.y"
+ case 92:
+#line 726 "perly.y"
{ (yyval.opval) = convert(IVAL((ps[(1) - (3)].val.i_tkval)), OPf_STACKED,
op_prepend_elem(OP_LIST, newGVREF(IVAL((ps[(1) - (3)].val.i_tkval)),(ps[(2) - (3)].val.opval)), (ps[(3) - (3)].val.opval)) );
TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 91:
-#line 722 "perly.y"
+ case 93:
+#line 731 "perly.y"
{ (yyval.opval) = convert(IVAL((ps[(1) - (5)].val.i_tkval)), OPf_STACKED,
op_prepend_elem(OP_LIST, newGVREF(IVAL((ps[(1) - (5)].val.i_tkval)),(ps[(3) - (5)].val.opval)), (ps[(4) - (5)].val.opval)) );
TOKEN_GETMAD((ps[(1) - (5)].val.i_tkval),(yyval.opval),'o');
@@ -751,8 +766,8 @@ case 2:
;}
break;
- case 92:
-#line 729 "perly.y"
+ case 94:
+#line 738 "perly.y"
{ (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST,
op_prepend_elem(OP_LIST, scalar((ps[(1) - (6)].val.opval)), (ps[(5) - (6)].val.opval)),
@@ -763,8 +778,8 @@ case 2:
;}
break;
- case 93:
-#line 738 "perly.y"
+ case 95:
+#line 747 "perly.y"
{ (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST, scalar((ps[(1) - (3)].val.opval)),
newUNOP(OP_METHOD, 0, (ps[(3) - (3)].val.opval))));
@@ -772,8 +787,8 @@ case 2:
;}
break;
- case 94:
-#line 744 "perly.y"
+ case 96:
+#line 753 "perly.y"
{ (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST,
op_prepend_elem(OP_LIST, (ps[(2) - (3)].val.opval), (ps[(3) - (3)].val.opval)),
@@ -781,8 +796,8 @@ case 2:
;}
break;
- case 95:
-#line 750 "perly.y"
+ case 97:
+#line 759 "perly.y"
{ (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST,
op_prepend_elem(OP_LIST, (ps[(2) - (5)].val.opval), (ps[(4) - (5)].val.opval)),
@@ -792,15 +807,15 @@ case 2:
;}
break;
- case 96:
-#line 758 "perly.y"
+ case 98:
+#line 767 "perly.y"
{ (yyval.opval) = convert(IVAL((ps[(1) - (2)].val.i_tkval)), 0, (ps[(2) - (2)].val.opval));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 97:
-#line 762 "perly.y"
+ case 99:
+#line 771 "perly.y"
{ (yyval.opval) = convert(IVAL((ps[(1) - (4)].val.i_tkval)), 0, (ps[(3) - (4)].val.opval));
TOKEN_GETMAD((ps[(1) - (4)].val.i_tkval),(yyval.opval),'o');
TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'(');
@@ -808,22 +823,22 @@ case 2:
;}
break;
- case 98:
-#line 768 "perly.y"
+ case 100:
+#line 777 "perly.y"
{ SvREFCNT_inc_simple_void(PL_compcv);
(yyval.opval) = newANONATTRSUB((ps[(2) - (3)].val.ival), 0, (OP*)NULL, (ps[(3) - (3)].val.opval)); ;}
break;
- case 99:
-#line 771 "perly.y"
+ case 101:
+#line 780 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST,
op_prepend_elem(OP_LIST, (ps[(4) - (5)].val.opval), (ps[(5) - (5)].val.opval)), (ps[(1) - (5)].val.opval)));
;}
break;
- case 102:
-#line 786 "perly.y"
+ case 104:
+#line 795 "perly.y"
{ (yyval.opval) = newBINOP(OP_GELEM, 0, (ps[(1) - (5)].val.opval), scalar((ps[(3) - (5)].val.opval)));
PL_parser->expect = XOPERATOR;
TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'{');
@@ -832,16 +847,16 @@ case 2:
;}
break;
- case 103:
-#line 793 "perly.y"
+ case 105:
+#line 802 "perly.y"
{ (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[(1) - (4)].val.opval)), scalar((ps[(3) - (4)].val.opval)));
TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'[');
TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),']');
;}
break;
- case 104:
-#line 798 "perly.y"
+ case 106:
+#line 807 "perly.y"
{ (yyval.opval) = newBINOP(OP_AELEM, 0,
ref(newAVREF((ps[(1) - (5)].val.opval)),OP_RV2AV),
scalar((ps[(4) - (5)].val.opval)));
@@ -851,8 +866,8 @@ case 2:
;}
break;
- case 105:
-#line 806 "perly.y"
+ case 107:
+#line 815 "perly.y"
{ (yyval.opval) = newBINOP(OP_AELEM, 0,
ref(newAVREF((ps[(1) - (4)].val.opval)),OP_RV2AV),
scalar((ps[(3) - (4)].val.opval)));
@@ -861,8 +876,8 @@ case 2:
;}
break;
- case 106:
-#line 813 "perly.y"
+ case 108:
+#line 822 "perly.y"
{ (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[(1) - (5)].val.opval)), jmaybe((ps[(3) - (5)].val.opval)));
PL_parser->expect = XOPERATOR;
TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'{');
@@ -871,8 +886,8 @@ case 2:
;}
break;
- case 107:
-#line 820 "perly.y"
+ case 109:
+#line 829 "perly.y"
{ (yyval.opval) = newBINOP(OP_HELEM, 0,
ref(newHVREF((ps[(1) - (6)].val.opval)),OP_RV2HV),
jmaybe((ps[(4) - (6)].val.opval)));
@@ -884,8 +899,8 @@ case 2:
;}
break;
- case 108:
-#line 830 "perly.y"
+ case 110:
+#line 839 "perly.y"
{ (yyval.opval) = newBINOP(OP_HELEM, 0,
ref(newHVREF((ps[(1) - (5)].val.opval)),OP_RV2HV),
jmaybe((ps[(3) - (5)].val.opval)));
@@ -896,8 +911,8 @@ case 2:
;}
break;
- case 109:
-#line 839 "perly.y"
+ case 111:
+#line 848 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
newCVREF(0, scalar((ps[(1) - (4)].val.opval))));
TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'a');
@@ -906,8 +921,8 @@ case 2:
;}
break;
- case 110:
-#line 846 "perly.y"
+ case 112:
+#line 855 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST, (ps[(4) - (5)].val.opval),
newCVREF(0, scalar((ps[(1) - (5)].val.opval)))));
@@ -917,8 +932,8 @@ case 2:
;}
break;
- case 111:
-#line 855 "perly.y"
+ case 113:
+#line 864 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST, (ps[(3) - (4)].val.opval),
newCVREF(0, scalar((ps[(1) - (4)].val.opval)))));
@@ -927,8 +942,8 @@ case 2:
;}
break;
- case 112:
-#line 862 "perly.y"
+ case 114:
+#line 871 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
newCVREF(0, scalar((ps[(1) - (3)].val.opval))));
TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'(');
@@ -936,8 +951,8 @@ case 2:
;}
break;
- case 113:
-#line 868 "perly.y"
+ case 115:
+#line 877 "perly.y"
{ (yyval.opval) = newSLICEOP(0, (ps[(5) - (6)].val.opval), (ps[(2) - (6)].val.opval));
TOKEN_GETMAD((ps[(1) - (6)].val.i_tkval),(yyval.opval),'(');
TOKEN_GETMAD((ps[(3) - (6)].val.i_tkval),(yyval.opval),')');
@@ -946,16 +961,16 @@ case 2:
;}
break;
- case 114:
-#line 875 "perly.y"
+ case 116:
+#line 884 "perly.y"
{ (yyval.opval) = newSLICEOP(0, (ps[(3) - (4)].val.opval), (ps[(1) - (4)].val.opval));
TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'[');
TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),']');
;}
break;
- case 115:
-#line 880 "perly.y"
+ case 117:
+#line 889 "perly.y"
{ (yyval.opval) = newSLICEOP(0, (ps[(4) - (5)].val.opval), (OP*)NULL);
TOKEN_GETMAD((ps[(1) - (5)].val.i_tkval),(yyval.opval),'(');
TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),')');
@@ -964,22 +979,22 @@ case 2:
;}
break;
- case 116:
-#line 890 "perly.y"
+ case 118:
+#line 899 "perly.y"
{ (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[(1) - (3)].val.opval), IVAL((ps[(2) - (3)].val.i_tkval)), (ps[(3) - (3)].val.opval));
TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 117:
-#line 894 "perly.y"
+ case 119:
+#line 903 "perly.y"
{ (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 118:
-#line 898 "perly.y"
+ case 120:
+#line 907 "perly.y"
{ if (IVAL((ps[(2) - (3)].val.i_tkval)) != OP_REPEAT)
scalar((ps[(1) - (3)].val.opval));
(yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, (ps[(1) - (3)].val.opval), scalar((ps[(3) - (3)].val.opval)));
@@ -987,50 +1002,50 @@ case 2:
;}
break;
- case 119:
-#line 904 "perly.y"
+ case 121:
+#line 913 "perly.y"
{ (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 120:
-#line 908 "perly.y"
+ case 122:
+#line 917 "perly.y"
{ (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 121:
-#line 912 "perly.y"
+ case 123:
+#line 921 "perly.y"
{ (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 122:
-#line 916 "perly.y"
+ case 124:
+#line 925 "perly.y"
{ (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 123:
-#line 920 "perly.y"
+ case 125:
+#line 929 "perly.y"
{ (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 124:
-#line 924 "perly.y"
+ case 126:
+#line 933 "perly.y"
{ (yyval.opval) = newBINOP(IVAL((ps[(2) - (3)].val.i_tkval)), 0, scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 125:
-#line 928 "perly.y"
+ case 127:
+#line 937 "perly.y"
{
(yyval.opval) = newRANGE(IVAL((ps[(2) - (3)].val.i_tkval)), scalar((ps[(1) - (3)].val.opval)), scalar((ps[(3) - (3)].val.opval)));
DO_MAD({
@@ -1044,29 +1059,29 @@ case 2:
;}
break;
- case 126:
-#line 940 "perly.y"
+ case 128:
+#line 949 "perly.y"
{ (yyval.opval) = newLOGOP(OP_AND, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 127:
-#line 944 "perly.y"
+ case 129:
+#line 953 "perly.y"
{ (yyval.opval) = newLOGOP(OP_OR, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 128:
-#line 948 "perly.y"
+ case 130:
+#line 957 "perly.y"
{ (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 129:
-#line 952 "perly.y"
+ case 131:
+#line 961 "perly.y"
{ (yyval.opval) = bind_match(IVAL((ps[(2) - (3)].val.i_tkval)), (ps[(1) - (3)].val.opval), (ps[(3) - (3)].val.opval));
TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),
((yyval.opval)->op_type == OP_NOT
@@ -1075,15 +1090,15 @@ case 2:
;}
break;
- case 130:
-#line 962 "perly.y"
+ case 132:
+#line 971 "perly.y"
{ (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[(2) - (2)].val.opval)));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 131:
-#line 966 "perly.y"
+ case 133:
+#line 975 "perly.y"
{ (yyval.opval) = IF_MAD(
newUNOP(OP_NULL, 0, (ps[(2) - (2)].val.opval)),
(ps[(2) - (2)].val.opval)
@@ -1092,70 +1107,70 @@ case 2:
;}
break;
- case 132:
-#line 973 "perly.y"
+ case 134:
+#line 982 "perly.y"
{ (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[(2) - (2)].val.opval)));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 133:
-#line 977 "perly.y"
+ case 135:
+#line 986 "perly.y"
{ (yyval.opval) = newUNOP(OP_COMPLEMENT, 0, scalar((ps[(2) - (2)].val.opval)));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 134:
-#line 981 "perly.y"
+ case 136:
+#line 990 "perly.y"
{ (yyval.opval) = newUNOP(OP_POSTINC, 0,
op_lvalue(scalar((ps[(1) - (2)].val.opval)), OP_POSTINC));
TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 135:
-#line 986 "perly.y"
+ case 137:
+#line 995 "perly.y"
{ (yyval.opval) = newUNOP(OP_POSTDEC, 0,
op_lvalue(scalar((ps[(1) - (2)].val.opval)), OP_POSTDEC));
TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 136:
-#line 991 "perly.y"
+ case 138:
+#line 1000 "perly.y"
{ (yyval.opval) = newUNOP(OP_PREINC, 0,
op_lvalue(scalar((ps[(2) - (2)].val.opval)), OP_PREINC));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 137:
-#line 996 "perly.y"
+ case 139:
+#line 1005 "perly.y"
{ (yyval.opval) = newUNOP(OP_PREDEC, 0,
op_lvalue(scalar((ps[(2) - (2)].val.opval)), OP_PREDEC));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 138:
-#line 1005 "perly.y"
+ case 140:
+#line 1014 "perly.y"
{ (yyval.opval) = newANONLIST((ps[(2) - (3)].val.opval));
TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'[');
TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),']');
;}
break;
- case 139:
-#line 1010 "perly.y"
+ case 141:
+#line 1019 "perly.y"
{ (yyval.opval) = newANONLIST((OP*)NULL);
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'[');
TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),']');
;}
break;
- case 140:
-#line 1015 "perly.y"
+ case 142:
+#line 1024 "perly.y"
{ (yyval.opval) = newANONHASH((ps[(2) - (4)].val.opval));
TOKEN_GETMAD((ps[(1) - (4)].val.i_tkval),(yyval.opval),'{');
TOKEN_GETMAD((ps[(3) - (4)].val.i_tkval),(yyval.opval),';');
@@ -1163,8 +1178,8 @@ case 2:
;}
break;
- case 141:
-#line 1021 "perly.y"
+ case 143:
+#line 1030 "perly.y"
{ (yyval.opval) = newANONHASH((OP*)NULL);
TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'{');
TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),';');
@@ -1172,8 +1187,8 @@ case 2:
;}
break;
- case 142:
-#line 1027 "perly.y"
+ case 144:
+#line 1036 "perly.y"
{ SvREFCNT_inc_simple_void(PL_compcv);
(yyval.opval) = newANONATTRSUB((ps[(2) - (5)].val.ival), (ps[(3) - (5)].val.opval), (ps[(4) - (5)].val.opval), (ps[(5) - (5)].val.opval));
TOKEN_GETMAD((ps[(1) - (5)].val.i_tkval),(yyval.opval),'o');
@@ -1182,22 +1197,22 @@ case 2:
;}
break;
- case 143:
-#line 1038 "perly.y"
+ case 145:
+#line 1047 "perly.y"
{ (yyval.opval) = dofile((ps[(2) - (2)].val.opval), IVAL((ps[(1) - (2)].val.i_tkval)));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 144:
-#line 1042 "perly.y"
+ case 146:
+#line 1051 "perly.y"
{ (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, op_scope((ps[(2) - (2)].val.opval)));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'D');
;}
break;
- case 145:
-#line 1046 "perly.y"
+ case 147:
+#line 1055 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB,
OPf_SPECIAL|OPf_STACKED,
op_prepend_elem(OP_LIST,
@@ -1211,8 +1226,8 @@ case 2:
;}
break;
- case 146:
-#line 1058 "perly.y"
+ case 148:
+#line 1067 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB,
OPf_SPECIAL|OPf_STACKED,
op_append_elem(OP_LIST,
@@ -1227,8 +1242,8 @@ case 2:
;}
break;
- case 147:
-#line 1071 "perly.y"
+ case 149:
+#line 1080 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED,
op_prepend_elem(OP_LIST,
scalar(newCVREF(0,scalar((ps[(2) - (4)].val.opval)))), (OP*)NULL)); dep();
@@ -1238,8 +1253,8 @@ case 2:
;}
break;
- case 148:
-#line 1079 "perly.y"
+ case 150:
+#line 1088 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED,
op_prepend_elem(OP_LIST,
(ps[(4) - (5)].val.opval),
@@ -1250,86 +1265,86 @@ case 2:
;}
break;
- case 153:
-#line 1095 "perly.y"
+ case 155:
+#line 1104 "perly.y"
{ (yyval.opval) = newCONDOP(0, (ps[(1) - (5)].val.opval), (ps[(3) - (5)].val.opval), (ps[(5) - (5)].val.opval));
TOKEN_GETMAD((ps[(2) - (5)].val.i_tkval),(yyval.opval),'?');
TOKEN_GETMAD((ps[(4) - (5)].val.i_tkval),(yyval.opval),':');
;}
break;
- case 154:
-#line 1100 "perly.y"
+ case 156:
+#line 1109 "perly.y"
{ (yyval.opval) = newUNOP(OP_REFGEN, 0, op_lvalue((ps[(2) - (2)].val.opval),OP_REFGEN));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 155:
-#line 1104 "perly.y"
+ case 157:
+#line 1113 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
break;
- case 156:
-#line 1106 "perly.y"
+ case 158:
+#line 1115 "perly.y"
{ (yyval.opval) = localize((ps[(2) - (2)].val.opval),IVAL((ps[(1) - (2)].val.i_tkval)));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'k');
;}
break;
- case 157:
-#line 1110 "perly.y"
+ case 159:
+#line 1119 "perly.y"
{ (yyval.opval) = sawparens(IF_MAD(newUNOP(OP_NULL,0,(ps[(2) - (3)].val.opval)), (ps[(2) - (3)].val.opval)));
TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'(');
TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')');
;}
break;
- case 158:
-#line 1115 "perly.y"
+ case 160:
+#line 1124 "perly.y"
{ (yyval.opval) = IF_MAD(newUNOP(OP_NULL,0,(ps[(1) - (1)].val.opval)), (ps[(1) - (1)].val.opval)); ;}
break;
- case 159:
-#line 1117 "perly.y"
+ case 161:
+#line 1126 "perly.y"
{ (yyval.opval) = sawparens(newNULLLIST());
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'(');
TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),')');
;}
break;
- case 160:
-#line 1122 "perly.y"
+ case 162:
+#line 1131 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
break;
- case 161:
-#line 1124 "perly.y"
+ case 163:
+#line 1133 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
break;
- case 162:
-#line 1126 "perly.y"
+ case 164:
+#line 1135 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
break;
- case 163:
-#line 1128 "perly.y"
+ case 165:
+#line 1137 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
break;
- case 164:
-#line 1130 "perly.y"
+ case 166:
+#line 1139 "perly.y"
{ (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[(1) - (1)].val.opval), OP_AV2ARYLEN));;}
break;
- case 165:
-#line 1132 "perly.y"
+ case 167:
+#line 1141 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
break;
- case 166:
-#line 1134 "perly.y"
+ case 168:
+#line 1143 "perly.y"
{ (yyval.opval) = op_prepend_elem(OP_ASLICE,
newOP(OP_PUSHMARK, 0),
newLISTOP(OP_ASLICE, 0,
@@ -1340,8 +1355,8 @@ case 2:
;}
break;
- case 167:
-#line 1143 "perly.y"
+ case 169:
+#line 1152 "perly.y"
{ (yyval.opval) = op_prepend_elem(OP_HSLICE,
newOP(OP_PUSHMARK, 0),
newLISTOP(OP_HSLICE, 0,
@@ -1354,26 +1369,26 @@ case 2:
;}
break;
- case 168:
-#line 1154 "perly.y"
+ case 170:
+#line 1163 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
break;
- case 169:
-#line 1156 "perly.y"
+ case 171:
+#line 1165 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[(1) - (1)].val.opval))); ;}
break;
- case 170:
-#line 1158 "perly.y"
+ case 172:
+#line 1167 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[(1) - (3)].val.opval)));
TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'(');
TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')');
;}
break;
- case 171:
-#line 1163 "perly.y"
+ case 173:
+#line 1172 "perly.y"
{
(yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST, (ps[(3) - (4)].val.opval), scalar((ps[(1) - (4)].val.opval))));
@@ -1388,91 +1403,91 @@ case 2:
;}
break;
- case 172:
-#line 1176 "perly.y"
+ case 174:
+#line 1185 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST, (ps[(3) - (3)].val.opval), scalar((ps[(2) - (3)].val.opval))));
TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 173:
-#line 1181 "perly.y"
+ case 175:
+#line 1190 "perly.y"
{ (yyval.opval) = newOP(IVAL((ps[(1) - (1)].val.i_tkval)), OPf_SPECIAL);
PL_hints |= HINT_BLOCK_SCOPE;
TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 174:
-#line 1186 "perly.y"
+ case 176:
+#line 1195 "perly.y"
{ (yyval.opval) = newLOOPEX(IVAL((ps[(1) - (2)].val.i_tkval)),(ps[(2) - (2)].val.opval));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 175:
-#line 1190 "perly.y"
+ case 177:
+#line 1199 "perly.y"
{ (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[(2) - (2)].val.opval)));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 176:
-#line 1194 "perly.y"
+ case 178:
+#line 1203 "perly.y"
{ (yyval.opval) = newOP(IVAL((ps[(1) - (1)].val.i_tkval)), 0);
TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 177:
-#line 1198 "perly.y"
+ case 179:
+#line 1207 "perly.y"
{ (yyval.opval) = newUNOP(IVAL((ps[(1) - (2)].val.i_tkval)), 0, (ps[(2) - (2)].val.opval));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 178:
-#line 1202 "perly.y"
+ case 180:
+#line 1211 "perly.y"
{ (yyval.opval) = newUNOP(IVAL((ps[(1) - (2)].val.i_tkval)), 0, (ps[(2) - (2)].val.opval));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 179:
-#line 1206 "perly.y"
+ case 181:
+#line 1215 "perly.y"
{ (yyval.opval) = newOP(OP_REQUIRE, (ps[(1) - (1)].val.i_tkval) ? OPf_SPECIAL : 0);
TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 180:
-#line 1210 "perly.y"
+ case 182:
+#line 1219 "perly.y"
{ (yyval.opval) = newUNOP(OP_REQUIRE, (ps[(1) - (2)].val.i_tkval) ? OPf_SPECIAL : 0, (ps[(2) - (2)].val.opval));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 181:
-#line 1214 "perly.y"
+ case 183:
+#line 1223 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[(1) - (1)].val.opval))); ;}
break;
- case 182:
-#line 1216 "perly.y"
+ case 184:
+#line 1225 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST, (ps[(2) - (2)].val.opval), scalar((ps[(1) - (2)].val.opval)))); ;}
break;
- case 183:
-#line 1219 "perly.y"
+ case 185:
+#line 1228 "perly.y"
{ (yyval.opval) = newOP(IVAL((ps[(1) - (1)].val.i_tkval)), 0);
TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'o');
;}
break;
- case 184:
-#line 1223 "perly.y"
+ case 186:
+#line 1232 "perly.y"
{ (yyval.opval) = newOP(IVAL((ps[(1) - (3)].val.i_tkval)), 0);
TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'o');
TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),(yyval.opval),'(');
@@ -1480,14 +1495,14 @@ case 2:
;}
break;
- case 185:
-#line 1229 "perly.y"
+ case 187:
+#line 1238 "perly.y"
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
scalar((ps[(1) - (1)].val.opval))); ;}
break;
- case 186:
-#line 1232 "perly.y"
+ case 188:
+#line 1241 "perly.y"
{ (yyval.opval) = (IVAL((ps[(1) - (3)].val.i_tkval)) == OP_NOT)
? newUNOP(IVAL((ps[(1) - (3)].val.i_tkval)), 0, newSVOP(OP_CONST, 0, newSViv(0)))
: newOP(IVAL((ps[(1) - (3)].val.i_tkval)), OPf_SPECIAL);
@@ -1498,8 +1513,8 @@ case 2:
;}
break;
- case 187:
-#line 1241 "perly.y"
+ case 189:
+#line 1250 "perly.y"
{ (yyval.opval) = newUNOP(IVAL((ps[(1) - (4)].val.i_tkval)), 0, (ps[(3) - (4)].val.opval));
TOKEN_GETMAD((ps[(1) - (4)].val.i_tkval),(yyval.opval),'o');
TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'(');
@@ -1507,16 +1522,16 @@ case 2:
;}
break;
- case 188:
-#line 1247 "perly.y"
+ case 190:
+#line 1256 "perly.y"
{ (yyval.opval) = pmruntime((ps[(1) - (4)].val.opval), (ps[(3) - (4)].val.opval), 1);
TOKEN_GETMAD((ps[(2) - (4)].val.i_tkval),(yyval.opval),'(');
TOKEN_GETMAD((ps[(4) - (4)].val.i_tkval),(yyval.opval),')');
;}
break;
- case 191:
-#line 1254 "perly.y"
+ case 193:
+#line 1263 "perly.y"
{
(yyval.opval) = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0),
newSVOP(OP_CONST, 0, newSVpvs("Unimplemented")));
@@ -1524,8 +1539,8 @@ case 2:
;}
break;
- case 193:
-#line 1264 "perly.y"
+ case 195:
+#line 1273 "perly.y"
{ (yyval.opval) = my_attrs((ps[(2) - (3)].val.opval),(ps[(3) - (3)].val.opval));
DO_MAD(
token_getmad((ps[(1) - (3)].val.i_tkval),(yyval.opval),'d');
@@ -1535,143 +1550,143 @@ case 2:
;}
break;
- case 194:
-#line 1272 "perly.y"
+ case 196:
+#line 1281 "perly.y"
{ (yyval.opval) = localize((ps[(2) - (2)].val.opval),IVAL((ps[(1) - (2)].val.i_tkval)));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'d');
;}
break;
- case 195:
-#line 1279 "perly.y"
+ case 197:
+#line 1288 "perly.y"
{ (yyval.opval) = sawparens((ps[(2) - (3)].val.opval));
TOKEN_GETMAD((ps[(1) - (3)].val.i_tkval),(yyval.opval),'(');
TOKEN_GETMAD((ps[(3) - (3)].val.i_tkval),(yyval.opval),')');
;}
break;
- case 196:
-#line 1284 "perly.y"
+ case 198:
+#line 1293 "perly.y"
{ (yyval.opval) = sawparens(newNULLLIST());
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'(');
TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),')');
;}
break;
- case 197:
-#line 1289 "perly.y"
+ case 199:
+#line 1298 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
break;
- case 198:
-#line 1291 "perly.y"
+ case 200:
+#line 1300 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
break;
- case 199:
-#line 1293 "perly.y"
+ case 201:
+#line 1302 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
break;
- case 200:
-#line 1298 "perly.y"
+ case 202:
+#line 1307 "perly.y"
{ (yyval.opval) = (OP*)NULL; ;}
break;
- case 201:
-#line 1300 "perly.y"
+ case 203:
+#line 1309 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
break;
- case 202:
-#line 1304 "perly.y"
+ case 204:
+#line 1313 "perly.y"
{ (yyval.opval) = (OP*)NULL; ;}
break;
- case 203:
-#line 1306 "perly.y"
+ case 205:
+#line 1315 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
break;
- case 204:
-#line 1310 "perly.y"
+ case 206:
+#line 1319 "perly.y"
{ (yyval.i_tkval) = (ps[(1) - (1)].val.i_tkval); ;}
break;
- case 205:
-#line 1312 "perly.y"
+ case 207:
+#line 1321 "perly.y"
{ munge_qwlist_to_paren_list((ps[(1) - (1)].val.opval)); ;}
break;
- case 206:
-#line 1314 "perly.y"
+ case 208:
+#line 1323 "perly.y"
{ (yyval.i_tkval) = (ps[(3) - (3)].val.i_tkval); ;}
break;
- case 207:
-#line 1320 "perly.y"
+ case 209:
+#line 1329 "perly.y"
{ PL_parser->in_my = 0; (yyval.opval) = my((ps[(1) - (1)].val.opval)); ;}
break;
- case 208:
-#line 1324 "perly.y"
+ case 210:
+#line 1333 "perly.y"
{ (yyval.opval) = newCVREF(IVAL((ps[(1) - (2)].val.i_tkval)),(ps[(2) - (2)].val.opval));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'&');
;}
break;
- case 209:
-#line 1330 "perly.y"
+ case 211:
+#line 1339 "perly.y"
{ (yyval.opval) = newSVREF((ps[(2) - (2)].val.opval));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'$');
;}
break;
- case 210:
-#line 1336 "perly.y"
+ case 212:
+#line 1345 "perly.y"
{ (yyval.opval) = newAVREF((ps[(2) - (2)].val.opval));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'@');
;}
break;
- case 211:
-#line 1342 "perly.y"
+ case 213:
+#line 1351 "perly.y"
{ (yyval.opval) = newHVREF((ps[(2) - (2)].val.opval));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'%');
;}
break;
- case 212:
-#line 1348 "perly.y"
+ case 214:
+#line 1357 "perly.y"
{ (yyval.opval) = newAVREF((ps[(2) - (2)].val.opval));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'l');
;}
break;
- case 213:
-#line 1354 "perly.y"
+ case 215:
+#line 1363 "perly.y"
{ (yyval.opval) = newGVREF(0,(ps[(2) - (2)].val.opval));
TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'*');
;}
break;
- case 214:
-#line 1361 "perly.y"
+ case 216:
+#line 1370 "perly.y"
{ (yyval.opval) = scalar((ps[(1) - (1)].val.opval)); ;}
break;
- case 215:
-#line 1363 "perly.y"
+ case 217:
+#line 1372 "perly.y"
{ (yyval.opval) = scalar((ps[(1) - (1)].val.opval)); ;}
break;
- case 216:
-#line 1365 "perly.y"
+ case 218:
+#line 1374 "perly.y"
{ (yyval.opval) = op_scope((ps[(1) - (1)].val.opval)); ;}
break;
- case 217:
-#line 1368 "perly.y"
+ case 219:
+#line 1377 "perly.y"
{ (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
break;
diff --git a/perly.h b/perly.h
index 95db74499f..9695a064a1 100644
--- a/perly.h
+++ b/perly.h
@@ -41,162 +41,164 @@
know about them. */
enum yytokentype {
GRAMPROG = 258,
- GRAMBLOCK = 259,
- GRAMBARESTMT = 260,
- GRAMFULLSTMT = 261,
- GRAMSTMTSEQ = 262,
- WORD = 263,
- METHOD = 264,
- FUNCMETH = 265,
- THING = 266,
- PMFUNC = 267,
- PRIVATEREF = 268,
- QWLIST = 269,
- FUNC0SUB = 270,
- UNIOPSUB = 271,
- LSTOPSUB = 272,
- PLUGEXPR = 273,
- PLUGSTMT = 274,
- LABEL = 275,
- FORMAT = 276,
- SUB = 277,
- ANONSUB = 278,
- PACKAGE = 279,
- USE = 280,
- WHILE = 281,
- UNTIL = 282,
- IF = 283,
- UNLESS = 284,
- ELSE = 285,
- ELSIF = 286,
- CONTINUE = 287,
- FOR = 288,
- GIVEN = 289,
- WHEN = 290,
- DEFAULT = 291,
- LOOPEX = 292,
- DOTDOT = 293,
- YADAYADA = 294,
- FUNC0 = 295,
- FUNC1 = 296,
- FUNC = 297,
- UNIOP = 298,
- LSTOP = 299,
- RELOP = 300,
- EQOP = 301,
- MULOP = 302,
- ADDOP = 303,
- DOLSHARP = 304,
- DO = 305,
- HASHBRACK = 306,
- NOAMP = 307,
- LOCAL = 308,
- MY = 309,
- MYSUB = 310,
- REQUIRE = 311,
- COLONATTR = 312,
- PREC_LOW = 313,
- DOROP = 314,
- OROP = 315,
- ANDOP = 316,
- NOTOP = 317,
- ASSIGNOP = 318,
- DORDOR = 319,
- OROR = 320,
- ANDAND = 321,
- BITOROP = 322,
- BITANDOP = 323,
- SHIFTOP = 324,
- MATCHOP = 325,
- REFGEN = 326,
- UMINUS = 327,
- POWOP = 328,
- POSTDEC = 329,
- POSTINC = 330,
- PREDEC = 331,
- PREINC = 332,
- ARROW = 333,
- PEG = 334
+ GRAMEXPR = 259,
+ GRAMBLOCK = 260,
+ GRAMBARESTMT = 261,
+ GRAMFULLSTMT = 262,
+ GRAMSTMTSEQ = 263,
+ WORD = 264,
+ METHOD = 265,
+ FUNCMETH = 266,
+ THING = 267,
+ PMFUNC = 268,
+ PRIVATEREF = 269,
+ QWLIST = 270,
+ FUNC0SUB = 271,
+ UNIOPSUB = 272,
+ LSTOPSUB = 273,
+ PLUGEXPR = 274,
+ PLUGSTMT = 275,
+ LABEL = 276,
+ FORMAT = 277,
+ SUB = 278,
+ ANONSUB = 279,
+ PACKAGE = 280,
+ USE = 281,
+ WHILE = 282,
+ UNTIL = 283,
+ IF = 284,
+ UNLESS = 285,
+ ELSE = 286,
+ ELSIF = 287,
+ CONTINUE = 288,
+ FOR = 289,
+ GIVEN = 290,
+ WHEN = 291,
+ DEFAULT = 292,
+ LOOPEX = 293,
+ DOTDOT = 294,
+ YADAYADA = 295,
+ FUNC0 = 296,
+ FUNC1 = 297,
+ FUNC = 298,
+ UNIOP = 299,
+ LSTOP = 300,
+ RELOP = 301,
+ EQOP = 302,
+ MULOP = 303,
+ ADDOP = 304,
+ DOLSHARP = 305,
+ DO = 306,
+ HASHBRACK = 307,
+ NOAMP = 308,
+ LOCAL = 309,
+ MY = 310,
+ MYSUB = 311,
+ REQUIRE = 312,
+ COLONATTR = 313,
+ PREC_LOW = 314,
+ DOROP = 315,
+ OROP = 316,
+ ANDOP = 317,
+ NOTOP = 318,
+ ASSIGNOP = 319,
+ DORDOR = 320,
+ OROR = 321,
+ ANDAND = 322,
+ BITOROP = 323,
+ BITANDOP = 324,
+ SHIFTOP = 325,
+ MATCHOP = 326,
+ REFGEN = 327,
+ UMINUS = 328,
+ POWOP = 329,
+ POSTDEC = 330,
+ POSTINC = 331,
+ PREDEC = 332,
+ PREINC = 333,
+ ARROW = 334,
+ PEG = 335
};
#endif
/* Tokens. */
#define GRAMPROG 258
-#define GRAMBLOCK 259
-#define GRAMBARESTMT 260
-#define GRAMFULLSTMT 261
-#define GRAMSTMTSEQ 262
-#define WORD 263
-#define METHOD 264
-#define FUNCMETH 265
-#define THING 266
-#define PMFUNC 267
-#define PRIVATEREF 268
-#define QWLIST 269
-#define FUNC0SUB 270
-#define UNIOPSUB 271
-#define LSTOPSUB 272
-#define PLUGEXPR 273
-#define PLUGSTMT 274
-#define LABEL 275
-#define FORMAT 276
-#define SUB 277
-#define ANONSUB 278
-#define PACKAGE 279
-#define USE 280
-#define WHILE 281
-#define UNTIL 282
-#define IF 283
-#define UNLESS 284
-#define ELSE 285
-#define ELSIF 286
-#define CONTINUE 287
-#define FOR 288
-#define GIVEN 289
-#define WHEN 290
-#define DEFAULT 291
-#define LOOPEX 292
-#define DOTDOT 293
-#define YADAYADA 294
-#define FUNC0 295
-#define FUNC1 296
-#define FUNC 297
-#define UNIOP 298
-#define LSTOP 299
-#define RELOP 300
-#define EQOP 301
-#define MULOP 302
-#define ADDOP 303
-#define DOLSHARP 304
-#define DO 305
-#define HASHBRACK 306
-#define NOAMP 307
-#define LOCAL 308
-#define MY 309
-#define MYSUB 310
-#define REQUIRE 311
-#define COLONATTR 312
-#define PREC_LOW 313
-#define DOROP 314
-#define OROP 315
-#define ANDOP 316
-#define NOTOP 317
-#define ASSIGNOP 318
-#define DORDOR 319
-#define OROR 320
-#define ANDAND 321
-#define BITOROP 322
-#define BITANDOP 323
-#define SHIFTOP 324
-#define MATCHOP 325
-#define REFGEN 326
-#define UMINUS 327
-#define POWOP 328
-#define POSTDEC 329
-#define POSTINC 330
-#define PREDEC 331
-#define PREINC 332
-#define ARROW 333
-#define PEG 334
+#define GRAMEXPR 259
+#define GRAMBLOCK 260
+#define GRAMBARESTMT 261
+#define GRAMFULLSTMT 262
+#define GRAMSTMTSEQ 263
+#define WORD 264
+#define METHOD 265
+#define FUNCMETH 266
+#define THING 267
+#define PMFUNC 268
+#define PRIVATEREF 269
+#define QWLIST 270
+#define FUNC0SUB 271
+#define UNIOPSUB 272
+#define LSTOPSUB 273
+#define PLUGEXPR 274
+#define PLUGSTMT 275
+#define LABEL 276
+#define FORMAT 277
+#define SUB 278
+#define ANONSUB 279
+#define PACKAGE 280
+#define USE 281
+#define WHILE 282
+#define UNTIL 283
+#define IF 284
+#define UNLESS 285
+#define ELSE 286
+#define ELSIF 287
+#define CONTINUE 288
+#define FOR 289
+#define GIVEN 290
+#define WHEN 291
+#define DEFAULT 292
+#define LOOPEX 293
+#define DOTDOT 294
+#define YADAYADA 295
+#define FUNC0 296
+#define FUNC1 297
+#define FUNC 298
+#define UNIOP 299
+#define LSTOP 300
+#define RELOP 301
+#define EQOP 302
+#define MULOP 303
+#define ADDOP 304
+#define DOLSHARP 305
+#define DO 306
+#define HASHBRACK 307
+#define NOAMP 308
+#define LOCAL 309
+#define MY 310
+#define MYSUB 311
+#define REQUIRE 312
+#define COLONATTR 313
+#define PREC_LOW 314
+#define DOROP 315
+#define OROP 316
+#define ANDOP 317
+#define NOTOP 318
+#define ASSIGNOP 319
+#define DORDOR 320
+#define OROR 321
+#define ANDAND 322
+#define BITOROP 323
+#define BITANDOP 324
+#define SHIFTOP 325
+#define MATCHOP 326
+#define REFGEN 327
+#define UMINUS 328
+#define POWOP 329
+#define POSTDEC 330
+#define POSTINC 331
+#define PREDEC 332
+#define PREINC 333
+#define ARROW 334
+#define PEG 335
diff --git a/perly.tab b/perly.tab
index 7f7e9489a9..1df760efdc 100644
--- a/perly.tab
+++ b/perly.tab
@@ -1,19 +1,19 @@
-#define YYFINAL 12
+#define YYFINAL 14
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 2137
+#define YYLAST 2102
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 99
+#define YYNTOKENS 100
/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 62
+#define YYNNTS 63
/* YYNRULES -- Number of rules. */
-#define YYNRULES 217
+#define YYNRULES 219
/* YYNRULES -- Number of states. */
-#define YYNSTATES 441
+#define YYNSTATES 444
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 334
+#define YYMAXUTOK 335
#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -24,16 +24,16 @@ static const yytype_uint8 yytranslate[] =
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 86, 2, 2, 14, 16, 18, 2,
- 97, 96, 17, 13, 75, 12, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 78, 19,
- 2, 2, 2, 77, 15, 2, 2, 2, 2, 2,
+ 2, 2, 2, 87, 2, 2, 15, 17, 19, 2,
+ 98, 97, 18, 14, 76, 13, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 79, 20,
+ 2, 2, 2, 78, 16, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 10, 2, 11, 2, 2, 2, 2, 2, 2,
+ 2, 11, 2, 12, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 8, 2, 9, 87, 2, 2, 2,
+ 2, 2, 2, 9, 2, 10, 88, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -47,14 +47,14 @@ static const yytype_uint8 yytranslate[] =
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
- 5, 6, 7, 20, 21, 22, 23, 24, 25, 26,
+ 5, 6, 7, 8, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 76, 79,
- 80, 81, 82, 83, 84, 85, 88, 89, 90, 91,
- 92, 93, 94, 95, 98
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 77,
+ 80, 81, 82, 83, 84, 85, 86, 89, 90, 91,
+ 92, 93, 94, 95, 96, 99
};
#if YYDEBUG
@@ -63,135 +63,135 @@ static const yytype_uint8 yytranslate[] =
static const yytype_uint16 yyprhs[] =
{
0, 0, 3, 4, 9, 10, 14, 15, 19, 20,
- 24, 25, 29, 34, 35, 36, 41, 42, 43, 46,
- 49, 51, 53, 58, 65, 72, 77, 78, 86, 94,
- 102, 110, 117, 120, 129, 138, 150, 160, 169, 177,
- 180, 181, 190, 193, 195, 197, 199, 203, 207, 211,
- 215, 219, 223, 224, 227, 234, 235, 238, 239, 240,
- 242, 243, 245, 247, 249, 251, 253, 254, 256, 258,
- 259, 260, 261, 262, 264, 265, 267, 268, 271, 273,
- 276, 278, 280, 282, 286, 290, 294, 296, 299, 303,
- 305, 309, 315, 322, 326, 330, 336, 339, 344, 345,
- 351, 353, 355, 361, 366, 372, 377, 383, 390, 396,
- 401, 407, 412, 416, 423, 428, 434, 438, 442, 446,
- 450, 454, 458, 462, 466, 470, 474, 478, 482, 486,
- 490, 493, 496, 499, 502, 505, 508, 511, 514, 518,
- 521, 526, 530, 536, 539, 542, 547, 553, 558, 564,
- 566, 568, 570, 572, 578, 581, 583, 586, 590, 592,
- 595, 597, 599, 601, 603, 605, 607, 612, 618, 620,
- 622, 626, 631, 635, 637, 640, 643, 645, 648, 651,
- 653, 656, 658, 661, 663, 667, 669, 673, 678, 683,
- 685, 687, 689, 691, 695, 698, 702, 705, 707, 709,
- 711, 712, 714, 715, 717, 719, 720, 724, 726, 729,
- 732, 735, 738, 741, 744, 746, 748, 750
+ 24, 25, 29, 30, 34, 39, 40, 41, 46, 47,
+ 48, 51, 54, 56, 58, 63, 70, 77, 82, 83,
+ 91, 99, 107, 115, 122, 125, 134, 143, 155, 165,
+ 174, 182, 185, 186, 195, 198, 200, 202, 204, 208,
+ 212, 216, 220, 224, 228, 229, 232, 239, 240, 243,
+ 244, 245, 247, 248, 250, 252, 254, 256, 258, 259,
+ 261, 263, 264, 265, 266, 267, 269, 270, 272, 273,
+ 276, 278, 281, 283, 285, 287, 291, 295, 299, 301,
+ 304, 308, 310, 314, 320, 327, 331, 335, 341, 344,
+ 349, 350, 356, 358, 360, 366, 371, 377, 382, 388,
+ 395, 401, 406, 412, 417, 421, 428, 433, 439, 443,
+ 447, 451, 455, 459, 463, 467, 471, 475, 479, 483,
+ 487, 491, 495, 498, 501, 504, 507, 510, 513, 516,
+ 519, 523, 526, 531, 535, 541, 544, 547, 552, 558,
+ 563, 569, 571, 573, 575, 577, 583, 586, 588, 591,
+ 595, 597, 600, 602, 604, 606, 608, 610, 612, 617,
+ 623, 625, 627, 631, 636, 640, 642, 645, 648, 650,
+ 653, 656, 658, 661, 663, 666, 668, 672, 674, 678,
+ 683, 688, 690, 692, 694, 696, 700, 703, 707, 710,
+ 712, 714, 716, 717, 719, 720, 722, 724, 725, 729,
+ 731, 734, 737, 740, 743, 746, 749, 751, 753, 755
};
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
static const yytype_int16 yyrhs[] =
{
- 100, 0, -1, -1, 3, 101, 107, 111, -1, -1,
- 4, 102, 106, -1, -1, 5, 103, 113, -1, -1,
- 6, 104, 112, -1, -1, 7, 105, 111, -1, 8,
- 107, 111, 9, -1, -1, -1, 8, 110, 111, 9,
- -1, -1, -1, 111, 112, -1, 126, 113, -1, 31,
- -1, 98, -1, 33, 130, 127, 106, -1, 34, 128,
- 131, 132, 133, 135, -1, 67, 128, 131, 132, 133,
- 135, -1, 36, 20, 20, 19, -1, -1, 37, 128,
- 114, 20, 20, 149, 19, -1, 40, 151, 107, 123,
- 96, 109, 117, -1, 41, 151, 107, 125, 96, 109,
- 117, -1, 46, 151, 107, 108, 123, 96, 109, -1,
- 47, 151, 107, 123, 96, 109, -1, 48, 106, -1,
- 38, 151, 107, 121, 96, 119, 109, 118, -1, 39,
- 151, 107, 122, 96, 119, 109, 118, -1, 45, 151,
- 107, 124, 19, 121, 19, 119, 124, 96, 109, -1,
- 45, 66, 107, 153, 151, 123, 96, 109, 118, -1,
- 45, 155, 151, 107, 123, 96, 109, 118, -1, 45,
- 151, 107, 123, 96, 109, 118, -1, 106, 118, -1,
- -1, 36, 20, 20, 8, 107, 115, 111, 9, -1,
- 116, 19, -1, 19, -1, 1, -1, 136, -1, 136,
- 40, 136, -1, 136, 41, 136, -1, 136, 38, 136,
- -1, 136, 39, 122, -1, 136, 45, 136, -1, 136,
- 47, 136, -1, -1, 42, 109, -1, 43, 151, 123,
- 96, 109, 117, -1, -1, 44, 106, -1, -1, -1,
- 116, -1, -1, 136, -1, 136, -1, 136, -1, 120,
- -1, 122, -1, -1, 32, -1, 20, -1, -1, -1,
- -1, -1, 20, -1, -1, 23, -1, -1, 69, 23,
- -1, 69, -1, 69, 23, -1, 69, -1, 106, -1,
- 19, -1, 136, 73, 136, -1, 136, 72, 136, -1,
- 136, 71, 136, -1, 137, -1, 137, 75, -1, 137,
- 75, 146, -1, 146, -1, 56, 160, 137, -1, 54,
- 97, 160, 136, 96, -1, 146, 95, 140, 151, 150,
- 96, -1, 146, 95, 140, -1, 21, 160, 149, -1,
- 22, 160, 97, 150, 96, -1, 56, 149, -1, 54,
- 97, 150, 96, -1, -1, 29, 129, 106, 139, 149,
- -1, 21, -1, 155, -1, 159, 8, 136, 19, 9,
- -1, 155, 10, 136, 11, -1, 146, 95, 10, 136,
- 11, -1, 141, 10, 136, 11, -1, 155, 8, 136,
- 19, 9, -1, 146, 95, 8, 136, 19, 9, -1,
- 141, 8, 136, 19, 9, -1, 146, 95, 97, 96,
- -1, 146, 95, 97, 136, 96, -1, 141, 151, 136,
- 96, -1, 141, 151, 96, -1, 97, 136, 96, 10,
- 136, 11, -1, 26, 10, 136, 11, -1, 97, 96,
- 10, 136, 11, -1, 146, 76, 146, -1, 146, 90,
- 146, -1, 146, 59, 146, -1, 146, 60, 146, -1,
- 146, 84, 146, -1, 146, 57, 146, -1, 146, 58,
- 146, -1, 146, 83, 146, -1, 146, 82, 146, -1,
- 146, 50, 146, -1, 146, 81, 146, -1, 146, 80,
- 146, -1, 146, 79, 146, -1, 146, 85, 146, -1,
- 12, 146, -1, 13, 146, -1, 86, 146, -1, 87,
- 146, -1, 146, 92, -1, 146, 91, -1, 94, 146,
- -1, 93, 146, -1, 10, 136, 11, -1, 10, 11,
- -1, 63, 136, 19, 9, -1, 63, 19, 9, -1,
- 35, 129, 132, 133, 106, -1, 62, 146, -1, 62,
- 106, -1, 62, 20, 151, 96, -1, 62, 20, 151,
- 136, 96, -1, 62, 155, 151, 96, -1, 62, 155,
- 151, 136, 96, -1, 142, -1, 143, -1, 144, -1,
- 145, -1, 146, 77, 146, 78, 146, -1, 88, 146,
- -1, 147, -1, 65, 146, -1, 97, 136, 96, -1,
- 26, -1, 97, 96, -1, 155, -1, 159, -1, 157,
- -1, 156, -1, 158, -1, 141, -1, 156, 10, 136,
- 11, -1, 156, 8, 136, 19, 9, -1, 23, -1,
- 154, -1, 154, 151, 96, -1, 154, 151, 136, 96,
- -1, 64, 20, 149, -1, 49, -1, 49, 146, -1,
- 74, 137, -1, 55, -1, 55, 106, -1, 55, 146,
- -1, 68, -1, 68, 146, -1, 28, -1, 28, 146,
- -1, 52, -1, 52, 97, 96, -1, 27, -1, 53,
- 97, 96, -1, 53, 97, 136, 96, -1, 24, 97,
- 137, 96, -1, 20, -1, 138, -1, 51, -1, 30,
- -1, 66, 148, 134, -1, 66, 148, -1, 97, 136,
- 96, -1, 97, 96, -1, 155, -1, 157, -1, 156,
- -1, -1, 137, -1, -1, 136, -1, 97, -1, -1,
- 26, 152, 97, -1, 155, -1, 18, 160, -1, 14,
- 160, -1, 15, 160, -1, 16, 160, -1, 61, 160,
- -1, 17, 160, -1, 20, -1, 155, -1, 106, -1,
- 25, -1
+ 101, 0, -1, -1, 3, 102, 109, 113, -1, -1,
+ 4, 103, 152, -1, -1, 5, 104, 108, -1, -1,
+ 6, 105, 115, -1, -1, 7, 106, 114, -1, -1,
+ 8, 107, 113, -1, 9, 109, 113, 10, -1, -1,
+ -1, 9, 112, 113, 10, -1, -1, -1, 113, 114,
+ -1, 128, 115, -1, 32, -1, 99, -1, 34, 132,
+ 129, 108, -1, 35, 130, 133, 134, 135, 137, -1,
+ 68, 130, 133, 134, 135, 137, -1, 37, 21, 21,
+ 20, -1, -1, 38, 130, 116, 21, 21, 151, 20,
+ -1, 41, 153, 109, 125, 97, 111, 119, -1, 42,
+ 153, 109, 127, 97, 111, 119, -1, 47, 153, 109,
+ 110, 125, 97, 111, -1, 48, 153, 109, 125, 97,
+ 111, -1, 49, 108, -1, 39, 153, 109, 123, 97,
+ 121, 111, 120, -1, 40, 153, 109, 124, 97, 121,
+ 111, 120, -1, 46, 153, 109, 126, 20, 123, 20,
+ 121, 126, 97, 111, -1, 46, 67, 109, 155, 153,
+ 125, 97, 111, 120, -1, 46, 157, 153, 109, 125,
+ 97, 111, 120, -1, 46, 153, 109, 125, 97, 111,
+ 120, -1, 108, 120, -1, -1, 37, 21, 21, 9,
+ 109, 117, 113, 10, -1, 118, 20, -1, 20, -1,
+ 1, -1, 138, -1, 138, 41, 138, -1, 138, 42,
+ 138, -1, 138, 39, 138, -1, 138, 40, 124, -1,
+ 138, 46, 138, -1, 138, 48, 138, -1, -1, 43,
+ 111, -1, 44, 153, 125, 97, 111, 119, -1, -1,
+ 45, 108, -1, -1, -1, 118, -1, -1, 138, -1,
+ 138, -1, 138, -1, 122, -1, 124, -1, -1, 33,
+ -1, 21, -1, -1, -1, -1, -1, 21, -1, -1,
+ 24, -1, -1, 70, 24, -1, 70, -1, 70, 24,
+ -1, 70, -1, 108, -1, 20, -1, 138, 74, 138,
+ -1, 138, 73, 138, -1, 138, 72, 138, -1, 139,
+ -1, 139, 76, -1, 139, 76, 148, -1, 148, -1,
+ 57, 162, 139, -1, 55, 98, 162, 138, 97, -1,
+ 148, 96, 142, 153, 152, 97, -1, 148, 96, 142,
+ -1, 22, 162, 151, -1, 23, 162, 98, 152, 97,
+ -1, 57, 151, -1, 55, 98, 152, 97, -1, -1,
+ 30, 131, 108, 141, 151, -1, 22, -1, 157, -1,
+ 161, 9, 138, 20, 10, -1, 157, 11, 138, 12,
+ -1, 148, 96, 11, 138, 12, -1, 143, 11, 138,
+ 12, -1, 157, 9, 138, 20, 10, -1, 148, 96,
+ 9, 138, 20, 10, -1, 143, 9, 138, 20, 10,
+ -1, 148, 96, 98, 97, -1, 148, 96, 98, 138,
+ 97, -1, 143, 153, 138, 97, -1, 143, 153, 97,
+ -1, 98, 138, 97, 11, 138, 12, -1, 27, 11,
+ 138, 12, -1, 98, 97, 11, 138, 12, -1, 148,
+ 77, 148, -1, 148, 91, 148, -1, 148, 60, 148,
+ -1, 148, 61, 148, -1, 148, 85, 148, -1, 148,
+ 58, 148, -1, 148, 59, 148, -1, 148, 84, 148,
+ -1, 148, 83, 148, -1, 148, 51, 148, -1, 148,
+ 82, 148, -1, 148, 81, 148, -1, 148, 80, 148,
+ -1, 148, 86, 148, -1, 13, 148, -1, 14, 148,
+ -1, 87, 148, -1, 88, 148, -1, 148, 93, -1,
+ 148, 92, -1, 95, 148, -1, 94, 148, -1, 11,
+ 138, 12, -1, 11, 12, -1, 64, 138, 20, 10,
+ -1, 64, 20, 10, -1, 36, 131, 134, 135, 108,
+ -1, 63, 148, -1, 63, 108, -1, 63, 21, 153,
+ 97, -1, 63, 21, 153, 138, 97, -1, 63, 157,
+ 153, 97, -1, 63, 157, 153, 138, 97, -1, 144,
+ -1, 145, -1, 146, -1, 147, -1, 148, 78, 148,
+ 79, 148, -1, 89, 148, -1, 149, -1, 66, 148,
+ -1, 98, 138, 97, -1, 27, -1, 98, 97, -1,
+ 157, -1, 161, -1, 159, -1, 158, -1, 160, -1,
+ 143, -1, 158, 11, 138, 12, -1, 158, 9, 138,
+ 20, 10, -1, 24, -1, 156, -1, 156, 153, 97,
+ -1, 156, 153, 138, 97, -1, 65, 21, 151, -1,
+ 50, -1, 50, 148, -1, 75, 139, -1, 56, -1,
+ 56, 108, -1, 56, 148, -1, 69, -1, 69, 148,
+ -1, 29, -1, 29, 148, -1, 53, -1, 53, 98,
+ 97, -1, 28, -1, 54, 98, 97, -1, 54, 98,
+ 138, 97, -1, 25, 98, 139, 97, -1, 21, -1,
+ 140, -1, 52, -1, 31, -1, 67, 150, 136, -1,
+ 67, 150, -1, 98, 138, 97, -1, 98, 97, -1,
+ 157, -1, 159, -1, 158, -1, -1, 139, -1, -1,
+ 138, -1, 98, -1, -1, 27, 154, 98, -1, 157,
+ -1, 19, 162, -1, 15, 162, -1, 16, 162, -1,
+ 17, 162, -1, 62, 162, -1, 18, 162, -1, 21,
+ -1, 157, -1, 108, -1, 26, -1
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 143, 143, 142, 152, 151, 164, 163, 176, 175,
- 188, 187, 199, 209, 213, 216, 226, 231, 232, 241,
- 254, 256, 261, 279, 300, 312, 328, 327, 344, 353,
- 362, 368, 370, 372, 382, 392, 413, 422, 431, 440,
- 447, 446, 472, 478, 488, 490, 492, 496, 500, 504,
- 508, 513, 519, 520, 526, 540, 541, 550, 556, 557,
- 562, 565, 569, 574, 578, 582, 588, 597, 600, 601,
- 605, 611, 616, 621, 631, 632, 637, 638, 642, 652,
- 656, 666, 667, 677, 681, 685, 689, 693, 703, 712,
- 716, 721, 728, 737, 743, 749, 757, 761, 768, 767,
- 778, 779, 783, 792, 797, 805, 812, 819, 829, 838,
- 845, 854, 861, 867, 874, 879, 889, 893, 897, 903,
- 907, 911, 915, 919, 923, 927, 939, 943, 947, 951,
- 961, 965, 972, 976, 980, 985, 990, 995, 1004, 1009,
- 1014, 1020, 1026, 1037, 1041, 1045, 1057, 1070, 1078, 1090,
- 1091, 1092, 1093, 1094, 1099, 1103, 1105, 1109, 1114, 1116,
- 1121, 1123, 1125, 1127, 1129, 1131, 1133, 1142, 1153, 1155,
- 1157, 1162, 1175, 1180, 1185, 1189, 1193, 1197, 1201, 1205,
- 1209, 1213, 1215, 1218, 1222, 1228, 1231, 1240, 1246, 1251,
- 1252, 1253, 1259, 1263, 1271, 1278, 1283, 1288, 1290, 1292,
- 1297, 1299, 1304, 1305, 1309, 1312, 1311, 1319, 1323, 1329,
- 1335, 1341, 1347, 1353, 1360, 1362, 1364, 1367
+ 0, 143, 143, 142, 152, 151, 161, 160, 173, 172,
+ 185, 184, 197, 196, 208, 218, 222, 225, 235, 240,
+ 241, 250, 263, 265, 270, 288, 309, 321, 337, 336,
+ 353, 362, 371, 377, 379, 381, 391, 401, 422, 431,
+ 440, 449, 456, 455, 481, 487, 497, 499, 501, 505,
+ 509, 513, 517, 522, 528, 529, 535, 549, 550, 559,
+ 565, 566, 571, 574, 578, 583, 587, 591, 597, 606,
+ 609, 610, 614, 620, 625, 630, 640, 641, 646, 647,
+ 651, 661, 665, 675, 676, 686, 690, 694, 698, 702,
+ 712, 721, 725, 730, 737, 746, 752, 758, 766, 770,
+ 777, 776, 787, 788, 792, 801, 806, 814, 821, 828,
+ 838, 847, 854, 863, 870, 876, 883, 888, 898, 902,
+ 906, 912, 916, 920, 924, 928, 932, 936, 948, 952,
+ 956, 960, 970, 974, 981, 985, 989, 994, 999, 1004,
+ 1013, 1018, 1023, 1029, 1035, 1046, 1050, 1054, 1066, 1079,
+ 1087, 1099, 1100, 1101, 1102, 1103, 1108, 1112, 1114, 1118,
+ 1123, 1125, 1130, 1132, 1134, 1136, 1138, 1140, 1142, 1151,
+ 1162, 1164, 1166, 1171, 1184, 1189, 1194, 1198, 1202, 1206,
+ 1210, 1214, 1218, 1222, 1224, 1227, 1231, 1237, 1240, 1249,
+ 1255, 1260, 1261, 1262, 1268, 1272, 1280, 1287, 1292, 1297,
+ 1299, 1301, 1306, 1308, 1313, 1314, 1318, 1321, 1320, 1328,
+ 1332, 1338, 1344, 1350, 1356, 1362, 1369, 1371, 1373, 1376
};
#endif
@@ -200,29 +200,30 @@ static const yytype_uint16 yyrline[] =
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
static const char *const yytname[] =
{
- "$end", "error", "$undefined", "GRAMPROG", "GRAMBLOCK", "GRAMBARESTMT",
- "GRAMFULLSTMT", "GRAMSTMTSEQ", "'{'", "'}'", "'['", "']'", "'-'", "'+'",
- "'$'", "'@'", "'%'", "'*'", "'&'", "';'", "WORD", "METHOD", "FUNCMETH",
- "THING", "PMFUNC", "PRIVATEREF", "QWLIST", "FUNC0SUB", "UNIOPSUB",
- "LSTOPSUB", "PLUGEXPR", "PLUGSTMT", "LABEL", "FORMAT", "SUB", "ANONSUB",
- "PACKAGE", "USE", "WHILE", "UNTIL", "IF", "UNLESS", "ELSE", "ELSIF",
- "CONTINUE", "FOR", "GIVEN", "WHEN", "DEFAULT", "LOOPEX", "DOTDOT",
- "YADAYADA", "FUNC0", "FUNC1", "FUNC", "UNIOP", "LSTOP", "RELOP", "EQOP",
- "MULOP", "ADDOP", "DOLSHARP", "DO", "HASHBRACK", "NOAMP", "LOCAL", "MY",
- "MYSUB", "REQUIRE", "COLONATTR", "PREC_LOW", "DOROP", "OROP", "ANDOP",
- "NOTOP", "','", "ASSIGNOP", "'?'", "':'", "DORDOR", "OROR", "ANDAND",
- "BITOROP", "BITANDOP", "SHIFTOP", "MATCHOP", "'!'", "'~'", "REFGEN",
- "UMINUS", "POWOP", "POSTDEC", "POSTINC", "PREDEC", "PREINC", "ARROW",
- "')'", "'('", "PEG", "$accept", "grammar", "@1", "@2", "@3", "@4", "@5",
- "block", "remember", "mydefsv", "mblock", "mremember", "stmtseq",
- "fullstmt", "barestmt", "@6", "@7", "sideff", "else", "cont", "mintro",
- "nexpr", "texpr", "iexpr", "mexpr", "mnexpr", "miexpr", "label",
- "formname", "startsub", "startanonsub", "startformsub", "subname",
- "proto", "subattrlist", "myattrlist", "subbody", "expr", "argexpr",
- "listop", "@8", "method", "subscripted", "termbinop", "termunop",
- "anonymous", "termdo", "term", "myattrterm", "myterm", "listexpr",
- "listexprcom", "lpar_or_qw", "@9", "my_scalar", "amper", "scalar", "ary",
- "hsh", "arylen", "star", "indirob", 0
+ "$end", "error", "$undefined", "GRAMPROG", "GRAMEXPR", "GRAMBLOCK",
+ "GRAMBARESTMT", "GRAMFULLSTMT", "GRAMSTMTSEQ", "'{'", "'}'", "'['",
+ "']'", "'-'", "'+'", "'$'", "'@'", "'%'", "'*'", "'&'", "';'", "WORD",
+ "METHOD", "FUNCMETH", "THING", "PMFUNC", "PRIVATEREF", "QWLIST",
+ "FUNC0SUB", "UNIOPSUB", "LSTOPSUB", "PLUGEXPR", "PLUGSTMT", "LABEL",
+ "FORMAT", "SUB", "ANONSUB", "PACKAGE", "USE", "WHILE", "UNTIL", "IF",
+ "UNLESS", "ELSE", "ELSIF", "CONTINUE", "FOR", "GIVEN", "WHEN", "DEFAULT",
+ "LOOPEX", "DOTDOT", "YADAYADA", "FUNC0", "FUNC1", "FUNC", "UNIOP",
+ "LSTOP", "RELOP", "EQOP", "MULOP", "ADDOP", "DOLSHARP", "DO",
+ "HASHBRACK", "NOAMP", "LOCAL", "MY", "MYSUB", "REQUIRE", "COLONATTR",
+ "PREC_LOW", "DOROP", "OROP", "ANDOP", "NOTOP", "','", "ASSIGNOP", "'?'",
+ "':'", "DORDOR", "OROR", "ANDAND", "BITOROP", "BITANDOP", "SHIFTOP",
+ "MATCHOP", "'!'", "'~'", "REFGEN", "UMINUS", "POWOP", "POSTDEC",
+ "POSTINC", "PREDEC", "PREINC", "ARROW", "')'", "'('", "PEG", "$accept",
+ "grammar", "@1", "@2", "@3", "@4", "@5", "@6", "block", "remember",
+ "mydefsv", "mblock", "mremember", "stmtseq", "fullstmt", "barestmt",
+ "@7", "@8", "sideff", "else", "cont", "mintro", "nexpr", "texpr",
+ "iexpr", "mexpr", "mnexpr", "miexpr", "label", "formname", "startsub",
+ "startanonsub", "startformsub", "subname", "proto", "subattrlist",
+ "myattrlist", "subbody", "expr", "argexpr", "listop", "@9", "method",
+ "subscripted", "termbinop", "termunop", "anonymous", "termdo", "term",
+ "myattrterm", "myterm", "listexpr", "listexprcom", "lpar_or_qw", "@10",
+ "my_scalar", "amper", "scalar", "ary", "hsh", "arylen", "star",
+ "indirob", 0
};
#endif
@@ -231,71 +232,71 @@ static const char *const yytname[] =
token YYLEX-NUM. */
static const yytype_uint16 yytoknum[] =
{
- 0, 256, 257, 258, 259, 260, 261, 262, 123, 125,
- 91, 93, 45, 43, 36, 64, 37, 42, 38, 59,
- 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
+ 0, 256, 257, 258, 259, 260, 261, 262, 263, 123,
+ 125, 91, 93, 45, 43, 36, 64, 37, 42, 38,
+ 59, 264, 265, 266, 267, 268, 269, 270, 271, 272,
273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
293, 294, 295, 296, 297, 298, 299, 300, 301, 302,
303, 304, 305, 306, 307, 308, 309, 310, 311, 312,
- 313, 314, 315, 316, 317, 44, 318, 63, 58, 319,
- 320, 321, 322, 323, 324, 325, 33, 126, 326, 327,
- 328, 329, 330, 331, 332, 333, 41, 40, 334
+ 313, 314, 315, 316, 317, 318, 44, 319, 63, 58,
+ 320, 321, 322, 323, 324, 325, 326, 33, 126, 327,
+ 328, 329, 330, 331, 332, 333, 334, 41, 40, 335
};
# endif
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const yytype_uint8 yyr1[] =
{
- 0, 99, 101, 100, 102, 100, 103, 100, 104, 100,
- 105, 100, 106, 107, 108, 109, 110, 111, 111, 112,
- 113, 113, 113, 113, 113, 113, 114, 113, 113, 113,
- 113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
- 115, 113, 113, 113, 116, 116, 116, 116, 116, 116,
- 116, 116, 117, 117, 117, 118, 118, 119, 120, 120,
- 121, 121, 122, 123, 124, 125, 126, 126, 127, 127,
- 128, 129, 130, 131, 132, 132, 133, 133, 133, 134,
- 134, 135, 135, 136, 136, 136, 136, 137, 137, 137,
- 138, 138, 138, 138, 138, 138, 138, 138, 139, 138,
- 140, 140, 141, 141, 141, 141, 141, 141, 141, 141,
- 141, 141, 141, 141, 141, 141, 142, 142, 142, 142,
- 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
+ 0, 100, 102, 101, 103, 101, 104, 101, 105, 101,
+ 106, 101, 107, 101, 108, 109, 110, 111, 112, 113,
+ 113, 114, 115, 115, 115, 115, 115, 115, 116, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 117, 115, 115, 115, 118, 118, 118, 118,
+ 118, 118, 118, 118, 119, 119, 119, 120, 120, 121,
+ 122, 122, 123, 123, 124, 125, 126, 127, 128, 128,
+ 129, 129, 130, 131, 132, 133, 134, 134, 135, 135,
+ 135, 136, 136, 137, 137, 138, 138, 138, 138, 139,
+ 139, 139, 140, 140, 140, 140, 140, 140, 140, 140,
+ 141, 140, 142, 142, 143, 143, 143, 143, 143, 143,
143, 143, 143, 143, 143, 143, 143, 143, 144, 144,
- 144, 144, 144, 145, 145, 145, 145, 145, 145, 146,
- 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
- 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
- 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
- 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
- 146, 146, 146, 147, 147, 148, 148, 148, 148, 148,
- 149, 149, 150, 150, 151, 152, 151, 153, 154, 155,
- 156, 157, 158, 159, 160, 160, 160, 160
+ 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
+ 144, 144, 145, 145, 145, 145, 145, 145, 145, 145,
+ 146, 146, 146, 146, 146, 147, 147, 147, 147, 147,
+ 147, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 149, 149, 150, 150, 150,
+ 150, 150, 151, 151, 152, 152, 153, 154, 153, 155,
+ 156, 157, 158, 159, 160, 161, 162, 162, 162, 162
};
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
static const yytype_uint8 yyr2[] =
{
0, 2, 0, 4, 0, 3, 0, 3, 0, 3,
- 0, 3, 4, 0, 0, 4, 0, 0, 2, 2,
- 1, 1, 4, 6, 6, 4, 0, 7, 7, 7,
- 7, 6, 2, 8, 8, 11, 9, 8, 7, 2,
- 0, 8, 2, 1, 1, 1, 3, 3, 3, 3,
- 3, 3, 0, 2, 6, 0, 2, 0, 0, 1,
- 0, 1, 1, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 1, 0, 1, 0, 2, 1, 2,
- 1, 1, 1, 3, 3, 3, 1, 2, 3, 1,
- 3, 5, 6, 3, 3, 5, 2, 4, 0, 5,
- 1, 1, 5, 4, 5, 4, 5, 6, 5, 4,
- 5, 4, 3, 6, 4, 5, 3, 3, 3, 3,
+ 0, 3, 0, 3, 4, 0, 0, 4, 0, 0,
+ 2, 2, 1, 1, 4, 6, 6, 4, 0, 7,
+ 7, 7, 7, 6, 2, 8, 8, 11, 9, 8,
+ 7, 2, 0, 8, 2, 1, 1, 1, 3, 3,
+ 3, 3, 3, 3, 0, 2, 6, 0, 2, 0,
+ 0, 1, 0, 1, 1, 1, 1, 1, 0, 1,
+ 1, 0, 0, 0, 0, 1, 0, 1, 0, 2,
+ 1, 2, 1, 1, 1, 3, 3, 3, 1, 2,
+ 3, 1, 3, 5, 6, 3, 3, 5, 2, 4,
+ 0, 5, 1, 1, 5, 4, 5, 4, 5, 6,
+ 5, 4, 5, 4, 3, 6, 4, 5, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 2, 2, 2, 2, 2, 2, 2, 2, 3, 2,
- 4, 3, 5, 2, 2, 4, 5, 4, 5, 1,
- 1, 1, 1, 5, 2, 1, 2, 3, 1, 2,
- 1, 1, 1, 1, 1, 1, 4, 5, 1, 1,
- 3, 4, 3, 1, 2, 2, 1, 2, 2, 1,
- 2, 1, 2, 1, 3, 1, 3, 4, 4, 1,
- 1, 1, 1, 3, 2, 3, 2, 1, 1, 1,
- 0, 1, 0, 1, 1, 0, 3, 1, 2, 2,
- 2, 2, 2, 2, 1, 1, 1, 1
+ 3, 3, 2, 2, 2, 2, 2, 2, 2, 2,
+ 3, 2, 4, 3, 5, 2, 2, 4, 5, 4,
+ 5, 1, 1, 1, 1, 5, 2, 1, 2, 3,
+ 1, 2, 1, 1, 1, 1, 1, 1, 4, 5,
+ 1, 1, 3, 4, 3, 1, 2, 2, 1, 2,
+ 2, 1, 2, 1, 2, 1, 3, 1, 3, 4,
+ 4, 1, 1, 1, 1, 3, 2, 3, 2, 1,
+ 1, 1, 0, 1, 0, 1, 1, 0, 3, 1,
+ 2, 2, 2, 2, 2, 2, 1, 1, 1, 1
};
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -303,619 +304,613 @@ static const yytype_uint8 yyr2[] =
means the default is an error. */
static const yytype_uint8 yydefact[] =
{
- 0, 2, 4, 6, 8, 10, 0, 13, 0, 0,
- 66, 17, 1, 17, 13, 5, 44, 0, 0, 0,
- 0, 0, 0, 0, 0, 43, 189, 0, 0, 168,
- 0, 158, 185, 181, 71, 192, 20, 72, 70, 71,
- 0, 70, 0, 0, 0, 0, 0, 0, 0, 0,
- 173, 191, 183, 0, 0, 176, 200, 0, 0, 0,
- 0, 0, 0, 70, 179, 0, 0, 0, 0, 0,
- 0, 0, 21, 55, 7, 0, 45, 86, 190, 165,
- 149, 150, 151, 152, 89, 155, 169, 160, 163, 162,
- 164, 161, 67, 9, 0, 66, 66, 17, 139, 0,
- 130, 131, 214, 217, 216, 215, 209, 210, 211, 213,
- 208, 200, 0, 0, 0, 182, 0, 69, 0, 74,
- 0, 26, 205, 204, 13, 13, 13, 13, 13, 13,
- 0, 13, 13, 32, 174, 0, 0, 202, 177, 178,
- 214, 201, 96, 215, 0, 212, 189, 144, 143, 160,
- 0, 0, 200, 156, 0, 194, 197, 199, 198, 0,
- 180, 175, 132, 133, 154, 137, 136, 159, 0, 0,
- 39, 42, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 87, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 135, 134, 0, 0, 0, 0, 0, 0, 0, 19,
- 18, 66, 138, 94, 202, 0, 0, 98, 68, 0,
- 73, 74, 75, 76, 0, 0, 0, 60, 0, 0,
- 0, 0, 0, 13, 14, 0, 184, 186, 0, 203,
- 0, 0, 90, 0, 0, 141, 0, 172, 196, 0,
- 80, 193, 74, 0, 157, 56, 48, 49, 62, 46,
- 47, 50, 51, 85, 84, 83, 88, 0, 0, 112,
- 0, 125, 121, 122, 118, 119, 116, 0, 128, 127,
- 126, 124, 123, 120, 129, 117, 0, 0, 100, 0,
- 93, 101, 170, 0, 0, 0, 0, 0, 0, 12,
- 0, 188, 114, 200, 22, 76, 78, 0, 13, 25,
- 0, 206, 0, 61, 0, 0, 63, 65, 0, 0,
- 207, 59, 64, 0, 0, 45, 0, 0, 0, 187,
- 97, 0, 145, 0, 147, 0, 140, 195, 79, 76,
- 0, 0, 0, 105, 111, 0, 0, 0, 109, 0,
- 202, 171, 0, 103, 0, 166, 0, 95, 99, 0,
- 77, 142, 40, 200, 57, 57, 0, 0, 0, 0,
- 60, 0, 0, 0, 91, 146, 148, 0, 115, 0,
- 108, 153, 0, 104, 110, 0, 106, 167, 102, 82,
- 81, 23, 17, 0, 0, 0, 16, 52, 52, 0,
- 55, 0, 0, 0, 31, 24, 113, 107, 92, 66,
- 27, 55, 55, 17, 0, 0, 28, 29, 0, 38,
- 57, 55, 30, 41, 33, 34, 66, 53, 0, 55,
- 0, 37, 15, 0, 36, 0, 0, 0, 52, 35,
- 54
+ 0, 2, 4, 6, 8, 10, 12, 0, 15, 204,
+ 0, 0, 68, 19, 1, 19, 0, 0, 0, 0,
+ 0, 0, 0, 0, 191, 0, 0, 170, 0, 160,
+ 187, 183, 73, 194, 73, 175, 193, 185, 0, 0,
+ 178, 202, 0, 0, 0, 0, 0, 0, 181, 0,
+ 0, 0, 0, 0, 0, 0, 205, 88, 192, 167,
+ 151, 152, 153, 154, 91, 157, 5, 171, 162, 165,
+ 164, 166, 163, 15, 7, 46, 45, 22, 74, 72,
+ 0, 72, 0, 0, 0, 0, 0, 0, 0, 0,
+ 72, 23, 57, 9, 0, 47, 69, 11, 0, 68,
+ 68, 141, 0, 132, 133, 216, 219, 218, 217, 211,
+ 212, 213, 215, 210, 202, 0, 0, 0, 184, 0,
+ 76, 176, 0, 0, 204, 179, 180, 216, 203, 98,
+ 217, 0, 214, 191, 146, 145, 162, 0, 0, 202,
+ 158, 0, 196, 199, 201, 200, 182, 177, 134, 135,
+ 156, 139, 138, 161, 0, 0, 0, 0, 89, 0,
+ 0, 207, 206, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 137,
+ 136, 0, 0, 0, 0, 0, 0, 0, 19, 71,
+ 0, 0, 28, 15, 15, 15, 15, 15, 15, 0,
+ 15, 15, 34, 0, 0, 41, 44, 0, 0, 0,
+ 0, 0, 0, 21, 20, 140, 96, 204, 0, 0,
+ 100, 77, 78, 186, 188, 0, 0, 0, 92, 0,
+ 0, 143, 0, 174, 198, 0, 82, 195, 0, 159,
+ 87, 86, 85, 90, 0, 0, 0, 114, 0, 127,
+ 123, 124, 120, 121, 118, 0, 130, 129, 128, 126,
+ 125, 122, 131, 119, 0, 0, 102, 0, 95, 103,
+ 172, 0, 0, 0, 0, 0, 0, 68, 70, 0,
+ 75, 76, 0, 0, 62, 0, 0, 0, 0, 0,
+ 15, 16, 0, 76, 58, 50, 51, 64, 48, 49,
+ 52, 53, 0, 190, 116, 202, 80, 0, 189, 99,
+ 0, 147, 0, 149, 0, 142, 197, 81, 0, 0,
+ 0, 107, 208, 113, 0, 0, 0, 111, 0, 204,
+ 173, 0, 105, 0, 168, 0, 14, 24, 78, 15,
+ 27, 0, 0, 63, 0, 0, 65, 67, 0, 0,
+ 209, 61, 66, 0, 0, 47, 0, 0, 0, 78,
+ 97, 101, 79, 144, 93, 148, 150, 117, 0, 110,
+ 155, 0, 106, 112, 0, 108, 169, 104, 0, 42,
+ 202, 59, 59, 0, 0, 0, 0, 62, 0, 0,
+ 0, 0, 115, 109, 94, 84, 83, 25, 19, 0,
+ 0, 0, 18, 54, 54, 0, 57, 0, 0, 0,
+ 33, 26, 68, 29, 57, 57, 19, 0, 0, 30,
+ 31, 0, 40, 59, 57, 32, 43, 35, 36, 68,
+ 55, 0, 57, 0, 39, 17, 0, 38, 0, 0,
+ 0, 54, 37, 56
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int16 yydefgoto[] =
{
- -1, 6, 7, 8, 9, 10, 11, 104, 13, 327,
- 397, 413, 95, 210, 74, 225, 392, 75, 416, 170,
- 394, 322, 312, 257, 315, 324, 318, 94, 219, 118,
- 116, 117, 221, 223, 307, 251, 391, 316, 77, 78,
- 303, 290, 79, 80, 81, 82, 83, 84, 85, 155,
- 142, 240, 124, 226, 319, 86, 87, 88, 89, 90,
- 91, 106
+ -1, 7, 8, 9, 10, 11, 12, 13, 107, 15,
+ 357, 403, 416, 99, 214, 93, 283, 398, 94, 419,
+ 205, 400, 352, 342, 296, 345, 354, 348, 98, 279,
+ 190, 119, 189, 281, 222, 307, 237, 397, 346, 57,
+ 58, 305, 268, 59, 60, 61, 62, 63, 64, 65,
+ 142, 129, 66, 163, 246, 349, 67, 68, 69, 70,
+ 71, 72, 109
};
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
-#define YYPACT_NINF -345
+#define YYPACT_NINF -373
static const yytype_int16 yypact[] =
{
- 435, -345, -345, -345, -345, -345, 41, -345, 48, 436,
- 56, -345, -345, -345, -345, -345, -345, 1027, 1903, 1903,
- 246, 246, 246, 246, 246, -345, -345, 246, 246, -345,
- -4, 90, -345, 1903, -345, -345, -345, -345, -345, -345,
- 83, -345, -20, -20, -20, -20, -5, -20, -20, 48,
- 1903, -345, 20, 59, 75, 791, 703, 246, 879, 1113,
- 88, 1903, 29, -345, 1903, 1903, 1903, 1903, 1903, 1903,
- 1903, 1199, -345, 105, -345, 165, 1111, 117, -345, 61,
- -345, -345, -345, -345, 1964, -345, -20, 110, 134, -345,
- -345, 195, -345, -345, 436, 47, 52, -345, -345, 9,
- 238, 238, -345, -345, -345, -345, -345, -345, -345, -345,
- -345, 1903, 115, 1903, 1903, 324, 48, 197, 202, 188,
- 206, -345, -345, -345, -345, -345, -345, -345, -345, -345,
- -20, -345, -345, -345, 1964, 143, 1287, 703, -345, 324,
- 315, 117, -345, 940, 1903, -345, -20, -345, 324, 81,
- 249, 157, 1903, 324, 1375, 190, -345, -345, -345, 202,
- 324, 117, 238, 238, 238, 184, 184, 257, 50, 48,
- -345, -345, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903,
- 1903, 1903, 1903, 1903, 1463, 1903, 1903, 1903, 1903, 1903,
- 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903,
- -345, -345, 62, 1551, 1903, 1903, 1903, 1903, 1903, -345,
- -345, 19, -345, -345, 1903, 141, 38, -345, -345, 48,
- -345, 188, -345, 199, 93, 261, 185, 1903, 1903, 1903,
- 1903, 279, 525, -345, -345, 1903, -345, -345, 239, 174,
- 198, 1903, 117, 1639, 1727, -345, 287, -345, -345, 267,
- 274, -345, 188, 1903, 289, -345, 174, -345, 174, 174,
- 174, 174, 174, 227, 227, -345, 1964, 170, 79, -345,
- 422, 2042, 1012, 776, 424, 232, 1964, 1925, 513, 513,
- 600, 689, 911, 472, 238, 238, 1903, 1903, -345, 1815,
- -20, -345, -345, 440, 191, 108, 201, 114, 212, -345,
- 213, -345, -345, 1903, -345, 199, 285, 48, -345, -345,
- 282, -345, 218, 174, 220, 222, 174, -345, 223, -20,
- -345, -345, -345, 224, 302, 305, 1903, 1903, 235, -345,
- -345, 574, -345, 664, -345, 690, -345, -345, -345, 199,
- 136, 1903, 327, -345, -345, 1903, 217, 142, -345, 752,
- 1903, -345, 328, -345, 333, -345, 338, -345, -345, 135,
- -345, -345, -345, 1903, -345, -345, 340, 340, 1903, 340,
- 1903, 253, 255, 340, -345, -345, -345, 135, -345, 177,
- -345, 2003, 348, -345, -345, 262, -345, -345, -345, -345,
- -345, -345, -345, 345, 340, 340, -345, -6, -6, 263,
- 105, 347, 340, 340, -345, -345, -345, -345, -345, 46,
- -345, 105, 105, -345, 340, -20, -345, -345, 340, -345,
- -345, 105, -345, -345, -345, -345, 106, -345, 1903, 105,
- 613, -345, -345, 272, -345, 273, 340, 340, -6, -345,
- -345
+ 624, -373, -373, -373, -373, -373, -373, 29, -373, 1867,
+ 47, 412, 6, -373, -373, -373, 991, 1867, 1867, 368,
+ 368, 368, 368, 368, -373, 368, 368, -373, -20, 106,
+ -373, 1867, -373, -373, -373, 1867, -373, 55, 73, 88,
+ 815, 275, 368, 903, 1077, 104, 1867, 44, 1867, 1867,
+ 1867, 1867, 1867, 1867, 1867, 1163, 240, 69, -373, 0,
+ -373, -373, -373, -373, 1928, -373, -373, 1, 23, 101,
+ -373, -373, 218, -373, -373, -373, -373, -373, -373, -373,
+ 207, -373, 1, 1, 1, 1, 35, 1, 1, 47,
+ -373, -373, 193, -373, 215, 1161, -373, -373, 412, 30,
+ 49, -373, 3, 542, 542, -373, -373, -373, -373, -373,
+ -373, -373, -373, -373, 1867, 141, 1867, 1867, 326, 47,
+ 244, 1928, 177, 1251, 275, -373, 326, 726, 69, -373,
+ 651, 1867, -373, 1, -373, 326, 74, 273, 187, 1867,
+ 326, 1339, 225, -373, -373, -373, 326, 69, 542, 542,
+ 542, 97, 97, 297, 85, 1867, 1867, 1867, 1867, 1867,
+ 1867, -373, -373, 1427, 1867, 1867, 1867, 1867, 1867, 1867,
+ 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, -373,
+ -373, 22, 1515, 1867, 1867, 1867, 1867, 1867, -373, 294,
+ 295, 303, -373, -373, -373, -373, -373, -373, -373, 1,
+ -373, -373, -373, 295, 47, -373, -373, 1867, 1867, 1867,
+ 1867, 1867, 1867, -373, -373, -373, -373, 1867, 160, 91,
+ -373, -373, 256, -373, -373, 94, 237, 1867, 69, 1603,
+ 1691, -373, 325, -373, -373, 122, 328, -373, 1867, 338,
+ 262, 262, -373, 1928, 190, 111, 257, -373, 274, 2006,
+ 1062, 888, 400, 312, 1928, 1889, 622, 622, 697, 801,
+ 976, 489, 542, 542, 1867, 1867, -373, 1779, 1, -373,
+ -373, 398, 245, 140, 249, 143, 287, 7, -373, 47,
+ -373, 244, 27, 335, 1867, 1867, 1867, 1867, 343, 501,
+ -373, -373, 1867, 244, -373, 240, -373, 240, 240, 240,
+ 240, 240, 268, -373, -373, 1867, 342, 47, -373, -373,
+ 411, -373, 416, -373, 462, -373, -373, -373, 150, 1867,
+ 364, -373, -373, -373, 1867, 323, 158, -373, 505, 1867,
+ -373, 369, -373, 371, -373, 372, -373, -373, 256, -373,
+ -373, 378, 288, 240, 293, 304, 240, -373, 305, 1,
+ -373, -373, -373, 313, 394, 500, 1867, 1867, 318, 256,
+ -373, -373, -373, -373, -373, -373, -373, -373, 199, -373,
+ 1967, 382, -373, -373, 319, -373, -373, -373, 75, -373,
+ 1867, -373, -373, 429, 429, 1867, 429, 1867, 348, 358,
+ 429, 75, -373, -373, -373, -373, -373, -373, -373, 436,
+ 429, 429, -373, 117, 117, 360, 193, 443, 429, 429,
+ -373, -373, 15, -373, 193, 193, -373, 429, 1, -373,
+ -373, 429, -373, -373, 193, -373, -373, -373, -373, 80,
+ -373, 1867, 193, 590, -373, -373, 376, -373, 385, 429,
+ 429, 117, -373, -373
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -345, -345, -345, -345, -345, -345, -345, 8, 5, -345,
- -212, -345, -11, 360, 277, -345, -345, -229, -344, -160,
- -325, -345, 10, -68, -228, -51, -345, -345, -345, 33,
- 350, -345, 244, -117, -274, -345, 27, -9, -38, -345,
- -345, -345, -345, -345, -345, -345, -345, 237, -345, -345,
- -110, -209, -33, -345, -345, -345, 2, 351, 355, -345,
- -345, 11
+ -373, -373, -373, -373, -373, -373, -373, -373, 2, -57,
+ -373, -33, -373, -7, 408, 396, -373, -373, -284, -361,
+ -227, -372, -373, 110, -8, -251, 65, -373, -373, -373,
+ 28, 469, -373, 301, -56, -72, -373, 114, -9, -35,
+ -373, -373, -373, -373, -373, -373, -373, -373, 76, -373,
+ -373, -113, -120, -64, -373, -373, -373, 45, 480, 486,
+ -373, -373, 32
};
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
positive, shift that token. If negative, reduce the rule which
number is the opposite. If zero, do what YYDEFACT says.
If YYTABLE_NINF, syntax error. */
-#define YYTABLE_NINF -190
+#define YYTABLE_NINF -192
static const yytype_int16 yytable[] =
{
- 76, 213, 96, 321, 323, 300, 122, 328, 99, 20,
- 125, 126, 127, 129, 131, 132, 15, 73, 141, 97,
- 212, 122, 105, 105, 105, 105, 105, 161, 299, 105,
- 105, 359, 107, 108, 109, 110, 414, 415, 111, 112,
- 395, 12, 247, 20, 21, 22, 184, -11, 130, 302,
- 151, 92, -3, 203, 417, 423, 14, 133, 143, 105,
- 149, 128, 168, 138, 156, 377, 147, 144, 145, 182,
- 286, 183, 287, 141, 121, 215, 20, 123, 92, 92,
- 178, 179, 180, 288, 92, 76, 211, 122, 92, 204,
- 343, 205, 123, 113, 440, 430, 159, 233, 371, 372,
- 114, 308, 73, 120, 305, 216, 242, 122, 152, 178,
- 179, 180, 309, 243, 141, 432, 244, 135, 204, 353,
- 205, 178, 179, 180, 217, 355, 154, 238, 239, 227,
- 228, 229, 230, 231, 232, 339, 234, 235, 92, 143,
- 399, 385, 206, 14, 207, 249, 254, 378, 241, 169,
- 178, 179, 180, 383, 389, 398, 136, 400, 123, 289,
- 314, 404, 317, 256, 258, 259, 260, 261, 262, 263,
- 264, 265, 137, 267, 268, 270, 246, 255, 123, 178,
- 179, 180, 411, 412, 171, 178, 179, 180, 406, 342,
- 421, 422, 181, 358, 293, 294, 295, 296, 297, 298,
- 433, 321, 427, 208, 291, 239, 429, 178, 179, 180,
- 352, 222, 214, 178, 179, 180, 181, 218, 313, 258,
- 354, 258, 220, 325, 438, 439, 224, 304, 178, 179,
- 180, 356, 331, 320, 333, 335, 382, 301, 326, 236,
- 419, 178, 179, 180, 340, 178, 179, 180, 178, 179,
- 180, 424, 425, 393, 14, 100, 101, 350, 245, 250,
- 20, 431, 178, 179, 180, 141, 102, 253, 306, 434,
- 115, 103, 178, 179, 180, -190, -190, 346, 347, 202,
- 349, 310, 311, 178, 179, 180, 368, 134, 178, 179,
- 180, 188, 139, 20, 330, 148, 336, 338, 153, 341,
- 180, 160, 363, 162, 163, 164, 165, 166, 360, 357,
- 178, 179, 180, 362, 364, 361, 365, 198, 366, 367,
- 369, 370, 199, 200, 201, 141, -189, 202, 199, 200,
- 201, 373, 379, 202, -189, 329, 380, 386, 178, 179,
- 180, 239, 387, 172, 173, 174, 175, 388, 396, 402,
- 176, 403, 177, -189, -189, -189, -189, 407, 408, 418,
- -189, 313, -189, 337, 410, -189, 420, 390, 436, 437,
- 93, 209, -189, -189, -189, -189, 178, 179, 180, 435,
- 401, 409, 428, 188, 189, 390, -189, -189, -189, 119,
- -189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
- -189, -63, 426, 252, 405, -189, -189, -189, 197, 198,
- -189, -189, 0, 157, 199, 200, 201, 158, 266, 202,
- 0, 76, 271, 272, 273, 274, 275, 276, 277, 278,
- 279, 280, 281, 282, 283, 284, 285, 16, 1, 2,
- 3, 4, 5, 0, 14, 0, 17, 0, 18, 19,
- 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 0, 31, 32, 33, 34, 35, 36, 0, 37,
- 38, 39, 40, 41, 42, 43, 44, 45, 0, 0,
- 0, 46, 47, 48, 49, 50, 0, 51, 52, 53,
- 54, 55, 56, 178, 179, 180, 0, 57, 58, 59,
- 60, 61, 62, 63, 64, 0, 0, 0, 0, 198,
- 65, 178, 179, 180, 199, 200, 201, 0, 344, 202,
- 0, 0, 66, 67, 68, 0, 16, 0, 0, 69,
- 70, 188, 189, 71, 72, 17, 351, 18, 19, 20,
- 21, 22, 23, 24, -58, 26, 27, 28, 29, 30,
- 0, 31, 32, 33, 34, 35, 0, 198, 0, 0,
- 39, 0, 199, 200, 201, 0, 0, 202, 0, 0,
- 186, 187, 188, 189, 50, 0, 51, 52, 53, 54,
- 55, 56, 381, 0, 0, 0, 57, 58, 59, 60,
- 61, 62, 0, 64, 194, 195, 196, 197, 198, 65,
- 0, 0, 0, 199, 200, 201, 0, 0, 202, 0,
- 0, 66, 67, 68, 16, 0, 0, 0, 69, 70,
- 0, 0, 71, 17, 0, 18, 19, 20, 21, 22,
- 23, 24, 0, 26, 27, 28, 29, 30, 0, 31,
- 32, 33, 34, 35, 0, 178, 179, 180, 39, 0,
- 0, 0, 0, 0, 0, 0, 0, 186, 187, 188,
- 189, 0, 50, 0, 51, 52, 53, 54, 55, 56,
- 374, 0, 0, 0, 57, 58, 59, 60, 61, 62,
- 0, 64, 195, 196, 197, 198, 0, 65, 0, 0,
- 199, 200, 201, 0, 0, 202, 0, 0, 0, 66,
- 67, 68, 0, 0, 0, 0, 69, 70, 0, -58,
- 71, 14, 0, 17, 0, 18, 19, 20, 21, 22,
- 23, 24, 0, 140, 27, 28, 29, 30, 103, 31,
- 32, 33, 34, 35, 0, 178, 179, 180, 39, 0,
- 0, 0, 0, 0, 0, 0, 186, 187, 188, 189,
- 0, 0, 50, 0, 51, 52, 53, 54, 55, 56,
- 375, 178, 179, 180, 57, 58, 59, 60, 61, 62,
- 0, 64, 196, 197, 198, 0, 0, 65, 0, 199,
- 200, 201, 0, 0, 202, 0, 376, 0, 0, 66,
- 67, 68, 0, 0, 0, 0, 69, 70, 0, 14,
- 71, 17, 0, 18, 19, 20, 21, 22, 23, 24,
- 0, 26, 27, 28, 29, 30, 0, 31, 32, 33,
- 34, 35, 0, 178, 179, 180, 39, 0, 0, 0,
- 0, 0, 0, 186, -190, 188, 189, 0, 0, 0,
- 50, 0, 51, 52, 53, 54, 55, 56, 384, 0,
- 0, 0, 57, 58, 59, 60, 61, 62, 0, 64,
- 197, 198, 0, 0, 0, 65, 199, 200, 201, 0,
- 0, 202, 0, 0, 0, 0, 0, 66, 67, 68,
- 0, 0, 0, 0, 69, 70, 0, 14, 71, 17,
- 0, 18, 19, 20, 21, 22, 23, 24, 0, 146,
- 27, 28, 29, 30, 0, 31, 32, 33, 34, 35,
- 0, 0, 0, 0, 39, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 50, 0,
- 51, 52, 53, 54, 55, 56, 0, 0, 0, 0,
- 57, 58, 59, 60, 61, 62, 0, 64, 204, 0,
- 205, -160, 0, 65, 0, 0, 0, 0, 0, -160,
- 0, 0, 0, 0, 0, 66, 67, 68, 186, 187,
- 188, 189, 69, 70, 0, 0, 71, 0, -160, -160,
- -160, -160, 0, 0, 0, -160, 0, -160, 0, 0,
- -160, 0, 0, 0, 0, 197, 198, -160, -160, -160,
- -160, 199, 200, 201, 0, 0, 202, 0, 0, 0,
- 0, -160, -160, -160, 0, -160, -160, -160, -160, -160,
- -160, -160, -160, -160, -160, -160, 0, 0, 0, 0,
- -160, -160, -160, 0, 0, -160, -160, 17, 98, 18,
- 19, 20, 21, 22, 23, 24, 0, 26, 27, 28,
- 29, 30, 0, 31, 32, 33, 34, 35, 0, 0,
- 0, 0, 39, 0, 0, 0, 0, 0, 0, -190,
- 0, 188, 189, 0, 0, 0, 50, 0, 51, 52,
- 53, 54, 55, 56, 0, 0, 0, 0, 57, 58,
- 59, 60, 61, 62, 0, 64, 197, 198, 0, 0,
- 0, 65, 199, 200, 201, 0, 0, 202, 0, 0,
- 0, 0, 0, 66, 67, 68, 0, 0, 0, 0,
- 69, 70, 0, 17, 71, 18, 19, 20, 21, 22,
- 23, 24, 150, 26, 27, 28, 29, 30, 0, 31,
- 32, 33, 34, 35, 0, 0, 0, 0, 39, 172,
- 173, 174, 175, 0, 0, 0, 176, 0, 177, 0,
- 0, 0, 50, 0, 51, 52, 53, 54, 55, 56,
- 0, 0, 0, 0, 57, 58, 59, 60, 61, 62,
- 0, 64, 178, 179, 180, 0, 0, 65, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,
- 67, 68, 0, 0, 0, 0, 69, 70, 0, 17,
- 71, 18, 19, 20, 21, 22, 23, 24, 0, 26,
- 27, 28, 29, 30, 0, 31, 32, 33, 34, 35,
- 0, 0, 0, 0, 39, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 50, 0,
- 51, 52, 53, 54, 55, 56, 0, 0, 0, 0,
- 57, 58, 59, 60, 61, 62, 0, 64, 0, 0,
- 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 66, 67, 68, 0, 0,
- 0, 0, 69, 70, 0, 167, 71, 17, 0, 18,
- 19, 20, 21, 22, 23, 24, 0, 26, 27, 28,
- 29, 30, 0, 31, 32, 33, 34, 35, 0, 0,
- 0, 0, 39, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 50, 0, 51, 52,
- 53, 54, 55, 56, 0, 0, 0, 0, 57, 58,
- 59, 60, 61, 62, 0, 64, 0, 0, 0, 0,
- 0, 65, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 66, 67, 68, 0, 0, 0, 0,
- 69, 70, 0, 237, 71, 17, 0, 18, 19, 20,
- 21, 22, 23, 24, 0, 26, 27, 28, 29, 30,
- 0, 31, 32, 33, 34, 35, 0, 0, 0, 0,
- 39, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 50, 0, 51, 52, 53, 54,
- 55, 56, 0, 0, 0, 0, 57, 58, 59, 60,
- 61, 62, 0, 64, 0, 0, 0, 0, 0, 65,
+ 56, 216, 95, 182, 226, 351, 128, 102, 100, 159,
+ 401, 160, 74, 92, 147, 215, 188, 336, 193, 194,
+ 195, 196, 198, 200, 201, 426, 233, 161, 161, 14,
+ -13, 264, 183, 265, 184, 138, 339, 19, 353, 96,
+ 96, 358, 125, 420, 266, 134, 154, 340, 96, -3,
+ 19, 433, 110, 111, 112, 113, 73, 114, 115, 19,
+ 20, 21, 161, 96, 108, 108, 108, 108, 108, 229,
+ 108, 108, 230, 131, 132, 155, 156, 157, 116, 128,
+ 443, 218, 96, 183, 73, 184, 130, 108, 136, 95,
+ 435, 202, 143, 103, 104, 395, 228, 302, 162, 162,
+ 92, 161, 197, 304, 128, 388, 389, 118, 219, 192,
+ 185, 121, 186, 96, 225, 56, 126, 117, 203, 135,
+ 267, 220, 140, 321, 146, 139, 148, 149, 150, 151,
+ 152, 199, 235, 162, 405, 290, 284, 285, 286, 287,
+ 288, 289, 141, 291, 292, 158, 240, 241, 242, 351,
+ 244, 245, 332, 122, 248, 334, 227, 155, 156, 157,
+ 417, 418, 367, 155, 156, 157, 155, 156, 157, 130,
+ 372, 123, 162, 271, 272, 273, 274, 275, 276, 422,
+ 436, 277, 239, 155, 156, 157, 124, 427, 428, -192,
+ -192, 308, 361, 181, 155, 156, 157, 434, 295, 297,
+ 298, 299, 300, 301, 329, 437, 294, 232, 56, 374,
+ 320, 392, 155, 156, 157, 155, 156, 157, 310, 316,
+ 312, 314, 155, 156, 157, 338, 269, 187, 191, 318,
+ 155, 156, 157, 356, 243, 206, 158, 359, 204, 217,
+ 249, 250, 251, 252, 253, 254, 255, 256, 257, 258,
+ 259, 260, 261, 262, 263, 325, 326, 303, 328, 155,
+ 156, 157, 155, 156, 157, 331, 378, 399, 221, 333,
+ 128, 155, 156, 157, 223, 343, 297, 344, 297, 347,
+ 355, 337, 379, 231, 73, 385, 16, 391, 17, 18,
+ 19, 20, 21, 22, 23, 236, 127, 25, 26, 27,
+ 28, 106, 29, 30, 31, 32, 33, 335, 238, 363,
+ 368, 34, 155, 156, 157, 278, 280, 155, 156, 157,
+ 56, 155, 156, 157, 282, 35, 306, 36, 37, 38,
+ 39, 40, 41, 350, 309, 315, 157, 42, 43, 44,
+ 45, 46, 47, 371, 48, 128, 155, 156, 157, 319,
+ 49, 404, 317, 406, 431, 322, 341, 410, 19, 155,
+ 156, 157, 50, 51, 52, 360, 362, 414, 415, 53,
+ 54, 323, 167, 55, 369, 424, 425, 73, 343, 375,
+ 396, 376, 377, 19, 430, 381, 167, 168, 432, 105,
+ 382, 412, 393, 396, 106, 155, 156, 157, 177, 380,
+ 370, 383, 384, 178, 179, 180, 441, 442, 181, 429,
+ 386, 176, 177, 75, 387, 390, 394, 178, 179, 180,
+ 97, 73, 181, 16, 95, 17, 18, 19, 20, 21,
+ 22, 23, 76, 24, 25, 26, 27, 28, 402, 29,
+ 30, 31, 32, 33, 77, 408, 78, 79, 34, 80,
+ 81, 82, 83, 84, 85, 409, 413, 421, 86, 87,
+ 88, 89, 35, 423, 36, 37, 38, 39, 40, 41,
+ 155, 156, 157, 439, 42, 43, 44, 45, 46, 47,
+ 90, 48, 440, 155, 156, 157, 177, 49, 155, 156,
+ 157, 178, 179, 180, 213, 330, 181, 407, 438, 50,
+ 51, 52, 75, 120, 293, 411, 53, 54, 364, 0,
+ 55, 91, 16, 365, 17, 18, 19, 20, 21, 22,
+ 23, -60, 24, 25, 26, 27, 28, 144, 29, 30,
+ 31, 32, 33, 145, 155, 156, 157, 34, 0, 207,
+ 208, 209, 210, 0, 0, 0, 211, 0, 212, 167,
+ 168, 35, 0, 36, 37, 38, 39, 40, 41, 366,
+ 0, 0, 0, 42, 43, 44, 45, 46, 47, 0,
+ 48, 0, 155, 156, 157, 177, 49, 155, 156, 157,
+ 178, 179, 180, 0, 0, 181, 0, 0, 50, 51,
+ 52, 75, 0, 0, 0, 53, 54, -65, 0, 55,
+ 0, 16, 373, 17, 18, 19, 20, 21, 22, 23,
+ 0, 24, 25, 26, 27, 28, 0, 29, 30, 31,
+ 32, 33, 0, 0, 0, 0, 34, 1, 2, 3,
+ 4, 5, 6, 178, 179, 180, 0, 0, 181, 0,
+ 35, 0, 36, 37, 38, 39, 40, 41, 0, 0,
+ 0, -162, 42, 43, 44, 45, 46, 47, 0, 48,
+ 183, 0, 184, -162, 0, 49, 0, 0, 0, 0,
+ 0, -162, 0, 0, 0, 0, 0, 50, 51, 52,
+ 165, 166, 167, 168, 53, 54, 0, -60, 55, 0,
+ -162, -162, -162, -162, 0, 0, 0, -162, 0, -162,
+ 0, 0, -162, 0, 173, 174, 175, 176, 177, -162,
+ -162, -162, -162, 178, 179, 180, 0, 0, 181, 0,
+ 0, 0, 0, -162, -162, -162, -191, -162, -162, -162,
+ -162, -162, -162, -162, -162, -162, -162, -162, -191, 0,
+ 0, 0, -162, -162, -162, 0, -191, -162, -162, 0,
+ 0, 0, 0, 0, 0, 165, 166, 167, 168, 0,
+ 0, 0, 0, 0, 0, -191, -191, -191, -191, 0,
+ 0, 0, -191, 0, -191, 0, 0, -191, 0, 0,
+ 174, 175, 176, 177, -191, -191, -191, -191, 178, 179,
+ 180, 0, 0, 181, 0, 0, 0, 0, -191, -191,
+ -191, 0, -191, -191, -191, -191, -191, -191, -191, -191,
+ -191, -191, -191, 0, 0, 0, 0, -191, -191, -191,
+ 0, 0, -191, -191, 73, 0, 16, 0, 17, 18,
+ 19, 20, 21, 22, 23, 0, 24, 25, 26, 27,
+ 28, 0, 29, 30, 31, 32, 33, 0, 0, 0,
+ 0, 34, 0, 0, 0, 0, 0, 0, 0, 165,
+ 166, 167, 168, 0, 0, 35, 0, 36, 37, 38,
+ 39, 40, 41, 0, 0, 0, 0, 42, 43, 44,
+ 45, 46, 47, 0, 48, 175, 176, 177, 0, 0,
+ 49, 0, 178, 179, 180, 0, 0, 181, 0, 0,
+ 0, 0, 50, 51, 52, 0, 0, 0, 0, 53,
+ 54, 0, 73, 55, 16, 0, 17, 18, 19, 20,
+ 21, 22, 23, 0, 133, 25, 26, 27, 28, 0,
+ 29, 30, 31, 32, 33, 0, 0, 0, 0, 34,
+ 0, 0, 0, 0, 0, 0, 165, -192, 167, 168,
+ 0, 0, 0, 35, 0, 36, 37, 38, 39, 40,
+ 41, 0, 0, 0, 0, 42, 43, 44, 45, 46,
+ 47, 0, 48, 176, 177, 0, 0, 0, 49, 178,
+ 179, 180, 0, 0, 181, 0, 0, 0, 0, 0,
+ 50, 51, 52, 0, 0, 0, 0, 53, 54, 0,
+ 0, 55, 16, 101, 17, 18, 19, 20, 21, 22,
+ 23, 0, 24, 25, 26, 27, 28, 0, 29, 30,
+ 31, 32, 33, 0, 0, 0, 0, 34, 0, 0,
+ 0, 0, 0, 0, 165, 166, 167, 168, 0, 0,
+ 0, 35, 0, 36, 37, 38, 39, 40, 41, 0,
+ 0, 0, 0, 42, 43, 44, 45, 46, 47, 0,
+ 48, 176, 177, 0, 0, 0, 49, 178, 179, 180,
+ 0, 0, 181, 0, 0, 0, 0, 0, 50, 51,
+ 52, 0, 0, 0, 0, 53, 54, 0, 16, 55,
+ 17, 18, 19, 20, 21, 22, 23, 137, 24, 25,
+ 26, 27, 28, 0, 29, 30, 31, 32, 33, 0,
+ 0, 0, 0, 34, 0, 0, 0, 0, 0, 0,
+ -192, 0, 167, 168, 0, 0, 0, 35, 0, 36,
+ 37, 38, 39, 40, 41, 0, 0, 0, 0, 42,
+ 43, 44, 45, 46, 47, 0, 48, 176, 177, 0,
+ 0, 0, 49, 178, 179, 180, 0, 0, 181, 0,
+ 0, 0, 0, 0, 50, 51, 52, 0, 0, 0,
+ 0, 53, 54, 0, 16, 55, 17, 18, 19, 20,
+ 21, 22, 23, 0, 24, 25, 26, 27, 28, 0,
+ 29, 30, 31, 32, 33, 0, 0, 0, 0, 34,
+ 207, 208, 209, 210, 0, 0, 0, 211, 0, 212,
+ 0, 0, 0, 35, 0, 36, 37, 38, 39, 40,
+ 41, 0, 0, 0, 0, 42, 43, 44, 45, 46,
+ 47, 0, 48, 155, 156, 157, 0, 0, 49, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 66, 67, 68, 0, 0, 0, 0, 69, 70,
- 0, 248, 71, 17, 0, 18, 19, 20, 21, 22,
- 23, 24, 0, 26, 27, 28, 29, 30, 0, 31,
- 32, 33, 34, 35, 0, 0, 0, 0, 39, 0,
+ 50, 51, 52, 0, 0, 0, 0, 53, 54, 0,
+ 153, 55, 16, 0, 17, 18, 19, 20, 21, 22,
+ 23, 0, 24, 25, 26, 27, 28, 0, 29, 30,
+ 31, 32, 33, 0, 0, 0, 0, 34, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 50, 0, 51, 52, 53, 54, 55, 56,
- 0, 0, 0, 0, 57, 58, 59, 60, 61, 62,
- 0, 64, 0, 0, 0, 0, 0, 65, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,
- 67, 68, 0, 0, 0, 0, 69, 70, 0, 269,
- 71, 17, 0, 18, 19, 20, 21, 22, 23, 24,
- 0, 26, 27, 28, 29, 30, 0, 31, 32, 33,
- 34, 35, 0, 0, 0, 0, 39, 0, 0, 0,
+ 0, 35, 0, 36, 37, 38, 39, 40, 41, 0,
+ 0, 0, 0, 42, 43, 44, 45, 46, 47, 0,
+ 48, 0, 0, 0, 0, 0, 49, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 50, 51,
+ 52, 0, 0, 0, 0, 53, 54, 0, 224, 55,
+ 16, 0, 17, 18, 19, 20, 21, 22, 23, 0,
+ 24, 25, 26, 27, 28, 0, 29, 30, 31, 32,
+ 33, 0, 0, 0, 0, 34, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 35,
+ 0, 36, 37, 38, 39, 40, 41, 0, 0, 0,
+ 0, 42, 43, 44, 45, 46, 47, 0, 48, 0,
+ 0, 0, 0, 0, 49, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 50, 51, 52, 0,
+ 0, 0, 0, 53, 54, 0, 234, 55, 16, 0,
+ 17, 18, 19, 20, 21, 22, 23, 0, 24, 25,
+ 26, 27, 28, 0, 29, 30, 31, 32, 33, 0,
+ 0, 0, 0, 34, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 35, 0, 36,
+ 37, 38, 39, 40, 41, 0, 0, 0, 0, 42,
+ 43, 44, 45, 46, 47, 0, 48, 0, 0, 0,
+ 0, 0, 49, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 50, 51, 52, 0, 0, 0,
+ 0, 53, 54, 0, 247, 55, 16, 0, 17, 18,
+ 19, 20, 21, 22, 23, 0, 24, 25, 26, 27,
+ 28, 0, 29, 30, 31, 32, 33, 0, 0, 0,
+ 0, 34, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 35, 0, 36, 37, 38,
+ 39, 40, 41, 0, 0, 0, 0, 42, 43, 44,
+ 45, 46, 47, 0, 48, 0, 0, 0, 0, 0,
+ 49, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 50, 51, 52, 0, 0, 0, 0, 53,
+ 54, 0, 270, 55, 16, 0, 17, 18, 19, 20,
+ 21, 22, 23, 0, 24, 25, 26, 27, 28, 0,
+ 29, 30, 31, 32, 33, 0, 0, 0, 0, 34,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 50, 0, 51, 52, 53, 54, 55, 56, 0, 0,
- 0, 0, 57, 58, 59, 60, 61, 62, 0, 64,
- 0, 0, 0, 0, 0, 65, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 66, 67, 68,
- 0, 0, 0, 0, 69, 70, 0, 292, 71, 17,
- 0, 18, 19, 20, 21, 22, 23, 24, 0, 26,
- 27, 28, 29, 30, 0, 31, 32, 33, 34, 35,
- 0, 0, 0, 0, 39, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 50, 0,
- 51, 52, 53, 54, 55, 56, 0, 0, 0, 0,
- 57, 58, 59, 60, 61, 62, 0, 64, 0, 0,
- 0, 0, 0, 65, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 66, 67, 68, 0, 0,
- 0, 0, 69, 70, 0, 332, 71, 17, 0, 18,
- 19, 20, 21, 22, 23, 24, 0, 26, 27, 28,
- 29, 30, 0, 31, 32, 33, 34, 35, 0, 0,
- 0, 0, 39, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 50, 0, 51, 52,
- 53, 54, 55, 56, 0, 0, 0, 0, 57, 58,
- 59, 60, 61, 62, 0, 64, 0, 0, 0, 0,
- 0, 65, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 66, 67, 68, 0, 0, 0, 0,
- 69, 70, 0, 334, 71, 17, 0, 18, 19, 20,
- 21, 22, 23, 24, 0, 26, 27, 28, 29, 30,
- 0, 31, 32, 33, 34, 35, 0, 0, 0, 0,
- 39, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 50, 0, 51, 52, 53, 54,
- 55, 56, 0, 0, 0, 0, 57, 58, 59, 60,
- 61, 62, 0, 64, 0, 0, 0, 0, 0, 65,
+ 0, 0, 0, 35, 0, 36, 37, 38, 39, 40,
+ 41, 0, 0, 0, 0, 42, 43, 44, 45, 46,
+ 47, 0, 48, 0, 0, 0, 0, 0, 49, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 66, 67, 68, 0, 0, 0, 0, 69, 70,
- 0, 348, 71, 17, 0, 18, 19, 20, 21, 22,
- 23, 24, 0, 26, 27, 28, 29, 30, 0, 31,
- 32, 33, 34, 35, 0, 0, 0, 0, 39, 0,
+ 50, 51, 52, 0, 0, 0, 0, 53, 54, 0,
+ 311, 55, 16, 0, 17, 18, 19, 20, 21, 22,
+ 23, 0, 24, 25, 26, 27, 28, 0, 29, 30,
+ 31, 32, 33, 0, 0, 0, 0, 34, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 50, 0, 51, 52, 53, 54, 55, 56,
- 0, 0, 0, 0, 57, 58, 59, 60, 61, 62,
- 0, 64, 0, 0, 0, 185, 0, 65, 0, 0,
- 0, 0, 186, 187, 188, 189, 0, 0, 0, 66,
- 67, 68, 0, 0, 0, 0, 69, 70, 0, 0,
- 71, 190, 191, 345, 192, 193, 194, 195, 196, 197,
- 198, 0, 0, 0, 185, 199, 200, 201, 0, 0,
- 202, 186, 187, 188, 189, 0, 0, 0, 0, 0,
+ 0, 35, 0, 36, 37, 38, 39, 40, 41, 0,
+ 0, 0, 0, 42, 43, 44, 45, 46, 47, 0,
+ 48, 0, 0, 0, 0, 0, 49, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 50, 51,
+ 52, 0, 0, 0, 0, 53, 54, 0, 313, 55,
+ 16, 0, 17, 18, 19, 20, 21, 22, 23, 0,
+ 24, 25, 26, 27, 28, 0, 29, 30, 31, 32,
+ 33, 0, 0, 0, 0, 34, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 35,
+ 0, 36, 37, 38, 39, 40, 41, 0, 0, 0,
+ 0, 42, 43, 44, 45, 46, 47, 0, 48, 0,
+ 0, 0, 0, 0, 49, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 50, 51, 52, 0,
+ 0, 0, 0, 53, 54, 0, 327, 55, 16, 0,
+ 17, 18, 19, 20, 21, 22, 23, 0, 24, 25,
+ 26, 27, 28, 0, 29, 30, 31, 32, 33, 0,
+ 0, 0, 0, 34, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 35, 0, 36,
+ 37, 38, 39, 40, 41, 0, 0, 0, 0, 42,
+ 43, 44, 45, 46, 47, 0, 48, 0, 0, 0,
+ 164, 0, 49, 0, 0, 0, 0, 165, 166, 167,
+ 168, 0, 0, 0, 50, 51, 52, 0, 0, 0,
+ 0, 53, 54, 0, 0, 55, 169, 170, 324, 171,
+ 172, 173, 174, 175, 176, 177, 0, 0, 0, 164,
+ 178, 179, 180, 0, 0, 181, 165, 166, 167, 168,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 190, 191, 0, 192, 193, 194, 195, 196, 197, 198,
- 0, 0, 0, 185, 199, 200, 201, 0, 0, 202,
- 186, 187, 188, 189, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 169, 170, 0, 171, 172,
+ 173, 174, 175, 176, 177, 0, 0, 0, 164, 178,
+ 179, 180, 0, 0, 181, 165, 166, 167, 168, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 191, 0, 192, 193, 194, 195, 196, 197, 198, 0,
- 0, 0, -190, 199, 200, 201, 0, 0, 202, 186,
- 187, 188, 189, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 170, 0, 171, 172, 173,
+ 174, 175, 176, 177, 0, 0, 0, -192, 178, 179,
+ 180, 0, 0, 181, 165, 166, 167, 168, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 192, 193, 194, 195, 196, 197, 198, 0, 0,
- 0, 0, 199, 200, 201, 0, 0, 202
+ 0, 0, 0, 0, 0, 0, 171, 172, 173, 174,
+ 175, 176, 177, 0, 0, 0, 0, 178, 179, 180,
+ 0, 0, 181
};
static const yytype_int16 yycheck[] =
{
- 9, 111, 13, 232, 232, 214, 26, 235, 17, 14,
- 43, 44, 45, 46, 47, 48, 8, 9, 56, 14,
- 11, 26, 20, 21, 22, 23, 24, 65, 9, 27,
- 28, 305, 21, 22, 23, 24, 42, 43, 27, 28,
- 365, 0, 152, 14, 15, 16, 79, 0, 46, 11,
- 59, 32, 0, 86, 398, 9, 8, 49, 56, 57,
- 58, 66, 71, 55, 62, 339, 58, 56, 57, 8,
- 8, 10, 10, 111, 41, 113, 14, 97, 32, 32,
- 71, 72, 73, 21, 32, 94, 97, 26, 32, 8,
- 11, 10, 97, 97, 438, 420, 63, 130, 326, 327,
- 10, 8, 94, 20, 221, 114, 144, 26, 20, 71,
- 72, 73, 19, 146, 152, 9, 149, 97, 8, 11,
- 10, 71, 72, 73, 116, 11, 97, 136, 137, 124,
- 125, 126, 127, 128, 129, 252, 131, 132, 32, 137,
- 368, 350, 8, 8, 10, 154, 96, 11, 137, 44,
- 71, 72, 73, 11, 19, 367, 97, 369, 97, 97,
- 228, 373, 230, 172, 173, 174, 175, 176, 177, 178,
- 179, 180, 97, 182, 183, 184, 19, 169, 97, 71,
- 72, 73, 394, 395, 19, 71, 72, 73, 11, 19,
- 402, 403, 75, 303, 203, 204, 205, 206, 207, 208,
- 428, 430, 414, 8, 202, 214, 418, 71, 72, 73,
- 19, 23, 97, 71, 72, 73, 75, 20, 227, 228,
- 19, 230, 20, 232, 436, 437, 20, 219, 71, 72,
- 73, 19, 241, 231, 243, 244, 19, 96, 233, 96,
- 400, 71, 72, 73, 253, 71, 72, 73, 71, 72,
- 73, 411, 412, 363, 8, 18, 19, 290, 9, 69,
- 14, 421, 71, 72, 73, 303, 20, 10, 69, 429,
- 33, 25, 71, 72, 73, 91, 92, 286, 287, 95,
- 289, 20, 97, 71, 72, 73, 319, 50, 71, 72,
- 73, 59, 55, 14, 96, 58, 9, 23, 61, 10,
- 73, 64, 20, 66, 67, 68, 69, 70, 23, 96,
- 71, 72, 73, 308, 96, 307, 96, 85, 96, 96,
- 96, 19, 90, 91, 92, 363, 11, 95, 90, 91,
- 92, 96, 341, 95, 19, 96, 9, 9, 71, 72,
- 73, 350, 9, 38, 39, 40, 41, 9, 8, 96,
- 45, 96, 47, 38, 39, 40, 41, 9, 96, 96,
- 45, 370, 47, 96, 19, 50, 19, 359, 96, 96,
- 10, 94, 57, 58, 59, 60, 71, 72, 73, 430,
- 370, 392, 415, 59, 60, 377, 71, 72, 73, 39,
- 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
- 85, 96, 413, 159, 377, 90, 91, 92, 84, 85,
- 95, 96, -1, 62, 90, 91, 92, 62, 181, 95,
- -1, 430, 185, 186, 187, 188, 189, 190, 191, 192,
- 193, 194, 195, 196, 197, 198, 199, 1, 3, 4,
- 5, 6, 7, -1, 8, -1, 10, -1, 12, 13,
- 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
- 24, -1, 26, 27, 28, 29, 30, 31, -1, 33,
- 34, 35, 36, 37, 38, 39, 40, 41, -1, -1,
- -1, 45, 46, 47, 48, 49, -1, 51, 52, 53,
- 54, 55, 56, 71, 72, 73, -1, 61, 62, 63,
- 64, 65, 66, 67, 68, -1, -1, -1, -1, 85,
- 74, 71, 72, 73, 90, 91, 92, -1, 96, 95,
- -1, -1, 86, 87, 88, -1, 1, -1, -1, 93,
- 94, 59, 60, 97, 98, 10, 96, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- -1, 26, 27, 28, 29, 30, -1, 85, -1, -1,
- 35, -1, 90, 91, 92, -1, -1, 95, -1, -1,
- 57, 58, 59, 60, 49, -1, 51, 52, 53, 54,
- 55, 56, 345, -1, -1, -1, 61, 62, 63, 64,
- 65, 66, -1, 68, 81, 82, 83, 84, 85, 74,
- -1, -1, -1, 90, 91, 92, -1, -1, 95, -1,
- -1, 86, 87, 88, 1, -1, -1, -1, 93, 94,
- -1, -1, 97, 10, -1, 12, 13, 14, 15, 16,
- 17, 18, -1, 20, 21, 22, 23, 24, -1, 26,
- 27, 28, 29, 30, -1, 71, 72, 73, 35, -1,
- -1, -1, -1, -1, -1, -1, -1, 57, 58, 59,
- 60, -1, 49, -1, 51, 52, 53, 54, 55, 56,
- 96, -1, -1, -1, 61, 62, 63, 64, 65, 66,
- -1, 68, 82, 83, 84, 85, -1, 74, -1, -1,
- 90, 91, 92, -1, -1, 95, -1, -1, -1, 86,
- 87, 88, -1, -1, -1, -1, 93, 94, -1, 96,
- 97, 8, -1, 10, -1, 12, 13, 14, 15, 16,
- 17, 18, -1, 20, 21, 22, 23, 24, 25, 26,
- 27, 28, 29, 30, -1, 71, 72, 73, 35, -1,
- -1, -1, -1, -1, -1, -1, 57, 58, 59, 60,
- -1, -1, 49, -1, 51, 52, 53, 54, 55, 56,
- 96, 71, 72, 73, 61, 62, 63, 64, 65, 66,
- -1, 68, 83, 84, 85, -1, -1, 74, -1, 90,
- 91, 92, -1, -1, 95, -1, 96, -1, -1, 86,
- 87, 88, -1, -1, -1, -1, 93, 94, -1, 8,
- 97, 10, -1, 12, 13, 14, 15, 16, 17, 18,
- -1, 20, 21, 22, 23, 24, -1, 26, 27, 28,
- 29, 30, -1, 71, 72, 73, 35, -1, -1, -1,
- -1, -1, -1, 57, 58, 59, 60, -1, -1, -1,
- 49, -1, 51, 52, 53, 54, 55, 56, 96, -1,
- -1, -1, 61, 62, 63, 64, 65, 66, -1, 68,
- 84, 85, -1, -1, -1, 74, 90, 91, 92, -1,
- -1, 95, -1, -1, -1, -1, -1, 86, 87, 88,
- -1, -1, -1, -1, 93, 94, -1, 8, 97, 10,
- -1, 12, 13, 14, 15, 16, 17, 18, -1, 20,
- 21, 22, 23, 24, -1, 26, 27, 28, 29, 30,
- -1, -1, -1, -1, 35, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 49, -1,
- 51, 52, 53, 54, 55, 56, -1, -1, -1, -1,
- 61, 62, 63, 64, 65, 66, -1, 68, 8, -1,
- 10, 11, -1, 74, -1, -1, -1, -1, -1, 19,
- -1, -1, -1, -1, -1, 86, 87, 88, 57, 58,
- 59, 60, 93, 94, -1, -1, 97, -1, 38, 39,
- 40, 41, -1, -1, -1, 45, -1, 47, -1, -1,
- 50, -1, -1, -1, -1, 84, 85, 57, 58, 59,
- 60, 90, 91, 92, -1, -1, 95, -1, -1, -1,
- -1, 71, 72, 73, -1, 75, 76, 77, 78, 79,
- 80, 81, 82, 83, 84, 85, -1, -1, -1, -1,
- 90, 91, 92, -1, -1, 95, 96, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, -1, 20, 21, 22,
- 23, 24, -1, 26, 27, 28, 29, 30, -1, -1,
- -1, -1, 35, -1, -1, -1, -1, -1, -1, 57,
- -1, 59, 60, -1, -1, -1, 49, -1, 51, 52,
- 53, 54, 55, 56, -1, -1, -1, -1, 61, 62,
- 63, 64, 65, 66, -1, 68, 84, 85, -1, -1,
- -1, 74, 90, 91, 92, -1, -1, 95, -1, -1,
- -1, -1, -1, 86, 87, 88, -1, -1, -1, -1,
- 93, 94, -1, 10, 97, 12, 13, 14, 15, 16,
- 17, 18, 19, 20, 21, 22, 23, 24, -1, 26,
- 27, 28, 29, 30, -1, -1, -1, -1, 35, 38,
- 39, 40, 41, -1, -1, -1, 45, -1, 47, -1,
- -1, -1, 49, -1, 51, 52, 53, 54, 55, 56,
- -1, -1, -1, -1, 61, 62, 63, 64, 65, 66,
- -1, 68, 71, 72, 73, -1, -1, 74, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
- 87, 88, -1, -1, -1, -1, 93, 94, -1, 10,
- 97, 12, 13, 14, 15, 16, 17, 18, -1, 20,
- 21, 22, 23, 24, -1, 26, 27, 28, 29, 30,
- -1, -1, -1, -1, 35, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 49, -1,
- 51, 52, 53, 54, 55, 56, -1, -1, -1, -1,
- 61, 62, 63, 64, 65, 66, -1, 68, -1, -1,
- -1, -1, -1, 74, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 86, 87, 88, -1, -1,
- -1, -1, 93, 94, -1, 96, 97, 10, -1, 12,
- 13, 14, 15, 16, 17, 18, -1, 20, 21, 22,
- 23, 24, -1, 26, 27, 28, 29, 30, -1, -1,
- -1, -1, 35, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 49, -1, 51, 52,
- 53, 54, 55, 56, -1, -1, -1, -1, 61, 62,
- 63, 64, 65, 66, -1, 68, -1, -1, -1, -1,
- -1, 74, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 86, 87, 88, -1, -1, -1, -1,
- 93, 94, -1, 96, 97, 10, -1, 12, 13, 14,
- 15, 16, 17, 18, -1, 20, 21, 22, 23, 24,
- -1, 26, 27, 28, 29, 30, -1, -1, -1, -1,
- 35, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 49, -1, 51, 52, 53, 54,
- 55, 56, -1, -1, -1, -1, 61, 62, 63, 64,
- 65, 66, -1, 68, -1, -1, -1, -1, -1, 74,
+ 9, 114, 11, 67, 124, 289, 41, 16, 15, 9,
+ 382, 11, 10, 11, 49, 12, 73, 10, 82, 83,
+ 84, 85, 86, 87, 88, 10, 139, 27, 27, 0,
+ 0, 9, 9, 11, 11, 44, 9, 15, 289, 33,
+ 33, 292, 40, 404, 22, 43, 55, 20, 33, 0,
+ 15, 423, 20, 21, 22, 23, 9, 25, 26, 15,
+ 16, 17, 27, 33, 19, 20, 21, 22, 23, 133,
+ 25, 26, 136, 41, 42, 72, 73, 74, 98, 114,
+ 441, 116, 33, 9, 9, 11, 41, 42, 43, 98,
+ 10, 89, 47, 17, 18, 20, 131, 217, 98, 98,
+ 98, 27, 67, 12, 139, 356, 357, 31, 117, 81,
+ 9, 35, 11, 33, 123, 124, 40, 11, 90, 43,
+ 98, 119, 46, 12, 48, 21, 50, 51, 52, 53,
+ 54, 86, 141, 98, 385, 199, 193, 194, 195, 196,
+ 197, 198, 98, 200, 201, 76, 155, 156, 157, 433,
+ 159, 160, 12, 98, 163, 12, 124, 72, 73, 74,
+ 43, 44, 12, 72, 73, 74, 72, 73, 74, 124,
+ 12, 98, 98, 182, 183, 184, 185, 186, 187, 406,
+ 431, 188, 97, 72, 73, 74, 98, 414, 415, 92,
+ 93, 97, 305, 96, 72, 73, 74, 424, 207, 208,
+ 209, 210, 211, 212, 268, 432, 204, 20, 217, 329,
+ 20, 12, 72, 73, 74, 72, 73, 74, 227, 97,
+ 229, 230, 72, 73, 74, 281, 181, 9, 21, 238,
+ 72, 73, 74, 290, 158, 20, 76, 293, 45, 98,
+ 164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
+ 174, 175, 176, 177, 178, 264, 265, 97, 267, 72,
+ 73, 74, 72, 73, 74, 20, 338, 380, 24, 20,
+ 305, 72, 73, 74, 97, 284, 285, 285, 287, 287,
+ 289, 279, 339, 10, 9, 349, 11, 359, 13, 14,
+ 15, 16, 17, 18, 19, 70, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 20, 11, 307,
+ 319, 36, 72, 73, 74, 21, 21, 72, 73, 74,
+ 329, 72, 73, 74, 21, 50, 70, 52, 53, 54,
+ 55, 56, 57, 288, 97, 10, 74, 62, 63, 64,
+ 65, 66, 67, 20, 69, 380, 72, 73, 74, 11,
+ 75, 384, 24, 386, 418, 98, 21, 390, 15, 72,
+ 73, 74, 87, 88, 89, 97, 24, 400, 401, 94,
+ 95, 97, 60, 98, 10, 408, 409, 9, 387, 10,
+ 378, 10, 10, 15, 417, 97, 60, 61, 421, 21,
+ 97, 398, 10, 391, 26, 72, 73, 74, 86, 21,
+ 324, 97, 97, 91, 92, 93, 439, 440, 96, 416,
+ 97, 85, 86, 1, 20, 97, 97, 91, 92, 93,
+ 12, 9, 96, 11, 433, 13, 14, 15, 16, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 9, 27,
+ 28, 29, 30, 31, 32, 97, 34, 35, 36, 37,
+ 38, 39, 40, 41, 42, 97, 20, 97, 46, 47,
+ 48, 49, 50, 20, 52, 53, 54, 55, 56, 57,
+ 72, 73, 74, 97, 62, 63, 64, 65, 66, 67,
+ 68, 69, 97, 72, 73, 74, 86, 75, 72, 73,
+ 74, 91, 92, 93, 98, 97, 96, 387, 433, 87,
+ 88, 89, 1, 34, 203, 391, 94, 95, 97, -1,
+ 98, 99, 11, 97, 13, 14, 15, 16, 17, 18,
+ 19, 20, 21, 22, 23, 24, 25, 47, 27, 28,
+ 29, 30, 31, 47, 72, 73, 74, 36, -1, 39,
+ 40, 41, 42, -1, -1, -1, 46, -1, 48, 60,
+ 61, 50, -1, 52, 53, 54, 55, 56, 57, 97,
+ -1, -1, -1, 62, 63, 64, 65, 66, 67, -1,
+ 69, -1, 72, 73, 74, 86, 75, 72, 73, 74,
+ 91, 92, 93, -1, -1, 96, -1, -1, 87, 88,
+ 89, 1, -1, -1, -1, 94, 95, 97, -1, 98,
+ -1, 11, 97, 13, 14, 15, 16, 17, 18, 19,
+ -1, 21, 22, 23, 24, 25, -1, 27, 28, 29,
+ 30, 31, -1, -1, -1, -1, 36, 3, 4, 5,
+ 6, 7, 8, 91, 92, 93, -1, -1, 96, -1,
+ 50, -1, 52, 53, 54, 55, 56, 57, -1, -1,
+ -1, 0, 62, 63, 64, 65, 66, 67, -1, 69,
+ 9, -1, 11, 12, -1, 75, -1, -1, -1, -1,
+ -1, 20, -1, -1, -1, -1, -1, 87, 88, 89,
+ 58, 59, 60, 61, 94, 95, -1, 97, 98, -1,
+ 39, 40, 41, 42, -1, -1, -1, 46, -1, 48,
+ -1, -1, 51, -1, 82, 83, 84, 85, 86, 58,
+ 59, 60, 61, 91, 92, 93, -1, -1, 96, -1,
+ -1, -1, -1, 72, 73, 74, 0, 76, 77, 78,
+ 79, 80, 81, 82, 83, 84, 85, 86, 12, -1,
+ -1, -1, 91, 92, 93, -1, 20, 96, 97, -1,
+ -1, -1, -1, -1, -1, 58, 59, 60, 61, -1,
+ -1, -1, -1, -1, -1, 39, 40, 41, 42, -1,
+ -1, -1, 46, -1, 48, -1, -1, 51, -1, -1,
+ 83, 84, 85, 86, 58, 59, 60, 61, 91, 92,
+ 93, -1, -1, 96, -1, -1, -1, -1, 72, 73,
+ 74, -1, 76, 77, 78, 79, 80, 81, 82, 83,
+ 84, 85, 86, -1, -1, -1, -1, 91, 92, 93,
+ -1, -1, 96, 97, 9, -1, 11, -1, 13, 14,
+ 15, 16, 17, 18, 19, -1, 21, 22, 23, 24,
+ 25, -1, 27, 28, 29, 30, 31, -1, -1, -1,
+ -1, 36, -1, -1, -1, -1, -1, -1, -1, 58,
+ 59, 60, 61, -1, -1, 50, -1, 52, 53, 54,
+ 55, 56, 57, -1, -1, -1, -1, 62, 63, 64,
+ 65, 66, 67, -1, 69, 84, 85, 86, -1, -1,
+ 75, -1, 91, 92, 93, -1, -1, 96, -1, -1,
+ -1, -1, 87, 88, 89, -1, -1, -1, -1, 94,
+ 95, -1, 9, 98, 11, -1, 13, 14, 15, 16,
+ 17, 18, 19, -1, 21, 22, 23, 24, 25, -1,
+ 27, 28, 29, 30, 31, -1, -1, -1, -1, 36,
+ -1, -1, -1, -1, -1, -1, 58, 59, 60, 61,
+ -1, -1, -1, 50, -1, 52, 53, 54, 55, 56,
+ 57, -1, -1, -1, -1, 62, 63, 64, 65, 66,
+ 67, -1, 69, 85, 86, -1, -1, -1, 75, 91,
+ 92, 93, -1, -1, 96, -1, -1, -1, -1, -1,
+ 87, 88, 89, -1, -1, -1, -1, 94, 95, -1,
+ -1, 98, 11, 12, 13, 14, 15, 16, 17, 18,
+ 19, -1, 21, 22, 23, 24, 25, -1, 27, 28,
+ 29, 30, 31, -1, -1, -1, -1, 36, -1, -1,
+ -1, -1, -1, -1, 58, 59, 60, 61, -1, -1,
+ -1, 50, -1, 52, 53, 54, 55, 56, 57, -1,
+ -1, -1, -1, 62, 63, 64, 65, 66, 67, -1,
+ 69, 85, 86, -1, -1, -1, 75, 91, 92, 93,
+ -1, -1, 96, -1, -1, -1, -1, -1, 87, 88,
+ 89, -1, -1, -1, -1, 94, 95, -1, 11, 98,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, -1, 27, 28, 29, 30, 31, -1,
+ -1, -1, -1, 36, -1, -1, -1, -1, -1, -1,
+ 58, -1, 60, 61, -1, -1, -1, 50, -1, 52,
+ 53, 54, 55, 56, 57, -1, -1, -1, -1, 62,
+ 63, 64, 65, 66, 67, -1, 69, 85, 86, -1,
+ -1, -1, 75, 91, 92, 93, -1, -1, 96, -1,
+ -1, -1, -1, -1, 87, 88, 89, -1, -1, -1,
+ -1, 94, 95, -1, 11, 98, 13, 14, 15, 16,
+ 17, 18, 19, -1, 21, 22, 23, 24, 25, -1,
+ 27, 28, 29, 30, 31, -1, -1, -1, -1, 36,
+ 39, 40, 41, 42, -1, -1, -1, 46, -1, 48,
+ -1, -1, -1, 50, -1, 52, 53, 54, 55, 56,
+ 57, -1, -1, -1, -1, 62, 63, 64, 65, 66,
+ 67, -1, 69, 72, 73, 74, -1, -1, 75, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 86, 87, 88, -1, -1, -1, -1, 93, 94,
- -1, 96, 97, 10, -1, 12, 13, 14, 15, 16,
- 17, 18, -1, 20, 21, 22, 23, 24, -1, 26,
- 27, 28, 29, 30, -1, -1, -1, -1, 35, -1,
+ 87, 88, 89, -1, -1, -1, -1, 94, 95, -1,
+ 97, 98, 11, -1, 13, 14, 15, 16, 17, 18,
+ 19, -1, 21, 22, 23, 24, 25, -1, 27, 28,
+ 29, 30, 31, -1, -1, -1, -1, 36, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 49, -1, 51, 52, 53, 54, 55, 56,
- -1, -1, -1, -1, 61, 62, 63, 64, 65, 66,
- -1, 68, -1, -1, -1, -1, -1, 74, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
- 87, 88, -1, -1, -1, -1, 93, 94, -1, 96,
- 97, 10, -1, 12, 13, 14, 15, 16, 17, 18,
- -1, 20, 21, 22, 23, 24, -1, 26, 27, 28,
- 29, 30, -1, -1, -1, -1, 35, -1, -1, -1,
+ -1, 50, -1, 52, 53, 54, 55, 56, 57, -1,
+ -1, -1, -1, 62, 63, 64, 65, 66, 67, -1,
+ 69, -1, -1, -1, -1, -1, 75, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 87, 88,
+ 89, -1, -1, -1, -1, 94, 95, -1, 97, 98,
+ 11, -1, 13, 14, 15, 16, 17, 18, 19, -1,
+ 21, 22, 23, 24, 25, -1, 27, 28, 29, 30,
+ 31, -1, -1, -1, -1, 36, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 50,
+ -1, 52, 53, 54, 55, 56, 57, -1, -1, -1,
+ -1, 62, 63, 64, 65, 66, 67, -1, 69, -1,
+ -1, -1, -1, -1, 75, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 87, 88, 89, -1,
+ -1, -1, -1, 94, 95, -1, 97, 98, 11, -1,
+ 13, 14, 15, 16, 17, 18, 19, -1, 21, 22,
+ 23, 24, 25, -1, 27, 28, 29, 30, 31, -1,
+ -1, -1, -1, 36, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 50, -1, 52,
+ 53, 54, 55, 56, 57, -1, -1, -1, -1, 62,
+ 63, 64, 65, 66, 67, -1, 69, -1, -1, -1,
+ -1, -1, 75, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 87, 88, 89, -1, -1, -1,
+ -1, 94, 95, -1, 97, 98, 11, -1, 13, 14,
+ 15, 16, 17, 18, 19, -1, 21, 22, 23, 24,
+ 25, -1, 27, 28, 29, 30, 31, -1, -1, -1,
+ -1, 36, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 50, -1, 52, 53, 54,
+ 55, 56, 57, -1, -1, -1, -1, 62, 63, 64,
+ 65, 66, 67, -1, 69, -1, -1, -1, -1, -1,
+ 75, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 87, 88, 89, -1, -1, -1, -1, 94,
+ 95, -1, 97, 98, 11, -1, 13, 14, 15, 16,
+ 17, 18, 19, -1, 21, 22, 23, 24, 25, -1,
+ 27, 28, 29, 30, 31, -1, -1, -1, -1, 36,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 49, -1, 51, 52, 53, 54, 55, 56, -1, -1,
- -1, -1, 61, 62, 63, 64, 65, 66, -1, 68,
- -1, -1, -1, -1, -1, 74, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 86, 87, 88,
- -1, -1, -1, -1, 93, 94, -1, 96, 97, 10,
- -1, 12, 13, 14, 15, 16, 17, 18, -1, 20,
- 21, 22, 23, 24, -1, 26, 27, 28, 29, 30,
- -1, -1, -1, -1, 35, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 49, -1,
- 51, 52, 53, 54, 55, 56, -1, -1, -1, -1,
- 61, 62, 63, 64, 65, 66, -1, 68, -1, -1,
- -1, -1, -1, 74, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 86, 87, 88, -1, -1,
- -1, -1, 93, 94, -1, 96, 97, 10, -1, 12,
- 13, 14, 15, 16, 17, 18, -1, 20, 21, 22,
- 23, 24, -1, 26, 27, 28, 29, 30, -1, -1,
- -1, -1, 35, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 49, -1, 51, 52,
- 53, 54, 55, 56, -1, -1, -1, -1, 61, 62,
- 63, 64, 65, 66, -1, 68, -1, -1, -1, -1,
- -1, 74, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 86, 87, 88, -1, -1, -1, -1,
- 93, 94, -1, 96, 97, 10, -1, 12, 13, 14,
- 15, 16, 17, 18, -1, 20, 21, 22, 23, 24,
- -1, 26, 27, 28, 29, 30, -1, -1, -1, -1,
- 35, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 49, -1, 51, 52, 53, 54,
- 55, 56, -1, -1, -1, -1, 61, 62, 63, 64,
- 65, 66, -1, 68, -1, -1, -1, -1, -1, 74,
+ -1, -1, -1, 50, -1, 52, 53, 54, 55, 56,
+ 57, -1, -1, -1, -1, 62, 63, 64, 65, 66,
+ 67, -1, 69, -1, -1, -1, -1, -1, 75, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 86, 87, 88, -1, -1, -1, -1, 93, 94,
- -1, 96, 97, 10, -1, 12, 13, 14, 15, 16,
- 17, 18, -1, 20, 21, 22, 23, 24, -1, 26,
- 27, 28, 29, 30, -1, -1, -1, -1, 35, -1,
+ 87, 88, 89, -1, -1, -1, -1, 94, 95, -1,
+ 97, 98, 11, -1, 13, 14, 15, 16, 17, 18,
+ 19, -1, 21, 22, 23, 24, 25, -1, 27, 28,
+ 29, 30, 31, -1, -1, -1, -1, 36, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 49, -1, 51, 52, 53, 54, 55, 56,
- -1, -1, -1, -1, 61, 62, 63, 64, 65, 66,
- -1, 68, -1, -1, -1, 50, -1, 74, -1, -1,
- -1, -1, 57, 58, 59, 60, -1, -1, -1, 86,
- 87, 88, -1, -1, -1, -1, 93, 94, -1, -1,
- 97, 76, 77, 78, 79, 80, 81, 82, 83, 84,
- 85, -1, -1, -1, 50, 90, 91, 92, -1, -1,
- 95, 57, 58, 59, 60, -1, -1, -1, -1, -1,
+ -1, 50, -1, 52, 53, 54, 55, 56, 57, -1,
+ -1, -1, -1, 62, 63, 64, 65, 66, 67, -1,
+ 69, -1, -1, -1, -1, -1, 75, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 87, 88,
+ 89, -1, -1, -1, -1, 94, 95, -1, 97, 98,
+ 11, -1, 13, 14, 15, 16, 17, 18, 19, -1,
+ 21, 22, 23, 24, 25, -1, 27, 28, 29, 30,
+ 31, -1, -1, -1, -1, 36, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 50,
+ -1, 52, 53, 54, 55, 56, 57, -1, -1, -1,
+ -1, 62, 63, 64, 65, 66, 67, -1, 69, -1,
+ -1, -1, -1, -1, 75, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 87, 88, 89, -1,
+ -1, -1, -1, 94, 95, -1, 97, 98, 11, -1,
+ 13, 14, 15, 16, 17, 18, 19, -1, 21, 22,
+ 23, 24, 25, -1, 27, 28, 29, 30, 31, -1,
+ -1, -1, -1, 36, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 50, -1, 52,
+ 53, 54, 55, 56, 57, -1, -1, -1, -1, 62,
+ 63, 64, 65, 66, 67, -1, 69, -1, -1, -1,
+ 51, -1, 75, -1, -1, -1, -1, 58, 59, 60,
+ 61, -1, -1, -1, 87, 88, 89, -1, -1, -1,
+ -1, 94, 95, -1, -1, 98, 77, 78, 79, 80,
+ 81, 82, 83, 84, 85, 86, -1, -1, -1, 51,
+ 91, 92, 93, -1, -1, 96, 58, 59, 60, 61,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 76, 77, -1, 79, 80, 81, 82, 83, 84, 85,
- -1, -1, -1, 50, 90, 91, 92, -1, -1, 95,
- 57, 58, 59, 60, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 77, 78, -1, 80, 81,
+ 82, 83, 84, 85, 86, -1, -1, -1, 51, 91,
+ 92, 93, -1, -1, 96, 58, 59, 60, 61, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 77, -1, 79, 80, 81, 82, 83, 84, 85, -1,
- -1, -1, 50, 90, 91, 92, -1, -1, 95, 57,
- 58, 59, 60, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 78, -1, 80, 81, 82,
+ 83, 84, 85, 86, -1, -1, -1, 51, 91, 92,
+ 93, -1, -1, 96, 58, 59, 60, 61, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 79, 80, 81, 82, 83, 84, 85, -1, -1,
- -1, -1, 90, 91, 92, -1, -1, 95
+ -1, -1, -1, -1, -1, -1, 80, 81, 82, 83,
+ 84, 85, 86, -1, -1, -1, -1, 91, 92, 93,
+ -1, -1, 96
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const yytype_uint8 yystos[] =
{
- 0, 3, 4, 5, 6, 7, 100, 101, 102, 103,
- 104, 105, 0, 107, 8, 106, 1, 10, 12, 13,
- 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
- 24, 26, 27, 28, 29, 30, 31, 33, 34, 35,
- 36, 37, 38, 39, 40, 41, 45, 46, 47, 48,
- 49, 51, 52, 53, 54, 55, 56, 61, 62, 63,
- 64, 65, 66, 67, 68, 74, 86, 87, 88, 93,
- 94, 97, 98, 106, 113, 116, 136, 137, 138, 141,
- 142, 143, 144, 145, 146, 147, 154, 155, 156, 157,
- 158, 159, 32, 112, 126, 111, 111, 107, 11, 136,
- 146, 146, 20, 25, 106, 155, 160, 160, 160, 160,
- 160, 160, 160, 97, 10, 146, 129, 130, 128, 129,
- 20, 128, 26, 97, 151, 151, 151, 151, 66, 151,
- 155, 151, 151, 106, 146, 97, 97, 97, 106, 146,
- 20, 137, 149, 155, 160, 160, 20, 106, 146, 155,
- 19, 136, 20, 146, 97, 148, 155, 156, 157, 128,
- 146, 137, 146, 146, 146, 146, 146, 96, 136, 44,
- 118, 19, 38, 39, 40, 41, 45, 47, 71, 72,
- 73, 75, 8, 10, 151, 50, 57, 58, 59, 60,
- 76, 77, 79, 80, 81, 82, 83, 84, 85, 90,
- 91, 92, 95, 151, 8, 10, 8, 10, 8, 113,
- 112, 111, 11, 149, 97, 137, 136, 106, 20, 127,
- 20, 131, 23, 132, 20, 114, 152, 107, 107, 107,
- 107, 107, 107, 151, 107, 107, 96, 96, 136, 136,
- 150, 160, 137, 151, 151, 9, 19, 149, 96, 136,
- 69, 134, 131, 10, 96, 106, 136, 122, 136, 136,
- 136, 136, 136, 136, 136, 136, 146, 136, 136, 96,
- 136, 146, 146, 146, 146, 146, 146, 146, 146, 146,
- 146, 146, 146, 146, 146, 146, 8, 10, 21, 97,
- 140, 155, 96, 136, 136, 136, 136, 136, 136, 9,
- 150, 96, 11, 139, 106, 132, 69, 133, 8, 19,
- 20, 97, 121, 136, 122, 123, 136, 122, 125, 153,
- 155, 116, 120, 123, 124, 136, 107, 108, 123, 96,
- 96, 136, 96, 136, 96, 136, 9, 96, 23, 132,
- 136, 10, 19, 11, 96, 78, 136, 136, 96, 136,
- 151, 96, 19, 11, 19, 11, 19, 96, 149, 133,
- 23, 106, 107, 20, 96, 96, 96, 96, 151, 96,
- 19, 123, 123, 96, 96, 96, 96, 133, 11, 136,
- 9, 146, 19, 11, 96, 150, 9, 9, 9, 19,
- 106, 135, 115, 149, 119, 119, 8, 109, 109, 123,
- 109, 121, 96, 96, 109, 135, 11, 9, 96, 111,
- 19, 109, 109, 110, 42, 43, 117, 117, 96, 118,
- 19, 109, 109, 9, 118, 118, 111, 109, 151, 109,
- 119, 118, 9, 123, 118, 124, 96, 96, 109, 109,
- 117
+ 0, 3, 4, 5, 6, 7, 8, 101, 102, 103,
+ 104, 105, 106, 107, 0, 109, 11, 13, 14, 15,
+ 16, 17, 18, 19, 21, 22, 23, 24, 25, 27,
+ 28, 29, 30, 31, 36, 50, 52, 53, 54, 55,
+ 56, 57, 62, 63, 64, 65, 66, 67, 69, 75,
+ 87, 88, 89, 94, 95, 98, 138, 139, 140, 143,
+ 144, 145, 146, 147, 148, 149, 152, 156, 157, 158,
+ 159, 160, 161, 9, 108, 1, 20, 32, 34, 35,
+ 37, 38, 39, 40, 41, 42, 46, 47, 48, 49,
+ 68, 99, 108, 115, 118, 138, 33, 114, 128, 113,
+ 113, 12, 138, 148, 148, 21, 26, 108, 157, 162,
+ 162, 162, 162, 162, 162, 162, 98, 11, 148, 131,
+ 131, 148, 98, 98, 98, 108, 148, 21, 139, 151,
+ 157, 162, 162, 21, 108, 148, 157, 20, 138, 21,
+ 148, 98, 150, 157, 158, 159, 148, 139, 148, 148,
+ 148, 148, 148, 97, 138, 72, 73, 74, 76, 9,
+ 11, 27, 98, 153, 51, 58, 59, 60, 61, 77,
+ 78, 80, 81, 82, 83, 84, 85, 86, 91, 92,
+ 93, 96, 153, 9, 11, 9, 11, 9, 109, 132,
+ 130, 21, 130, 153, 153, 153, 153, 67, 153, 157,
+ 153, 153, 108, 130, 45, 120, 20, 39, 40, 41,
+ 42, 46, 48, 115, 114, 12, 151, 98, 139, 138,
+ 108, 24, 134, 97, 97, 138, 152, 162, 139, 153,
+ 153, 10, 20, 151, 97, 138, 70, 136, 11, 97,
+ 138, 138, 138, 148, 138, 138, 154, 97, 138, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 9, 11, 22, 98, 142, 157,
+ 97, 138, 138, 138, 138, 138, 138, 113, 21, 129,
+ 21, 133, 21, 116, 109, 109, 109, 109, 109, 109,
+ 153, 109, 109, 133, 108, 138, 124, 138, 138, 138,
+ 138, 138, 152, 97, 12, 141, 70, 135, 97, 97,
+ 138, 97, 138, 97, 138, 10, 97, 24, 138, 11,
+ 20, 12, 98, 97, 79, 138, 138, 97, 138, 153,
+ 97, 20, 12, 20, 12, 20, 10, 108, 134, 9,
+ 20, 21, 123, 138, 124, 125, 138, 124, 127, 155,
+ 157, 118, 122, 125, 126, 138, 109, 110, 125, 134,
+ 97, 151, 24, 108, 97, 97, 97, 12, 138, 10,
+ 148, 20, 12, 97, 152, 10, 10, 10, 135, 109,
+ 21, 97, 97, 97, 97, 153, 97, 20, 125, 125,
+ 97, 135, 12, 10, 97, 20, 108, 137, 117, 151,
+ 121, 121, 9, 111, 111, 125, 111, 123, 97, 97,
+ 111, 137, 113, 20, 111, 111, 112, 43, 44, 119,
+ 119, 97, 120, 20, 111, 111, 10, 120, 120, 113,
+ 111, 153, 111, 121, 120, 10, 125, 120, 126, 97,
+ 97, 111, 111, 119
};
typedef enum {
@@ -926,26 +921,27 @@ typedef enum {
static const toketypes yy_type_tab[] =
{
toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
- toketype_ival, toketype_ival, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval,
- toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_opval, toketype_opval, toketype_opval,
+ toketype_ival, toketype_ival, toketype_ival, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval,
+ toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_opval,
toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
- toketype_opval, toketype_opval, toketype_opval, toketype_p_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval,
- toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval,
- toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval,
+ toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_p_tkval,
toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval,
toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval,
- toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
+ toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval,
+ toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval,
+ toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval, toketype_i_tkval,
toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
- toketype_ival, toketype_ival, toketype_i_tkval, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
- toketype_opval, toketype_ival, toketype_ival, toketype_opval, toketype_ival, toketype_opval,
- toketype_opval, toketype_opval, toketype_ival, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_ival,
- toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_p_tkval,
- toketype_opval, toketype_ival, toketype_ival, toketype_ival, toketype_opval,
- toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
- toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
+ toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_i_tkval, toketype_ival,
+ toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_opval, toketype_ival,
+ toketype_ival, toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval,
+ toketype_ival, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval,
+ toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_p_tkval, toketype_opval, toketype_ival,
+ toketype_ival, toketype_ival, toketype_opval, toketype_opval, toketype_opval,
+ toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_opval,
toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
- toketype_opval, toketype_i_tkval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
- toketype_opval, toketype_opval, toketype_opval, toketype_opval
+ toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_i_tkval, toketype_ival,
+ toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
+ toketype_opval
};
diff --git a/perly.y b/perly.y
index bf51922145..ab146274ed 100644
--- a/perly.y
+++ b/perly.y
@@ -69,7 +69,7 @@
#endif
}
-%token <ival> GRAMPROG GRAMBLOCK GRAMBARESTMT GRAMFULLSTMT GRAMSTMTSEQ
+%token <ival> GRAMPROG GRAMEXPR GRAMBLOCK GRAMBARESTMT GRAMFULLSTMT GRAMSTMTSEQ
%token <i_tkval> '{' '}' '[' ']' '-' '+' '$' '@' '%' '*' '&' ';'
@@ -148,6 +148,15 @@ grammar : GRAMPROG
newPROG(block_end($3,$4));
$$ = 0;
}
+ | GRAMEXPR
+ {
+ parser->expect = XTERM;
+ }
+ listexprcom
+ {
+ PL_eval_root = $3;
+ $$ = 0;
+ }
| GRAMBLOCK
{
parser->expect = XBLOCK;
diff --git a/proto.h b/proto.h
index b44a4ba7be..c4df3e20e2 100644
--- a/proto.h
+++ b/proto.h
@@ -2818,11 +2818,15 @@ PERL_CALLCONV void Perl_pad_push(pTHX_ PADLIST *padlist, int depth)
PERL_CALLCONV void Perl_pad_swipe(pTHX_ PADOFFSET po, bool refadjust);
PERL_CALLCONV void Perl_pad_tidy(pTHX_ padtidy_type type);
+PERL_CALLCONV OP* Perl_parse_arithexpr(pTHX_ U32 flags);
PERL_CALLCONV OP* Perl_parse_barestmt(pTHX_ U32 flags);
PERL_CALLCONV OP* Perl_parse_block(pTHX_ U32 flags);
+PERL_CALLCONV OP* Perl_parse_fullexpr(pTHX_ U32 flags);
PERL_CALLCONV OP* Perl_parse_fullstmt(pTHX_ U32 flags);
PERL_CALLCONV SV* Perl_parse_label(pTHX_ U32 flags);
+PERL_CALLCONV OP* Perl_parse_listexpr(pTHX_ U32 flags);
PERL_CALLCONV OP* Perl_parse_stmtseq(pTHX_ U32 flags);
+PERL_CALLCONV OP* Perl_parse_termexpr(pTHX_ U32 flags);
PERL_CALLCONV U32 Perl_parse_unicode_opts(pTHX_ const char **popt)
__attribute__nonnull__(pTHX_1);
#define PERL_ARGS_ASSERT_PARSE_UNICODE_OPTS \
diff --git a/toke.c b/toke.c
index 12359e01bd..ef14c18155 100644
--- a/toke.c
+++ b/toke.c
@@ -48,6 +48,8 @@ Individual members of C<PL_parser> have their own documentation.
/* XXX temporary backwards compatibility */
#define PL_lex_brackets (PL_parser->lex_brackets)
+#define PL_lex_allbrackets (PL_parser->lex_allbrackets)
+#define PL_lex_fakeeof (PL_parser->lex_fakeeof)
#define PL_lex_brackstack (PL_parser->lex_brackstack)
#define PL_lex_casemods (PL_parser->lex_casemods)
#define PL_lex_casestack (PL_parser->lex_casestack)
@@ -293,7 +295,15 @@ static const char* const lex_state_names[] = {
}
/* grandfather return to old style */
-#define OLDLOP(f) return(pl_yylval.ival=f,PL_expect = XTERM,PL_bufptr = s,(int)LSTOP)
+#define OLDLOP(f) \
+ do { \
+ if (!PL_lex_allbrackets && PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC) \
+ PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC; \
+ pl_yylval.ival = (f); \
+ PL_expect = XTERM; \
+ PL_bufptr = s; \
+ return (int)LSTOP; \
+ } while(0)
#ifdef DEBUGGING
@@ -1822,18 +1832,22 @@ S_lop(pTHX_ I32 f, int x, char *s)
PL_last_lop_op = (OPCODE)f;
#ifdef PERL_MAD
if (PL_lasttoke)
- return REPORT(LSTOP);
+ goto lstop;
#else
if (PL_nexttoke)
- return REPORT(LSTOP);
+ goto lstop;
#endif
if (*s == '(')
return REPORT(FUNC);
s = PEEKSPACE(s);
if (*s == '(')
return REPORT(FUNC);
- else
+ else {
+ lstop:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
+ PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
return REPORT(LSTOP);
+ }
}
#ifdef PERL_MAD
@@ -1954,8 +1968,12 @@ Perl_yyunlex(pTHX)
start_force(-1);
NEXTVAL_NEXTTOKE = PL_parser->yylval;
if (yyc == '{'/*}*/ || yyc == HASHBRACK || yyc == '['/*]*/) {
+ PL_lex_allbrackets--;
PL_lex_brackets--;
- yyc |= (1<<24) | (PL_lex_brackstack[PL_lex_brackets] << 16);
+ yyc |= (3<<24) | (PL_lex_brackstack[PL_lex_brackets] << 16);
+ } else if (yyc == '('/*)*/) {
+ PL_lex_allbrackets--;
+ yyc |= (2<<24);
}
force_next(yyc);
}
@@ -2379,6 +2397,8 @@ S_sublex_push(pTHX)
PL_lex_state = PL_sublex_info.super_state;
SAVEBOOL(PL_lex_dojoin);
SAVEI32(PL_lex_brackets);
+ SAVEI32(PL_lex_allbrackets);
+ SAVEI8(PL_lex_fakeeof);
SAVEI32(PL_lex_casemods);
SAVEI32(PL_lex_starts);
SAVEI8(PL_lex_state);
@@ -2407,6 +2427,8 @@ S_sublex_push(pTHX)
PL_lex_dojoin = FALSE;
PL_lex_brackets = 0;
+ PL_lex_allbrackets = 0;
+ PL_lex_fakeeof = LEX_FAKEEOF_NEVER;
Newx(PL_lex_brackstack, 120, char);
Newx(PL_lex_casestack, 12, char);
PL_lex_casemods = 0;
@@ -2459,6 +2481,8 @@ S_sublex_done(pTHX)
SAVEFREESV(PL_linestr);
PL_lex_dojoin = FALSE;
PL_lex_brackets = 0;
+ PL_lex_allbrackets = 0;
+ PL_lex_fakeeof = LEX_FAKEEOF_NEVER;
PL_lex_casemods = 0;
*PL_lex_casestack = '\0';
PL_lex_starts = 0;
@@ -4303,10 +4327,17 @@ Perl_yylex(pTHX)
#else
next_type = PL_nexttype[PL_nexttoke];
#endif
- if (next_type & (1<<24)) {
- if (PL_lex_brackets > 100)
- Renew(PL_lex_brackstack, PL_lex_brackets + 10, char);
- PL_lex_brackstack[PL_lex_brackets++] = (next_type >> 16) & 0xff;
+ if (next_type & (7<<24)) {
+ if (next_type & (1<<24)) {
+ if (PL_lex_brackets > 100)
+ Renew(PL_lex_brackstack, PL_lex_brackets + 10, char);
+ PL_lex_brackstack[PL_lex_brackets++] =
+ (next_type >> 16) & 0xff;
+ }
+ if (next_type & (2<<24))
+ PL_lex_allbrackets++;
+ if (next_type & (4<<24))
+ PL_lex_allbrackets--;
next_type &= 0xffff;
}
#ifdef PERL_MAD
@@ -4341,6 +4372,7 @@ Perl_yylex(pTHX)
PL_thistoken = newSVpvs("\\E");
#endif
}
+ PL_lex_allbrackets--;
return REPORT(')');
}
#ifdef PERL_MAD
@@ -4380,6 +4412,7 @@ Perl_yylex(pTHX)
if ((*s == 'L' || *s == 'U') &&
(strchr(PL_lex_casestack, 'L') || strchr(PL_lex_casestack, 'U'))) {
PL_lex_casestack[--PL_lex_casemods] = '\0';
+ PL_lex_allbrackets--;
return REPORT(')');
}
if (PL_lex_casemods > 10)
@@ -4389,7 +4422,7 @@ Perl_yylex(pTHX)
PL_lex_state = LEX_INTERPCONCAT;
start_force(PL_curforce);
NEXTVAL_NEXTTOKE.ival = 0;
- force_next('(');
+ force_next((2<<24)|'(');
start_force(PL_curforce);
if (*s == 'l')
NEXTVAL_NEXTTOKE.ival = OP_LCFIRST;
@@ -4455,7 +4488,7 @@ Perl_yylex(pTHX)
force_next('$');
start_force(PL_curforce);
NEXTVAL_NEXTTOKE.ival = 0;
- force_next('(');
+ force_next((2<<24)|'(');
start_force(PL_curforce);
NEXTVAL_NEXTTOKE.ival = OP_JOIN; /* emulate join($", ...) */
force_next(FUNC);
@@ -4495,6 +4528,7 @@ Perl_yylex(pTHX)
PL_thistoken = newSVpvs("");
}
#endif
+ PL_lex_allbrackets--;
return REPORT(')');
}
if (PL_lex_inwhat == OP_SUBST && PL_linestr == PL_lex_repl
@@ -5133,8 +5167,14 @@ Perl_yylex(pTHX)
else
TERM(ARROW);
}
- if (PL_expect == XOPERATOR)
+ if (PL_expect == XOPERATOR) {
+ if (*s == '=' && !PL_lex_allbrackets &&
+ PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
+ s--;
+ TOKEN(0);
+ }
Aop(OP_SUBTRACT);
+ }
else {
if (isSPACE(*s) || !isSPACE(*PL_bufptr))
check_uni();
@@ -5152,8 +5192,14 @@ Perl_yylex(pTHX)
else
OPERATOR(PREINC);
}
- if (PL_expect == XOPERATOR)
+ if (PL_expect == XOPERATOR) {
+ if (*s == '=' && !PL_lex_allbrackets &&
+ PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
+ s--;
+ TOKEN(0);
+ }
Aop(OP_ADD);
+ }
else {
if (isSPACE(*s) || !isSPACE(*PL_bufptr))
check_uni();
@@ -5173,12 +5219,25 @@ Perl_yylex(pTHX)
s++;
if (*s == '*') {
s++;
+ if (*s == '=' && !PL_lex_allbrackets &&
+ PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
+ s -= 2;
+ TOKEN(0);
+ }
PWop(OP_POW);
}
+ if (*s == '=' && !PL_lex_allbrackets &&
+ PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
+ s--;
+ TOKEN(0);
+ }
Mop(OP_MULTIPLY);
case '%':
if (PL_expect == XOPERATOR) {
+ if (s[1] == '=' && !PL_lex_allbrackets &&
+ PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
+ TOKEN(0);
++s;
Mop(OP_MODULO);
}
@@ -5192,12 +5251,16 @@ Perl_yylex(pTHX)
TERM('%');
case '^':
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >=
+ (s[1] == '=' ? LEX_FAKEEOF_ASSIGN : LEX_FAKEEOF_BITWISE))
+ TOKEN(0);
s++;
BOop(OP_BIT_XOR);
case '[':
if (PL_lex_brackets > 100)
Renew(PL_lex_brackstack, PL_lex_brackets + 10, char);
PL_lex_brackstack[PL_lex_brackets++] = 0;
+ PL_lex_allbrackets++;
{
const char tmp = *s++;
OPERATOR(tmp);
@@ -5206,14 +5269,18 @@ Perl_yylex(pTHX)
if (s[1] == '~'
&& (PL_expect == XOPERATOR || PL_expect == XTERMORDORDOR))
{
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
+ TOKEN(0);
s += 2;
Eop(OP_SMARTMATCH);
}
+ s++;
+ OPERATOR('~');
case ',':
- {
- const char tmp = *s++;
- OPERATOR(tmp);
- }
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMMA)
+ TOKEN(0);
+ s++;
+ OPERATOR(',');
case ':':
if (s[1] == ':') {
len = 0;
@@ -5374,6 +5441,11 @@ Perl_yylex(pTHX)
#endif
TOKEN(COLONATTR);
}
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_CLOSING) {
+ s--;
+ TOKEN(0);
+ }
+ PL_lex_allbrackets--;
OPERATOR(':');
case '(':
s++;
@@ -5382,21 +5454,23 @@ Perl_yylex(pTHX)
else
PL_expect = XTERM;
s = SKIPSPACE1(s);
+ PL_lex_allbrackets++;
TOKEN('(');
case ';':
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_NONEXPR)
+ TOKEN(0);
CLINE;
- {
- const char tmp = *s++;
- OPERATOR(tmp);
- }
+ s++;
+ OPERATOR(';');
case ')':
- {
- const char tmp = *s++;
- s = SKIPSPACE1(s);
- if (*s == '{')
- PREBLOCK(tmp);
- TERM(tmp);
- }
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_CLOSING)
+ TOKEN(0);
+ s++;
+ PL_lex_allbrackets--;
+ s = SKIPSPACE1(s);
+ if (*s == '{')
+ PREBLOCK(')');
+ TERM(')');
case ']':
if (PL_lex_brackets && PL_lex_brackstack[PL_lex_brackets-1] == XFAKEEOF)
TOKEN(0);
@@ -5405,6 +5479,7 @@ Perl_yylex(pTHX)
yyerror("Unmatched right square bracket");
else
--PL_lex_brackets;
+ PL_lex_allbrackets--;
if (PL_lex_state == LEX_INTERPNORMAL) {
if (PL_lex_brackets == 0) {
if (*s == '-' && s[1] == '>')
@@ -5430,6 +5505,7 @@ Perl_yylex(pTHX)
PL_lex_brackstack[PL_lex_brackets++] = XTERM;
else
PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
+ PL_lex_allbrackets++;
OPERATOR(HASHBRACK);
case XOPERATOR:
while (s < PL_bufend && SPACE_OR_TAB(*s))
@@ -5458,11 +5534,13 @@ Perl_yylex(pTHX)
case XATTRBLOCK:
case XBLOCK:
PL_lex_brackstack[PL_lex_brackets++] = XSTATE;
+ PL_lex_allbrackets++;
PL_expect = XSTATE;
break;
case XATTRTERM:
case XTERMBLOCK:
PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
+ PL_lex_allbrackets++;
PL_expect = XSTATE;
break;
default: {
@@ -5471,6 +5549,7 @@ Perl_yylex(pTHX)
PL_lex_brackstack[PL_lex_brackets++] = XTERM;
else
PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
+ PL_lex_allbrackets++;
s = SKIPSPACE1(s);
if (*s == '}') {
if (PL_expect == XREF && PL_lex_state == LEX_INTERPNORMAL) {
@@ -5585,6 +5664,7 @@ Perl_yylex(pTHX)
yyerror("Unmatched right curly bracket");
else
PL_expect = (expectation)PL_lex_brackstack[--PL_lex_brackets];
+ PL_lex_allbrackets--;
if (PL_lex_brackets < PL_lex_formbrack && PL_lex_state != LEX_INTERPNORMAL)
PL_lex_formbrack = 0;
if (PL_lex_state == LEX_INTERPNORMAL) {
@@ -5626,8 +5706,14 @@ Perl_yylex(pTHX)
TOKEN(';');
case '&':
s++;
- if (*s++ == '&')
+ if (*s++ == '&') {
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >=
+ (*s == '=' ? LEX_FAKEEOF_ASSIGN : LEX_FAKEEOF_LOGIC)) {
+ s -= 2;
+ TOKEN(0);
+ }
AOPERATOR(ANDAND);
+ }
s--;
if (PL_expect == XOPERATOR) {
if (PL_bufptr == PL_linestart && ckWARN(WARN_SEMICOLON)
@@ -5637,6 +5723,11 @@ Perl_yylex(pTHX)
Perl_warner(aTHX_ packWARN(WARN_SEMICOLON), "%s", PL_warn_nosemi);
CopLINE_inc(PL_curcop);
}
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >=
+ (*s == '=' ? LEX_FAKEEOF_ASSIGN : LEX_FAKEEOF_BITWISE)) {
+ s--;
+ TOKEN(0);
+ }
BAop(OP_BIT_AND);
}
@@ -5652,18 +5743,41 @@ Perl_yylex(pTHX)
case '|':
s++;
- if (*s++ == '|')
+ if (*s++ == '|') {
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >=
+ (*s == '=' ? LEX_FAKEEOF_ASSIGN : LEX_FAKEEOF_LOGIC)) {
+ s -= 2;
+ TOKEN(0);
+ }
AOPERATOR(OROR);
+ }
s--;
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >=
+ (*s == '=' ? LEX_FAKEEOF_ASSIGN : LEX_FAKEEOF_BITWISE)) {
+ s--;
+ TOKEN(0);
+ }
BOop(OP_BIT_OR);
case '=':
s++;
{
const char tmp = *s++;
- if (tmp == '=')
+ if (tmp == '=') {
+ if (!PL_lex_allbrackets &&
+ PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) {
+ s -= 2;
+ TOKEN(0);
+ }
Eop(OP_EQ);
- if (tmp == '>')
+ }
+ if (tmp == '>') {
+ if (!PL_lex_allbrackets &&
+ PL_lex_fakeeof >= LEX_FAKEEOF_COMMA) {
+ s -= 2;
+ TOKEN(0);
+ }
OPERATOR(',');
+ }
if (tmp == '~')
PMop(OP_MATCH);
if (tmp && isSPACE(*s) && ckWARN(WARN_SYNTAX)
@@ -5719,6 +5833,10 @@ Perl_yylex(pTHX)
goto leftbracket;
}
}
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
+ s--;
+ TOKEN(0);
+ }
pl_yylval.ival = 0;
OPERATOR(ASSIGNOP);
case '!':
@@ -5742,6 +5860,11 @@ Perl_yylex(pTHX)
Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
"!=~ should be !~");
}
+ if (!PL_lex_allbrackets &&
+ PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) {
+ s -= 2;
+ TOKEN(0);
+ }
Eop(OP_NE);
}
if (tmp == '~')
@@ -5762,28 +5885,65 @@ Perl_yylex(pTHX)
s++;
{
char tmp = *s++;
- if (tmp == '<')
+ if (tmp == '<') {
+ if (*s == '=' && !PL_lex_allbrackets &&
+ PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
+ s -= 2;
+ TOKEN(0);
+ }
SHop(OP_LEFT_SHIFT);
+ }
if (tmp == '=') {
tmp = *s++;
- if (tmp == '>')
+ if (tmp == '>') {
+ if (!PL_lex_allbrackets &&
+ PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) {
+ s -= 3;
+ TOKEN(0);
+ }
Eop(OP_NCMP);
+ }
s--;
+ if (!PL_lex_allbrackets &&
+ PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) {
+ s -= 2;
+ TOKEN(0);
+ }
Rop(OP_LE);
}
}
s--;
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) {
+ s--;
+ TOKEN(0);
+ }
Rop(OP_LT);
case '>':
s++;
{
const char tmp = *s++;
- if (tmp == '>')
+ if (tmp == '>') {
+ if (*s == '=' && !PL_lex_allbrackets &&
+ PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
+ s -= 2;
+ TOKEN(0);
+ }
SHop(OP_RIGHT_SHIFT);
- else if (tmp == '=')
+ }
+ else if (tmp == '=') {
+ if (!PL_lex_allbrackets &&
+ PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) {
+ s -= 2;
+ TOKEN(0);
+ }
Rop(OP_GE);
+ }
}
s--;
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) {
+ s--;
+ TOKEN(0);
+ }
Rop(OP_GT);
case '$':
@@ -5967,6 +6127,9 @@ Perl_yylex(pTHX)
case '/': /* may be division, defined-or, or pattern */
if (PL_expect == XTERMORDORDOR && s[1] == '/') {
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >=
+ (s[2] == '=' ? LEX_FAKEEOF_ASSIGN : LEX_FAKEEOF_LOGIC))
+ TOKEN(0);
s += 2;
AOPERATOR(DORDOR);
}
@@ -5974,16 +6137,33 @@ Perl_yylex(pTHX)
if (PL_expect == XOPERATOR) {
char tmp = *s++;
if(tmp == '?') {
+ if (!PL_lex_allbrackets &&
+ PL_lex_fakeeof >= LEX_FAKEEOF_IFELSE) {
+ s--;
+ TOKEN(0);
+ }
+ PL_lex_allbrackets++;
OPERATOR('?');
}
else {
tmp = *s++;
if(tmp == '/') {
/* A // operator. */
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >=
+ (*s == '=' ? LEX_FAKEEOF_ASSIGN :
+ LEX_FAKEEOF_LOGIC)) {
+ s -= 2;
+ TOKEN(0);
+ }
AOPERATOR(DORDOR);
}
else {
s--;
+ if (*s == '=' && !PL_lex_allbrackets &&
+ PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
+ s--;
+ TOKEN(0);
+ }
Mop(OP_DIVIDE);
}
}
@@ -6022,6 +6202,11 @@ Perl_yylex(pTHX)
if (PL_expect == XOPERATOR || !isDIGIT(s[1])) {
char tmp = *s++;
if (*s == tmp) {
+ if (!PL_lex_allbrackets &&
+ PL_lex_fakeeof >= LEX_FAKEEOF_RANGE) {
+ s--;
+ TOKEN(0);
+ }
s++;
if (*s == tmp) {
s++;
@@ -6031,6 +6216,11 @@ Perl_yylex(pTHX)
pl_yylval.ival = 0;
OPERATOR(DOTDOT);
}
+ if (*s == '=' && !PL_lex_allbrackets &&
+ PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
+ s--;
+ TOKEN(0);
+ }
Aop(OP_CONCAT);
}
/* FALL THROUGH */
@@ -6408,6 +6598,9 @@ Perl_yylex(pTHX)
if ((isIDFIRST_lazy_if(s,UTF) || *s == '$') &&
(tmp = intuit_method(s, gv, cv))) {
op_free(rv2cv_op);
+ if (tmp == METHOD && !PL_lex_allbrackets &&
+ PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
+ PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
return REPORT(tmp);
}
@@ -6488,6 +6681,9 @@ Perl_yylex(pTHX)
op_free(rv2cv_op);
PL_last_lop = PL_oldbufptr;
PL_last_lop_op = OP_METHOD;
+ if (!PL_lex_allbrackets &&
+ PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
+ PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
PREBLOCK(METHOD);
}
@@ -6497,6 +6693,9 @@ Perl_yylex(pTHX)
&& (isIDFIRST_lazy_if(s,UTF) || *s == '$')
&& (tmp = intuit_method(s, gv, cv))) {
op_free(rv2cv_op);
+ if (tmp == METHOD && !PL_lex_allbrackets &&
+ PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
+ PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
return REPORT(tmp);
}
@@ -6560,6 +6759,9 @@ Perl_yylex(pTHX)
sv_setpvs(PL_subname, "__ANON__");
else
sv_setpvs(PL_subname, "__ANON__::__ANON__");
+ if (!PL_lex_allbrackets &&
+ PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
+ PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
PREBLOCK(LSTOPSUB);
}
}
@@ -6578,6 +6780,9 @@ Perl_yylex(pTHX)
PL_thistoken = newSVpvs("");
}
force_next(WORD);
+ if (!PL_lex_allbrackets &&
+ PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
+ PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
TOKEN(NOAMP);
}
}
@@ -6617,12 +6822,18 @@ Perl_yylex(pTHX)
curmad('X', PL_thistoken);
PL_thistoken = newSVpvs("");
force_next(WORD);
+ if (!PL_lex_allbrackets &&
+ PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
+ PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
TOKEN(NOAMP);
}
#else
NEXTVAL_NEXTTOKE.opval = pl_yylval.opval;
PL_expect = XTERM;
force_next(WORD);
+ if (!PL_lex_allbrackets &&
+ PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
+ PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
TOKEN(NOAMP);
#endif
}
@@ -6824,6 +7035,8 @@ Perl_yylex(pTHX)
LOP(OP_ACCEPT,XTERM);
case KEY_and:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_LOWLOGIC)
+ return REPORT(0);
OPERATOR(ANDOP);
case KEY_atan2:
@@ -6876,6 +7089,8 @@ Perl_yylex(pTHX)
UNI(OP_CLOSEDIR);
case KEY_cmp:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
+ return REPORT(0);
Eop(OP_SCMP);
case KEY_caller:
@@ -6960,6 +7175,8 @@ Perl_yylex(pTHX)
OPERATOR(ELSIF);
case KEY_eq:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
+ return REPORT(0);
Eop(OP_SEQ);
case KEY_exists:
@@ -7013,6 +7230,8 @@ Perl_yylex(pTHX)
case KEY_for:
case KEY_foreach:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_NONEXPR)
+ return REPORT(0);
pl_yylval.ival = CopLINE(PL_curcop);
s = SKIPSPACE1(s);
if (PL_expect == XSTATE && isIDFIRST_lazy_if(s,UTF)) {
@@ -7057,9 +7276,13 @@ Perl_yylex(pTHX)
LOP(OP_FLOCK,XTERM);
case KEY_gt:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
+ return REPORT(0);
Rop(OP_SGT);
case KEY_ge:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
+ return REPORT(0);
Rop(OP_SGE);
case KEY_grep:
@@ -7161,6 +7384,8 @@ Perl_yylex(pTHX)
UNI(OP_HEX);
case KEY_if:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_NONEXPR)
+ return REPORT(0);
pl_yylval.ival = CopLINE(PL_curcop);
OPERATOR(IF);
@@ -7200,9 +7425,13 @@ Perl_yylex(pTHX)
UNI(OP_LENGTH);
case KEY_lt:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
+ return REPORT(0);
Rop(OP_SLT);
case KEY_le:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
+ return REPORT(0);
Rop(OP_SLE);
case KEY_localtime:
@@ -7280,6 +7509,8 @@ Perl_yylex(pTHX)
LOOPX(OP_NEXT);
case KEY_ne:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
+ return REPORT(0);
Eop(OP_SNE);
case KEY_no:
@@ -7289,8 +7520,12 @@ Perl_yylex(pTHX)
case KEY_not:
if (*s == '(' || (s = SKIPSPACE1(s), *s == '('))
FUN1(OP_NOT);
- else
+ else {
+ if (!PL_lex_allbrackets &&
+ PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
+ PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
OPERATOR(NOTOP);
+ }
case KEY_open:
s = SKIPSPACE1(s);
@@ -7313,6 +7548,8 @@ Perl_yylex(pTHX)
LOP(OP_OPEN,XTERM);
case KEY_or:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_LOWLOGIC)
+ return REPORT(0);
pl_yylval.ival = OP_OR;
OPERATOR(OROP);
@@ -7911,10 +8148,14 @@ Perl_yylex(pTHX)
UNI(OP_UNTIE);
case KEY_until:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_NONEXPR)
+ return REPORT(0);
pl_yylval.ival = CopLINE(PL_curcop);
OPERATOR(UNTIL);
case KEY_unless:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_NONEXPR)
+ return REPORT(0);
pl_yylval.ival = CopLINE(PL_curcop);
OPERATOR(UNLESS);
@@ -7947,10 +8188,14 @@ Perl_yylex(pTHX)
LOP(OP_VEC,XTERM);
case KEY_when:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_NONEXPR)
+ return REPORT(0);
pl_yylval.ival = CopLINE(PL_curcop);
OPERATOR(WHEN);
case KEY_while:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_NONEXPR)
+ return REPORT(0);
pl_yylval.ival = CopLINE(PL_curcop);
OPERATOR(WHILE);
@@ -7982,12 +8227,18 @@ Perl_yylex(pTHX)
UNI(OP_ENTERWRITE);
case KEY_x:
- if (PL_expect == XOPERATOR)
+ if (PL_expect == XOPERATOR) {
+ if (*s == '=' && !PL_lex_allbrackets &&
+ PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
+ return REPORT(0);
Mop(OP_REPEAT);
+ }
check_uni();
goto just_a_word;
case KEY_xor:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_LOWLOGIC)
+ return REPORT(0);
pl_yylval.ival = OP_XOR;
OPERATOR(OROP);
@@ -11854,6 +12105,7 @@ S_scan_ident(pTHX_ register char *s, register const char *send, char *dest, STRL
}
bracket++;
PL_lex_brackstack[PL_lex_brackets++] = (char)(XOPERATOR | XFAKEBRACK);
+ PL_lex_allbrackets++;
return s;
}
}
@@ -13993,32 +14245,181 @@ Perl_keyword_plugin_standard(pTHX_
return KEYWORD_PLUGIN_DECLINE;
}
-#define parse_recdescent(g) S_parse_recdescent(aTHX_ g)
+#define parse_recdescent(g,p) S_parse_recdescent(aTHX_ g,p)
static void
-S_parse_recdescent(pTHX_ int gramtype)
+S_parse_recdescent(pTHX_ int gramtype, I32 fakeeof)
{
SAVEI32(PL_lex_brackets);
if (PL_lex_brackets > 100)
Renew(PL_lex_brackstack, PL_lex_brackets + 10, char);
PL_lex_brackstack[PL_lex_brackets++] = XFAKEEOF;
+ SAVEI32(PL_lex_allbrackets);
+ PL_lex_allbrackets = 0;
+ SAVEI8(PL_lex_fakeeof);
+ PL_lex_fakeeof = fakeeof;
if(yyparse(gramtype) && !PL_parser->error_count)
qerror(Perl_mess(aTHX_ "Parse error"));
}
-#define parse_recdescent_for_op(g) S_parse_recdescent_for_op(aTHX_ g)
+#define parse_recdescent_for_op(g,p) S_parse_recdescent_for_op(aTHX_ g,p)
static OP *
-S_parse_recdescent_for_op(pTHX_ int gramtype)
+S_parse_recdescent_for_op(pTHX_ int gramtype, I32 fakeeof)
{
OP *o;
ENTER;
SAVEVPTR(PL_eval_root);
PL_eval_root = NULL;
- parse_recdescent(gramtype);
+ parse_recdescent(gramtype, fakeeof);
o = PL_eval_root;
LEAVE;
return o;
}
+#define parse_expr(p,f) S_parse_expr(aTHX_ p,f)
+static OP *
+S_parse_expr(pTHX_ I32 fakeeof, U32 flags)
+{
+ OP *exprop;
+ if (flags & ~PARSE_OPTIONAL)
+ Perl_croak(aTHX_ "Parsing code internal error (%s)", "parse_expr");
+ exprop = parse_recdescent_for_op(GRAMEXPR, fakeeof);
+ if (!exprop && !(flags & PARSE_OPTIONAL)) {
+ if (!PL_parser->error_count)
+ qerror(Perl_mess(aTHX_ "Parse error"));
+ exprop = newOP(OP_NULL, 0);
+ }
+ return exprop;
+}
+
+/*
+=for apidoc Amx|OP *|parse_arithexpr|U32 flags
+
+Parse a Perl arithmetic expression. This may contain operators of precedence
+down to the bit shift operators. The expression must be followed (and thus
+terminated) either by a comparison or lower-precedence operator or by
+something that would normally terminate an expression such as semicolon.
+If I<flags> includes C<PARSE_OPTIONAL> then the expression is optional,
+otherwise it is mandatory. It is up to the caller to ensure that the
+dynamic parser state (L</PL_parser> et al) is correctly set to reflect
+the source of the code to be parsed and the lexical context for the
+expression.
+
+The op tree representing the expression is returned. If an optional
+expression is absent, a null pointer is returned, otherwise the pointer
+will be non-null.
+
+If an error occurs in parsing or compilation, in most cases a valid op
+tree is returned anyway. The error is reflected in the parser state,
+normally resulting in a single exception at the top level of parsing
+which covers all the compilation errors that occurred. Some compilation
+errors, however, will throw an exception immediately.
+
+=cut
+*/
+
+OP *
+Perl_parse_arithexpr(pTHX_ U32 flags)
+{
+ return parse_expr(LEX_FAKEEOF_COMPARE, flags);
+}
+
+/*
+=for apidoc Amx|OP *|parse_termexpr|U32 flags
+
+Parse a Perl term expression. This may contain operators of precedence
+down to the assignment operators. The expression must be followed (and thus
+terminated) either by a comma or lower-precedence operator or by
+something that would normally terminate an expression such as semicolon.
+If I<flags> includes C<PARSE_OPTIONAL> then the expression is optional,
+otherwise it is mandatory. It is up to the caller to ensure that the
+dynamic parser state (L</PL_parser> et al) is correctly set to reflect
+the source of the code to be parsed and the lexical context for the
+expression.
+
+The op tree representing the expression is returned. If an optional
+expression is absent, a null pointer is returned, otherwise the pointer
+will be non-null.
+
+If an error occurs in parsing or compilation, in most cases a valid op
+tree is returned anyway. The error is reflected in the parser state,
+normally resulting in a single exception at the top level of parsing
+which covers all the compilation errors that occurred. Some compilation
+errors, however, will throw an exception immediately.
+
+=cut
+*/
+
+OP *
+Perl_parse_termexpr(pTHX_ U32 flags)
+{
+ return parse_expr(LEX_FAKEEOF_COMMA, flags);
+}
+
+/*
+=for apidoc Amx|OP *|parse_listexpr|U32 flags
+
+Parse a Perl list expression. This may contain operators of precedence
+down to the comma operator. The expression must be followed (and thus
+terminated) either by a low-precedence logic operator such as C<or> or by
+something that would normally terminate an expression such as semicolon.
+If I<flags> includes C<PARSE_OPTIONAL> then the expression is optional,
+otherwise it is mandatory. It is up to the caller to ensure that the
+dynamic parser state (L</PL_parser> et al) is correctly set to reflect
+the source of the code to be parsed and the lexical context for the
+expression.
+
+The op tree representing the expression is returned. If an optional
+expression is absent, a null pointer is returned, otherwise the pointer
+will be non-null.
+
+If an error occurs in parsing or compilation, in most cases a valid op
+tree is returned anyway. The error is reflected in the parser state,
+normally resulting in a single exception at the top level of parsing
+which covers all the compilation errors that occurred. Some compilation
+errors, however, will throw an exception immediately.
+
+=cut
+*/
+
+OP *
+Perl_parse_listexpr(pTHX_ U32 flags)
+{
+ return parse_expr(LEX_FAKEEOF_LOWLOGIC, flags);
+}
+
+/*
+=for apidoc Amx|OP *|parse_fullexpr|U32 flags
+
+Parse a single complete Perl expression. This allows the full
+expression grammar, including the lowest-precedence operators such
+as C<or>. The expression must be followed (and thus terminated) by a
+token that an expression would normally be terminated by: end-of-file,
+closing bracketing punctuation, semicolon, or one of the keywords that
+signals a postfix expression-statement modifier. If I<flags> includes
+C<PARSE_OPTIONAL> then the expression is optional, otherwise it is
+mandatory. It is up to the caller to ensure that the dynamic parser
+state (L</PL_parser> et al) is correctly set to reflect the source of
+the code to be parsed and the lexical context for the expression.
+
+The op tree representing the expression is returned. If an optional
+expression is absent, a null pointer is returned, otherwise the pointer
+will be non-null.
+
+If an error occurs in parsing or compilation, in most cases a valid op
+tree is returned anyway. The error is reflected in the parser state,
+normally resulting in a single exception at the top level of parsing
+which covers all the compilation errors that occurred. Some compilation
+errors, however, will throw an exception immediately.
+
+=cut
+*/
+
+OP *
+Perl_parse_fullexpr(pTHX_ U32 flags)
+{
+ return parse_expr(LEX_FAKEEOF_NONEXPR, flags);
+}
+
/*
=for apidoc Amx|OP *|parse_block|U32 flags
@@ -14052,7 +14453,7 @@ Perl_parse_block(pTHX_ U32 flags)
{
if (flags)
Perl_croak(aTHX_ "Parsing code internal error (%s)", "parse_block");
- return parse_recdescent_for_op(GRAMBLOCK);
+ return parse_recdescent_for_op(GRAMBLOCK, LEX_FAKEEOF_NEVER);
}
/*
@@ -14090,7 +14491,7 @@ Perl_parse_barestmt(pTHX_ U32 flags)
{
if (flags)
Perl_croak(aTHX_ "Parsing code internal error (%s)", "parse_barestmt");
- return parse_recdescent_for_op(GRAMBARESTMT);
+ return parse_recdescent_for_op(GRAMBARESTMT, LEX_FAKEEOF_NEVER);
}
/*
@@ -14205,7 +14606,7 @@ Perl_parse_fullstmt(pTHX_ U32 flags)
{
if (flags)
Perl_croak(aTHX_ "Parsing code internal error (%s)", "parse_fullstmt");
- return parse_recdescent_for_op(GRAMFULLSTMT);
+ return parse_recdescent_for_op(GRAMFULLSTMT, LEX_FAKEEOF_NEVER);
}
/*
@@ -14244,8 +14645,8 @@ Perl_parse_stmtseq(pTHX_ U32 flags)
OP *stmtseqop;
I32 c;
if (flags)
- Perl_croak(aTHX_ "Parsing code internal error (%s)", "parse_fullstmt");
- stmtseqop = parse_recdescent_for_op(GRAMSTMTSEQ);
+ Perl_croak(aTHX_ "Parsing code internal error (%s)", "parse_stmtseq");
+ stmtseqop = parse_recdescent_for_op(GRAMSTMTSEQ, LEX_FAKEEOF_CLOSING);
c = lex_peek_unichar(0);
if (c != -1 && c != /*{*/'}')
qerror(Perl_mess(aTHX_ "Parse error"));
@@ -14257,7 +14658,7 @@ Perl_munge_qwlist_to_paren_list(pTHX_ OP *qwlist)
{
PERL_ARGS_ASSERT_MUNGE_QWLIST_TO_PAREN_LIST;
deprecate("qw(...) as parentheses");
- force_next(')');
+ force_next((4<<24)|')');
if (qwlist->op_type == OP_STUB) {
op_free(qwlist);
}
@@ -14266,7 +14667,7 @@ Perl_munge_qwlist_to_paren_list(pTHX_ OP *qwlist)
NEXTVAL_NEXTTOKE.opval = qwlist;
force_next(THING);
}
- force_next('(');
+ force_next((2<<24)|'(');
}
/*