make qw(...) first-class syntax
authorZefram <zefram@fysh.org>
Wed, 8 Sep 2010 07:51:29 +0000 (09:51 +0200)
committerRafael Garcia-Suarez <rgs@consttype.org>
Wed, 8 Sep 2010 08:15:44 +0000 (10:15 +0200)
This makes a qw(...) list literal a distinct token type for the
parser, where previously it was munged into a "(",THING,")" sequence.
The change means that qw(...) can't accidentally supply parens to parts
of the grammar that want real parens.  Due to many bits of code taking
advantage of that by "foreach my $x qw(...) {}", this patch also includes
a hack to coerce qw(...) to the old-style parenthesised THING, emitting
a deprecation warning along the way.

15 files changed:
embed.fnc
embed.h
lib/Tie/Scalar.t
lib/unicore/mktables
perly.act
perly.h
perly.tab
perly.y
pod/perldiag.pod
proto.h
t/lib/warnings/perly
t/op/list.t
t/op/studytied.t
t/op/switch.t
toke.c

index 732a054..8d6758e 100644 (file)
--- a/embed.fnc
+++ b/embed.fnc
@@ -2398,6 +2398,8 @@ xpoM      |void|store_cop_label \
                |NN COP *cop|NN const char *label|STRLEN len|U32 flags
 
 xpo    |int    |keyword_plugin_standard|NN char* keyword_ptr|STRLEN keyword_len|NN OP** op_ptr
+: Used in perly.y
+xp     |void   |coerce_qwlist_to_paren_list|NN OP* qwlist
 
 #if defined(USE_ITHREADS)
 #  if defined(PERL_IN_SV_C)
diff --git a/embed.h b/embed.h
index 2e1fb69..2812c92 100644 (file)
--- a/embed.h
+++ b/embed.h
 #ifdef PERL_CORE
 #define boot_core_mro          Perl_boot_core_mro
 #endif
+#ifdef PERL_CORE
+#define coerce_qwlist_to_paren_list    Perl_coerce_qwlist_to_paren_list
+#endif
 #if defined(USE_ITHREADS)
 #  if defined(PERL_IN_SV_C)
 #ifdef PERL_CORE
 #ifdef PERL_CORE
 #endif
 #ifdef PERL_CORE
+#define coerce_qwlist_to_paren_list(a) Perl_coerce_qwlist_to_paren_list(aTHX_ a)
 #endif
 #if defined(USE_ITHREADS)
 #  if defined(PERL_IN_SV_C)
index a8e803d..9be536f 100644 (file)
@@ -22,7 +22,7 @@ use Test::More tests => 16;
 use_ok( 'Tie::Scalar' );
 
 # these are "abstract virtual" parent methods
