In perl.git, the branch zefram/dumb_match has been updated

<https://perl5.git.perl.org/perl.git/commitdiff/b1a6328e96a123f6ca713df406f01c2f4a2f2b7b?hp=9e0909b2180c408354ce24b6c742f4b79e783d11>

- Log -----------------------------------------------------------------
commit b1a6328e96a123f6ca713df406f01c2f4a2f2b7b
Author: Zefram <[email protected]>
Date:   Wed Nov 29 22:02:58 2017 +0000

    perldelta for more switch changes

commit e98c3eae7b9c9628400af33f6ac77a6feebb4f3f
Author: Zefram <[email protected]>
Date:   Wed Nov 29 21:51:11 2017 +0000

    remove unused CXp_FOR_DEF and OPpITER_DEF
    
    These were used to identify foreach loops that qualify as topicalizers.
    That's no longer a relevant classification.

commit b4904f80ff3e727173a3d8a9856827695e1af0ad
Author: Zefram <[email protected]>
Date:   Wed Nov 29 21:44:37 2017 +0000

    make "when" do implicit "next"
    
    A "when" construct, upon reaching the end of its conditionally-executed
    block, used to perform an implicit jump to the end of the enclosing
    topicalizer, defined as either a "given" block or a "foreach" operating
    on $_.  Change it to jump to the enclosing loop of any kind (which now
    includes "given" blocks).

commit 97b4caa610942fa2caded4f8ec03ac72089cd30e
Author: Zefram <[email protected]>
Date:   Wed Nov 29 20:19:20 2017 +0000

    remove useless "break" mechanism

commit 619bbb9ab0f3cffda05f980b2ebb5bf660ad6962
Author: Zefram <[email protected]>
Date:   Wed Nov 29 19:27:49 2017 +0000

    make loop control apply to "given"
    
    A "given" construct is now officially a one-iteration loop.

commit df16d5564aa82a94953a0bccfc9917bc140ead02
Author: Zefram <[email protected]>
Date:   Wed Nov 29 15:22:49 2017 +0000

    revise block_givwhen for sole use by "when"
    
    This context frame type doesn't need to cater for "given" any more.

commit df9e1bc13efe0941735d662db5683d62b3851535
Author: Zefram <[email protected]>
Date:   Wed Nov 29 14:12:51 2017 +0000

    use blk_loop format for CXt_GIVEN

commit af8bd34d16b94bde32535062ba4e88407be233a0
Author: Zefram <[email protected]>
Date:   Wed Nov 29 00:13:38 2017 +0000

    use LOOP struct for entergiven op
    
    This will support the upcoming change to let loop control ops apply to
    "given" blocks.

commit 5086635a9f7a492b5a0c6228ecf7a22abbabeef6
Author: Zefram <[email protected]>
Date:   Tue Nov 28 20:26:07 2017 +0000

    avoid gratuitous given/when in test

commit 869b8c119a7436d3373e1325925a8b753d0e7805
Author: Zefram <[email protected]>
Date:   Tue Nov 28 20:21:36 2017 +0000

    remove useless "default" mechanism

-----------------------------------------------------------------------

Summary of changes:
 cop.h                             |   22 +-
 cpan/experimental/t/basic.t       |    4 +-
 dump.c                            |    2 +-
 embed.fnc                         |    8 +-
 embed.h                           |    5 +-
 ext/B/B.pm                        |    2 +-
 ext/B/t/f_map.t                   |    4 +-
 ext/B/t/optree_samples.t          |   20 +-
 ext/Opcode/Opcode.pm              |    4 +-
 ext/Pod-Functions/Functions_pm.PL |    2 +-
 ext/Pod-Functions/t/Functions.t   |    2 +-
 ext/XS-APItest/t/grok.t           |   25 +-
 gv.c                              |    2 +-
 inline.h                          |   37 +-
 keywords.c                        |   72 +-
 keywords.h                        |  466 ++++++-----
 lib/B/Deparse-core.t              |    3 +-
 lib/B/Deparse.pm                  |   19 +-
 lib/B/Deparse.t                   |   24 +-
 lib/B/Op_private.pm               |    5 -
 op.c                              |  111 +--
 op.h                              |    2 -
 opcode.h                          |  239 +++---
 opnames.h                         |  353 ++++----
 perly.act                         |  712 ++++++++--------
 perly.h                           |   91 +--
 perly.tab                         | 1638 ++++++++++++++++++-------------------
 perly.y                           |    4 +-
 pod/perldelta.pod                 |   12 +
 pod/perldiag.pod                  |   36 +-
 pod/perlfunc.pod                  |   48 +-
 pod/perlsyn.pod                   |   54 +-
 pp_ctl.c                          |   94 +--
 pp_proto.h                        |    1 -
 proto.h                           |   23 +-
 regen/keywords.pl                 |    4 -
 regen/op_private                  |    1 -
 regen/opcodes                     |    3 +-
 scope.c                           |    4 +-
 sv.c                              |    5 +-
 t/lib/croak/pp_ctl                |    8 +-
 t/lib/feature/switch              |   64 --
 t/op/coreamp.t                    |   12 -
 t/op/cproto.t                     |    4 +-
 t/op/given.t                      |  106 ++-
 t/op/state.t                      |    2 +-
 t/op/switch.t                     |  120 +--
 t/op/taint.t                      |    1 -
 t/op/when.t                       |   29 +-
 t/porting/customized.dat          |    2 +-
 toke.c                            |    7 -
 51 files changed, 2120 insertions(+), 2398 deletions(-)

