revert smartmatch to 5.27.6 behaviour
authorZefram <zefram@fysh.org>
Fri, 29 Dec 2017 12:39:31 +0000 (12:39 +0000)
committerZefram <zefram@fysh.org>
Fri, 29 Dec 2017 12:39:31 +0000 (12:39 +0000)
The pumpking has determined that the CPAN breakage caused by changing
smartmatch [perl #132594] is too great for the smartmatch changes to
stay in for 5.28.

This reverts most of the merge in commit
da4e040f42421764ef069371d77c008e6b801f45.  All core behaviour and
documentation is reverted.  The removal of use of smartmatch from a couple
of tests (that aren't testing smartmatch) remains.  Customisation of
a couple of CPAN modules to make them portable across smartmatch types
remains.  A small bugfix in scope.c also remains.

67 files changed:
MANIFEST
cop.h
dump.c
embed.fnc
embed.h
ext/B/B.pm
ext/B/t/f_map.t
ext/B/t/optree_samples.t
ext/Opcode/Opcode.pm
ext/Pod-Functions/Functions_pm.PL
ext/Pod-Functions/t/Functions.t
gv.c
inline.h
keywords.c
keywords.h
lib/B/Deparse-core.t
lib/B/Deparse.pm
lib/B/Deparse.t
lib/B/Op_private.pm
lib/feature.pm
lib/overload.pm
lib/overload.t
op.c
op.h
opcode.h
opnames.h
perl.h
perly.act
perly.h
perly.tab
perly.y
pod/perldiag.pod
pod/perlexperiment.pod
pod/perlfunc.pod
pod/perlintro.pod
pod/perlop.pod
pod/perlrun.pod
pod/perlsyn.pod
pod/perltrap.pod
pp_ctl.c
pp_proto.h
proto.h
regen/feature.pl
regen/keywords.pl
regen/op_private
regen/opcodes
scope.c
sv.c
t/lib/croak/pp_ctl
t/lib/feature/switch
t/lib/warnings/9uninit
t/lib/warnings/op
t/lib/warnings/utf8
t/op/coreamp.t
t/op/coresubs.t
t/op/cproto.t
t/op/given.t [deleted file]
t/op/smartmatch.t
t/op/state.t
t/op/switch.t
t/op/taint.t
t/op/tie_fetch_count.t
t/op/whereis.t [deleted file]
t/op/whereso.t [deleted file]
t/run/switches.t
toke.c
universal.c

index f34c9ee..e152251 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -5672,7 +5672,6 @@ t/op/fork.t                       See if fork works
 t/op/fresh_perl_utf8.t         UTF8 tests for pads and gvs
 t/op/getpid.t                  See if $$ and getppid work with threads
 t/op/getppid.t                 See if getppid works
-t/op/given.t                   See if given works
 t/op/glob.t                    See if <*> works
 t/op/gmagic.t                  See if GMAGIC works
 t/op/goto.t                    See if goto works
@@ -5814,8 +5813,6 @@ t/op/ver.t                        See if v-strings and the %v format flag work
 t/op/waitpid.t                 See if waitpid works
 t/op/wantarray.t               See if wantarray works
 t/op/warn.t                    See if warn works
-t/op/whereis.t                 See if whereis works
-t/op/whereso.t                 See if whereso works
 t/op/while.t                   See if while loops work
 t/op/write.t                   See if write works (formats work)
 t/op/yadayada.t                        See if ... works
diff --git a/cop.h b/cop.h
index f685357..5c66752 100644 (file)
--- a/cop.h
+++ b/cop.h
@@ -721,9 +721,10 @@ struct block_loop {
 
 
 
-/* whereso context */
-struct block_whereso {
+/* given/when context */
+struct block_givwhen {
        OP *leave_op;
+        SV *defsv_save; /* the original $_ */
 };
 
 
@@ -747,7 +748,7 @@ struct block {
        struct block_format     blku_format;
        struct block_eval       blku_eval;
        struct block_loop       blku_loop;
-       struct block_whereso    blku_whereso;
+       struct block_givwhen    blku_givwhen;
     } blk_u;
 };
 #define blk_oldsp      cx_u.cx_blk.blku_oldsp
@@ -763,7 +764,7 @@ struct block {
 #define blk_format     cx_u.cx_blk.blk_u.blku_format
 #define blk_eval       cx_u.cx_blk.blk_u.blku_eval
 #define blk_loop       cx_u.cx_blk.blk_u.blku_loop
-#define blk_whereso    cx_u.cx_blk.blk_u.blku_whereso
+#define blk_givwhen    cx_u.cx_blk.blk_u.blku_givwhen
 
 #define CX_DEBUG(cx, action)                                           \
     DEBUG_l(                                                           \
@@ -856,11 +857,16 @@ struct context {
    and a static array of context names in pp_ctl.c  */
 #define CXTYPEMASK     0xf
 #define CXt_NULL       0 /* currently only used for sort BLOCK */
-#define CXt_WHERESO    1
+#define CXt_WHEN       1
 #define CXt_BLOCK      2
-/* be careful of the ordering of these six. Macros like CxTYPE_is_LOOP,
+/* When micro-optimising :-) keep GIVEN next to the LOOPs, as these 5 share a
+   jump table in pp_ctl.c
+   The first 4 don't have a 'case' in at least one switch statement in pp_ctl.c
+*/
+#define CXt_GIVEN      3
+
+/* be careful of the ordering of these five. Macros like CxTYPE_is_LOOP,
  * CxFOREACH compare ranges */
-#define CXt_LOOP_GIVEN 3 /* given (...)    { ...; } */
 #define CXt_LOOP_ARY   4 /* for (@ary)     { ...; } */
 #define CXt_LOOP_LAZYSV        5 /* for ('a'..'z') { ...; } */
 #define CXt_LOOP_LAZYIV        6 /* for (1..9)     { ...; } */
@@ -886,6 +892,8 @@ struct context {
 
 /* private flags for CXt_LOOP */
 
+/* this is only set in conjunction with CXp_FOR_GV */
+#define CXp_FOR_DEF    0x10    /* foreach using $_ */
 /* these 3 are mutually exclusive */
 #define CXp_FOR_LVREF  0x20    /* foreach using \$var */
 #define CXp_FOR_GV     0x40    /* foreach using package var */
@@ -897,7 +905,7 @@ struct context {
 #define CXp_ONCE       0x10    /* What was sbu_once in struct subst */
 
 #define CxTYPE(c)      ((c)->cx_type & CXTYPEMASK)
-#define CxTYPE_is_LOOP(c) (   CxTYPE(cx) >= CXt_LOOP_GIVEN              \
+#define CxTYPE_is_LOOP(c) (   CxTYPE(cx) >= CXt_LOOP_ARY                \
                            && CxTYPE(cx) <= CXt_LOOP_PLAIN)
 #define CxMULTICALL(c) ((c)->cx_type & CXp_MULTICALL)
 #define CxREALEVAL(c)  (((c)->cx_type & (CXTYPEMASK|CXp_REAL))         \
diff --git a/dump.c b/dump.c
index 2636ad8..b2f0fc5 100644 (file)
--- a/dump.c
+++ b/dump.c
@@ -1200,7 +1200,6 @@ S_do_op_dump_bar(pTHX_ I32 level, UV bar, PerlIO *file, const OP *o)
 
     case OP_ENTERITER:
     case OP_ENTERLOOP:
-    case OP_ENTERGIVEN:
        S_opdump_indent(aTHX_ o, level, bar, file, "REDO");
         S_opdump_link(aTHX_ cLOOPo->op_redoop, file);
        S_opdump_indent(aTHX_ o, level, bar, file, "NEXT");
@@ -1222,7 +1221,8 @@ S_do_op_dump_bar(pTHX_ I32 level, UV bar, PerlIO *file, const OP *o)
     case OP_DORASSIGN:
     case OP_ANDASSIGN:
     case OP_ARGDEFELEM:
-    case OP_ENTERWHERESO:
+    case OP_ENTERGIVEN:
+    case OP_ENTERWHEN:
     case OP_ENTERTRY:
     case OP_ONCE:
        S_opdump_indent(aTHX_ o, level, bar, file, "OTHER");
index 6af7e76..ecec8cd 100644 (file)
--- a/embed.fnc
+++ b/embed.fnc
@@ -1129,7 +1129,7 @@ Apd       |CV*    |newCONSTSUB_flags|NULLOK HV* stash \
                                  |U32 flags|NULLOK SV* sv
 Ap     |void   |newFORM        |I32 floor|NULLOK OP* o|NULLOK OP* block
 ApdR   |OP*    |newFOROP       |I32 flags|NULLOK OP* sv|NN OP* expr|NULLOK OP* block|NULLOK OP* cont
-ApdR   |OP*    |newGIVENOP     |NN OP* topic|NN OP* block|PADOFFSET defsv_off
+ApdR   |OP*    |newGIVENOP     |NN OP* cond|NN OP* block|PADOFFSET defsv_off
 ApdR   |OP*    |newLOGOP       |I32 optype|I32 flags|NN OP *first|NN OP *other
 pM     |LOGOP* |alloc_LOGOP    |I32 type|NULLOK OP *first|NULLOK OP *other
 ApdR   |OP*    |newLOOPEX      |I32 type|NN OP* label
@@ -1198,7 +1198,7 @@ ApdR      |SV*    |newSV_type     |const svtype type
 ApdR   |OP*    |newUNOP        |I32 type|I32 flags|NULLOK OP* first
 ApdR   |OP*    |newUNOP_AUX    |I32 type|I32 flags|NULLOK OP* first \
                                |NULLOK UNOP_AUX_item *aux
-ApdR   |OP*    |newWHERESOOP   |NN OP* cond|NN OP* block
+ApdR   |OP*    |newWHENOP      |NULLOK OP* cond|NN OP* block
 ApdR   |OP*    |newWHILEOP     |I32 flags|I32 debuggable|NULLOK LOOP* loop \
                                |NULLOK OP* expr|NULLOK OP* block|NULLOK OP* cont \
                                |I32 has_my
@@ -2172,6 +2172,11 @@ s        |void   |no_bareword_allowed|NN OP *o
 sR     |OP*    |no_fh_allowed|NN OP *o
 sR     |OP*    |too_few_arguments_pv|NN OP *o|NN const char* name|U32 flags
 s      |OP*    |too_many_arguments_pv|NN OP *o|NN const char* name|U32 flags
+s      |bool   |looks_like_bool|NN const OP* o
+s      |OP*    |newGIVWHENOP   |NULLOK OP* cond|NN OP *block \
+                               |I32 enter_opcode|I32 leave_opcode \
+                               |PADOFFSET entertarg
+s      |OP*    |ref_array_or_hash|NULLOK OP* cond
 s      |bool   |process_special_blocks |I32 floor \
                                        |NN const char *const fullname\
                                        |NN GV *const gv|NN CV *const cv
@@ -2259,10 +2264,11 @@ sR      |OP*    |dofindlabel    |NN OP *o|NN const char *label|STRLEN len \
 s      |MAGIC *|doparseform    |NN SV *sv
 snR    |bool   |num_overflow   |NV value|I32 fldsize|I32 frcsize
 sR     |I32    |dopoptoeval    |I32 startingblock
+sR     |I32    |dopoptogivenfor|I32 startingblock
 sR     |I32    |dopoptolabel   |NN const char *label|STRLEN len|U32 flags
 sR     |I32    |dopoptoloop    |I32 startingblock
 sR     |I32    |dopoptosub_at  |NN const PERL_CONTEXT* cxstk|I32 startingblock
-sR     |I32    |dopoptowhereso |I32 startingblock
+sR     |I32    |dopoptowhen    |I32 startingblock
 s      |void   |save_lines     |NULLOK AV *array|NN SV *sv
 s      |bool   |doeval_compile |U8 gimme \
                                |NULLOK CV* outside|U32 seq|NULLOK HV* hh
@@ -2272,6 +2278,11 @@ sR       |PerlIO *|doopen_pm     |NN SV *name
 #endif
 iRn    |bool   |path_is_searchable|NN const char *name
 sR     |I32    |run_user_filter|int idx|NN SV *buf_sv|int maxlen
+sR     |PMOP*  |make_matcher   |NN REGEXP* re
+sR     |bool   |matcher_matches_sv|NN PMOP* matcher|NN SV* sv
+s      |void   |destroy_matcher|NN PMOP* matcher
+s      |OP*    |do_smartmatch  |NULLOK HV* seen_this \
+                               |NULLOK HV* seen_other|const bool copied
 #endif
 
 #if defined(PERL_IN_PP_HOT_C)
@@ -3190,10 +3201,11 @@ AiM     |void   |cx_popeval      |NN PERL_CONTEXT *cx
 AiM    |void   |cx_pushloop_plain|NN PERL_CONTEXT *cx
 AiM    |void   |cx_pushloop_for |NN PERL_CONTEXT *cx \
                                 |NN void *itervarp|NULLOK SV *itersave
-AiM    |void   |cx_pushloop_given    |NN PERL_CONTEXT *cx|NULLOK SV *orig_defsv
 AiM    |void   |cx_poploop      |NN PERL_CONTEXT *cx
-AiM    |void   |cx_pushwhereso  |NN PERL_CONTEXT *cx
-AiM    |void   |cx_popwhereso   |NN PERL_CONTEXT *cx
+AiM    |void   |cx_pushwhen     |NN PERL_CONTEXT *cx
+AiM    |void   |cx_popwhen      |NN PERL_CONTEXT *cx
+AiM    |void   |cx_pushgiven    |NN PERL_CONTEXT *cx|NULLOK SV *orig_defsv
+AiM    |void   |cx_popgiven     |NN PERL_CONTEXT *cx
 #endif
 
 #ifdef USE_DTRACE
diff --git a/embed.h b/embed.h
index b491b76..2f2f93a 100644 (file)
--- a/embed.h
+++ b/embed.h
 #define newSVuv(a)             Perl_newSVuv(aTHX_ a)
 #define newUNOP(a,b,c)         Perl_newUNOP(aTHX_ a,b,c)
 #define newUNOP_AUX(a,b,c,d)   Perl_newUNOP_AUX(aTHX_ a,b,c,d)
-#define newWHERESOOP(a,b)      Perl_newWHERESOOP(aTHX_ a,b)
+#define newWHENOP(a,b)         Perl_newWHENOP(aTHX_ a,b)
 #define newWHILEOP(a,b,c,d,e,f,g)      Perl_newWHILEOP(aTHX_ a,b,c,d,e,f,g)
 #define newXS(a,b,c)           Perl_newXS(aTHX_ a,b,c)
 #define newXS_flags(a,b,c,d,e) Perl_newXS_flags(aTHX_ a,b,c,d,e)
 #define cx_popblock(a)         S_cx_popblock(aTHX_ a)
 #define cx_popeval(a)          S_cx_popeval(aTHX_ a)
 #define cx_popformat(a)                S_cx_popformat(aTHX_ a)
+#define cx_popgiven(a)         S_cx_popgiven(aTHX_ a)
 #define cx_poploop(a)          S_cx_poploop(aTHX_ a)
 #define cx_popsub(a)           S_cx_popsub(aTHX_ a)
 #define cx_popsub_args(a)      S_cx_popsub_args(aTHX_ a)
 #define cx_popsub_common(a)    S_cx_popsub_common(aTHX_ a)
-#define cx_popwhereso(a)       S_cx_popwhereso(aTHX_ a)
+#define cx_popwhen(a)          S_cx_popwhen(aTHX_ a)
 #define cx_pushblock(a,b,c,d)  S_cx_pushblock(aTHX_ a,b,c,d)
 #define cx_pusheval(a,b,c)     S_cx_pusheval(aTHX_ a,b,c)
 #define cx_pushformat(a,b,c,d) S_cx_pushformat(aTHX_ a,b,c,d)
+#define cx_pushgiven(a,b)      S_cx_pushgiven(aTHX_ a,b)
 #define cx_pushloop_for(a,b,c) S_cx_pushloop_for(aTHX_ a,b,c)
-#define cx_pushloop_given(a,b) S_cx_pushloop_given(aTHX_ a,b)
 #define cx_pushloop_plain(a)   S_cx_pushloop_plain(aTHX_ a)
 #define cx_pushsub(a,b,c,d)    S_cx_pushsub(aTHX_ a,b,c,d)
-#define cx_pushwhereso(a)      S_cx_pushwhereso(aTHX_ a)
+#define cx_pushwhen(a)         S_cx_pushwhen(aTHX_ a)
 #define cx_topblock(a)         S_cx_topblock(aTHX_ a)
 #endif
 #if defined(DEBUGGING)
 #define ck_sassign(a)          Perl_ck_sassign(aTHX_ a)
 #define ck_select(a)           Perl_ck_select(aTHX_ a)
 #define ck_shift(a)            Perl_ck_shift(aTHX_ a)
+#define ck_smartmatch(a)       Perl_ck_smartmatch(aTHX_ a)
 #define ck_sort(a)             Perl_ck_sort(aTHX_ a)
 #define ck_spair(a)            Perl_ck_spair(aTHX_ a)
 #define ck_split(a)            Perl_ck_split(aTHX_ a)
 #define inplace_aassign(a)     S_inplace_aassign(aTHX_ a)
 #define is_handle_constructor  S_is_handle_constructor
 #define listkids(a)            S_listkids(aTHX_ a)
+#define looks_like_bool(a)     S_looks_like_bool(aTHX_ a)
 #define modkids(a,b)           S_modkids(aTHX_ a,b)
 #define move_proto_attr(a,b,c,d)       S_move_proto_attr(aTHX_ a,b,c,d)
 #define my_kid(a,b,c)          S_my_kid(aTHX_ a,b,c)
+#define newGIVWHENOP(a,b,c,d,e)        S_newGIVWHENOP(aTHX_ a,b,c,d,e)
 #define newMETHOP_internal(a,b,c,d)    S_newMETHOP_internal(aTHX_ a,b,c,d)
 #define new_logop(a,b,c,d)     S_new_logop(aTHX_ a,b,c,d)
 #define no_bareword_allowed(a) S_no_bareword_allowed(aTHX_ a)
 #define optimize_op(a)         S_optimize_op(aTHX_ a)
 #define pmtrans(a,b,c)         S_pmtrans(aTHX_ a,b,c)
 #define process_special_blocks(a,b,c,d)        S_process_special_blocks(aTHX_ a,b,c,d)
+#define ref_array_or_hash(a)   S_ref_array_or_hash(aTHX_ a)
 #define refkids(a,b)           S_refkids(aTHX_ a,b)
 #define scalar_mod_type                S_scalar_mod_type
 #define scalarboolean(a)       S_scalarboolean(aTHX_ a)
 #  endif
 #  if defined(PERL_IN_PP_CTL_C)
 #define check_type_and_open(a) S_check_type_and_open(aTHX_ a)
+#define destroy_matcher(a)     S_destroy_matcher(aTHX_ a)
+#define do_smartmatch(a,b,c)   S_do_smartmatch(aTHX_ a,b,c)
 #define docatch(a)             S_docatch(aTHX_ a)
 #define doeval_compile(a,b,c,d)        S_doeval_compile(aTHX_ a,b,c,d)
 #define dofindlabel(a,b,c,d,e,f)       S_dofindlabel(aTHX_ a,b,c,d,e,f)
 #define doparseform(a)         S_doparseform(aTHX_ a)
 #define dopoptoeval(a)         S_dopoptoeval(aTHX_ a)
+#define dopoptogivenfor(a)     S_dopoptogivenfor(aTHX_ a)
 #define dopoptolabel(a,b,c)    S_dopoptolabel(aTHX_ a,b,c)
 #define dopoptoloop(a)         S_dopoptoloop(aTHX_ a)
 #define dopoptosub_at(a,b)     S_dopoptosub_at(aTHX_ a,b)
-#define dopoptowhereso(a)      S_dopoptowhereso(aTHX_ a)
+#define dopoptowhen(a)         S_dopoptowhen(aTHX_ a)
+#define make_matcher(a)                S_make_matcher(aTHX_ a)
+#define matcher_matches_sv(a,b)        S_matcher_matches_sv(aTHX_ a,b)
 #define num_overflow           S_num_overflow
 #define path_is_searchable     S_path_is_searchable
 #define run_user_filter(a,b,c) S_run_user_filter(aTHX_ a,b,c)
index 86d24a5..ce061e4 100644 (file)
@@ -20,7 +20,7 @@ sub import {
 # walkoptree comes from B.xs
 
 BEGIN {
-    $B::VERSION = '1.73';
+    $B::VERSION = '1.74';
     @B::EXPORT_OK = ();
 
     # Our BOOT code needs $VERSION set, and will append to @EXPORT_OK.
index 893d010..221f292 100644 (file)
@@ -165,7 +165,7 @@ checkOptree(note   => q{},
 # c  <1> rv2av[t6] sKRM/1
 # d  <#> gv[*_] s
 # e  <1> rv2gv sKRM/1
-# f  <{> enteriter(next->q last->t redo->g) KS
+# f  <{> enteriter(next->q last->t redo->g) KS/DEF
 # r  <0> iter s
 # s  <|> and(other->g) K/1
 # g      <;> nextstate(main 475 (eval 10):1) v:{
@@ -198,7 +198,7 @@ EOT_EOT
 # c  <1> rv2av[t3] sKRM/1
 # d  <$> gv(*_) s
 # e  <1> rv2gv sKRM/1
-# f  <{> enteriter(next->q last->t redo->g) KS
+# f  <{> enteriter(next->q last->t redo->g) KS/DEF
 # r  <0> iter s
 # s  <|> and(other->g) K/1
 # g      <;> nextstate(main 559 (eval 15):1) v:{
index a791889..15b5799 100644 (file)
@@ -240,7 +240,7 @@ checkOptree ( name  => '-exec sub { foreach (1..10) {print "foo $_"} }',
 # 3  <$> const[IV 1] s
 # 4  <$> const[IV 10] s
 # 5  <#> gv[*_] s
-# 6  <{> enteriter(next->c last->f redo->7) KS
+# 6  <{> enteriter(next->c last->f redo->7) KS/DEF
 # d  <0> iter s
 # e  <|> and(other->7) K/1
 # 7      <;> nextstate(main 1659 optree_samples.t:234) v:>,<,%
@@ -258,7 +258,7 @@ EOT_EOT
 # 3  <$> const(IV 1) s
 # 4  <$> const(IV 10) s
 # 5  <$> gv(*_) s
-# 6  <{> enteriter(next->c last->f redo->7) KS
+# 6  <{> enteriter(next->c last->f redo->7) KS/DEF
 # d  <0> iter s
 # e  <|> and(other->7) K/1
 # 7      <;> nextstate(main 443 optree_samples.t:182) v:>,<,%
@@ -281,7 +281,7 @@ checkOptree ( name  => '-basic sub { print "foo $_" foreach (1..10) }',
 # -     <@> lineseq KP ->f
 # 1        <;> nextstate(main 445 optree.t:167) v:>,<,% ->2
 # e        <2> leaveloop K/2 ->f
-# 6           <{> enteriter(next->b last->e redo->7) KS ->c
+# 6           <{> enteriter(next->b last->e redo->7) KS/DEF ->c
 # -              <0> ex-pushmark s ->2
 # -              <1> ex-list lK ->5
 # 2                 <0> pushmark s ->3
@@ -305,7 +305,7 @@ EOT_EOT
 # -     <@> lineseq KP ->f
 # 1        <;> nextstate(main 446 optree_samples.t:192) v:>,<,% ->2
 # e        <2> leaveloop K/2 ->f
-# 6           <{> enteriter(next->b last->e redo->7) KS ->c
+# 6           <{> enteriter(next->b last->e redo->7) KS/DEF ->c
 # -              <0> ex-pushmark s ->2
 # -              <1> ex-list lK ->5
 # 2                 <0> pushmark s ->3
@@ -337,7 +337,7 @@ checkOptree ( name  => '-exec -e foreach (1..10) {print qq{foo $_}}',
 # 4  <$> const[IV 1] s
 # 5  <$> const[IV 10] s
 # 6  <#> gv[*_] s
-# 7  <{> enteriter(next->d last->g redo->8) vKS
+# 7  <{> enteriter(next->d last->g redo->8) vKS/DEF
 # e  <0> iter s
 # f  <|> and(other->8) vK/1
 # 8      <;> nextstate(main 1 -e:1) v:>,<,%
@@ -356,7 +356,7 @@ EOT_EOT
 # 4  <$> const(IV 1) s
 # 5  <$> const(IV 10) s
 # 6  <$> gv(*_) s
-# 7  <{> enteriter(next->d last->g redo->8) vKS
+# 7  <{> enteriter(next->d last->g redo->8) vKS/DEF
 # e  <0> iter s
 # f  <|> and(other->8) vK/1
 # 8      <;> nextstate(main 1 -e:1) v:>,<,%
@@ -380,7 +380,7 @@ checkOptree ( name  => '-exec sub { print "foo $_" foreach (1..10) }',
 # 3  <$> const[IV 1] s
 # 4  <$> const[IV 10] s
 # 5  <#> gv[*_] s
-# 6  <{> enteriter(next->b last->e redo->7) KS
+# 6  <{> enteriter(next->b last->e redo->7) KS/DEF
 # c  <0> iter s
 # d  <|> and(other->7) K/1
 # 7      <0> pushmark s
@@ -397,7 +397,7 @@ EOT_EOT
 # 3  <$> const(IV 1) s
 # 4  <$> const(IV 10) s
 # 5  <$> gv(*_) s
-# 6  <{> enteriter(next->b last->e redo->7) KS
+# 6  <{> enteriter(next->b last->e redo->7) KS/DEF
 # c  <0> iter s
 # d  <|> and(other->7) K/1
 # 7      <0> pushmark s
@@ -517,7 +517,7 @@ checkOptree ( name  => '%h=(); for $_(@a){$h{getkey($_)} = $_}',
 # a  <1> rv2av[t6] sKRM/1
 # b  <#> gv[*_] s
 # c  <1> rv2gv sKRM/1
-# d  <{> enteriter(next->o last->r redo->e) KS
+# d  <{> enteriter(next->o last->r redo->e) KS/DEF
 # p  <0> iter s
 # q  <|> and(other->e) K/1
 # e      <;> nextstate(main 505 (eval 24):1) v:{
@@ -547,7 +547,7 @@ EOT_EOT
 # a  <1> rv2av[t3] sKRM/1
 # b  <$> gv(*_) s
 # c  <1> rv2gv sKRM/1
-# d  <{> enteriter(next->o last->r redo->e) KS
+# d  <{> enteriter(next->o last->r redo->e) KS/DEF
 # p  <0> iter s
 # q  <|> and(other->e) K/1
 # e      <;> nextstate(main 505 (eval 24):1) v:{
index e8f429e..9d97ef1 100644 (file)
@@ -6,7 +6,7 @@ use strict;
 
 our($VERSION, @ISA, @EXPORT_OK);
 
-$VERSION = "1.42";
+$VERSION = "1.43";
 
 use Carp;
 use Exporter ();
@@ -426,9 +426,9 @@ These are a hotchpotch of opcodes still waiting to be considered
 
     entertry leavetry -- can be used to 'hide' fatal errors
 
-    entergiven
-    enterwhereso leavewhereso
-    continue
+    entergiven leavegiven
+    enterwhen leavewhen
+    break continue
     smartmatch
 
     custom -- where should this go
index bd0e3da..04b1a90 100644 (file)
@@ -207,7 +207,7 @@ L<perlfunc/"Perl Functions by Category"> section.
 
 =cut
 
-our $VERSION = '1.12';
+our $VERSION = '1.13';
 
 require Exporter;
 
index 2330114..2beccc1 100644 (file)
@@ -113,7 +113,7 @@ Functions for filehandles, files, or directories:
      select, stat, symlink, sysopen, umask, unlink, utime
 
 Keywords related to the control flow of your Perl program:
-     __FILE__, __LINE__, __PACKAGE__, __SUB__, caller,
+     __FILE__, __LINE__, __PACKAGE__, __SUB__, break, caller,
      continue, die, do, dump, eval, evalbytes, exit, goto,
      last, next, redo, return, sub, wantarray
 
diff --git a/gv.c b/gv.c
index 9fd4a8e..00adb89 100644 (file)
--- a/gv.c
+++ b/gv.c
@@ -521,7 +521,7 @@ S_maybe_add_coresub(pTHX_ HV * const stash, GV *gv,
         no support for funcs that do not parse like funcs */
     case KEY___DATA__: case KEY___END__: case KEY_and: case KEY_AUTOLOAD:
     case KEY_BEGIN   : case KEY_CHECK  : case KEY_cmp:
-    case KEY_DESTROY:
+    case KEY_default : case KEY_DESTROY:
     case KEY_do      : case KEY_dump   : case KEY_else  : case KEY_elsif  :
     case KEY_END     : case KEY_eq     : case KEY_eval  :
     case KEY_for     : case KEY_foreach: case KEY_format: case KEY_ge     :
@@ -535,8 +535,7 @@ S_maybe_add_coresub(pTHX_ HV * const stash, GV *gv,
     case KEY_s    : case KEY_say  : case KEY_sort   :
     case KEY_state: case KEY_sub  :
     case KEY_tr   : case KEY_UNITCHECK: case KEY_unless:
-    case KEY_until: case KEY_use  :
-    case KEY_whereis: case KEY_whereso: case KEY_while:
+    case KEY_until: case KEY_use  : case KEY_when     : case KEY_while :
     case KEY_x    : case KEY_xor  : case KEY_y        :
        return NULL;
     case KEY_chdir:
index 18926d3..40c3f89 100644 (file)
--- a/inline.h
+++ b/inline.h
@@ -1813,17 +1813,6 @@ S_cx_pushloop_for(pTHX_ PERL_CONTEXT *cx, void *itervarp, SV* itersave)
 }
 
 
-PERL_STATIC_INLINE void
-S_cx_pushloop_given(pTHX_ PERL_CONTEXT *cx, SV *orig_defsv)
-{
-    PERL_ARGS_ASSERT_CX_PUSHLOOP_GIVEN;
-
-    cx->blk_loop.my_op = cLOOP;
-    cx->blk_loop.itervar_u.gv = PL_defgv;
-    cx->blk_loop.itersave = orig_defsv;
-}
-
-
 /* pop all loop types, including plain */
 
 PERL_STATIC_INLINE void
@@ -1860,19 +1849,19 @@ S_cx_poploop(pTHX_ PERL_CONTEXT *cx)
 
 
 PERL_STATIC_INLINE void
-S_cx_pushwhereso(pTHX_ PERL_CONTEXT *cx)
+S_cx_pushwhen(pTHX_ PERL_CONTEXT *cx)
 {
-    PERL_ARGS_ASSERT_CX_PUSHWHERESO;
+    PERL_ARGS_ASSERT_CX_PUSHWHEN;
 
-    cx->blk_whereso.leave_op = cLOGOP->op_other;
+    cx->blk_givwhen.leave_op = cLOGOP->op_other;
 }
 
 
 PERL_STATIC_INLINE void
-S_cx_popwhereso(pTHX_ PERL_CONTEXT *cx)
+S_cx_popwhen(pTHX_ PERL_CONTEXT *cx)
 {
-    PERL_ARGS_ASSERT_CX_POPWHERESO;
-    assert(CxTYPE(cx) == CXt_WHERESO);
+    PERL_ARGS_ASSERT_CX_POPWHEN;
+    assert(CxTYPE(cx) == CXt_WHEN);
 
     PERL_UNUSED_ARG(cx);
     PERL_UNUSED_CONTEXT;
@@ -1880,6 +1869,30 @@ S_cx_popwhereso(pTHX_ PERL_CONTEXT *cx)
 }
 
 
+PERL_STATIC_INLINE void
+S_cx_pushgiven(pTHX_ PERL_CONTEXT *cx, SV *orig_defsv)
+{
+    PERL_ARGS_ASSERT_CX_PUSHGIVEN;
+
+    cx->blk_givwhen.leave_op = cLOGOP->op_other;
+    cx->blk_givwhen.defsv_save = orig_defsv;
+}
+
+
+PERL_STATIC_INLINE void
+S_cx_popgiven(pTHX_ PERL_CONTEXT *cx)
+{
+    SV *sv;
+
+    PERL_ARGS_ASSERT_CX_POPGIVEN;
+    assert(CxTYPE(cx) == CXt_GIVEN);
+
+    sv = GvSV(PL_defgv);
+    GvSV(PL_defgv) = cx->blk_givwhen.defsv_save;
+    cx->blk_givwhen.defsv_save = NULL;
+    SvREFCNT_dec(sv);
+}
+
 /* ------------------ util.h ------------------------------------------- */
 
 /*
index 23e6145..9fa30e6 100644 (file)
@@ -488,7 +488,7 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords)
           goto unknown;
       }
 
-    case 4: /* 39 tokens of length 4 */
+    case 4: /* 40 tokens of length 4 */
       switch (name[0])
       {
         case 'I':
@@ -908,38 +908,49 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords)
           }
 
         case 'w':
-          if (name[1] == 'a')
+          switch (name[1])
           {
-            switch (name[2])
-            {
-              case 'i':
-                if (name[3] == 't')
-                {                                 /* wait             */
-                  return -KEY_wait;
-                }
+            case 'a':
+              switch (name[2])
+              {
+                case 'i':
+                  if (name[3] == 't')
+                  {                               /* wait             */
+                    return -KEY_wait;
+                  }
 
-                goto unknown;
+                  goto unknown;
 
-              case 'r':
-                if (name[3] == 'n')
-                {                                 /* warn             */
-                  return -KEY_warn;
-                }
+                case 'r':
+                  if (name[3] == 'n')
+                  {                               /* warn             */
+                    return -KEY_warn;
+                  }
 
-                goto unknown;
+                  goto unknown;
 
-              default:
-                goto unknown;
-            }
-          }
+                default:
+                  goto unknown;
+              }
 
-          goto unknown;
+            case 'h':
+              if (name[2] == 'e' &&
+                  name[3] == 'n')
+              {                                   /* when             */
+                return (all_keywords || FEATURE_SWITCH_IS_ENABLED ? KEY_when : 0);
+              }
+
+              goto unknown;
+
+            default:
+              goto unknown;
+          }
 
         default:
           goto unknown;
       }
 
-    case 5: /* 38 tokens of length 5 */
+    case 5: /* 39 tokens of length 5 */
       switch (name[0])
       {
         case 'B':
@@ -992,15 +1003,31 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords)
           }
 
         case 'b':
-          if (name[1] == 'l' &&
-              name[2] == 'e' &&
-              name[3] == 's' &&
-              name[4] == 's')
-          {                                       /* bless            */
-            return -KEY_bless;
-          }
+          switch (name[1])
+          {
+            case 'l':
+              if (name[2] == 'e' &&
+                  name[3] == 's' &&
+                  name[4] == 's')
+              {                                   /* bless            */
+                return -KEY_bless;
+              }
 
-          goto unknown;
+              goto unknown;
+
+            case 'r':
+              if (name[2] == 'e' &&
+                  name[3] == 'a' &&
+                  name[4] == 'k')
+              {                                   /* break            */
+                return (all_keywords || FEATURE_SWITCH_IS_ENABLED ? -KEY_break : 0);
+              }
+
+              goto unknown;
+
+            default:
+              goto unknown;
+          }
 
         case 'c':
           switch (name[1])
@@ -1876,7 +1903,7 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords)
           goto unknown;
       }
 
-    case 7: /* 31 tokens of length 7 */
+    case 7: /* 30 tokens of length 7 */
       switch (name[0])
       {
         case 'D':
@@ -1968,13 +1995,33 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords)
               goto unknown;
 
             case 'e':
-              if (name[2] == 'f' &&
-                  name[3] == 'i' &&
-                  name[4] == 'n' &&
-                  name[5] == 'e' &&
-                  name[6] == 'd')
-              {                                   /* defined          */
-                return KEY_defined;
+              if (name[2] == 'f')
+              {
+                switch (name[3])
+                {
+                  case 'a':
+                    if (name[4] == 'u' &&
+                        name[5] == 'l' &&
+                        name[6] == 't')
+                    {                             /* default          */
+                      return (all_keywords || FEATURE_SWITCH_IS_ENABLED ? KEY_default : 0);
+                    }
+
+                    goto unknown;
+
+                  case 'i':
+                    if (name[4] == 'n' &&
+                        name[5] == 'e' &&
+                        name[6] == 'd')
+                    {                             /* defined          */
+                      return KEY_defined;
+                    }
+
+                    goto unknown;
+
+                  default:
+                    goto unknown;
+                }
               }
 
               goto unknown;
@@ -2282,54 +2329,18 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords)
           }
 
         case 'w':
-          switch (name[1])
-          {
-            case 'a':
-              if (name[2] == 'i' &&
-                  name[3] == 't' &&
-                  name[4] == 'p' &&
-                  name[5] == 'i' &&
-                  name[6] == 'd')
-              {                                   /* waitpid          */
-                return -KEY_waitpid;
-              }
-
-              goto unknown;
-
-            case 'h':
-              if (name[2] == 'e' &&
-                  name[3] == 'r' &&
-                  name[4] == 'e')
-              {
-                switch (name[5])
-                {
-                  case 'i':
-                    if (name[6] == 's')
-                    {                             /* whereis          */
-                      return (all_keywords || FEATURE_SWITCH_IS_ENABLED ? KEY_whereis : 0);
-                    }
-
-                    goto unknown;
-
-                  case 's':
-                    if (name[6] == 'o')
-                    {                             /* whereso          */
-                      return (all_keywords || FEATURE_SWITCH_IS_ENABLED ? KEY_whereso : 0);
-                    }
-
-                    goto unknown;
-
-                  default:
-                    goto unknown;
-                }
-              }
-
-              goto unknown;
-
-            default:
-              goto unknown;
+          if (name[1] == 'a' &&
+              name[2] == 'i' &&
+              name[3] == 't' &&
+              name[4] == 'p' &&
+              name[5] == 'i' &&
+              name[6] == 'd')
+          {                                       /* waitpid          */
+            return -KEY_waitpid;
           }
 
+          goto unknown;
+
         default:
           goto unknown;
       }
@@ -3426,5 +3437,5 @@ unknown:
 }
 
 /* Generated from:
- * b2741ab99701d1c72b58afb96a9f210532b6f6ce81aacdf5188a4871c16ee239 regen/keywords.pl
+ * db0472e0ad4f44bd0816cad799d63b60d1bbd7e11cef40ea15bf0d00f69669f6 regen/keywords.pl
  * ex: set ro: */
index d65879a..2b1d598 100644 (file)
 #define KEY_bind               19
 #define KEY_binmode            20
 #define KEY_bless              21
-#define KEY_caller             22
-#define KEY_chdir              23
-#define KEY_chmod              24
-#define KEY_chomp              25
-#define KEY_chop               26
-#define KEY_chown              27
-#define KEY_chr                        28
-#define KEY_chroot             29
-#define KEY_close              30
-#define KEY_closedir           31
-#define KEY_cmp                        32
-#define KEY_connect            33
-#define KEY_continue           34
-#define KEY_cos                        35
-#define KEY_crypt              36
-#define KEY_dbmclose           37
-#define KEY_dbmopen            38
-#define KEY_defined            39
-#define KEY_delete             40
-#define KEY_die                        41
-#define KEY_do                 42
-#define KEY_dump               43
-#define KEY_each               44
-#define KEY_else               45
-#define KEY_elsif              46
-#define KEY_endgrent           47
-#define KEY_endhostent         48
-#define KEY_endnetent          49
-#define KEY_endprotoent                50
-#define KEY_endpwent           51
-#define KEY_endservent         52
-#define KEY_eof                        53
-#define KEY_eq                 54
-#define KEY_eval               55
-#define KEY_evalbytes          56
-#define KEY_exec               57
-#define KEY_exists             58
-#define KEY_exit               59
-#define KEY_exp                        60
-#define KEY_fc                 61
-#define KEY_fcntl              62
-#define KEY_fileno             63
-#define KEY_flock              64
-#define KEY_for                        65
-#define KEY_foreach            66
-#define KEY_fork               67
-#define KEY_format             68
-#define KEY_formline           69
-#define KEY_ge                 70
-#define KEY_getc               71
-#define KEY_getgrent           72
-#define KEY_getgrgid           73
-#define KEY_getgrnam           74
-#define KEY_gethostbyaddr      75
-#define KEY_gethostbyname      76
-#define KEY_gethostent         77
-#define KEY_getlogin           78
-#define KEY_getnetbyaddr       79
-#define KEY_getnetbyname       80
-#define KEY_getnetent          81
-#define KEY_getpeername                82
-#define KEY_getpgrp            83
-#define KEY_getppid            84
-#define KEY_getpriority                85
-#define KEY_getprotobyname     86
-#define KEY_getprotobynumber   87
-#define KEY_getprotoent                88
-#define KEY_getpwent           89
-#define KEY_getpwnam           90
-#define KEY_getpwuid           91
-#define KEY_getservbyname      92
-#define KEY_getservbyport      93
-#define KEY_getservent         94
-#define KEY_getsockname                95
-#define KEY_getsockopt         96
-#define KEY_given              97
-#define KEY_glob               98
-#define KEY_gmtime             99
-#define KEY_goto               100
-#define KEY_grep               101
-#define KEY_gt                 102
-#define KEY_hex                        103
-#define KEY_if                 104
-#define KEY_index              105
-#define KEY_int                        106
-#define KEY_ioctl              107
-#define KEY_join               108
-#define KEY_keys               109
-#define KEY_kill               110
-#define KEY_last               111
-#define KEY_lc                 112
-#define KEY_lcfirst            113
-#define KEY_le                 114
-#define KEY_length             115
-#define KEY_link               116
-#define KEY_listen             117
-#define KEY_local              118
-#define KEY_localtime          119
-#define KEY_lock               120
-#define KEY_log                        121
-#define KEY_lstat              122
-#define KEY_lt                 123
-#define KEY_m                  124
-#define KEY_map                        125
-#define KEY_mkdir              126
-#define KEY_msgctl             127
-#define KEY_msgget             128
-#define KEY_msgrcv             129
-#define KEY_msgsnd             130
-#define KEY_my                 131
-#define KEY_ne                 132
-#define KEY_next               133
-#define KEY_no                 134
-#define KEY_not                        135
-#define KEY_oct                        136
-#define KEY_open               137
-#define KEY_opendir            138
-#define KEY_or                 139
-#define KEY_ord                        140
-#define KEY_our                        141
-#define KEY_pack               142
-#define KEY_package            143
-#define KEY_pipe               144
-#define KEY_pop                        145
-#define KEY_pos                        146
-#define KEY_print              147
-#define KEY_printf             148
-#define KEY_prototype          149
-#define KEY_push               150
-#define KEY_q                  151
-#define KEY_qq                 152
-#define KEY_qr                 153
-#define KEY_quotemeta          154
-#define KEY_qw                 155
-#define KEY_qx                 156
-#define KEY_rand               157
-#define KEY_read               158
-#define KEY_readdir            159
-#define KEY_readline           160
-#define KEY_readlink           161
-#define KEY_readpipe           162
-#define KEY_recv               163
-#define KEY_redo               164
-#define KEY_ref                        165
-#define KEY_rename             166
-#define KEY_require            167
-#define KEY_reset              168
-#define KEY_return             169
-#define KEY_reverse            170
-#define KEY_rewinddir          171
-#define KEY_rindex             172
-#define KEY_rmdir              173
-#define KEY_s                  174
-#define KEY_say                        175
-#define KEY_scalar             176
-#define KEY_seek               177
-#define KEY_seekdir            178
-#define KEY_select             179
-#define KEY_semctl             180
-#define KEY_semget             181
-#define KEY_semop              182
-#define KEY_send               183
-#define KEY_setgrent           184
-#define KEY_sethostent         185
-#define KEY_setnetent          186
-#define KEY_setpgrp            187
-#define KEY_setpriority                188
-#define KEY_setprotoent                189
-#define KEY_setpwent           190
-#define KEY_setservent         191
-#define KEY_setsockopt         192
-#define KEY_shift              193
-#define KEY_shmctl             194
-#define KEY_shmget             195
-#define KEY_shmread            196
-#define KEY_shmwrite           197
-#define KEY_shutdown           198
-#define KEY_sin                        199
-#define KEY_sleep              200
-#define KEY_socket             201
-#define KEY_socketpair         202
-#define KEY_sort               203
-#define KEY_splice             204
-#define KEY_split              205
-#define KEY_sprintf            206
-#define KEY_sqrt               207
-#define KEY_srand              208
-#define KEY_stat               209
-#define KEY_state              210
-#define KEY_study              211
-#define KEY_sub                        212
-#define KEY_substr             213
-#define KEY_symlink            214
-#define KEY_syscall            215
-#define KEY_sysopen            216
-#define KEY_sysread            217
-#define KEY_sysseek            218
-#define KEY_system             219
-#define KEY_syswrite           220
-#define KEY_tell               221
-#define KEY_telldir            222
-#define KEY_tie                        223
-#define KEY_tied               224
-#define KEY_time               225
-#define KEY_times              226
-#define KEY_tr                 227
-#define KEY_truncate           228
-#define KEY_uc                 229
-#define KEY_ucfirst            230
-#define KEY_umask              231
-#define KEY_undef              232
-#define KEY_unless             233
-#define KEY_unlink             234
-#define KEY_unpack             235
-#define KEY_unshift            236
-#define KEY_untie              237
-#define KEY_until              238
-#define KEY_use                        239
-#define KEY_utime              240
-#define KEY_values             241
-#define KEY_vec                        242
-#define KEY_wait               243
-#define KEY_waitpid            244
-#define KEY_wantarray          245
-#define KEY_warn               246
-#define KEY_whereis            247
-#define KEY_whereso            248
-#define KEY_while              249
-#define KEY_write              250
-#define KEY_x                  251
-#define KEY_xor                        252
-#define KEY_y                  253
+#define KEY_break              22
+#define KEY_caller             23
+#define KEY_chdir              24
+#define KEY_chmod              25
+#define KEY_chomp              26
+#define KEY_chop               27
+#define KEY_chown              28
+#define KEY_chr                        29
+#define KEY_chroot             30
+#define KEY_close              31
+#define KEY_closedir           32
+#define KEY_cmp                        33
+#define KEY_connect            34
+#define KEY_continue           35
+#define KEY_cos                        36
+#define KEY_crypt              37
+#define KEY_dbmclose           38
+#define KEY_dbmopen            39
+#define KEY_default            40
+#define KEY_defined            41
+#define KEY_delete             42
+#define KEY_die                        43
+#define KEY_do                 44
+#define KEY_dump               45
+#define KEY_each               46
+#define KEY_else               47
+#define KEY_elsif              48
+#define KEY_endgrent           49
+#define KEY_endhostent         50
+#define KEY_endnetent          51
+#define KEY_endprotoent                52
+#define KEY_endpwent           53
+#define KEY_endservent         54
+#define KEY_eof                        55
+#define KEY_eq                 56
+#define KEY_eval               57
+#define KEY_evalbytes          58
+#define KEY_exec               59
+#define KEY_exists             60
+#define KEY_exit               61
+#define KEY_exp                        62
+#define KEY_fc                 63
+#define KEY_fcntl              64
+#define KEY_fileno             65
+#define KEY_flock              66
+#define KEY_for                        67
+#define KEY_foreach            68
+#define KEY_fork               69
+#define KEY_format             70
+#define KEY_formline           71
+#define KEY_ge                 72
+#define KEY_getc               73
+#define KEY_getgrent           74
+#define KEY_getgrgid           75
+#define KEY_getgrnam           76
+#define KEY_gethostbyaddr      77
+#define KEY_gethostbyname      78
+#define KEY_gethostent         79
+#define KEY_getlogin           80
+#define KEY_getnetbyaddr       81
+#define KEY_getnetbyname       82
+#define KEY_getnetent          83
+#define KEY_getpeername                84
+#define KEY_getpgrp            85
+#define KEY_getppid            86
+#define KEY_getpriority                87
+#define KEY_getprotobyname     88
+#define KEY_getprotobynumber   89
+#define KEY_getprotoent                90
+#define KEY_getpwent           91
+#define KEY_getpwnam           92
+#define KEY_getpwuid           93
+#define KEY_getservbyname      94
+#define KEY_getservbyport      95
+#define KEY_getservent         96
+#define KEY_getsockname                97
+#define KEY_getsockopt         98
+#define KEY_given              99
+#define KEY_glob               100
+#define KEY_gmtime             101
+#define KEY_goto               102
+#define KEY_grep               103
+#define KEY_gt                 104
+#define KEY_hex                        105
+#define KEY_if                 106
+#define KEY_index              107
+#define KEY_int                        108
+#define KEY_ioctl              109
+#define KEY_join               110
+#define KEY_keys               111
+#define KEY_kill               112
+#define KEY_last               113
+#define KEY_lc                 114
+#define KEY_lcfirst            115
+#define KEY_le                 116
+#define KEY_length             117
+#define KEY_link               118
+#define KEY_listen             119
+#define KEY_local              120
+#define KEY_localtime          121
+#define KEY_lock               122
+#define KEY_log                        123
+#define KEY_lstat              124
+#define KEY_lt                 125
+#define KEY_m                  126
+#define KEY_map                        127
+#define KEY_mkdir              128
+#define KEY_msgctl             129
+#define KEY_msgget             130
+#define KEY_msgrcv             131
+#define KEY_msgsnd             132
+#define KEY_my                 133
+#define KEY_ne                 134
+#define KEY_next               135
+#define KEY_no                 136
+#define KEY_not                        137
+#define KEY_oct                        138
+#define KEY_open               139
+#define KEY_opendir            140
+#define KEY_or                 141
+#define KEY_ord                        142
+#define KEY_our                        143
+#define KEY_pack               144
+#define KEY_package            145
+#define KEY_pipe               146
+#define KEY_pop                        147
+#define KEY_pos                        148
+#define KEY_print              149
+#define KEY_printf             150
+#define KEY_prototype          151
+#define KEY_push               152
+#define KEY_q                  153
+#define KEY_qq                 154
+#define KEY_qr                 155
+#define KEY_quotemeta          156
+#define KEY_qw                 157
+#define KEY_qx                 158
+#define KEY_rand               159
+#define KEY_read               160
+#define KEY_readdir            161
+#define KEY_readline           162
+#define KEY_readlink           163
+#define KEY_readpipe           164
+#define KEY_recv               165
+#define KEY_redo               166
+#define KEY_ref                        167
+#define KEY_rename             168
+#define KEY_require            169
+#define KEY_reset              170
+#define KEY_return             171
+#define KEY_reverse            172
+#define KEY_rewinddir          173
+#define KEY_rindex             174
+#define KEY_rmdir              175
+#define KEY_s                  176
+#define KEY_say                        177
+#define KEY_scalar             178
+#define KEY_seek               179
+#define KEY_seekdir            180
+#define KEY_select             181
+#define KEY_semctl             182
+#define KEY_semget             183
+#define KEY_semop              184
+#define KEY_send               185
+#define KEY_setgrent           186
+#define KEY_sethostent         187
+#define KEY_setnetent          188
+#define KEY_setpgrp            189
+#define KEY_setpriority                190
+#define KEY_setprotoent                191
+#define KEY_setpwent           192
+#define KEY_setservent         193
+#define KEY_setsockopt         194
+#define KEY_shift              195
+#define KEY_shmctl             196
+#define KEY_shmget             197
+#define KEY_shmread            198
+#define KEY_shmwrite           199
+#define KEY_shutdown           200
+#define KEY_sin                        201
+#define KEY_sleep              202
+#define KEY_socket             203
+#define KEY_socketpair         204
+#define KEY_sort               205
+#define KEY_splice             206
+#define KEY_split              207
+#define KEY_sprintf            208
+#define KEY_sqrt               209
+#define KEY_srand              210
+#define KEY_stat               211
+#define KEY_state              212
+#define KEY_study              213
+#define KEY_sub                        214
+#define KEY_substr             215
+#define KEY_symlink            216
+#define KEY_syscall            217
+#define KEY_sysopen            218
+#define KEY_sysread            219
+#define KEY_sysseek            220
+#define KEY_system             221
+#define KEY_syswrite           222
+#define KEY_tell               223
+#define KEY_telldir            224
+#define KEY_tie                        225
+#define KEY_tied               226
+#define KEY_time               227
+#define KEY_times              228
+#define KEY_tr                 229
+#define KEY_truncate           230
+#define KEY_uc                 231
+#define KEY_ucfirst            232
+#define KEY_umask              233
+#define KEY_undef              234
+#define KEY_unless             235
+#define KEY_unlink             236
+#define KEY_unpack             237
+#define KEY_unshift            238
+#define KEY_untie              239
+#define KEY_until              240
+#define KEY_use                        241
+#define KEY_utime              242
+#define KEY_values             243
+#define KEY_vec                        244
+#define KEY_wait               245
+#define KEY_waitpid            246
+#define KEY_wantarray          247
+#define KEY_warn               248
+#define KEY_when               249
+#define KEY_while              250
+#define KEY_write              251
+#define KEY_x                  252
+#define KEY_xor                        253
+#define KEY_y                  254
 
 /* Generated from:
- * b2741ab99701d1c72b58afb96a9f210532b6f6ce81aacdf5188a4871c16ee239 regen/keywords.pl
+ * db0472e0ad4f44bd0816cad799d63b60d1bbd7e11cef40ea15bf0d00f69669f6 regen/keywords.pl
  * ex: set ro: */
index 4071e5e..6ee935f 100644 (file)
@@ -36,7 +36,7 @@ BEGIN {
 
 use strict;
 use Test::More;
-plan tests => 3874;
+plan tests => 3886;
 
 use feature (sprintf(":%vd", $^V)); # to avoid relying on the feature
                                     # logic to add CORE::
@@ -381,8 +381,7 @@ my %not_tested = map { $_ => 1} qw(
     unless
     until
     use
-    whereis
-    whereso
+    when
     while
     y
 );
@@ -465,6 +464,7 @@ atan2            2     p
 bind             2     p
 binmode          12    p
 bless            1     p
+break            0     -
 caller           0     -
 chdir            01    -
 chmod            @     p1
index d10e6a0..86f262a 100644 (file)
@@ -52,7 +52,7 @@ use B qw(class main_root main_start main_cv svref_2object opnumber perlstring
         MDEREF_SHIFT
     );
 
-$VERSION = '1.46';
+$VERSION = '1.47';
 use strict;
 our $AUTOLOAD;
 use warnings ();
@@ -2267,8 +2267,9 @@ my %feature_keywords = (
     state   => 'state',
     say     => 'say',
     given   => 'switch',
-    whereis => 'switch',
-    whereso => 'switch',
+    when    => 'switch',
+    default => 'switch',
+    break   => 'switch',
     evalbytes=>'evalbytes',
     __SUB__ => '__SUB__',
    fc       => 'fc',
@@ -2560,31 +2561,33 @@ sub pp_ggrgid { unop(@_, "getgrgid") }
 sub pp_lock { unop(@_, "lock") }
 
 sub pp_continue { unop(@_, "continue"); }
+sub pp_break { unop(@_, "break"); }
 
-sub _op_is_defsv {
-    my($self, $op) = @_;
-    $op->name eq "null" && !null($op->first) && null($op->first->sibling)
-       and $op = $op->first;
-    $op->name eq "gvsv" && $self->gv_name($self->gv_or_padgv($op)) eq "_";
-}
+sub givwhen {
+    my $self = shift;
+    my($op, $cx, $givwhen) = @_;
 
-sub pp_leavewhereso {
-    my($self, $op, $cx) = @_;
     my $enterop = $op->first;
-    my $cond = $enterop->first;
-    my $block = $cond->sibling;
-    my $keyword = "whereso";
-    if ($cond->name eq "smartmatch" && $self->{expand} < 2 &&
-               $self->_op_is_defsv($cond->first)) {
-       $cond = $cond->last;
-       $keyword = "whereis";
+    my ($head, $block);
+    if ($enterop->flags & OPf_SPECIAL) {
+       $head = $self->keyword("default");
+       $block = $self->deparse($enterop->first, 0);
     }
-    my $cond_str = $self->deparse($cond, 1);
-    $keyword = $self->keyword($keyword);
-    $block = $self->deparse($block, 0);
-    return "$keyword ($cond_str) {\n\t$block\n\b}\cK";
+    else {
+       my $cond = $enterop->first;
+       my $cond_str = $self->deparse($cond, 1);
+       $head = "$givwhen ($cond_str)";
+       $block = $self->deparse($cond->sibling, 0);
+    }
+
+    return "$head {\n".
+       "\t$block\n".
+       "\b}\cK";
 }
 
+sub pp_leavegiven { givwhen(@_, $_[0]->keyword("given")); }
+sub pp_leavewhen  { givwhen(@_, $_[0]->keyword("when")); }
+
 sub pp_exists {
     my $self = shift;
     my($op, $cx) = @_;
@@ -3019,7 +3022,6 @@ sub pp_i_ge { binop(@_, ">=", 15) }
 sub pp_i_le { binop(@_, "<=", 15) }
 sub pp_i_ncmp { maybe_targmy(@_, \&binop, "<=>", 14) }
 
-sub pp_smartmatch { binop(@_, "~~", 14) }
 sub pp_seq { binop(@_, "eq", 14) }
 sub pp_sne { binop(@_, "ne", 14) }
 sub pp_slt { binop(@_, "lt", 15) }
@@ -3031,6 +3033,16 @@ sub pp_scmp { maybe_targmy(@_, \&binop, "cmp", 14) }
 sub pp_sassign { binop(@_, "=", 7, SWAP_CHILDREN) }
 sub pp_aassign { binop(@_, "=", 7, SWAP_CHILDREN | LIST_CONTEXT) }
 
+sub pp_smartmatch {
+    my ($self, $op, $cx) = @_;
+    if (($op->flags & OPf_SPECIAL) && $self->{expand} < 2) {
+       return $self->deparse($op->last, $cx);
+    }
+    else {
+       binop(@_, "~~", 14);
+    }
+}
+
 # '.' is special because concats-of-concats are optimized to save copying
 # by making all but the first concat stacked. The effect is as if the
 # programmer had written '($a . $b) .= $c', except legal.
@@ -3834,13 +3846,6 @@ sub loop_common {
            $bare = 1;
        }
        $body = $kid;
-    } elsif ($enter->name eq "entergiven") { # given
-       my $given = $self->keyword("given");
-       my $enterop = $op->first;
-       my $topic = $enterop->first;
-       my $topic_str = $self->deparse($topic, 1);
-       my $block = $self->deparse($topic->sibling, 0);
-       return "$given ($topic_str) {\n\t$block\n\b}\cK";
     } elsif ($enter->name eq "enteriter") { # foreach
        my $ary = $enter->first->sibling; # first was pushmark
        my $var = $ary->sibling;
index 576cd74..00fbb01 100644 (file)
@@ -1039,14 +1039,13 @@ my $b = \{};
 my $c = [];
 my $d = \[];
 ####
-# SKIP ?$] < 5.010 && "smartmatch and given/whereso not implemented on this Perl version"
+# SKIP ?$] < 5.010 && "smartmatch and given/when not implemented on this Perl version"
 # CONTEXT use feature ':5.10'; no warnings 'experimental::smartmatch';
-# implicit smartmatch in given/whereso
+# implicit smartmatch in given/when
 given ('foo') {
-    whereso ('bar') { continue; }
-    whereso ($_ == 3) { continue; }
-    whereis ('quux') { continue; }
-    0;
+    when ('bar') { continue; }
+    when ($_ ~~ 'quux') { continue; }
+    default { 0; }
 }
 ####
 # conditions in elsifs (regression in change #33710 which fixed bug #37302)
@@ -1528,13 +1527,12 @@ $a[0] = 1;
 CORE::state $x;
 CORE::say $x;
 CORE::given ($x) {
-    CORE::whereso (3) {
+    CORE::when (3) {
         continue;
     }
-    CORE::whereis (5) {
-        continue;
+    CORE::default {
+        CORE::break;
     }
-    next;
 }
 CORE::evalbytes '';
 () = CORE::__SUB__;
@@ -1547,13 +1545,12 @@ use 1;
 CORE::say $_;
 CORE::state $x;
 CORE::given ($x) {
-    CORE::whereso (3) {
+    CORE::when (3) {
         continue;
     }
-    CORE::whereis (5) {
-        continue;
+    CORE::default {
+        CORE::break;
     }
-    next;
 }
 CORE::evalbytes '';
 () = CORE::__SUB__;
@@ -1561,13 +1558,12 @@ CORE::evalbytes '';
 CORE::say $_;
 CORE::state $x;
 CORE::given ($x) {
-    CORE::whereso (3) {
+    CORE::when (3) {
         continue;
     }
-    CORE::whereis (5) {
-        continue;
+    CORE::default {
+        CORE::break;
     }
-    next;
 }
 CORE::evalbytes '';
 () = CORE::__SUB__;
@@ -1580,13 +1576,12 @@ use 1;
 CORE::say $_;
 CORE::state $x;
 CORE::given ($x) {
-    CORE::whereso (3) {
+    CORE::when (3) {
         continue;
     }
-    CORE::whereis (5) {
-        continue;
+    CORE::default {
+        CORE::break;
     }
-    next;
 }
 CORE::evalbytes '';
 () = CORE::__SUB__;
@@ -1596,13 +1591,12 @@ use feature ':default';
 CORE::say $_;
 CORE::state $x;
 CORE::given ($x) {
-    CORE::whereso (3) {
+    CORE::when (3) {
         continue;
     }
-    CORE::whereis (5) {
-        continue;
+    CORE::default {
+        CORE::break;
     }
-    next;
 }
 CORE::evalbytes '';
 () = CORE::__SUB__;
@@ -1610,6 +1604,7 @@ CORE::evalbytes '';
 # SKIP ?$] < 5.017004 && "lexical subs not implemented on this Perl version"
 # lexical subroutines and keywords of the same name
 # CONTEXT use feature 'lexical_subs', 'switch'; no warnings 'experimental';
+my sub default;
 my sub else;
 my sub elsif;
 my sub for;
@@ -1630,9 +1625,9 @@ my sub tr;
 my sub unless;
 my sub until;
 my sub use;
-my sub whereis;
-my sub whereso;
+my sub when;
 my sub while;
+CORE::default { die; }
 CORE::if ($1) { die; }
 CORE::if ($1) { die; }
 CORE::elsif ($1) { die; }
@@ -1654,8 +1649,7 @@ CORE::unless ($1) { die; }
 CORE::until ($1) { die; }
 die CORE::until $1;
 CORE::use strict;
-CORE::whereis (5) { die; }
-CORE::whereso ($1 ~~ $2) { die; }
+CORE::when ($1 ~~ $2) { die; }
 CORE::while ($1) { die; }
 die CORE::while $1;
 ####
index 1bf9c57..25e9a8c 100644 (file)
@@ -304,9 +304,11 @@ $bits{dorassign}{0} = $bf[0];
 $bits{dump}{0} = $bf[0];
 $bits{each}{0} = $bf[0];
 @{$bits{entereval}}{5,4,3,2,1,0} = ('OPpEVAL_RE_REPARSING', 'OPpEVAL_COPHH', 'OPpEVAL_BYTES', 'OPpEVAL_UNICODE', 'OPpEVAL_HAS_HH', $bf[0]);
+$bits{entergiven}{0} = $bf[0];
+$bits{enteriter}{3} = 'OPpITER_DEF';
 @{$bits{entersub}}{5,4,0} = ($bf[8], $bf[8], 'OPpENTERSUB_INARGS');
 $bits{entertry}{0} = $bf[0];
-$bits{enterwhereso}{0} = $bf[0];
+$bits{enterwhen}{0} = $bf[0];
 @{$bits{enterwrite}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]);
 @{$bits{eof}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]);
 @{$bits{eq}}{1,0} = ($bf[1], $bf[1]);
@@ -405,10 +407,11 @@ $bits{lc}{0} = $bf[0];
 $bits{lcfirst}{0} = $bf[0];
 @{$bits{le}}{1,0} = ($bf[1], $bf[1]);
 $bits{leaveeval}{0} = $bf[0];
+$bits{leavegiven}{0} = $bf[0];
 @{$bits{leaveloop}}{1,0} = ($bf[1], $bf[1]);
 $bits{leavesub}{0} = $bf[0];
 $bits{leavesublv}{0} = $bf[0];
-$bits{leavewhereso}{0} = $bf[0];
+$bits{leavewhen}{0} = $bf[0];
 $bits{leavewrite}{0} = $bf[0];
 @{$bits{left_shift}}{1,0} = ($bf[1], $bf[1]);
 $bits{length}{0} = $bf[0];
@@ -632,6 +635,7 @@ our %defines = (
     OPpHINT_STRICT_REFS      =>   2,
     OPpHUSH_VMSISH           =>  32,
     OPpINDEX_BOOLNEG         =>  64,
+    OPpITER_DEF              =>   8,
     OPpITER_REVERSED         =>   2,
     OPpKVSLICE               =>  32,
     OPpLIST_GUESSED          =>  64,
@@ -737,6 +741,7 @@ our %labels = (
     OPpHINT_STRICT_REFS      => 'STRICT',
     OPpHUSH_VMSISH           => 'HUSH',
     OPpINDEX_BOOLNEG         => 'NEG',
+    OPpITER_DEF              => 'DEF',
     OPpITER_REVERSED         => 'REVERSED',
     OPpKVSLICE               => 'KVSLICE',
     OPpLIST_GUESSED          => 'GUESSED',
@@ -814,6 +819,7 @@ our %ops_using = (
     OPpHINT_STRICT_REFS      => [qw(entersub multideref rv2av rv2cv rv2gv rv2hv rv2sv)],
     OPpHUSH_VMSISH           => [qw(dbstate nextstate)],
     OPpINDEX_BOOLNEG         => [qw(index rindex)],
+    OPpITER_DEF              => [qw(enteriter)],
     OPpITER_REVERSED         => [qw(enteriter iter)],
     OPpKVSLICE               => [qw(delete)],
     OPpLIST_GUESSED          => [qw(list)],
index e9cf2f7..70df619 100644 (file)
@@ -5,7 +5,7 @@
 
 package feature;
 
-our $VERSION = '1.50';
+our $VERSION = '1.51';
 
 our %feature = (
     fc              => 'feature_fc',
@@ -151,7 +151,7 @@ explicitly disabled the warning:
 
     no warnings "experimental::smartmatch";
 
-C<use feature 'switch'> tells the compiler to enable the
+C<use feature 'switch'> tells the compiler to enable the Perl 6
 given/when construct.
 
 See L<perlsyn/"Switch Statements"> for details.
index 45c4895..b19c5a5 100644 (file)
@@ -1,6 +1,6 @@
 package overload;
 
-our $VERSION = '1.29';
+our $VERSION = '1.30';
 
 %ops = (
     with_assign         => "+ - * / % ** << >> x .",
@@ -522,8 +522,33 @@ This overload was introduced in Perl 5.12.
 =item * I<Matching>
 
 The key C<"~~"> allows you to override the smart matching logic used by
-the C<~~> operator.  See L<perlop/"Smartmatch Operator">.
-Unusually, the overloaded only takes effect for the right-hand operand.
+the C<~~> operator and the switch construct (C<given>/C<when>).  See
+L<perlsyn/Switch Statements> and L<feature>.
+
+Unusually, the overloaded implementation of the smart match operator
+does not get full control of the smart match behaviour.
+In particular, in the following code:
+
+    package Foo;
+    use overload '~~' => 'match';
+
+    my $obj =  Foo->new();
+    $obj ~~ [ 1,2,3 ];
+
+the smart match does I<not> invoke the method call like this:
+
+    $obj->match([1,2,3],0);
+
+rather, the smart match distributive rule takes precedence, so $obj is
+smart matched against each array element in turn until a match is found,
+so you may see between one and three of these calls instead:
+
+    $obj->match(1,0);
+    $obj->match(2,0);
+    $obj->match(3,0);
+
+Consult the match table in  L<perlop/"Smartmatch Operator"> for
+details of when overloading is invoked.
 
 =item * I<Dereferencing>
 
index 99f5b64..2afa6cf 100644 (file)
@@ -48,7 +48,7 @@ package main;
 
 $| = 1;
 BEGIN { require './test.pl'; require './charset_tools.pl' }
-plan tests => 5392;
+plan tests => 5338;
 
 use Scalar::Util qw(tainted);
 
@@ -1622,11 +1622,6 @@ foreach my $op (qw(<=> == != < <= > >=)) {
     is($y, $o, "copy constructor falls back to assignment (preinc)");
 }
 
-{
-    package MatchAbc;
-    use overload '~~' => sub { $_[1] eq "abc" };
-}
-
 # only scalar 'x' should currently overload
 
 {
@@ -1840,10 +1835,7 @@ foreach my $op (qw(<=> == != < <= > >=)) {
 
        $e = '"abc" ~~ (%s)';
        $subs{'~~'} = $e;
-       push @tests, [ bless({}, "MatchAbc"), $e, '(~~)', '(NM:~~)',
-                       [ 1, 1, 0 ], 0 ];
-       $e = '(%s) ~~ bless({}, "MatchAbc")';
-       push @tests, [ "xyz", $e, '(eq)', '(NM:eq)', [ 1, 1, 0 ], 0 ];
+       push @tests, [ "abc", $e, '(~~)', '(NM:~~)', [ 1, 1, 0 ], 0 ];
 
        $subs{'-X'} = 'do { my $f = (%s);'
                    . '$_[1] eq "r" ? (-r ($f)) :'
diff --git a/op.c b/op.c
index d988648..b59433c 100644 (file)
--- a/op.c
+++ b/op.c
@@ -1832,7 +1832,7 @@ Perl_scalar(pTHX_ OP *o)
     do_kids:
        while (kid) {
            OP *sib = OpSIBLING(kid);
-           if (sib && kid->op_type != OP_LEAVEWHERESO
+           if (sib && kid->op_type != OP_LEAVEWHEN
             && (  OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
                || (  sib->op_targ != OP_NEXTSTATE
                   && sib->op_targ != OP_DBSTATE  )))
@@ -1923,7 +1923,7 @@ Perl_scalarvoid(pTHX_ OP *arg)
         want = o->op_flags & OPf_WANT;
         if ((want && want != OPf_WANT_SCALAR)
             || (PL_parser && PL_parser->error_count)
-            || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHERESO)
+            || o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
         {
             continue;
         }
@@ -2191,7 +2191,7 @@ Perl_scalarvoid(pTHX_ OP *arg)
         case OP_DOR:
         case OP_COND_EXPR:
         case OP_ENTERGIVEN:
-        case OP_ENTERWHERESO:
+        case OP_ENTERWHEN:
             for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
                 if (!(kid->op_flags & OPf_KIDS))
                     scalarvoid(kid);
@@ -2215,7 +2215,8 @@ Perl_scalarvoid(pTHX_ OP *arg)
         case OP_LEAVETRY:
         case OP_LEAVELOOP:
         case OP_LINESEQ:
-        case OP_LEAVEWHERESO:
+        case OP_LEAVEGIVEN:
+        case OP_LEAVEWHEN:
         kids:
             for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
                 if (!(kid->op_flags & OPf_KIDS))
@@ -2355,7 +2356,7 @@ Perl_list(pTHX_ OP *o)
     do_kids:
        while (kid) {
            OP *sib = OpSIBLING(kid);
-           if (sib && kid->op_type != OP_LEAVEWHERESO)
+           if (sib && kid->op_type != OP_LEAVEWHEN)
                scalarvoid(kid);
            else
                list(kid);
@@ -8647,6 +8648,16 @@ Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont)
        if (sv->op_type == OP_RV2SV) {  /* symbol table variable */
            iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */
             OpTYPE_set(sv, OP_RV2GV);
+
+           /* The op_type check is needed to prevent a possible segfault
+            * if the loop variable is undeclared and 'strict vars' is in
+            * effect. This is illegal but is nonetheless parsed, so we
+            * may reach this point with an OP_CONST where we're expecting
+            * an OP_GV.
+            */
+           if (cUNOPx(sv)->op_first->op_type == OP_GV
+            && cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv)
+               iterpflags |= OPpITER_DEF;
        }
        else if (sv->op_type == OP_PADSV) { /* private variable */
            iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */
@@ -8660,9 +8671,17 @@ Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont)
            NOOP;
        else
            Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]);
+       if (padoff) {
+           PADNAME * const pn = PAD_COMPNAME(padoff);
+           const char * const name = PadnamePV(pn);
+
+           if (PadnameLEN(pn) == 2 && name[0] == '$' && name[1] == '_')
+               iterpflags |= OPpITER_DEF;
+       }
     }
     else {
        sv = newGVOP(OP_GV, 0, PL_defgv);
+       iterpflags |= OPpITER_DEF;
     }
 
     if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) {
@@ -8791,11 +8810,178 @@ Perl_newLOOPEX(pTHX_ I32 type, OP *label)
     return o;
 }
 
+/* if the condition is a literal array or hash
+   (or @{ ... } etc), make a reference to it.
+ */
+STATIC OP *
+S_ref_array_or_hash(pTHX_ OP *cond)
+{
+    if (cond
+    && (cond->op_type == OP_RV2AV
+    ||  cond->op_type == OP_PADAV
+    ||  cond->op_type == OP_RV2HV
+    ||  cond->op_type == OP_PADHV))
+
+       return newUNOP(OP_REFGEN, 0, op_lvalue(cond, OP_REFGEN));
+
+    else if(cond
+    && (cond->op_type == OP_ASLICE
+    ||  cond->op_type == OP_KVASLICE
+    ||  cond->op_type == OP_HSLICE
+    ||  cond->op_type == OP_KVHSLICE)) {
+
+       /* anonlist now needs a list from this op, was previously used in
+        * scalar context */
+       cond->op_flags &= ~(OPf_WANT_SCALAR | OPf_REF);
+       cond->op_flags |= OPf_WANT_LIST;
+
+       return newANONLIST(op_lvalue(cond, OP_ANONLIST));
+    }
+
+    else
+       return cond;
+}
+
+/* These construct the optree fragments representing given()
+   and when() blocks.
+
+   entergiven and enterwhen are LOGOPs; the op_other pointer
+   points up to the associated leave op. We need this so we
+   can put it in the context and make break/continue work.
+   (Also, of course, pp_enterwhen will jump straight to
+   op_other if the match fails.)
+ */
+
+STATIC OP *
+S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
+                  I32 enter_opcode, I32 leave_opcode,
+                  PADOFFSET entertarg)
+{
+    dVAR;
+    LOGOP *enterop;
+    OP *o;
+
+    PERL_ARGS_ASSERT_NEWGIVWHENOP;
+    PERL_UNUSED_ARG(entertarg); /* used to indicate targ of lexical $_ */
+
+    enterop = alloc_LOGOP(enter_opcode, block, NULL);
+    enterop->op_targ = 0;
+    enterop->op_private = 0;
+
+    o = newUNOP(leave_opcode, 0, (OP *) enterop);
+
+    if (cond) {
+        /* prepend cond if we have one */
+        op_sibling_splice((OP*)enterop, NULL, 0, scalar(cond));
+
+       o->op_next = LINKLIST(cond);
+       cond->op_next = (OP *) enterop;
+    }
+    else {
+       /* This is a default {} block */
+       enterop->op_flags |= OPf_SPECIAL;
+       o      ->op_flags |= OPf_SPECIAL;
+
+       o->op_next = (OP *) enterop;
+    }
+
+    CHECKOP(enter_opcode, enterop); /* Currently does nothing, since
+                                      entergiven and enterwhen both
+                                      use ck_null() */
+
+    enterop->op_next = LINKLIST(block);
+    block->op_next = enterop->op_other = o;
+
+    return o;
+}
+
+/* Does this look like a boolean operation? For these purposes
+   a boolean operation is:
+     - a subroutine call [*]
+     - a logical connective
+     - a comparison operator
+     - a filetest operator, with the exception of -s -M -A -C
+     - defined(), exists() or eof()
+     - /$re/ or $foo =~ /$re/
+   
+   [*] possibly surprising
+ */
+STATIC bool
+S_looks_like_bool(pTHX_ const OP *o)
+{
+    PERL_ARGS_ASSERT_LOOKS_LIKE_BOOL;
+
+    switch(o->op_type) {
+       case OP_OR:
+       case OP_DOR:
+           return looks_like_bool(cLOGOPo->op_first);
+
+       case OP_AND:
+        {
+            OP* sibl = OpSIBLING(cLOGOPo->op_first);
+            ASSUME(sibl);
+           return (
+               looks_like_bool(cLOGOPo->op_first)
+            && looks_like_bool(sibl));
+        }
+
+       case OP_NULL:
+       case OP_SCALAR:
+           return (
+               o->op_flags & OPf_KIDS
+           && looks_like_bool(cUNOPo->op_first));
+
+       case OP_ENTERSUB:
+
+       case OP_NOT:    case OP_XOR:
+
+       case OP_EQ:     case OP_NE:     case OP_LT:
+       case OP_GT:     case OP_LE:     case OP_GE:
+
+       case OP_I_EQ:   case OP_I_NE:   case OP_I_LT:
+       case OP_I_GT:   case OP_I_LE:   case OP_I_GE:
+
+       case OP_SEQ:    case OP_SNE:    case OP_SLT:
+       case OP_SGT:    case OP_SLE:    case OP_SGE:
+       
+       case OP_SMARTMATCH:
+       
+       case OP_FTRREAD:  case OP_FTRWRITE: case OP_FTREXEC:
+       case OP_FTEREAD:  case OP_FTEWRITE: case OP_FTEEXEC:
+       case OP_FTIS:     case OP_FTEOWNED: case OP_FTROWNED:
+       case OP_FTZERO:   case OP_FTSOCK:   case OP_FTCHR:
+       case OP_FTBLK:    case OP_FTFILE:   case OP_FTDIR:
+       case OP_FTPIPE:   case OP_FTLINK:   case OP_FTSUID:
+       case OP_FTSGID:   case OP_FTSVTX:   case OP_FTTTY:
+       case OP_FTTEXT:   case OP_FTBINARY:
+       
+       case OP_DEFINED: case OP_EXISTS:
+       case OP_MATCH:   case OP_EOF:
+
+       case OP_FLOP:
+
+           return TRUE;
+       
+       case OP_CONST:
+           /* Detect comparisons that have been optimized away */
+           if (cSVOPo->op_sv == &PL_sv_yes
+           ||  cSVOPo->op_sv == &PL_sv_no)
+           
+               return TRUE;
+           else
+               return FALSE;
+
+       /* FALLTHROUGH */
+       default:
+           return FALSE;
+    }
+}
+
 /*
-=for apidoc Am|OP *|newGIVENOP|OP *topic|OP *block|PADOFFSET defsv_off
+=for apidoc Am|OP *|newGIVENOP|OP *cond|OP *block|PADOFFSET defsv_off
 
 Constructs, checks, and returns an op tree expressing a C<given> block.
-C<topic> supplies the expression to whose value C<$_> will be locally
+C<cond> supplies the expression to whose value C<$_> will be locally
 aliased, and C<block> supplies the body of the C<given> construct; they
 are consumed by this function and become part of the constructed op tree.
 C<defsv_off> must be zero (it used to identity the pad slot of lexical $_).
@@ -8804,64 +8990,49 @@ C<defsv_off> must be zero (it used to identity the pad slot of lexical $_).
 */
 
 OP *
-Perl_newGIVENOP(pTHX_ OP *topic, OP *block, PADOFFSET defsv_off)
+Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
 {
-    OP *enterop, *leaveop;
     PERL_ARGS_ASSERT_NEWGIVENOP;
     PERL_UNUSED_ARG(defsv_off);
-    assert(!defsv_off);
 
-    NewOpSz(1101, enterop, sizeof(LOOP));
-    OpTYPE_set(enterop, OP_ENTERGIVEN);
-    cLOOPx(enterop)->op_first = scalar(topic);
-    cLOOPx(enterop)->op_last = block;
-    OpMORESIB_set(topic, block);
-    OpLASTSIB_set(block, enterop);
-    enterop->op_flags = OPf_KIDS;
-
-    leaveop = newBINOP(OP_LEAVELOOP, 0, enterop, newOP(OP_NULL, 0));
-    leaveop->op_next = LINKLIST(topic);
-    topic->op_next = enterop;
-    enterop = CHECKOP(OP_ENTERGIVEN, enterop);
-    cLOOPx(enterop)->op_redoop = enterop->op_next = LINKLIST(block);
-    cLOOPx(enterop)->op_lastop = cLOOPx(enterop)->op_nextop = block->op_next =
-       leaveop;
-
-    return leaveop;
+    assert(!defsv_off);
+    return newGIVWHENOP(
+       ref_array_or_hash(cond),
+       block,
+       OP_ENTERGIVEN, OP_LEAVEGIVEN,
+       0);
 }
 
 /*
-=for apidoc Am|OP *|newWHERESOOP|OP *cond|OP *block
+=for apidoc Am|OP *|newWHENOP|OP *cond|OP *block
 
-Constructs, checks, and returns an op tree expressing a C<whereso> block.
+Constructs, checks, and returns an op tree expressing a C<when> block.
 C<cond> supplies the test expression, and C<block> supplies the block
 that will be executed if the test evaluates to true; they are consumed
-by this function and become part of the constructed op tree.
+by this function and become part of the constructed op tree.  C<cond>
+will be interpreted DWIMically, often as a comparison against C<$_>,
+and may be null to generate a C<default> block.
 
 =cut
 */
 
 OP *
-Perl_newWHERESOOP(pTHX_ OP *cond, OP *block)
+Perl_newWHENOP(pTHX_ OP *cond, OP *block)
 {
-    OP *enterop, *leaveop;
-    PERL_ARGS_ASSERT_NEWWHERESOOP;
-
-    NewOpSz(1101, enterop, sizeof(LOGOP));
-    OpTYPE_set(enterop, OP_ENTERWHERESO);
-    cLOGOPx(enterop)->op_first = scalar(cond);
-    OpMORESIB_set(cond, block);
-    OpLASTSIB_set(block, enterop);
-    enterop->op_flags = OPf_KIDS;
-
-    leaveop = newUNOP(OP_LEAVEWHERESO, 0, enterop);
-    leaveop->op_next = LINKLIST(cond);
-    cond->op_next = enterop;
-    enterop = CHECKOP(OP_ENTERWHERESO, enterop);
-    enterop->op_next = LINKLIST(block);
-    cLOGOPx(enterop)->op_other = block->op_next = leaveop;
+    const bool cond_llb = (!cond || looks_like_bool(cond));
+    OP *cond_op;
 
-    return leaveop;
+    PERL_ARGS_ASSERT_NEWWHENOP;
+
+    if (cond_llb)
+       cond_op = cond;
+    else {
+       cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL,
+               newDEFSVOP(),
+               scalar(ref_array_or_hash(cond)));
+    }
+    
+    return newGIVWHENOP(cond_op, block, OP_ENTERWHEN, OP_LEAVEWHEN, 0);
 }
 
 /* must not conflict with SVf_UTF8 */
@@ -11786,6 +11957,40 @@ Perl_ck_listiob(pTHX_ OP *o)
     return listkids(o);
 }
 
+OP *
+Perl_ck_smartmatch(pTHX_ OP *o)
+{
+    dVAR;
+    PERL_ARGS_ASSERT_CK_SMARTMATCH;
+    if (0 == (o->op_flags & OPf_SPECIAL)) {
+       OP *first  = cBINOPo->op_first;
+       OP *second = OpSIBLING(first);
+       
+       /* Implicitly take a reference to an array or hash */
+
+        /* remove the original two siblings, then add back the
+         * (possibly different) first and second sibs.
+         */
+        op_sibling_splice(o, NULL, 1, NULL);
+        op_sibling_splice(o, NULL, 1, NULL);
+       first  = ref_array_or_hash(first);
+       second = ref_array_or_hash(second);
+        op_sibling_splice(o, NULL, 0, second);
+        op_sibling_splice(o, NULL, 0, first);
+       
+       /* Implicitly take a reference to a regular expression */
+       if (first->op_type == OP_MATCH && !(first->op_flags & OPf_STACKED)) {
+            OpTYPE_set(first, OP_QR);
+       }
+       if (second->op_type == OP_MATCH && !(second->op_flags & OPf_STACKED)) {
+            OpTYPE_set(second, OP_QR);
+        }
+    }
+    
+    return o;
+}
+
+
 static OP *
 S_maybe_targlex(pTHX_ OP *o)
 {
@@ -15772,7 +15977,6 @@ Perl_rpeep(pTHX_ OP *o)
 
        case OP_ENTERLOOP:
        case OP_ENTERITER:
-       case OP_ENTERGIVEN:
            while (cLOOP->op_redoop->op_type == OP_NULL)
                cLOOP->op_redoop = cLOOP->op_redoop->op_next;
            while (cLOOP->op_nextop->op_type == OP_NULL)
diff --git a/op.h b/op.h
index efafcf3..eb62c94 100644 (file)
--- a/op.h
+++ b/op.h
@@ -129,6 +129,9 @@ Deprecated.  Use C<GIMME_V> instead.
                                /*  On OP_DBSTATE, indicates breakpoint
                                 *    (runtime property) */
                                /*  On OP_REQUIRE, was seen as CORE::require */
+                               /*  On OP_(ENTER|LEAVE)WHEN, there's
+                                   no condition */
+                               /*  On OP_SMARTMATCH, an implicit smartmatch */
                                /*  On OP_ANONHASH and OP_ANONLIST, create a
                                    reference to the new anon hash or array */
                                /*  On OP_HELEM, OP_MULTIDEREF and OP_HSLICE,
index ae54c3a..2556a01 100644 (file)
--- a/opcode.h
+++ b/opcode.h
@@ -364,8 +364,10 @@ EXTCONST char* const PL_op_name[] = {
        "method_redir",
        "method_redir_super",
        "entergiven",
-       "enterwhereso",
-       "leavewhereso",
+       "leavegiven",
+       "enterwhen",
+       "leavewhen",
+       "break",
        "continue",
        "open",
        "close",
@@ -767,8 +769,10 @@ EXTCONST char* const PL_op_desc[] = {
        "redirect method with known name",
        "redirect super method with known name",
        "given()",
-       "whereso()",
-       "leave whereso block",
+       "leave given block",
+       "when()",
+       "leave when block",
+       "break",
        "continue",
        "open",
        "close",
@@ -1182,8 +1186,10 @@ EXT Perl_ppaddr_t PL_ppaddr[] /* or perlvars.h */
        Perl_pp_method_redir,
        Perl_pp_method_redir_super,
        Perl_pp_entergiven,
-       Perl_pp_enterwhereso,
-       Perl_pp_leavewhereso,
+       Perl_pp_leavegiven,
+       Perl_pp_enterwhen,
+       Perl_pp_leavewhen,
+       Perl_pp_break,
        Perl_pp_continue,
        Perl_pp_open,
        Perl_pp_close,
@@ -1482,7 +1488,7 @@ EXT Perl_check_t PL_check[] /* or perlvars.h */
        Perl_ck_bitop,          /* complement */
        Perl_ck_bitop,          /* ncomplement */
        Perl_ck_bitop,          /* scomplement */
-       Perl_ck_null,           /* smartmatch */
+       Perl_ck_smartmatch,     /* smartmatch */
        Perl_ck_fun,            /* atan2 */
        Perl_ck_fun,            /* sin */
        Perl_ck_fun,            /* cos */
@@ -1593,8 +1599,10 @@ EXT Perl_check_t PL_check[] /* or perlvars.h */
        Perl_ck_null,           /* method_redir */
        Perl_ck_null,           /* method_redir_super */
        Perl_ck_null,           /* entergiven */
-       Perl_ck_null,           /* enterwhereso */
-       Perl_ck_null,           /* leavewhereso */
+       Perl_ck_null,           /* leavegiven */
+       Perl_ck_null,           /* enterwhen */
+       Perl_ck_null,           /* leavewhen */
+       Perl_ck_null,           /* break */
        Perl_ck_null,           /* continue */
        Perl_ck_open,           /* open */
        Perl_ck_fun,            /* close */
@@ -1889,7 +1897,7 @@ EXTCONST U32 PL_opargs[] = {
        0x0000110e,     /* complement */
        0x0000111e,     /* ncomplement */
        0x0000111e,     /* scomplement */
-       0x00011206,     /* smartmatch */
+       0x00000204,     /* smartmatch */
        0x0001141e,     /* atan2 */
        0x00009b9e,     /* sin */
        0x00009b9e,     /* cos */
@@ -1999,9 +2007,11 @@ EXTCONST U32 PL_opargs[] = {
        0x00000e40,     /* method_super */
        0x00000e40,     /* method_redir */
        0x00000e40,     /* method_redir_super */
-       0x00000940,     /* entergiven */
-       0x00000340,     /* enterwhereso */
-       0x00000100,     /* leavewhereso */
+       0x00000340,     /* entergiven */
+       0x00000100,     /* leavegiven */
+       0x00000340,     /* enterwhen */
+       0x00000100,     /* leavewhen */
+       0x00000000,     /* break */
        0x00000000,     /* continue */
        0x0029640d,     /* open */
        0x0000eb04,     /* close */
@@ -2224,6 +2234,7 @@ END_EXTERN_C
 #define OPpENTERSUB_AMPER       0x08
 #define OPpEVAL_BYTES           0x08
 #define OPpFT_STACKING          0x08
+#define OPpITER_DEF             0x08
 #define OPpLVREF_ITER           0x08
 #define OPpMAYBE_LVSUB          0x08
 #define OPpMULTICONCAT_STRINGIFY 0x08
@@ -2340,6 +2351,7 @@ EXTCONST char PL_op_private_labels[] = {
     'C','V','\0',
     'C','V','2','G','V','\0',
     'D','B','G','\0',
+    'D','E','F','\0',
     'D','E','L','\0',
     'D','E','L','E','T','E','\0',
     'D','E','R','E','F','1','\0',
@@ -2430,14 +2442,14 @@ EXTCONST char PL_op_private_labels[] = {
 EXTCONST I16 PL_op_private_bitfields[] = {
     0, 8, -1,
     0, 8, -1,
-    0, 579, -1,
+    0, 583, -1,
     0, 8, -1,
     0, 8, -1,
-    0, 586, -1,
-    0, 575, -1,
-    1, -1, 0, 543, 1, 40, 2, 286, -1,
-    4, -1, 1, 167, 2, 174, 3, 181, -1,
-    4, -1, 0, 543, 1, 40, 2, 286, 3, 117, -1,
+    0, 590, -1,
+    0, 579, -1,
+    1, -1, 0, 547, 1, 40, 2, 290, -1,
+    4, -1, 1, 171, 2, 178, 3, 185, -1,
+    4, -1, 0, 547, 1, 40, 2, 290, 3, 117, -1,
 
 };
 
@@ -2648,26 +2660,28 @@ EXTCONST I16  PL_op_private_bitdef_ix[] = {
      181, /* leave */
       -1, /* scope */
      183, /* enteriter */
-     186, /* iter */
+     187, /* iter */
       -1, /* enterloop */
-     187, /* leaveloop */
+     188, /* leaveloop */
       -1, /* return */
-     189, /* last */
-     189, /* next */
-     189, /* redo */
-     189, /* dump */
-     189, /* goto */
+     190, /* last */
+     190, /* next */
+     190, /* redo */
+     190, /* dump */
+     190, /* goto */
       52, /* exit */
        0, /* method */
        0, /* method_named */
        0, /* method_super */
        0, /* method_redir */
        0, /* method_redir_super */
-      -1, /* entergiven */
-       0, /* enterwhereso */
-       0, /* leavewhereso */
+       0, /* entergiven */
+       0, /* leavegiven */
+       0, /* enterwhen */
+       0, /* leavewhen */
+      -1, /* break */
       -1, /* continue */
-     191, /* open */
+     192, /* open */
       52, /* close */
       52, /* pipe_op */
       52, /* fileno */
@@ -2713,33 +2727,33 @@ EXTCONST I16  PL_op_private_bitdef_ix[] = {
        0, /* getpeername */
        0, /* lstat */
        0, /* stat */
-     196, /* ftrread */
-     196, /* ftrwrite */
-     196, /* ftrexec */
-     196, /* fteread */
-     196, /* ftewrite */
-     196, /* fteexec */
-     201, /* ftis */
-     201, /* ftsize */
-     201, /* ftmtime */
-     201, /* ftatime */
-     201, /* ftctime */
-     201, /* ftrowned */
-     201, /* fteowned */
-     201, /* ftzero */
-     201, /* ftsock */
-     201, /* ftchr */
-     201, /* ftblk */
-     201, /* ftfile */
-     201, /* ftdir */
-     201, /* ftpipe */
-     201, /* ftsuid */
-     201, /* ftsgid */
-     201, /* ftsvtx */
-     201, /* ftlink */
-     201, /* fttty */
-     201, /* fttext */
-     201, /* ftbinary */
+     197, /* ftrread */
+     197, /* ftrwrite */
+     197, /* ftrexec */
+     197, /* fteread */
+     197, /* ftewrite */
+     197, /* fteexec */
+     202, /* ftis */
+     202, /* ftsize */
+     202, /* ftmtime */
+     202, /* ftatime */
+     202, /* ftctime */
+     202, /* ftrowned */
+     202, /* fteowned */
+     202, /* ftzero */
+     202, /* ftsock */
+     202, /* ftchr */
+     202, /* ftblk */
+     202, /* ftfile */
+     202, /* ftdir */
+     202, /* ftpipe */
+     202, /* ftsuid */
+     202, /* ftsgid */
+     202, /* ftsvtx */
+     202, /* ftlink */
+     202, /* fttty */
+     202, /* fttext */
+     202, /* ftbinary */
       93, /* chdir */
       93, /* chown */
       75, /* chroot */
@@ -2759,17 +2773,17 @@ EXTCONST I16  PL_op_private_bitdef_ix[] = {
        0, /* rewinddir */
        0, /* closedir */
       -1, /* fork */
-     205, /* wait */
+     206, /* wait */
       93, /* waitpid */
       93, /* system */
       93, /* exec */
       93, /* kill */
-     205, /* getppid */
+     206, /* getppid */
       93, /* getpgrp */
       93, /* setpgrp */
       93, /* getpriority */
       93, /* setpriority */
-     205, /* time */
+     206, /* time */
       -1, /* tms */
        0, /* localtime */
       52, /* gmtime */
@@ -2789,7 +2803,7 @@ EXTCONST I16  PL_op_private_bitdef_ix[] = {
        0, /* require */
        0, /* dofile */
       -1, /* hintseval */
-     206, /* entereval */
+     207, /* entereval */
      174, /* leaveeval */
        0, /* entertry */
       -1, /* leavetry */
@@ -2828,18 +2842,18 @@ EXTCONST I16  PL_op_private_bitdef_ix[] = {
        0, /* lock */
        0, /* once */
       -1, /* custom */
-     212, /* coreargs */
-     216, /* avhvswitch */
+     213, /* coreargs */
+     217, /* avhvswitch */
        3, /* runcv */
        0, /* fc */
       -1, /* padcv */
       -1, /* introcv */
       -1, /* clonecv */
-     218, /* padrange */
-     220, /* refassign */
-     226, /* lvref */
-     232, /* lvrefslice */
-     233, /* lvavref */
+     219, /* padrange */
+     221, /* refassign */
+     227, /* lvref */
+     233, /* lvrefslice */
+     234, /* lvavref */
        0, /* anonconst */
 
 };
@@ -2859,76 +2873,76 @@ EXTCONST I16  PL_op_private_bitdef_ix[] = {
  */
 
 EXTCONST U16  PL_op_private_bitdefs[] = {
-    0x0003, /* scalar, prototype, refgen, srefgen, readline, regcmaybe, regcreset, regcomp, substcont, chop, schop, defined, undef, study, preinc, i_preinc, predec, i_predec, postinc, i_postinc, postdec, i_postdec, negate, i_negate, not, complement, ucfirst, lcfirst, uc, lc, quotemeta, aeach, avalues, each, pop, shift, grepstart, mapstart, mapwhile, range, and, or, dor, andassign, orassign, dorassign, argcheck, argdefelem, method, method_named, method_super, method_redir, method_redir_super, enterwhereso, leavewhereso, untie, tied, dbmclose, getsockname, getpeername, lstat, stat, readlink, readdir, telldir, rewinddir, closedir, localtime, alarm, require, dofile, entertry, ghbyname, gnbyname, gpbyname, shostent, snetent, sprotoent, sservent, gpwnam, gpwuid, ggrnam, ggrgid, lock, once, fc, anonconst */
-    0x2ebc, 0x4099, /* pushmark */
+    0x0003, /* scalar, prototype, refgen, srefgen, readline, regcmaybe, regcreset, regcomp, substcont, chop, schop, defined, undef, study, preinc, i_preinc, predec, i_predec, postinc, i_postinc, postdec, i_postdec, negate, i_negate, not, complement, ucfirst, lcfirst, uc, lc, quotemeta, aeach, avalues, each, pop, shift, grepstart, mapstart, mapwhile, range, and, or, dor, andassign, orassign, dorassign, argcheck, argdefelem, method, method_named, method_super, method_redir, method_redir_super, entergiven, leavegiven, enterwhen, leavewhen, untie, tied, dbmclose, getsockname, getpeername, lstat, stat, readlink, readdir, telldir, rewinddir, closedir, localtime, alarm, require, dofile, entertry, ghbyname, gnbyname, gpbyname, shostent, snetent, sprotoent, sservent, gpwnam, gpwuid, ggrnam, ggrgid, lock, once, fc, anonconst */
+    0x2f3c, 0x4119, /* pushmark */
     0x00bd, /* wantarray, runcv */
-    0x0578, 0x1930, 0x414c, 0x3c08, 0x33e5, /* const */
-    0x2ebc, 0x3539, /* gvsv */
-    0x1795, /* gv */
+    0x0578, 0x19b0, 0x41cc, 0x3c88, 0x3465, /* const */
+    0x2f3c, 0x35b9, /* gvsv */
+    0x1815, /* gv */
     0x0067, /* gelem, lt, i_lt, gt, i_gt, le, i_le, ge, i_ge, eq, i_eq, ne, i_ne, ncmp, i_ncmp, slt, sgt, sle, sge, seq, sne, scmp, bit_and, bit_xor, bit_or, sbit_and, sbit_xor, sbit_or, smartmatch, lslice, xor */
-    0x2ebc, 0x4098, 0x03d7, /* padsv */
-    0x2ebc, 0x4098, 0x06f4, 0x2fac, 0x3d89, /* padav */
-    0x2ebc, 0x4098, 0x06f4, 0x0790, 0x2fac, 0x3d88, 0x2a21, /* padhv */
-    0x2ebc, 0x1b18, 0x03d6, 0x2fac, 0x3308, 0x4144, 0x0003, /* rv2gv */
-    0x2ebc, 0x3538, 0x03d6, 0x4144, 0x0003, /* rv2sv */
-    0x2fac, 0x0003, /* av2arylen, akeys, values, keys */
-    0x327c, 0x0fd8, 0x0d34, 0x028c, 0x4448, 0x4144, 0x0003, /* rv2cv */
+    0x2f3c, 0x4118, 0x03d7, /* padsv */
+    0x2f3c, 0x4118, 0x06f4, 0x302c, 0x3e09, /* padav */
+    0x2f3c, 0x4118, 0x06f4, 0x0790, 0x302c, 0x3e08, 0x2aa1, /* padhv */
+    0x2f3c, 0x1b98, 0x03d6, 0x302c, 0x3388, 0x41c4, 0x0003, /* rv2gv */
+    0x2f3c, 0x35b8, 0x03d6, 0x41c4, 0x0003, /* rv2sv */
+    0x302c, 0x0003, /* av2arylen, akeys, values, keys */
+    0x32fc, 0x0fd8, 0x0d34, 0x028c, 0x44c8, 0x41c4, 0x0003, /* rv2cv */
     0x06f4, 0x0790, 0x0003, /* ref */
     0x018f, /* bless, glob, sprintf, formline, unpack, pack, join, anonlist, anonhash, splice, warn, die, reset, exit, close, pipe_op, fileno, umask, binmode, tie, dbmopen, sselect, select, getc, read, enterwrite, sysopen, sysseek, sysread, syswrite, eof, tell, seek, truncate, fcntl, ioctl, send, recv, socket, sockpair, bind, connect, listen, accept, shutdown, gsockopt, ssockopt, open_dir, seekdir, gmtime, shmget, shmctl, shmread, shmwrite, msgget, msgctl, msgsnd, msgrcv, semop, semget, semctl, ghbyaddr, gnbyaddr, gpbynumber, gsbyname, gsbyport, syscall */
-    0x371c, 0x3638, 0x2774, 0x26b0, 0x0003, /* backtick */
+    0x379c, 0x36b8, 0x27f4, 0x2730, 0x0003, /* backtick */
     0x06f5, /* subst */
-    0x105c, 0x2098, 0x0914, 0x3ecc, 0x2428, 0x01e4, 0x0141, /* trans, transr */
+    0x10dc, 0x2118, 0x0914, 0x3f4c, 0x24a8, 0x01e4, 0x0141, /* trans, transr */
     0x0f1c, 0x0618, 0x0067, /* sassign */
-    0x0bd8, 0x0ad4, 0x09d0, 0x2fac, 0x06e8, 0x0067, /* aassign */
-    0x44f0, 0x0003, /* chomp, schomp, ncomplement, scomplement, sin, cos, exp, log, sqrt, int, hex, oct, abs, ord, chr, chroot, rmdir */
-    0x06f4, 0x2fac, 0x0003, /* pos */
-    0x44f0, 0x0067, /* pow, multiply, i_multiply, divide, i_divide, modulo, i_modulo, add, i_add, subtract, i_subtract, left_shift, right_shift, nbit_and, nbit_xor, nbit_or */
-    0x1418, 0x0067, /* repeat */
-    0x3198, 0x44f0, 0x0067, /* concat */
-    0x2ebc, 0x0358, 0x1b14, 0x44f0, 0x422c, 0x0003, /* multiconcat */
-    0x44f0, 0x018f, /* stringify, atan2, rand, srand, crypt, push, unshift, flock, chdir, chown, unlink, chmod, utime, rename, link, symlink, mkdir, waitpid, system, exec, kill, getpgrp, setpgrp, getpriority, setpriority, sleep */
-    0x06f4, 0x44f0, 0x0003, /* length */
-    0x3970, 0x2fac, 0x012b, /* substr */
-    0x2fac, 0x0067, /* vec */
-    0x3118, 0x06f4, 0x44f0, 0x018f, /* index, rindex */
-    0x2ebc, 0x3538, 0x06f4, 0x2fac, 0x3d88, 0x4144, 0x0003, /* rv2av */
+    0x0bd8, 0x0ad4, 0x09d0, 0x302c, 0x06e8, 0x0067, /* aassign */
+    0x4570, 0x0003, /* chomp, schomp, ncomplement, scomplement, sin, cos, exp, log, sqrt, int, hex, oct, abs, ord, chr, chroot, rmdir */
+    0x06f4, 0x302c, 0x0003, /* pos */
+    0x4570, 0x0067, /* pow, multiply, i_multiply, divide, i_divide, modulo, i_modulo, add, i_add, subtract, i_subtract, left_shift, right_shift, nbit_and, nbit_xor, nbit_or */
+    0x1498, 0x0067, /* repeat */
+    0x3218, 0x4570, 0x0067, /* concat */
+    0x2f3c, 0x0358, 0x1b94, 0x4570, 0x42ac, 0x0003, /* multiconcat */
+    0x4570, 0x018f, /* stringify, atan2, rand, srand, crypt, push, unshift, flock, chdir, chown, unlink, chmod, utime, rename, link, symlink, mkdir, waitpid, system, exec, kill, getpgrp, setpgrp, getpriority, setpriority, sleep */
+    0x06f4, 0x4570, 0x0003, /* length */
+    0x39f0, 0x302c, 0x012b, /* substr */
+    0x302c, 0x0067, /* vec */
+    0x3198, 0x06f4, 0x4570, 0x018f, /* index, rindex */
+    0x2f3c, 0x35b8, 0x06f4, 0x302c, 0x3e08, 0x41c4, 0x0003, /* rv2av */
     0x025f, /* aelemfast, aelemfast_lex */
-    0x2ebc, 0x2db8, 0x03d6, 0x2fac, 0x0067, /* aelem, helem */
-    0x2ebc, 0x2fac, 0x3d89, /* aslice, hslice */
-    0x2fad, /* kvaslice, kvhslice */
-    0x2ebc, 0x3cd8, 0x2ad4, 0x0003, /* delete */
-    0x4378, 0x0003, /* exists */
-    0x2ebc, 0x3538, 0x06f4, 0x0790, 0x2fac, 0x3d88, 0x4144, 0x2a21, /* rv2hv */
-    0x2ebc, 0x2db8, 0x10d4, 0x1a30, 0x2fac, 0x4144, 0x0003, /* multideref */
-    0x2ebc, 0x3538, 0x0430, 0x2bcc, 0x24e9, /* split */
-    0x2ebc, 0x2159, /* list */
-    0x465c, 0x3fb8, 0x1370, 0x280c, 0x3a68, 0x2904, 0x34a1, /* sort */
-    0x280c, 0x0003, /* reverse */
+    0x2f3c, 0x2e38, 0x03d6, 0x302c, 0x0067, /* aelem, helem */
+    0x2f3c, 0x302c, 0x3e09, /* aslice, hslice */
+    0x302d, /* kvaslice, kvhslice */
+    0x2f3c, 0x3d58, 0x2b54, 0x0003, /* delete */
+    0x43f8, 0x0003, /* exists */
+    0x2f3c, 0x35b8, 0x06f4, 0x0790, 0x302c, 0x3e08, 0x41c4, 0x2aa1, /* rv2hv */
+    0x2f3c, 0x2e38, 0x1154, 0x1ab0, 0x302c, 0x41c4, 0x0003, /* multideref */
+    0x2f3c, 0x35b8, 0x0430, 0x2c4c, 0x2569, /* split */
+    0x2f3c, 0x21d9, /* list */
+    0x46dc, 0x4038, 0x13f0, 0x288c, 0x3ae8, 0x2984, 0x3521, /* sort */
+    0x288c, 0x0003, /* reverse */
     0x06f4, 0x0003, /* grepwhile */
-    0x2c58, 0x0003, /* flip, flop */
-    0x2ebc, 0x0003, /* cond_expr */
-    0x2ebc, 0x0fd8, 0x03d6, 0x028c, 0x4448, 0x4144, 0x25c1, /* entersub */
-    0x37d8, 0x0003, /* leavesub, leavesublv, leavewrite, leaveeval */
+    0x2cd8, 0x0003, /* flip, flop */
+    0x2f3c, 0x0003, /* cond_expr */
+    0x2f3c, 0x0fd8, 0x03d6, 0x028c, 0x44c8, 0x41c4, 0x2641, /* entersub */
+    0x3858, 0x0003, /* leavesub, leavesublv, leavewrite, leaveeval */
     0x02aa, 0x0003, /* argelem */
     0x00bc, 0x018f, /* caller */
-    0x2335, /* nextstate, dbstate */
-    0x2d5c, 0x37d9, /* leave */
-    0x2ebc, 0x3538, 0x3ae5, /* enteriter */
-    0x3ae5, /* iter */
-    0x2d5c, 0x0067, /* leaveloop */
-    0x477c, 0x0003, /* last, next, redo, dump, goto */
-    0x371c, 0x3638, 0x2774, 0x26b0, 0x018f, /* open */
-    0x1cd0, 0x1f2c, 0x1de8, 0x1ba4, 0x0003, /* ftrread, ftrwrite, ftrexec, fteread, ftewrite, fteexec */
-    0x1cd0, 0x1f2c, 0x1de8, 0x0003, /* ftis, ftsize, ftmtime, ftatime, ftctime, ftrowned, fteowned, ftzero, ftsock, ftchr, ftblk, ftfile, ftdir, ftpipe, ftsuid, ftsgid, ftsvtx, ftlink, fttty, fttext, ftbinary */
-    0x44f1, /* wait, getppid, time */
-    0x3874, 0x0df0, 0x084c, 0x45c8, 0x2244, 0x0003, /* entereval */
-    0x307c, 0x0018, 0x1284, 0x11a1, /* coreargs */
-    0x2fac, 0x00c7, /* avhvswitch */
-    0x2ebc, 0x01fb, /* padrange */
-    0x2ebc, 0x4098, 0x04f6, 0x298c, 0x1888, 0x0067, /* refassign */
-    0x2ebc, 0x4098, 0x04f6, 0x298c, 0x1888, 0x0003, /* lvref */
-    0x2ebd, /* lvrefslice */
-    0x2ebc, 0x4098, 0x0003, /* lvavref */
+    0x23b5, /* nextstate, dbstate */
+    0x2ddc, 0x3859, /* leave */
+    0x2f3c, 0x35b8, 0x104c, 0x3b65, /* enteriter */
+    0x3b65, /* iter */
+    0x2ddc, 0x0067, /* leaveloop */
+    0x47fc, 0x0003, /* last, next, redo, dump, goto */
+    0x379c, 0x36b8, 0x27f4, 0x2730, 0x018f, /* open */
+    0x1d50, 0x1fac, 0x1e68, 0x1c24, 0x0003, /* ftrread, ftrwrite, ftrexec, fteread, ftewrite, fteexec */
+    0x1d50, 0x1fac, 0x1e68, 0x0003, /* ftis, ftsize, ftmtime, ftatime, ftctime, ftrowned, fteowned, ftzero, ftsock, ftchr, ftblk, ftfile, ftdir, ftpipe, ftsuid, ftsgid, ftsvtx, ftlink, fttty, fttext, ftbinary */
+    0x4571, /* wait, getppid, time */
+    0x38f4, 0x0df0, 0x084c, 0x4648, 0x22c4, 0x0003, /* entereval */
+    0x30fc, 0x0018, 0x1304, 0x1221, /* coreargs */
+    0x302c, 0x00c7, /* avhvswitch */
+    0x2f3c, 0x01fb, /* padrange */
+    0x2f3c, 0x4118, 0x04f6, 0x2a0c, 0x1908, 0x0067, /* refassign */
+    0x2f3c, 0x4118, 0x04f6, 0x2a0c, 0x1908, 0x0003, /* lvref */
+    0x2f3d, /* lvrefslice */
+    0x2f3c, 0x4118, 0x0003, /* lvavref */
 
 };
 
@@ -3138,7 +3152,7 @@ EXTCONST U8 PL_op_private_valid[] = {
     /* ENTER      */ (0),
     /* LEAVE      */ (OPpREFCOUNTED|OPpLVALUE),
     /* SCOPE      */ (0),
-    /* ENTERITER  */ (OPpITER_REVERSED|OPpOUR_INTRO|OPpLVAL_INTRO),
+    /* ENTERITER  */ (OPpITER_REVERSED|OPpITER_DEF|OPpOUR_INTRO|OPpLVAL_INTRO),
     /* ITER       */ (OPpITER_REVERSED),
     /* ENTERLOOP  */ (0),
     /* LEAVELOOP  */ (OPpARG2_MASK|OPpLVALUE),
@@ -3154,9 +3168,11 @@ EXTCONST U8 PL_op_private_valid[] = {
     /* METHOD_SUPER */ (OPpARG1_MASK),
     /* METHOD_REDIR */ (OPpARG1_MASK),
     /* METHOD_REDIR_SUPER */ (OPpARG1_MASK),
-    /* ENTERGIVEN */ (0),
-    /* ENTERWHERESO */ (OPpARG1_MASK),
-    /* LEAVEWHERESO */ (OPpARG1_MASK),
+    /* ENTERGIVEN */ (OPpARG1_MASK),
+    /* LEAVEGIVEN */ (OPpARG1_MASK),
+    /* ENTERWHEN  */ (OPpARG1_MASK),
+    /* LEAVEWHEN  */ (OPpARG1_MASK),
+    /* BREAK      */ (0),
     /* CONTINUE   */ (0),
     /* OPEN       */ (OPpARG4_MASK|OPpOPEN_IN_RAW|OPpOPEN_IN_CRLF|OPpOPEN_OUT_RAW|OPpOPEN_OUT_CRLF),
     /* CLOSE      */ (OPpARG4_MASK),
index b6a63fd..d87ba88 100644 (file)
--- a/opnames.h
+++ b/opnames.h
@@ -232,187 +232,189 @@ typedef enum opcode {
        OP_METHOD_REDIR  = 215,
        OP_METHOD_REDIR_SUPER = 216,
        OP_ENTERGIVEN    = 217,
-       OP_ENTERWHERESO  = 218,
-       OP_LEAVEWHERESO  = 219,
-       OP_CONTINUE      = 220,
-       OP_OPEN          = 221,
-       OP_CLOSE         = 222,
-       OP_PIPE_OP       = 223,
-       OP_FILENO        = 224,
-       OP_UMASK         = 225,
-       OP_BINMODE       = 226,
-       OP_TIE           = 227,
-       OP_UNTIE         = 228,
-       OP_TIED          = 229,
-       OP_DBMOPEN       = 230,
-       OP_DBMCLOSE      = 231,
-       OP_SSELECT       = 232,
-       OP_SELECT        = 233,
-       OP_GETC          = 234,
-       OP_READ          = 235,
-       OP_ENTERWRITE    = 236,
-       OP_LEAVEWRITE    = 237,
-       OP_PRTF          = 238,
-       OP_PRINT         = 239,
-       OP_SAY           = 240,
-       OP_SYSOPEN       = 241,
-       OP_SYSSEEK       = 242,
-       OP_SYSREAD       = 243,
-       OP_SYSWRITE      = 244,
-       OP_EOF           = 245,
-       OP_TELL          = 246,
-       OP_SEEK          = 247,
-       OP_TRUNCATE      = 248,
-       OP_FCNTL         = 249,
-       OP_IOCTL         = 250,
-       OP_FLOCK         = 251,
-       OP_SEND          = 252,
-       OP_RECV          = 253,
-       OP_SOCKET        = 254,
-       OP_SOCKPAIR      = 255,
-       OP_BIND          = 256,
-       OP_CONNECT       = 257,
-       OP_LISTEN        = 258,
-       OP_ACCEPT        = 259,
-       OP_SHUTDOWN      = 260,
-       OP_GSOCKOPT      = 261,
-       OP_SSOCKOPT      = 262,
-       OP_GETSOCKNAME   = 263,
-       OP_GETPEERNAME   = 264,
-       OP_LSTAT         = 265,
-       OP_STAT          = 266,
-       OP_FTRREAD       = 267,
-       OP_FTRWRITE      = 268,
-       OP_FTREXEC       = 269,
-       OP_FTEREAD       = 270,
-       OP_FTEWRITE      = 271,
-       OP_FTEEXEC       = 272,
-       OP_FTIS          = 273,
-       OP_FTSIZE        = 274,
-       OP_FTMTIME       = 275,
-       OP_FTATIME       = 276,
-       OP_FTCTIME       = 277,
-       OP_FTROWNED      = 278,
-       OP_FTEOWNED      = 279,
-       OP_FTZERO        = 280,
-       OP_FTSOCK        = 281,
-       OP_FTCHR         = 282,
-       OP_FTBLK         = 283,
-       OP_FTFILE        = 284,
-       OP_FTDIR         = 285,
-       OP_FTPIPE        = 286,
-       OP_FTSUID        = 287,
-       OP_FTSGID        = 288,
-       OP_FTSVTX        = 289,
-       OP_FTLINK        = 290,
-       OP_FTTTY         = 291,
-       OP_FTTEXT        = 292,
-       OP_FTBINARY      = 293,
-       OP_CHDIR         = 294,
-       OP_CHOWN         = 295,
-       OP_CHROOT        = 296,
-       OP_UNLINK        = 297,
-       OP_CHMOD         = 298,
-       OP_UTIME         = 299,
-       OP_RENAME        = 300,
-       OP_LINK          = 301,
-       OP_SYMLINK       = 302,
-       OP_READLINK      = 303,
-       OP_MKDIR         = 304,
-       OP_RMDIR         = 305,
-       OP_OPEN_DIR      = 306,
-       OP_READDIR       = 307,
-       OP_TELLDIR       = 308,
-       OP_SEEKDIR       = 309,
-       OP_REWINDDIR     = 310,
-       OP_CLOSEDIR      = 311,
-       OP_FORK          = 312,
-       OP_WAIT          = 313,
-       OP_WAITPID       = 314,
-       OP_SYSTEM        = 315,
-       OP_EXEC          = 316,
-       OP_KILL          = 317,
-       OP_GETPPID       = 318,
-       OP_GETPGRP       = 319,
-       OP_SETPGRP       = 320,
-       OP_GETPRIORITY   = 321,
-       OP_SETPRIORITY   = 322,
-       OP_TIME          = 323,
-       OP_TMS           = 324,
-       OP_LOCALTIME     = 325,
-       OP_GMTIME        = 326,
-       OP_ALARM         = 327,
-       OP_SLEEP         = 328,
-       OP_SHMGET        = 329,
-       OP_SHMCTL        = 330,
-       OP_SHMREAD       = 331,
-       OP_SHMWRITE      = 332,
-       OP_MSGGET        = 333,
-       OP_MSGCTL        = 334,
-       OP_MSGSND        = 335,
-       OP_MSGRCV        = 336,
-       OP_SEMOP         = 337,
-       OP_SEMGET        = 338,
-       OP_SEMCTL        = 339,
-       OP_REQUIRE       = 340,
-       OP_DOFILE        = 341,
-       OP_HINTSEVAL     = 342,
-       OP_ENTEREVAL     = 343,
-       OP_LEAVEEVAL     = 344,
-       OP_ENTERTRY      = 345,
-       OP_LEAVETRY      = 346,
-       OP_GHBYNAME      = 347,
-       OP_GHBYADDR      = 348,
-       OP_GHOSTENT      = 349,
-       OP_GNBYNAME      = 350,
-       OP_GNBYADDR      = 351,
-       OP_GNETENT       = 352,
-       OP_GPBYNAME      = 353,
-       OP_GPBYNUMBER    = 354,
-       OP_GPROTOENT     = 355,
-       OP_GSBYNAME      = 356,
-       OP_GSBYPORT      = 357,
-       OP_GSERVENT      = 358,
-       OP_SHOSTENT      = 359,
-       OP_SNETENT       = 360,
-       OP_SPROTOENT     = 361,
-       OP_SSERVENT      = 362,
-       OP_EHOSTENT      = 363,
-       OP_ENETENT       = 364,
-       OP_EPROTOENT     = 365,
-       OP_ESERVENT      = 366,
-       OP_GPWNAM        = 367,
-       OP_GPWUID        = 368,
-       OP_GPWENT        = 369,
-       OP_SPWENT        = 370,
-       OP_EPWENT        = 371,
-       OP_GGRNAM        = 372,
-       OP_GGRGID        = 373,
-       OP_GGRENT        = 374,
-       OP_SGRENT        = 375,
-       OP_EGRENT        = 376,
-       OP_GETLOGIN      = 377,
-       OP_SYSCALL       = 378,
-       OP_LOCK          = 379,
-       OP_ONCE          = 380,
-       OP_CUSTOM        = 381,
-       OP_COREARGS      = 382,
-       OP_AVHVSWITCH    = 383,
-       OP_RUNCV         = 384,
-       OP_FC            = 385,
-       OP_PADCV         = 386,
-       OP_INTROCV       = 387,
-       OP_CLONECV       = 388,
-       OP_PADRANGE      = 389,
-       OP_REFASSIGN     = 390,
-       OP_LVREF         = 391,
-       OP_LVREFSLICE    = 392,
-       OP_LVAVREF       = 393,
-       OP_ANONCONST     = 394,
+       OP_LEAVEGIVEN    = 218,
+       OP_ENTERWHEN     = 219,
+       OP_LEAVEWHEN     = 220,
+       OP_BREAK         = 221,
+       OP_CONTINUE      = 222,
+       OP_OPEN          = 223,
+       OP_CLOSE         = 224,
+       OP_PIPE_OP       = 225,
+       OP_FILENO        = 226,
+       OP_UMASK         = 227,
+       OP_BINMODE       = 228,
+       OP_TIE           = 229,
+       OP_UNTIE         = 230,
+       OP_TIED          = 231,
+       OP_DBMOPEN       = 232,
+       OP_DBMCLOSE      = 233,
+       OP_SSELECT       = 234,
+       OP_SELECT        = 235,
+       OP_GETC          = 236,
+       OP_READ          = 237,
+       OP_ENTERWRITE    = 238,
+       OP_LEAVEWRITE    = 239,
+       OP_PRTF          = 240,
+       OP_PRINT         = 241,
+       OP_SAY           = 242,
+       OP_SYSOPEN       = 243,
+       OP_SYSSEEK       = 244,
+       OP_SYSREAD       = 245,
+       OP_SYSWRITE      = 246,
+       OP_EOF           = 247,
+       OP_TELL          = 248,
+       OP_SEEK          = 249,
+       OP_TRUNCATE      = 250,
+       OP_FCNTL         = 251,
+       OP_IOCTL         = 252,
+       OP_FLOCK         = 253,
+       OP_SEND          = 254,
+       OP_RECV          = 255,
+       OP_SOCKET        = 256,
+       OP_SOCKPAIR      = 257,
+       OP_BIND          = 258,
+       OP_CONNECT       = 259,
+       OP_LISTEN        = 260,
+       OP_ACCEPT        = 261,
+       OP_SHUTDOWN      = 262,
+       OP_GSOCKOPT      = 263,
+       OP_SSOCKOPT      = 264,
+       OP_GETSOCKNAME   = 265,
+       OP_GETPEERNAME   = 266,
+       OP_LSTAT         = 267,
+       OP_STAT          = 268,
+       OP_FTRREAD       = 269,
+       OP_FTRWRITE      = 270,
+       OP_FTREXEC       = 271,
+       OP_FTEREAD       = 272,
+       OP_FTEWRITE      = 273,
+       OP_FTEEXEC       = 274,
+       OP_FTIS          = 275,
+       OP_FTSIZE        = 276,
+       OP_FTMTIME       = 277,
+       OP_FTATIME       = 278,
+       OP_FTCTIME       = 279,
+       OP_FTROWNED      = 280,
+       OP_FTEOWNED      = 281,
+       OP_FTZERO        = 282,
+       OP_FTSOCK        = 283,
+       OP_FTCHR         = 284,
+       OP_FTBLK         = 285,
+       OP_FTFILE        = 286,
+       OP_FTDIR         = 287,
+       OP_FTPIPE        = 288,
+       OP_FTSUID        = 289,
+       OP_FTSGID        = 290,
+       OP_FTSVTX        = 291,
+       OP_FTLINK        = 292,
+       OP_FTTTY         = 293,
+       OP_FTTEXT        = 294,
+       OP_FTBINARY      = 295,
+       OP_CHDIR         = 296,
+       OP_CHOWN         = 297,
+       OP_CHROOT        = 298,
+       OP_UNLINK        = 299,
+       OP_CHMOD         = 300,
+       OP_UTIME         = 301,
+       OP_RENAME        = 302,
+       OP_LINK          = 303,
+       OP_SYMLINK       = 304,
+       OP_READLINK      = 305,
+       OP_MKDIR         = 306,
+       OP_RMDIR         = 307,
+       OP_OPEN_DIR      = 308,
+       OP_READDIR       = 309,
+       OP_TELLDIR       = 310,
+       OP_SEEKDIR       = 311,
+       OP_REWINDDIR     = 312,
+       OP_CLOSEDIR      = 313,
+       OP_FORK          = 314,
+       OP_WAIT          = 315,
+       OP_WAITPID       = 316,
+       OP_SYSTEM        = 317,
+       OP_EXEC          = 318,
+       OP_KILL          = 319,
+       OP_GETPPID       = 320,
+       OP_GETPGRP       = 321,
+       OP_SETPGRP       = 322,
+       OP_GETPRIORITY   = 323,
+       OP_SETPRIORITY   = 324,
+       OP_TIME          = 325,
+       OP_TMS           = 326,
+       OP_LOCALTIME     = 327,
+       OP_GMTIME        = 328,
+       OP_ALARM         = 329,
+       OP_SLEEP         = 330,
+       OP_SHMGET        = 331,
+       OP_SHMCTL        = 332,
+       OP_SHMREAD       = 333,
+       OP_SHMWRITE      = 334,
+       OP_MSGGET        = 335,
+       OP_MSGCTL        = 336,
+       OP_MSGSND        = 337,
+       OP_MSGRCV        = 338,
+       OP_SEMOP         = 339,
+       OP_SEMGET        = 340,
+       OP_SEMCTL        = 341,
+       OP_REQUIRE       = 342,
+       OP_DOFILE        = 343,
+       OP_HINTSEVAL     = 344,
+       OP_ENTEREVAL     = 345,
+       OP_LEAVEEVAL     = 346,
+       OP_ENTERTRY      = 347,
+       OP_LEAVETRY      = 348,
+       OP_GHBYNAME      = 349,
+       OP_GHBYADDR      = 350,
+       OP_GHOSTENT      = 351,
+       OP_GNBYNAME      = 352,
+       OP_GNBYADDR      = 353,
+       OP_GNETENT       = 354,
+       OP_GPBYNAME      = 355,
+       OP_GPBYNUMBER    = 356,
+       OP_GPROTOENT     = 357,
+       OP_GSBYNAME      = 358,
+       OP_GSBYPORT      = 359,
+       OP_GSERVENT      = 360,
+       OP_SHOSTENT      = 361,
+       OP_SNETENT       = 362,
+       OP_SPROTOENT     = 363,
+       OP_SSERVENT      = 364,
+       OP_EHOSTENT      = 365,
+       OP_ENETENT       = 366,
+       OP_EPROTOENT     = 367,
+       OP_ESERVENT      = 368,
+       OP_GPWNAM        = 369,
+       OP_GPWUID        = 370,
+       OP_GPWENT        = 371,
+       OP_SPWENT        = 372,
+       OP_EPWENT        = 373,
+       OP_GGRNAM        = 374,
+       OP_GGRGID        = 375,
+       OP_GGRENT        = 376,
+       OP_SGRENT        = 377,
+       OP_EGRENT        = 378,
+       OP_GETLOGIN      = 379,
+       OP_SYSCALL       = 380,
+       OP_LOCK          = 381,
+       OP_ONCE          = 382,
+       OP_CUSTOM        = 383,
+       OP_COREARGS      = 384,
+       OP_AVHVSWITCH    = 385,
+       OP_RUNCV         = 386,
+       OP_FC            = 387,
+       OP_PADCV         = 388,
+       OP_INTROCV       = 389,
+       OP_CLONECV       = 390,
+       OP_PADRANGE      = 391,
+       OP_REFASSIGN     = 392,
+       OP_LVREF         = 393,
+       OP_LVREFSLICE    = 394,
+       OP_LVAVREF       = 395,
+       OP_ANONCONST     = 396,
        OP_max          
 } opcode;
 
-#define MAXO 395
+#define MAXO 397
 #define OP_FREED MAXO
 
 /* the OP_IS_* macros are optimized to a simple range check because
diff --git a/perl.h b/perl.h
index de44f91..f82efb7 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -3835,7 +3835,7 @@ Gid_t getegid (void);
 #define DEBUG_C_FLAG           0x00200000 /*2097152 */
 #define DEBUG_A_FLAG           0x00400000 /*4194304 */
 #define DEBUG_q_FLAG           0x00800000 /*8388608 */
-/* spare                                     16777216*/
+#define DEBUG_M_FLAG           0x01000000 /*16777216*/
 #define DEBUG_B_FLAG           0x02000000 /*33554432*/
 #define DEBUG_L_FLAG           0x04000000 /*67108864*/
 #define DEBUG_i_FLAG           0x08000000 /*134217728*/
@@ -3867,6 +3867,7 @@ Gid_t getegid (void);
 #  define DEBUG_C_TEST_ UNLIKELY(PL_debug & DEBUG_C_FLAG)
 #  define DEBUG_A_TEST_ UNLIKELY(PL_debug & DEBUG_A_FLAG)
 #  define DEBUG_q_TEST_ UNLIKELY(PL_debug & DEBUG_q_FLAG)
+#  define DEBUG_M_TEST_ UNLIKELY(PL_debug & DEBUG_M_FLAG)
 #  define DEBUG_B_TEST_ UNLIKELY(PL_debug & DEBUG_B_FLAG)
 #  define DEBUG_L_TEST_ UNLIKELY(PL_debug & DEBUG_L_FLAG)
 #  define DEBUG_i_TEST_ UNLIKELY(PL_debug & DEBUG_i_FLAG)
@@ -3900,6 +3901,7 @@ Gid_t getegid (void);
 #  define DEBUG_C_TEST DEBUG_C_TEST_
 #  define DEBUG_A_TEST DEBUG_A_TEST_
 #  define DEBUG_q_TEST DEBUG_q_TEST_
+#  define DEBUG_M_TEST DEBUG_M_TEST_
 #  define DEBUG_B_TEST DEBUG_B_TEST_
 #  define DEBUG_L_TEST DEBUG_L_TEST_
 #  define DEBUG_i_TEST DEBUG_i_TEST_
@@ -3963,6 +3965,7 @@ Gid_t getegid (void);
 #  define DEBUG_C(a) DEBUG__(DEBUG_C_TEST, a)
 #  define DEBUG_A(a) DEBUG__(DEBUG_A_TEST, a)
 #  define DEBUG_q(a) DEBUG__(DEBUG_q_TEST, a)
+#  define DEBUG_M(a) DEBUG__(DEBUG_M_TEST, a)
 #  define DEBUG_B(a) DEBUG__(DEBUG_B_TEST, a)
 #  define DEBUG_L(a) DEBUG__(DEBUG_L_TEST, a)
 #  define DEBUG_i(a) DEBUG__(DEBUG_i_TEST, a)
@@ -3992,6 +3995,7 @@ Gid_t getegid (void);
 #  define DEBUG_C_TEST (0)
 #  define DEBUG_A_TEST (0)
 #  define DEBUG_q_TEST (0)
+#  define DEBUG_M_TEST (0)
 #  define DEBUG_B_TEST (0)
 #  define DEBUG_L_TEST (0)
 #  define DEBUG_i_TEST (0)
@@ -4025,6 +4029,7 @@ Gid_t getegid (void);
 #  define DEBUG_C(a)
 #  define DEBUG_A(a)
 #  define DEBUG_q(a)
+#  define DEBUG_M(a)
 #  define DEBUG_B(a)
 #  define DEBUG_L(a)
 #  define DEBUG_i(a)
@@ -4723,9 +4728,9 @@ EXTCONST unsigned char PL_freq[];
 #ifdef DOINIT
 EXTCONST char* const PL_block_type[] = {
        "NULL",
-       "WHERESO",
+       "WHEN",
        "BLOCK",
-       "LOOP_GIVEN",
+       "GIVEN",
        "LOOP_ARY",
        "LOOP_LAZYSV",
        "LOOP_LAZYIV",
index 42c9c02..610963f 100644 (file)
--- a/perly.act
+++ b/perly.act
@@ -392,18 +392,18 @@ case 2:
 
   case 39:
 #line 382 "perly.y" /* yacc.c:1646  */
-    {
-                         OP *cond = (ps[-2].val.opval);
-                         if ((ps[-5].val.ival))
-                           cond = newBINOP(OP_SMARTMATCH, 0, newDEFSVOP(),
-                                           scalar(cond));
-                         (yyval.opval) = block_end((ps[-3].val.ival), newWHERESOOP(cond, op_scope((ps[0].val.opval))));
-                       }
+    { (yyval.opval) = block_end((ps[-3].val.ival), newWHENOP((ps[-2].val.opval), op_scope((ps[0].val.opval)))); }
 
     break;
 
   case 40:
-#line 390 "perly.y" /* yacc.c:1646  */
+#line 384 "perly.y" /* yacc.c:1646  */
+    { (yyval.opval) = newWHENOP(0, op_scope((ps[0].val.opval))); }
+
+    break;
+
+  case 41:
+#line 386 "perly.y" /* yacc.c:1646  */
     {
                          (yyval.opval) = block_end((ps[-5].val.ival),
                                  newWHILEOP(0, 1, NULL,
@@ -413,8 +413,8 @@ case 2:
 
     break;
 
-  case 41:
-#line 397 "perly.y" /* yacc.c:1646  */
+  case 42:
+#line 393 "perly.y" /* yacc.c:1646  */
     {
                          (yyval.opval) = block_end((ps[-5].val.ival),
                                  newWHILEOP(0, 1, NULL,
@@ -424,20 +424,20 @@ case 2:
 
     break;
 
-  case 42:
-#line 404 "perly.y" /* yacc.c:1646  */
+  case 43:
+#line 400 "perly.y" /* yacc.c:1646  */
     { parser->expect = XTERM; }
 
     break;
 
-  case 43:
-#line 406 "perly.y" /* yacc.c:1646  */
+  case 44:
+#line 402 "perly.y" /* yacc.c:1646  */
     { parser->expect = XTERM; }
 
     break;
 
-  case 44:
-#line 409 "perly.y" /* yacc.c:1646  */
+  case 45:
+#line 405 "perly.y" /* yacc.c:1646  */
     {
                          OP *initop = (ps[-9].val.opval);
                          OP *forop = newWHILEOP(0, 1, NULL,
@@ -455,8 +455,8 @@ case 2:
 
     break;
 
-  case 45:
-#line 424 "perly.y" /* yacc.c:1646  */
+  case 46:
+#line 420 "perly.y" /* yacc.c:1646  */
     {
                          (yyval.opval) = block_end((ps[-6].val.ival), newFOROP(0, (ps[-5].val.opval), (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval)));
                          parser->copline = (line_t)(ps[-8].val.ival);
@@ -464,8 +464,8 @@ case 2:
 
     break;
 
-  case 46:
-#line 429 "perly.y" /* yacc.c:1646  */
+  case 47:
+#line 425 "perly.y" /* yacc.c:1646  */
     {
                          (yyval.opval) = block_end((ps[-4].val.ival), newFOROP(0,
                                      op_lvalue((ps[-6].val.opval), OP_ENTERLOOP), (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval)));
@@ -474,14 +474,14 @@ case 2:
 
     break;
 
-  case 47:
-#line 435 "perly.y" /* yacc.c:1646  */
+  case 48:
+#line 431 "perly.y" /* yacc.c:1646  */
     { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); }
 
     break;
 
-  case 48:
-#line 437 "perly.y" /* yacc.c:1646  */
+  case 49:
+#line 433 "perly.y" /* yacc.c:1646  */
     {
                          (yyval.opval) = block_end(
                                (ps[-7].val.ival),
@@ -497,8 +497,8 @@ case 2:
 
     break;
 
-  case 49:
-#line 450 "perly.y" /* yacc.c:1646  */
+  case 50:
+#line 446 "perly.y" /* yacc.c:1646  */
     {
                          (yyval.opval) = block_end((ps[-4].val.ival), newFOROP(
                                0, op_lvalue(newUNOP(OP_REFGEN, 0,
@@ -509,8 +509,8 @@ case 2:
 
     break;
 
-  case 50:
-#line 458 "perly.y" /* yacc.c:1646  */
+  case 51:
+#line 454 "perly.y" /* yacc.c:1646  */
     {
                          (yyval.opval) = block_end((ps[-4].val.ival),
                                  newFOROP(0, NULL, (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval)));
@@ -519,8 +519,8 @@ case 2:
 
     break;
 
-  case 51:
-#line 464 "perly.y" /* yacc.c:1646  */
+  case 52:
+#line 460 "perly.y" /* yacc.c:1646  */
     {
                          /* a block is a loop that happens once */
                          (yyval.opval) = newWHILEOP(0, 1, NULL,
@@ -529,8 +529,8 @@ case 2:
 
     break;
 
-  case 52:
-#line 470 "perly.y" /* yacc.c:1646  */
+  case 53:
+#line 466 "perly.y" /* yacc.c:1646  */
     {
                          package((ps[-2].val.opval));
                          if ((ps[-3].val.opval)) {
@@ -540,8 +540,8 @@ case 2:
 
     break;
 
-  case 53:
-#line 477 "perly.y" /* yacc.c:1646  */
+  case 54:
+#line 473 "perly.y" /* yacc.c:1646  */
     {
                          /* a block is a loop that happens once */
                          (yyval.opval) = newWHILEOP(0, 1, NULL,
@@ -552,16 +552,16 @@ case 2:
 
     break;
 
-  case 54:
-#line 485 "perly.y" /* yacc.c:1646  */
+  case 55:
+#line 481 "perly.y" /* yacc.c:1646  */
     {
                          (yyval.opval) = (ps[-1].val.opval);
                        }
 
     break;
 
-  case 55:
-#line 489 "perly.y" /* yacc.c:1646  */
+  case 56:
+#line 485 "perly.y" /* yacc.c:1646  */
     {
                          (yyval.opval) = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0),
                                newSVOP(OP_CONST, 0, newSVpvs("Unimplemented")));
@@ -569,8 +569,8 @@ case 2:
 
     break;
 
-  case 56:
-#line 494 "perly.y" /* yacc.c:1646  */
+  case 57:
+#line 490 "perly.y" /* yacc.c:1646  */
     {
                          (yyval.opval) = NULL;
                          parser->copline = NOLINE;
@@ -578,8 +578,8 @@ case 2:
 
     break;
 
-  case 57:
-#line 502 "perly.y" /* yacc.c:1646  */
+  case 58:
+#line 498 "perly.y" /* yacc.c:1646  */
     { OP *list;
                          if ((ps[0].val.opval)) {
                              OP *term = (ps[0].val.opval);
@@ -597,81 +597,75 @@ case 2:
 
     break;
 
-  case 58:
-#line 519 "perly.y" /* yacc.c:1646  */
+  case 59:
+#line 515 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = NULL; }
 
     break;
 
-  case 59:
-#line 521 "perly.y" /* yacc.c:1646  */
+  case 60:
+#line 517 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = op_unscope((ps[-1].val.opval)); }
 
     break;
 
-  case 60:
-#line 526 "perly.y" /* yacc.c:1646  */
+  case 61:
+#line 522 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = NULL; }
 
     break;
 
-  case 61:
-#line 528 "perly.y" /* yacc.c:1646  */
+  case 62:
+#line 524 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 62:
-#line 530 "perly.y" /* yacc.c:1646  */
+  case 63:
+#line 526 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[0].val.opval), (ps[-2].val.opval)); }
 
     break;
 
-  case 63:
-#line 532 "perly.y" /* yacc.c:1646  */
+  case 64:
+#line 528 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[0].val.opval), (ps[-2].val.opval)); }
 
     break;
 
-  case 64:
-#line 534 "perly.y" /* yacc.c:1646  */
+  case 65:
+#line 530 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, scalar((ps[0].val.opval)), (ps[-2].val.opval)); }
 
     break;
 
-  case 65:
-#line 536 "perly.y" /* yacc.c:1646  */
+  case 66:
+#line 532 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, (ps[0].val.opval), (ps[-2].val.opval)); }
 
     break;
 
-  case 66:
-#line 538 "perly.y" /* yacc.c:1646  */
+  case 67:
+#line 534 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newFOROP(0, NULL, (ps[0].val.opval), (ps[-2].val.opval), NULL);
                          parser->copline = (line_t)(ps[-1].val.ival); }
 
     break;
 
-  case 67:
-#line 541 "perly.y" /* yacc.c:1646  */
-    {
-                         OP *cond = (ps[0].val.opval);
-                         if ((ps[-1].val.ival))
-                           cond = newBINOP(OP_SMARTMATCH, 0, newDEFSVOP(),
-                                           scalar(cond));
-                         (yyval.opval) = newWHERESOOP(cond, op_scope((ps[-2].val.opval)));
-                       }
+  case 68:
+#line 537 "perly.y" /* yacc.c:1646  */
+    { (yyval.opval) = newWHENOP((ps[0].val.opval), op_scope((ps[-2].val.opval))); }
 
     break;
 
-  case 68:
-#line 552 "perly.y" /* yacc.c:1646  */
+  case 69:
+#line 542 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = NULL; }
 
     break;
 
-  case 69:
-#line 554 "perly.y" /* yacc.c:1646  */
+  case 70:
+#line 544 "perly.y" /* yacc.c:1646  */
     {
                          ((ps[0].val.opval))->op_flags |= OPf_PARENS;
                          (yyval.opval) = op_scope((ps[0].val.opval));
@@ -679,8 +673,8 @@ case 2:
 
     break;
 
-  case 70:
-#line 559 "perly.y" /* yacc.c:1646  */
+  case 71:
+#line 549 "perly.y" /* yacc.c:1646  */
     { parser->copline = (line_t)(ps[-5].val.ival);
                            (yyval.opval) = newCONDOP(0,
                                newSTATEOP(OPf_SPECIAL,NULL,(ps[-3].val.opval)),
@@ -690,153 +684,153 @@ case 2:
 
     break;
 
-  case 71:
-#line 569 "perly.y" /* yacc.c:1646  */
+  case 72:
+#line 559 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = NULL; }
 
     break;
 
-  case 72:
-#line 571 "perly.y" /* yacc.c:1646  */
+  case 73:
+#line 561 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = op_scope((ps[0].val.opval)); }
 
     break;
 
-  case 73:
-#line 576 "perly.y" /* yacc.c:1646  */
+  case 74:
+#line 566 "perly.y" /* yacc.c:1646  */
     { (yyval.ival) = (PL_min_intro_pending &&
                            PL_max_intro_pending >=  PL_min_intro_pending);
                          intro_my(); }
 
     break;
 
-  case 74:
-#line 582 "perly.y" /* yacc.c:1646  */
+  case 75:
+#line 572 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = NULL; }
 
     break;
 
-  case 76:
-#line 588 "perly.y" /* yacc.c:1646  */
+  case 77:
+#line 578 "perly.y" /* yacc.c:1646  */
     { YYSTYPE tmplval;
                          (void)scan_num("1", &tmplval);
                          (yyval.opval) = tmplval.opval; }
 
     break;
 
-  case 78:
-#line 596 "perly.y" /* yacc.c:1646  */
+  case 79:
+#line 586 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = invert(scalar((ps[0].val.opval))); }
 
     break;
 
-  case 79:
-#line 601 "perly.y" /* yacc.c:1646  */
+  case 80:
+#line 591 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = (ps[0].val.opval); intro_my(); }
 
     break;
 
-  case 80:
-#line 605 "perly.y" /* yacc.c:1646  */
+  case 81:
+#line 595 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = (ps[0].val.opval); intro_my(); }
 
     break;
 
-  case 81:
-#line 608 "perly.y" /* yacc.c:1646  */
+  case 82:
+#line 598 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 82:
-#line 609 "perly.y" /* yacc.c:1646  */
+  case 83:
+#line 599 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = NULL; }
 
     break;
 
-  case 83:
-#line 613 "perly.y" /* yacc.c:1646  */
+  case 84:
+#line 603 "perly.y" /* yacc.c:1646  */
     { (yyval.ival) = start_subparse(FALSE, 0);
                            SAVEFREESV(PL_compcv); }
 
     break;
 
-  case 84:
-#line 619 "perly.y" /* yacc.c:1646  */
+  case 85:
+#line 609 "perly.y" /* yacc.c:1646  */
     { (yyval.ival) = start_subparse(FALSE, CVf_ANON);
                            SAVEFREESV(PL_compcv); }
 
     break;
 
-  case 85:
-#line 624 "perly.y" /* yacc.c:1646  */
+  case 86:
+#line 614 "perly.y" /* yacc.c:1646  */
     { (yyval.ival) = start_subparse(TRUE, 0);
                            SAVEFREESV(PL_compcv); }
 
     break;
 
-  case 88:
-#line 635 "perly.y" /* yacc.c:1646  */
+  case 89:
+#line 625 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = NULL; }
 
     break;
 
-  case 90:
-#line 641 "perly.y" /* yacc.c:1646  */
+  case 91:
+#line 631 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = NULL; }
 
     break;
 
-  case 91:
-#line 643 "perly.y" /* yacc.c:1646  */
+  case 92:
+#line 633 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 92:
-#line 645 "perly.y" /* yacc.c:1646  */
+  case 93:
+#line 635 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = NULL; }
 
     break;
 
-  case 93:
-#line 650 "perly.y" /* yacc.c:1646  */
+  case 94:
+#line 640 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 94:
-#line 652 "perly.y" /* yacc.c:1646  */
+  case 95:
+#line 642 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = NULL; }
 
     break;
 
-  case 95:
-#line 663 "perly.y" /* yacc.c:1646  */
+  case 96:
+#line 653 "perly.y" /* yacc.c:1646  */
     { parser->in_my = 0; (yyval.opval) = NULL; }
 
     break;
 
-  case 96:
-#line 665 "perly.y" /* yacc.c:1646  */
+  case 97:
+#line 655 "perly.y" /* yacc.c:1646  */
     { parser->in_my = 0; (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 97:
-#line 670 "perly.y" /* yacc.c:1646  */
+  case 98:
+#line 660 "perly.y" /* yacc.c:1646  */
     { (yyval.ival) = '@'; }
 
     break;
 
-  case 98:
-#line 672 "perly.y" /* yacc.c:1646  */
+  case 99:
+#line 662 "perly.y" /* yacc.c:1646  */
     { (yyval.ival) = '%'; }
 
     break;
 
-  case 99:
-#line 676 "perly.y" /* yacc.c:1646  */
+  case 100:
+#line 666 "perly.y" /* yacc.c:1646  */
     {
                             I32 sigil   = (ps[-2].val.ival);
                             OP *var     = (ps[-1].val.opval);
@@ -855,26 +849,26 @@ case 2:
 
     break;
 
-  case 100:
-#line 695 "perly.y" /* yacc.c:1646  */
+  case 101:
+#line 685 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = NULL; }
 
     break;
 
-  case 101:
-#line 697 "perly.y" /* yacc.c:1646  */
+  case 102:
+#line 687 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newOP(OP_NULL, 0); }
 
     break;
 
-  case 102:
-#line 699 "perly.y" /* yacc.c:1646  */
+  case 103:
+#line 689 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 103:
-#line 705 "perly.y" /* yacc.c:1646  */
+  case 104:
+#line 695 "perly.y" /* yacc.c:1646  */
     {
                             OP *var     = (ps[-1].val.opval);
                             OP *defexpr = (ps[0].val.opval);
@@ -938,52 +932,52 @@ case 2:
 
     break;
 
-  case 104:
-#line 770 "perly.y" /* yacc.c:1646  */
+  case 105:
+#line 760 "perly.y" /* yacc.c:1646  */
     { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 105:
-#line 772 "perly.y" /* yacc.c:1646  */
+  case 106:
+#line 762 "perly.y" /* yacc.c:1646  */
     { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 106:
-#line 778 "perly.y" /* yacc.c:1646  */
+  case 107:
+#line 768 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = (ps[-1].val.opval); }
 
     break;
 
-  case 107:
-#line 780 "perly.y" /* yacc.c:1646  */
+  case 108:
+#line 770 "perly.y" /* yacc.c:1646  */
     {
                          (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-2].val.opval), (ps[0].val.opval));
                        }
 
     break;
 
-  case 108:
-#line 784 "perly.y" /* yacc.c:1646  */
+  case 109:
+#line 774 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 109:
-#line 789 "perly.y" /* yacc.c:1646  */
+  case 110:
+#line 779 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = NULL; }
 
     break;
 
-  case 110:
-#line 791 "perly.y" /* yacc.c:1646  */
+  case 111:
+#line 781 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 111:
-#line 795 "perly.y" /* yacc.c:1646  */
+  case 112:
+#line 785 "perly.y" /* yacc.c:1646  */
     {
                             ENTER;
                             SAVEIV(parser->sig_elems);
@@ -997,8 +991,8 @@ case 2:
 
     break;
 
-  case 112:
-#line 807 "perly.y" /* yacc.c:1646  */
+  case 113:
+#line 797 "perly.y" /* yacc.c:1646  */
     {
                             OP            *sigops = (ps[-1].val.opval);
                             UNOP_AUX_item *aux;
@@ -1036,38 +1030,38 @@ case 2:
 
     break;
 
-  case 114:
-#line 847 "perly.y" /* yacc.c:1646  */
+  case 115:
+#line 837 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = NULL; }
 
     break;
 
-  case 115:
-#line 852 "perly.y" /* yacc.c:1646  */
+  case 116:
+#line 842 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
-  case 116:
-#line 854 "perly.y" /* yacc.c:1646  */
+  case 117:
+#line 844 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newLOGOP((ps[-1].val.ival), 0, (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
-  case 117:
-#line 856 "perly.y" /* yacc.c:1646  */
+  case 118:
+#line 846 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
-  case 119:
-#line 862 "perly.y" /* yacc.c:1646  */
+  case 120:
+#line 852 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = (ps[-1].val.opval); }
 
     break;
 
-  case 120:
-#line 864 "perly.y" /* yacc.c:1646  */
+  case 121:
+#line 854 "perly.y" /* yacc.c:1646  */
     {
                          OP* term = (ps[0].val.opval);
                          (yyval.opval) = op_append_elem(OP_LIST, (ps[-2].val.opval), term);
@@ -1075,24 +1069,24 @@ case 2:
 
     break;
 
-  case 122:
-#line 873 "perly.y" /* yacc.c:1646  */
+  case 123:
+#line 863 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = op_convert_list((ps[-2].val.ival), OPf_STACKED,
                                op_prepend_elem(OP_LIST, newGVREF((ps[-2].val.ival),(ps[-1].val.opval)), (ps[0].val.opval)) );
                        }
 
     break;
 
-  case 123:
-#line 877 "perly.y" /* yacc.c:1646  */
+  case 124:
+#line 867 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = op_convert_list((ps[-4].val.ival), OPf_STACKED,
                                op_prepend_elem(OP_LIST, newGVREF((ps[-4].val.ival),(ps[-2].val.opval)), (ps[-1].val.opval)) );
                        }
 
     break;
 
-  case 124:
-#line 881 "perly.y" /* yacc.c:1646  */
+  case 125:
+#line 871 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED,
                                op_append_elem(OP_LIST,
                                    op_prepend_elem(OP_LIST, scalar((ps[-5].val.opval)), (ps[-1].val.opval)),
@@ -1101,8 +1095,8 @@ case 2:
 
     break;
 
-  case 125:
-#line 887 "perly.y" /* yacc.c:1646  */
+  case 126:
+#line 877 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED,
                                op_append_elem(OP_LIST, scalar((ps[-2].val.opval)),
                                    newMETHOP(OP_METHOD, 0, (ps[0].val.opval))));
@@ -1110,8 +1104,8 @@ case 2:
 
     break;
 
-  case 126:
-#line 892 "perly.y" /* yacc.c:1646  */
+  case 127:
+#line 882 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED,
                                op_append_elem(OP_LIST,
                                    op_prepend_elem(OP_LIST, (ps[-1].val.opval), (ps[0].val.opval)),
@@ -1120,8 +1114,8 @@ case 2:
 
     break;
 
-  case 127:
-#line 898 "perly.y" /* yacc.c:1646  */
+  case 128:
+#line 888 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED,
                                op_append_elem(OP_LIST,
                                    op_prepend_elem(OP_LIST, (ps[-3].val.opval), (ps[-1].val.opval)),
@@ -1130,27 +1124,27 @@ case 2:
 
     break;
 
-  case 128:
-#line 904 "perly.y" /* yacc.c:1646  */
+  case 129:
+#line 894 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = op_convert_list((ps[-1].val.ival), 0, (ps[0].val.opval)); }
 
     break;
 
-  case 129:
-#line 906 "perly.y" /* yacc.c:1646  */
+  case 130:
+#line 896 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); }
 
     break;
 
-  case 130:
-#line 908 "perly.y" /* yacc.c:1646  */
+  case 131:
+#line 898 "perly.y" /* yacc.c:1646  */
     { SvREFCNT_inc_simple_void(PL_compcv);
                          (yyval.opval) = newANONATTRSUB((ps[-1].val.ival), 0, NULL, (ps[0].val.opval)); }
 
     break;
 
-  case 131:
-#line 911 "perly.y" /* yacc.c:1646  */
+  case 132:
+#line 901 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                 op_append_elem(OP_LIST,
                                   op_prepend_elem(OP_LIST, (ps[-1].val.opval), (ps[0].val.opval)), (ps[-4].val.opval)));
@@ -1158,21 +1152,21 @@ case 2:
 
     break;
 
-  case 134:
-#line 926 "perly.y" /* yacc.c:1646  */
+  case 135:
+#line 916 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newBINOP(OP_GELEM, 0, (ps[-4].val.opval), scalar((ps[-2].val.opval))); }
 
     break;
 
-  case 135:
-#line 928 "perly.y" /* yacc.c:1646  */
+  case 136:
+#line 918 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[-3].val.opval)), scalar((ps[-1].val.opval)));
                        }
 
     break;
 
-  case 136:
-#line 931 "perly.y" /* yacc.c:1646  */
+  case 137:
+#line 921 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newBINOP(OP_AELEM, 0,
                                        ref(newAVREF((ps[-4].val.opval)),OP_RV2AV),
                                        scalar((ps[-1].val.opval)));
@@ -1180,8 +1174,8 @@ case 2:
 
     break;
 
-  case 137:
-#line 936 "perly.y" /* yacc.c:1646  */
+  case 138:
+#line 926 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newBINOP(OP_AELEM, 0,
                                        ref(newAVREF((ps[-3].val.opval)),OP_RV2AV),
                                        scalar((ps[-1].val.opval)));
@@ -1189,91 +1183,91 @@ case 2:
 
     break;
 
-  case 138:
-#line 941 "perly.y" /* yacc.c:1646  */
+  case 139:
+#line 931 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[-4].val.opval)), jmaybe((ps[-2].val.opval)));
                        }
 
     break;
 
-  case 139:
-#line 944 "perly.y" /* yacc.c:1646  */
+  case 140:
+#line 934 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF((ps[-5].val.opval)),OP_RV2HV),
                                        jmaybe((ps[-2].val.opval))); }
 
     break;
 
-  case 140:
-#line 948 "perly.y" /* yacc.c:1646  */
+  case 141:
+#line 938 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newBINOP(OP_HELEM, 0,
                                        ref(newHVREF((ps[-4].val.opval)),OP_RV2HV),
                                        jmaybe((ps[-2].val.opval))); }
 
     break;
 
-  case 141:
-#line 952 "perly.y" /* yacc.c:1646  */
+  case 142:
+#line 942 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   newCVREF(0, scalar((ps[-3].val.opval)))); }
 
     break;
 
-  case 142:
-#line 955 "perly.y" /* yacc.c:1646  */
+  case 143:
+#line 945 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   op_append_elem(OP_LIST, (ps[-1].val.opval),
                                       newCVREF(0, scalar((ps[-4].val.opval))))); }
 
     break;
 
-  case 143:
-#line 960 "perly.y" /* yacc.c:1646  */
+  case 144:
+#line 950 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   op_append_elem(OP_LIST, (ps[-1].val.opval),
                                               newCVREF(0, scalar((ps[-3].val.opval))))); }
 
     break;
 
-  case 144:
-#line 964 "perly.y" /* yacc.c:1646  */
+  case 145:
+#line 954 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                   newCVREF(0, scalar((ps[-2].val.opval)))); }
 
     break;
 
-  case 145:
-#line 967 "perly.y" /* yacc.c:1646  */
+  case 146:
+#line 957 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-4].val.opval)); }
 
     break;
 
-  case 146:
-#line 969 "perly.y" /* yacc.c:1646  */
+  case 147:
+#line 959 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-3].val.opval)); }
 
     break;
 
-  case 147:
-#line 971 "perly.y" /* yacc.c:1646  */
+  case 148:
+#line 961 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), NULL); }
 
     break;
 
-  case 148:
-#line 976 "perly.y" /* yacc.c:1646  */
+  case 149:
+#line 966 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[-2].val.opval), (ps[-1].val.ival), (ps[0].val.opval)); }
 
     break;
 
-  case 149:
-#line 978 "perly.y" /* yacc.c:1646  */
+  case 150:
+#line 968 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
 
     break;
 
-  case 150:
-#line 980 "perly.y" /* yacc.c:1646  */
+  case 151:
+#line 970 "perly.y" /* yacc.c:1646  */
     {   if ((ps[-1].val.ival) != OP_REPEAT)
                                scalar((ps[-2].val.opval));
                            (yyval.opval) = newBINOP((ps[-1].val.ival), 0, (ps[-2].val.opval), scalar((ps[0].val.opval)));
@@ -1281,112 +1275,112 @@ case 2:
 
     break;
 
-  case 151:
-#line 985 "perly.y" /* yacc.c:1646  */
-    { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
-
-    break;
-
   case 152:
-#line 987 "perly.y" /* yacc.c:1646  */
+#line 975 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
 
     break;
 
   case 153:
-#line 989 "perly.y" /* yacc.c:1646  */
+#line 977 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
 
     break;
 
   case 154:
-#line 991 "perly.y" /* yacc.c:1646  */
+#line 979 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
 
     break;
 
   case 155:
-#line 993 "perly.y" /* yacc.c:1646  */
+#line 981 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
 
     break;
 
   case 156:
-#line 995 "perly.y" /* yacc.c:1646  */
+#line 983 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
 
     break;
 
   case 157:
-#line 997 "perly.y" /* yacc.c:1646  */
-    { (yyval.opval) = newRANGE((ps[-1].val.ival), scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
+#line 985 "perly.y" /* yacc.c:1646  */
+    { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
 
     break;
 
   case 158:
-#line 999 "perly.y" /* yacc.c:1646  */
-    { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
+#line 987 "perly.y" /* yacc.c:1646  */
+    { (yyval.opval) = newRANGE((ps[-1].val.ival), scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
 
     break;
 
   case 159:
-#line 1001 "perly.y" /* yacc.c:1646  */
-    { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
+#line 989 "perly.y" /* yacc.c:1646  */
+    { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 160:
-#line 1003 "perly.y" /* yacc.c:1646  */
-    { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
+#line 991 "perly.y" /* yacc.c:1646  */
+    { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 161:
-#line 1005 "perly.y" /* yacc.c:1646  */
-    { (yyval.opval) = bind_match((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
+#line 993 "perly.y" /* yacc.c:1646  */
+    { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 162:
-#line 1010 "perly.y" /* yacc.c:1646  */
-    { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[0].val.opval))); }
+#line 995 "perly.y" /* yacc.c:1646  */
+    { (yyval.opval) = bind_match((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 163:
-#line 1012 "perly.y" /* yacc.c:1646  */
-    { (yyval.opval) = (ps[0].val.opval); }
+#line 1000 "perly.y" /* yacc.c:1646  */
+    { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[0].val.opval))); }
 
     break;
 
   case 164:
-#line 1015 "perly.y" /* yacc.c:1646  */
-    { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); }
+#line 1002 "perly.y" /* yacc.c:1646  */
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 165:
-#line 1017 "perly.y" /* yacc.c:1646  */
-    { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, scalar((ps[0].val.opval))); }
+#line 1005 "perly.y" /* yacc.c:1646  */
+    { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); }
 
     break;
 
   case 166:
-#line 1019 "perly.y" /* yacc.c:1646  */
+#line 1007 "perly.y" /* yacc.c:1646  */
+    { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, scalar((ps[0].val.opval))); }
+
+    break;
+
+  case 167:
+#line 1009 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newUNOP(OP_POSTINC, 0,
                                        op_lvalue(scalar((ps[-1].val.opval)), OP_POSTINC)); }
 
     break;
 
-  case 167:
-#line 1022 "perly.y" /* yacc.c:1646  */
+  case 168:
+#line 1012 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newUNOP(OP_POSTDEC, 0,
                                        op_lvalue(scalar((ps[-1].val.opval)), OP_POSTDEC));}
 
     break;
 
-  case 168:
-#line 1025 "perly.y" /* yacc.c:1646  */
+  case 169:
+#line 1015 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = op_convert_list(OP_JOIN, 0,
                                       op_append_elem(
                                        OP_LIST,
@@ -1400,53 +1394,53 @@ case 2:
 
     break;
 
-  case 169:
-#line 1036 "perly.y" /* yacc.c:1646  */
+  case 170:
+#line 1026 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newUNOP(OP_PREINC, 0,
                                        op_lvalue(scalar((ps[0].val.opval)), OP_PREINC)); }
 
     break;
 
-  case 170:
-#line 1039 "perly.y" /* yacc.c:1646  */
+  case 171:
+#line 1029 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newUNOP(OP_PREDEC, 0,
                                        op_lvalue(scalar((ps[0].val.opval)), OP_PREDEC)); }
 
     break;
 
-  case 171:
-#line 1046 "perly.y" /* yacc.c:1646  */
+  case 172:
+#line 1036 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newANONLIST((ps[-1].val.opval)); }
 
     break;
 
-  case 172:
-#line 1048 "perly.y" /* yacc.c:1646  */
+  case 173:
+#line 1038 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newANONLIST(NULL);}
 
     break;
 
-  case 173:
-#line 1050 "perly.y" /* yacc.c:1646  */
+  case 174:
+#line 1040 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newANONHASH((ps[-2].val.opval)); }
 
     break;
 
-  case 174:
-#line 1052 "perly.y" /* yacc.c:1646  */
+  case 175:
+#line 1042 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newANONHASH(NULL); }
 
     break;
 
-  case 175:
-#line 1054 "perly.y" /* yacc.c:1646  */
+  case 176:
+#line 1044 "perly.y" /* yacc.c:1646  */
     { SvREFCNT_inc_simple_void(PL_compcv);
                          (yyval.opval) = newANONATTRSUB((ps[-3].val.ival), (ps[-2].val.opval), (ps[-1].val.opval), (ps[0].val.opval)); }
 
     break;
 
-  case 176:
-#line 1057 "perly.y" /* yacc.c:1646  */
+  case 177:
+#line 1047 "perly.y" /* yacc.c:1646  */
     {
                          OP *body;
                          if (parser->copline > (line_t)(ps[-2].val.ival))
@@ -1459,104 +1453,104 @@ case 2:
 
     break;
 
-  case 177:
-#line 1071 "perly.y" /* yacc.c:1646  */
+  case 178:
+#line 1061 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = dofile((ps[0].val.opval), (ps[-1].val.ival));}
 
     break;
 
-  case 178:
-#line 1073 "perly.y" /* yacc.c:1646  */
+  case 179:
+#line 1063 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, op_scope((ps[0].val.opval)));}
 
     break;
 
-  case 183:
-#line 1081 "perly.y" /* yacc.c:1646  */
-    { (yyval.opval) = newCONDOP(0, (ps[-4].val.opval), (ps[-2].val.opval), (ps[0].val.opval)); }
-
-    break;
-
   case 184:
-#line 1083 "perly.y" /* yacc.c:1646  */
-    { (yyval.opval) = newUNOP(OP_REFGEN, 0, (ps[0].val.opval)); }
+#line 1071 "perly.y" /* yacc.c:1646  */
+    { (yyval.opval) = newCONDOP(0, (ps[-4].val.opval), (ps[-2].val.opval), (ps[0].val.opval)); }
 
     break;
 
   case 185:
-#line 1085 "perly.y" /* yacc.c:1646  */
-    { (yyval.opval) = newUNOP(OP_REFGEN, 0, localize((ps[0].val.opval),1)); }
+#line 1073 "perly.y" /* yacc.c:1646  */
+    { (yyval.opval) = newUNOP(OP_REFGEN, 0, (ps[0].val.opval)); }
 
     break;
 
   case 186:
-#line 1087 "perly.y" /* yacc.c:1646  */
-    { (yyval.opval) = (ps[0].val.opval); }
+#line 1075 "perly.y" /* yacc.c:1646  */
+    { (yyval.opval) = newUNOP(OP_REFGEN, 0, localize((ps[0].val.opval),1)); }
 
     break;
 
   case 187:
-#line 1089 "perly.y" /* yacc.c:1646  */
-    { (yyval.opval) = localize((ps[0].val.opval),0); }
+#line 1077 "perly.y" /* yacc.c:1646  */
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 188:
-#line 1091 "perly.y" /* yacc.c:1646  */
-    { (yyval.opval) = sawparens((ps[-1].val.opval)); }
+#line 1079 "perly.y" /* yacc.c:1646  */
+    { (yyval.opval) = localize((ps[0].val.opval),0); }
 
     break;
 
   case 189:
-#line 1093 "perly.y" /* yacc.c:1646  */
-    { (yyval.opval) = (ps[0].val.opval); }
+#line 1081 "perly.y" /* yacc.c:1646  */
+    { (yyval.opval) = sawparens((ps[-1].val.opval)); }
 
     break;
 
   case 190:
-#line 1095 "perly.y" /* yacc.c:1646  */
-    { (yyval.opval) = sawparens(newNULLLIST()); }
+#line 1083 "perly.y" /* yacc.c:1646  */
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 191:
-#line 1097 "perly.y" /* yacc.c:1646  */
-    { (yyval.opval) = (ps[0].val.opval); }
+#line 1085 "perly.y" /* yacc.c:1646  */
+    { (yyval.opval) = sawparens(newNULLLIST()); }
 
     break;
 
   case 192:
-#line 1099 "perly.y" /* yacc.c:1646  */
+#line 1087 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 193:
-#line 1101 "perly.y" /* yacc.c:1646  */
+#line 1089 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 194:
-#line 1103 "perly.y" /* yacc.c:1646  */
+#line 1091 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 195:
-#line 1105 "perly.y" /* yacc.c:1646  */
-    { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[0].val.opval), OP_AV2ARYLEN));}
+#line 1093 "perly.y" /* yacc.c:1646  */
+    { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
   case 196:
-#line 1107 "perly.y" /* yacc.c:1646  */
-    { (yyval.opval) = (ps[0].val.opval); }
+#line 1095 "perly.y" /* yacc.c:1646  */
+    { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[0].val.opval), OP_AV2ARYLEN));}
 
     break;
 
   case 197:
-#line 1109 "perly.y" /* yacc.c:1646  */
+#line 1097 "perly.y" /* yacc.c:1646  */
+    { (yyval.opval) = (ps[0].val.opval); }
+
+    break;
+
+  case 198:
+#line 1099 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = op_prepend_elem(OP_ASLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_ASLICE, 0,
@@ -1569,8 +1563,8 @@ case 2:
 
     break;
 
-  case 198:
-#line 1119 "perly.y" /* yacc.c:1646  */
+  case 199:
+#line 1109 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = op_prepend_elem(OP_KVASLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_KVASLICE, 0,
@@ -1583,8 +1577,8 @@ case 2:
 
     break;
 
-  case 199:
-#line 1129 "perly.y" /* yacc.c:1646  */
+  case 200:
+#line 1119 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = op_prepend_elem(OP_HSLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_HSLICE, 0,
@@ -1597,8 +1591,8 @@ case 2:
 
     break;
 
-  case 200:
-#line 1139 "perly.y" /* yacc.c:1646  */
+  case 201:
+#line 1129 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = op_prepend_elem(OP_KVHSLICE,
                                newOP(OP_PUSHMARK, 0),
                                    newLISTOP(OP_KVHSLICE, 0,
@@ -1611,27 +1605,27 @@ case 2:
 
     break;
 
-  case 201:
-#line 1149 "perly.y" /* yacc.c:1646  */
+  case 202:
+#line 1139 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 202:
-#line 1151 "perly.y" /* yacc.c:1646  */
+  case 203:
+#line 1141 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[0].val.opval))); }
 
     break;
 
-  case 203:
-#line 1153 "perly.y" /* yacc.c:1646  */
+  case 204:
+#line 1143 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[-2].val.opval)));
                        }
 
     break;
 
-  case 204:
-#line 1156 "perly.y" /* yacc.c:1646  */
+  case 205:
+#line 1146 "perly.y" /* yacc.c:1646  */
     {
                          (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                                op_append_elem(OP_LIST, (ps[-1].val.opval), scalar((ps[-3].val.opval))));
@@ -1639,153 +1633,153 @@ case 2:
 
     break;
 
-  case 205:
-#line 1161 "perly.y" /* yacc.c:1646  */
+  case 206:
+#line 1151 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval))));
                        }
 
     break;
 
-  case 206:
-#line 1165 "perly.y" /* yacc.c:1646  */
+  case 207:
+#line 1155 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newSVREF((ps[-3].val.opval)); }
 
     break;
 
-  case 207:
-#line 1167 "perly.y" /* yacc.c:1646  */
+  case 208:
+#line 1157 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newAVREF((ps[-3].val.opval)); }
 
     break;
 
-  case 208:
-#line 1169 "perly.y" /* yacc.c:1646  */
+  case 209:
+#line 1159 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newHVREF((ps[-3].val.opval)); }
 
     break;
 
-  case 209:
-#line 1171 "perly.y" /* yacc.c:1646  */
+  case 210:
+#line 1161 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newUNOP(OP_ENTERSUB, 0,
                                       scalar(newCVREF((ps[-1].val.ival),(ps[-3].val.opval)))); }
 
     break;
 
-  case 210:
-#line 1174 "perly.y" /* yacc.c:1646  */
+  case 211:
+#line 1164 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newGVREF(0,(ps[-3].val.opval)); }
 
     break;
 
-  case 211:
-#line 1176 "perly.y" /* yacc.c:1646  */
+  case 212:
+#line 1166 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newOP((ps[0].val.ival), OPf_SPECIAL);
                            PL_hints |= HINT_BLOCK_SCOPE; }
 
     break;
 
-  case 212:
-#line 1179 "perly.y" /* yacc.c:1646  */
+  case 213:
+#line 1169 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newLOOPEX((ps[-1].val.ival),(ps[0].val.opval)); }
 
     break;
 
-  case 213:
-#line 1181 "perly.y" /* yacc.c:1646  */
+  case 214:
+#line 1171 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); }
 
     break;
 
-  case 214:
-#line 1183 "perly.y" /* yacc.c:1646  */
+  case 215:
+#line 1173 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newOP((ps[0].val.ival), 0); }
 
     break;
 
-  case 215:
-#line 1185 "perly.y" /* yacc.c:1646  */
+  case 216:
+#line 1175 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); }
 
     break;
 
-  case 216:
-#line 1187 "perly.y" /* yacc.c:1646  */
+  case 217:
+#line 1177 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); }
 
     break;
 
-  case 217:
-#line 1189 "perly.y" /* yacc.c:1646  */
+  case 218:
+#line 1179 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newOP(OP_REQUIRE, (ps[0].val.ival) ? OPf_SPECIAL : 0); }
 
     break;
 
-  case 218:
-#line 1191 "perly.y" /* yacc.c:1646  */
+  case 219:
+#line 1181 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newUNOP(OP_REQUIRE, (ps[-1].val.ival) ? OPf_SPECIAL : 0, (ps[0].val.opval)); }
 
     break;
 
-  case 219:
-#line 1193 "perly.y" /* yacc.c:1646  */
+  case 220:
+#line 1183 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); }
 
     break;
 
-  case 220:
-#line 1195 "perly.y" /* yacc.c:1646  */
+  case 221:
+#line 1185 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
                            op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval)))); }
 
     break;
 
-  case 221:
-#line 1198 "perly.y" /* yacc.c:1646  */
+  case 222:
+#line 1188 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newOP((ps[0].val.ival), 0); }
 
     break;
 
-  case 222:
-#line 1200 "perly.y" /* yacc.c:1646  */
+  case 223:
+#line 1190 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newOP((ps[-2].val.ival), 0);}
 
     break;
 
-  case 223:
-#line 1202 "perly.y" /* yacc.c:1646  */
+  case 224:
+#line 1192 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 224:
-#line 1204 "perly.y" /* yacc.c:1646  */
+  case 225:
+#line 1194 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = (ps[-2].val.opval); }
 
     break;
 
-  case 225:
-#line 1206 "perly.y" /* yacc.c:1646  */
+  case 226:
+#line 1196 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); }
 
     break;
 
-  case 226:
-#line 1208 "perly.y" /* yacc.c:1646  */
+  case 227:
+#line 1198 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = ((ps[-2].val.ival) == OP_NOT)
                           ? newUNOP((ps[-2].val.ival), 0, newSVOP(OP_CONST, 0, newSViv(0)))
                           : newOP((ps[-2].val.ival), OPf_SPECIAL); }
 
     break;
 
-  case 227:
-#line 1212 "perly.y" /* yacc.c:1646  */
+  case 228:
+#line 1202 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newUNOP((ps[-3].val.ival), 0, (ps[-1].val.opval)); }
 
     break;
 
-  case 228:
-#line 1214 "perly.y" /* yacc.c:1646  */
+  case 229:
+#line 1204 "perly.y" /* yacc.c:1646  */
     {
                            if (   (ps[0].val.opval)->op_type != OP_TRANS
                                && (ps[0].val.opval)->op_type != OP_TRANSR
@@ -1799,186 +1793,186 @@ case 2:
 
     break;
 
-  case 229:
-#line 1225 "perly.y" /* yacc.c:1646  */
+  case 230:
+#line 1215 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = pmruntime((ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), 1, (ps[-4].val.ival)); }
 
     break;
 
-  case 233:
-#line 1233 "perly.y" /* yacc.c:1646  */
+  case 234:
+#line 1223 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = my_attrs((ps[-1].val.opval),(ps[0].val.opval)); }
 
     break;
 
-  case 234:
-#line 1235 "perly.y" /* yacc.c:1646  */
+  case 235:
+#line 1225 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = localize((ps[0].val.opval),1); }
 
     break;
 
-  case 235:
-#line 1237 "perly.y" /* yacc.c:1646  */
+  case 236:
+#line 1227 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newUNOP(OP_REFGEN, 0, my_attrs((ps[-1].val.opval),(ps[0].val.opval))); }
 
     break;
 
-  case 236:
-#line 1242 "perly.y" /* yacc.c:1646  */
+  case 237:
+#line 1232 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = sawparens((ps[-1].val.opval)); }
 
     break;
 
-  case 237:
-#line 1244 "perly.y" /* yacc.c:1646  */
+  case 238:
+#line 1234 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = sawparens(newNULLLIST()); }
 
     break;
 
-  case 238:
-#line 1247 "perly.y" /* yacc.c:1646  */
+  case 239:
+#line 1237 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 239:
-#line 1249 "perly.y" /* yacc.c:1646  */
+  case 240:
+#line 1239 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 240:
-#line 1251 "perly.y" /* yacc.c:1646  */
+  case 241:
+#line 1241 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 241:
-#line 1256 "perly.y" /* yacc.c:1646  */
+  case 242:
+#line 1246 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = NULL; }
 
     break;
 
-  case 242:
-#line 1258 "perly.y" /* yacc.c:1646  */
+  case 243:
+#line 1248 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 243:
-#line 1262 "perly.y" /* yacc.c:1646  */
+  case 244:
+#line 1252 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = NULL; }
 
     break;
 
-  case 244:
-#line 1264 "perly.y" /* yacc.c:1646  */
+  case 245:
+#line 1254 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 245:
-#line 1268 "perly.y" /* yacc.c:1646  */
+  case 246:
+#line 1258 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = NULL; }
 
     break;
 
-  case 246:
-#line 1270 "perly.y" /* yacc.c:1646  */
+  case 247:
+#line 1260 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
 
-  case 247:
-#line 1276 "perly.y" /* yacc.c:1646  */
+  case 248:
+#line 1266 "perly.y" /* yacc.c:1646  */
     { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); }
 
     break;
 
-  case 255:
-#line 1293 "perly.y" /* yacc.c:1646  */
+  case 256:
+#line 1283 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newCVREF((ps[-1].val.ival),(ps[0].val.opval)); }
 
     break;
 
-  case 256:
-#line 1297 "perly.y" /* yacc.c:1646  */
+  case 257:
+#line 1287 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newSVREF((ps[0].val.opval)); }
 
     break;
 
-  case 257:
-#line 1301 "perly.y" /* yacc.c:1646  */
+  case 258:
+#line 1291 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newAVREF((ps[0].val.opval));
                          if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival);
                        }
 
     break;
 
-  case 258:
-#line 1307 "perly.y" /* yacc.c:1646  */
+  case 259:
+#line 1297 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newHVREF((ps[0].val.opval));
                          if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival);
                        }
 
     break;
 
-  case 259:
-#line 1313 "perly.y" /* yacc.c:1646  */
+  case 260:
+#line 1303 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newAVREF((ps[0].val.opval)); }
 
     break;
 
-  case 260:
-#line 1315 "perly.y" /* yacc.c:1646  */
+  case 261:
+#line 1305 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newAVREF((ps[-3].val.opval)); }
 
     break;
 
-  case 261:
-#line 1319 "perly.y" /* yacc.c:1646  */
+  case 262:
+#line 1309 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newGVREF(0,(ps[0].val.opval)); }
 
     break;
 
-  case 263:
-#line 1324 "perly.y" /* yacc.c:1646  */
+  case 264:
+#line 1314 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newAVREF((ps[-2].val.opval)); }
 
     break;
 
-  case 265:
-#line 1329 "perly.y" /* yacc.c:1646  */
+  case 266:
+#line 1319 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newHVREF((ps[-2].val.opval)); }
 
     break;
 
-  case 267:
-#line 1334 "perly.y" /* yacc.c:1646  */
+  case 268:
+#line 1324 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = newGVREF(0,(ps[-2].val.opval)); }
 
     break;
 
-  case 268:
-#line 1339 "perly.y" /* yacc.c:1646  */
+  case 269:
+#line 1329 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = scalar((ps[0].val.opval)); }
 
     break;
 
-  case 269:
-#line 1341 "perly.y" /* yacc.c:1646  */
+  case 270:
+#line 1331 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = scalar((ps[0].val.opval)); }
 
     break;
 
-  case 270:
-#line 1343 "perly.y" /* yacc.c:1646  */
+  case 271:
+#line 1333 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = op_scope((ps[0].val.opval)); }
 
     break;
 
-  case 271:
-#line 1346 "perly.y" /* yacc.c:1646  */
+  case 272:
+#line 1336 "perly.y" /* yacc.c:1646  */
     { (yyval.opval) = (ps[0].val.opval); }
 
     break;
@@ -1989,6 +1983,6 @@ case 2:
     
 
 /* Generated from:
- * 1d0c087affbf85a8f1482eb4d34eefd435666c6d9e1cb4d7f9d1aeb62b37e907 perly.y
+ * 78f9e1daf948a161b43e7457943b7d91cada7c92c8b941a1c1dbbc23c2c10aa8 perly.y
  * b6fae5748f9bef6db4740aa5e122b84ac5181852d42474d0ecad621fa4253306 regen_perly.pl
  * ex: set ro: */
diff --git a/perly.h b/perly.h
index 02561f7..765d07c 100644 (file)
--- a/perly.h
+++ b/perly.h
@@ -86,51 +86,52 @@ extern int yydebug;
     CONTINUE = 289,
     FOR = 290,
     GIVEN = 291,
-    WHERESO = 292,
-    LOOPEX = 293,
-    DOTDOT = 294,
-    YADAYADA = 295,
-    FUNC0 = 296,
-    FUNC1 = 297,
-    FUNC = 298,
-    UNIOP = 299,
-    LSTOP = 300,
-    RELOP = 301,
-    EQOP = 302,
-    MULOP = 303,
-    ADDOP = 304,
-    DOLSHARP = 305,
-    DO = 306,
-    HASHBRACK = 307,
-    NOAMP = 308,
-    LOCAL = 309,
-    MY = 310,
-    REQUIRE = 311,
-    COLONATTR = 312,
-    FORMLBRACK = 313,
-    FORMRBRACK = 314,
-    PREC_LOW = 315,
-    OROP = 316,
-    DOROP = 317,
-    ANDOP = 318,
-    NOTOP = 319,
-    ASSIGNOP = 320,
-    OROR = 321,
-    DORDOR = 322,
-    ANDAND = 323,
-    BITOROP = 324,
-    BITANDOP = 325,
-    SHIFTOP = 326,
-    MATCHOP = 327,
-    UMINUS = 328,
-    REFGEN = 329,
-    POWOP = 330,
-    PREINC = 331,
-    PREDEC = 332,
-    POSTINC = 333,
-    POSTDEC = 334,
-    POSTJOIN = 335,
-    ARROW = 336
+    WHEN = 292,
+    DEFAULT = 293,
+    LOOPEX = 294,
+    DOTDOT = 295,
+    YADAYADA = 296,
+    FUNC0 = 297,
+    FUNC1 = 298,
+    FUNC = 299,
+    UNIOP = 300,
+    LSTOP = 301,
+    RELOP = 302,
+    EQOP = 303,
+    MULOP = 304,
+    ADDOP = 305,
+    DOLSHARP = 306,
+    DO = 307,
+    HASHBRACK = 308,
+    NOAMP = 309,
+    LOCAL = 310,
+    MY = 311,
+    REQUIRE = 312,
+    COLONATTR = 313,
+    FORMLBRACK = 314,
+    FORMRBRACK = 315,
+    PREC_LOW = 316,
+    OROP = 317,
+    DOROP = 318,
+    ANDOP = 319,
+    NOTOP = 320,
+    ASSIGNOP = 321,
+    OROR = 322,
+    DORDOR = 323,
+    ANDAND = 324,
+    BITOROP = 325,
+    BITANDOP = 326,
+    SHIFTOP = 327,
+    MATCHOP = 328,
+    UMINUS = 329,
+    REFGEN = 330,
+    POWOP = 331,
+    PREINC = 332,
+    PREDEC = 333,
+    POSTINC = 334,
+    POSTDEC = 335,
+    POSTJOIN = 336,
+    ARROW = 337
   };
 #endif
 
@@ -180,6 +181,6 @@ int yyparse (void);
 
 
 /* Generated from:
- * 1d0c087affbf85a8f1482eb4d34eefd435666c6d9e1cb4d7f9d1aeb62b37e907 perly.y
+ * 78f9e1daf948a161b43e7457943b7d91cada7c92c8b941a1c1dbbc23c2c10aa8 perly.y
  * b6fae5748f9bef6db4740aa5e122b84ac5181852d42474d0ecad621fa4253306 regen_perly.pl
  * ex: set ro: */
index 001de77..f4be1fc 100644 (file)
--- a/perly.tab
+++ b/perly.tab
@@ -6,21 +6,21 @@
 
 #define YYFINAL  14
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   3058
+#define YYLAST   3096
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  104
+#define YYNTOKENS  105
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  86
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  271
+#define YYNRULES  272
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  538
+#define YYNSTATES  540
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   336
+#define YYMAXUTOK   337
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -32,16 +32,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,    87,     2,     2,   101,    16,    17,     2,
-      99,    98,   102,    14,    76,    13,    19,   103,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,    79,   100,
-       2,    18,     2,    78,    15,     2,     2,     2,     2,     2,
+       2,     2,     2,    88,     2,     2,   102,    16,    17,     2,
+     100,    99,   103,    14,    77,    13,    19,   104,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    80,   101,
+       2,    18,     2,    79,    15,     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,    11,     2,    12,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     9,     2,    10,    88,     2,     2,     2,
+       2,     2,     2,     9,     2,    10,    89,     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,
@@ -61,8 +61,8 @@ static const yytype_uint8 yytranslate[] =
       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
       56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
       66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      77,    80,    81,    82,    83,    84,    85,    86,    89,    90,
-      91,    92,    93,    94,    95,    96,    97
+      76,    78,    81,    82,    83,    84,    85,    86,    87,    90,
+      91,    92,    93,    94,    95,    96,    97,    98
 };
 
 #if YYDEBUG
@@ -73,30 +73,30 @@ static const yytype_uint16 yyrline[] =
      165,   164,   178,   177,   190,   198,   206,   210,   218,   224,
      225,   235,   236,   245,   249,   253,   257,   264,   266,   277,
      276,   310,   309,   348,   356,   355,   364,   370,   376,   381,
-     389,   396,   404,   406,   403,   423,   428,   435,   434,   449,
-     457,   463,   470,   469,   484,   488,   493,   501,   519,   520,
-     525,   527,   529,   531,   533,   535,   537,   540,   552,   553,
-     558,   569,   570,   576,   582,   583,   588,   591,   595,   600,
-     604,   608,   609,   613,   619,   624,   629,   630,   635,   636,
-     641,   642,   644,   649,   651,   663,   664,   669,   671,   675,
-     695,   696,   698,   704,   769,   771,   777,   779,   783,   789,
-     790,   795,   794,   846,   847,   851,   853,   855,   857,   861,
-     863,   868,   872,   876,   880,   886,   891,   897,   903,   905,
-     908,   907,   918,   919,   923,   927,   930,   935,   940,   943,
-     947,   951,   954,   959,   963,   966,   968,   970,   975,   977,
-     979,   984,   986,   988,   990,   992,   994,   996,   998,  1000,
-    1002,  1004,  1009,  1011,  1014,  1016,  1018,  1021,  1024,  1035,
-    1038,  1045,  1047,  1049,  1051,  1053,  1056,  1070,  1072,  1076,
-    1077,  1078,  1079,  1080,  1082,  1084,  1086,  1088,  1090,  1092,
-    1094,  1096,  1098,  1100,  1102,  1104,  1106,  1108,  1118,  1128,
-    1138,  1148,  1150,  1152,  1155,  1160,  1164,  1166,  1168,  1170,
-    1173,  1175,  1178,  1180,  1182,  1184,  1186,  1188,  1190,  1192,
-    1194,  1197,  1199,  1201,  1203,  1205,  1207,  1211,  1214,  1213,
-    1226,  1227,  1228,  1232,  1234,  1236,  1241,  1243,  1246,  1248,
-    1250,  1255,  1257,  1262,  1263,  1268,  1269,  1275,  1279,  1280,
-    1281,  1284,  1285,  1288,  1289,  1292,  1296,  1300,  1306,  1312,
-    1314,  1318,  1322,  1323,  1327,  1328,  1332,  1333,  1338,  1340,
-    1342,  1345
+     383,   385,   392,   400,   402,   399,   419,   424,   431,   430,
+     445,   453,   459,   466,   465,   480,   484,   489,   497,   515,
+     516,   521,   523,   525,   527,   529,   531,   533,   536,   542,
+     543,   548,   559,   560,   566,   572,   573,   578,   581,   585,
+     590,   594,   598,   599,   603,   609,   614,   619,   620,   625,
+     626,   631,   632,   634,   639,   641,   653,   654,   659,   661,
+     665,   685,   686,   688,   694,   759,   761,   767,   769,   773,
+     779,   780,   785,   784,   836,   837,   841,   843,   845,   847,
+     851,   853,   858,   862,   866,   870,   876,   881,   887,   893,
+     895,   898,   897,   908,   909,   913,   917,   920,   925,   930,
+     933,   937,   941,   944,   949,   953,   956,   958,   960,   965,
+     967,   969,   974,   976,   978,   980,   982,   984,   986,   988,
+     990,   992,   994,   999,  1001,  1004,  1006,  1008,  1011,  1014,
+    1025,  1028,  1035,  1037,  1039,  1041,  1043,  1046,  1060,  1062,
+    1066,  1067,  1068,  1069,  1070,  1072,  1074,  1076,  1078,  1080,
+    1082,  1084,  1086,  1088,  1090,  1092,  1094,  1096,  1098,  1108,
+    1118,  1128,  1138,  1140,  1142,  1145,  1150,  1154,  1156,  1158,
+    1160,  1163,  1165,  1168,  1170,  1172,  1174,  1176,  1178,  1180,
+    1182,  1184,  1187,  1189,  1191,  1193,  1195,  1197,  1201,  1204,
+    1203,  1216,  1217,  1218,  1222,  1224,  1226,  1231,  1233,  1236,
+    1238,  1240,  1245,  1247,  1252,  1253,  1258,  1259,  1265,  1269,
+    1270,  1271,  1274,  1275,  1278,  1279,  1282,  1286,  1290,  1296,
+    1302,  1304,  1308,  1312,  1313,  1317,  1318,  1322,  1323,  1328,
+    1330,  1332,  1335
 };
 #endif
 
@@ -111,9 +111,9 @@ static const char *const yytname[] =
   "METHOD", "FUNCMETH", "THING", "PMFUNC", "PRIVATEREF", "QWLIST",
   "FUNC0OP", "FUNC0SUB", "UNIOPSUB", "LSTOPSUB", "PLUGEXPR", "PLUGSTMT",
   "LABEL", "FORMAT", "SUB", "ANONSUB", "PACKAGE", "USE", "WHILE", "UNTIL",
-  "IF", "UNLESS", "ELSE", "ELSIF", "CONTINUE", "FOR", "GIVEN", "WHERESO",
-  "LOOPEX", "DOTDOT", "YADAYADA", "FUNC0", "FUNC1", "FUNC", "UNIOP",
-  "LSTOP", "RELOP", "EQOP", "MULOP", "ADDOP", "DOLSHARP", "DO",
+  "IF", "UNLESS", "ELSE", "ELSIF", "CONTINUE", "FOR", "GIVEN", "WHEN",
+  "DEFAULT", "LOOPEX", "DOTDOT", "YADAYADA", "FUNC0", "FUNC1", "FUNC",
+  "UNIOP", "LSTOP", "RELOP", "EQOP", "MULOP", "ADDOP", "DOLSHARP", "DO",
   "HASHBRACK", "NOAMP", "LOCAL", "MY", "REQUIRE", "COLONATTR",
   "FORMLBRACK", "FORMRBRACK", "PREC_LOW", "OROP", "DOROP", "ANDOP",
   "NOTOP", "','", "ASSIGNOP", "'?'", "':'", "OROR", "DORDOR", "ANDAND",
@@ -149,81 +149,81 @@ static const yytype_uint16 yytoknum[] =
      284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
      294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
      304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
-     314,   315,   316,   317,   318,   319,    44,   320,    63,    58,
-     321,   322,   323,   324,   325,   326,   327,    33,   126,   328,
-     329,   330,   331,   332,   333,   334,   335,   336,    41,    40,
-      59,    36,    42,    47
+     314,   315,   316,   317,   318,   319,   320,    44,   321,    63,
+      58,   322,   323,   324,   325,   326,   327,   328,    33,   126,
+     329,   330,   331,   332,   333,   334,   335,   336,   337,    41,
+      40,    59,    36,    42,    47
 };
 # endif
 
-#define YYPACT_NINF -437
+#define YYPACT_NINF -455
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-437)))
+  (!!((Yystate) == (-455)))
 
-#define YYTABLE_NINF -267
+#define YYTABLE_NINF -268
 
 #define yytable_value_is_error(Yytable_value) \
-  (!!((Yytable_value) == (-267)))
+  (!!((Yytable_value) == (-268)))
 
   /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     738,  -437,  -437,  -437,  -437,  -437,  -437,    28,  -437,  2801,
-      35,  1507,  1413,  -437,  -437,  -437,  1973,  2801,  2801,    70,
-      70,    70,  -437,    70,    70,  -437,  -437,    49,   -21,  -437,
-    2801,  -437,  -437,  -437,  2801,   -10,    -1,    18,  1881,  1787,
-      70,  1881,  2065,    42,  2801,   135,  2801,  2801,  2801,  2801,
-    2801,  2801,  2801,  2157,    70,    70,    34,    45,  -437,    14,
-    -437,  -437,  -437,  -437,  2919,  -437,  -437,    23,   152,   179,
-     228,  -437,    84,   235,   253,   116,  -437,  -437,  -437,  -437,
-    -437,    42,   106,  -437,    37,    44,    50,    53,   150,    57,
-      69,    29,  -437,   132,  -437,    46,  2155,  1413,  -437,  -437,
-    -437,   661,   755,  -437,   102,   457,   457,  -437,  -437,  -437,
-    -437,  -437,  -437,  -437,  2801,    90,   118,  2801,   124,   518,
-      35,    17,  2919,   125,  2249,  1787,  -437,   518,   560,    45,
-    -437,   485,  2801,  -437,  -437,   518,   216,   169,  -437,  -437,
-    2801,   518,  2893,  2341,   164,  -437,  -437,  -437,   518,    45,
-     457,   457,   457,   287,   287,   222,   187,  -437,  -437,  2801,
-    2801,  2801,  2801,  2801,  2801,  2433,  2801,  2801,  2801,  2801,
-    2801,  2801,  2801,  2801,  2801,  2801,  2801,  2801,  2801,  2801,
-    2801,  -437,  -437,  -437,    71,  2525,  2801,  2801,  2801,  2801,
-    2801,  2801,  2801,  -437,   227,  -437,   245,  -437,  -437,  -437,
-    -437,  -437,   158,   149,  -437,  -437,   156,  -437,  -437,  -437,
-      35,  -437,  -437,  2801,  2801,  2801,  2801,  2801,  2801,  -437,
-    -437,  -437,  -437,  -437,  2801,  2801,   194,  -437,  -437,  -437,
-     176,   211,  -437,  -437,   288,   182,  2801,    45,  -437,   274,
-    -437,  2617,   457,   164,    47,    59,   101,  -437,   394,   263,
-    -437,  2801,   282,   221,   221,  -437,  2919,   334,   209,  -437,
-     432,  1588,   443,  1956,   643,   248,  2919,   393,  1679,  1679,
-    1772,  1866,  2048,   530,   457,   457,  2801,  2801,   201,   204,
-     224,  -437,   226,  2709,    32,   230,   197,  -437,  -437,   438,
-     340,   217,   346,   251,   354,   280,   391,   849,  -437,   300,
-     212,     3,   299,  2801,  2801,  2801,  2801,  -437,   232,  -437,
-    -437,   236,  -437,  -437,  -437,  -437,  1600,    -7,  -437,  2801,
-    2801,  -437,    34,  -437,    34,    34,    34,    34,    34,   240,
-     -22,  -437,  2801,  -437,   211,   324,    35,  -437,  -437,   449,
-    -437,     4,   524,  -437,  -437,  -437,   293,  2801,   338,  -437,
-    -437,  2801,   408,   305,  -437,  -437,  -437,  -437,  -437,   575,
-    -437,  -437,  2801,  -437,   341,  -437,   345,  -437,   347,  -437,
-     360,  -437,  -437,  -437,   327,  -437,  -437,  -437,   351,   276,
-      34,   289,   295,    34,   302,   273,  -437,  -437,  -437,  -437,
-     303,   304,   357,  -437,  2801,   318,   323,  -437,  2801,   326,
-    -437,    30,   416,  -437,  -437,  -437,    15,  -437,   317,  -437,
-    2961,   423,  -437,  -437,   337,  -437,  -437,  -437,  -437,   342,
-     211,   176,  -437,  2801,  -437,  -437,   428,   428,  2801,  2801,
-     428,  -437,   339,   343,   428,   428,    34,  -437,  -437,  -437,
-     419,   419,  -437,  -437,  -437,   369,   349,  -437,  -437,  -437,
-    -437,   378,     5,   211,  -437,   356,   428,   428,  -437,    41,
-      41,   359,   362,   132,  2801,  2801,   428,  -437,  -437,  -437,
-     372,   372,    30,  -437,   943,  -437,  -437,  -437,  -437,   452,
-    1037,  -437,   132,   132,  -437,   428,   384,  -437,  -437,   428,
-     428,  -437,   395,   400,   132,  2801,  -437,  -437,  -437,  -437,
-       9,  -437,  -437,  -437,  -437,  1131,  -437,  2801,   132,   132,
-    -437,   428,  -437,  2919,   424,   480,  -437,  1225,  -437,   409,
-    -437,  -437,  -437,   132,  -437,  -437,  -437,  -437,   428,  1693,
-    -437,  1319,    41,   415,  -437,  -437,   428,  -437
+     805,  -455,  -455,  -455,  -455,  -455,  -455,    18,  -455,  2795,
+      19,  1487,  1392,  -455,  -455,  -455,  1958,  2795,  2795,    32,
+      32,    32,  -455,    32,    32,  -455,  -455,    35,   -47,  -455,
+    2795,  -455,  -455,  -455,  2795,   -42,   -28,    -7,  1865,  1770,
+      32,  1865,  2051,    58,  2795,   133,  2795,  2795,  2795,  2795,
+    2795,  2795,  2795,  2144,    32,    32,   394,     8,  -455,     5,
+    -455,  -455,  -455,  -455,  2956,  -455,  -455,    -3,    45,    51,
+      59,  -455,    85,   126,   269,   108,  -455,  -455,  -455,  -455,
+    -455,    58,    98,  -455,    26,    44,    50,    57,   337,    62,
+      75,    19,    31,  -455,    82,  -455,    88,  2049,  1392,  -455,
+    -455,  -455,   632,   727,  -455,    33,   412,   412,  -455,  -455,
+    -455,  -455,  -455,  -455,  -455,  2795,    90,   115,  2795,    46,
+     500,    19,    16,  2956,   117,  2237,  1770,  -455,   500,   530,
+       8,  -455,   454,  2795,  -455,  -455,   500,   213,   184,  -455,
+    -455,  2795,   500,  2888,  2330,   162,  -455,  -455,  -455,   500,
+       8,   412,   412,   412,   504,   504,   223,   214,  -455,  -455,
+    2795,  2795,  2795,  2795,  2795,  2795,  2423,  2795,  2795,  2795,
+    2795,  2795,  2795,  2795,  2795,  2795,  2795,  2795,  2795,  2795,
+    2795,  2795,  -455,  -455,  -455,   312,  2516,  2795,  2795,  2795,
+    2795,  2795,  2795,  2795,  -455,   221,  -455,   224,  -455,  -455,
+    -455,  -455,  -455,   158,    72,  -455,  -455,   168,  -455,  -455,
+    -455,  -455,    19,  -455,  -455,  2795,  2795,  2795,  2795,  2795,
+    2795,  -455,  -455,  -455,  -455,  -455,  2795,  2795,    49,  -455,
+    -455,  -455,   174,   212,  -455,  -455,   424,   166,  2795,     8,
+    -455,   265,  -455,  2609,   412,   162,   167,   208,   239,  -455,
+     445,   267,  -455,  2795,   282,   220,   220,  -455,  2956,   292,
+      55,  -455,   545,  1569,   487,  1848,   709,   290,  2956,  2914,
+     389,   389,  1660,  1755,  1941,   311,   412,   412,  2795,  2795,
+     194,   200,   204,  -455,   215,  2702,    12,   227,   209,  -455,
+    -455,   602,   356,    67,   369,    78,   378,   165,   416,   822,
+    -455,   308,   235,    -2,   319,  2795,  2795,  2795,  2795,  -455,
+     229,  -455,  -455,   240,  -455,  -455,  -455,  -455,  1581,     7,
+    -455,  2795,  2795,  -455,   394,  -455,   394,   394,   394,   394,
+     394,   245,   -60,  -455,  2795,  -455,   212,   329,    19,  -455,
+    -455,   617,  -455,    15,   630,  -455,  -455,  -455,   179,  2795,
+     335,  -455,  -455,  2795,   492,   196,  -455,  -455,  -455,  -455,
+    -455,   638,  -455,  -455,  2795,  -455,   344,  -455,   345,  -455,
+     347,  -455,   349,  -455,  -455,  -455,   350,  -455,  -455,  -455,
+     340,   277,   394,   284,   285,   394,   293,   281,  -455,  -455,
+    -455,  -455,   300,   288,   322,  -455,  2795,   301,   303,  -455,
+    2795,   314,  -455,     9,   402,  -455,  -455,  -455,    27,  -455,
+     231,  -455,  2998,   406,  -455,  -455,   318,  -455,  -455,  -455,
+    -455,   321,   212,   174,  -455,  2795,  -455,  -455,   410,   410,
+    2795,  2795,   410,  -455,   320,   324,   410,   410,   394,  -455,
+    -455,  -455,   407,   407,  -455,  -455,  -455,   358,   328,  -455,
+    -455,  -455,  -455,   362,     2,   212,  -455,   339,   410,   410,
+    -455,    38,    38,   346,   357,    82,  2795,  2795,   410,  -455,
+    -455,  -455,   360,   360,     9,  -455,   917,  -455,  -455,  -455,
+    -455,   427,  1012,  -455,    82,    82,  -455,   410,   355,  -455,
+    -455,   410,   410,  -455,   361,   359,    82,  2795,  -455,  -455,
+    -455,  -455,   -10,  -455,  -455,  -455,  -455,  1107,  -455,  2795,
+      82,    82,  -455,   410,  -455,  2956,   376,   440,  -455,  1202,
+    -455,   379,  -455,  -455,  -455,    82,  -455,  -455,  -455,  -455,
+     410,  1675,  -455,  1297,    38,   381,  -455,  -455,   410,  -455
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -231,88 +231,88 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,     2,     4,     6,     8,    10,    12,     0,    16,   243,
+       0,     2,     4,     6,     8,    10,    12,     0,    16,   244,
        0,     0,     0,    19,     1,    19,     0,     0,     0,     0,
-       0,     0,   230,     0,     0,   201,   228,   189,   223,   225,
-     219,    84,   232,    84,   211,   221,     0,     0,   214,   241,
-       0,     0,     0,     0,     0,     0,   217,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   244,   118,   231,   196,
-     179,   180,   181,   182,   121,   186,     5,   202,   191,   194,
-     193,   195,   192,     0,     0,     0,    16,     7,    60,    27,
-      85,     0,     0,    83,     0,     0,     0,     0,     0,     0,
-       0,     0,    56,    71,     9,     0,    61,     0,    11,    24,
-      23,     0,     0,   172,     0,   162,   163,   268,   271,   270,
-     269,   257,   258,   255,   241,     0,     0,     0,     0,   220,
-       0,    88,   212,     0,     0,   243,   215,   216,   268,   242,
-     128,   269,     0,   259,   178,   177,     0,     0,    86,    87,
-     241,   187,     0,     0,   234,   238,   240,   239,   218,   213,
-     164,   165,   184,   169,   170,   190,     0,   256,   261,     0,
-       0,     0,   119,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   231,     0,     0,   202,   229,   190,   224,   226,
+     220,    85,   233,    85,   212,   222,     0,     0,   215,   242,
+       0,     0,     0,     0,     0,     0,   218,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   245,   119,   232,   197,
+     180,   181,   182,   183,   122,   187,     5,   203,   192,   195,
+     194,   196,   193,     0,     0,     0,    16,     7,    61,    27,
+      86,     0,     0,    84,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    57,    72,     9,     0,    62,     0,    11,
+      24,    23,     0,     0,   173,     0,   163,   164,   269,   272,
+     271,   270,   258,   259,   256,   242,     0,     0,     0,     0,
+     221,     0,    89,   213,     0,     0,   244,   216,   217,   269,
+     243,   129,   270,     0,   260,   179,   178,     0,     0,    87,
+      88,   242,   188,     0,     0,   235,   239,   241,   240,   219,
+     214,   165,   166,   185,   170,   171,   191,     0,   257,   262,
+       0,     0,     0,   120,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   166,   167,   168,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    19,    82,    83,     0,    34,    16,    16,
-      16,    16,    16,     0,    16,    16,     0,    16,    16,    55,
-       0,    51,    54,     0,     0,     0,     0,     0,     0,    26,
-      25,    20,   171,   126,   243,     0,     0,   224,   130,    89,
-       0,    90,   222,   226,     0,     0,     0,   122,   174,     0,
-     205,     0,   185,     0,   191,   194,   193,   237,     0,    94,
-     233,     0,   188,   116,   117,   115,   120,     0,     0,   144,
-       0,   157,   153,   154,   150,   151,   148,     0,   159,   160,
-     158,   156,   155,   152,   161,   149,     0,     0,   263,   265,
-       0,   132,     0,     0,     0,   267,   125,   133,   203,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    81,     0,
-      29,     0,     0,    76,     0,     0,     0,   253,     0,   254,
-     251,     0,   252,   248,   249,   250,     0,     0,    16,     0,
-       0,    72,    64,    65,    78,    62,    63,    66,    67,     0,
-     245,   146,   241,   111,    90,    92,     0,   227,   129,     0,
-     173,   190,     0,   235,   236,    93,     0,     0,     0,   137,
-     143,     0,     0,     0,   207,   208,   209,   260,   141,     0,
-     206,   210,   243,   204,     0,   135,     0,   197,     0,   198,
-       0,    14,    16,    28,    88,    16,    16,    33,     0,     0,
-      77,     0,     0,    79,     0,     0,   247,    16,    75,    80,
-       0,     0,    61,    47,     0,     0,     0,   127,     0,     0,
-     131,   109,     0,    91,   175,   123,   188,   147,     0,   140,
-     183,     0,   136,   142,     0,   138,   199,   200,   134,     0,
-      90,     0,    52,   241,    73,    73,     0,     0,     0,     0,
-       0,    42,     0,     0,     0,     0,   246,   229,    97,    98,
-      95,    95,   105,   104,   108,   110,     0,    19,   145,   139,
-     124,     0,     0,    90,    19,     0,     0,     0,    18,    68,
-      68,     0,     0,    71,    76,     0,     0,    38,    39,    96,
-     100,   100,   106,   112,     0,    21,   114,   113,    30,     0,
-       0,    35,    71,    71,    19,     0,     0,    36,    37,     0,
-       0,    50,     0,     0,    71,   101,   103,    99,   107,   176,
-       0,    19,    53,    40,    41,     0,    69,     0,    71,    71,
-      43,     0,    46,   102,    58,     0,    22,     0,    17,     0,
-      45,    49,    73,    71,    19,    57,    15,    32,     0,     0,
-      48,     0,    68,     0,    59,    70,     0,    44
+       0,     0,   167,   168,   169,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    19,    83,    84,     0,    34,    16,
+      16,    16,    16,    16,     0,    16,    16,     0,    16,    16,
+      40,    56,     0,    52,    55,     0,     0,     0,     0,     0,
+       0,    26,    25,    20,   172,   127,   244,     0,     0,   225,
+     131,    90,     0,    91,   223,   227,     0,     0,     0,   123,
+     175,     0,   206,     0,   186,     0,   192,   195,   194,   238,
+       0,    95,   234,     0,   189,   117,   118,   116,   121,     0,
+       0,   145,     0,   158,   154,   155,   151,   152,   149,     0,
+     160,   161,   159,   157,   156,   153,   162,   150,     0,     0,
+     264,   266,     0,   133,     0,     0,     0,   268,   126,   134,
+     204,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      82,     0,    29,     0,     0,    77,     0,     0,     0,   254,
+       0,   255,   252,     0,   253,   249,   250,   251,     0,     0,
+      16,     0,     0,    73,    65,    66,    79,    63,    64,    67,
+      68,     0,   246,   147,   242,   112,    91,    93,     0,   228,
+     130,     0,   174,   191,     0,   236,   237,    94,     0,     0,
+       0,   138,   144,     0,     0,     0,   208,   209,   210,   261,
+     142,     0,   207,   211,   244,   205,     0,   136,     0,   198,
+       0,   199,     0,    14,    16,    28,    89,    16,    16,    33,
+       0,     0,    78,     0,     0,    80,     0,     0,   248,    16,
+      76,    81,     0,     0,    62,    48,     0,     0,     0,   128,
+       0,     0,   132,   110,     0,    92,   176,   124,   189,   148,
+       0,   141,   184,     0,   137,   143,     0,   139,   200,   201,
+     135,     0,    91,     0,    53,   242,    74,    74,     0,     0,
+       0,     0,     0,    43,     0,     0,     0,     0,   247,   230,
+      98,    99,    96,    96,   106,   105,   109,   111,     0,    19,
+     146,   140,   125,     0,     0,    91,    19,     0,     0,     0,
+      18,    69,    69,     0,     0,    72,    77,     0,     0,    38,
+      39,    97,   101,   101,   107,   113,     0,    21,   115,   114,
+      30,     0,     0,    35,    72,    72,    19,     0,     0,    36,
+      37,     0,     0,    51,     0,     0,    72,   102,   104,   100,
+     108,   177,     0,    19,    54,    41,    42,     0,    70,     0,
+      72,    72,    44,     0,    47,   103,    59,     0,    22,     0,
+      17,     0,    46,    50,    74,    72,    19,    58,    15,    32,
+       0,     0,    49,     0,    69,     0,    60,    71,     0,    45
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -437,  -437,  -437,  -437,  -437,  -437,  -437,  -437,    10,  -437,
-     -60,  -126,  -437,   -15,  -437,   502,   418,     0,  -437,  -437,
-    -437,  -437,  -437,  -437,  -437,  -437,  -437,  -310,  -436,  -114,
-    -418,  -437,    52,   214,   -92,    20,  -437,   361,   486,  -437,
-     451,   172,  -329,   312,   133,  -437,  -437,   104,  -437,   112,
-    -437,  -437,   165,  -437,  -437,    -6,   -12,  -437,  -437,  -437,
-    -437,  -437,  -437,  -437,  -437,    25,  -437,  -437,   431,  -101,
-    -124,  -437,  -437,   270,  -437,  -437,   388,   233,   -43,   -41,
-    -437,  -437,  -437,  -437,  -437,    -2
+    -455,  -455,  -455,  -455,  -455,  -455,  -455,  -455,    10,  -455,
+     -36,  -112,  -455,   -15,  -455,   465,   384,     4,  -455,  -455,
+    -455,  -455,  -455,  -455,  -455,  -455,  -455,  -313,  -454,  -174,
+    -426,  -455,    17,   195,  -175,   -25,  -455,   325,   491,  -455,
+     462,   150,  -330,   309,   113,  -455,  -455,    84,  -455,    89,
+    -455,  -455,   136,  -455,  -455,    -6,   -20,  -455,  -455,  -455,
+    -455,  -455,  -455,  -455,  -455,    25,  -455,  -455,   419,  -106,
+    -122,  -455,  -455,   249,  -455,  -455,   371,   206,   -43,   -33,
+    -455,  -455,  -455,  -455,  -455,   243
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     7,     8,     9,    10,    11,    12,    13,    93,   373,
-      15,   459,   484,   101,   500,   221,    99,   100,   374,   375,
-     302,   464,   522,   432,   454,   516,   525,    95,   487,   211,
-     456,   389,   379,   323,   382,   391,   299,   197,   120,   194,
-     140,   231,   336,   250,   470,   441,   442,   496,   443,   444,
-     445,   446,   334,   401,   478,    96,    57,    58,   332,   286,
-      59,    60,    61,    62,    63,    64,   116,    65,   144,   130,
-      66,   399,   385,   310,   311,   205,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,   157
+      -1,     7,     8,     9,    10,    11,    12,    13,    94,   375,
+      15,   461,   486,   102,   502,   223,   100,   101,   376,   377,
+     304,   466,   524,   434,   456,   518,   527,    96,   489,   213,
+     458,   391,   381,   325,   384,   393,   301,   198,   121,   195,
+     141,   233,   338,   252,   472,   443,   444,   498,   445,   446,
+     447,   448,   336,   403,   480,    97,    57,    58,   334,   288,
+      59,    60,    61,    62,    63,    64,   117,    65,   145,   131,
+      66,   401,   387,   312,   313,   206,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,   158
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -320,715 +320,723 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-     102,   235,   146,    56,   147,   402,   388,   457,    19,    20,
-     104,    94,   376,   223,    76,   251,   193,   111,   112,   113,
-      77,   114,   115,   163,   488,   164,   347,   129,    14,   109,
-     109,   109,   514,   109,   109,   149,   137,   132,   133,   240,
-     229,    76,   105,   106,    76,   438,   439,   156,   126,   109,
-     109,   134,   107,   158,   162,   119,   186,   108,   187,   122,
-     117,   230,   138,   127,   109,   109,   135,   139,  -262,   141,
-    -262,   148,  -237,   150,   151,   152,   153,   154,   118,    76,
-     276,   398,   277,  -236,   485,   486,   278,   279,   280,   123,
-     107,   452,   281,  -266,    54,   108,   535,   220,   124,   245,
-     329,   246,   129,   377,   529,   476,   159,   160,   161,   515,
-    -264,   226,  -264,   165,   222,  -238,   -16,   125,   234,    56,
-     237,   162,   185,   236,   479,   192,   196,  -240,   129,   209,
-     228,   440,   282,    54,   360,   109,   198,   248,   303,   304,
-     305,   306,   308,   199,   316,   317,   212,   319,   320,   200,
-      19,    20,   201,   253,   254,   255,   207,   257,   258,   260,
-     314,   186,   315,   187,    19,    20,    21,   242,   208,  -239,
-     283,    54,   284,   285,   159,   160,   161,   210,   297,   289,
-     290,   291,   292,   293,   294,   295,   296,   256,  -262,   224,
-    -262,   261,   262,   263,   264,   265,   266,   267,   268,   269,
-     270,   271,   272,   273,   274,   275,   331,   322,   324,   325,
-     326,   327,   328,   330,   384,   309,   202,   225,    56,   388,
-     321,   349,   227,   232,   390,   142,   238,   395,   396,   365,
-     339,   400,   249,   251,   143,   342,    54,  -264,   414,  -264,
-     203,   159,   160,   161,   188,   346,   189,   298,   307,   204,
-      54,    54,   110,   110,   110,   318,   110,   110,   394,   159,
-     160,   161,   190,   367,   191,   301,   159,   160,   161,   239,
-     352,   353,   131,   110,   314,   333,   315,   359,   145,   335,
-     338,   159,   160,   161,   340,   252,   345,   110,   110,   159,
-     160,   161,   369,   347,   109,   161,   362,   380,   324,   383,
-     383,   460,   433,   354,   463,   407,   355,   169,   467,   468,
-     392,   -31,   419,   383,   383,   421,   422,   412,   372,   378,
-     129,   206,   455,   159,   160,   161,   356,   429,   357,   448,
-     482,   483,   361,    54,   179,   387,   461,   462,   397,   180,
-     494,   408,   181,   182,   183,   184,   404,   403,   409,   491,
-     229,   415,   159,   160,   161,   416,    56,   417,   131,   506,
-     159,   160,   161,   508,   509,   159,   160,   161,   503,   504,
-     418,   423,   428,   493,   424,   244,   410,   159,   160,   161,
-     512,  -267,  -267,  -267,   184,   523,   337,   425,   383,   159,
-     160,   161,   436,   426,   520,   521,   213,   214,   215,   216,
-     427,   430,   532,   217,   431,   218,   159,   160,   161,   530,
-     537,   129,   159,   160,   161,   519,   434,   287,   159,   160,
-     161,   435,   383,   383,   437,   447,   159,   160,   161,   159,
-     160,   161,   474,   449,   348,   450,   313,   458,   465,   480,
-     364,   466,   451,   166,   469,   472,   366,   473,   475,   495,
-     167,   168,   169,   170,   368,   -79,   481,   489,   380,   383,
-     490,   501,   477,   159,   160,   161,   159,   160,   161,   505,
-     171,   172,   351,   173,   174,   175,   176,   177,   178,   179,
-     159,   160,   161,   507,   180,  -191,   517,   181,   182,   183,
-     184,   370,   344,   524,   186,   510,   187,  -191,   511,   526,
-    -267,   383,   169,   170,   159,   160,   161,   528,   411,   531,
-     159,   160,   161,   536,    98,   219,   492,   110,   381,   121,
-     513,   159,   160,   161,  -191,  -191,  -191,  -191,   178,   179,
-     350,  -191,   195,  -191,   180,  -191,   363,   181,   182,   183,
-     184,   386,  -191,  -191,  -191,  -191,   420,   405,   180,   533,
-     313,   181,   182,   183,   184,   343,   300,  -191,  -191,  -191,
-    -230,  -191,  -191,  -191,  -191,  -191,  -191,  -191,  -191,  -191,
-    -191,  -191,  -230,   243,   471,   497,  -191,   169,   170,  -191,
-    -191,  -191,  -191,  -191,   498,  -191,   453,   393,  -191,   169,
-     170,   312,     0,     0,     0,     0,   159,   160,   161,  -230,
-    -230,  -230,  -230,   178,   179,     0,  -230,     0,  -230,   180,
-    -230,     0,   181,   182,   183,   184,   179,  -230,  -230,  -230,
-    -230,   180,   406,     0,   181,   182,   183,   184,     0,     0,
-       0,     0,  -230,  -230,  -230,     0,  -230,  -230,  -230,  -230,
-    -230,  -230,  -230,  -230,  -230,  -230,  -230,   159,   160,   161,
-       0,  -230,     0,     0,  -230,  -230,  -230,  -230,  -230,     0,
-    -230,   -13,    78,  -230,     0,     0,     0,     0,     0,     0,
-      76,     0,    16,   413,    17,    18,    19,    20,    21,     0,
-       0,    22,    23,    24,    25,    26,     0,    27,    28,    29,
-      30,    31,    32,    79,    97,    80,    81,    33,    82,    83,
-      84,    85,    86,    87,     0,     0,     0,    88,    89,    90,
-      34,     0,    91,    35,    36,    37,    38,    39,     0,     0,
-       0,     0,    40,    41,    42,    43,    44,    45,    46,   179,
-       0,     0,     0,     0,   180,     0,    47,   181,   182,   183,
-     184,     1,     2,     3,     4,     5,     6,     0,    48,    49,
-       0,    50,     0,    51,    52,    -3,    78,     0,     0,     0,
-      53,    92,    54,    55,    76,     0,    16,     0,    17,    18,
-      19,    20,    21,     0,     0,    22,    23,    24,    25,    26,
-       0,    27,    28,    29,    30,    31,    32,    79,    97,    80,
-      81,    33,    82,    83,    84,    85,    86,    87,     0,     0,
-       0,    88,    89,    90,    34,     0,    91,    35,    36,    37,
-      38,    39,     0,     0,     0,     0,    40,    41,    42,    43,
-      44,    45,    46,     0,     0,     0,     0,     0,     0,     0,
-      47,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    48,    49,     0,    50,     0,    51,    52,     0,
-      78,     0,     0,     0,    53,    92,    54,    55,    76,   371,
-      16,     0,    17,    18,    19,    20,    21,     0,     0,    22,
-      23,    24,    25,    26,     0,    27,    28,    29,    30,    31,
-      32,    79,    97,    80,    81,    33,    82,    83,    84,    85,
-      86,    87,     0,     0,     0,    88,    89,    90,    34,     0,
-      91,    35,    36,    37,    38,    39,     0,     0,     0,     0,
-      40,    41,    42,    43,    44,    45,    46,     0,     0,     0,
-       0,     0,     0,     0,    47,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    48,    49,     0,    50,
-       0,    51,    52,     0,    78,     0,     0,     0,    53,    92,
-      54,    55,    76,   499,    16,     0,    17,    18,    19,    20,
-      21,     0,     0,    22,    23,    24,    25,    26,     0,    27,
-      28,    29,    30,    31,    32,    79,    97,    80,    81,    33,
-      82,    83,    84,    85,    86,    87,     0,     0,     0,    88,
-      89,    90,    34,     0,    91,    35,    36,    37,    38,    39,
+     103,   459,   147,    56,   237,   390,   404,   378,   490,   225,
+     105,    76,   148,   516,   164,    95,   165,   163,    14,   130,
+      77,    76,    19,    20,   440,   441,   253,   150,    76,   110,
+     110,   110,   108,   110,   110,   242,   138,   109,   349,   231,
+     194,    76,   106,   107,   400,   224,   118,   157,   127,   110,
+     110,   135,   108,   119,   187,   120,   188,   109,   124,   123,
+    -263,   333,  -263,   128,   110,   110,   136,   351,  -265,   142,
+    -265,   149,   125,   151,   152,   153,   154,   155,   139,   367,
+     537,   487,   488,   140,  -238,   163,   232,    19,    20,    21,
+     369,   517,   454,   126,  -267,   130,  -237,   186,   531,   379,
+     247,   210,   222,   478,   331,   166,   160,   161,   162,    54,
+     248,   442,   228,   239,    54,   362,   -16,   193,   197,   236,
+      56,   130,   160,   161,   162,   481,   199,   212,   160,   161,
+     162,   230,   211,   386,    54,   189,   110,   190,   250,   311,
+     160,   161,   162,   392,   200,   229,   397,   398,    19,    20,
+     201,   160,   161,   162,   255,   256,   257,   202,   259,   260,
+     262,   316,   208,   305,   306,   307,   308,   310,   244,   318,
+     319,   317,   321,   322,    54,   209,   187,   371,   188,   299,
+     291,   292,   293,   294,   295,   296,   297,   298,   258,   214,
+     226,   409,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   332,   414,   324,
+     326,   327,   328,   329,   330,   227,   234,  -263,   390,  -263,
+      56,   435,   323,   240,   143,   111,   111,   111,   402,   111,
+     111,   251,   341,   144,   253,    54,  -239,   344,   160,   161,
+     162,   300,   416,   450,   303,   132,   111,   348,  -265,   309,
+    -265,   146,   160,   161,   162,   463,   464,   160,   161,   162,
+     111,   111,   112,   113,   114,   340,   115,   116,   320,   160,
+     161,   162,   354,   355,   335,   342,   316,  -241,   191,   361,
+     192,   337,   133,   134,   396,   241,   317,   160,   161,   162,
+     347,   493,   495,   349,   207,   162,   110,   356,   159,   382,
+     326,   385,   385,   357,   160,   161,   162,   358,  -240,   364,
+     505,   506,   394,   254,   130,   385,   385,   462,   359,   457,
+     465,   278,   514,   279,   469,   470,   374,   280,   281,   282,
+     363,    54,   132,   283,   521,   -31,   522,   523,   421,   380,
+     389,   423,   424,   410,   399,   411,   484,   485,   406,   246,
+     170,   532,   405,   431,   417,   418,   496,   419,    56,   420,
+     425,   215,   216,   217,   218,   160,   161,   162,   219,   238,
+     220,   170,   171,   231,   284,   508,   426,   180,   412,   510,
+     511,   430,   181,   427,   428,   182,   183,   184,   185,   433,
+     385,   289,   429,   350,   438,   160,   161,   162,   180,   432,
+     436,   525,   437,   181,   203,   130,   182,   183,   184,   185,
+     315,   449,   285,   439,   286,   287,   451,   452,   534,   460,
+     467,   -80,   453,   468,   385,   385,   539,   475,   204,   160,
+     161,   162,   471,   477,   476,   474,   503,   205,   497,    54,
+     483,   482,   160,   161,   162,   491,   526,   168,   169,   170,
+     171,   160,   161,   162,  -192,   509,   492,   366,   513,   528,
+     382,   385,   512,   187,   479,   188,  -192,   160,   161,   162,
+     368,   507,   176,   177,   178,   179,   180,    99,   530,   370,
+     538,   181,   221,   494,   182,   183,   184,   185,   519,   160,
+     161,   162,   111,  -192,  -192,  -192,  -192,   160,   161,   162,
+    -192,   383,  -192,   385,   181,  -192,   535,   182,   183,   184,
+     185,   533,  -192,  -192,  -192,  -192,   388,   372,   160,   161,
+     162,   302,   515,   339,   122,   315,   422,  -192,  -192,  -192,
+    -231,  -192,  -192,  -192,  -192,  -192,  -192,  -192,  -192,  -192,
+    -192,  -192,  -231,   196,   346,  -268,  -192,   170,   171,  -192,
+    -192,  -192,  -192,  -192,   345,  -192,   473,   499,  -192,   455,
+     170,   171,   245,   500,     0,   160,   161,   162,   395,  -231,
+    -231,  -231,  -231,   179,   180,   314,  -231,     0,  -231,   181,
+       0,  -231,   182,   183,   184,   185,   179,   180,  -231,  -231,
+    -231,  -231,   181,   413,     0,   182,   183,   184,   185,  -268,
+    -268,  -268,   185,  -231,  -231,  -231,     0,  -231,  -231,  -231,
+    -231,  -231,  -231,  -231,  -231,  -231,  -231,  -231,   160,   161,
+     162,     0,  -231,     0,     0,  -231,  -231,  -231,  -231,  -231,
+       0,  -231,   -13,    78,  -231,     0,     0,     0,     0,     0,
+       0,    76,     0,    16,   352,    17,    18,    19,    20,    21,
+       0,     0,    22,    23,    24,    25,    26,     0,    27,    28,
+      29,    30,    31,    32,    79,    98,    80,    81,    33,    82,
+      83,    84,    85,    86,    87,   160,   161,   162,    88,    89,
+      90,    91,    34,     0,    92,    35,    36,    37,    38,    39,
+     160,   161,   162,     0,    40,    41,    42,    43,    44,    45,
+      46,   365,     0,   160,   161,   162,     0,     0,    47,     0,
+       0,   160,   161,   162,     0,     0,   407,     0,     0,     0,
+      48,    49,     0,    50,     0,    51,    52,    -3,    78,   408,
+       0,     0,    53,    93,    54,    55,    76,   415,    16,     0,
+      17,    18,    19,    20,    21,     0,     0,    22,    23,    24,
+      25,    26,     0,    27,    28,    29,    30,    31,    32,    79,
+      98,    80,    81,    33,    82,    83,    84,    85,    86,    87,
+       0,     0,     0,    88,    89,    90,    91,    34,     0,    92,
+      35,    36,    37,    38,    39,     0,     0,     0,     0,    40,
+      41,    42,    43,    44,    45,    46,   180,     0,     0,     0,
+       0,   181,     0,    47,   182,   183,   184,   185,     1,     2,
+       3,     4,     5,     6,     0,    48,    49,     0,    50,     0,
+      51,    52,     0,    78,     0,     0,     0,    53,    93,    54,
+      55,    76,   373,    16,     0,    17,    18,    19,    20,    21,
+       0,     0,    22,    23,    24,    25,    26,     0,    27,    28,
+      29,    30,    31,    32,    79,    98,    80,    81,    33,    82,
+      83,    84,    85,    86,    87,     0,     0,     0,    88,    89,
+      90,    91,    34,     0,    92,    35,    36,    37,    38,    39,
        0,     0,     0,     0,    40,    41,    42,    43,    44,    45,
       46,     0,     0,     0,     0,     0,     0,     0,    47,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       48,    49,     0,    50,     0,    51,    52,     0,    78,     0,
-       0,     0,    53,    92,    54,    55,    76,   502,    16,     0,
+       0,     0,    53,    93,    54,    55,    76,   501,    16,     0,
       17,    18,    19,    20,    21,     0,     0,    22,    23,    24,
       25,    26,     0,    27,    28,    29,    30,    31,    32,    79,
-      97,    80,    81,    33,    82,    83,    84,    85,    86,    87,
-       0,     0,     0,    88,    89,    90,    34,     0,    91,    35,
-      36,    37,    38,    39,     0,     0,     0,     0,    40,    41,
-      42,    43,    44,    45,    46,     0,     0,     0,     0,     0,
-       0,     0,    47,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    48,    49,     0,    50,     0,    51,
-      52,     0,    78,     0,     0,     0,    53,    92,    54,    55,
-      76,   518,    16,     0,    17,    18,    19,    20,    21,     0,
-       0,    22,    23,    24,    25,    26,     0,    27,    28,    29,
-      30,    31,    32,    79,    97,    80,    81,    33,    82,    83,
-      84,    85,    86,    87,     0,     0,     0,    88,    89,    90,
-      34,     0,    91,    35,    36,    37,    38,    39,     0,     0,
-       0,     0,    40,    41,    42,    43,    44,    45,    46,     0,
-       0,     0,     0,     0,     0,     0,    47,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    48,    49,
-       0,    50,     0,    51,    52,     0,    78,     0,     0,     0,
-      53,    92,    54,    55,    76,   527,    16,     0,    17,    18,
-      19,    20,    21,     0,     0,    22,    23,    24,    25,    26,
-       0,    27,    28,    29,    30,    31,    32,    79,    97,    80,
-      81,    33,    82,    83,    84,    85,    86,    87,     0,     0,
-       0,    88,    89,    90,    34,     0,    91,    35,    36,    37,
-      38,    39,     0,     0,     0,     0,    40,    41,    42,    43,
-      44,    45,    46,     0,     0,     0,     0,     0,     0,     0,
-      47,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    48,    49,     0,    50,     0,    51,    52,     0,
-      78,     0,     0,     0,    53,    92,    54,    55,    76,     0,
-      16,     0,    17,    18,    19,    20,    21,     0,     0,    22,
-      23,    24,    25,    26,     0,    27,    28,    29,    30,    31,
-      32,    79,    97,    80,    81,    33,    82,    83,    84,    85,
-      86,    87,     0,     0,     0,    88,    89,    90,    34,     0,
-      91,    35,    36,    37,    38,    39,     0,     0,     0,     0,
-      40,    41,    42,    43,    44,    45,    46,     0,     0,   534,
-       0,     0,     0,     0,    47,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    48,    49,     0,    50,
-       0,    51,    52,     0,    78,     0,     0,     0,    53,    92,
-      54,    55,    76,     0,    16,     0,    17,    18,    19,    20,
-      21,     0,     0,    22,    23,    24,    25,    26,     0,    27,
-      28,    29,    30,    31,    32,    79,    97,    80,    81,    33,
-      82,    83,    84,    85,    86,    87,     0,     0,     0,    88,
-      89,    90,    34,     0,    91,    35,    36,    37,    38,    39,
+      98,    80,    81,    33,    82,    83,    84,    85,    86,    87,
+       0,     0,     0,    88,    89,    90,    91,    34,     0,    92,
+      35,    36,    37,    38,    39,     0,     0,     0,     0,    40,
+      41,    42,    43,    44,    45,    46,     0,     0,     0,     0,
+       0,     0,     0,    47,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    48,    49,     0,    50,     0,
+      51,    52,     0,    78,     0,     0,     0,    53,    93,    54,
+      55,    76,   504,    16,     0,    17,    18,    19,    20,    21,
+       0,     0,    22,    23,    24,    25,    26,     0,    27,    28,
+      29,    30,    31,    32,    79,    98,    80,    81,    33,    82,
+      83,    84,    85,    86,    87,     0,     0,     0,    88,    89,
+      90,    91,    34,     0,    92,    35,    36,    37,    38,    39,
        0,     0,     0,     0,    40,    41,    42,    43,    44,    45,
       46,     0,     0,     0,     0,     0,     0,     0,    47,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       48,    49,     0,    50,     0,    51,    52,     0,    78,     0,
-       0,     0,    53,    92,    54,    55,    76,     0,    16,     0,
+       0,     0,    53,    93,    54,    55,    76,   520,    16,     0,
       17,    18,    19,    20,    21,     0,     0,    22,    23,    24,
       25,    26,     0,    27,    28,    29,    30,    31,    32,    79,
-       0,    80,    81,    33,    82,    83,    84,    85,    86,    87,
-       0,     0,     0,    88,    89,    90,    34,     0,    91,    35,
-      36,    37,    38,    39,     0,     0,     0,     0,    40,    41,
-      42,    43,    44,    45,    46,     0,     0,     0,     0,     0,
-       0,     0,    47,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    48,    49,     0,    50,     0,    51,
-      52,    78,     0,     0,     0,     0,    53,    92,    54,    55,
-       0,    16,     0,    17,    18,    19,    20,    21,     0,     0,
-      22,    23,    24,    25,    26,     0,    27,    28,    29,    30,
-      31,    32,     0,     0,     0,     0,    33,     0,  -267,     0,
-       0,     0,     0,     0,     0,   167,   168,   169,   170,    34,
-       0,     0,    35,    36,    37,    38,    39,     0,     0,     0,
-       0,    40,    41,    42,    43,    44,    45,    46,   173,   174,
-     175,   176,   177,   178,   179,    47,     0,     0,     0,   180,
-       0,     0,   181,   182,   183,   184,     0,    48,    49,     0,
-      50,     0,    51,    52,    78,     0,     0,     0,     0,    53,
-     -74,    54,    55,     0,    16,     0,    17,    18,    19,    20,
-      21,     0,     0,    22,    23,    24,    25,    26,     0,    27,
-      28,    29,    30,    31,    32,     0,     0,     0,     0,    33,
-       0,     0,     0,     0,     0,     0,   167,   168,   169,   170,
-       0,     0,    34,     0,     0,    35,    36,    37,    38,    39,
+      98,    80,    81,    33,    82,    83,    84,    85,    86,    87,
+       0,     0,     0,    88,    89,    90,    91,    34,     0,    92,
+      35,    36,    37,    38,    39,     0,     0,     0,     0,    40,
+      41,    42,    43,    44,    45,    46,     0,     0,     0,     0,
+       0,     0,     0,    47,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    48,    49,     0,    50,     0,
+      51,    52,     0,    78,     0,     0,     0,    53,    93,    54,
+      55,    76,   529,    16,     0,    17,    18,    19,    20,    21,
+       0,     0,    22,    23,    24,    25,    26,     0,    27,    28,
+      29,    30,    31,    32,    79,    98,    80,    81,    33,    82,
+      83,    84,    85,    86,    87,     0,     0,     0,    88,    89,
+      90,    91,    34,     0,    92,    35,    36,    37,    38,    39,
        0,     0,     0,     0,    40,    41,    42,    43,    44,    45,
-      46,   175,   176,   177,   178,   179,     0,     0,    47,     0,
-     180,     0,     0,   181,   182,   183,   184,     0,     0,     0,
-      48,    49,     0,    50,     0,    51,    52,     0,     0,     0,
-       0,   -74,    53,     0,    54,    55,    76,     0,    16,     0,
-      17,    18,    19,    20,    21,     0,     0,   128,    23,    24,
-      25,    26,   108,    27,    28,    29,    30,    31,    32,     0,
-       0,     0,     0,    33,     0,     0,     0,     0,     0,   167,
-     168,   169,   170,     0,     0,     0,    34,     0,     0,    35,
-      36,    37,    38,    39,     0,     0,     0,     0,    40,    41,
-      42,    43,    44,    45,    46,   176,   177,   178,   179,     0,
-       0,     0,    47,   180,     0,     0,   181,   182,   183,   184,
-       0,     0,     0,     0,    48,    49,     0,    50,     0,    51,
-      52,     0,     0,     0,     0,     0,    53,     0,    54,    55,
-      76,     0,    16,     0,    17,    18,    19,    20,    21,     0,
+      46,     0,     0,     0,     0,     0,     0,     0,    47,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      48,    49,     0,    50,     0,    51,    52,     0,    78,     0,
+       0,     0,    53,    93,    54,    55,    76,     0,    16,     0,
+      17,    18,    19,    20,    21,     0,     0,    22,    23,    24,
+      25,    26,     0,    27,    28,    29,    30,    31,    32,    79,
+      98,    80,    81,    33,    82,    83,    84,    85,    86,    87,
+       0,     0,     0,    88,    89,    90,    91,    34,     0,    92,
+      35,    36,    37,    38,    39,     0,     0,     0,     0,    40,
+      41,    42,    43,    44,    45,    46,     0,     0,   536,     0,
+       0,     0,     0,    47,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    48,    49,     0,    50,     0,
+      51,    52,     0,    78,     0,     0,     0,    53,    93,    54,
+      55,    76,     0,    16,     0,    17,    18,    19,    20,    21,
+       0,     0,    22,    23,    24,    25,    26,     0,    27,    28,
+      29,    30,    31,    32,    79,    98,    80,    81,    33,    82,
+      83,    84,    85,    86,    87,     0,     0,     0,    88,    89,
+      90,    91,    34,     0,    92,    35,    36,    37,    38,    39,
+       0,     0,     0,     0,    40,    41,    42,    43,    44,    45,
+      46,     0,     0,     0,     0,     0,     0,     0,    47,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      48,    49,     0,    50,     0,    51,    52,     0,    78,     0,
+       0,     0,    53,    93,    54,    55,    76,     0,    16,     0,
+      17,    18,    19,    20,    21,     0,     0,    22,    23,    24,
+      25,    26,     0,    27,    28,    29,    30,    31,    32,    79,
+       0,    80,    81,    33,    82,    83,    84,    85,    86,    87,
+       0,     0,     0,    88,    89,    90,    91,    34,     0,    92,
+      35,    36,    37,    38,    39,     0,     0,     0,     0,    40,
+      41,    42,    43,    44,    45,    46,     0,     0,     0,     0,
+       0,     0,     0,    47,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    48,    49,     0,    50,     0,
+      51,    52,    78,     0,     0,     0,     0,    53,    93,    54,
+      55,     0,    16,     0,    17,    18,    19,    20,    21,     0,
        0,    22,    23,    24,    25,    26,     0,    27,    28,    29,
       30,    31,    32,     0,     0,     0,     0,    33,     0,     0,
-       0,     0,     0,   167,   168,   169,   170,     0,     0,     0,
+    -268,     0,     0,     0,     0,     0,     0,   168,   169,   170,
+     171,    34,     0,     0,    35,    36,    37,    38,    39,     0,
+       0,     0,     0,    40,    41,    42,    43,    44,    45,    46,
+     174,   175,   176,   177,   178,   179,   180,    47,     0,     0,
+       0,   181,     0,     0,   182,   183,   184,   185,     0,    48,
+      49,     0,    50,     0,    51,    52,    78,     0,     0,     0,
+       0,    53,   -75,    54,    55,     0,    16,     0,    17,    18,
+      19,    20,    21,     0,     0,    22,    23,    24,    25,    26,
+       0,    27,    28,    29,    30,    31,    32,     0,     0,     0,
+       0,    33,     0,     0,     0,     0,     0,     0,   168,   169,
+     170,   171,     0,     0,     0,    34,     0,     0,    35,    36,
+      37,    38,    39,     0,     0,     0,     0,    40,    41,    42,
+      43,    44,    45,    46,   177,   178,   179,   180,     0,     0,
+       0,    47,   181,     0,     0,   182,   183,   184,   185,     0,
+       0,     0,     0,    48,    49,     0,    50,     0,    51,    52,
+       0,     0,     0,     0,   -75,    53,     0,    54,    55,    76,
+       0,    16,     0,    17,    18,    19,    20,    21,     0,     0,
+     129,    23,    24,    25,    26,   109,    27,    28,    29,    30,
+      31,    32,     0,     0,     0,     0,    33,     0,     0,     0,
+       0,     0,     0,   168,   169,   170,   171,     0,     0,     0,
       34,     0,     0,    35,    36,    37,    38,    39,     0,     0,
        0,     0,    40,    41,    42,    43,    44,    45,    46,     0,
-     177,   178,   179,     0,     0,     0,    47,   180,     0,     0,
-     181,   182,   183,   184,     0,     0,     0,     0,    48,    49,
+     178,   179,   180,     0,     0,     0,    47,   181,     0,     0,
+     182,   183,   184,   185,     0,     0,     0,     0,    48,    49,
        0,    50,     0,    51,    52,     0,     0,     0,     0,     0,
-      53,     0,    54,    55,    16,   103,    17,    18,    19,    20,
-      21,     0,     0,    22,    23,    24,    25,    26,     0,    27,
-      28,    29,    30,    31,    32,     0,     0,     0,     0,    33,
-       0,     0,     0,   167,  -267,   169,   170,     0,     0,     0,
-       0,     0,    34,     0,     0,    35,    36,    37,    38,    39,
-       0,     0,     0,     0,    40,    41,    42,    43,    44,    45,
-      46,   178,   179,     0,     0,     0,     0,   180,    47,     0,
-     181,   182,   183,   184,     0,     0,     0,     0,     0,     0,
-      48,    49,     0,    50,     0,    51,    52,     0,     0,     0,
-       0,     0,    53,     0,    54,    55,    16,     0,    17,    18,
+      53,     0,    54,    55,    76,     0,    16,     0,    17,    18,
       19,    20,    21,     0,     0,    22,    23,    24,    25,    26,
        0,    27,    28,    29,    30,    31,    32,     0,     0,     0,
-       0,    33,     0,     0,     0,   167,   168,   169,   170,     0,
+       0,    33,     0,     0,     0,     0,   168,  -268,   170,   171,
+       0,     0,     0,     0,     0,    34,     0,     0,    35,    36,
+      37,    38,    39,     0,     0,     0,     0,    40,    41,    42,
+      43,    44,    45,    46,   179,   180,     0,     0,     0,     0,
+     181,    47,     0,   182,   183,   184,   185,     0,     0,     0,
+       0,     0,     0,    48,    49,     0,    50,     0,    51,    52,
+       0,     0,     0,     0,     0,    53,     0,    54,    55,    16,
+     104,    17,    18,    19,    20,    21,     0,     0,    22,    23,
+      24,    25,    26,     0,    27,    28,    29,    30,    31,    32,
+       0,     0,     0,     0,    33,     0,     0,     0,     0,   168,
+     169,   170,   171,     0,     0,     0,     0,     0,    34,     0,
+       0,    35,    36,    37,    38,    39,     0,     0,     0,     0,
+      40,    41,    42,    43,    44,    45,    46,   179,   180,     0,
+       0,     0,     0,   181,    47,     0,   182,   183,   184,   185,
+       0,     0,     0,     0,     0,     0,    48,    49,     0,    50,
+       0,    51,    52,     0,     0,     0,     0,     0,    53,     0,
+      54,    55,    16,     0,    17,    18,    19,    20,    21,     0,
+       0,    22,    23,    24,    25,    26,     0,    27,    28,    29,
+      30,    31,    32,     0,     0,     0,     0,    33,   215,   216,
+     217,   218,     0,     0,     0,   219,     0,   220,     0,     0,
+       0,    34,     0,     0,    35,    36,    37,    38,    39,     0,
+       0,     0,     0,    40,    41,    42,    43,    44,    45,    46,
+       0,     0,   160,   161,   162,     0,     0,    47,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    48,
+      49,     0,    50,     0,    51,    52,     0,     0,     0,     0,
+       0,    53,   137,    54,    55,    16,     0,    17,    18,    19,
+      20,    21,     0,     0,    22,    23,    24,    25,    26,     0,
+      27,    28,    29,    30,    31,    32,     0,     0,     0,     0,
+      33,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,    34,     0,     0,    35,    36,    37,
       38,    39,     0,     0,     0,     0,    40,    41,    42,    43,
-      44,    45,    46,   178,   179,     0,     0,     0,     0,   180,
-      47,     0,   181,   182,   183,   184,     0,     0,     0,     0,
+      44,    45,    46,     0,     0,     0,     0,     0,     0,     0,
+      47,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,    48,    49,     0,    50,     0,    51,    52,     0,
-       0,     0,     0,     0,    53,   136,    54,    55,    16,     0,
+       0,     0,     0,   156,    53,     0,    54,    55,    16,     0,
       17,    18,    19,    20,    21,     0,     0,    22,    23,    24,
       25,    26,     0,    27,    28,    29,    30,    31,    32,     0,
-       0,     0,     0,    33,   213,   214,   215,   216,     0,     0,
-       0,   217,     0,   218,     0,     0,    34,     0,     0,    35,
-      36,    37,    38,    39,     0,     0,     0,     0,    40,    41,
-      42,    43,    44,    45,    46,     0,     0,   159,   160,   161,
-       0,     0,    47,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    48,    49,     0,    50,     0,    51,
-      52,     0,     0,     0,     0,   155,    53,     0,    54,    55,
-      16,     0,    17,    18,    19,    20,    21,     0,     0,    22,
-      23,    24,    25,    26,     0,    27,    28,    29,    30,    31,
-      32,     0,     0,     0,     0,    33,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
-       0,    35,    36,    37,    38,    39,     0,     0,     0,     0,
-      40,    41,    42,    43,    44,    45,    46,     0,     0,     0,
-       0,     0,     0,     0,    47,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    48,    49,     0,    50,
-       0,    51,    52,     0,     0,     0,     0,   233,    53,     0,
-      54,    55,    16,     0,    17,    18,    19,    20,    21,     0,
-       0,    22,    23,    24,    25,    26,     0,    27,    28,    29,
-      30,    31,    32,     0,     0,     0,     0,    33,     0,     0,
+       0,     0,     0,    33,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    34,     0,     0,
+      35,    36,    37,    38,    39,     0,     0,     0,     0,    40,
+      41,    42,    43,    44,    45,    46,     0,     0,     0,     0,
+       0,     0,     0,    47,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    48,    49,     0,    50,     0,
+      51,    52,     0,     0,     0,     0,   235,    53,     0,    54,
+      55,    16,     0,    17,    18,    19,    20,    21,     0,     0,
+      22,    23,    24,    25,    26,     0,    27,    28,    29,    30,
+      31,    32,     0,     0,     0,     0,    33,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
       34,     0,     0,    35,    36,    37,    38,    39,     0,     0,
        0,     0,    40,    41,    42,    43,    44,    45,    46,     0,
        0,     0,     0,     0,     0,     0,    47,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,    48,    49,
-       0,    50,     0,    51,    52,     0,     0,     0,     0,   247,
+       0,    50,     0,    51,    52,     0,     0,     0,     0,   249,
       53,     0,    54,    55,    16,     0,    17,    18,    19,    20,
       21,     0,     0,    22,    23,    24,    25,    26,     0,    27,
       28,    29,    30,    31,    32,     0,     0,     0,     0,    33,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    34,     0,     0,    35,    36,    37,    38,    39,
-       0,     0,     0,     0,    40,    41,    42,    43,    44,    45,
-      46,     0,     0,     0,     0,     0,     0,     0,    47,     0,
+       0,     0,     0,    34,     0,     0,    35,    36,    37,    38,
+      39,     0,     0,     0,     0,    40,    41,    42,    43,    44,
+      45,    46,     0,     0,     0,     0,     0,     0,     0,    47,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      48,    49,     0,    50,     0,    51,    52,     0,     0,     0,
-       0,   259,    53,     0,    54,    55,    16,     0,    17,    18,
-      19,    20,    21,     0,     0,    22,    23,    24,    25,    26,
-       0,    27,    28,    29,    30,    31,    32,     0,     0,     0,
-       0,    33,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    34,     0,     0,    35,    36,    37,
-      38,    39,     0,     0,     0,     0,    40,    41,    42,    43,
-      44,    45,    46,     0,     0,     0,     0,     0,     0,     0,
-      47,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    48,    49,     0,    50,     0,    51,    52,     0,
-       0,     0,     0,   288,    53,     0,    54,    55,    16,     0,
-      17,    18,    19,    20,    21,     0,     0,    22,    23,    24,
-      25,    26,     0,    27,    28,    29,    30,    31,    32,     0,
-       0,     0,     0,    33,     0,     0,     0,     0,     0,     0,
+       0,    48,    49,     0,    50,     0,    51,    52,     0,     0,
+       0,     0,   261,    53,     0,    54,    55,    16,     0,    17,
+      18,    19,    20,    21,     0,     0,    22,    23,    24,    25,
+      26,     0,    27,    28,    29,    30,    31,    32,     0,     0,
+       0,     0,    33,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,    34,     0,     0,    35,
       36,    37,    38,    39,     0,     0,     0,     0,    40,    41,
       42,    43,    44,    45,    46,     0,     0,     0,     0,     0,
        0,     0,    47,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,    48,    49,     0,    50,     0,    51,
-      52,     0,     0,     0,     0,   341,    53,     0,    54,    55,
+      52,     0,     0,     0,     0,   290,    53,     0,    54,    55,
       16,     0,    17,    18,    19,    20,    21,     0,     0,    22,
       23,    24,    25,    26,     0,    27,    28,    29,    30,    31,
       32,     0,     0,     0,     0,    33,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    34,
+       0,     0,    35,    36,    37,    38,    39,     0,     0,     0,
+       0,    40,    41,    42,    43,    44,    45,    46,     0,     0,
+       0,     0,     0,     0,     0,    47,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    48,    49,     0,
+      50,     0,    51,    52,     0,     0,     0,     0,   343,    53,
+       0,    54,    55,    16,     0,    17,    18,    19,    20,    21,
+       0,     0,    22,    23,    24,    25,    26,     0,    27,    28,
+      29,    30,    31,    32,     0,     0,     0,     0,    33,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    34,     0,     0,    35,    36,    37,    38,    39,
+       0,     0,     0,     0,    40,    41,    42,    43,    44,    45,
+      46,     0,     0,     0,     0,     0,     0,     0,    47,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      48,    49,     0,    50,     0,    51,    52,     0,     0,     0,
+       0,   360,    53,     0,    54,    55,    16,     0,    17,    18,
+      19,    20,    21,     0,     0,    22,    23,    24,    25,    26,
+       0,    27,    28,    29,    30,    31,    32,     0,     0,     0,
+       0,    33,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    34,     0,     0,    35,    36,
+      37,    38,    39,     0,     0,     0,     0,    40,    41,    42,
+      43,    44,    45,    46,     0,     0,     0,     0,     0,     0,
+       0,    47,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    48,    49,     0,    50,     0,    51,    52,
+       0,     0,     0,     0,     0,    53,     0,    54,    55,    16,
+       0,    17,    18,    19,    20,    21,     0,     0,    22,    23,
+      24,    25,    26,     0,    27,    28,    29,    30,    31,    32,
+       0,     0,     0,     0,    33,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
        0,    35,    36,    37,    38,    39,     0,     0,     0,     0,
       40,    41,    42,    43,    44,    45,    46,     0,     0,     0,
-       0,     0,     0,     0,    47,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    48,    49,     0,    50,
-       0,    51,    52,     0,     0,     0,     0,   358,    53,     0,
-      54,    55,    16,     0,    17,    18,    19,    20,    21,     0,
-       0,    22,    23,    24,    25,    26,     0,    27,    28,    29,
-      30,    31,    32,     0,     0,     0,     0,    33,     0,     0,
+       0,     0,     0,     0,    47,   167,     0,     0,     0,     0,
+       0,     0,   168,   169,   170,   171,    48,    49,     0,    50,
+       0,    51,    52,     0,     0,     0,     0,     0,   243,     0,
+      54,    55,   172,   173,   353,   174,   175,   176,   177,   178,
+     179,   180,     0,     0,     0,     0,   181,   167,     0,   182,
+     183,   184,   185,     0,   168,   169,   170,   171,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      34,     0,     0,    35,    36,    37,    38,    39,     0,     0,
-       0,     0,    40,    41,    42,    43,    44,    45,    46,     0,
-       0,     0,     0,     0,     0,     0,    47,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    48,    49,
-       0,    50,     0,    51,    52,     0,     0,     0,     0,     0,
-      53,     0,    54,    55,    16,     0,    17,    18,    19,    20,
-      21,     0,     0,    22,    23,    24,    25,    26,     0,    27,
-      28,    29,    30,    31,    32,     0,     0,     0,     0,    33,
+       0,     0,     0,     0,   172,   173,     0,   174,   175,   176,
+     177,   178,   179,   180,     0,     0,     0,     0,   181,   167,
+       0,   182,   183,   184,   185,     0,   168,   169,   170,   171,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    34,     0,     0,    35,    36,    37,    38,    39,
-       0,     0,     0,     0,    40,    41,    42,    43,    44,    45,
-      46,     0,     0,     0,     0,     0,     0,     0,    47,   166,
-       0,     0,     0,     0,     0,     0,   167,   168,   169,   170,
-      48,    49,     0,    50,     0,    51,    52,     0,     0,     0,
-       0,     0,   241,     0,    54,    55,   171,   172,     0,   173,
-     174,   175,   176,   177,   178,   179,     0,     0,     0,     0,
-     180,   166,     0,   181,   182,   183,   184,     0,   167,   168,
-     169,   170,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   172,
-       0,   173,   174,   175,   176,   177,   178,   179,     0,     0,
-       0,     0,   180,     0,     0,   181,   182,   183,   184
+       0,     0,     0,     0,     0,     0,     0,   173,     0,   174,
+     175,   176,   177,   178,   179,   180,     0,     0,     0,     0,
+     181,     0,     0,   182,   183,   184,   185
 };
 
 static const yytype_int16 yycheck[] =
 {
-      15,   125,    45,     9,    45,   334,   316,   425,    15,    16,
-      16,    11,     9,   114,     9,    11,    76,    19,    20,    21,
-      10,    23,    24,     9,   460,    11,    11,    39,     0,    19,
-      20,    21,    23,    23,    24,    47,    42,    39,    40,   140,
-      23,     9,    17,    18,     9,    15,    16,    53,    38,    39,
-      40,    41,    20,    55,    76,    30,     9,    25,    11,    34,
-      11,   121,    20,    38,    54,    55,    41,    25,     9,    44,
-      11,    46,    68,    48,    49,    50,    51,    52,    99,     9,
-       9,   103,    11,    68,    43,    44,    15,    16,    17,    99,
-      20,   420,    21,     9,   101,    25,   532,    97,    99,   142,
-     224,   142,   114,   100,   522,   100,    72,    73,    74,   100,
-       9,   117,    11,    99,    12,    68,    99,    99,   124,   125,
-     132,    76,    99,   125,   453,     9,    20,    68,   140,   100,
-     120,   101,    61,   101,   102,   125,    99,   143,   198,   199,
-     200,   201,   202,    99,   204,   205,   100,   207,   208,    99,
-      15,    16,    99,   159,   160,   161,    99,   163,   164,   165,
-     203,     9,   203,    11,    15,    16,    17,   142,    99,    68,
-      99,   101,   101,   102,    72,    73,    74,    45,   193,   185,
-     186,   187,   188,   189,   190,   191,   192,   162,     9,    99,
-      11,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,    12,   213,   214,   215,
-     216,   217,   218,   225,   306,    66,    66,    99,   224,   529,
-     210,    12,    98,    98,   316,    90,    10,   319,   320,    12,
-     236,   332,    68,    11,    99,   241,   101,     9,   362,    11,
-      90,    72,    73,    74,     9,   251,    11,    20,    90,    99,
-     101,   101,    19,    20,    21,    99,    23,    24,   318,    72,
-      73,    74,     9,    12,    11,    20,    72,    73,    74,   100,
-     276,   277,    39,    40,   317,    99,   317,   283,    45,    68,
-      98,    72,    73,    74,    10,    98,    23,    54,    55,    72,
-      73,    74,    12,    11,   284,    74,    99,   303,   304,   305,
-     306,   427,   394,   102,   430,    12,   102,    59,   434,   435,
-     316,    99,   372,   319,   320,   375,   376,    12,    18,    20,
-     332,    88,   423,    72,    73,    74,   102,   387,   102,    12,
-     456,   457,   102,   101,    86,    99,   428,   429,    98,    91,
-     466,   347,    94,    95,    96,    97,   336,    23,    10,   463,
-      23,    10,    72,    73,    74,    10,   362,    10,   125,   485,
-      72,    73,    74,   489,   490,    72,    73,    74,   482,   483,
-      10,    20,    99,   465,    98,   142,   351,    72,    73,    74,
-     494,    94,    95,    96,    97,   511,    98,    98,   394,    72,
-      73,    74,   398,    98,   508,   509,    39,    40,    41,    42,
-      98,    98,   528,    46,   100,    48,    72,    73,    74,   523,
-     536,   423,    72,    73,    74,   507,    98,   184,    72,    73,
-      74,    98,   428,   429,    98,     9,    72,    73,    74,    72,
-      73,    74,   447,    10,   100,    98,   203,     9,    99,   454,
-     100,    98,   100,    50,    25,    76,   100,    98,    70,    77,
-      57,    58,    59,    60,   100,    98,   100,    98,   464,   465,
-      98,     9,   452,    72,    73,    74,    72,    73,    74,   484,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      72,    73,    74,    99,    91,     0,   501,    94,    95,    96,
-      97,   100,    98,    69,     9,   100,    11,    12,    98,    19,
-      57,   507,    59,    60,    72,    73,    74,    98,   100,   524,
-      72,    73,    74,    98,    12,    97,   464,   284,   304,    33,
-     495,    72,    73,    74,    39,    40,    41,    42,    85,    86,
-      98,    46,    81,    48,    91,    50,    98,    94,    95,    96,
-      97,   308,    57,    58,    59,    60,   374,    98,    91,   529,
-     317,    94,    95,    96,    97,   243,   195,    72,    73,    74,
-       0,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    12,   142,   441,   471,    91,    59,    60,    94,
-      95,    96,    97,    98,   472,   100,   421,   317,   103,    59,
-      60,   203,    -1,    -1,    -1,    -1,    72,    73,    74,    39,
-      40,    41,    42,    85,    86,    -1,    46,    -1,    48,    91,
-      50,    -1,    94,    95,    96,    97,    86,    57,    58,    59,
-      60,    91,    98,    -1,    94,    95,    96,    97,    -1,    -1,
-      -1,    -1,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    72,    73,    74,
-      -1,    91,    -1,    -1,    94,    95,    96,    97,    98,    -1,
-     100,     0,     1,   103,    -1,    -1,    -1,    -1,    -1,    -1,
-       9,    -1,    11,    98,    13,    14,    15,    16,    17,    -1,
-      -1,    20,    21,    22,    23,    24,    -1,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    -1,    -1,    -1,    46,    47,    48,
-      49,    -1,    51,    52,    53,    54,    55,    56,    -1,    -1,
-      -1,    -1,    61,    62,    63,    64,    65,    66,    67,    86,
-      -1,    -1,    -1,    -1,    91,    -1,    75,    94,    95,    96,
-      97,     3,     4,     5,     6,     7,     8,    -1,    87,    88,
-      -1,    90,    -1,    92,    93,     0,     1,    -1,    -1,    -1,
-      99,   100,   101,   102,     9,    -1,    11,    -1,    13,    14,
-      15,    16,    17,    -1,    -1,    20,    21,    22,    23,    24,
-      -1,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    -1,    -1,
-      -1,    46,    47,    48,    49,    -1,    51,    52,    53,    54,
-      55,    56,    -1,    -1,    -1,    -1,    61,    62,    63,    64,
-      65,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    87,    88,    -1,    90,    -1,    92,    93,    -1,
-       1,    -1,    -1,    -1,    99,   100,   101,   102,     9,    10,
-      11,    -1,    13,    14,    15,    16,    17,    -1,    -1,    20,
-      21,    22,    23,    24,    -1,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    -1,    -1,    -1,    46,    47,    48,    49,    -1,
-      51,    52,    53,    54,    55,    56,    -1,    -1,    -1,    -1,
-      61,    62,    63,    64,    65,    66,    67,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    75,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    87,    88,    -1,    90,
-      -1,    92,    93,    -1,     1,    -1,    -1,    -1,    99,   100,
-     101,   102,     9,    10,    11,    -1,    13,    14,    15,    16,
-      17,    -1,    -1,    20,    21,    22,    23,    24,    -1,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    -1,    -1,    -1,    46,
-      47,    48,    49,    -1,    51,    52,    53,    54,    55,    56,
-      -1,    -1,    -1,    -1,    61,    62,    63,    64,    65,    66,
-      67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    75,    -1,
+      15,   427,    45,     9,   126,   318,   336,     9,   462,   115,
+      16,     9,    45,    23,     9,    11,    11,    77,     0,    39,
+      10,     9,    15,    16,    15,    16,    11,    47,     9,    19,
+      20,    21,    20,    23,    24,   141,    42,    25,    11,    23,
+      76,     9,    17,    18,   104,    12,    11,    53,    38,    39,
+      40,    41,    20,   100,     9,    30,    11,    25,   100,    34,
+       9,    12,    11,    38,    54,    55,    41,    12,     9,    44,
+      11,    46,   100,    48,    49,    50,    51,    52,    20,    12,
+     534,    43,    44,    25,    69,    77,   122,    15,    16,    17,
+      12,   101,   422,   100,     9,   115,    69,   100,   524,   101,
+     143,    91,    98,   101,   226,   100,    73,    74,    75,   102,
+     143,   102,   118,   133,   102,   103,   100,     9,    20,   125,
+     126,   141,    73,    74,    75,   455,   100,    45,    73,    74,
+      75,   121,   101,   308,   102,     9,   126,    11,   144,    67,
+      73,    74,    75,   318,   100,    99,   321,   322,    15,    16,
+     100,    73,    74,    75,   160,   161,   162,   100,   164,   165,
+     166,   204,   100,   199,   200,   201,   202,   203,   143,   205,
+     206,   204,   208,   209,   102,   100,     9,    12,    11,   194,
+     186,   187,   188,   189,   190,   191,   192,   193,   163,   101,
+     100,    12,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   227,    12,   215,
+     216,   217,   218,   219,   220,   100,    99,     9,   531,    11,
+     226,   396,   212,    10,    91,    19,    20,    21,   334,    23,
+      24,    69,   238,   100,    11,   102,    69,   243,    73,    74,
+      75,    20,   364,    12,    20,    39,    40,   253,     9,    91,
+      11,    45,    73,    74,    75,   430,   431,    73,    74,    75,
+      54,    55,    19,    20,    21,    99,    23,    24,   100,    73,
+      74,    75,   278,   279,   100,    10,   319,    69,     9,   285,
+      11,    69,    39,    40,   320,   101,   319,    73,    74,    75,
+      23,   465,   467,    11,    88,    75,   286,   103,    55,   305,
+     306,   307,   308,   103,    73,    74,    75,   103,    69,   100,
+     484,   485,   318,    99,   334,   321,   322,   429,   103,   425,
+     432,     9,   496,    11,   436,   437,    18,    15,    16,    17,
+     103,   102,   126,    21,   509,   100,   510,   511,   374,    20,
+     100,   377,   378,   349,    99,    10,   458,   459,   338,   143,
+      60,   525,    23,   389,    10,    10,   468,    10,   364,    10,
+      20,    39,    40,    41,    42,    73,    74,    75,    46,   126,
+      48,    60,    61,    23,    62,   487,    99,    87,   353,   491,
+     492,   100,    92,    99,    99,    95,    96,    97,    98,   101,
+     396,   185,    99,   101,   400,    73,    74,    75,    87,    99,
+      99,   513,    99,    92,    67,   425,    95,    96,    97,    98,
+     204,     9,   100,    99,   102,   103,    10,    99,   530,     9,
+     100,    99,   101,    99,   430,   431,   538,    99,    91,    73,
+      74,    75,    25,    71,   449,    77,     9,   100,    78,   102,
+     101,   456,    73,    74,    75,    99,    70,    58,    59,    60,
+      61,    73,    74,    75,     0,   100,    99,   101,    99,    19,
+     466,   467,   101,     9,   454,    11,    12,    73,    74,    75,
+     101,   486,    83,    84,    85,    86,    87,    12,    99,   101,
+      99,    92,    98,   466,    95,    96,    97,    98,   503,    73,
+      74,    75,   286,    39,    40,    41,    42,    73,    74,    75,
+      46,   306,    48,   509,    92,    51,   531,    95,    96,    97,
+      98,   526,    58,    59,    60,    61,   310,   101,    73,    74,
+      75,   196,   497,    99,    33,   319,   376,    73,    74,    75,
+       0,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    12,    81,    99,    58,    92,    60,    61,    95,
+      96,    97,    98,    99,   245,   101,   443,   473,   104,   423,
+      60,    61,   143,   474,    -1,    73,    74,    75,   319,    39,
+      40,    41,    42,    86,    87,   204,    46,    -1,    48,    92,
+      -1,    51,    95,    96,    97,    98,    86,    87,    58,    59,
+      60,    61,    92,   101,    -1,    95,    96,    97,    98,    95,
+      96,    97,    98,    73,    74,    75,    -1,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    73,    74,
+      75,    -1,    92,    -1,    -1,    95,    96,    97,    98,    99,
+      -1,   101,     0,     1,   104,    -1,    -1,    -1,    -1,    -1,
+      -1,     9,    -1,    11,    99,    13,    14,    15,    16,    17,
+      -1,    -1,    20,    21,    22,    23,    24,    -1,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    73,    74,    75,    46,    47,
+      48,    49,    50,    -1,    52,    53,    54,    55,    56,    57,
+      73,    74,    75,    -1,    62,    63,    64,    65,    66,    67,
+      68,    99,    -1,    73,    74,    75,    -1,    -1,    76,    -1,
+      -1,    73,    74,    75,    -1,    -1,    99,    -1,    -1,    -1,
+      88,    89,    -1,    91,    -1,    93,    94,     0,     1,    99,
+      -1,    -1,   100,   101,   102,   103,     9,    99,    11,    -1,
+      13,    14,    15,    16,    17,    -1,    -1,    20,    21,    22,
+      23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      -1,    -1,    -1,    46,    47,    48,    49,    50,    -1,    52,
+      53,    54,    55,    56,    57,    -1,    -1,    -1,    -1,    62,
+      63,    64,    65,    66,    67,    68,    87,    -1,    -1,    -1,
+      -1,    92,    -1,    76,    95,    96,    97,    98,     3,     4,
+       5,     6,     7,     8,    -1,    88,    89,    -1,    91,    -1,
+      93,    94,    -1,     1,    -1,    -1,    -1,   100,   101,   102,
+     103,     9,    10,    11,    -1,    13,    14,    15,    16,    17,
+      -1,    -1,    20,    21,    22,    23,    24,    -1,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    -1,    -1,    -1,    46,    47,
+      48,    49,    50,    -1,    52,    53,    54,    55,    56,    57,
+      -1,    -1,    -1,    -1,    62,    63,    64,    65,    66,    67,
+      68,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    76,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      87,    88,    -1,    90,    -1,    92,    93,    -1,     1,    -1,
-      -1,    -1,    99,   100,   101,   102,     9,    10,    11,    -1,
+      88,    89,    -1,    91,    -1,    93,    94,    -1,     1,    -1,
+      -1,    -1,   100,   101,   102,   103,     9,    10,    11,    -1,
       13,    14,    15,    16,    17,    -1,    -1,    20,    21,    22,
       23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
       33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      -1,    -1,    -1,    46,    47,    48,    49,    -1,    51,    52,
-      53,    54,    55,    56,    -1,    -1,    -1,    -1,    61,    62,
-      63,    64,    65,    66,    67,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    87,    88,    -1,    90,    -1,    92,
-      93,    -1,     1,    -1,    -1,    -1,    99,   100,   101,   102,
-       9,    10,    11,    -1,    13,    14,    15,    16,    17,    -1,
-      -1,    20,    21,    22,    23,    24,    -1,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    -1,    -1,    -1,    46,    47,    48,
-      49,    -1,    51,    52,    53,    54,    55,    56,    -1,    -1,
-      -1,    -1,    61,    62,    63,    64,    65,    66,    67,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    75,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,
-      -1,    90,    -1,    92,    93,    -1,     1,    -1,    -1,    -1,
-      99,   100,   101,   102,     9,    10,    11,    -1,    13,    14,
-      15,    16,    17,    -1,    -1,    20,    21,    22,    23,    24,
-      -1,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    -1,    -1,
-      -1,    46,    47,    48,    49,    -1,    51,    52,    53,    54,
-      55,    56,    -1,    -1,    -1,    -1,    61,    62,    63,    64,
-      65,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    87,    88,    -1,    90,    -1,    92,    93,    -1,
-       1,    -1,    -1,    -1,    99,   100,   101,   102,     9,    -1,
-      11,    -1,    13,    14,    15,    16,    17,    -1,    -1,    20,
-      21,    22,    23,    24,    -1,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    -1,    -1,    -1,    46,    47,    48,    49,    -1,
-      51,    52,    53,    54,    55,    56,    -1,    -1,    -1,    -1,
-      61,    62,    63,    64,    65,    66,    67,    -1,    -1,    70,
-      -1,    -1,    -1,    -1,    75,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    87,    88,    -1,    90,
-      -1,    92,    93,    -1,     1,    -1,    -1,    -1,    99,   100,
-     101,   102,     9,    -1,    11,    -1,    13,    14,    15,    16,
-      17,    -1,    -1,    20,    21,    22,    23,    24,    -1,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    -1,    -1,    -1,    46,
-      47,    48,    49,    -1,    51,    52,    53,    54,    55,    56,
-      -1,    -1,    -1,    -1,    61,    62,    63,    64,    65,    66,
-      67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    75,    -1,
+      -1,    -1,    -1,    46,    47,    48,    49,    50,    -1,    52,
+      53,    54,    55,    56,    57,    -1,    -1,    -1,    -1,    62,
+      63,    64,    65,    66,    67,    68,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    88,    89,    -1,    91,    -1,
+      93,    94,    -1,     1,    -1,    -1,    -1,   100,   101,   102,
+     103,     9,    10,    11,    -1,    13,    14,    15,    16,    17,
+      -1,    -1,    20,    21,    22,    23,    24,    -1,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    -1,    -1,    -1,    46,    47,
+      48,    49,    50,    -1,    52,    53,    54,    55,    56,    57,
+      -1,    -1,    -1,    -1,    62,    63,    64,    65,    66,    67,
+      68,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    76,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      87,    88,    -1,    90,    -1,    92,    93,    -1,     1,    -1,
-      -1,    -1,    99,   100,   101,   102,     9,    -1,    11,    -1,
+      88,    89,    -1,    91,    -1,    93,    94,    -1,     1,    -1,
+      -1,    -1,   100,   101,   102,   103,     9,    10,    11,    -1,
       13,    14,    15,    16,    17,    -1,    -1,    20,    21,    22,
       23,    24,    -1,    26,    27,    28,    29,    30,    31,    32,
-      -1,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      -1,    -1,    -1,    46,    47,    48,    49,    -1,    51,    52,
-      53,    54,    55,    56,    -1,    -1,    -1,    -1,    61,    62,
-      63,    64,    65,    66,    67,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    87,    88,    -1,    90,    -1,    92,
-      93,     1,    -1,    -1,    -1,    -1,    99,   100,   101,   102,
-      -1,    11,    -1,    13,    14,    15,    16,    17,    -1,   &nbs