-for my $method qw( TIESCALAR FETCH STORE ) {
+for my $method (qw( TIESCALAR FETCH STORE )) {
        eval { Tie::Scalar->$method() };
        like( $@, qr/doesn't define a $method/, "croaks on inherited $method()" );
 }
index 0c10453..505e2ab 100644 (file)
@@ -792,7 +792,7 @@ if ($v_version gt v3.2.0) {
 # unless explicitly added.
 if ($v_version ge v5.2.0) {
     my $unihan = 'Unihan; remove from list if using Unihan';
-    foreach my $table qw (
+    foreach my $table (qw (
                            kAccountingNumeric
                            kOtherNumeric
                            kPrimaryNumeric
@@ -808,7 +808,7 @@ if ($v_version ge v5.2.0) {
                            kIRG_USource
                            kIRG_VSource
                            kRSUnicode
-                        )
+                        ))
     {
         $why_suppress_if_empty_warn_if_not{$table} = $unihan;
     }
@@ -4314,10 +4314,10 @@ sub trace { return main::trace(@_); }
 
     # Here are the methods that are required to be defined by any derived
     # class
-    for my $sub qw(
+    for my $sub (qw(
                     append_to_body
                     pre_body
-                )
+                ))
                 # append_to_body and pre_body are called in the write() method
                 # to add stuff after the main body of the table, but before
                 # its close; and to prepend stuff before the beginning of the
@@ -4795,7 +4795,7 @@ sub trace { return main::trace(@_); }
 
     # Accessors for the range list stored in this table.  First for
     # unconditional
-    for my $sub qw(
+    for my $sub (qw(
                     contains
                     count
                     each_range
@@ -4806,7 +4806,7 @@ sub trace { return main::trace(@_); }
                     range_count
                     reset_each_range
                     value_of
-                )
+                ))
     {
         no strict "refs";
         *$sub = sub {
@@ -4818,9 +4818,9 @@ sub trace { return main::trace(@_); }
     }
 
     # Then for ones that should fail if locked
-    for my $sub qw(
+    for my $sub (qw(
                     delete_range
-                )
+                ))
     {
         no strict "refs";
         *$sub = sub {
@@ -5783,9 +5783,9 @@ END
     }
 
     # Accessors for the underlying list that should fail if locked.
-    for my $sub qw(
+    for my $sub (qw(
                     add_duplicate
-                )
+                ))
     {
         no strict "refs";
         *$sub = sub {
@@ -6553,10 +6553,10 @@ END
     }
 
     # Accessors for the underlying list
-    for my $sub qw(
+    for my $sub (qw(
                     get_valid_code_point
                     get_invalid_code_point
-                )
+                ))
     {
         no strict "refs";
         *$sub = sub {
@@ -7121,7 +7121,7 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace }
 
     # Most of the accessors for a property actually apply to its map table.
     # Setup up accessor functions for those, referring to %map
-    for my $sub qw(
+    for my $sub (qw(
                     add_alias
                     add_anomalous_entry
                     add_comment
@@ -7166,7 +7166,7 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace }
                     to_output_map
                     value_of
                     write
-                )
+                ))
                     # 'property' above is for symmetry, so that one can take
                     # the property of a property and get itself, and so don't
                     # have to distinguish between properties and tables in
index d16735d..9f05270 100644 (file)
--- a/perly.act
+++ b/perly.act
@@ -1,10 +1,10 @@
 case 2:
-#line 143 "perly.y"
+#line 145 "perly.y"
     { (yyval.ival) = (ps[(2) - (2)].val.ival); ;}
     break;
 
   case 3:
-#line 145 "perly.y"
+#line 147 "perly.y"
     {
                          PL_eval_root = (ps[(2) - (2)].val.opval);
                          (yyval.ival) = 0;
@@ -14,12 +14,12 @@ case 2:
     break;
 
   case 4:
-#line 156 "perly.y"
+#line 158 "perly.y"
     { (yyval.ival) = (ps[(1) - (2)].val.ival); newPROG(block_end((ps[(1) - (2)].val.ival),(ps[(2) - (2)].val.opval))); ;}
     break;
 
   case 5:
-#line 161 "perly.y"
+#line 163 "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));
@@ -29,24 +29,24 @@ case 2:
     break;
 
   case 6:
-#line 170 "perly.y"
+#line 172 "perly.y"
     { (yyval.ival) = block_start(TRUE); ;}
     break;
 
   case 7:
-#line 174 "perly.y"
+#line 176 "perly.y"
     { (yyval.ival) = (I32) Perl_allocmy(aTHX_ STR_WITH_LEN("$_"), 0); ;}
     break;
 
   case 8:
-#line 178 "perly.y"
+#line 180 "perly.y"
     {
                    PL_parser->expect = XSTATE; (yyval.ival) = block_start(TRUE);
                ;}
     break;
 
   case 9:
-#line 185 "perly.y"
+#line 187 "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));
@@ -56,17 +56,17 @@ case 2:
     break;
 
   case 10:
-#line 194 "perly.y"
+#line 196 "perly.y"
     { (yyval.ival) = block_start(FALSE); ;}
     break;
 
   case 11:
-#line 199 "perly.y"
+#line 201 "perly.y"
     { (yyval.opval) = (OP*)NULL; ;}
     break;
 
   case 12:
-#line 201 "perly.y"
+#line 203 "perly.y"
     {
                        (yyval.opval) = IF_MAD(
                                append_list(OP_LINESEQ,
@@ -76,7 +76,7 @@ case 2:
     break;
 
   case 13:
-#line 208 "perly.y"
+#line 210 "perly.y"
     {   (yyval.opval) = append_list(OP_LINESEQ,
                                (LISTOP*)(ps[(1) - (2)].val.opval), (LISTOP*)(ps[(2) - (2)].val.opval));
                            PL_pad_reset_pending = TRUE;
@@ -86,12 +86,12 @@ case 2:
     break;
 
   case 14:
-#line 218 "perly.y"
+#line 220 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 15:
-#line 220 "perly.y"
+#line 222 "perly.y"
     {
                          PL_pad_reset_pending = TRUE;
                          (yyval.opval) = (ps[(1) - (1)].val.opval);
@@ -99,23 +99,23 @@ case 2:
     break;
 
   case 16:
-#line 228 "perly.y"
+#line 230 "perly.y"
     { (yyval.opval) = newSTATEOP(0, PVAL((ps[(1) - (2)].val.p_tkval)), (ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.p_tkval),((LISTOP*)(yyval.opval))->op_first,'L'); ;}
     break;
 
   case 18:
-#line 232 "perly.y"
+#line 234 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 19:
-#line 234 "perly.y"
+#line 236 "perly.y"
     { (yyval.opval) = newSTATEOP(0, PVAL((ps[(1) - (2)].val.p_tkval)), (ps[(2) - (2)].val.opval)); ;}
     break;
 
   case 20:
-#line 236 "perly.y"
+#line 238 "perly.y"
     {
                          if (PVAL((ps[(1) - (2)].val.p_tkval))) {
                              (yyval.opval) = newSTATEOP(0, PVAL((ps[(1) - (2)].val.p_tkval)), newOP(OP_NULL, 0));
@@ -135,7 +135,7 @@ case 2:
     break;
 
   case 21:
-#line 253 "perly.y"
+#line 255 "perly.y"
     {
                          (yyval.opval) = newSTATEOP(0, PVAL((ps[(1) - (3)].val.p_tkval)), (ps[(2) - (3)].val.opval));
                          PL_parser->expect = XSTATE;
@@ -154,7 +154,7 @@ case 2:
     break;
 
   case 22:
-#line 269 "perly.y"
+#line 271 "perly.y"
     { (yyval.opval) = newSTATEOP(0, NULL,
                                 newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
                                            NOLINE, (OP*)NULL, (ps[(1) - (1)].val.opval),
@@ -162,50 +162,50 @@ case 2:
     break;
 
   case 23:
-#line 274 "perly.y"
+#line 276 "perly.y"
     { (yyval.opval) = newSTATEOP(0, PVAL((ps[(1) - (2)].val.p_tkval)), (ps[(2) - (2)].val.opval)); ;}
     break;
 
   case 24:
-#line 279 "perly.y"
+#line 281 "perly.y"
     { (yyval.opval) = (OP*)NULL; ;}
     break;
 
   case 25:
-#line 281 "perly.y"
+#line 283 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 26:
-#line 283 "perly.y"
+#line 285 "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 27:
-#line 287 "perly.y"
+#line 289 "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 28:
-#line 291 "perly.y"
+#line 293 "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 29:
-#line 295 "perly.y"
+#line 297 "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 30:
-#line 299 "perly.y"
+#line 301 "perly.y"
     { (yyval.opval) = newFOROP(0, NULL, (line_t)IVAL((ps[(2) - (3)].val.i_tkval)),
                                        (OP*)NULL, (ps[(3) - (3)].val.opval), (ps[(1) - (3)].val.opval), (OP*)NULL);
                          TOKEN_GETMAD((ps[(2) - (3)].val.i_tkval),((LISTOP*)(yyval.opval))->op_first->op_sibling,'w');
@@ -213,24 +213,24 @@ case 2:
     break;
 
   case 31:
-#line 304 "perly.y"
+#line 306 "perly.y"
     { (yyval.opval) = newWHENOP((ps[(3) - (3)].val.opval), scope((ps[(1) - (3)].val.opval))); ;}
     break;
 
   case 32:
-#line 309 "perly.y"
+#line 311 "perly.y"
     { (yyval.opval) = (OP*)NULL; ;}
     break;
 
   case 33:
-#line 311 "perly.y"
+#line 313 "perly.y"
     { ((ps[(2) - (2)].val.opval))->op_flags |= OPf_PARENS; (yyval.opval) = scope((ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
   case 34:
-#line 315 "perly.y"
+#line 317 "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)), scope((ps[(5) - (6)].val.opval)), (ps[(6) - (6)].val.opval));
                            PL_hints |= HINT_BLOCK_SCOPE;
@@ -241,7 +241,7 @@ case 2:
     break;
 
   case 35:
-#line 326 "perly.y"
+#line 328 "perly.y"
     { PL_parser->copline = (line_t)IVAL((ps[(1) - (7)].val.i_tkval));
                            (yyval.opval) = block_end((ps[(3) - (7)].val.ival),
                                   newCONDOP(0, (ps[(4) - (7)].val.opval), scope((ps[(6) - (7)].val.opval)), (ps[(7) - (7)].val.opval)));
@@ -252,7 +252,7 @@ case 2:
     break;
 
   case 36:
-#line 334 "perly.y"
+#line 336 "perly.y"
     { PL_parser->copline = (line_t)IVAL((ps[(1) - (7)].val.i_tkval));
                            (yyval.opval) = block_end((ps[(3) - (7)].val.ival),
                                   newCONDOP(0, (ps[(4) - (7)].val.opval), scope((ps[(6) - (7)].val.opval)), (ps[(7) - (7)].val.opval)));
@@ -263,30 +263,30 @@ case 2:
     break;
 
   case 37:
-#line 345 "perly.y"
+#line 347 "perly.y"
     { (yyval.opval) = block_end((ps[(3) - (6)].val.ival),
                newWHENOP((ps[(4) - (6)].val.opval), scope((ps[(6) - (6)].val.opval)))); ;}
     break;
 
   case 38:
-#line 348 "perly.y"
+#line 350 "perly.y"
     { (yyval.opval) = newWHENOP(0, scope((ps[(2) - (2)].val.opval))); ;}
     break;
 
   case 39:
-#line 353 "perly.y"
+#line 355 "perly.y"
     { (yyval.opval) = (OP*)NULL; ;}
     break;
 
   case 40:
-#line 355 "perly.y"
+#line 357 "perly.y"
     { (yyval.opval) = scope((ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
   case 41:
-#line 362 "perly.y"
+#line 364 "perly.y"
     { OP *innerop;
                          PL_parser->copline = (line_t)IVAL((ps[(2) - (9)].val.i_tkval));
                            (yyval.opval) = block_end((ps[(4) - (9)].val.ival),
@@ -301,7 +301,7 @@ case 2:
     break;
 
   case 42:
-#line 375 "perly.y"
+#line 377 "perly.y"
     { OP *innerop;
                          PL_parser->copline = (line_t)IVAL((ps[(2) - (9)].val.i_tkval));
                            (yyval.opval) = block_end((ps[(4) - (9)].val.ival),
@@ -316,7 +316,7 @@ case 2:
     break;
 
   case 43:
-#line 387 "perly.y"
+#line 389 "perly.y"
     { OP *innerop;
                          (yyval.opval) = block_end((ps[(4) - (10)].val.ival),
                             innerop = newFOROP(0, PVAL((ps[(1) - (10)].val.p_tkval)), (line_t)IVAL((ps[(2) - (10)].val.i_tkval)),
@@ -330,7 +330,7 @@ case 2:
     break;
 
   case 44:
-#line 398 "perly.y"
+#line 400 "perly.y"
     { OP *innerop;
                          (yyval.opval) = block_end((ps[(5) - (9)].val.ival),
                             innerop = newFOROP(0, PVAL((ps[(1) - (9)].val.p_tkval)), (line_t)IVAL((ps[(2) - (9)].val.i_tkval)),
@@ -343,7 +343,7 @@ case 2:
     break;
 
   case 45:
-#line 408 "perly.y"
+#line 410 "perly.y"
     { OP *innerop;
                          (yyval.opval) = block_end((ps[(4) - (8)].val.ival),
                             innerop = newFOROP(0, PVAL((ps[(1) - (8)].val.p_tkval)), (line_t)IVAL((ps[(2) - (8)].val.i_tkval)),
@@ -356,7 +356,7 @@ case 2:
     break;
 
   case 46:
-#line 420 "perly.y"
+#line 422 "perly.y"
     { OP *forop;
                          PL_parser->copline = (line_t)IVAL((ps[(2) - (12)].val.i_tkval));
                          forop = newSTATEOP(0, PVAL((ps[(1) - (12)].val.p_tkval)),
@@ -389,7 +389,7 @@ case 2:
     break;
 
   case 47:
-#line 450 "perly.y"
+#line 452 "perly.y"
     { (yyval.opval) = newSTATEOP(0, PVAL((ps[(1) - (3)].val.p_tkval)),
                                 newWHILEOP(0, 1, (LOOP*)(OP*)NULL,
                                            NOLINE, (OP*)NULL, (ps[(2) - (3)].val.opval), (ps[(3) - (3)].val.opval), 0));
@@ -397,7 +397,7 @@ case 2:
     break;
 
   case 48:
-#line 458 "perly.y"
+#line 460 "perly.y"
     { PL_parser->copline = (line_t) IVAL((ps[(2) - (8)].val.i_tkval));
                            (yyval.opval) = block_end((ps[(4) - (8)].val.ival),
                                newSTATEOP(0, PVAL((ps[(1) - (8)].val.p_tkval)),
@@ -406,46 +406,46 @@ case 2:
     break;
 
   case 49:
-#line 467 "perly.y"
+#line 469 "perly.y"
     { (yyval.ival) = (PL_min_intro_pending &&
                            PL_max_intro_pending >=  PL_min_intro_pending);
                          intro_my(); ;}
     break;
 
   case 50:
-#line 473 "perly.y"
+#line 475 "perly.y"
     { (yyval.opval) = (OP*)NULL; ;}
     break;
 
   case 52:
-#line 479 "perly.y"
+#line 481 "perly.y"
     { YYSTYPE tmplval;
                          (void)scan_num("1", &tmplval);
                          (yyval.opval) = tmplval.opval; ;}
     break;
 
   case 54:
-#line 487 "perly.y"
+#line 489 "perly.y"
     { (yyval.opval) = invert(scalar((ps[(1) - (1)].val.opval))); ;}
     break;
 
   case 55:
-#line 492 "perly.y"
+#line 494 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); intro_my(); ;}
     break;
 
   case 56:
-#line 496 "perly.y"
+#line 498 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); intro_my(); ;}
     break;
 
   case 57:
-#line 500 "perly.y"
+#line 502 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); intro_my(); ;}
     break;
 
   case 58:
-#line 505 "perly.y"
+#line 507 "perly.y"
     {
 #ifdef MAD
                          YYSTYPE tmplval;
@@ -458,44 +458,44 @@ case 2:
     break;
 
   case 60:
-#line 519 "perly.y"
+#line 521 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 61:
-#line 521 "perly.y"
+#line 523 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 62:
-#line 523 "perly.y"
+#line 525 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 63:
-#line 525 "perly.y"
+#line 527 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 64:
-#line 527 "perly.y"
+#line 529 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 65:
-#line 532 "perly.y"
+#line 534 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 66:
-#line 536 "perly.y"
+#line 538 "perly.y"
     { (yyval.opval) = newOP(OP_NULL,0);
                          TOKEN_GETMAD((ps[(1) - (1)].val.i_tkval),(yyval.opval),'p');
                        ;}
     break;
 
   case 67:
-#line 542 "perly.y"
+#line 544 "perly.y"
     {
                          CV *fmtcv = PL_compcv;
                          SvREFCNT_inc_simple_void(PL_compcv);
@@ -516,17 +516,17 @@ case 2:
     break;
 
   case 68:
-#line 561 "perly.y"
+#line 563 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 69:
-#line 562 "perly.y"
+#line 564 "perly.y"
     { (yyval.opval) = (OP*)NULL; ;}
     break;
 
   case 70:
-#line 567 "perly.y"
+#line 569 "perly.y"
     { SvREFCNT_inc_simple_void(PL_compcv);
 #ifdef MAD
                          (yyval.opval) = newMYSUB((ps[(2) - (6)].val.ival), (ps[(3) - (6)].val.opval), (ps[(4) - (6)].val.opval), (ps[(5) - (6)].val.opval), (ps[(6) - (6)].val.opval));
@@ -539,7 +539,7 @@ case 2:
     break;
 
   case 71:
-#line 580 "perly.y"
+#line 582 "perly.y"
     { SvREFCNT_inc_simple_void(PL_compcv);
 #ifdef MAD
                          {
@@ -562,25 +562,25 @@ case 2:
     break;
 
   case 72:
-#line 602 "perly.y"
+#line 604 "perly.y"
     { (yyval.ival) = start_subparse(FALSE, 0);
                            SAVEFREESV(PL_compcv); ;}
     break;
 
   case 73:
-#line 608 "perly.y"
+#line 610 "perly.y"
     { (yyval.ival) = start_subparse(FALSE, CVf_ANON);
                            SAVEFREESV(PL_compcv); ;}
     break;
 
   case 74:
-#line 613 "perly.y"
+#line 615 "perly.y"
     { (yyval.ival) = start_subparse(TRUE, 0);
                            SAVEFREESV(PL_compcv); ;}
     break;
 
   case 75:
-#line 618 "perly.y"
+#line 620 "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")
@@ -590,24 +590,24 @@ case 2:
     break;
 
   case 76:
-#line 628 "perly.y"
+#line 630 "perly.y"
     { (yyval.opval) = (OP*)NULL; ;}
     break;
 
   case 78:
-#line 634 "perly.y"
+#line 636 "perly.y"
     { (yyval.opval) = (OP*)NULL; ;}
     break;
 
   case 79:
-#line 636 "perly.y"
+#line 638 "perly.y"
     { (yyval.opval) = (ps[(2) - (2)].val.opval);
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),':');
                        ;}
     break;
 
   case 80:
-#line 640 "perly.y"
+#line 642 "perly.y"
     { (yyval.opval) = IF_MAD(
                                    newOP(OP_NULL, 0),
                                    (OP*)NULL
@@ -617,14 +617,14 @@ case 2:
     break;
 
   case 81:
-#line 650 "perly.y"
+#line 652 "perly.y"
     { (yyval.opval) = (ps[(2) - (2)].val.opval);
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),':');
                        ;}
     break;
 
   case 82:
-#line 654 "perly.y"
+#line 656 "perly.y"
     { (yyval.opval) = IF_MAD(
                                    newOP(OP_NULL, 0),
                                    (OP*)NULL
@@ -634,12 +634,12 @@ case 2:
     break;
 
   case 83:
-#line 663 "perly.y"
+#line 665 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
   case 84:
-#line 664 "perly.y"
+#line 666 "perly.y"
     { (yyval.opval) = IF_MAD(
                                    newOP(OP_NULL,0),
                                    (OP*)NULL
@@ -650,7 +650,7 @@ case 2:
     break;
 
   case 85:
-#line 674 "perly.y"
+#line 676 "perly.y"
     {
 #ifdef MAD
                          (yyval.opval) = package((ps[(3) - (4)].val.opval));
@@ -668,7 +668,7 @@ case 2:
     break;
 
   case 86:
-#line 691 "perly.y"
+#line 693 "perly.y"
     {
                          int save_3_latefree = (ps[(3) - (5)].val.opval)->op_latefree;
                          (ps[(3) - (5)].val.opval)->op_latefree = 1;
@@ -684,7 +684,7 @@ case 2:
     break;
 
   case 87:
-#line 704 "perly.y"
+#line 706 "perly.y"
     { if (PL_parser->copline > (line_t)IVAL((ps[(4) - (8)].val.i_tkval)))
                              PL_parser->copline = (line_t)IVAL((ps[(4) - (8)].val.i_tkval));
                          (yyval.opval) = block_end((ps[(5) - (8)].val.ival), (ps[(7) - (8)].val.opval));
@@ -697,12 +697,12 @@ case 2:
     break;
 
   case 88:
-#line 716 "perly.y"
+#line 718 "perly.y"
     { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ ;}
     break;
 
   case 89:
-#line 718 "perly.y"
+#line 720 "perly.y"
     { SvREFCNT_inc_simple_void(PL_compcv);
 #ifdef MAD
                          (yyval.opval) = utilize(IVAL((ps[(1) - (7)].val.i_tkval)), (ps[(2) - (7)].val.ival), (ps[(4) - (7)].val.opval), (ps[(5) - (7)].val.opval), (ps[(6) - (7)].val.opval));
@@ -719,28 +719,28 @@ case 2:
     break;
 
   case 90:
-#line 735 "perly.y"
+#line 737 "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 91:
-#line 739 "perly.y"
+#line 741 "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 92:
-#line 743 "perly.y"
+#line 745 "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 94:
-#line 751 "perly.y"
+#line 753 "perly.y"
     {
 #ifdef MAD
                          OP* op = newNULLLIST();
@@ -753,7 +753,7 @@ case 2:
     break;
 
   case 95:
-#line 761 "perly.y"
+#line 763 "perly.y"
     { 
                          OP* term = (ps[(3) - (3)].val.opval);
                          DO_MAD(
@@ -765,7 +765,7 @@ case 2:
     break;
 
   case 97:
-#line 774 "perly.y"
+#line 776 "perly.y"
     { (yyval.opval) = convert(IVAL((ps[(1) - (3)].val.i_tkval)), OPf_STACKED,
                                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');
@@ -773,7 +773,7 @@ case 2:
     break;
 
   case 98:
-#line 779 "perly.y"
+#line 781 "perly.y"
     { (yyval.opval) = convert(IVAL((ps[(1) - (5)].val.i_tkval)), OPf_STACKED,
                                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');
@@ -783,7 +783,7 @@ case 2:
     break;
 
   case 99:
-#line 786 "perly.y"
+#line 788 "perly.y"
     { (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED,
                                append_elem(OP_LIST,
                                    prepend_elem(OP_LIST, scalar((ps[(1) - (6)].val.opval)), (ps[(5) - (6)].val.opval)),
@@ -795,7 +795,7 @@ case 2:
     break;
 
   case 100:
-#line 795 "perly.y"
+#line 797 "perly.y"
     { (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED,
                                append_elem(OP_LIST, scalar((ps[(1) - (3)].val.opval)),
                                    newUNOP(OP_METHOD, 0, (ps[(3) - (3)].val.opval))));
@@ -804,7 +804,7 @@ case 2:
     break;
 
   case 101:
-#line 801 "perly.y"
+#line 803 "perly.y"
     { (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED,
                                append_elem(OP_LIST,
                                    prepend_elem(OP_LIST, (ps[(2) - (3)].val.opval), (ps[(3) - (3)].val.opval)),
@@ -813,7 +813,7 @@ case 2:
     break;
 
   case 102:
-#line 807 "perly.y"
+#line 809 "perly.y"
     { (yyval.opval) = convert(OP_ENTERSUB, OPf_STACKED,
                                append_elem(OP_LIST,
                                    prepend_elem(OP_LIST, (ps[(2) - (5)].val.opval), (ps[(4) - (5)].val.opval)),
@@ -824,14 +824,14 @@ case 2:
     break;
 
   case 103:
-#line 815 "perly.y"
+#line 817 "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 104:
-#line 819 "perly.y"
+#line 821 "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),'(');
@@ -840,13 +840,13 @@ case 2:
     break;
 
   case 105:
-#line 825 "perly.y"
+#line 827 "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 106:
-#line 828 "perly.y"
+#line 830 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                 append_elem(OP_LIST,
                                   prepend_elem(OP_LIST, (ps[(4) - (5)].val.opval), (ps[(5) - (5)].val.opval)), (ps[(1) - (5)].val.opval)));
@@ -854,7 +854,7 @@ case 2:
     break;
 
   case 109:
-#line 843 "perly.y"
+#line 845 "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),'{');
@@ -864,7 +864,7 @@ case 2:
     break;
 
   case 110:
-#line 850 "perly.y"
+#line 852 "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),']');
@@ -872,7 +872,7 @@ case 2:
     break;
 
   case 111:
-#line 855 "perly.y"
+#line 857 "perly.y"
     { (yyval.opval) = newBINOP(OP_AELEM, 0,
                                        ref(newAVREF((ps[(1) - (5)].val.opval)),OP_RV2AV),
                                        scalar((ps[(4) - (5)].val.opval)));
@@ -883,7 +883,7 @@ case 2:
     break;
 
   case 112:
-#line 863 "perly.y"
+#line 865 "perly.y"
     { (yyval.opval) = newBINOP(OP_AELEM, 0,
                                        ref(newAVREF((ps[(1) - (4)].val.opval)),OP_RV2AV),
                                        scalar((ps[(3) - (4)].val.opval)));
@@ -893,7 +893,7 @@ case 2:
     break;
 
   case 113:
-#line 870 "perly.y"
+#line 872 "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),'{');
@@ -903,7 +903,7 @@ case 2:
     break;
 
   case 114:
-#line 877 "perly.y"
+#line 879 "perly.y"
     { (yyval.opval) = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF((ps[(1) - (6)].val.opval)),OP_RV2HV),
                                        jmaybe((ps[(4) - (6)].val.opval)));
@@ -916,7 +916,7 @@ case 2:
     break;
 
   case 115:
-#line 887 "perly.y"
+#line 889 "perly.y"
     { (yyval.opval) = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF((ps[(1) - (5)].val.opval)),OP_RV2HV),
                                        jmaybe((ps[(3) - (5)].val.opval)));
@@ -928,7 +928,7 @@ case 2:
     break;
 
   case 116:
-#line 896 "perly.y"
+#line 898 "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');
@@ -938,7 +938,7 @@ case 2:
     break;
 
   case 117:
-#line 903 "perly.y"
+#line 905 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   append_elem(OP_LIST, (ps[(4) - (5)].val.opval),
                                       newCVREF(0, scalar((ps[(1) - (5)].val.opval)))));
@@ -949,7 +949,7 @@ case 2:
     break;
 
   case 118:
-#line 912 "perly.y"
+#line 914 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   append_elem(OP_LIST, (ps[(3) - (4)].val.opval),
                                               newCVREF(0, scalar((ps[(1) - (4)].val.opval)))));
@@ -959,7 +959,7 @@ case 2:
     break;
 
   case 119:
-#line 919 "perly.y"
+#line 921 "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),'(');
@@ -968,7 +968,7 @@ case 2:
     break;
 
   case 120:
-#line 925 "perly.y"
+#line 927 "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),')');
@@ -978,7 +978,15 @@ case 2:
     break;
 
   case 121:
-#line 932 "perly.y"
+#line 934 "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 122:
+#line 939 "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),')');
@@ -987,22 +995,22 @@ case 2:
                        ;}
     break;
 
-  case 122:
-#line 942 "perly.y"
+  case 123:
+#line 949 "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 123:
-#line 946 "perly.y"
+  case 124:
+#line 953 "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 950 "perly.y"
+  case 125:
+#line 957 "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)));
@@ -1010,50 +1018,50 @@ case 2:
                        ;}
     break;
 
-  case 125:
-#line 956 "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 126:
-#line 960 "perly.y"
+#line 963 "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 127:
-#line 964 "perly.y"
+#line 967 "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 128:
-#line 968 "perly.y"
+#line 971 "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 129:
-#line 972 "perly.y"
+#line 975 "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 130:
-#line 976 "perly.y"
+#line 979 "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 131:
-#line 980 "perly.y"
+#line 983 "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 132:
+#line 987 "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({
@@ -1067,29 +1075,29 @@ case 2:
                        ;}
     break;
 
-  case 132:
-#line 992 "perly.y"
+  case 133:
+#line 999 "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 133:
-#line 996 "perly.y"
+  case 134:
+#line 1003 "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 134:
-#line 1000 "perly.y"
+  case 135:
+#line 1007 "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 135:
-#line 1004 "perly.y"
+  case 136:
+#line 1011 "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
@@ -1098,15 +1106,15 @@ case 2:
                        ;}
     break;
 
-  case 136:
-#line 1014 "perly.y"
+  case 137:
+#line 1021 "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 137:
-#line 1018 "perly.y"
+  case 138:
+#line 1025 "perly.y"
     { (yyval.opval) = IF_MAD(
                                    newUNOP(OP_NULL, 0, (ps[(2) - (2)].val.opval)),
                                    (ps[(2) - (2)].val.opval)
@@ -1115,70 +1123,70 @@ case 2:
                        ;}
     break;
 
-  case 138:
-#line 1025 "perly.y"
+  case 139:
+#line 1032 "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 139:
-#line 1029 "perly.y"
+  case 140:
+#line 1036 "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 140:
-#line 1033 "perly.y"
+  case 141:
+#line 1040 "perly.y"
     { (yyval.opval) = newUNOP(OP_POSTINC, 0,
                                        mod(scalar((ps[(1) - (2)].val.opval)), OP_POSTINC));
                          TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 141:
-#line 1038 "perly.y"
+  case 142:
+#line 1045 "perly.y"
     { (yyval.opval) = newUNOP(OP_POSTDEC, 0,
                                        mod(scalar((ps[(1) - (2)].val.opval)), OP_POSTDEC));
                          TOKEN_GETMAD((ps[(2) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 142:
-#line 1043 "perly.y"
+  case 143:
+#line 1050 "perly.y"
     { (yyval.opval) = newUNOP(OP_PREINC, 0,
                                        mod(scalar((ps[(2) - (2)].val.opval)), OP_PREINC));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 143:
-#line 1048 "perly.y"
+  case 144:
+#line 1055 "perly.y"
     { (yyval.opval) = newUNOP(OP_PREDEC, 0,
                                        mod(scalar((ps[(2) - (2)].val.opval)), OP_PREDEC));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 144:
-#line 1057 "perly.y"
+  case 145:
+#line 1064 "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 145:
-#line 1062 "perly.y"
+  case 146:
+#line 1069 "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 146:
-#line 1067 "perly.y"
+  case 147:
+#line 1074 "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),';');
@@ -1186,8 +1194,8 @@ case 2:
                        ;}
     break;
 
-  case 147:
-#line 1073 "perly.y"
+  case 148:
+#line 1080 "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),';');
@@ -1195,8 +1203,8 @@ case 2:
                        ;}
     break;
 
-  case 148:
-#line 1079 "perly.y"
+  case 149:
+#line 1086 "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');
@@ -1205,22 +1213,22 @@ case 2:
                        ;}
     break;
 
-  case 149:
-#line 1090 "perly.y"
+  case 150:
+#line 1097 "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 150:
-#line 1094 "perly.y"
+  case 151:
+#line 1101 "perly.y"
     { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, scope((ps[(2) - (2)].val.opval)));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'D');
                        ;}
     break;
 
-  case 151:
-#line 1098 "perly.y"
+  case 152:
+#line 1105 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB,
                            OPf_SPECIAL|OPf_STACKED,
                            prepend_elem(OP_LIST,
@@ -1234,8 +1242,8 @@ case 2:
                        ;}
     break;
 
-  case 152:
-#line 1110 "perly.y"
+  case 153:
+#line 1117 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB,
                            OPf_SPECIAL|OPf_STACKED,
                            append_elem(OP_LIST,
@@ -1250,8 +1258,8 @@ case 2:
                        ;}
     break;
 
-  case 153:
-#line 1123 "perly.y"
+  case 154:
+#line 1130 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED,
                            prepend_elem(OP_LIST,
                                scalar(newCVREF(0,scalar((ps[(2) - (4)].val.opval)))), (OP*)NULL)); dep();
@@ -1261,8 +1269,8 @@ case 2:
                        ;}
     break;
 
-  case 154:
-#line 1131 "perly.y"
+  case 155:
+#line 1138 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED,
                            prepend_elem(OP_LIST,
                                (ps[(4) - (5)].val.opval),
@@ -1273,81 +1281,86 @@ case 2:
                        ;}
     break;
 
-  case 159:
-#line 1147 "perly.y"
+  case 160:
+#line 1154 "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 160:
-#line 1152 "perly.y"
+  case 161:
+#line 1159 "perly.y"
     { (yyval.opval) = newUNOP(OP_REFGEN, 0, mod((ps[(2) - (2)].val.opval),OP_REFGEN));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'o');
                        ;}
     break;
 
-  case 161:
-#line 1156 "perly.y"
+  case 162:
+#line 1163 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
-  case 162:
-#line 1158 "perly.y"
+  case 163:
+#line 1165 "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 163:
-#line 1162 "perly.y"
+  case 164:
+#line 1169 "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 164:
-#line 1167 "perly.y"
+  case 165:
+#line 1174 "perly.y"
+    { (yyval.opval) = IF_MAD(newUNOP(OP_NULL,0,(ps[(1) - (1)].val.opval)), (ps[(1) - (1)].val.opval)); ;}
+    break;
+
+  case 166:
+#line 1176 "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 165:
-#line 1172 "perly.y"
+  case 167:
+#line 1181 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
-  case 166:
-#line 1174 "perly.y"
+  case 168:
+#line 1183 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
-  case 167:
-#line 1176 "perly.y"
+  case 169:
+#line 1185 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
-  case 168:
-#line 1178 "perly.y"
+  case 170:
+#line 1187 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
-  case 169:
-#line 1180 "perly.y"
+  case 171:
+#line 1189 "perly.y"
     { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[(1) - (1)].val.opval), OP_AV2ARYLEN));;}
     break;
 
-  case 170:
-#line 1182 "perly.y"
+  case 172:
+#line 1191 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
-  case 171:
-#line 1184 "perly.y"
+  case 173:
+#line 1193 "perly.y"
     { (yyval.opval) = prepend_elem(OP_ASLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_ASLICE, 0,
@@ -1358,8 +1371,8 @@ case 2:
                        ;}
     break;
 
-  case 172:
-#line 1193 "perly.y"
+  case 174:
+#line 1202 "perly.y"
     { (yyval.opval) = prepend_elem(OP_HSLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_HSLICE, 0,
@@ -1372,26 +1385,26 @@ case 2:
                        ;}
     break;
 
-  case 173:
-#line 1204 "perly.y"
+  case 175:
+#line 1213 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
-  case 174:
-#line 1206 "perly.y"
+  case 176:
+#line 1215 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[(1) - (1)].val.opval))); ;}
     break;
 
-  case 175:
-#line 1208 "perly.y"
+  case 177:
+#line 1217 "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 176:
-#line 1213 "perly.y"
+  case 178:
+#line 1222 "perly.y"
     {
                          (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                append_elem(OP_LIST, (ps[(3) - (4)].val.opval), scalar((ps[(1) - (4)].val.opval))));
@@ -1406,91 +1419,91 @@ case 2:
                        ;}
     break;
 
-  case 177:
-#line 1226 "perly.y"
+  case 179:
+#line 1235 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            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 178:
-#line 1231 "perly.y"
+  case 180:
+#line 1240 "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 179:
-#line 1236 "perly.y"
+  case 181:
+#line 1245 "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 180:
-#line 1240 "perly.y"
+  case 182:
+#line 1249 "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 181:
-#line 1244 "perly.y"
+  case 183:
+#line 1253 "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 182:
-#line 1248 "perly.y"
+  case 184:
+#line 1257 "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 183:
-#line 1252 "perly.y"
+  case 185:
+#line 1261 "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 184:
-#line 1256 "perly.y"
+  case 186:
+#line 1265 "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 185:
-#line 1260 "perly.y"
+  case 187:
+#line 1269 "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 186:
-#line 1264 "perly.y"
+  case 188:
+#line 1273 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[(1) - (1)].val.opval))); ;}
     break;
 
-  case 187:
-#line 1266 "perly.y"
+  case 189:
+#line 1275 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            append_elem(OP_LIST, (ps[(2) - (2)].val.opval), scalar((ps[(1) - (2)].val.opval)))); ;}
     break;
 
-  case 188:
-#line 1269 "perly.y"
+  case 190:
+#line 1278 "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 189:
-#line 1273 "perly.y"
+  case 191:
+#line 1282 "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),'(');
@@ -1498,14 +1511,14 @@ case 2:
                        ;}
     break;
 
-  case 190:
-#line 1279 "perly.y"
+  case 192:
+#line 1288 "perly.y"
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                scalar((ps[(1) - (1)].val.opval))); ;}
     break;
 
-  case 191:
-#line 1282 "perly.y"
+  case 193:
+#line 1291 "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);
@@ -1516,8 +1529,8 @@ case 2:
                        ;}
     break;
 
-  case 192:
-#line 1291 "perly.y"
+  case 194:
+#line 1300 "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),'(');
@@ -1525,16 +1538,16 @@ case 2:
                        ;}
     break;
 
-  case 193:
-#line 1297 "perly.y"
+  case 195:
+#line 1306 "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 196:
-#line 1304 "perly.y"
+  case 198:
+#line 1313 "perly.y"
     {
                          (yyval.opval) = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0),
                                newSVOP(OP_CONST, 0, newSVpvs("Unimplemented")));
@@ -1542,8 +1555,8 @@ case 2:
                        ;}
     break;
 
-  case 198:
-#line 1314 "perly.y"
+  case 200:
+#line 1323 "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');
@@ -1553,128 +1566,143 @@ case 2:
                        ;}
     break;
 
-  case 199:
-#line 1322 "perly.y"
+  case 201:
+#line 1331 "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 200:
-#line 1329 "perly.y"
+  case 202:
+#line 1338 "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 201:
-#line 1334 "perly.y"
+  case 203:
+#line 1343 "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 202:
-#line 1339 "perly.y"
+  case 204:
+#line 1348 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
-  case 203:
-#line 1341 "perly.y"
+  case 205:
+#line 1350 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
-  case 204:
-#line 1343 "perly.y"
+  case 206:
+#line 1352 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
-  case 205:
-#line 1348 "perly.y"
+  case 207:
+#line 1357 "perly.y"
     { (yyval.opval) = (OP*)NULL; ;}
     break;
 
-  case 206:
-#line 1350 "perly.y"
+  case 208:
+#line 1359 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
-  case 207:
-#line 1354 "perly.y"
+  case 209:
+#line 1363 "perly.y"
     { (yyval.opval) = (OP*)NULL; ;}
     break;
 
-  case 208:
-#line 1356 "perly.y"
+  case 210:
+#line 1365 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
-  case 209:
-#line 1362 "perly.y"
+  case 211:
+#line 1369 "perly.y"
+    { (yyval.i_tkval) = (ps[(1) - (1)].val.i_tkval); ;}
+    break;
+
+  case 212:
+#line 1371 "perly.y"
+    { coerce_qwlist_to_paren_list((ps[(1) - (1)].val.opval)); ;}
+    break;
+
+  case 213:
+#line 1373 "perly.y"
+    { (yyval.i_tkval) = (ps[(3) - (3)].val.i_tkval); ;}
+    break;
+
+  case 214:
+#line 1379 "perly.y"
     { PL_parser->in_my = 0; (yyval.opval) = my((ps[(1) - (1)].val.opval)); ;}
     break;
 
-  case 210:
-#line 1366 "perly.y"
+  case 215:
+#line 1383 "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 211:
-#line 1372 "perly.y"
+  case 216:
+#line 1389 "perly.y"
     { (yyval.opval) = newSVREF((ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'$');
                        ;}
     break;
 
-  case 212:
-#line 1378 "perly.y"
+  case 217:
+#line 1395 "perly.y"
     { (yyval.opval) = newAVREF((ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'@');
                        ;}
     break;
 
-  case 213:
-#line 1384 "perly.y"
+  case 218:
+#line 1401 "perly.y"
     { (yyval.opval) = newHVREF((ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'%');
                        ;}
     break;
 
-  case 214:
-#line 1390 "perly.y"
+  case 219:
+#line 1407 "perly.y"
     { (yyval.opval) = newAVREF((ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'l');
                        ;}
     break;
 
-  case 215:
-#line 1396 "perly.y"
+  case 220:
+#line 1413 "perly.y"
     { (yyval.opval) = newGVREF(0,(ps[(2) - (2)].val.opval));
                          TOKEN_GETMAD((ps[(1) - (2)].val.i_tkval),(yyval.opval),'*');
                        ;}
     break;
 
-  case 216:
-#line 1403 "perly.y"
+  case 221:
+#line 1420 "perly.y"
     { (yyval.opval) = scalar((ps[(1) - (1)].val.opval)); ;}
     break;
 
-  case 217:
-#line 1405 "perly.y"
+  case 222:
+#line 1422 "perly.y"
     { (yyval.opval) = scalar((ps[(1) - (1)].val.opval)); ;}
     break;
 
-  case 218:
-#line 1407 "perly.y"
+  case 223:
+#line 1424 "perly.y"
     { (yyval.opval) = scope((ps[(1) - (1)].val.opval)); ;}
     break;
 
-  case 219:
-#line 1410 "perly.y"
+  case 224:
+#line 1427 "perly.y"
     { (yyval.opval) = (ps[(1) - (1)].val.opval); ;}
     break;
 
diff --git a/perly.h b/perly.h
index bd8e6b7..e7b9927 100644 (file)
--- a/perly.h
+++ b/perly.h
      THING = 263,
      PMFUNC = 264,
      PRIVATEREF = 265,
-     FUNC0SUB = 266,
-     UNIOPSUB = 267,
-     LSTOPSUB = 268,
-     PLUGEXPR = 269,
-     PLUGSTMT = 270,
-     LABEL = 271,
-     FORMAT = 272,
-     SUB = 273,
-     ANONSUB = 274,
-     PACKAGE = 275,
-     USE = 276,
-     WHILE = 277,
-     UNTIL = 278,
-     IF = 279,
-     UNLESS = 280,
-     ELSE = 281,
-     ELSIF = 282,
-     CONTINUE = 283,
-     FOR = 284,
-     GIVEN = 285,
-     WHEN = 286,
-     DEFAULT = 287,
-     LOOPEX = 288,
-     DOTDOT = 289,
-     YADAYADA = 290,
-     FUNC0 = 291,
-     FUNC1 = 292,
-     FUNC = 293,
-     UNIOP = 294,
-     LSTOP = 295,
-     RELOP = 296,
-     EQOP = 297,
-     MULOP = 298,
-     ADDOP = 299,
-     DOLSHARP = 300,
-     DO = 301,
-     HASHBRACK = 302,
-     NOAMP = 303,
-     LOCAL = 304,
-     MY = 305,
-     MYSUB = 306,
-     REQUIRE = 307,
-     COLONATTR = 308,
-     PREC_LOW = 309,
-     DOROP = 310,
-     OROP = 311,
-     ANDOP = 312,
-     NOTOP = 313,
-     ASSIGNOP = 314,
-     DORDOR = 315,
-     OROR = 316,
-     ANDAND = 317,
-     BITOROP = 318,
-     BITANDOP = 319,
-     SHIFTOP = 320,
-     MATCHOP = 321,
-     REFGEN = 322,
-     UMINUS = 323,
-     POWOP = 324,
-     POSTDEC = 325,
-     POSTINC = 326,
-     PREDEC = 327,
-     PREINC = 328,
-     ARROW = 329,
-     PEG = 330
+     QWLIST = 266,
+     FUNC0SUB = 267,
+     UNIOPSUB = 268,
+     LSTOPSUB = 269,
+     PLUGEXPR = 270,
+     PLUGSTMT = 271,
+     LABEL = 272,
+     FORMAT = 273,
+     SUB = 274,
+     ANONSUB = 275,
+     PACKAGE = 276,
+     USE = 277,
+     WHILE = 278,
+     UNTIL = 279,
+     IF = 280,
+     UNLESS = 281,
+     ELSE = 282,
+     ELSIF = 283,
+     CONTINUE = 284,
+     FOR = 285,
+     GIVEN = 286,
+     WHEN = 287,
+     DEFAULT = 288,
+     LOOPEX = 289,
+     DOTDOT = 290,
+     YADAYADA = 291,
+     FUNC0 = 292,
+     FUNC1 = 293,
+     FUNC = 294,
+     UNIOP = 295,
+     LSTOP = 296,
+     RELOP = 297,
+     EQOP = 298,
+     MULOP = 299,
+     ADDOP = 300,
+     DOLSHARP = 301,
+     DO = 302,
+     HASHBRACK = 303,
+     NOAMP = 304,
+     LOCAL = 305,
+     MY = 306,
+     MYSUB = 307,
+     REQUIRE = 308,
+     COLONATTR = 309,
+     PREC_LOW = 310,
+     DOROP = 311,
+     OROP = 312,
+     ANDOP = 313,
+     NOTOP = 314,
+     ASSIGNOP = 315,
+     DORDOR = 316,
+     OROR = 317,
+     ANDAND = 318,
+     BITOROP = 319,
+     BITANDOP = 320,
+     SHIFTOP = 321,
+     MATCHOP = 322,
+     REFGEN = 323,
+     UMINUS = 324,
+     POWOP = 325,
+     POSTDEC = 326,
+     POSTINC = 327,
+     PREDEC = 328,
+     PREINC = 329,
+     ARROW = 330,
+     PEG = 331
    };
 #endif
 /* Tokens.  */
 #define THING 263
 #define PMFUNC 264
 #define PRIVATEREF 265
-#define FUNC0SUB 266
-#define UNIOPSUB 267
-#define LSTOPSUB 268
-#define PLUGEXPR 269
-#define PLUGSTMT 270
-#define LABEL 271
-#define FORMAT 272
-#define SUB 273
-#define ANONSUB 274
-#define PACKAGE 275
-#define USE 276
-#define WHILE 277
-#define UNTIL 278
-#define IF 279
-#define UNLESS 280
-#define ELSE 281
-#define ELSIF 282
-#define CONTINUE 283
-#define FOR 284
-#define GIVEN 285
-#define WHEN 286
-#define DEFAULT 287
-#define LOOPEX 288
-#define DOTDOT 289
-#define YADAYADA 290
-#define FUNC0 291
-#define FUNC1 292
-#define FUNC 293
-#define UNIOP 294
-#define LSTOP 295
-#define RELOP 296
-#define EQOP 297
-#define MULOP 298
-#define ADDOP 299
-#define DOLSHARP 300
-#define DO 301
-#define HASHBRACK 302
-#define NOAMP 303
-#define LOCAL 304
-#define MY 305
-#define MYSUB 306
-#define REQUIRE 307
-#define COLONATTR 308
-#define PREC_LOW 309
-#define DOROP 310
-#define OROP 311
-#define ANDOP 312
-#define NOTOP 313
-#define ASSIGNOP 314
-#define DORDOR 315
-#define OROR 316
-#define ANDAND 317
-#define BITOROP 318
-#define BITANDOP 319
-#define SHIFTOP 320
-#define MATCHOP 321
-#define REFGEN 322
-#define UMINUS 323
-#define POWOP 324
-#define POSTDEC 325
-#define POSTINC 326
-#define PREDEC 327
-#define PREINC 328
-#define ARROW 329
-#define PEG 330
+#define QWLIST 266
+#define FUNC0SUB 267
+#define UNIOPSUB 268
+#define LSTOPSUB 269
+#define PLUGEXPR 270
+#define PLUGSTMT 271
+#define LABEL 272
+#define FORMAT 273
+#define SUB 274
+#define ANONSUB 275
+#define PACKAGE 276
+#define USE 277
+#define WHILE 278
+#define UNTIL 279
+#define IF 280
+#define UNLESS 281
+#define ELSE 282
+#define ELSIF 283
+#define CONTINUE 284
+#define FOR 285
+#define GIVEN 286
+#define WHEN 287
+#define DEFAULT 288
+#define LOOPEX 289
+#define DOTDOT 290
+#define YADAYADA 291
+#define FUNC0 292
+#define FUNC1 293
+#define FUNC 294
+#define UNIOP 295
+#define LSTOP 296
+#define RELOP 297
+#define EQOP 298
+#define MULOP 299
+#define ADDOP 300
+#define DOLSHARP 301
+#define DO 302
+#define HASHBRACK 303
+#define NOAMP 304
+#define LOCAL 305
+#define MY 306
+#define MYSUB 307
+#define REQUIRE 308
+#define COLONATTR 309
+#define PREC_LOW 310
+#define DOROP 311
+#define OROP 312
+#define ANDOP 313
+#define NOTOP 314
+#define ASSIGNOP 315
+#define DORDOR 316
+#define OROR 317
+#define ANDAND 318
+#define BITOROP 319
+#define BITANDOP 320
+#define SHIFTOP 321
+#define MATCHOP 322
+#define REFGEN 323
+#define UMINUS 324
+#define POWOP 325
+#define POSTDEC 326
+#define POSTINC 327
+#define PREDEC 328
+#define PREINC 329
+#define ARROW 330
+#define PEG 331
 
 
 
index bca7223..c4cc60b 100644 (file)
--- a/perly.tab
+++ b/perly.tab
@@ -1,19 +1,19 @@
 #define YYFINAL  26
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2109
+#define YYLAST   2129
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  95
+#define YYNTOKENS  96
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  69
+#define YYNNTS  71
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  219
+#define YYNRULES  224
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  436
+#define YYNSTATES  444
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   330
+#define YYMAXUTOK   331
 
 #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,    82,     2,     2,    11,    13,    15,     2,
-      93,    92,    14,    10,    71,     9,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,    74,    16,
-       2,     2,     2,    73,    12,     2,     2,     2,     2,     2,
+       2,     2,     2,    83,     2,     2,    11,    13,    15,     2,
+      94,    93,    14,    10,    72,     9,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    75,    16,
+       2,     2,     2,    74,    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,     7,     2,     8,     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,     5,     2,     6,    83,     2,     2,     2,
+       2,     2,     2,     5,     2,     6,    84,     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,
@@ -52,9 +52,9 @@ static const yytype_uint8 yytranslate[] =
       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,    72,    75,    76,    77,    78,    79,
-      80,    81,    84,    85,    86,    87,    88,    89,    90,    91,
-      94
+      67,    68,    69,    70,    71,    73,    76,    77,    78,    79,
+      80,    81,    82,    85,    86,    87,    88,    89,    90,    91,
+      92,    95
 };
 
 #if YYDEBUG
@@ -74,125 +74,128 @@ static const yytype_uint16 yyprhs[] =
      305,   309,   313,   317,   319,   322,   326,   328,   332,   338,
      345,   349,   353,   359,   362,   367,   368,   374,   376,   378,
      384,   389,   395,   400,   406,   413,   419,   424,   430,   435,
-     439,   446,   452,   456,   460,   464,   468,   472,   476,   480,
-     484,   488,   492,   496,   500,   504,   508,   511,   514,   517,
-     520,   523,   526,   529,   532,   536,   539,   544,   548,   554,
-     557,   560,   565,   571,   576,   582,   584,   586,   588,   590,
-     596,   599,   601,   604,   608,   611,   613,   615,   617,   619,
-     621,   623,   628,   634,   636,   638,   642,   647,   651,   653,
-     656,   659,   661,   664,   667,   669,   672,   674,   677,   679,
-     683,   685,   689,   694,   699,   701,   703,   705,   707,   711,
-     714,   718,   721,   723,   725,   727,   728,   730,   731,   733,
-     735,   738,   741,   744,   747,   750,   753,   755,   757,   759
+     439,   446,   451,   457,   461,   465,   469,   473,   477,   481,
+     485,   489,   493,   497,   501,   505,   509,   513,   516,   519,
+     522,   525,   528,   531,   534,   537,   541,   544,   549,   553,
+     559,   562,   565,   570,   576,   581,   587,   589,   591,   593,
+     595,   601,   604,   606,   609,   613,   615,   618,   620,   622,
+     624,   626,   628,   630,   635,   641,   643,   645,   649,   654,
+     658,   660,   663,   666,   668,   671,   674,   676,   679,   681,
+     684,   686,   690,   692,   696,   701,   706,   708,   710,   712,
+     714,   718,   721,   725,   728,   730,   732,   734,   735,   737,
+     738,   740,   742,   743,   747,   749,   752,   755,   758,   761,
+     764,   767,   769,   771,   773
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-      96,     0,    -1,     3,    97,    -1,     4,   105,    -1,   101,
-     104,    -1,     5,    99,   104,     6,    -1,    -1,    -1,    -1,
-       5,   103,   104,     6,    -1,    -1,    -1,   104,   122,    -1,
-     104,   106,    -1,   122,    -1,   106,    -1,   121,   109,    -1,
-     112,    -1,   113,    -1,   121,   110,    -1,   121,    16,    -1,
-     121,   107,    16,    -1,   137,    -1,   121,    27,    -1,     1,
-      -1,   141,    -1,   141,    36,   141,    -1,   141,    37,   141,
-      -1,   141,    34,   141,    -1,   141,    35,   117,    -1,   141,
-      41,   141,    -1,   141,    43,   141,    -1,    -1,    38,   102,
-      -1,    39,    93,   118,    92,   102,   108,    -1,    36,    93,
-      99,   118,    92,   102,   108,    -1,    37,    93,    99,   120,
-      92,   102,   108,    -1,    43,    93,    99,   118,    92,   102,
-      -1,    44,    98,    -1,    -1,    40,    98,    -1,   121,    34,
-      93,    99,   116,    92,   114,   102,   111,    -1,   121,    35,
-      93,    99,   117,    92,   114,   102,   111,    -1,   121,    41,
-      62,    99,   156,    93,   118,    92,   102,   111,    -1,   121,
-      41,   158,    93,    99,   118,    92,   102,   111,    -1,   121,
-      41,    93,    99,   118,    92,   102,   111,    -1,   121,    41,
-      93,    99,   119,    16,   116,    16,   114,   119,    92,   102,
-      -1,   121,    98,   111,    -1,   121,    42,    93,    99,   100,
-     118,    92,   102,    -1,    -1,    -1,   107,    -1,    -1,   141,
-      -1,   141,    -1,   141,    -1,   115,    -1,   117,    -1,    -1,
-      28,    -1,   124,    -1,   127,    -1,   126,    -1,   136,    -1,
-     139,    -1,   123,    -1,    94,    -1,    29,   130,   125,    98,
-      -1,    17,    -1,    -1,    63,   128,   131,   132,   133,   135,
-      -1,    30,   128,   131,   132,   133,   135,    -1,    -1,    -1,
-      -1,    17,    -1,    -1,    20,    -1,    -1,    65,    20,    -1,
-      65,    -1,    65,    20,    -1,    65,    -1,    98,    -1,    16,
-      -1,    32,    17,    17,    16,    -1,    -1,    32,    17,    17,
-       5,    99,   138,   104,     6,    -1,    -1,    33,   128,   140,
-      17,    17,   154,    16,    -1,   141,    69,   141,    -1,   141,
-      68,   141,    -1,   141,    67,   141,    -1,   142,    -1,   142,
-      71,    -1,   142,    71,   151,    -1,   151,    -1,    52,   163,
-     142,    -1,    50,    93,   163,   141,    92,    -1,   151,    91,
-     145,    93,   155,    92,    -1,   151,    91,   145,    -1,    18,
-     163,   154,    -1,    19,   163,    93,   155,    92,    -1,    52,
-     154,    -1,    50,    93,   155,    92,    -1,    -1,    25,   129,
-      98,   144,   154,    -1,    18,    -1,   158,    -1,   162,     5,
-     141,    16,     6,    -1,   158,     7,   141,     8,    -1,   151,
-      91,     7,   141,     8,    -1,   146,     7,   141,     8,    -1,
-     158,     5,   141,    16,     6,    -1,   151,    91,     5,   141,
-      16,     6,    -1,   146,     5,   141,    16,     6,    -1,   151,
-      91,    93,    92,    -1,   151,    91,    93,   141,    92,    -1,
-     146,    93,   141,    92,    -1,   146,    93,    92,    -1,    93,
-     141,    92,     7,   141,     8,    -1,    93,    92,     7,   141,
-       8,    -1,   151,    72,   151,    -1,   151,    86,   151,    -1,
-     151,    55,   151,    -1,   151,    56,   151,    -1,   151,    80,
-     151,    -1,   151,    53,   151,    -1,   151,    54,   151,    -1,
-     151,    79,   151,    -1,   151,    78,   151,    -1,   151,    46,
-     151,    -1,   151,    77,   151,    -1,   151,    76,   151,    -1,
-     151,    75,   151,    -1,   151,    81,   151,    -1,     9,   151,
-      -1,    10,   151,    -1,    82,   151,    -1,    83,   151,    -1,
-     151,    88,    -1,   151,    87,    -1,    90,   151,    -1,    89,
-     151,    -1,     7,   141,     8,    -1,     7,     8,    -1,    59,
-     141,    16,     6,    -1,    59,    16,     6,    -1,    31,   129,
-     132,   133,    98,    -1,    58,   151,    -1,    58,    98,    -1,
-      58,    17,    93,    92,    -1,    58,    17,    93,   141,    92,
-      -1,    58,   158,    93,    92,    -1,    58,   158,    93,   141,
-      92,    -1,   147,    -1,   148,    -1,   149,    -1,   150,    -1,
-     151,    73,   151,    74,   151,    -1,    84,   151,    -1,   152,
-      -1,    61,   151,    -1,    93,   141,    92,    -1,    93,    92,
-      -1,   158,    -1,   162,    -1,   160,    -1,   159,    -1,   161,
-      -1,   146,    -1,   159,     7,   141,     8,    -1,   159,     5,
-     141,    16,     6,    -1,    20,    -1,   157,    -1,   157,    93,
-      92,    -1,   157,    93,   141,    92,    -1,    60,    17,   154,
-      -1,    45,    -1,    45,   151,    -1,    70,   142,    -1,    51,
-      -1,    51,    98,    -1,    51,   151,    -1,    64,    -1,    64,
-     151,    -1,    24,    -1,    24,   151,    -1,    48,    -1,    48,
-      93,    92,    -1,    23,    -1,    49,    93,    92,    -1,    49,
-      93,   141,    92,    -1,    21,    93,   142,    92,    -1,    17,
-      -1,   143,    -1,    47,    -1,    26,    -1,    62,   153,   134,
-      -1,    62,   153,    -1,    93,   141,    92,    -1,    93,    92,
-      -1,   158,    -1,   160,    -1,   159,    -1,    -1,   142,    -1,
-      -1,   141,    -1,   158,    -1,    15,   163,    -1,    11,   163,
-      -1,    12,   163,    -1,    13,   163,    -1,    57,   163,    -1,
-      14,   163,    -1,    17,    -1,   158,    -1,    98,    -1,    22,
-      -1
+      97,     0,    -1,     3,    98,    -1,     4,   106,    -1,   102,
+     105,    -1,     5,   100,   105,     6,    -1,    -1,    -1,    -1,
+       5,   104,   105,     6,    -1,    -1,    -1,   105,   123,    -1,
+     105,   107,    -1,   123,    -1,   107,    -1,   122,   110,    -1,
+     113,    -1,   114,    -1,   122,   111,    -1,   122,    16,    -1,
+     122,   108,    16,    -1,   138,    -1,   122,    28,    -1,     1,
+      -1,   142,    -1,   142,    37,   142,    -1,   142,    38,   142,
+      -1,   142,    35,   142,    -1,   142,    36,   118,    -1,   142,
+      42,   142,    -1,   142,    44,   142,    -1,    -1,    39,   103,
+      -1,    40,   157,   119,    93,   103,   109,    -1,    37,   157,
+     100,   119,    93,   103,   109,    -1,    38,   157,   100,   121,
+      93,   103,   109,    -1,    44,   157,   100,   119,    93,   103,
+      -1,    45,    99,    -1,    -1,    41,    99,    -1,   122,    35,
+     157,   100,   117,    93,   115,   103,   112,    -1,   122,    36,
+     157,   100,   118,    93,   115,   103,   112,    -1,   122,    42,
+      63,   100,   159,   157,   119,    93,   103,   112,    -1,   122,
+      42,   161,   157,   100,   119,    93,   103,   112,    -1,   122,
+      42,   157,   100,   119,    93,   103,   112,    -1,   122,    42,
+     157,   100,   120,    16,   117,    16,   115,   120,    93,   103,
+      -1,   122,    99,   112,    -1,   122,    43,   157,   100,   101,
+     119,    93,   103,    -1,    -1,    -1,   108,    -1,    -1,   142,
+      -1,   142,    -1,   142,    -1,   116,    -1,   118,    -1,    -1,
+      29,    -1,   125,    -1,   128,    -1,   127,    -1,   137,    -1,
+     140,    -1,   124,    -1,    95,    -1,    30,   131,   126,    99,
+      -1,    17,    -1,    -1,    64,   129,   132,   133,   134,   136,
+      -1,    31,   129,   132,   133,   134,   136,    -1,    -1,    -1,
+      -1,    17,    -1,    -1,    20,    -1,    -1,    66,    20,    -1,
+      66,    -1,    66,    20,    -1,    66,    -1,    99,    -1,    16,
+      -1,    33,    17,    17,    16,    -1,    -1,    33,    17,    17,
+       5,   100,   139,   105,     6,    -1,    -1,    34,   129,   141,
+      17,    17,   155,    16,    -1,   142,    70,   142,    -1,   142,
+      69,   142,    -1,   142,    68,   142,    -1,   143,    -1,   143,
+      72,    -1,   143,    72,   152,    -1,   152,    -1,    53,   166,
+     143,    -1,    51,    94,   166,   142,    93,    -1,   152,    92,
+     146,   157,   156,    93,    -1,   152,    92,   146,    -1,    18,
+     166,   155,    -1,    19,   166,    94,   156,    93,    -1,    53,
+     155,    -1,    51,    94,   156,    93,    -1,    -1,    26,   130,
+      99,   145,   155,    -1,    18,    -1,   161,    -1,   165,     5,
+     142,    16,     6,    -1,   161,     7,   142,     8,    -1,   152,
+      92,     7,   142,     8,    -1,   147,     7,   142,     8,    -1,
+     161,     5,   142,    16,     6,    -1,   152,    92,     5,   142,
+      16,     6,    -1,   147,     5,   142,    16,     6,    -1,   152,
+      92,    94,    93,    -1,   152,    92,    94,   142,    93,    -1,
+     147,   157,   142,    93,    -1,   147,   157,    93,    -1,    94,
+     142,    93,     7,   142,     8,    -1,    23,     7,   142,     8,
+      -1,    94,    93,     7,   142,     8,    -1,   152,    73,   152,
+      -1,   152,    87,   152,    -1,   152,    56,   152,    -1,   152,
+      57,   152,    -1,   152,    81,   152,    -1,   152,    54,   152,
+      -1,   152,    55,   152,    -1,   152,    80,   152,    -1,   152,
+      79,   152,    -1,   152,    47,   152,    -1,   152,    78,   152,
+      -1,   152,    77,   152,    -1,   152,    76,   152,    -1,   152,
+      82,   152,    -1,     9,   152,    -1,    10,   152,    -1,    83,
+     152,    -1,    84,   152,    -1,   152,    89,    -1,   152,    88,
+      -1,    91,   152,    -1,    90,   152,    -1,     7,   142,     8,
+      -1,     7,     8,    -1,    60,   142,    16,     6,    -1,    60,
+      16,     6,    -1,    32,   130,   133,   134,    99,    -1,    59,
+     152,    -1,    59,    99,    -1,    59,    17,   157,    93,    -1,
+      59,    17,   157,   142,    93,    -1,    59,   161,   157,    93,
+      -1,    59,   161,   157,   142,    93,    -1,   148,    -1,   149,
+      -1,   150,    -1,   151,    -1,   152,    74,   152,    75,   152,
+      -1,    85,   152,    -1,   153,    -1,    62,   152,    -1,    94,
+     142,    93,    -1,    23,    -1,    94,    93,    -1,   161,    -1,
+     165,    -1,   163,    -1,   162,    -1,   164,    -1,   147,    -1,
+     162,     7,   142,     8,    -1,   162,     5,   142,    16,     6,
+      -1,    20,    -1,   160,    -1,   160,   157,    93,    -1,   160,
+     157,   142,    93,    -1,    61,    17,   155,    -1,    46,    -1,
+      46,   152,    -1,    71,   143,    -1,    52,    -1,    52,    99,
+      -1,    52,   152,    -1,    65,    -1,    65,   152,    -1,    25,
+      -1,    25,   152,    -1,    49,    -1,    49,    94,    93,    -1,
+      24,    -1,    50,    94,    93,    -1,    50,    94,   142,    93,
+      -1,    21,    94,   143,    93,    -1,    17,    -1,   144,    -1,
+      48,    -1,    27,    -1,    63,   154,   135,    -1,    63,   154,
+      -1,    94,   142,    93,    -1,    94,    93,    -1,   161,    -1,
+     163,    -1,   162,    -1,    -1,   143,    -1,    -1,   142,    -1,
+      94,    -1,    -1,    23,   158,    94,    -1,   161,    -1,    15,
+     166,    -1,    11,   166,    -1,    12,   166,    -1,    13,   166,
+      -1,    58,   166,    -1,    14,   166,    -1,    17,    -1,   161,
+      -1,    99,    -1,    22,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   142,   142,   144,   154,   160,   170,   174,   178,   184,
-     194,   199,   200,   207,   217,   219,   227,   230,   231,   233,
-     235,   252,   268,   273,   278,   280,   282,   286,   290,   294,
-     298,   303,   309,   310,   314,   325,   333,   344,   347,   353,
-     354,   361,   374,   386,   397,   407,   417,   449,   457,   467,
-     473,   474,   479,   482,   486,   491,   495,   499,   505,   514,
-     518,   520,   522,   524,   526,   531,   535,   541,   561,   562,
-     566,   579,   602,   608,   613,   618,   628,   629,   634,   635,
-     639,   649,   653,   663,   664,   673,   691,   690,   716,   715,
-     734,   738,   742,   746,   750,   760,   769,   773,   778,   785,
-     794,   800,   806,   814,   818,   825,   824,   835,   836,   840,
-     849,   854,   862,   869,   876,   886,   895,   902,   911,   918,
-     924,   931,   941,   945,   949,   955,   959,   963,   967,   971,
-     975,   979,   991,   995,   999,  1003,  1013,  1017,  1024,  1028,
-    1032,  1037,  1042,  1047,  1056,  1061,  1066,  1072,  1078,  1089,
-    1093,  1097,  1109,  1122,  1130,  1142,  1143,  1144,  1145,  1146,
-    1151,  1155,  1157,  1161,  1166,  1171,  1173,  1175,  1177,  1179,
-    1181,  1183,  1192,  1203,  1205,  1207,  1212,  1225,  1230,  1235,
-    1239,  1243,  1247,  1251,  1255,  1259,  1263,  1265,  1268,  1272,
-    1278,  1281,  1290,  1296,  1301,  1302,  1303,  1309,  1313,  1321,
-    1328,  1333,  1338,  1340,  1342,  1347,  1349,  1354,  1355,  1361,
-    1365,  1371,  1377,  1383,  1389,  1395,  1402,  1404,  1406,  1409
+       0,   144,   144,   146,   156,   162,   172,   176,   180,   186,
+     196,   201,   202,   209,   219,   221,   229,   232,   233,   235,
+     237,   254,   270,   275,   280,   282,   284,   288,   292,   296,
+     300,   305,   311,   312,   316,   327,   335,   346,   349,   355,
+     356,   363,   376,   388,   399,   409,   419,   451,   459,   469,
+     475,   476,   481,   484,   488,   493,   497,   501,   507,   516,
+     520,   522,   524,   526,   528,   533,   537,   543,   563,   564,
+     568,   581,   604,   610,   615,   620,   630,   631,   636,   637,
+     641,   651,   655,   665,   666,   675,   693,   692,   718,   717,
+     736,   740,   744,   748,   752,   762,   771,   775,   780,   787,
+     796,   802,   808,   816,   820,   827,   826,   837,   838,   842,
+     851,   856,   864,   871,   878,   888,   897,   904,   913,   920,
+     926,   933,   938,   948,   952,   956,   962,   966,   970,   974,
+     978,   982,   986,   998,  1002,  1006,  1010,  1020,  1024,  1031,
+    1035,  1039,  1044,  1049,  1054,  1063,  1068,  1073,  1079,  1085,
+    1096,  1100,  1104,  1116,  1129,  1137,  1149,  1150,  1151,  1152,
+    1153,  1158,  1162,  1164,  1168,  1173,  1175,  1180,  1182,  1184,
+    1186,  1188,  1190,  1192,  1201,  1212,  1214,  1216,  1221,  1234,
+    1239,  1244,  1248,  1252,  1256,  1260,  1264,  1268,  1272,  1274,
+    1277,  1281,  1287,  1290,  1299,  1305,  1310,  1311,  1312,  1318,
+    1322,  1330,  1337,  1342,  1347,  1349,  1351,  1356,  1358,  1363,
+    1364,  1368,  1371,  1370,  1378,  1382,  1388,  1394,  1400,  1406,
+    1412,  1419,  1421,  1423,  1426
 };
 #endif
 
@@ -203,7 +206,7 @@ static const char *const yytname[] =
 {
   "$end", "error", "$undefined", "GRAMPROG", "GRAMFULLSTMT", "'{'", "'}'",
   "'['", "']'", "'-'", "'+'", "'$'", "'@'", "'%'", "'*'", "'&'", "';'",
-  "WORD", "METHOD", "FUNCMETH", "THING", "PMFUNC", "PRIVATEREF",
+  "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",
@@ -223,8 +226,8 @@ static const char *const yytname[] =
   "subbody", "package", "package_block", "@1", "use", "@2", "expr",
   "argexpr", "listop", "@3", "method", "subscripted", "termbinop",
   "termunop", "anonymous", "termdo", "term", "myattrterm", "myterm",
-  "listexpr", "listexprcom", "my_scalar", "amper", "scalar", "ary", "hsh",
-  "arylen", "star", "indirob", 0
+  "listexpr", "listexprcom", "lpar_or_qw", "@4", "my_scalar", "amper",
+  "scalar", "ary", "hsh", "arylen", "star", "indirob", 0
 };
 #endif
 
@@ -240,37 +243,38 @@ static const yytype_uint16 yytoknum[] =
      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,    44,   314,    63,    58,   315,   316,   317,   318,   319,
-     320,   321,    33,   126,   322,   323,   324,   325,   326,   327,
-     328,   329,    41,    40,   330
+     313,   314,    44,   315,    63,    58,   316,   317,   318,   319,
+     320,   321,   322,    33,   126,   323,   324,   325,   326,   327,
+     328,   329,   330,    41,    40,   331
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    95,    96,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   104,   104,   105,   105,   106,   106,   106,   106,
-     106,   106,   106,   106,   107,   107,   107,   107,   107,   107,
-     107,   107,   108,   108,   108,   109,   109,   110,   110,   111,
-     111,   112,   112,   112,   112,   112,   112,   112,   113,   114,
-     115,   115,   116,   116,   117,   118,   119,   120,   121,   121,
-     122,   122,   122,   122,   122,   122,   123,   124,   125,   125,
-     126,   127,   128,   129,   130,   131,   132,   132,   133,   133,
-     133,   134,   134,   135,   135,   136,   138,   137,   140,   139,
-     141,   141,   141,   141,   142,   142,   142,   143,   143,   143,
-     143,   143,   143,   143,   143,   144,   143,   145,   145,   146,
-     146,   146,   146,   146,   146,   146,   146,   146,   146,   146,
-     146,   146,   147,   147,   147,   147,   147,   147,   147,   147,
-     147,   147,   147,   147,   147,   147,   148,   148,   148,   148,
-     148,   148,   148,   148,   149,   149,   149,   149,   149,   150,
-     150,   150,   150,   150,   150,   151,   151,   151,   151,   151,
-     151,   151,   151,   151,   151,   151,   151,   151,   151,   151,
-     151,   151,   151,   151,   151,   151,   151,   151,   151,   151,
-     151,   151,   151,   151,   151,   151,   151,   151,   151,   151,
-     151,   151,   151,   151,   151,   151,   151,   151,   152,   152,
-     153,   153,   153,   153,   153,   154,   154,   155,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   163,   163,   163
+       0,    96,    97,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   105,   105,   106,   106,   107,   107,   107,   107,
+     107,   107,   107,   107,   108,   108,   108,   108,   108,   108,
+     108,   108,   109,   109,   109,   110,   110,   111,   111,   112,
+     112,   113,   113,   113,   113,   113,   113,   113,   114,   115,
+     116,   116,   117,   117,   118,   119,   120,   121,   122,   122,
+     123,   123,   123,   123,   123,   123,   124,   125,   126,   126,
+     127,   128,   129,   130,   131,   132,   133,   133,   134,   134,
+     134,   135,   135,   136,   136,   137,   139,   138,   141,   140,
+     142,   142,   142,   142,   143,   143,   143,   144,   144,   144,
+     144,   144,   144,   144,   144,   145,   144,   146,   146,   147,
+     147,   147,   147,   147,   147,   147,   147,   147,   147,   147,
+     147,   147,   147,   148,   148,   148,   148,   148,   148,   148,
+     148,   148,   148,   148,   148,   148,   148,   149,   149,   149,
+     149,   149,   149,   149,   149,   150,   150,   150,   150,   150,
+     151,   151,   151,   151,   151,   151,   152,   152,   152,   152,
+     152,   152,   152,   152,   152,   152,   152,   152,   152,   152,
+     152,   152,   152,   152,   152,   152,   152,   152,   152,   152,
+     152,   152,   152,   152,   152,   152,   152,   152,   152,   152,
+     152,   152,   152,   152,   152,   152,   152,   152,   152,   152,
+     153,   153,   154,   154,   154,   154,   154,   155,   155,   156,
+     156,   157,   158,   157,   159,   160,   161,   162,   163,   164,
+     165,   166,   166,   166,   166
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -288,16 +292,17 @@ static const yytype_uint8 yyr2[] =
        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,     5,     3,     3,     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,     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,
-       2,     2,     2,     2,     2,     2,     1,     1,     1,     1
+       6,     4,     5,     3,     3,     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
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -309,606 +314,615 @@ static const yytype_uint8 yydefact[] =
       72,    72,    66,     3,    15,    17,    18,     0,    14,    65,
       60,    62,    61,    63,    22,    64,     1,    58,    69,     0,
        0,    88,     0,    24,     6,     0,     0,     0,     0,     0,
-       0,     0,     0,    20,   194,     0,     0,   173,     0,   190,
-     186,    73,   197,    23,    73,     0,     0,     0,     0,     0,
-       0,     0,     0,   178,   196,   188,     0,     0,   181,   205,
-       0,     0,     0,     0,     0,     0,   184,     0,     0,     0,
-       0,     0,     0,     0,    39,     0,    16,    19,    25,    93,
-     195,   170,   155,   156,   157,   158,    96,   161,   174,   165,
-     168,   167,   169,   166,    13,    12,    68,     0,    75,    76,
-       0,     0,    76,    11,   145,     0,   136,   137,   216,   219,
-     218,   217,   211,   212,   213,   215,   210,   205,     0,     0,
-     187,     0,    76,     6,     6,     6,     6,     6,     6,     0,
-       6,     6,    38,   179,     0,     0,   207,   182,   183,   216,
-     206,   103,   217,     0,   214,   194,   150,   149,   165,     0,
-       0,   205,   162,     0,   199,   202,   204,   203,   185,   180,
-     138,   139,   160,   143,   142,   164,     0,     0,    47,    21,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    94,
+       0,     0,     0,    20,   196,     0,     0,   175,     0,   165,
+     192,   188,    73,   199,    23,    73,     0,     0,     0,     0,
+       0,     0,     0,     0,   180,   198,   190,     0,     0,   183,
+     207,     0,     0,     0,     0,     0,     0,   186,     0,     0,
+       0,     0,     0,     0,     0,    39,     0,    16,    19,    25,
+      93,   197,   172,   156,   157,   158,   159,    96,   162,   176,
+     167,   170,   169,   171,   168,    13,    12,    68,     0,    75,
+      76,     0,     0,    76,    11,   146,     0,   137,   138,   221,
+     224,   223,   222,   216,   217,   218,   220,   215,   207,     0,
+       0,     0,   189,     0,    76,   212,   211,     6,     6,     6,
+       6,     6,     6,     0,     6,     6,    38,   181,     0,     0,
+     209,   184,   185,   221,   208,   103,   222,     0,   219,   196,
+     151,   150,   167,     0,     0,   207,   163,     0,   201,   204,
+     206,   205,   187,   182,   139,   140,   161,   144,   143,   166,
+       0,     0,    47,    21,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    94,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   141,   140,
-       0,     0,     0,     0,     0,     0,     0,    67,    77,    78,
-       6,    85,     0,    78,    58,   144,   101,   207,     0,   105,
-      78,    52,     0,     0,     0,     0,     0,     6,     7,     0,
-     189,   191,     0,   208,     0,     0,    97,     0,     0,   147,
-       0,   177,   201,     0,    82,   198,     0,   163,    40,    28,
-      29,    54,    26,    27,    30,    31,    92,    91,    90,    95,
-       0,     0,   119,     0,   131,   127,   128,   124,   125,   122,
-       0,   134,   133,   132,   130,   129,   126,   135,   123,     0,
-       0,   107,     0,   100,   108,   175,     0,     0,     0,     0,
-       0,     0,    80,     0,    86,   205,     0,     5,     0,   193,
-     205,     0,     0,    53,     0,     0,    55,    57,     0,     0,
-     209,    51,    56,     0,     0,    25,     0,     0,     0,   192,
-     104,     0,   151,     0,   153,     0,   146,   200,    81,     0,
-       0,     0,   112,   118,     0,     0,     0,   116,     0,   207,
-     176,     0,   110,     0,   171,     0,    79,    84,    83,    71,
-      11,     0,    70,   102,   106,   148,    49,    49,     0,     0,
-       0,     0,    52,     0,     0,     0,    98,   152,   154,   121,
-       0,   115,   159,     0,   111,   117,     0,   113,   172,   109,
-      58,    89,     0,     0,    10,    32,    32,     0,    39,     0,
-       0,     0,    37,   120,   114,    99,    87,    39,    39,    11,
-       0,     0,    35,    36,     0,    45,    49,    39,    48,    41,
-      42,    58,    33,     0,    39,     0,    44,     9,     0,    43,
-       0,     0,     0,    32,    46,    34
+       0,     0,   142,   141,     0,     0,     0,     0,     0,     0,
+       0,    67,    77,    78,     6,    85,     0,    78,    58,   145,
+     101,   209,     0,     0,   105,    78,     0,    52,     0,     0,
+       0,     0,     0,     6,     7,     0,   191,   193,     0,   210,
+       0,     0,    97,     0,     0,   148,     0,   179,   203,     0,
+      82,   200,     0,   164,    40,    28,    29,    54,    26,    27,
+      30,    31,    92,    91,    90,    95,     0,     0,   119,     0,
+     132,   128,   129,   125,   126,   123,     0,   135,   134,   133,
+     131,   130,   127,   136,   124,     0,     0,   107,     0,   100,
+     108,   177,     0,     0,     0,     0,     0,     0,    80,     0,
+      86,   207,     0,     5,     0,   195,   121,   207,     0,   213,
+       0,    53,     0,     0,    55,    57,     0,     0,   214,    51,
+      56,     0,     0,    25,     0,     0,     0,   194,   104,     0,
+     152,     0,   154,     0,   147,   202,    81,     0,     0,     0,
+     112,   118,     0,     0,     0,   116,     0,   209,   178,     0,
+     110,     0,   173,     0,    79,    84,    83,    71,    11,     0,
+      70,   102,   106,   149,    49,    49,     0,     0,     0,     0,
+      52,     0,     0,     0,    98,   153,   155,   122,     0,   115,
+     160,     0,   111,   117,     0,   113,   174,   109,    58,    89,
+       0,     0,    10,    32,    32,     0,    39,     0,     0,     0,
+      37,   120,   114,    99,    87,    39,    39,    11,     0,     0,
+      35,    36,     0,    45,    49,    39,    48,    41,    42,    58,
+      33,     0,    39,     0,    44,     9,     0,    43,     0,     0,
+       0,    32,    46,    34
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     3,     4,   120,   113,   327,     5,   395,   409,    27,
-      13,   104,   321,   412,    86,    87,   178,    15,    16,   392,
-     322,   312,   260,   315,   324,   318,    17,   105,    19,    20,
-     107,    21,    22,    29,   131,    28,   109,   219,   303,   255,
-     359,    23,    24,   360,    25,   111,   316,    89,    90,   310,
-     293,    91,    92,    93,    94,    95,    96,    97,   164,   151,
-     244,   319,    98,    99,   100,   101,   102,   103,   122
+      -1,     3,     4,   121,   114,   335,     5,   403,   417,    27,
+      13,   105,   329,   420,    87,    88,   182,    15,    16,   400,
+     330,   320,   266,   323,   332,   326,    17,   106,    19,    20,
+     108,    21,    22,    29,   133,    28,   110,   223,   309,   261,
+     367,    23,    24,   368,    25,   112,   324,    90,    91,   317,
+     299,    92,    93,    94,    95,    96,    97,    98,   168,   155,
+     250,   137,   236,   327,    99,   100,   101,   102,   103,   104,
+     123
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -391
+#define YYPACT_NINF -380
 static const yytype_int16 yypact[] =
 {
-     158,  -391,   237,    50,  -391,  -391,  -391,  -391,  -391,    -5,
-    -391,  -391,  -391,  -391,  -391,  -391,  -391,   333,  -391,  -391,
-    -391,  -391,  -391,  -391,  -391,  -391,  -391,    88,    10,    37,
-      42,  -391,    37,  -391,  -391,   912,  1778,  1778,   313,   313,
-     313,   313,   313,  -391,  -391,   313,   313,  -391,   -24,  -391,
-    1778,  -391,  -391,  -391,  -391,   -15,   -11,    -7,    30,     5,
-      61,    79,    94,  1778,  -391,    91,    93,   110,   679,   592,
-     313,   766,   997,   109,  1778,    20,  1778,  1778,  1778,  1778,
-    1778,  1778,  1778,  1082,   165,   197,  -391,  -391,  1080,   149,
-    -391,    18,  -391,  -391,  -391,  -391,  1940,  -391,   143,    80,
-     171,  -391,  -391,   242,  -391,  -391,  -391,    94,  -391,   206,
-      98,   225,   206,  -391,  -391,    12,   625,   625,  -391,  -391,
-    -391,  -391,  -391,  -391,  -391,  -391,  -391,  1778,   178,  1778,
-     797,    94,   206,  -391,  -391,  -391,  -391,  -391,  -391,   183,
-    -391,  -391,  -391,  1940,   188,  1169,   592,  -391,   797,  1838,
-     149,  -391,   826,  1778,  -391,   194,  -391,   797,    65,   292,
-     133,  1778,   797,  1256,   239,  -391,  -391,  -391,   797,   149,
-     625,   625,   625,    17,    17,   298,   120,    94,  -391,  -391,
-    1778,  1778,  1778,  1778,  1778,  1778,  1778,  1778,  1778,  1778,
-    1778,  1778,  1343,  1778,  1778,  1778,  1778,  1778,  1778,  1778,
-    1778,  1778,  1778,  1778,  1778,  1778,  1778,  1778,  -391,  -391,
-      19,  1430,  1778,  1778,  1778,  1778,  1778,  -391,  -391,   254,
-    -391,  -391,   303,   254,    28,  -391,  -391,  1778,   -50,  -391,
-     254,  1778,  1778,  1778,  1778,   310,   418,  -391,  -391,  1778,
-    -391,  -391,   124,   240,   230,  1778,   149,  1517,  1604,  -391,
-     322,  -391,  -391,   140,   309,  -391,  1778,   326,  -391,   240,
-    -391,   240,   240,   240,   240,   240,   267,   267,  -391,  1940,
-     224,    27,  -391,   245,  2018,   450,   897,   538,   318,  1940,
-    1901,   491,   491,   579,   665,   944,   406,   625,   625,  1778,
-    1778,  -391,  1691,   246,  -391,  -391,   319,   227,    33,   248,
-     210,   258,   321,   134,  -391,  1778,   134,  -391,   273,  -391,
-    1778,    94,   274,   240,   279,   280,   240,  -391,   287,   296,
-    -391,  -391,  -391,   304,   382,   417,  1778,  1778,   315,  -391,
-    -391,   379,  -391,   489,  -391,   553,  -391,  -391,  -391,   214,
-    1778,   395,  -391,  -391,  1778,   294,   217,  -391,   640,  1778,
-    -391,   396,  -391,   404,  -391,   407,  -391,  -391,  -391,  -391,
-    -391,   398,  -391,  -391,  -391,  -391,  -391,  -391,   413,   413,
-    1778,   413,  1778,   320,   328,   413,  -391,  -391,  -391,  -391,
-     221,  -391,  1979,   415,  -391,  -391,   332,  -391,  -391,  -391,
-     127,  -391,   413,   413,  -391,   185,   185,   348,   165,   429,
-     413,   413,  -391,  -391,  -391,  -391,  -391,   165,   165,  -391,
-     413,   357,  -391,  -391,   413,  -391,  -391,   165,  -391,  -391,
-    -391,   205,  -391,  1778,   165,   503,  -391,  -391,   363,  -391,
-     364,   413,   413,   185,  -391,  -391
+     156,  -380,   261,    29,  -380,  -380,  -380,  -380,  -380,    19,
+    -380,  -380,  -380,  -380,  -380,  -380,  -380,   334,  -380,  -380,
+    -380,  -380,  -380,  -380,  -380,  -380,  -380,   153,    31,    46,
+      54,  -380,    46,  -380,  -380,   921,  1797,  1797,    75,    75,
+      75,    75,    75,  -380,  -380,    75,    75,  -380,   -51,    74,
+    -380,  1797,  -380,  -380,  -380,  -380,    11,    11,    11,    11,
+      64,    11,    11,    80,  1797,  -380,    -5,     0,    14,   684,
+     596,    75,   772,  1007,    99,  1797,    -1,  1797,  1797,  1797,
+    1797,  1797,  1797,  1797,  1093,    72,   110,  -380,  -380,   816,
+      82,  -380,    26,  -380,  -380,  -380,  -380,  1959,  -380,    11,
+      96,   114,  -380,  -380,   151,  -380,  -380,  -380,    80,  -380,
+     142,    93,   159,   142,  -380,  -380,   158,   229,   229,  -380,
+    -380,  -380,  -380,  -380,  -380,  -380,  -380,  -380,  1797,    87,
+    1797,  1797,  1166,    80,   142,  -380,  -380,  -380,  -380,  -380,
+    -380,  -380,  -380,    11,  -380,  -380,  -380,  1959,    92,  1181,
+     596,  -380,  1166,  1857,    82,  -380,   834,  1797,  -380,    11,
+    -380,  1166,    67,   182,     8,  1797,  1166,  1269,   124,  -380,
+    -380,  -380,  1166,    82,   229,   229,   229,   235,   235,   185,
+     125,    80,  -380,  -380,  1797,  1797,  1797,  1797,  1797,  1797,
+    1797,  1797,  1797,  1797,  1797,  1797,  1357,  1797,  1797,  1797,
+    1797,  1797,  1797,  1797,  1797,  1797,  1797,  1797,  1797,  1797,
+    1797,  1797,  -380,  -380,    21,  1445,  1797,  1797,  1797,  1797,
+    1797,  -380,  -380,   138,  -380,  -380,   188,   138,    35,  -380,
+    -380,  1797,   -32,   172,  -380,   138,   113,  1797,  1797,  1797,
+    1797,   204,   420,  -380,  -380,  1797,  -380,  -380,   333,   339,
+     126,  1797,    82,  1533,  1621,  -380,   216,  -380,  -380,   467,
+     209,  -380,  1797,   223,  -380,   339,  -380,   339,   339,   339,
+     339,   339,   162,   162,  -380,  1959,   141,   205,  -380,   477,
+    2037,  1078,   906,   542,   452,  1959,  1920,   494,   494,   583,
+     670,   992,   408,   229,   229,  1797,  1797,  -380,  1709,    11,
+    -380,  -380,   557,   217,   230,   233,   245,   264,   215,   101,
+    -380,  1797,   101,  -380,   131,  -380,  -380,  1797,    80,  -380,
+     146,   339,   150,   161,   339,  -380,   178,    11,  -380,  -380,
+    -380,   184,   231,   419,  1797,  1797,   189,  -380,  -380,   645,
+    -380,   671,  -380,   733,  -380,  -380,  -380,   268,  1797,   240,
+    -380,  -380,  1797,   390,   321,  -380,   805,  1797,  -380,   282,
+    -380,   287,  -380,   290,  -380,  -380,  -380,  -380,  -380,   281,
+    -380,  -380,  -380,  -380,  -380,  -380,   246,   246,  1797,   246,
+    1797,   212,   213,   246,  -380,  -380,  -380,  -380,   380,  -380,
+    1998,   304,  -380,  -380,   227,  -380,  -380,  -380,   278,  -380,
+     246,   246,  -380,   157,   157,   237,    72,   310,   246,   246,
+    -380,  -380,  -380,  -380,  -380,    72,    72,  -380,   246,    11,
+    -380,  -380,   246,  -380,  -380,    72,  -380,  -380,  -380,   782,
+    -380,  1797,    72,   506,  -380,  -380,   272,  -380,   274,   246,
+     246,   157,  -380,  -380
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -391,  -391,  -391,     0,     7,  -391,  -391,  1552,  -391,  -112,
-    -391,   455,   442,  -390,  -391,  -391,  -334,  -391,  -391,  -363,
-    -391,    92,   -51,  -217,    47,  -391,  -391,   471,  -391,  -391,
-    -391,  -391,  -391,   291,   420,  -391,   449,   -83,  -146,  -391,
-     177,  -391,  -391,  -391,  -391,  -391,   -17,   -64,  -391,  -391,
-    -391,  -391,  -391,  -391,  -391,  -391,    56,  -391,  -391,  -125,
-    -224,  -391,  -391,   -31,   414,   416,  -391,  -391,     6
+    -380,  -380,  -380,    10,     7,  -380,  -380,  1564,  -380,  -113,
+    -380,   366,   357,  -379,  -380,  -380,    61,  -380,  -380,  -367,
+    -380,     1,  -116,  -223,   -58,  -380,  -380,   396,  -380,  -380,
+    -380,  -380,  -380,   154,   345,  -380,   372,   -43,  -197,  -380,
+      98,  -380,  -380,  -380,  -380,  -380,   -17,   -28,  -380,  -380,
+    -380,  -380,  -380,  -380,  -380,  -380,    59,  -380,  -380,  -105,
+    -222,   -55,  -380,  -380,  -380,   -25,   336,   337,  -380,  -380,
+      13
 };
 
 /* 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 -195
+#define YYTABLE_NINF -197
 static const yytype_int16 yytable[] =
 {
-      88,   224,   226,   308,   393,   150,   413,   121,   121,   121,
-     121,   121,    30,   169,   121,   121,    38,    84,   115,   323,
-     225,   189,   328,   190,   289,   191,   290,   106,   139,   223,
-      38,    38,    39,    40,   307,   342,   251,   291,   152,   121,
-     158,   352,   309,   435,   165,   123,   124,   125,   126,   230,
-      26,   127,   128,   425,   108,   160,     6,     7,     8,   110,
-       9,    10,   142,   150,   415,   228,   176,   137,   147,   129,
-     212,   156,   213,   419,   420,   153,   154,   306,   133,   186,
-     187,   188,   134,   426,   311,   212,   135,   213,    -4,   246,
-     429,    11,   116,   117,   186,   187,   188,   150,   138,    34,
-     186,   187,   188,   220,  -195,  -195,   130,   217,   210,   373,
-     374,   192,   292,   163,   221,   152,     6,     7,     8,   143,
-       9,    10,    12,   136,   148,   386,   161,   157,   242,   243,
-     162,   229,   168,   406,   170,   171,   172,   173,   174,    34,
-     231,   232,   233,   234,   235,   236,   253,   238,   239,   250,
-     357,    11,   245,   397,   140,     6,     7,     8,   248,     9,
-      10,     1,     2,   259,   261,   262,   263,   264,   265,   266,
-     267,   268,   141,   270,   271,   273,   214,   258,   215,   294,
-     361,   314,    12,   317,   144,   364,   145,   186,   187,   188,
-      11,   186,   187,   188,   296,   297,   298,   299,   300,   301,
-     186,   187,   188,   146,   320,   177,   428,   186,   187,   188,
-     243,   427,   257,   179,   313,   261,   329,   261,   354,   325,
-     189,    12,   379,   410,   411,   384,   218,   304,   331,   403,
-     333,   335,   337,     6,     7,     8,   211,     9,    10,   339,
-     341,   150,   222,   351,   326,   269,   150,   216,   390,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   353,     6,     7,     8,    11,     9,
-      10,   227,   345,   346,   355,   348,   237,   186,   187,   188,
-     240,   186,   187,   188,   186,   187,   188,   247,   186,   187,
-     188,   186,   187,   188,   186,   187,   188,   421,   249,    12,
-      11,    31,    32,   358,   254,   256,   358,   186,   187,   188,
-     383,   365,   186,   187,   188,   186,   187,   188,    34,   302,
-     305,    38,   330,   380,    38,   186,   187,   188,   336,   338,
-     118,    12,   243,   340,    33,   119,   188,   343,    34,   349,
-      35,   356,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,   313,    49,    50,    51,    52,
-      53,   186,   187,   188,    54,   363,   366,    55,    56,    57,
-      58,   367,   368,   196,    59,    60,    61,    62,    63,   369,
-      64,    65,    66,    67,    68,    69,   186,   187,   188,   370,
-      70,    71,    72,    73,    74,    75,   371,    76,   372,   206,
-     382,   381,   387,    77,   207,   208,   209,   375,    88,   210,
-     388,   350,   400,   389,   391,    78,    79,    80,   394,    33,
-     401,   404,    81,    82,   405,    35,    83,    36,    37,    38,
-      39,    40,    41,    42,   -50,    44,    45,    46,    47,    48,
-     414,    49,    50,    51,    52,   416,   186,   187,   188,    54,
-     423,   180,   181,   182,   183,   431,   432,    14,   184,    85,
-     185,   196,   197,    63,   399,    64,    65,    66,    67,    68,
-      69,   376,   430,    18,   132,    70,    71,    72,    73,    74,
-      75,   112,    76,   362,   186,   187,   188,   206,    77,   166,
-       0,   167,   207,   208,   209,     0,     0,   210,     0,     0,
-      78,    79,    80,  -195,    33,   196,   197,    81,    82,   -55,
-      35,    83,    36,    37,    38,    39,    40,    41,    42,     0,
+      89,   228,   138,   139,   140,   142,   144,   145,   401,   314,
+      38,    39,    40,   122,   122,   122,   122,   122,   116,   331,
+     122,   122,   336,   230,   256,   421,   295,    85,   296,    26,
+     312,   194,    38,   195,   135,   143,    30,   196,   318,   297,
+     193,   313,   154,   130,   215,   156,   122,   162,   107,   135,
+     173,   169,   124,   125,   126,   127,   164,   433,   128,   129,
+     257,   315,   443,   109,     6,     7,     8,   180,     9,    10,
+     227,   111,   216,   146,   217,    38,   190,   191,   192,   151,
+      34,   131,   160,   157,   158,    34,    38,   135,   243,   148,
+     135,   235,   119,   167,   149,   117,   118,   120,   224,    11,
+     154,   216,   232,   217,   253,   136,    34,   254,   150,   225,
+     132,   381,   382,   181,   233,   298,   165,   365,   221,   218,
+     136,   219,   322,   147,   325,   156,   183,   141,   152,   252,
+      12,   161,   248,   249,   166,   394,   172,   154,   174,   175,
+     176,   177,   178,   234,   237,   238,   239,   240,   241,   242,
+     259,   244,   245,    -4,   193,   405,   220,   349,   136,     1,
+       2,   136,   222,   251,    31,    32,   229,   265,   267,   268,
+     269,   270,   271,   272,   273,   274,   226,   276,   277,   279,
+     316,   231,     6,     7,     8,   246,     9,    10,   255,   300,
+     260,   264,   262,   190,   191,   192,   418,   419,   302,   303,
+     304,   305,   306,   307,   308,   311,   369,   319,   436,   190,
+     191,   192,   372,   350,   249,    38,   328,    11,   263,   338,
+     321,   267,   344,   267,   371,   333,   190,   191,   192,   346,
+     348,   310,   192,   359,   339,   364,   341,   343,   360,   374,
+     190,   191,   192,   375,   357,   347,   389,   380,    12,   361,
+     334,   402,   275,   362,   376,   398,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   377,   378,   190,   191,   192,   387,   379,   353,   354,
+     363,   356,   383,   154,   414,   190,   191,   192,   395,   154,
+       6,     7,     8,   396,     9,    10,   397,   399,   190,   191,
+     192,   190,   191,   192,   429,   408,   409,     6,     7,     8,
+     412,     9,    10,   190,   191,   192,   211,   212,   213,   366,
+     413,   214,   366,  -197,  -197,    11,   424,   214,   373,   392,
+     422,   388,   190,   191,   192,    33,   190,   191,   192,    34,
+     249,    35,    11,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    12,    49,    50,    51,
+      52,    53,    54,   321,   431,   439,    55,   440,    14,    56,
+      57,    58,    59,    12,    86,   438,    60,    61,    62,    63,
+      64,   407,    65,    66,    67,    68,    69,    70,   411,   190,
+     191,   192,    71,    72,    73,    74,    75,    76,    18,    77,
+     134,   190,   191,   192,   113,    78,   391,   190,   191,   192,
+     370,   390,   170,   171,     0,     0,    89,    79,    80,    81,
+       0,    33,     0,     0,    82,    83,   337,    35,    84,    36,
+      37,    38,    39,    40,    41,    42,   -50,    44,    45,    46,
+      47,    48,     0,    49,    50,    51,    52,    53,   190,   191,
+     192,     0,    55,     0,   184,   185,   186,   187,   190,   191,
+     192,   188,     0,   189,   200,   201,    64,   423,    65,    66,
+      67,    68,    69,    70,     0,     0,   427,   428,    71,    72,
+      73,    74,    75,    76,     0,    77,   434,   190,   191,   192,
+     210,    78,     0,   437,     0,   211,   212,   213,     0,     0,
+     214,     0,     0,    79,    80,    81,     0,    33,   200,     0,
+      82,    83,   -55,    35,    84,    36,    37,    38,    39,    40,
+      41,    42,     0,    44,    45,    46,    47,    48,     0,    49,
+      50,    51,    52,    53,   210,   190,   191,   192,    55,   211,
+     212,   213,     0,     0,   214,   190,   191,   192,   198,   199,
+     200,   201,    64,     0,    65,    66,    67,    68,    69,    70,
+     345,     0,     0,     0,    71,    72,    73,    74,    75,    76,
+     351,    77,   206,   207,   208,   209,   210,    78,     0,     0,
+       0,   211,   212,   213,     0,     0,   214,     0,     0,    79,
+      80,    81,     0,     0,     0,     0,    82,    83,     0,   -50,
+      84,    34,     0,    35,     0,    36,    37,    38,    39,    40,
+      41,    42,     0,   153,    45,    46,    47,    48,   120,    49,
+      50,    51,    52,    53,   210,   190,   191,   192,    55,   211,
+     212,   213,     0,     0,   214,     0,     0,   198,   199,   200,
+     201,     0,    64,     0,    65,    66,    67,    68,    69,    70,
+     358,     0,     0,     0,    71,    72,    73,    74,    75,    76,
+       0,    77,   207,   208,   209,   210,     0,    78,     0,     0,
+     211,   212,   213,     0,     0,   214,     0,     0,     0,    79,
+      80,    81,     0,     0,     0,     0,    82,    83,     0,    34,
+      84,    35,     0,    36,    37,    38,    39,    40,    41,    42,
+       0,    44,    45,    46,    47,    48,     0,    49,    50,    51,
+      52,    53,     0,   190,   191,   192,    55,     0,     0,     0,
+       0,     0,     0,     0,   198,   199,   200,   201,     0,     0,
+      64,     0,    65,    66,    67,    68,    69,    70,   384,   190,
+     191,   192,    71,    72,    73,    74,    75,    76,     0,    77,
+     208,   209,   210,     0,     0,    78,     0,   211,   212,   213,
+       0,     0,   214,     0,   385,     0,     0,    79,    80,    81,
+       0,     0,     0,     0,    82,    83,     0,    34,    84,    35,
+       0,    36,    37,    38,    39,    40,    41,    42,   435,   159,
+      45,    46,    47,    48,     0,    49,    50,    51,    52,    53,
+       0,   190,   191,   192,    55,     0,     0,     0,     0,     0,
+       0,     6,     7,     8,     0,     9,    10,     0,    64,     0,
+      65,    66,    67,    68,    69,    70,   386,     0,     0,     0,
+      71,    72,    73,    74,    75,    76,     0,    77,     0,   216,
+       0,   217,  -167,    78,     0,     0,    11,     0,     0,     0,
+    -167,   184,   185,   186,   187,    79,    80,    81,   188,     0,
+     189,     0,    82,    83,     0,     0,    84,     0,     0,  -167,
+    -167,  -167,  -167,   190,   191,   192,  -167,    12,  -167,     0,
+       0,  -167,     0,     0,   190,   191,   192,     0,  -167,  -167,
+    -167,  -167,     0,     0,     0,     0,     0,     0,   393,     0,
+       0,     0,  -167,  -167,  -167,     0,  -167,  -167,  -167,  -167,
+    -167,  -167,  -167,  -167,  -167,  -167,  -167,     0,     0,     0,
+       0,  -167,  -167,  -167,     0,     0,  -167,  -167,    35,   115,
+      36,    37,    38,    39,    40,    41,    42,     0,    44,    45,
+      46,    47,    48,     0,    49,    50,    51,    52,    53,     0,
+       0,     0,     0,    55,     0,     0,     0,     0,     0,     0,
+     198,  -197,   200,   201,     0,     0,     0,    64,     0,    65,
+      66,    67,    68,    69,    70,     0,     0,     0,     0,    71,
+      72,    73,    74,    75,    76,     0,    77,   209,   210,     0,
+       0,     0,    78,   211,   212,   213,     0,     0,   214,     0,
+       0,     0,     0,     0,    79,    80,    81,     0,     0,     0,
+       0,    82,    83,     0,    35,    84,    36,    37,    38,    39,
+      40,    41,    42,   163,    44,    45,    46,    47,    48,     0,
+      49,    50,    51,    52,    53,     0,     0,     0,     0,    55,
+       0,     0,     0,     0,     0,     0,   198,   199,   200,   201,
+       0,     0,     0,    64,     0,    65,    66,    67,    68,    69,
+      70,     0,     0,     0,     0,    71,    72,    73,    74,    75,
+      76,     0,    77,   209,   210,     0,     0,     0,    78,   211,
+     212,   213,     0,     0,   214,     0,     0,     0,     0,     0,
+      79,    80,    81,     0,     0,     0,     0,    82,    83,     0,
+      35,    84,    36,    37,    38,    39,    40,    41,    42,     0,
       44,    45,    46,    47,    48,     0,    49,    50,    51,    52,
-     205,   206,     0,     0,    54,     0,   207,   208,   209,     0,
-       0,   210,     0,     0,   194,   195,   196,   197,    63,     0,
-      64,    65,    66,    67,    68,    69,   186,   187,   188,     0,
-      70,    71,    72,    73,    74,    75,     0,    76,   202,   203,
-     204,   205,   206,    77,     0,     0,     0,   207,   208,   209,
-       0,   377,   210,     0,     0,    78,    79,    80,     0,     0,
-       0,     0,    81,    82,     0,   -50,    83,    34,     0,    35,
-       0,    36,    37,    38,    39,    40,    41,    42,     0,   149,
-      45,    46,    47,    48,   119,    49,    50,    51,    52,   206,
-     186,   187,   188,    54,   207,   208,   209,     0,     0,   210,
-       0,     0,   194,   195,   196,   197,     0,    63,     0,    64,
-      65,    66,    67,    68,    69,   378,     0,     0,     0,    70,
-      71,    72,    73,    74,    75,     0,    76,   203,   204,   205,
-     206,     0,    77,     0,     0,   207,   208,   209,     0,     0,
-     210,     0,     0,     0,    78,    79,    80,     0,     0,     0,
-       0,    81,    82,     0,    34,    83,    35,     0,    36,    37,
+      53,     0,     0,     0,     0,    55,     0,     0,     0,     0,
+       0,     0,  -197,     0,   200,   201,     0,     0,     0,    64,
+       0,    65,    66,    67,    68,    69,    70,     0,     0,     0,
+       0,    71,    72,    73,    74,    75,    76,     0,    77,   209,
+     210,     0,     0,     0,    78,   211,   212,   213,     0,     0,
+     214,     0,     0,     0,     0,     0,    79,    80,    81,     0,
+       0,     0,     0,    82,    83,     0,   179,    84,    35,     0,
+      36,    37,    38,    39,    40,    41,    42,     0,    44,    45,
+      46,    47,    48,     0,    49,    50,    51,    52,    53,     0,
+       0,     0,     0,    55,     0,     0,     0,     0,     0,     0,
+       0,     0,   200,   201,     0,     0,     0,    64,     0,    65,
+      66,    67,    68,    69,    70,     0,     0,     0,     0,    71,
+      72,    73,    74,    75,    76,     0,    77,   209,   210,     0,
+       0,     0,    78,   211,   212,   213,     0,     0,   214,     0,
+       0,     0,     0,     0,    79,    80,    81,     0,     0,     0,
+       0,    82,    83,     0,   247,    84,    35,     0,    36,    37,
       38,    39,    40,    41,    42,     0,    44,    45,    46,    47,
-      48,     0,    49,    50,    51,    52,     0,   186,   187,   188,
-      54,   207,   208,   209,     0,     0,   210,     0,   194,   195,
-     196,   197,     0,     0,    63,     0,    64,    65,    66,    67,
-      68,    69,   385,     0,     0,     0,    70,    71,    72,    73,
-      74,    75,     0,    76,   204,   205,   206,     0,     0,    77,
-       0,   207,   208,   209,     0,     0,   210,     0,     0,     0,
-       0,    78,    79,    80,     0,     0,     0,     0,    81,    82,
-       0,    34,    83,    35,     0,    36,    37,    38,    39,    40,
-      41,    42,     0,   155,    45,    46,    47,    48,     0,    49,
-      50,    51,    52,     0,     0,     0,     0,    54,     0,     0,
+      48,     0,    49,    50,    51,    52,    53,     0,     0,     0,
+       0,    55,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    64,     0,    65,    66,    67,
+      68,    69,    70,     0,     0,     0,     0,    71,    72,    73,
+      74,    75,    76,     0,    77,     0,     0,     0,     0,     0,
+      78,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    79,    80,    81,     0,     0,     0,     0,    82,
+      83,     0,   258,    84,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,     0,    44,    45,    46,    47,    48,     0,
+      49,    50,    51,    52,    53,     0,     0,     0,     0,    55,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    63,     0,    64,    65,    66,    67,    68,    69,     0,
-       0,     0,     0,    70,    71,    72,    73,    74,    75,     0,
-      76,   212,     0,   213,  -165,     0,    77,     0,     0,     0,
-       0,     0,  -165,     0,     0,     0,     0,     0,    78,    79,
-      80,     0,   196,   197,     0,    81,    82,     0,     0,    83,
-    -165,  -165,  -165,  -165,     0,     0,     0,  -165,     0,  -165,
-       0,     0,  -165,     0,     0,     0,     0,   205,   206,  -165,
-    -165,  -165,  -165,   207,   208,   209,     0,     0,   210,     0,
-       0,     0,     0,  -165,  -165,  -165,     0,  -165,  -165,  -165,
-    -165,  -165,  -165,  -165,  -165,  -165,  -165,  -165,     0,     0,
-       0,     0,  -165,  -165,  -165,     0,     0,  -165,  -165,    35,
-     114,    36,    37,    38,    39,    40,    41,    42,     0,    44,
-      45,    46,    47,    48,     0,    49,    50,    51,    52,     0,
-       0,     0,     0,    54,     0,     0,     0,     0,     0,     0,
-     194,  -195,   196,   197,     0,     0,     0,    63,     0,    64,
-      65,    66,    67,    68,    69,     0,     0,     0,     0,    70,
-      71,    72,    73,    74,    75,     0,    76,   205,   206,     0,
-       0,     0,    77,   207,   208,   209,     0,     0,   210,     0,
-       0,     0,     0,     0,    78,    79,    80,   194,   195,   196,
-     197,    81,    82,     0,    35,    83,    36,    37,    38,    39,
-      40,    41,    42,   159,    44,    45,    46,    47,    48,     0,
-      49,    50,    51,    52,   205,   206,     0,     0,    54,     0,
-     207,   208,   209,     0,     0,   210,     0,     0,     0,     0,
-       0,     0,    63,     0,    64,    65,    66,    67,    68,    69,
-       0,     0,     0,     0,    70,    71,    72,    73,    74,    75,
-       0,    76,     0,     0,     0,     0,     0,    77,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    78,
-      79,    80,     0,     0,     0,     0,    81,    82,     0,    35,
-      83,    36,    37,    38,    39,    40,    41,    42,     0,    44,
-      45,    46,    47,    48,     0,    49,    50,    51,    52,     0,
-       0,     0,     0,    54,   180,   181,   182,   183,     0,     0,
-       0,   184,     0,   185,     0,     0,     0,    63,     0,    64,
-      65,    66,    67,    68,    69,     0,     0,     0,     0,    70,
-      71,    72,    73,    74,    75,     0,    76,   186,   187,   188,
-       0,     0,    77,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    78,    79,    80,     0,     0,     0,
-       0,    81,    82,     0,   175,    83,    35,     0,    36,    37,
-      38,    39,    40,    41,    42,     0,    44,    45,    46,    47,
-      48,     0,    49,    50,    51,    52,     0,     0,     0,     0,
-      54,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    63,     0,    64,    65,    66,    67,
-      68,    69,     0,     0,     0,     0,    70,    71,    72,    73,
-      74,    75,     0,    76,     0,     0,     0,     0,     0,    77,
+       0,     0,     0,    64,     0,    65,    66,    67,    68,    69,
+      70,     0,     0,     0,     0,    71,    72,    73,    74,    75,
+      76,     0,    77,     0,     0,     0,     0,     0,    78,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    78,    79,    80,     0,     0,     0,     0,    81,    82,
-       0,   241,    83,    35,     0,    36,    37,    38,    39,    40,
-      41,    42,     0,    44,    45,    46,    47,    48,     0,    49,
-      50,    51,    52,     0,     0,     0,     0,    54,     0,     0,
+      79,    80,    81,     0,     0,     0,     0,    82,    83,     0,
+     278,    84,    35,     0,    36,    37,    38,    39,    40,    41,
+      42,     0,    44,    45,    46,    47,    48,     0,    49,    50,
+      51,    52,    53,     0,     0,     0,     0,    55,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    63,     0,    64,    65,    66,    67,    68,    69,     0,
-       0,     0,     0,    70,    71,    72,    73,    74,    75,     0,
-      76,     0,     0,     0,     0,     0,    77,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    78,    79,
-      80,     0,     0,     0,     0,    81,    82,     0,   252,    83,
+       0,    64,     0,    65,    66,    67,    68,    69,    70,     0,
+       0,     0,     0,    71,    72,    73,    74,    75,    76,     0,
+      77,     0,     0,     0,     0,     0,    78,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    79,    80,
+      81,     0,     0,     0,     0,    82,    83,     0,   301,    84,
       35,     0,    36,    37,    38,    39,    40,    41,    42,     0,
       44,    45,    46,    47,    48,     0,    49,    50,    51,    52,
-       0,     0,     0,     0,    54,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    63,     0,
-      64,    65,    66,    67,    68,    69,     0,     0,     0,     0,
-      70,    71,    72,    73,    74,    75,     0,    76,     0,     0,
-       0,     0,     0,    77,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    78,    79,    80,     0,     0,
-       0,     0,    81,    82,     0,   272,    83,    35,     0,    36,
-      37,    38,    39,    40,    41,    42,     0,    44,    45,    46,
-      47,    48,     0,    49,    50,    51,    52,     0,     0,     0,
-       0,    54,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    63,     0,    64,    65,    66,
-      67,    68,    69,     0,     0,     0,     0,    70,    71,    72,
-      73,    74,    75,     0,    76,     0,     0,     0,     0,     0,
-      77,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    78,    79,    80,     0,     0,     0,     0,    81,
-      82,     0,   295,    83,    35,     0,    36,    37,    38,    39,
-      40,    41,    42,     0,    44,    45,    46,    47,    48,     0,
-      49,    50,    51,    52,     0,     0,     0,     0,    54,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    63,     0,    64,    65,    66,    67,    68,    69,
-       0,     0,     0,     0,    70,    71,    72,    73,    74,    75,
-       0,    76,     0,     0,     0,     0,     0,    77,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    78,
-      79,    80,     0,     0,     0,     0,    81,    82,     0,   332,
-      83,    35,     0,    36,    37,    38,    39,    40,    41,    42,
-       0,    44,    45,    46,    47,    48,     0,    49,    50,    51,
-      52,     0,     0,     0,     0,    54,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    63,
-       0,    64,    65,    66,    67,    68,    69,     0,     0,     0,
-       0,    70,    71,    72,    73,    74,    75,     0,    76,     0,
-       0,     0,     0,     0,    77,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    78,    79,    80,     0,
-       0,     0,     0,    81,    82,     0,   334,    83,    35,     0,
+      53,     0,     0,     0,     0,    55,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    64,
+       0,    65,    66,    67,    68,    69,    70,     0,     0,     0,
+       0,    71,    72,    73,    74,    75,    76,     0,    77,     0,
+       0,     0,     0,     0,    78,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    79,    80,    81,     0,
+       0,     0,     0,    82,    83,     0,   340,    84,    35,     0,
       36,    37,    38,    39,    40,    41,    42,     0,    44,    45,
-      46,    47,    48,     0,    49,    50,    51,    52,     0,     0,
-       0,     0,    54,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    63,     0,    64,    65,
-      66,    67,    68,    69,     0,     0,     0,     0,    70,    71,
-      72,    73,    74,    75,     0,    76,     0,     0,     0,     0,
-       0,    77,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    78,    79,    80,     0,     0,     0,     0,
-      81,    82,     0,   347,    83,    35,     0,    36,    37,    38,
-      39,    40,    41,    42,     0,    44,    45,    46,    47,    48,
-       0,    49,    50,    51,    52,     0,     0,     0,     0,    54,
+      46,    47,    48,     0,    49,    50,    51,    52,    53,     0,
+       0,     0,     0,    55,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    64,     0,    65,
+      66,    67,    68,    69,    70,     0,     0,     0,     0,    71,
+      72,    73,    74,    75,    76,     0,    77,     0,     0,     0,
+       0,     0,    78,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    79,    80,    81,     0,     0,     0,
+       0,    82,    83,     0,   342,    84,    35,     0,    36,    37,
+      38,    39,    40,    41,    42,     0,    44,    45,    46,    47,
+      48,     0,    49,    50,    51,    52,    53,     0,     0,     0,
+       0,    55,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    64,     0,    65,    66,    67,
+      68,    69,    70,     0,     0,     0,     0,    71,    72,    73,
+      74,    75,    76,     0,    77,     0,     0,     0,     0,     0,
+      78,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    79,    80,    81,     0,     0,     0,     0,    82,
+      83,     0,   355,    84,    35,     0,    36,    37,    38,    39,
+      40,    41,    42,     0,    44,    45,    46,    47,    48,     0,
+      49,    50,    51,    52,    53,     0,     0,     0,     0,    55,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    63,     0,    64,    65,    66,    67,    68,
-      69,     0,     0,     0,     0,    70,    71,    72,    73,    74,
-      75,     0,    76,     0,     0,     0,  -194,     0,    77,     0,
-       0,     0,     0,     0,  -194,     0,     0,     0,     0,     0,
-      78,    79,    80,     0,     0,     0,     0,    81,    82,     0,
-       0,    83,  -194,  -194,  -194,  -194,     0,     0,     0,  -194,
-       0,  -194,     0,     0,  -194,     0,     0,     0,     0,     0,
-       0,  -194,  -194,  -194,  -194,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,  -194,  -194,  -194,     0,  -194,
-    -194,  -194,  -194,  -194,  -194,  -194,  -194,  -194,  -194,  -194,
-       0,   396,     0,   398,  -194,  -194,  -194,   402,     0,  -194,
-    -194,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   407,   408,     0,   193,     0,     0,
-       0,     0,   417,   418,   194,   195,   196,   197,     0,     0,
-       0,     0,   422,     0,     0,     0,   424,     0,     0,     0,
-       0,     0,     0,   198,   199,   344,   200,   201,   202,   203,
-     204,   205,   206,   433,   434,     0,   193,   207,   208,   209,
-       0,     0,   210,   194,   195,   196,   197,     0,     0,     0,
+       0,     0,     0,    64,     0,    65,    66,    67,    68,    69,
+      70,     0,     0,     0,     0,    71,    72,    73,    74,    75,
+      76,     0,    77,     0,     0,  -196,     0,     0,    78,     0,
+       0,     0,     0,  -196,     0,     0,     0,     0,     0,     0,
+      79,    80,    81,     0,     0,     0,     0,    82,    83,     0,
+       0,    84,  -196,  -196,  -196,  -196,     0,     0,     0,  -196,
+       0,  -196,     0,     0,  -196,     0,     0,     0,     0,     0,
+       0,  -196,  -196,  -196,  -196,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,  -196,  -196,  -196,     0,  -196,
+    -196,  -196,  -196,  -196,  -196,  -196,  -196,  -196,  -196,  -196,
+       0,   404,     0,   406,  -196,  -196,  -196,   410,     0,  -196,
+    -196,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   415,   416,     0,   197,     0,     0,
+       0,     0,   425,   426,   198,   199,   200,   201,     0,     0,
+       0,     0,   430,     0,     0,     0,   432,     0,     0,     0,
+       0,     0,     0,   202,   203,   352,   204,   205,   206,   207,
+     208,   209,   210,   441,   442,     0,   197,   211,   212,   213,
+       0,     0,   214,   198,   199,   200,   201,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   198,   199,     0,   200,   201,   202,   203,   204,
-     205,   206,     0,     0,     0,   193,   207,   208,   209,     0,
-       0,   210,   194,   195,   196,   197,     0,     0,     0,     0,
+       0,     0,   202,   203,     0,   204,   205,   206,   207,   208,
+     209,   210,     0,     0,     0,   197,   211,   212,   213,     0,
+       0,   214,   198,   199,   200,   201,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   199,     0,   200,   201,   202,   203,   204,   205,
-     206,     0,     0,     0,  -195,   207,   208,   209,     0,     0,
-     210,   194,   195,   196,   197,     0,     0,     0,     0,     0,
+       0,     0,   203,     0,   204,   205,   206,   207,   208,   209,
+     210,     0,     0,     0,  -197,   211,   212,   213,     0,     0,
+     214,   198,   199,   200,   201,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   200,   201,   202,   203,   204,   205,   206,
-       0,     0,     0,     0,   207,   208,   209,     0,     0,   210
+       0,     0,     0,   204,   205,   206,   207,   208,   209,   210,
+       0,     0,     0,     0,   211,   212,   213,     0,     0,   214
 };
 
 static const yytype_int16 yycheck[] =
 {
-      17,   113,   127,   227,   367,    69,   396,    38,    39,    40,
-      41,    42,    17,    77,    45,    46,    11,    17,    35,   236,
-       8,    71,   239,     5,     5,     7,     7,    17,    59,   112,
-      11,    11,    12,    13,     6,     8,   161,    18,    69,    70,
-      71,     8,    92,   433,    75,    39,    40,    41,    42,   132,
-       0,    45,    46,   416,    17,    72,    28,    29,    30,    17,
-      32,    33,    62,   127,   398,   129,    83,    62,    68,    93,
-       5,    71,     7,   407,   408,    69,    70,   223,    93,    67,
-      68,    69,    93,   417,   230,     5,    93,     7,     0,   153,
-     424,    63,    36,    37,    67,    68,    69,   161,    93,     5,
-      67,    68,    69,     5,    87,    88,    50,   107,    91,   326,
-     327,    93,    93,    93,    16,   146,    28,    29,    30,    63,
-      32,    33,    94,    93,    68,   349,    17,    71,   145,   146,
-      74,   131,    76,     6,    78,    79,    80,    81,    82,     5,
-     133,   134,   135,   136,   137,   138,   163,   140,   141,    16,
-      16,    63,   146,   370,    93,    28,    29,    30,    93,    32,
-      33,     3,     4,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,    93,   190,   191,   192,     5,   177,     7,   210,
-     305,   232,    94,   234,    93,   310,    93,    67,    68,    69,
-      63,    67,    68,    69,   211,   212,   213,   214,   215,   216,
-      67,    68,    69,    93,   235,    40,   423,    67,    68,    69,
-     227,     6,    92,    16,   231,   232,    92,   234,     8,   236,
-      71,    94,     8,    38,    39,     8,    20,   220,   245,     8,
-     247,   248,    92,    28,    29,    30,    93,    32,    33,   256,
-      16,   305,    17,    16,   237,   189,   310,     5,   360,   193,
-     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,   207,    16,    28,    29,    30,    63,    32,
-      33,    93,   289,   290,    16,   292,    93,    67,    68,    69,
-      92,    67,    68,    69,    67,    68,    69,    93,    67,    68,
-      69,    67,    68,    69,    67,    68,    69,   409,     6,    94,
-      63,    10,    11,   303,    65,     7,   306,    67,    68,    69,
-      16,   311,    67,    68,    69,    67,    68,    69,     5,    65,
-      17,    11,    92,   340,    11,    67,    68,    69,     6,    20,
-      17,    94,   349,     7,     1,    22,    69,    92,     5,    93,
-       7,    20,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,   372,    23,    24,    25,    26,
-      27,    67,    68,    69,    31,    92,    92,    34,    35,    36,
-      37,    92,    92,    55,    41,    42,    43,    44,    45,    92,
-      47,    48,    49,    50,    51,    52,    67,    68,    69,    93,
-      57,    58,    59,    60,    61,    62,    92,    64,    16,    81,
-     344,     6,     6,    70,    86,    87,    88,    92,   425,    91,
-       6,    92,    92,     6,    16,    82,    83,    84,     5,     1,
-      92,     6,    89,    90,    92,     7,    93,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      92,    23,    24,    25,    26,    16,    67,    68,    69,    31,
-      93,    34,    35,    36,    37,    92,    92,     2,    41,    17,
-      43,    55,    56,    45,   372,    47,    48,    49,    50,    51,
-      52,    92,   425,     2,    54,    57,    58,    59,    60,    61,
-      62,    32,    64,   306,    67,    68,    69,    81,    70,    75,
-      -1,    75,    86,    87,    88,    -1,    -1,    91,    -1,    -1,
-      82,    83,    84,    53,     1,    55,    56,    89,    90,    92,
-       7,    93,     9,    10,    11,    12,    13,    14,    15,    -1,
-      17,    18,    19,    20,    21,    -1,    23,    24,    25,    26,
-      80,    81,    -1,    -1,    31,    -1,    86,    87,    88,    -1,
-      -1,    91,    -1,    -1,    53,    54,    55,    56,    45,    -1,
-      47,    48,    49,    50,    51,    52,    67,    68,    69,    -1,
-      57,    58,    59,    60,    61,    62,    -1,    64,    77,    78,
-      79,    80,    81,    70,    -1,    -1,    -1,    86,    87,    88,
-      -1,    92,    91,    -1,    -1,    82,    83,    84,    -1,    -1,
-      -1,    -1,    89,    90,    -1,    92,    93,     5,    -1,     7,
-      -1,     9,    10,    11,    12,    13,    14,    15,    -1,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    81,
-      67,    68,    69,    31,    86,    87,    88,    -1,    -1,    91,
-      -1,    -1,    53,    54,    55,    56,    -1,    45,    -1,    47,
-      48,    49,    50,    51,    52,    92,    -1,    -1,    -1,    57,
-      58,    59,    60,    61,    62,    -1,    64,    78,    79,    80,
-      81,    -1,    70,    -1,    -1,    86,    87,    88,    -1,    -1,
-      91,    -1,    -1,    -1,    82,    83,    84,    -1,    -1,    -1,
-      -1,    89,    90,    -1,     5,    93,     7,    -1,     9,    10,
-      11,    12,    13,    14,    15,    -1,    17,    18,    19,    20,
-      21,    -1,    23,    24,    25,    26,    -1,    67,    68,    69,
-      31,    86,    87,    88,    -1,    -1,    91,    -1,    53,    54,
-      55,    56,    -1,    -1,    45,    -1,    47,    48,    49,    50,
-      51,    52,    92,    -1,    -1,    -1,    57,    58,    59,    60,
-      61,    62,    -1,    64,    79,    80,    81,    -1,    -1,    70,
-      -1,    86,    87,    88,    -1,    -1,    91,    -1,    -1,    -1,
-      -1,    82,    83,    84,    -1,    -1,    -1,    -1,    89,    90,
-      -1,     5,    93,     7,    -1,     9,    10,    11,    12,    13,
+      17,   114,    57,    58,    59,    60,    61,    62,   375,   231,
+      11,    12,    13,    38,    39,    40,    41,    42,    35,   242,
+      45,    46,   245,   128,    16,   404,     5,    17,     7,     0,
+     227,     5,    11,     7,    23,    60,    17,    92,   235,    18,
+      72,     6,    70,    94,    99,    70,    71,    72,    17,    23,
+      78,    76,    39,    40,    41,    42,    73,   424,    45,    46,
+     165,    93,   441,    17,    29,    30,    31,    84,    33,    34,
+     113,    17,     5,    63,     7,    11,    68,    69,    70,    69,
+       5,     7,    72,    70,    71,     5,    11,    23,   143,    94,
+      23,   134,    17,    94,    94,    36,    37,    22,     5,    64,
+     128,     5,   130,     7,   159,    94,     5,   162,    94,    16,
+      51,   334,   335,    41,   131,    94,    17,    16,   108,     5,
+      94,     7,   238,    64,   240,   150,    16,    63,    69,   157,
+      95,    72,   149,   150,    75,   357,    77,   165,    79,    80,
+      81,    82,    83,   133,   137,   138,   139,   140,   141,   142,
+     167,   144,   145,     0,    72,   378,     5,    16,    94,     3,
+       4,    94,    20,   150,    10,    11,     8,   184,   185,   186,
+     187,   188,   189,   190,   191,   192,    17,   194,   195,   196,
+       8,    94,    29,    30,    31,    93,    33,    34,     6,   214,
+      66,   181,     7,    68,    69,    70,    39,    40,   215,   216,
+     217,   218,   219,   220,    66,    17,   311,    94,   431,    68,
+      69,    70,   317,     8,   231,    11,   241,    64,    93,    93,
+     237,   238,     6,   240,    93,   242,    68,    69,    70,    20,
+       7,   224,    70,    16,   251,    20,   253,   254,     8,    93,
+      68,    69,    70,    93,   299,   262,     6,    16,    95,    16,
+     243,     5,   193,     8,    93,   368,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,    93,   327,    68,    69,    70,     8,    93,   295,   296,
+      16,   298,    93,   311,     6,    68,    69,    70,     6,   317,
+      29,    30,    31,     6,    33,    34,     6,    16,    68,    69,
+      70,    68,    69,    70,   417,    93,    93,    29,    30,    31,
+       6,    33,    34,    68,    69,    70,    87,    88,    89,   309,
+      93,    92,   312,    88,    89,    64,    16,    92,   318,     8,
+      93,   348,    68,    69,    70,     1,    68,    69,    70,     5,
+     357,     7,    64,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    95,    23,    24,    25,
+      26,    27,    28,   380,   419,    93,    32,    93,     2,    35,
+      36,    37,    38,    95,    17,   433,    42,    43,    44,    45,
+      46,   380,    48,    49,    50,    51,    52,    53,     8,    68,
+      69,    70,    58,    59,    60,    61,    62,    63,     2,    65,
+      55,    68,    69,    70,    32,    71,    16,    68,    69,    70,
+     312,   352,    76,    76,    -1,    -1,   433,    83,    84,    85,
+      -1,     1,    -1,    -1,    90,    91,    93,     7,    94,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    -1,    23,    24,    25,    26,    27,    68,    69,
+      70,    -1,    32,    -1,    35,    36,    37,    38,    68,    69,
+      70,    42,    -1,    44,    56,    57,    46,   406,    48,    49,
+      50,    51,    52,    53,    -1,    -1,   415,   416,    58,    59,
+      60,    61,    62,    63,    -1,    65,   425,    68,    69,    70,
+      82,    71,    -1,   432,    -1,    87,    88,    89,    -1,    -1,
+      92,    -1,    -1,    83,    84,    85,    -1,     1,    56,    -1,
+      90,    91,    93,     7,    94,     9,    10,    11,    12,    13,
       14,    15,    -1,    17,    18,    19,    20,    21,    -1,    23,
-      24,    25,    26,    -1,    -1,    -1,    -1,    31,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    45,    -1,    47,    48,    49,    50,    51,    52,    -1,
-      -1,    -1,    -1,    57,    58,    59,    60,    61,    62,    -1,
-      64,     5,    -1,     7,     8,    -1,    70,    -1,    -1,    -1,
-      -1,    -1,    16,    -1,    -1,    -1,    -1,    -1,    82,    83,
-      84,    -1,    55,    56,    -1,    89,    90,    -1,    -1,    93,
-      34,    35,    36,    37,    -1,    -1,    -1,    41,    -1,    43,
-      -1,    -1,    46,    -1,    -1,    -1,    -1,    80,    81,    53,
-      54,    55,    56,    86,    87,    88,    -1,    -1,    91,    -1,
-      -1,    -1,    -1,    67,    68,    69,    -1,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    -1,    -1,
-      -1,    -1,    86,    87,    88,    -1,    -1,    91,    92,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    -1,    17,
-      18,    19,    20,    21,    -1,    23,    24,    25,    26,    -1,
-      -1,    -1,    -1,    31,    -1,    -1,    -1,    -1,    -1,    -1,
-      53,    54,    55,    56,    -1,    -1,    -1,    45,    -1,    47,
-      48,    49,    50,    51,    52,    -1,    -1,    -1,    -1,    57,
-      58,    59,    60,    61,    62,    -1,    64,    80,    81,    -1,
-      -1,    -1,    70,    86,    87,    88,    -1,    -1,    91,    -1,
-      -1,    -1,    -1,    -1,    82,    83,    84,    53,    54,    55,
-      56,    89,    90,    -1,     7,    93,     9,    10,    11,    12,
+      24,    25,    26,    27,    82,    68,    69,    70,    32,    87,
+      88,    89,    -1,    -1,    92,    68,    69,    70,    54,    55,
+      56,    57,    46,    -1,    48,    49,    50,    51,    52,    53,
+      93,    -1,    -1,    -1,    58,    59,    60,    61,    62,    63,
+      93,    65,    78,    79,    80,    81,    82,    71,    -1,    -1,
+      -1,    87,    88,    89,    -1,    -1,    92,    -1,    -1,    83,
+      84,    85,    -1,    -1,    -1,    -1,    90,    91,    -1,    93,
+      94,     5,    -1,     7,    -1,     9,    10,    11,    12,    13,
+      14,    15,    -1,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    82,    68,    69,    70,    32,    87,
+      88,    89,    -1,    -1,    92,    -1,    -1,    54,    55,    56,
+      57,    -1,    46,    -1,    48,    49,    50,    51,    52,    53,
+      93,    -1,    -1,    -1,    58,    59,    60,    61,    62,    63,
+      -1,    65,    79,    80,    81,    82,    -1,    71,    -1,    -1,
+      87,    88,    89,    -1,    -1,    92,    -1,    -1,    -1,    83,
+      84,    85,    -1,    -1,    -1,    -1,    90,    91,    -1,     5,
+      94,     7,    -1,     9,    10,    11,    12,    13,    14,    15,
+      -1,    17,    18,    19,    20,    21,    -1,    23,    24,    25,
+      26,    27,    -1,    68,    69,    70,    32,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    54,    55,    56,    57,    -1,    -1,
+      46,    -1,    48,    49,    50,    51,    52,    53,    93,    68,
+      69,    70,    58,    59,    60,    61,    62,    63,    -1,    65,
+      80,    81,    82,    -1,    -1,    71,    -1,    87,    88,    89,
+      -1,    -1,    92,    -1,    93,    -1,    -1,    83,    84,    85,
+      -1,    -1,    -1,    -1,    90,    91,    -1,     5,    94,     7,
+      -1,     9,    10,    11,    12,    13,    14,    15,     6,    17,
+      18,    19,    20,    21,    -1,    23,    24,    25,    26,    27,
+      -1,    68,    69,    70,    32,    -1,    -1,    -1,    -1,    -1,
+      -1,    29,    30,    31,    -1,    33,    34,    -1,    46,    -1,
+      48,    49,    50,    51,    52,    53,    93,    -1,    -1,    -1,
+      58,    59,    60,    61,    62,    63,    -1,    65,    -1,     5,
+      -1,     7,     8,    71,    -1,    -1,    64,    -1,    -1,    -1,
+      16,    35,    36,    37,    38,    83,    84,    85,    42,    -1,
+      44,    -1,    90,    91,    -1,    -1,    94,    -1,    -1,    35,
+      36,    37,    38,    68,    69,    70,    42,    95,    44,    -1,
+      -1,    47,    -1,    -1,    68,    69,    70,    -1,    54,    55,
+      56,    57,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,
+      -1,    -1,    68,    69,    70,    -1,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    -1,
+      -1,    87,    88,    89,    -1,    -1,    92,    93,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    -1,    17,    18,
+      19,    20,    21,    -1,    23,    24,    25,    26,    27,    -1,
+      -1,    -1,    -1,    32,    -1,    -1,    -1,    -1,    -1,    -1,
+      54,    55,    56,    57,    -1,    -1,    -1,    46,    -1,    48,
+      49,    50,    51,    52,    53,    -1,    -1,    -1,    -1,    58,
+      59,    60,    61,    62,    63,    -1,    65,    81,    82,    -1,
+      -1,    -1,    71,    87,    88,    89,    -1,    -1,    92,    -1,
+      -1,    -1,    -1,    -1,    83,    84,    85,    -1,    -1,    -1,
+      -1,    90,    91,    -1,     7,    94,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    -1,
-      23,    24,    25,    26,    80,    81,    -1,    -1,    31,    -1,
-      86,    87,    88,    -1,    -1,    91,    -1,    -1,    -1,    -1,
-      -1,    -1,    45,    -1,    47,    48,    49,    50,    51,    52,
-      -1,    -1,    -1,    -1,    57,    58,    59,    60,    61,    62,
-      -1,    64,    -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,
-      83,    84,    -1,    -1,    -1,    -1,    89,    90,    -1,     7,
-      93,     9,    10,    11,    12,    13,    14,    15,    -1,    17,
-      18,    19,    20,    21,    -1,    23,    24,    25,    26,    -1,
-      -1,    -1,    -1,    31,    34,    35,    36,    37,    -1,    -1,
-      -1,    41,    -1,    43,    -1,    -1,    -1,    45,    -1,    47,
-      48,    49,    50,    51,    52,    -1,    -1,    -1,    -1,    57,
-      58,    59,    60,    61,    62,    -1,    64,    67,    68,    69,
-      -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    82,    83,    84,    -1,    -1,    -1,
-      -1,    89,    90,    -1,    92,    93,     7,    -1,     9,    10,
+      23,    24,    25,    26,    27,    -1,    -1,    -1,    -1,    32,
+      -1,    -1,    -1,    -1,    -1,    -1,    54,    55,    56,    57,
+      -1,    -1,    -1,    46,    -1,    48,    49,    50,    51,    52,
+      53,    -1,    -1,    -1,    -1,    58,    59,    60,    61,    62,
+      63,    -1,    65,    81,    82,    -1,    -1,    -1,    71,    87,
+      88,    89,    -1,    -1,    92,    -1,    -1,    -1,    -1,    -1,
+      83,    84,    85,    -1,    -1,    -1,    -1,    90,    91,    -1,
+       7,    94,     9,    10,    11,    12,    13,    14,    15,    -1,
+      17,    18,    19,    20,    21,    -1,    23,    24,    25,    26,
+      27,    -1,    -1,    -1,    -1,    32,    -1,    -1,    -1,    -1,
+      -1,    -1,    54,    -1,    56,    57,    -1,    -1,    -1,    46,
+      -1,    48,    49,    50,    51,    52,    53,    -1,    -1,    -1,
+      -1,    58,    59,    60,    61,    62,    63,    -1,    65,    81,
+      82,    -1,    -1,    -1,    71,    87,    88,    89,    -1,    -1,
+      92,    -1,    -1,    -1,    -1,    -1,    83,    84,    85,    -1,
+      -1,    -1,    -1,    90,    91,    -1,    93,    94,     7,    -1,
+       9,    10,    11,    12,    13,    14,    15,    -1,    17,    18,
+      19,    20,    21,    -1,    23,    24,    25,    26,    27,    -1,
+      -1,    -1,    -1,    32,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    56,    57,    -1,    -1,    -1,    46,    -1,    48,
+      49,    50,    51,    52,    53,    -1,    -1,    -1,    -1,    58,
+      59,    60,    61,    62,    63,    -1,    65,    81,    82,    -1,
+      -1,    -1,    71,    87,    88,    89,    -1,    -1,    92,    -1,
+      -1,    -1,    -1,    -1,    83,    84,    85,    -1,    -1,    -1,
+      -1,    90,    91,    -1,    93,    94,     7,    -1,     9,    10,
       11,    12,    13,    14,    15,    -1,    17,    18,    19,    20,
-      21,    -1,    23,    24,    25,    26,    -1,    -1,    -1,    -1,
-      31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    45,    -1,    47,    48,    49,    50,
-      51,    52,    -1,    -1,    -1,    -1,    57,    58,    59,    60,
-      61,    62,    -1,    64,    -1,    -1,    -1,    -1,    -1,    70,
+      21,    -1,    23,    24,    25,    26,    27,    -1,    -1,    -1,
+      -1,    32,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    46,    -1,    48,    49,    50,
+      51,    52,    53,    -1,    -1,    -1,    -1,    58,    59,    60,
+      61,    62,    63,    -1,    65,    -1,    -1,    -1,    -1,    -1,
+      71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    83,    84,    85,    -1,    -1,    -1,    -1,    90,
+      91,    -1,    93,    94,     7,    -1,     9,    10,    11,    12,
+      13,    14,    15,    -1,    17,    18,    19,    20,    21,    -1,
+      23,    24,    25,    26,    27,    -1,    -1,    -1,    -1,    32,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    82,    83,    84,    -1,    -1,    -1,    -1,    89,    90,
-      -1,    92,    93,     7,    -1,     9,    10,    11,    12,    13,
-      14,    15,    -1,    17,    18,    19,    20,    21,    -1,    23,
-      24,    25,    26,    -1,    -1,    -1,    -1,    31,    -1,    -1,
+      -1,    -1,    -1,    46,    -1,    48,    49,    50,    51,    52,
+      53,    -1,    -1,    -1,    -1,    58,    59,    60,    61,    62,
+      63,    -1,    65,    -1,    -1,    -1,    -1,    -1,    71,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    45,    -1,    47,    48,    49,    50,    51,    52,    -1,
-      -1,    -1,    -1,    57,    58,    59,    60,    61,    62,    -1,
-      64,    -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,    83,
-      84,    -1,    -1,    -1,    -1,    89,    90,    -1,    92,    93,
+      83,    84,    85,    -1,    -1,    -1,    -1,    90,    91,    -1,
+      93,    94,     7,    -1,     9,    10,    11,    12,    13,    14,
+      15,    -1,    17,    18,    19,    20,    21,    -1,    23,    24,
+      25,    26,    27,    -1,    -1,    -1,    -1,    32,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    46,    -1,    48,    49,    50,    51,    52,    53,    -1,
+      -1,    -1,    -1,    58,    59,    60,    61,    62,    63,    -1,
+      65,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    83,    84,
+      85,    -1,    -1,    -1,    -1,    90,    91,    -1,    93,    94,
        7,    -1,     9,    10,    11,    12,    13,    14,    15,    -1,
       17,    18,    19,    20,    21,    -1,    23,    24,    25,    26,
-      -1,    -1,    -1,    -1,    31,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,    -1,
-      47,    48,    49,    50,    51,    52,    -1,    -1,    -1,    -1,
-      57,    58,    59,    60,    61,    62,    -1,    64,    -1,    -1,
-      -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    82,    83,    84,    -1,    -1,
-      -1,    -1,    89,    90,    -1,    92,    93,     7,    -1,     9,
-      10,    11,    12,    13,    14,    15,    -1,    17,    18,    19,
-      20,    21,    -1,    23,    24,    25,    26,    -1,    -1,    -1,
-      -1,    31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    45,    -1,    47,    48,    49,
-      50,    51,    52,    -1,    -1,    -1,    -1,    57,    58,    59,
-      60,    61,    62,    -1,    64,    -1,    -1,    -1,    -1,    -1,
-      70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    82,    83,    84,    -1,    -1,    -1,    -1,    89,
-      90,    -1,    92,    93,     7,    -1,     9,    10,    11,    12,
-      13,    14,    15,    -1,    17,    18,    19,    20,    21,    -1,
-      23,    24,    25,    26,    -1,    -1,    -1,    -1,    31,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    45,    -1,    47,    48,    49,    50,    51,    52,
-      -1,    -1,    -1,    -1,    57,    58,    59,    60,    61,    62,
-      -1,    64,    -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,
-      83,    84,    -1,    -1,    -1,    -1,    89,    90,    -1,    92,
-      93,     7,    -1,     9,    10,    11,    12,    13,    14,    15,
-      -1,    17,    18,    19,    20,    21,    -1,    23,    24,    25,
-      26,    -1,    -1,    -1,    -1,    31,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,
-      -1,    47,    48,    49,    50,    51,    52,    -1,    -1,    -1,
-      -1,    57,    58,    59,    60,    61,    62,    -1,    64,    -1,
-      -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    82,    83,    84,    -1,
-      -1,    -1,    -1,    89,    90,    -1,    92,    93,     7,    -1,
+      27,    -1,    -1,    -1,    -1,    32,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,
+      -1,    48,    49,    50,    51,    52,    53,    -1,    -1,    -1,
+      -1,    58,    59,    60,    61,    62,    63,    -1,    65,    -1,
+      -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    85,    -1,
+      -1,    -1,    -1,    90,    91,    -1,    93,    94,     7,    -1,
        9,    10,    11,    12,    13,    14,    15,    -1,    17,    18,
-      19,    20,    21,    -1,    23,    24,    25,    26,    -1,    -1,
-      -1,    -1,    31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    45,    -1,    47,    48,
-      49,    50,    51,    52,    -1,    -1,    -1,    -1,    57,    58,
-      59,    60,    61,    62,    -1,    64,    -1,    -1,    -1,    -1,
-      -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    82,    83,    84,    -1,    -1,    -1,    -1,
-      89,    90,    -1,    92,    93,     7,    -1,     9,    10,    11,
-      12,    13,    14,    15,    -1,    17,    18,    19,    20,    21,
-      -1,    23,    24,    25,    26,    -1,    -1,    -1,    -1,    31,
+      19,    20,    21,    -1,    23,    24,    25,    26,    27,    -1,
+      -1,    -1,    -1,    32,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    48,
+      49,    50,    51,    52,    53,    -1,    -1,    -1,    -1,    58,
+      59,    60,    61,    62,    63,    -1,    65,    -1,    -1,    -1,
+      -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    83,    84,    85,    -1,    -1,    -1,
+      -1,    90,    91,    -1,    93,    94,     7,    -1,     9,    10,
+      11,    12,    13,    14,    15,    -1,    17,    18,    19,    20,
+      21,    -1,    23,    24,    25,    26,    27,    -1,    -1,    -1,
+      -1,    32,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    46,    -1,    48,    49,    50,
+      51,    52,    53,    -1,    -1,    -1,    -1,    58,    59,    60,
+      61,    62,    63,    -1,    65,    -1,    -1,    -1,    -1,    -1,
+      71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    83,    84,    85,    -1,    -1,    -1,    -1,    90,
+      91,    -1,    93,    94,     7,    -1,     9,    10,    11,    12,
+      13,    14,    15,    -1,    17,    18,    19,    20,    21,    -1,
+      23,    24,    25,    26,    27,    -1,    -1,    -1,    -1,    32,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    45,    -1,    47,    48,    49,    50,    51,
-      52,    -1,    -1,    -1,    -1,    57,    58,    59,    60,    61,
-      62,    -1,    64,    -1,    -1,    -1,     8,    -1,    70,    -1,
-      -1,    -1,    -1,    -1,    16,    -1,    -1,    -1,    -1,    -1,
-      82,    83,    84,    -1,    -1,    -1,    -1,    89,    90,    -1,
-      -1,    93,    34,    35,    36,    37,    -1,    -1,    -1,    41,
-      -1,    43,    -1,    -1,    46,    -1,    -1,    -1,    -1,    -1,
-      -1,    53,    54,    55,    56,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    67,    68,    69,    -1,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      -1,   369,    -1,   371,    86,    87,    88,   375,    -1,    91,
-      92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   392,   393,    -1,    46,    -1,    -1,
-      -1,    -1,   400,   401,    53,    54,    55,    56,    -1,    -1,
-      -1,    -1,   410,    -1,    -1,    -1,   414,    -1,    -1,    -1,
-      -1,    -1,    -1,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,   431,   432,    -1,    46,    86,    87,    88,
-      -1,    -1,    91,    53,    54,    55,    56,    -1,    -1,    -1,
+      -1,    -1,    -1,    46,    -1,    48,    49,    50,    51,    52,
+      53,    -1,    -1,    -1,    -1,    58,    59,    60,    61,    62,
+      63,    -1,    65,    -1,    -1,     8,    -1,    -1,    71,    -1,
+      -1,    -1,    -1,    16,    -1,    -1,    -1,    -1,    -1,    -1,
+      83,    84,    85,    -1,    -1,    -1,    -1,    90,    91,    -1,
+      -1,    94,    35,    36,    37,    38,    -1,    -1,    -1,    42,
+      -1,    44,    -1,    -1,    47,    -1,    -1,    -1,    -1,    -1,
+      -1,    54,    55,    56,    57,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    68,    69,    70,    -1,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      -1,   377,    -1,   379,    87,    88,    89,   383,    -1,    92,
+      93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   400,   401,    -1,    47,    -1,    -1,
+      -1,    -1,   408,   409,    54,    55,    56,    57,    -1,    -1,
+      -1,    -1,   418,    -1,    -1,    -1,   422,    -1,    -1,    -1,
+      -1,    -1,    -1,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,   439,   440,    -1,    47,    87,    88,    89,
+      -1,    -1,    92,    54,    55,    56,    57,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    72,    73,    -1,    75,    76,    77,    78,    79,
-      80,    81,    -1,    -1,    -1,    46,    86,    87,    88,    -1,
-      -1,    91,    53,    54,    55,    56,    -1,    -1,    -1,    -1,
+      -1,    -1,    73,    74,    -1,    76,    77,    78,    79,    80,
+      81,    82,    -1,    -1,    -1,    47,    87,    88,    89,    -1,
+      -1,    92,    54,    55,    56,    57,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    73,    -1,    75,    76,    77,    78,    79,    80,
-      81,    -1,    -1,    -1,    46,    86,    87,    88,    -1,    -1,
-      91,    53,    54,    55,    56,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    74,    -1,    76,    77,    78,    79,    80,    81,
+      82,    -1,    -1,    -1,    47,    87,    88,    89,    -1,    -1,
+      92,    54,    55,    56,    57,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    75,    76,    77,    78,    79,    80,    81,
-      -1,    -1,    -1,    -1,    86,    87,    88,    -1,    -1,    91
+      -1,    -1,    -1,    76,    77,    78,    79,    80,    81,    82,
+      -1,    -1,    -1,    -1,    87,    88,    89,    -1,    -1,    92
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,     3,     4,    96,    97,   101,    28,    29,    30,    32,
-      33,    63,    94,   105,   106,   112,   113,   121,   122,   123,
-     124,   126,   127,   136,   137,   139,     0,   104,   130,   128,
-      17,   128,   128,     1,     5,     7,     9,    10,    11,    12,
+       0,     3,     4,    97,    98,   102,    29,    30,    31,    33,
+      34,    64,    95,   106,   107,   113,   114,   122,   123,   124,
+     125,   127,   128,   137,   138,   140,     0,   105,   131,   129,
+      17,   129,   129,     1,     5,     7,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    23,
-      24,    25,    26,    27,    31,    34,    35,    36,    37,    41,
-      42,    43,    44,    45,    47,    48,    49,    50,    51,    52,
-      57,    58,    59,    60,    61,    62,    64,    70,    82,    83,
-      84,    89,    90,    93,    98,   107,   109,   110,   141,   142,
-     143,   146,   147,   148,   149,   150,   151,   152,   157,   158,
-     159,   160,   161,   162,   106,   122,    17,   125,    17,   131,
-      17,   140,   131,    99,     8,   141,   151,   151,    17,    22,
-      98,   158,   163,   163,   163,   163,   163,   163,   163,    93,
-     151,   129,   129,    93,    93,    93,    93,    62,    93,   158,
-      93,    93,    98,   151,    93,    93,    93,    98,   151,    17,
-     142,   154,   158,   163,   163,    17,    98,   151,   158,    16,
-     141,    17,   151,    93,   153,   158,   159,   160,   151,   142,
-     151,   151,   151,   151,   151,    92,   141,    40,   111,    16,
-      34,    35,    36,    37,    41,    43,    67,    68,    69,    71,
-       5,     7,    93,    46,    53,    54,    55,    56,    72,    73,
-      75,    76,    77,    78,    79,    80,    81,    86,    87,    88,
-      91,    93,     5,     7,     5,     7,     5,    98,    20,   132,
-       5,    16,    17,   132,   104,     8,   154,    93,   142,    98,
-     132,    99,    99,    99,    99,    99,    99,    93,    99,    99,
-      92,    92,   141,   141,   155,   163,   142,    93,    93,     6,
-      16,   154,    92,   141,    65,   134,     7,    92,    98,   141,
-     117,   141,   141,   141,   141,   141,   141,   141,   141,   151,
-     141,   141,    92,   141,   151,   151,   151,   151,   151,   151,
-     151,   151,   151,   151,   151,   151,   151,   151,   151,     5,
-       7,    18,    93,   145,   158,    92,   141,   141,   141,   141,
-     141,   141,    65,   133,    99,    17,   133,     6,   155,    92,
-     144,   133,   116,   141,   117,   118,   141,   117,   120,   156,
-     158,   107,   115,   118,   119,   141,    99,   100,   118,    92,
-      92,   141,    92,   141,    92,   141,     6,    92,    20,   141,
-       7,    16,     8,    92,    74,   141,   141,    92,   141,    93,
-      92,    16,     8,    16,     8,    16,    20,    16,    98,   135,
-     138,   154,   135,    92,   154,    98,    92,    92,    92,    92,
-      93,    92,    16,   118,   118,    92,    92,    92,    92,     8,
-     141,     6,   151,    16,     8,    92,   155,     6,     6,     6,
-     104,    16,   114,   114,     5,   102,   102,   118,   102,   116,
-      92,    92,   102,     8,     6,    92,     6,   102,   102,   103,
-      38,    39,   108,   108,    92,   111,    16,   102,   102,   111,
-     111,   104,   102,    93,   102,   114,   111,     6,   118,   111,
-     119,    92,    92,   102,   102,   108
+      24,    25,    26,    27,    28,    32,    35,    36,    37,    38,
+      42,    43,    44,    45,    46,    48,    49,    50,    51,    52,
+      53,    58,    59,    60,    61,    62,    63,    65,    71,    83,
+      84,    85,    90,    91,    94,    99,   108,   110,   111,   142,
+     143,   144,   147,   148,   149,   150,   151,   152,   153,   160,
+     161,   162,   163,   164,   165,   107,   123,    17,   126,    17,
+     132,    17,   141,   132,   100,     8,   142,   152,   152,    17,
+      22,    99,   161,   166,   166,   166,   166,   166,   166,   166,
+      94,     7,   152,   130,   130,    23,    94,   157,   157,   157,
+     157,    63,   157,   161,   157,   157,    99,   152,    94,    94,
+      94,    99,   152,    17,   143,   155,   161,   166,   166,    17,
+      99,   152,   161,    16,   142,    17,   152,    94,   154,   161,
+     162,   163,   152,   143,   152,   152,   152,   152,   152,    93,
+     142,    41,   112,    16,    35,    36,    37,    38,    42,    44,
+      68,    69,    70,    72,     5,     7,   157,    47,    54,    55,
+      56,    57,    73,    74,    76,    77,    78,    79,    80,    81,
+      82,    87,    88,    89,    92,   157,     5,     7,     5,     7,
+       5,    99,    20,   133,     5,    16,    17,   133,   105,     8,
+     155,    94,   143,   142,    99,   133,   158,   100,   100,   100,
+     100,   100,   100,   157,   100,   100,    93,    93,   142,   142,
+     156,   166,   143,   157,   157,     6,    16,   155,    93,   142,
+      66,   135,     7,    93,    99,   142,   118,   142,   142,   142,
+     142,   142,   142,   142,   142,   152,   142,   142,    93,   142,
+     152,   152,   152,   152,   152,   152,   152,   152,   152,   152,
+     152,   152,   152,   152,   152,     5,     7,    18,    94,   146,
+     161,    93,   142,   142,   142,   142,   142,   142,    66,   134,
+     100,    17,   134,     6,   156,    93,     8,   145,   134,    94,
+     117,   142,   118,   119,   142,   118,   121,   159,   161,   108,
+     116,   119,   120,   142,   100,   101,   119,    93,    93,   142,
+      93,   142,    93,   142,     6,    93,    20,   142,     7,    16,
+       8,    93,    75,   142,   142,    93,   142,   157,    93,    16,
+       8,    16,     8,    16,    20,    16,    99,   136,   139,   155,
+     136,    93,   155,    99,    93,    93,    93,    93,   157,    93,
+      16,   119,   119,    93,    93,    93,    93,     8,   142,     6,
+     152,    16,     8,    93,   156,     6,     6,     6,   105,    16,
+     115,   115,     5,   103,   103,   119,   103,   117,    93,    93,
+     103,     8,     6,    93,     6,   103,   103,   104,    39,    40,
+     109,   109,    93,   112,    16,   103,   103,   112,   112,   105,
+     103,   157,   103,   115,   112,     6,   119,   112,   120,    93,
+      93,   103,   103,   109
 };
 
 typedef enum {
@@ -920,7 +934,7 @@ static const toketypes yy_type_tab[] =
 {
   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_opval, 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_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,
@@ -940,6 +954,6 @@ static const toketypes yy_type_tab[] =
   toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_ival, 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_opval,
-  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 26f593a..483a1e4 100644 (file)
--- a/perly.y
+++ b/perly.y
@@ -73,7 +73,7 @@
 
 %token <i_tkval> '{' '}' '[' ']' '-' '+' '$' '@' '%' '*' '&' ';'
 
-%token <opval> WORD METHOD FUNCMETH THING PMFUNC PRIVATEREF
+%token <opval> WORD METHOD FUNCMETH THING PMFUNC PRIVATEREF QWLIST
 %token <opval> FUNC0SUB UNIOPSUB LSTOPSUB
 %token <opval> PLUGEXPR PLUGSTMT
 %token <p_tkval> LABEL
@@ -87,6 +87,8 @@
 %token <i_tkval> LOCAL MY MYSUB REQUIRE
 %token <i_tkval> COLONATTR
 
+%type <i_tkval> lpar_or_qw
+
 %type <ival> grammar prog progstart remember mremember
 %type <ival>  startsub startanonsub startformsub
 /* FIXME for MAD - are these two ival? */
@@ -311,7 +313,7 @@ else        :       /* NULL */
                        { ($2)->op_flags |= OPf_PARENS; $$ = scope($2);
                          TOKEN_GETMAD($1,$$,'o');
                        }
-       |       ELSIF '(' mexpr ')' mblock else
+       |       ELSIF lpar_or_qw mexpr ')' mblock else
                        { PL_parser->copline = (line_t)IVAL($1);
                            $$ = newCONDOP(0, newSTATEOP(OPf_SPECIAL,NULL,$3), scope($5), $6);
                            PL_hints |= HINT_BLOCK_SCOPE;
@@ -322,7 +324,7 @@ else        :       /* NULL */
        ;
 
 /* Real conditional expressions */
-cond   :       IF '(' remember mexpr ')' mblock else
+cond   :       IF lpar_or_qw remember mexpr ')' mblock else
                        { PL_parser->copline = (line_t)IVAL($1);
                            $$ = block_end($3,
                                   newCONDOP(0, $4, scope($6), $7));
@@ -330,7 +332,7 @@ cond        :       IF '(' remember mexpr ')' mblock else
                          TOKEN_GETMAD($2,$$,'(');
                          TOKEN_GETMAD($5,$$,')');
                        }
-       |       UNLESS '(' remember miexpr ')' mblock else
+       |       UNLESS lpar_or_qw remember miexpr ')' mblock else
                        { PL_parser->copline = (line_t)IVAL($1);
                            $$ = block_end($3,
                                   newCONDOP(0, $4, scope($6), $7));
@@ -341,7 +343,7 @@ cond        :       IF '(' remember mexpr ')' mblock else
        ;
 
 /* Cases for a switch statement */
-case   :       WHEN '(' remember mexpr ')' mblock
+case   :       WHEN lpar_or_qw remember mexpr ')' mblock
        { $$ = block_end($3,
                newWHENOP($4, scope($6))); }
        |       DEFAULT block
@@ -358,7 +360,7 @@ cont        :       /* NULL */
        ;
 
 /* Loops: while, until, for, and a bare block */
-loop   :       label WHILE '(' remember texpr ')' mintro mblock cont
+loop   :       label WHILE lpar_or_qw remember texpr ')' mintro mblock cont
                        { OP *innerop;
                          PL_parser->copline = (line_t)IVAL($2);
                            $$ = block_end($4,
@@ -371,7 +373,7 @@ loop        :       label WHILE '(' remember texpr ')' mintro mblock cont
                          TOKEN_GETMAD($6,innerop,')');
                        }
 
-       |       label UNTIL '(' remember iexpr ')' mintro mblock cont
+       |       label UNTIL lpar_or_qw remember iexpr ')' mintro mblock cont
                        { OP *innerop;
                          PL_parser->copline = (line_t)IVAL($2);
                            $$ = block_end($4,
@@ -383,7 +385,7 @@ loop        :       label WHILE '(' remember texpr ')' mintro mblock cont
                          TOKEN_GETMAD($3,innerop,'(');
                          TOKEN_GETMAD($6,innerop,')');
                        }
-       |       label FOR MY remember my_scalar '(' mexpr ')' mblock cont
+       |       label FOR MY remember my_scalar lpar_or_qw mexpr ')' mblock cont
                        { OP *innerop;
                          $$ = block_end($4,
                             innerop = newFOROP(0, PVAL($1), (line_t)IVAL($2),
@@ -394,7 +396,7 @@ loop        :       label WHILE '(' remember texpr ')' mintro mblock cont
                          TOKEN_GETMAD($6,((LISTOP*)innerop)->op_first->op_sibling,'(');
                          TOKEN_GETMAD($8,((LISTOP*)innerop)->op_first->op_sibling,')');
                        }
-       |       label FOR scalar '(' remember mexpr ')' mblock cont
+       |       label FOR scalar lpar_or_qw remember mexpr ')' mblock cont
                        { OP *innerop;
                          $$ = block_end($5,
                             innerop = newFOROP(0, PVAL($1), (line_t)IVAL($2),
@@ -404,7 +406,7 @@ loop        :       label WHILE '(' remember texpr ')' mintro mblock cont
                          TOKEN_GETMAD($4,((LISTOP*)innerop)->op_first->op_sibling,'(');
                          TOKEN_GETMAD($7,((LISTOP*)innerop)->op_first->op_sibling,')');
                        }
-       |       label FOR '(' remember mexpr ')' mblock cont
+       |       label FOR lpar_or_qw remember mexpr ')' mblock cont
                        { OP *innerop;
                          $$ = block_end($4,
                             innerop = newFOROP(0, PVAL($1), (line_t)IVAL($2),
@@ -414,7 +416,7 @@ loop        :       label WHILE '(' remember texpr ')' mintro mblock cont
                          TOKEN_GETMAD($3,((LISTOP*)innerop)->op_first->op_sibling,'(');
                          TOKEN_GETMAD($6,((LISTOP*)innerop)->op_first->op_sibling,')');
                        }
-       |       label FOR '(' remember mnexpr ';' texpr ';' mintro mnexpr ')'
+       |       label FOR lpar_or_qw remember mnexpr ';' texpr ';' mintro mnexpr ')'
                    mblock
                        /* basically fake up an initialize-while lineseq */
                        { OP *forop;
@@ -454,7 +456,7 @@ loop        :       label WHILE '(' remember texpr ')' mintro mblock cont
        ;
 
 /* Switch blocks */
-switch :       label GIVEN '(' remember mydefsv mexpr ')' mblock
+switch :       label GIVEN lpar_or_qw remember mydefsv mexpr ')' mblock
                        { PL_parser->copline = (line_t) IVAL($2);
                            $$ = block_end($4,
                                newSTATEOP(0, PVAL($1),
@@ -782,7 +784,7 @@ listop      :       LSTOP indirob argexpr /* map {...} @args or print $fh @args */
                          TOKEN_GETMAD($2,$$,'(');
                          TOKEN_GETMAD($5,$$,')');
                        }
-       |       term ARROW method '(' listexprcom ')' /* $foo->bar(list) */
+       |       term ARROW method lpar_or_qw listexprcom ')' /* $foo->bar(list) */
                        { $$ = convert(OP_ENTERSUB, OPf_STACKED,
                                append_elem(OP_LIST,
                                    prepend_elem(OP_LIST, scalar($1), $5),
@@ -908,14 +910,14 @@ subscripted:    star '{' expr ';' '}'        /* *main::{something} */
                          TOKEN_GETMAD($5,$$,')');
                        }
 
-       |       subscripted '(' expr ')'   /* $foo->{bar}->(@args) */
+       |       subscripted lpar_or_qw expr ')'   /* $foo->{bar}->(@args) */
                        { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   append_elem(OP_LIST, $3,
                                               newCVREF(0, scalar($1))));
                          TOKEN_GETMAD($2,$$,'(');
                          TOKEN_GETMAD($4,$$,')');
                        }
-       |       subscripted '(' ')'        /* $foo->{bar}->() */
+       |       subscripted lpar_or_qw ')'        /* $foo->{bar}->() */
                        { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   newCVREF(0, scalar($1)));
                          TOKEN_GETMAD($2,$$,'(');
@@ -928,6 +930,11 @@ subscripted:    star '{' expr ';' '}'        /* *main::{something} */
                          TOKEN_GETMAD($4,$$,'[');
                          TOKEN_GETMAD($6,$$,']');
                        }
+       |       QWLIST '[' expr ']'            /* list literal slice */
+                       { $$ = newSLICEOP(0, $3, $1);
+                         TOKEN_GETMAD($2,$$,'[');
+                         TOKEN_GETMAD($4,$$,']');
+                       }
        |       '(' ')' '[' expr ']'                 /* empty list slice! */
                        { $$ = newSLICEOP(0, $4, (OP*)NULL);
                          TOKEN_GETMAD($1,$$,'(');
@@ -1094,7 +1101,7 @@ termdo    :       DO term %prec UNIOP                     /* do $filename */
                        { $$ = newUNOP(OP_NULL, OPf_SPECIAL, scope($2));
                          TOKEN_GETMAD($1,$$,'D');
                        }
-       |       DO WORD '(' ')'                         /* do somesub() */
+       |       DO WORD lpar_or_qw ')'                  /* do somesub() */
                        { $$ = newUNOP(OP_ENTERSUB,
                            OPf_SPECIAL|OPf_STACKED,
                            prepend_elem(OP_LIST,
@@ -1106,7 +1113,7 @@ termdo    :       DO term %prec UNIOP                     /* do $filename */
                          TOKEN_GETMAD($3,$$,'(');
                          TOKEN_GETMAD($4,$$,')');
                        }
-       |       DO WORD '(' expr ')'                    /* do somesub(@args) */
+       |       DO WORD lpar_or_qw expr ')'             /* do somesub(@args) */
                        { $$ = newUNOP(OP_ENTERSUB,
                            OPf_SPECIAL|OPf_STACKED,
                            append_elem(OP_LIST,
@@ -1119,7 +1126,7 @@ termdo    :       DO term %prec UNIOP                     /* do $filename */
                          TOKEN_GETMAD($3,$$,'(');
                          TOKEN_GETMAD($5,$$,')');
                        }
-       |       DO scalar '(' ')'                      /* do $subref () */
+       |       DO scalar lpar_or_qw ')'                /* do $subref () */
                        { $$ = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED,
                            prepend_elem(OP_LIST,
                                scalar(newCVREF(0,scalar($2))), (OP*)NULL)); dep();
@@ -1127,7 +1134,7 @@ termdo    :       DO term %prec UNIOP                     /* do $filename */
                          TOKEN_GETMAD($3,$$,'(');
                          TOKEN_GETMAD($4,$$,')');
                        }
-       |       DO scalar '(' expr ')'                 /* do $subref (@args) */
+       |       DO scalar lpar_or_qw expr ')'           /* do $subref (@args) */
                        { $$ = newUNOP(OP_ENTERSUB, OPf_SPECIAL|OPf_STACKED,
                            prepend_elem(OP_LIST,
                                $4,
@@ -1163,6 +1170,8 @@ term      :       termbinop
                          TOKEN_GETMAD($1,$$,'(');
                          TOKEN_GETMAD($3,$$,')');
                        }
+       |       QWLIST
+                       { $$ = IF_MAD(newUNOP(OP_NULL,0,$1), $1); }
        |       '(' ')'
                        { $$ = sawparens(newNULLLIST());
                          TOKEN_GETMAD($1,$$,'(');
@@ -1204,12 +1213,12 @@ term    :       termbinop
                        { $$ = $1; }
        |       amper                                /* &foo; */
                        { $$ = newUNOP(OP_ENTERSUB, 0, scalar($1)); }
-       |       amper '(' ')'                        /* &foo() */
+       |       amper lpar_or_qw ')'                 /* &foo() */
                        { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar($1));
                          TOKEN_GETMAD($2,$$,'(');
                          TOKEN_GETMAD($3,$$,')');
                        }
-       |       amper '(' expr ')'                   /* &foo(@args) */
+       |       amper lpar_or_qw expr ')'            /* &foo(@args) */
                        {
                          $$ = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                append_elem(OP_LIST, $3, scalar($1)));
@@ -1356,6 +1365,14 @@ listexprcom:     /* NULL */
                        { $$ = $1; }
        ;
 
+lpar_or_qw:    '('
+                       { $$ = $1; }
+       |       QWLIST
+                       { coerce_qwlist_to_paren_list($1); }
+               '('
+                       { $$ = $3; }
+       ;
+
 /* A little bit of trickery to make "for my $foo (@bar)" actually be
    lexical */
 my_scalar:     scalar
index fc146a0..7bd4498 100644 (file)
@@ -5055,6 +5055,17 @@ name. So no namespace is current at all. Using this can cause many
 otherwise reasonable constructs to fail in baffling ways. C<use strict;>
 instead.
 
+=item Use of qw(...) as parentheses is deprecated
+
+(D deprecated) You have something like C<foreach $x qw(a b c) {...}>,
+using a C<qw(...)> list literal where a parenthesised expression is
+expected.  Historically the parser fooled itself into thinking that
+C<qw(...)> literals were always enclosed in parentheses, and as a result
+you could sometimes omit parentheses around them.  (You could never do
+the C<foreach qw(a b c) {...}> that you might have expected, though.)
+The parser no longer lies to itself in this way.  Wrap the list literal
+in parentheses, like C<foreach $x (qw(a b c)) {...}>.
+
 =item Use of reference "%s" as array index
 
 (W misc) You tried to use a reference as an array index; this probably
diff --git a/proto.h b/proto.h
index f93614f..b915db2 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -6998,6 +6998,11 @@ PERL_CALLCONV int        Perl_keyword_plugin_standard(pTHX_ char* keyword_ptr, STRLEN k
 #define PERL_ARGS_ASSERT_KEYWORD_PLUGIN_STANDARD       \
        assert(keyword_ptr); assert(op_ptr)
 
+PERL_CALLCONV void     Perl_coerce_qwlist_to_paren_list(pTHX_ OP* qwlist)
+                       __attribute__nonnull__(pTHX_1);
+#define PERL_ARGS_ASSERT_COERCE_QWLIST_TO_PAREN_LIST   \
+       assert(qwlist)
+
 
 #if defined(USE_ITHREADS)
 #  if defined(PERL_IN_SV_C)
index afc5dcc..02e29fd 100644 (file)
@@ -8,6 +8,22 @@
        sub fred {} $a = "fred" ; do $a()
        sub fred {} $a = "fred" ; do $a(1)
 
+  Use of qw(...) as parentheses is deprecated
+
+       if qw(a) {}
+       unless qw(a) {}
+       if (0) {} elsif qw(a) {}
+       given qw(a) {}
+       when qw(a) {}
+       while qw(a) {}
+       until qw(a) {}
+       foreach $x qw(a b c) {}
+       foreach my $x qw(a b c) {}
+       $obj->meth qw(a b c)
+       do foo qw(a b c)
+       do $subref qw(a b c)
+       &foo qw(a b c)
+       $a[0] qw(a b c)
 
 __END__
 # perly.y
@@ -29,3 +45,222 @@ Use of "do" to call subroutines is deprecated at - line 4.
 Use of "do" to call subroutines is deprecated at - line 5.
 Use of "do" to call subroutines is deprecated at - line 7.
 Use of "do" to call subroutines is deprecated at - line 8.
+########
+use warnings qw(deprecated void);
+if qw(a) { print "x0\n"; } else { }
+if qw(0) { print "x1\n"; } else { }
+if qw(z a) { print "x2\n"; } else { }
+if qw(z 0) { print "x3\n"; } else { }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+Use of qw(...) as parentheses is deprecated at - line 3.
+Use of qw(...) as parentheses is deprecated at - line 4.
+Useless use of a constant (z) in void context at - line 4.
+Use of qw(...) as parentheses is deprecated at - line 5.
+Useless use of a constant (z) in void context at - line 5.
+x0
+x2
+########
+if qw() { print "x0\n"; } else { }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 1.
+syntax error at - line 1, near "if qw()"
+Execution of - aborted due to compilation errors.
+########
+use warnings qw(deprecated void);
+unless qw(a) { print "x0\n"; } else { }
+unless qw(0) { print "x1\n"; } else { }
+unless qw(z a) { print "x2\n"; } else { }
+unless qw(z 0) { print "x3\n"; } else { }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+Use of qw(...) as parentheses is deprecated at - line 3.
+Use of qw(...) as parentheses is deprecated at - line 4.
+Useless use of a constant (z) in void context at - line 4.
+Use of qw(...) as parentheses is deprecated at - line 5.
+Useless use of a constant (z) in void context at - line 5.
+x1
+x3
+########
+unless qw() { print "x0\n"; } else { }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 1.
+syntax error at - line 1, near "unless qw()"
+Execution of - aborted due to compilation errors.
+########
+use warnings qw(deprecated void);
+if(0) { print "eek\n"; } elsif qw(a) { print "x0\n"; } else { }
+if(0) { print "eek\n"; } elsif qw(0) { print "x1\n"; } else { }
+if(0) { print "eek\n"; } elsif qw(z a) { print "x2\n"; } else { }
+if(0) { print "eek\n"; } elsif qw(z 0) { print "x3\n"; } else { }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+Use of qw(...) as parentheses is deprecated at - line 3.
+Use of qw(...) as parentheses is deprecated at - line 4.
+Useless use of a constant (z) in void context at - line 4.
+Use of qw(...) as parentheses is deprecated at - line 5.
+Useless use of a constant (z) in void context at - line 5.
+x0
+x2
+########
+if(0) { print "eek\n"; } elsif qw() { print "x0\n"; } else { }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 1.
+syntax error at - line 1, near "elsif qw()"
+Execution of - aborted due to compilation errors.
+########
+use warnings qw(deprecated void); use feature "switch";
+given qw(a) { print "x0 $_\n"; }
+given qw(z a) { print "x1 $_\n"; }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+Use of qw(...) as parentheses is deprecated at - line 3.
+Useless use of a constant (z) in void context at - line 3.
+x0 a
+x1 a
+########
+use feature "switch";
+given qw() { print "x0\n"; }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+syntax error at - line 2, near "given qw()"
+Execution of - aborted due to compilation errors.
+########
+use warnings qw(deprecated void); use feature "switch";
+given("a") { when qw(a) { print "x0\n"; } }
+given("a") { when qw(b) { print "x1\n"; } }
+given("a") { when qw(z a) { print "x2\n"; } }
+given("a") { when qw(z b) { print "x3\n"; } }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+Use of qw(...) as parentheses is deprecated at - line 3.
+Use of qw(...) as parentheses is deprecated at - line 4.
+Useless use of a constant (z) in void context at - line 4.
+Use of qw(...) as parentheses is deprecated at - line 5.
+Useless use of a constant (z) in void context at - line 5.
+x0
+x2
+########
+use feature "switch";
+given("a") { when qw() { print "x0\n"; } }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+syntax error at - line 2, near "when qw()"
+syntax error at - line 2, near "} }"
+Execution of - aborted due to compilation errors.
+########
+use warnings qw(deprecated void);
+while qw(a) { print "x0\n"; last; } {;}
+while qw(0) { print "x1\n"; last; } {;}
+while qw(z a) { print "x2\n"; last; } {;}
+while qw(z 0) { print "x3\n"; last; } {;}
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+Use of qw(...) as parentheses is deprecated at - line 3.
+Use of qw(...) as parentheses is deprecated at - line 4.
+Useless use of a constant (z) in void context at - line 4.
+Use of qw(...) as parentheses is deprecated at - line 5.
+Useless use of a constant (z) in void context at - line 5.
+x0
+x2
+########
+while qw() { print "x0\n"; last; }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 1.
+x0
+########
+use warnings qw(deprecated void);
+until qw(a) { print "x0\n"; last; } {;}
+until qw(0) { print "x1\n"; last; } {;}
+until qw(z a) { print "x2\n"; last; } {;}
+until qw(z 0) { print "x3\n"; last; } {;}
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+Use of qw(...) as parentheses is deprecated at - line 3.
+Use of qw(...) as parentheses is deprecated at - line 4.
+Useless use of a constant (z) in void context at - line 4.
+Use of qw(...) as parentheses is deprecated at - line 5.
+Useless use of a constant (z) in void context at - line 5.
+x1
+x3
+########
+until qw() { print "x0\n"; } else { }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 1.
+syntax error at - line 1, near "until qw()"
+Execution of - aborted due to compilation errors.
+########
+foreach $x qw(a b c) { print $x, "\n"; }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 1.
+a
+b
+c
+########
+foreach $x qw() { print $x, "\n"; }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 1.
+syntax error at - line 1, near "$x qw()"
+Execution of - aborted due to compilation errors.
+########
+foreach my $x qw(a b c) { print $x, "\n"; }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 1.
+a
+b
+c
+########
+foreach my $x qw() { print $x, "\n"; }
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 1.
+syntax error at - line 1, near "$x qw()"
+Execution of - aborted due to compilation errors.
+########
+sub a5c85eef3bf30129e20989e96b099d13::foo { print "+", join(":", @_), "\n"; }
+"a5c85eef3bf30129e20989e96b099d13"->foo qw(); {;}
+"a5c85eef3bf30129e20989e96b099d13"->foo qw(a b c); {;}
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+Use of qw(...) as parentheses is deprecated at - line 3.
++a5c85eef3bf30129e20989e96b099d13
++a5c85eef3bf30129e20989e96b099d13:a:b:c
+########
+sub fd4de2af1449cec72693c36842d41862 { print "+", join(":", @_), "\n"; }
+do fd4de2af1449cec72693c36842d41862 qw(); {;}
+do fd4de2af1449cec72693c36842d41862 qw(a b c); {;}
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+Use of "do" to call subroutines is deprecated at - line 2.
+Use of qw(...) as parentheses is deprecated at - line 3.
+Use of "do" to call subroutines is deprecated at - line 3.
++
++a:b:c
+########
+$subref = sub { print "+", join(":", @_), "\n"; };
+do $subref qw();
+do $subref qw(a b c);
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+Use of "do" to call subroutines is deprecated at - line 2.
+Use of qw(...) as parentheses is deprecated at - line 3.
+Use of "do" to call subroutines is deprecated at - line 3.
++
++a:b:c
+########
+sub e293a8f7cb38880a48867fcb336448e5 { print "+", join(":", @_), "\n"; }
+&e293a8f7cb38880a48867fcb336448e5 qw();
+&e293a8f7cb38880a48867fcb336448e5 qw(a b c);
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+Use of qw(...) as parentheses is deprecated at - line 3.
++
++a:b:c
+########
+my @a = (sub { print "+", join(":", @_), "\n"; });
+$a[0] qw();
+$a[0] qw(a b c);
+EXPECT
+Use of qw(...) as parentheses is deprecated at - line 2.
+Use of qw(...) as parentheses is deprecated at - line 3.
++
++a:b:c
index 184724a..c6a0a9a 100644 (file)
@@ -6,7 +6,7 @@ BEGIN {
 }
 
 require "test.pl";
-plan( tests => 58 );
+plan( tests => 63 );
 
 @foo = (1, 2, 3, 4);
 cmp_ok($foo[0], '==', 1, 'first elem');
@@ -159,9 +159,19 @@ cmp_ok(join('',(1,2),3,(4,5)),'eq','12345','list (..).(..)');
     test_zero_args("sorted list slice",      sort((10,11)[2,3]));
     test_zero_args("assigned list slice",    my @tmp = (10,11)[2,3]);
     test_zero_args("do-returned list slice", do { (10,11)[2,3]; });
+    test_zero_args("list literal slice",     qw(a b)[2,3]);
+    test_zero_args("empty literal slice",    qw()[2,3]);
 }
 
 {
     # perl #20321
     is (join('', @{[('abc'=~/./g)[0,1,2,1,0]]}), "abcba");
 }
+
+{
+    is(join('', qw(a b c)[2,0,1]), "cab");
+    my @a = qw(a b c);
+    is(join(":", @a), "a:b:c");
+    my @b = qw();
+    is($#b, -1);
+}
index 288bcd7..62f1ac9 100644 (file)
@@ -23,7 +23,7 @@ plan tests => 14;
 # study() a tied variable, perl should know that the studying isn't
 # valid on subsequent references, and should account for it.
 
-for my $do_study qw( 0 1 ) {
+for my $do_study (0,1) {
     J::reset();
     my $x;
     tie $x, "J";
index fa05918..a7123cb 100644 (file)
@@ -523,7 +523,7 @@ sub notfoo {"bar"}
 
 {
     my $n = 0;
-    for my $l qw(a b c d) {
+    for my $l (qw(a b c d)) {
        given ($l) {
            when ($_ eq "b" .. $_ eq "c") { $n = 1 }
            default { $n = 0 }
@@ -534,7 +534,7 @@ sub notfoo {"bar"}
 
 {
     my $n = 0;
-    for my $l qw(a b c d) {
+    for my $l (qw(a b c d)) {
        given ($l) {
            when ($_ eq "b" ... $_ eq "c") { $n = 1 }
            default { $n = 0 }
diff --git a/toke.c b/toke.c
index 6d4d014..a7ec612 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -7319,14 +7319,13 @@ Perl_yylex(pTHX)
        case KEY_quotemeta:
            UNI(OP_QUOTEMETA);
 
-       case KEY_qw:
+       case KEY_qw: {
+           OP *words = NULL;
            s = scan_str(s,!!PL_madskills,FALSE);
            if (!s)
                missingterm(NULL);
            PL_expect = XOPERATOR;
-           force_next(')');
            if (SvCUR(PL_lex_stuff)) {
-               OP *words = NULL;
                int warned = 0;
                d = SvPV_force(PL_lex_stuff, len);
                while (len) {
@@ -7358,18 +7357,17 @@ Perl_yylex(pTHX)
                                            newSVOP(OP_CONST, 0, tokeq(sv)));
                    }
                }
-               if (words) {
-                   start_force(PL_curforce);
-                   NEXTVAL_NEXTTOKE.opval = words;
-                   force_next(THING);
-               }
            }
+           if (!words)
+               words = newNULLLIST();
            if (PL_lex_stuff) {
                SvREFCNT_dec(PL_lex_stuff);
                PL_lex_stuff = NULL;
            }
-           PL_expect = XTERM;
-           TOKEN('(');
+           PL_expect = XOPERATOR;
+           pl_yylval.opval = sawparens(words);
+           TOKEN(QWLIST);
+       }
 
        case KEY_qq:
            s = scan_str(s,!!PL_madskills,FALSE);
@@ -13985,6 +13983,22 @@ Perl_parse_fullstmt(pTHX_ U32 flags)
     return fullstmtop;
 }
 
+void
+Perl_coerce_qwlist_to_paren_list(pTHX_ OP *qwlist)
+{
+    PERL_ARGS_ASSERT_COERCE_QWLIST_TO_PAREN_LIST;
+    deprecate("qw(...) as parentheses");
+    force_next(')');
+    if (qwlist->op_type == OP_STUB) {
+       op_free(qwlist);
+    }
+    else {
+       NEXTVAL_NEXTTOKE.opval = qwlist;
+       force_next(THING);
+    }
+    force_next('(');
+}
+
 /*
  * Local variables:
  * c-indentation-style: bsd