diff --git a/cop.h b/cop.h
index 5c66752859..f9ba12304b 100644
--- a/cop.h
+++ b/cop.h
@@ -721,10 +721,9 @@ struct block_loop {
 
 
 
-/* given/when context */
-struct block_givwhen {
+/* when context */
+struct block_when {
        OP *leave_op;
-        SV *defsv_save; /* the original $_ */
 };
 
 
@@ -748,7 +747,7 @@ struct block {
        struct block_format     blku_format;
        struct block_eval       blku_eval;
        struct block_loop       blku_loop;
-       struct block_givwhen    blku_givwhen;
+       struct block_when       blku_when;
     } blk_u;
 };
 #define blk_oldsp      cx_u.cx_blk.blku_oldsp
@@ -764,7 +763,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_givwhen    cx_u.cx_blk.blk_u.blku_givwhen
+#define blk_when       cx_u.cx_blk.blk_u.blku_when
 
 #define CX_DEBUG(cx, action)                                           \
     DEBUG_l(                                                           \
@@ -859,14 +858,9 @@ struct context {
 #define CXt_NULL       0 /* currently only used for sort BLOCK */
 #define CXt_WHEN       1
 #define CXt_BLOCK      2
-/* 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,
+/* be careful of the ordering of these six. 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)     { ...; } */
@@ -892,8 +886,6 @@ 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 */
@@ -905,7 +897,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_ARY                \
+#define CxTYPE_is_LOOP(c) (   CxTYPE(cx) >= CXt_LOOP_GIVEN              \
                            && 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/cpan/experimental/t/basic.t b/cpan/experimental/t/basic.t
index 95f60db347..e66b2b9c83 100644
--- a/cpan/experimental/t/basic.t
+++ b/cpan/experimental/t/basic.t
@@ -24,9 +24,7 @@ if ($] >= 5.010001) {
                when (\&bar) {
                        pass("bar matches 1");
                }
-               default {
-                       fail("bar matches 1");
-               }
+               fail("bar matches 1");
        }
        1;
 END
diff --git a/dump.c b/dump.c
index b2f0fc5ef2..009266c877 100644
--- a/dump.c
+++ b/dump.c
@@ -1200,6 +1200,7 @@ 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");
@@ -1221,7 +1222,6 @@ 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_ENTERGIVEN:
     case OP_ENTERWHEN:
     case OP_ENTERTRY:
     case OP_ONCE:
diff --git a/embed.fnc b/embed.fnc
index b39a5a7229..4f685e8ee8 100644
--- a/embed.fnc
+++ b/embed.fnc
@@ -1166,7 +1166,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*    |newWHENOP      |NULLOK OP* cond|NN OP* block
+ApdR   |OP*    |newWHENOP      |NN 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
@@ -2140,8 +2140,6 @@ 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      |OP*    |newGIVWHENOP   |NULLOK OP* cond|NN OP *block \
-                               |I32 enter_opcode|I32 leave_opcode
 s      |bool   |process_special_blocks |I32 floor \
                                        |NN const char *const fullname\
                                        |NN GV *const gv|NN CV *const cv
@@ -2229,7 +2227,6 @@ 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
@@ -3157,11 +3154,10 @@ 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_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 f726f97980..603a0a26d5 100644
--- a/embed.h
+++ b/embed.h
@@ -788,7 +788,6 @@
 #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)
@@ -797,8 +796,8 @@
 #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_pushwhen(a)         S_cx_pushwhen(aTHX_ a)
@@ -1654,7 +1653,6 @@
 #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)  S_newGIVWHENOP(aTHX_ a,b,c,d)
 #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)
@@ -1718,7 +1716,6 @@
 #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)
diff --git a/ext/B/B.pm b/ext/B/B.pm
index 6adbb02930..86d24a5328 100644
--- a/ext/B/B.pm
+++ b/ext/B/B.pm
@@ -20,7 +20,7 @@ sub import {
 # walkoptree comes from B.xs
 
 BEGIN {
-    $B::VERSION = '1.72';
+    $B::VERSION = '1.73';
     @B::EXPORT_OK = ();
 
     # Our BOOT code needs $VERSION set, and will append to @EXPORT_OK.
diff --git a/ext/B/t/f_map.t b/ext/B/t/f_map.t
index 221f2926e2..893d010459 100644
--- a/ext/B/t/f_map.t
+++ b/ext/B/t/f_map.t
@@ -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/DEF
+# f  <{> enteriter(next->q last->t redo->g) KS
 # 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/DEF
+# f  <{> enteriter(next->q last->t redo->g) KS
 # r  <0> iter s
 # s  <|> and(other->g) K/1
 # g      <;> nextstate(main 559 (eval 15):1) v:{
diff --git a/ext/B/t/optree_samples.t b/ext/B/t/optree_samples.t
index 15b5799ce0..a791889618 100644
--- a/ext/B/t/optree_samples.t
+++ b/ext/B/t/optree_samples.t
@@ -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/DEF
+# 6  <{> enteriter(next->c last->f redo->7) KS
 # 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/DEF
+# 6  <{> enteriter(next->c last->f redo->7) KS
 # 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/DEF ->c
+# 6           <{> enteriter(next->b last->e redo->7) KS ->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/DEF ->c
+# 6           <{> enteriter(next->b last->e redo->7) KS ->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/DEF
+# 7  <{> enteriter(next->d last->g redo->8) vKS
 # 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/DEF
+# 7  <{> enteriter(next->d last->g redo->8) vKS
 # 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/DEF
+# 6  <{> enteriter(next->b last->e redo->7) KS
 # 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/DEF
+# 6  <{> enteriter(next->b last->e redo->7) KS
 # 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/DEF
+# d  <{> enteriter(next->o last->r redo->e) KS
 # 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/DEF
+# d  <{> enteriter(next->o last->r redo->e) KS
 # p  <0> iter s
 # q  <|> and(other->e) K/1
 # e      <;> nextstate(main 505 (eval 24):1) v:{
diff --git a/ext/Opcode/Opcode.pm b/ext/Opcode/Opcode.pm
index 01c495d5d6..9ebaa56c91 100644
--- a/ext/Opcode/Opcode.pm
+++ b/ext/Opcode/Opcode.pm
@@ -6,7 +6,7 @@ use strict;
 
 our($VERSION, @ISA, @EXPORT_OK);
 
-$VERSION = "1.41";
+$VERSION = "1.42";
 
 use Carp;
 use Exporter ();
@@ -428,7 +428,7 @@ These are a hotchpotch of opcodes still waiting to be 
considered
 
     entergiven leavegiven
     enterwhen leavewhen
-    break continue
+    continue
     smartmatch
 
     custom -- where should this go
diff --git a/ext/Pod-Functions/Functions_pm.PL 
b/ext/Pod-Functions/Functions_pm.PL
index eb8369a470..bd0e3dad80 100644
--- a/ext/Pod-Functions/Functions_pm.PL
+++ b/ext/Pod-Functions/Functions_pm.PL
@@ -207,7 +207,7 @@ L<perlfunc/"Perl Functions by Category"> section.
 
 =cut
 
-our $VERSION = '1.11';
+our $VERSION = '1.12';
 
 require Exporter;
 
diff --git a/ext/Pod-Functions/t/Functions.t b/ext/Pod-Functions/t/Functions.t
index 2beccc1ac6..23301142ba 100644
--- a/ext/Pod-Functions/t/Functions.t
+++ b/ext/Pod-Functions/t/Functions.t
@@ -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__, break, caller,
+     __FILE__, __LINE__, __PACKAGE__, __SUB__, caller,
      continue, die, do, dump, eval, evalbytes, exit, goto,
      last, next, redo, return, sub, wantarray
 
diff --git a/ext/XS-APItest/t/grok.t b/ext/XS-APItest/t/grok.t
index 4632752b4e..b6ad905b60 100644
--- a/ext/XS-APItest/t/grok.t
+++ b/ext/XS-APItest/t/grok.t
@@ -4,7 +4,6 @@ use strict;
 use Test::More;
 use Config;
 use XS::APItest;
-use feature 'switch';
 no warnings 'experimental::smartmatch';
 use constant TRUTH => '0 but true';
 
@@ -31,21 +30,15 @@ foreach my $leader ('', ' ', '  ') {
 
        {
            my (@UV, @NV);
-           given ($Config{ivsize}) {
-               when ($_ == 4) {
-                   @UV = qw(429496729  4294967290 4294967294 4294967295);
-                   @NV = qw(4294967296 4294967297 4294967300 4294967304);
-               }
-               when ($_ == 8) {
-                   @UV = qw(1844674407370955161  18446744073709551610
-                            18446744073709551614 18446744073709551615);
-                   @NV = qw(18446744073709551616 18446744073709551617
-                            18446744073709551620 18446744073709551624);
-               }
-               default {
-                   die "Unknown IV size $_";
-               }
-           }
+           if ($Config{ivsize} == 4) {
+               @UV = qw(429496729  4294967290 4294967294 4294967295);
+               @NV = qw(4294967296 4294967297 4294967300 4294967304);
+           } elsif ($Config{ivsize} == 8) {
+               @UV = qw(1844674407370955161  18446744073709551610
+                        18446744073709551614 18446744073709551615);
+               @NV = qw(18446744073709551616 18446744073709551617
+                        18446744073709551620 18446744073709551624);
+           } else { die "Unknown IV size $Config{ivsize}" }
            foreach (@UV) {
                my $string = $leader . $_ . $trailer;
                my ($flags, $value) = grok_number($string);
diff --git a/gv.c b/gv.c
index bc5b388588..2c9f64c181 100644
--- 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_default : case KEY_DESTROY:
+    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     :
diff --git a/inline.h b/inline.h
index 2f67af8833..30d695543e 100644
--- a/inline.h
+++ b/inline.h
@@ -1596,6 +1596,17 @@ 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
@@ -1636,7 +1647,7 @@ S_cx_pushwhen(pTHX_ PERL_CONTEXT *cx)
 {
     PERL_ARGS_ASSERT_CX_PUSHWHEN;
 
-    cx->blk_givwhen.leave_op = cLOGOP->op_other;
+    cx->blk_when.leave_op = cLOGOP->op_other;
 }
 
 
@@ -1652,30 +1663,6 @@ S_cx_popwhen(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 ------------------------------------------- */
 
 /*
diff --git a/keywords.c b/keywords.c
index 9fa30e616a..1576d4addf 100644
--- a/keywords.c
+++ b/keywords.c
@@ -950,7 +950,7 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool 
all_keywords)
           goto unknown;
       }
 
-    case 5: /* 39 tokens of length 5 */
+    case 5: /* 38 tokens of length 5 */
       switch (name[0])
       {
         case 'B':
@@ -1003,32 +1003,16 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool 
all_keywords)
           }
 
         case 'b':
-          switch (name[1])
-          {
-            case 'l':
-              if (name[2] == 'e' &&
-                  name[3] == 's' &&
-                  name[4] == 's')
-              {                                   /* bless            */
-                return -KEY_bless;
-              }
-
-              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;
+          if (name[1] == 'l' &&
+              name[2] == 'e' &&
+              name[3] == 's' &&
+              name[4] == 's')
+          {                                       /* bless            */
+            return -KEY_bless;
           }
 
+          goto unknown;
+
         case 'c':
           switch (name[1])
           {
@@ -1903,7 +1887,7 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool 
all_keywords)
           goto unknown;
       }
 
-    case 7: /* 30 tokens of length 7 */
+    case 7: /* 29 tokens of length 7 */
       switch (name[0])
       {
         case 'D':
@@ -1995,33 +1979,13 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool 
all_keywords)
               goto unknown;
 
             case 'e':
-              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;
-                }
+              if (name[2] == 'f' &&
+                  name[3] == 'i' &&
+                  name[4] == 'n' &&
+                  name[5] == 'e' &&
+                  name[6] == 'd')
+              {                                   /* defined          */
+                return KEY_defined;
               }
 
               goto unknown;
@@ -3437,5 +3401,5 @@ unknown:
 }
 
 /* Generated from:
- * db0472e0ad4f44bd0816cad799d63b60d1bbd7e11cef40ea15bf0d00f69669f6 
regen/keywords.pl
+ * 50664fad65e719c51bf369702163eb7ade79f997461f928cc20f1e1bcf8369b8 
regen/keywords.pl
  * ex: set ro: */
diff --git a/keywords.h b/keywords.h
index 2b1d598a4e..cd4ecb3631 100644
--- a/keywords.h
+++ b/keywords.h
@@ -35,240 +35,238 @@
 #define KEY_bind               19
 #define KEY_binmode            20
 #define KEY_bless              21
-#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
+#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_when               247
+#define KEY_while              248
+#define KEY_write              249
+#define KEY_x                  250
+#define KEY_xor                        251
+#define KEY_y                  252
 
 /* Generated from:
- * db0472e0ad4f44bd0816cad799d63b60d1bbd7e11cef40ea15bf0d00f69669f6 
regen/keywords.pl
+ * 50664fad65e719c51bf369702163eb7ade79f997461f928cc20f1e1bcf8369b8 
regen/keywords.pl
  * ex: set ro: */
diff --git a/lib/B/Deparse-core.t b/lib/B/Deparse-core.t
index 2ed797ac7e..01a9b18305 100644
--- a/lib/B/Deparse-core.t
+++ b/lib/B/Deparse-core.t
@@ -36,7 +36,7 @@ BEGIN {
 
 use strict;
 use Test::More;
-plan tests => 3886;
+plan tests => 3874;
 
 use feature (sprintf(":%vd", $^V)); # to avoid relying on the feature
                                     # logic to add CORE::
@@ -461,7 +461,6 @@ atan2            2     p
 bind             2     p
 binmode          12    p
 bless            1     p
-break            0     -
 caller           0     -
 chdir            01    -
 chmod            @     p1
diff --git a/lib/B/Deparse.pm b/lib/B/Deparse.pm
index c2dc591f5d..02ea4bc5f0 100644
--- a/lib/B/Deparse.pm
+++ b/lib/B/Deparse.pm
@@ -2247,8 +2247,6 @@ my %feature_keywords = (
     say     => 'say',
     given   => 'switch',
     when    => 'switch',
-    default => 'switch',
-    break   => 'switch',
     evalbytes=>'evalbytes',
     __SUB__ => '__SUB__',
    fc       => 'fc',
@@ -2540,26 +2538,17 @@ sub pp_ggrgid { unop(@_, "getgrgid") }
 sub pp_lock { unop(@_, "lock") }
 
 sub pp_continue { unop(@_, "continue"); }
-sub pp_break { unop(@_, "break"); }
 
 sub givwhen {
     my $self = shift;
     my($op, $cx, $givwhen) = @_;
 
     my $enterop = $op->first;
-    my ($head, $block);
-    if ($enterop->flags & OPf_SPECIAL) {
-       $head = $self->keyword("default");
-       $block = $self->deparse($enterop->first, 0);
-    }
-    else {
-       my $cond = $enterop->first;
-       my $cond_str = $self->deparse($cond, 1);
-       $head = "$givwhen ($cond_str)";
-       $block = $self->deparse($cond->sibling, 0);
-    }
+    my $cond = $enterop->first;
+    my $cond_str = $self->deparse($cond, 1);
+    my $block = $self->deparse($cond->sibling, 0);
 
-    return "$head {\n".
+    return "$givwhen ($cond_str) {\n".
        "\t$block\n".
        "\b}\cK";
 }
diff --git a/lib/B/Deparse.t b/lib/B/Deparse.t
index f8da6460e8..156898652c 100644
--- a/lib/B/Deparse.t
+++ b/lib/B/Deparse.t
@@ -1029,7 +1029,7 @@ my $d = \[];
 given ('foo') {
     when ('bar') { continue; }
     when ($_ ~~ 'quux') { continue; }
-    default { 0; }
+    0;
 }
 ####
 # conditions in elsifs (regression in change #33710 which fixed bug #37302)
@@ -1514,9 +1514,7 @@ CORE::given ($x) {
     CORE::when (3) {
         continue;
     }
-    CORE::default {
-        CORE::break;
-    }
+    next;
 }
 CORE::evalbytes '';
 () = CORE::__SUB__;
@@ -1532,9 +1530,7 @@ CORE::given ($x) {
     CORE::when (3) {
         continue;
     }
-    CORE::default {
-        CORE::break;
-    }
+    next;
 }
 CORE::evalbytes '';
 () = CORE::__SUB__;
@@ -1545,9 +1541,7 @@ CORE::given ($x) {
     CORE::when (3) {
         continue;
     }
-    CORE::default {
-        CORE::break;
-    }
+    next;
 }
 CORE::evalbytes '';
 () = CORE::__SUB__;
@@ -1563,9 +1557,7 @@ CORE::given ($x) {
     CORE::when (3) {
         continue;
     }
-    CORE::default {
-        CORE::break;
-    }
+    next;
 }
 CORE::evalbytes '';
 () = CORE::__SUB__;
@@ -1578,9 +1570,7 @@ CORE::given ($x) {
     CORE::when (3) {
         continue;
     }
-    CORE::default {
-        CORE::break;
-    }
+    next;
 }
 CORE::evalbytes '';
 () = CORE::__SUB__;
@@ -1588,7 +1578,6 @@ 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;
@@ -1611,7 +1600,6 @@ my sub until;
 my sub use;
 my sub when;
 my sub while;
-CORE::default { die; }
 CORE::if ($1) { die; }
 CORE::if ($1) { die; }
 CORE::elsif ($1) { die; }
diff --git a/lib/B/Op_private.pm b/lib/B/Op_private.pm
index 37497af523..5df382a329 100644
--- a/lib/B/Op_private.pm
+++ b/lib/B/Op_private.pm
@@ -304,8 +304,6 @@ $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{enterwhen}{0} = $bf[0];
@@ -634,7 +632,6 @@ our %defines = (
     OPpHINT_STRICT_REFS      =>   2,
     OPpHUSH_VMSISH           =>  32,
     OPpINDEX_BOOLNEG         =>  64,
-    OPpITER_DEF              =>   8,
     OPpITER_REVERSED         =>   2,
     OPpKVSLICE               =>  32,
     OPpLIST_GUESSED          =>  64,
@@ -739,7 +736,6 @@ our %labels = (
     OPpHINT_STRICT_REFS      => 'STRICT',
     OPpHUSH_VMSISH           => 'HUSH',
     OPpINDEX_BOOLNEG         => 'NEG',
-    OPpITER_DEF              => 'DEF',
     OPpITER_REVERSED         => 'REVERSED',
     OPpKVSLICE               => 'KVSLICE',
     OPpLIST_GUESSED          => 'GUESSED',
@@ -816,7 +812,6 @@ 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)],
diff --git a/op.c b/op.c
index 6318f42e69..5879928cb1 100644
--- a/op.c
+++ b/op.c
@@ -8604,16 +8604,6 @@ 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 () */
@@ -8627,17 +8617,9 @@ 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) {
@@ -8766,56 +8748,6 @@ Perl_newLOOPEX(pTHX_ I32 type, OP *label)
     return o;
 }
 
-/* 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)
-{
-    dVAR;
-    LOGOP *enterop;
-    OP *o;
-
-    PERL_ARGS_ASSERT_NEWGIVWHENOP;
-
-    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;
-}
-
 /*
 =for apidoc Am|OP *|newGIVENOP|OP *cond|OP *block|PADOFFSET defsv_off
 
@@ -8831,11 +8763,28 @@ C<defsv_off> must be zero (it used to identity the pad 
slot of lexical $_).
 OP *
 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);
-    return newGIVWHENOP(cond, block, OP_ENTERGIVEN, OP_LEAVEGIVEN);
+
+    NewOpSz(1101, enterop, sizeof(LOOP));
+    OpTYPE_set(enterop, OP_ENTERGIVEN);
+    cLOOPx(enterop)->op_first = scalar(cond);
+    cLOOPx(enterop)->op_last = block;
+    OpMORESIB_set(cond, block);
+    OpLASTSIB_set(block, enterop);
+    enterop->op_flags = OPf_KIDS;
+
+    leaveop = newUNOP(OP_LEAVEGIVEN, 0, enterop);
+    leaveop->op_next = LINKLIST(cond);
+    cond->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;
 }
 
 /*
@@ -8844,8 +8793,7 @@ Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET 
defsv_off)
 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.  C<cond>
-may be null to generate a C<default> block.
+by this function and become part of the constructed op tree.
 
 =cut
 */
@@ -8853,8 +8801,24 @@ may be null to generate a C<default> block.
 OP *
 Perl_newWHENOP(pTHX_ OP *cond, OP *block)
 {
+    OP *enterop, *leaveop;
     PERL_ARGS_ASSERT_NEWWHENOP;
-    return newGIVWHENOP(cond, block, OP_ENTERWHEN, OP_LEAVEWHEN);
+
+    NewOpSz(1101, enterop, sizeof(LOGOP));
+    OpTYPE_set(enterop, OP_ENTERWHEN);
+    cLOGOPx(enterop)->op_first = scalar(cond);
+    OpMORESIB_set(cond, block);
+    OpLASTSIB_set(block, enterop);
+    enterop->op_flags = OPf_KIDS;
+
+    leaveop = newUNOP(OP_LEAVEWHEN, 0, enterop);
+    leaveop->op_next = LINKLIST(cond);
+    cond->op_next = enterop;
+    enterop = CHECKOP(OP_ENTERWHEN, enterop);
+    enterop->op_next = LINKLIST(block);
+    cLOGOPx(enterop)->op_other = block->op_next = leaveop;
+
+    return leaveop;
 }
 
 /* must not conflict with SVf_UTF8 */
@@ -15539,6 +15503,7 @@ 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 b954dcbd64..efafcf3057 100644
--- a/op.h
+++ b/op.h
@@ -129,8 +129,6 @@ 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_ANONHASH and OP_ANONLIST, create a
                                    reference to the new anon hash or array */
                                /*  On OP_HELEM, OP_MULTIDEREF and OP_HSLICE,
diff --git a/opcode.h b/opcode.h
index e1ba36bb52..08ce46fb35 100644
--- a/opcode.h
+++ b/opcode.h
@@ -367,7 +367,6 @@ EXTCONST char* const PL_op_name[] = {
        "leavegiven",
        "enterwhen",
        "leavewhen",
-       "break",
        "continue",
        "open",
        "close",
@@ -772,7 +771,6 @@ EXTCONST char* const PL_op_desc[] = {
        "leave given block",
        "when()",
        "leave when block",
-       "break",
        "continue",
        "open",
        "close",
@@ -1189,7 +1187,6 @@ EXT Perl_ppaddr_t PL_ppaddr[] /* or perlvars.h */
        Perl_pp_leavegiven,
        Perl_pp_enterwhen,
        Perl_pp_leavewhen,
-       Perl_pp_break,
        Perl_pp_continue,
        Perl_pp_open,
        Perl_pp_close,
@@ -1602,7 +1599,6 @@ EXT Perl_check_t PL_check[] /* or perlvars.h */
        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 */
@@ -2007,11 +2003,10 @@ EXTCONST U32 PL_opargs[] = {
        0x00000e40,     /* method_super */
        0x00000e40,     /* method_redir */
        0x00000e40,     /* method_redir_super */
-       0x00000340,     /* entergiven */
+       0x00000940,     /* entergiven */
        0x00000100,     /* leavegiven */
        0x00000340,     /* enterwhen */
        0x00000100,     /* leavewhen */
-       0x00000000,     /* break */
        0x00000000,     /* continue */
        0x0029640d,     /* open */
        0x0000eb04,     /* close */
@@ -2234,7 +2229,6 @@ 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
@@ -2350,7 +2344,6 @@ 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',
@@ -2440,14 +2433,14 @@ EXTCONST char PL_op_private_labels[] = {
 EXTCONST I16 PL_op_private_bitfields[] = {
     0, 8, -1,
     0, 8, -1,
-    0, 576, -1,
+    0, 572, -1,
     0, 8, -1,
     0, 8, -1,
-    0, 583, -1,
-    0, 572, -1,
-    1, -1, 0, 540, 1, 40, 2, 290, -1,
-    4, -1, 1, 171, 2, 178, 3, 185, -1,
-    4, -1, 0, 540, 1, 40, 2, 290, 3, 117, -1,
+    0, 579, -1,
+    0, 568, -1,
+    1, -1, 0, 536, 1, 40, 2, 286, -1,
+    4, -1, 1, 167, 2, 174, 3, 181, -1,
+    4, -1, 0, 536, 1, 40, 2, 286, 3, 117, -1,
 
 };
 
@@ -2658,28 +2651,27 @@ EXTCONST I16  PL_op_private_bitdef_ix[] = {
      178, /* leave */
       -1, /* scope */
      180, /* enteriter */
-     184, /* iter */
+     183, /* iter */
       -1, /* enterloop */
-     185, /* leaveloop */
+     184, /* leaveloop */
       -1, /* return */
-     187, /* last */
-     187, /* next */
-     187, /* redo */
-     187, /* dump */
-     187, /* goto */
+     186, /* last */
+     186, /* next */
+     186, /* redo */
+     186, /* dump */
+     186, /* goto */
       52, /* exit */
        0, /* method */
        0, /* method_named */
        0, /* method_super */
        0, /* method_redir */
        0, /* method_redir_super */
-       0, /* entergiven */
+      -1, /* entergiven */
        0, /* leavegiven */
        0, /* enterwhen */
        0, /* leavewhen */
-      -1, /* break */
       -1, /* continue */
-     189, /* open */
+     188, /* open */
       52, /* close */
       52, /* pipe_op */
       52, /* fileno */
@@ -2725,33 +2717,33 @@ EXTCONST I16  PL_op_private_bitdef_ix[] = {
        0, /* getpeername */
        0, /* lstat */
        0, /* stat */
-     194, /* ftrread */
-     194, /* ftrwrite */
-     194, /* ftrexec */
-     194, /* fteread */
-     194, /* ftewrite */
-     194, /* fteexec */
-     199, /* ftis */
-     199, /* ftsize */
-     199, /* ftmtime */
-     199, /* ftatime */
-     199, /* ftctime */
-     199, /* ftrowned */
-     199, /* fteowned */
-     199, /* ftzero */
-     199, /* ftsock */
-     199, /* ftchr */
-     199, /* ftblk */
-     199, /* ftfile */
-     199, /* ftdir */
-     199, /* ftpipe */
-     199, /* ftsuid */
-     199, /* ftsgid */
-     199, /* ftsvtx */
-     199, /* ftlink */
-     199, /* fttty */
-     199, /* fttext */
-     199, /* ftbinary */
+     193, /* ftrread */
+     193, /* ftrwrite */
+     193, /* ftrexec */
+     193, /* fteread */
+     193, /* ftewrite */
+     193, /* fteexec */
+     198, /* ftis */
+     198, /* ftsize */
+     198, /* ftmtime */
+     198, /* ftatime */
+     198, /* ftctime */
+     198, /* ftrowned */
+     198, /* fteowned */
+     198, /* ftzero */
+     198, /* ftsock */
+     198, /* ftchr */
+     198, /* ftblk */
+     198, /* ftfile */
+     198, /* ftdir */
+     198, /* ftpipe */
+     198, /* ftsuid */
+     198, /* ftsgid */
+     198, /* ftsvtx */
+     198, /* ftlink */
+     198, /* fttty */
+     198, /* fttext */
+     198, /* ftbinary */
       90, /* chdir */
       90, /* chown */
       75, /* chroot */
@@ -2771,17 +2763,17 @@ EXTCONST I16  PL_op_private_bitdef_ix[] = {
        0, /* rewinddir */
        0, /* closedir */
       -1, /* fork */
-     203, /* wait */
+     202, /* wait */
       90, /* waitpid */
       90, /* system */
       90, /* exec */
       90, /* kill */
-     203, /* getppid */
+     202, /* getppid */
       90, /* getpgrp */
       90, /* setpgrp */
       90, /* getpriority */
       90, /* setpriority */
-     203, /* time */
+     202, /* time */
       -1, /* tms */
        0, /* localtime */
       52, /* gmtime */
@@ -2801,7 +2793,7 @@ EXTCONST I16  PL_op_private_bitdef_ix[] = {
        0, /* require */
        0, /* dofile */
       -1, /* hintseval */
-     204, /* entereval */
+     203, /* entereval */
      171, /* leaveeval */
        0, /* entertry */
       -1, /* leavetry */
@@ -2840,18 +2832,18 @@ EXTCONST I16  PL_op_private_bitdef_ix[] = {
        0, /* lock */
        0, /* once */
       -1, /* custom */
-     210, /* coreargs */
-     214, /* avhvswitch */
+     209, /* coreargs */
+     213, /* avhvswitch */
        3, /* runcv */
        0, /* fc */
       -1, /* padcv */
       -1, /* introcv */
       -1, /* clonecv */
-     216, /* padrange */
-     218, /* refassign */
-     224, /* lvref */
-     230, /* lvrefslice */
-     231, /* lvavref */
+     215, /* padrange */
+     217, /* refassign */
+     223, /* lvref */
+     229, /* lvrefslice */
+     230, /* lvavref */
        0, /* anonconst */
 
 };
@@ -2871,75 +2863,75 @@ 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, 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, 0x4039, /* 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, 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 */
+    0x2ebc, 0x3fb9, /* pushmark */
     0x00bd, /* wantarray, runcv */
-    0x0578, 0x19b0, 0x40ec, 0x3ba8, 0x3385, /* const */
-    0x2f3c, 0x34d9, /* gvsv */
-    0x1815, /* gv */
+    0x0578, 0x1930, 0x406c, 0x3b28, 0x3305, /* const */
+    0x2ebc, 0x3459, /* gvsv */
+    0x1795, /* 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 */
-    0x2f3c, 0x4038, 0x03d7, /* padsv */
-    0x2f3c, 0x4038, 0x06f4, 0x302c, 0x3d29, /* padav */
-    0x2f3c, 0x4038, 0x06f4, 0x0790, 0x302c, 0x3d28, 0x2aa1, /* padhv */
-    0x2f3c, 0x1b98, 0x03d6, 0x302c, 0x32a8, 0x40e4, 0x0003, /* rv2gv */
-    0x2f3c, 0x34d8, 0x03d6, 0x40e4, 0x0003, /* rv2sv */
-    0x302c, 0x0003, /* av2arylen, akeys, values, keys */
-    0x321c, 0x0fd8, 0x0d34, 0x028c, 0x43e8, 0x40e4, 0x0003, /* rv2cv */
+    0x2ebc, 0x3fb8, 0x03d7, /* padsv */
+    0x2ebc, 0x3fb8, 0x06f4, 0x2fac, 0x3ca9, /* padav */
+    0x2ebc, 0x3fb8, 0x06f4, 0x0790, 0x2fac, 0x3ca8, 0x2a21, /* padhv */
+    0x2ebc, 0x1b18, 0x03d6, 0x2fac, 0x3228, 0x4064, 0x0003, /* rv2gv */
+    0x2ebc, 0x3458, 0x03d6, 0x4064, 0x0003, /* rv2sv */
+    0x2fac, 0x0003, /* av2arylen, akeys, values, keys */
+    0x319c, 0x0fd8, 0x0d34, 0x028c, 0x4368, 0x4064, 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 */
-    0x36bc, 0x35d8, 0x27f4, 0x2730, 0x0003, /* backtick */
+    0x363c, 0x3558, 0x2774, 0x26b0, 0x0003, /* backtick */
     0x06f5, /* subst */
-    0x10dc, 0x2118, 0x0914, 0x3e6c, 0x24a8, 0x01e4, 0x0141, /* trans, transr */
+    0x105c, 0x2098, 0x0914, 0x3dec, 0x2428, 0x01e4, 0x0141, /* trans, transr */
     0x0f1c, 0x0618, 0x0067, /* sassign */
-    0x0bd8, 0x0ad4, 0x09d0, 0x302c, 0x06e8, 0x0067, /* aassign */
-    0x4490, 0x0003, /* chomp, schomp, ncomplement, scomplement, sin, cos, exp, 
log, sqrt, int, hex, oct, abs, ord, chr, chroot, rmdir */
-    0x06f4, 0x302c, 0x0003, /* pos */
-    0x4490, 0x0067, /* pow, multiply, i_multiply, divide, i_divide, modulo, 
i_modulo, add, i_add, subtract, i_subtract, concat, left_shift, right_shift, 
nbit_and, nbit_xor, nbit_or */
-    0x1498, 0x0067, /* repeat */
-    0x2f3c, 0x0358, 0x1b94, 0x4490, 0x41cc, 0x0003, /* multiconcat */
-    0x4490, 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, 0x4490, 0x0003, /* length */
-    0x3910, 0x302c, 0x012b, /* substr */
-    0x302c, 0x0067, /* vec */
-    0x3198, 0x06f4, 0x4490, 0x018f, /* index, rindex */
-    0x2f3c, 0x34d8, 0x06f4, 0x302c, 0x3d28, 0x40e4, 0x0003, /* rv2av */
+    0x0bd8, 0x0ad4, 0x09d0, 0x2fac, 0x06e8, 0x0067, /* aassign */
+    0x4410, 0x0003, /* chomp, schomp, ncomplement, scomplement, sin, cos, exp, 
log, sqrt, int, hex, oct, abs, ord, chr, chroot, rmdir */
+    0x06f4, 0x2fac, 0x0003, /* pos */
+    0x4410, 0x0067, /* pow, multiply, i_multiply, divide, i_divide, modulo, 
i_modulo, add, i_add, subtract, i_subtract, concat, left_shift, right_shift, 
nbit_and, nbit_xor, nbit_or */
+    0x1418, 0x0067, /* repeat */
+    0x2ebc, 0x0358, 0x1b14, 0x4410, 0x414c, 0x0003, /* multiconcat */
+    0x4410, 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, 0x4410, 0x0003, /* length */
+    0x3890, 0x2fac, 0x012b, /* substr */
+    0x2fac, 0x0067, /* vec */
+    0x3118, 0x06f4, 0x4410, 0x018f, /* index, rindex */
+    0x2ebc, 0x3458, 0x06f4, 0x2fac, 0x3ca8, 0x4064, 0x0003, /* rv2av */
     0x025f, /* aelemfast, aelemfast_lex */
-    0x2f3c, 0x2e38, 0x03d6, 0x302c, 0x0067, /* aelem, helem */
-    0x2f3c, 0x302c, 0x3d29, /* aslice, hslice */
-    0x302d, /* kvaslice, kvhslice */
-    0x2f3c, 0x3c78, 0x2b54, 0x0003, /* delete */
-    0x4318, 0x0003, /* exists */
-    0x2f3c, 0x34d8, 0x06f4, 0x0790, 0x302c, 0x3d28, 0x40e4, 0x2aa1, /* rv2hv */
-    0x2f3c, 0x2e38, 0x1154, 0x1ab0, 0x302c, 0x40e4, 0x0003, /* multideref */
-    0x2f3c, 0x34d8, 0x0430, 0x2c4c, 0x2569, /* split */
-    0x2f3c, 0x21d9, /* list */
-    0x45fc, 0x3f58, 0x13f0, 0x288c, 0x3a08, 0x2984, 0x3441, /* sort */
-    0x288c, 0x0003, /* reverse */
+    0x2ebc, 0x2db8, 0x03d6, 0x2fac, 0x0067, /* aelem, helem */
+    0x2ebc, 0x2fac, 0x3ca9, /* aslice, hslice */
+    0x2fad, /* kvaslice, kvhslice */
+    0x2ebc, 0x3bf8, 0x2ad4, 0x0003, /* delete */
+    0x4298, 0x0003, /* exists */
+    0x2ebc, 0x3458, 0x06f4, 0x0790, 0x2fac, 0x3ca8, 0x4064, 0x2a21, /* rv2hv */
+    0x2ebc, 0x2db8, 0x10d4, 0x1a30, 0x2fac, 0x4064, 0x0003, /* multideref */
+    0x2ebc, 0x3458, 0x0430, 0x2bcc, 0x24e9, /* split */
+    0x2ebc, 0x2159, /* list */
+    0x457c, 0x3ed8, 0x1370, 0x280c, 0x3988, 0x2904, 0x33c1, /* sort */
+    0x280c, 0x0003, /* reverse */
     0x06f4, 0x0003, /* grepwhile */
-    0x2cd8, 0x0003, /* flip, flop */
-    0x2f3c, 0x0003, /* cond_expr */
-    0x2f3c, 0x0fd8, 0x03d6, 0x028c, 0x43e8, 0x40e4, 0x2641, /* entersub */
-    0x3778, 0x0003, /* leavesub, leavesublv, leavewrite, leaveeval */
+    0x2c58, 0x0003, /* flip, flop */
+    0x2ebc, 0x0003, /* cond_expr */
+    0x2ebc, 0x0fd8, 0x03d6, 0x028c, 0x4368, 0x4064, 0x25c1, /* entersub */
+    0x36f8, 0x0003, /* leavesub, leavesublv, leavewrite, leaveeval */
     0x02aa, 0x0003, /* argelem */
     0x00bc, 0x018f, /* caller */
-    0x23b5, /* nextstate, dbstate */
-    0x2ddc, 0x3779, /* leave */
-    0x2f3c, 0x34d8, 0x104c, 0x3a85, /* enteriter */
-    0x3a85, /* iter */
-    0x2ddc, 0x0067, /* leaveloop */
-    0x471c, 0x0003, /* last, next, redo, dump, goto */
-    0x36bc, 0x35d8, 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 */
-    0x4491, /* wait, getppid, time */
-    0x3814, 0x0df0, 0x084c, 0x4568, 0x22c4, 0x0003, /* entereval */
-    0x30fc, 0x0018, 0x1304, 0x1221, /* coreargs */
-    0x302c, 0x00c7, /* avhvswitch */
-    0x2f3c, 0x01fb, /* padrange */
-    0x2f3c, 0x4038, 0x04f6, 0x2a0c, 0x1908, 0x0067, /* refassign */
-    0x2f3c, 0x4038, 0x04f6, 0x2a0c, 0x1908, 0x0003, /* lvref */
-    0x2f3d, /* lvrefslice */
-    0x2f3c, 0x4038, 0x0003, /* lvavref */
+    0x2335, /* nextstate, dbstate */
+    0x2d5c, 0x36f9, /* leave */
+    0x2ebc, 0x3458, 0x3a05, /* enteriter */
+    0x3a05, /* iter */
+    0x2d5c, 0x0067, /* leaveloop */
+    0x469c, 0x0003, /* last, next, redo, dump, goto */
+    0x363c, 0x3558, 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 */
+    0x4411, /* wait, getppid, time */
+    0x3794, 0x0df0, 0x084c, 0x44e8, 0x2244, 0x0003, /* entereval */
+    0x307c, 0x0018, 0x1284, 0x11a1, /* coreargs */
+    0x2fac, 0x00c7, /* avhvswitch */
+    0x2ebc, 0x01fb, /* padrange */
+    0x2ebc, 0x3fb8, 0x04f6, 0x298c, 0x1888, 0x0067, /* refassign */
+    0x2ebc, 0x3fb8, 0x04f6, 0x298c, 0x1888, 0x0003, /* lvref */
+    0x2ebd, /* lvrefslice */
+    0x2ebc, 0x3fb8, 0x0003, /* lvavref */
 
 };
 
@@ -3149,7 +3141,7 @@ EXTCONST U8 PL_op_private_valid[] = {
     /* ENTER      */ (0),
     /* LEAVE      */ (OPpREFCOUNTED|OPpLVALUE),
     /* SCOPE      */ (0),
-    /* ENTERITER  */ (OPpITER_REVERSED|OPpITER_DEF|OPpOUR_INTRO|OPpLVAL_INTRO),
+    /* ENTERITER  */ (OPpITER_REVERSED|OPpOUR_INTRO|OPpLVAL_INTRO),
     /* ITER       */ (OPpITER_REVERSED),
     /* ENTERLOOP  */ (0),
     /* LEAVELOOP  */ (OPpARG2_MASK|OPpLVALUE),
@@ -3165,11 +3157,10 @@ EXTCONST U8 PL_op_private_valid[] = {
     /* METHOD_SUPER */ (OPpARG1_MASK),
     /* METHOD_REDIR */ (OPpARG1_MASK),
     /* METHOD_REDIR_SUPER */ (OPpARG1_MASK),
-    /* ENTERGIVEN */ (OPpARG1_MASK),
+    /* ENTERGIVEN */ (0),
     /* 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),
diff --git a/opnames.h b/opnames.h
index d87ba88f01..ed4155eeeb 100644
--- a/opnames.h
+++ b/opnames.h
@@ -235,186 +235,185 @@ typedef enum opcode {
        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,
... 5625 lines suppressed ...

-- 
Perl5 Master Repository

Reply via email to