remove useless "break" mechanism
authorZefram <zefram@fysh.org>
Wed, 29 Nov 2017 20:19:20 +0000 (20:19 +0000)
committerZefram <zefram@fysh.org>
Wed, 29 Nov 2017 20:19:20 +0000 (20:19 +0000)
22 files changed:
ext/Opcode/Opcode.pm
ext/Pod-Functions/Functions_pm.PL
ext/Pod-Functions/t/Functions.t
keywords.c
keywords.h
lib/B/Deparse-core.t
lib/B/Deparse.pm
lib/B/Deparse.t
opcode.h
opnames.h
pod/perldiag.pod
pod/perlfunc.pod
pod/perlsyn.pod
pp_ctl.c
pp_proto.h
regen/keywords.pl
regen/opcodes
t/lib/feature/switch
t/op/coreamp.t
t/op/cproto.t
t/op/switch.t
toke.c

index 01c495d..9ebaa56 100644 (file)
@@ -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
index eb8369a..bd0e3da 100644 (file)
@@ -207,7 +207,7 @@ L<perlfunc/"Perl Functions by Category"> section.
 
 =cut
 
-our $VERSION = '1.11';
+our $VERSION = '1.12';
 
 require Exporter;
 
index 2beccc1..2330114 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__, break, caller,
+     __FILE__, __LINE__, __PACKAGE__, __SUB__, caller,
      continue, die, do, dump, eval, evalbytes, exit, goto,
      last, next, redo, return, sub, wantarray
 
index e68e9f5..1576d4a 100644 (file)
@@ -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])
           {
@@ -3417,5 +3401,5 @@ unknown:
 }
 
 /* Generated from:
- * 1e6a65fdd2e2d8aec28927cb9cbfed6e8a33ba077f0114b420746a04b0df8792 regen/keywords.pl
+ * 50664fad65e719c51bf369702163eb7ade79f997461f928cc20f1e1bcf8369b8 regen/keywords.pl
  * ex: set ro: */
index f82df6a..cd4ecb3 100644 (file)
 #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_defined            40
-#define KEY_delete             41
-#define KEY_die                        42
-#define KEY_do                 43
-#define KEY_dump               44
-#define KEY_each               45
-#define KEY_else               46
-#define KEY_elsif              47
-#define KEY_endgrent           48
-#define KEY_endhostent         49
-#define KEY_endnetent          50
-#define KEY_endprotoent                51
-#define KEY_endpwent           52
-#define KEY_endservent         53
-#define KEY_eof                        54
-#define KEY_eq                 55
-#define KEY_eval               56
-#define KEY_evalbytes          57
-#define KEY_exec               58
-#define KEY_exists             59
-#define KEY_exit               60
-#define KEY_exp                        61
-#define KEY_fc                 62
-#define KEY_fcntl              63
-#define KEY_fileno             64
-#define KEY_flock              65
-#define KEY_for                        66
-#define KEY_foreach            67
-#define KEY_fork               68
-#define KEY_format             69
-#define KEY_formline           70
-#define KEY_ge                 71
-#define KEY_getc               72
-#define KEY_getgrent           73
-#define KEY_getgrgid           74
-#define KEY_getgrnam           75
-#define KEY_gethostbyaddr      76
-#define KEY_gethostbyname      77
-#define KEY_gethostent         78
-#define KEY_getlogin           79
-#define KEY_getnetbyaddr       80
-#define KEY_getnetbyname       81
-#define KEY_getnetent          82
-#define KEY_getpeername                83
-#define KEY_getpgrp            84
-#define KEY_getppid            85
-#define KEY_getpriority                86
-#define KEY_getprotobyname     87
-#define KEY_getprotobynumber   88
-#define KEY_getprotoent                89
-#define KEY_getpwent           90
-#define KEY_getpwnam           91
-#define KEY_getpwuid           92
-#define KEY_getservbyname      93
-#define KEY_getservbyport      94
-#define KEY_getservent         95
-#define KEY_getsockname                96
-#define KEY_getsockopt         97
-#define KEY_given              98
-#define KEY_glob               99
-#define KEY_gmtime             100
-#define KEY_goto               101
-#define KEY_grep               102
-#define KEY_gt                 103
-#define KEY_hex                        104
-#define KEY_if                 105
-#define KEY_index              106
-#define KEY_int                        107
-#define KEY_ioctl              108
-#define KEY_join               109
-#define KEY_keys               110
-#define KEY_kill               111
-#define KEY_last               112
-#define KEY_lc                 113
-#define KEY_lcfirst            114
-#define KEY_le                 115
-#define KEY_length             116
-#define KEY_link               117
-#define KEY_listen             118
-#define KEY_local              119
-#define KEY_localtime          120
-#define KEY_lock               121
-#define KEY_log                        122
-#define KEY_lstat              123
-#define KEY_lt                 124
-#define KEY_m                  125
-#define KEY_map                        126
-#define KEY_mkdir              127
-#define KEY_msgctl             128
-#define KEY_msgget             129
-#define KEY_msgrcv             130
-#define KEY_msgsnd             131
-#define KEY_my                 132
-#define KEY_ne                 133
-#define KEY_next               134
-#define KEY_no                 135
-#define KEY_not                        136
-#define KEY_oct                        137
-#define KEY_open               138
-#define KEY_opendir            139
-#define KEY_or                 140
-#define KEY_ord                        141
-#define KEY_our                        142
-#define KEY_pack               143
-#define KEY_package            144
-#define KEY_pipe               145
-#define KEY_pop                        146
-#define KEY_pos                        147
-#define KEY_print              148
-#define KEY_printf             149
-#define KEY_prototype          150
-#define KEY_push               151
-#define KEY_q                  152
-#define KEY_qq                 153
-#define KEY_qr                 154
-#define KEY_quotemeta          155
-#define KEY_qw                 156
-#define KEY_qx                 157
-#define KEY_rand               158
-#define KEY_read               159
-#define KEY_readdir            160
-#define KEY_readline           161
-#define KEY_readlink           162
-#define KEY_readpipe           163
-#define KEY_recv               164
-#define KEY_redo               165
-#define KEY_ref                        166
-#define KEY_rename             167
-#define KEY_require            168
-#define KEY_reset              169
-#define KEY_return             170
-#define KEY_reverse            171
-#define KEY_rewinddir          172
-#define KEY_rindex             173
-#define KEY_rmdir              174
-#define KEY_s                  175
-#define KEY_say                        176
-#define KEY_scalar             177
-#define KEY_seek               178
-#define KEY_seekdir            179
-#define KEY_select             180
-#define KEY_semctl             181
-#define KEY_semget             182
-#define KEY_semop              183
-#define KEY_send               184
-#define KEY_setgrent           185
-#define KEY_sethostent         186
-#define KEY_setnetent          187
-#define KEY_setpgrp            188
-#define KEY_setpriority                189
-#define KEY_setprotoent                190
-#define KEY_setpwent           191
-#define KEY_setservent         192
-#define KEY_setsockopt         193
-#define KEY_shift              194
-#define KEY_shmctl             195
-#define KEY_shmget             196
-#define KEY_shmread            197
-#define KEY_shmwrite           198
-#define KEY_shutdown           199
-#define KEY_sin                        200
-#define KEY_sleep              201
-#define KEY_socket             202
-#define KEY_socketpair         203
-#define KEY_sort               204
-#define KEY_splice             205
-#define KEY_split              206
-#define KEY_sprintf            207
-#define KEY_sqrt               208
-#define KEY_srand              209
-#define KEY_stat               210
-#define KEY_state              211
-#define KEY_study              212
-#define KEY_sub                        213
-#define KEY_substr             214
-#define KEY_symlink            215
-#define KEY_syscall            216
-#define KEY_sysopen            217
-#define KEY_sysread            218
-#define KEY_sysseek            219
-#define KEY_system             220
-#define KEY_syswrite           221
-#define KEY_tell               222
-#define KEY_telldir            223
-#define KEY_tie                        224
-#define KEY_tied               225
-#define KEY_time               226
-#define KEY_times              227
-#define KEY_tr                 228
-#define KEY_truncate           229
-#define KEY_uc                 230
-#define KEY_ucfirst            231
-#define KEY_umask              232
-#define KEY_undef              233
-#define KEY_unless             234
-#define KEY_unlink             235
-#define KEY_unpack             236
-#define KEY_unshift            237
-#define KEY_untie              238
-#define KEY_until              239
-#define KEY_use                        240
-#define KEY_utime              241
-#define KEY_values             242
-#define KEY_vec                        243
-#define KEY_wait               244
-#define KEY_waitpid            245
-#define KEY_wantarray          246
-#define KEY_warn               247
-#define KEY_when               248
-#define KEY_while              249
-#define KEY_write              250
-#define KEY_x                  251
-#define KEY_xor                        252
-#define KEY_y                  253
+#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:
- * 1e6a65fdd2e2d8aec28927cb9cbfed6e8a33ba077f0114b420746a04b0df8792 regen/keywords.pl
+ * 50664fad65e719c51bf369702163eb7ade79f997461f928cc20f1e1bcf8369b8 regen/keywords.pl
  * ex: set ro: */
index 2ed797a..01a9b18 100644 (file)
@@ -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
index 6823ebc..02ea4bc 100644 (file)
@@ -2247,7 +2247,6 @@ my %feature_keywords = (
     say     => 'say',
     given   => 'switch',
     when    => 'switch',
-    break   => 'switch',
     evalbytes=>'evalbytes',
     __SUB__ => '__SUB__',
    fc       => 'fc',
@@ -2539,7 +2538,6 @@ 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;
index 6589700..1568986 100644 (file)
@@ -1514,7 +1514,7 @@ CORE::given ($x) {
     CORE::when (3) {
         continue;
     }
-    CORE::break;
+    next;
 }
 CORE::evalbytes '';
 () = CORE::__SUB__;
@@ -1530,7 +1530,7 @@ CORE::given ($x) {
     CORE::when (3) {
         continue;
     }
-    CORE::break;
+    next;
 }
 CORE::evalbytes '';
 () = CORE::__SUB__;
@@ -1541,7 +1541,7 @@ CORE::given ($x) {
     CORE::when (3) {
         continue;
     }
-    CORE::break;
+    next;
 }
 CORE::evalbytes '';
 () = CORE::__SUB__;
@@ -1557,7 +1557,7 @@ CORE::given ($x) {
     CORE::when (3) {
         continue;
     }
-    CORE::break;
+    next;
 }
 CORE::evalbytes '';
 () = CORE::__SUB__;
@@ -1570,7 +1570,7 @@ CORE::given ($x) {
     CORE::when (3) {
         continue;
     }
-    CORE::break;
+    next;
 }
 CORE::evalbytes '';
 () = CORE::__SUB__;
index 06b75cd..6e42af0 100644 (file)
--- 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 */
@@ -2011,7 +2007,6 @@ EXTCONST U32 PL_opargs[] = {
        0x00000100,     /* leavegiven */
        0x00000340,     /* enterwhen */
        0x00000100,     /* leavewhen */
-       0x00000000,     /* break */
        0x00000000,     /* continue */
        0x0029640d,     /* open */
        0x0000eb04,     /* close */
@@ -2677,7 +2672,6 @@ EXTCONST I16  PL_op_private_bitdef_ix[] = {
        0, /* leavegiven */
        0, /* enterwhen */
        0, /* leavewhen */
-      -1, /* break */
       -1, /* continue */
      189, /* open */
       52, /* close */
@@ -3169,7 +3163,6 @@ EXTCONST U8 PL_op_private_valid[] = {
     /* 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 d87ba88..ed4155e 100644 (file)
--- 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,
-       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_CONTINUE      = 221,
+       OP_OPEN          = 222,
+       OP_CLOSE         = 223,
+       OP_PIPE_OP       = 224,
+       OP_FILENO        = 225,
+       OP_UMASK         = 226,
+       OP_BINMODE       = 227,
+       OP_TIE           = 228,
+       OP_UNTIE         = 229,
+       OP_TIED          = 230,
+       OP_DBMOPEN       = 231,
+       OP_DBMCLOSE      = 232,
+       OP_SSELECT       = 233,
+       OP_SELECT        = 234,
+       OP_GETC          = 235,
+       OP_READ          = 236,
+       OP_ENTERWRITE    = 237,
+       OP_LEAVEWRITE    = 238,
+       OP_PRTF          = 239,
+       OP_PRINT         = 240,
+       OP_SAY           = 241,
+       OP_SYSOPEN       = 242,
+       OP_SYSSEEK       = 243,
+       OP_SYSREAD       = 244,
+       OP_SYSWRITE      = 245,
+       OP_EOF           = 246,
+       OP_TELL          = 247,
+       OP_SEEK          = 248,
+       OP_TRUNCATE      = 249,
+       OP_FCNTL         = 250,
+       OP_IOCTL         = 251,
+       OP_FLOCK         = 252,
+       OP_SEND          = 253,
+       OP_RECV          = 254,
+       OP_SOCKET        = 255,
+       OP_SOCKPAIR      = 256,
+       OP_BIND          = 257,
+       OP_CONNECT       = 258,
+       OP_LISTEN        = 259,
+       OP_ACCEPT        = 260,
+       OP_SHUTDOWN      = 261,
+       OP_GSOCKOPT      = 262,
+       OP_SSOCKOPT      = 263,
+       OP_GETSOCKNAME   = 264,
+       OP_GETPEERNAME   = 265,
+       OP_LSTAT         = 266,
+       OP_STAT          = 267,
+       OP_FTRREAD       = 268,
+       OP_FTRWRITE      = 269,
+       OP_FTREXEC       = 270,
+       OP_FTEREAD       = 271,
+       OP_FTEWRITE      = 272,
+       OP_FTEEXEC       = 273,
+       OP_FTIS          = 274,
+       OP_FTSIZE        = 275,
+       OP_FTMTIME       = 276,
+       OP_FTATIME       = 277,
+       OP_FTCTIME       = 278,
+       OP_FTROWNED      = 279,
+       OP_FTEOWNED      = 280,
+       OP_FTZERO        = 281,
+       OP_FTSOCK        = 282,
+       OP_FTCHR         = 283,
+       OP_FTBLK         = 284,
+       OP_FTFILE        = 285,
+       OP_FTDIR         = 286,
+       OP_FTPIPE        = 287,
+       OP_FTSUID        = 288,
+       OP_FTSGID        = 289,
+       OP_FTSVTX        = 290,
+       OP_FTLINK        = 291,
+       OP_FTTTY         = 292,
+       OP_FTTEXT        = 293,
+       OP_FTBINARY      = 294,
+       OP_CHDIR         = 295,
+       OP_CHOWN         = 296,
+       OP_CHROOT        = 297,
+       OP_UNLINK        = 298,
+       OP_CHMOD         = 299,
+       OP_UTIME         = 300,
+       OP_RENAME        = 301,
+       OP_LINK          = 302,
+       OP_SYMLINK       = 303,
+       OP_READLINK      = 304,
+       OP_MKDIR         = 305,
+       OP_RMDIR         = 306,
+       OP_OPEN_DIR      = 307,
+       OP_READDIR       = 308,
+       OP_TELLDIR       = 309,
+       OP_SEEKDIR       = 310,
+       OP_REWINDDIR     = 311,
+       OP_CLOSEDIR      = 312,
+       OP_FORK          = 313,
+       OP_WAIT          = 314,
+       OP_WAITPID       = 315,
+       OP_SYSTEM        = 316,
+       OP_EXEC          = 317,
+       OP_KILL          = 318,
+       OP_GETPPID       = 319,
+       OP_GETPGRP       = 320,
+       OP_SETPGRP       = 321,
+       OP_GETPRIORITY   = 322,
+       OP_SETPRIORITY   = 323,
+       OP_TIME          = 324,
+       OP_TMS           = 325,
+       OP_LOCALTIME     = 326,
+       OP_GMTIME        = 327,
+       OP_ALARM         = 328,
+       OP_SLEEP         = 329,
+       OP_SHMGET        = 330,
+       OP_SHMCTL        = 331,
+       OP_SHMREAD       = 332,
+       OP_SHMWRITE      = 333,
+       OP_MSGGET        = 334,
+       OP_MSGCTL        = 335,
+       OP_MSGSND        = 336,
+       OP_MSGRCV        = 337,
+       OP_SEMOP         = 338,
+       OP_SEMGET        = 339,
+       OP_SEMCTL        = 340,
+       OP_REQUIRE       = 341,
+       OP_DOFILE        = 342,
+       OP_HINTSEVAL     = 343,
+       OP_ENTEREVAL     = 344,
+       OP_LEAVEEVAL     = 345,
+       OP_ENTERTRY      = 346,
+       OP_LEAVETRY      = 347,
+       OP_GHBYNAME      = 348,
+       OP_GHBYADDR      = 349,
+       OP_GHOSTENT      = 350,
+       OP_GNBYNAME      = 351,
+       OP_GNBYADDR      = 352,
+       OP_GNETENT       = 353,
+       OP_GPBYNAME      = 354,
+       OP_GPBYNUMBER    = 355,
+       OP_GPROTOENT     = 356,
+       OP_GSBYNAME      = 357,
+       OP_GSBYPORT      = 358,
+       OP_GSERVENT      = 359,
+       OP_SHOSTENT      = 360,
+       OP_SNETENT       = 361,
+       OP_SPROTOENT     = 362,
+       OP_SSERVENT      = 363,
+       OP_EHOSTENT      = 364,
+       OP_ENETENT       = 365,
+       OP_EPROTOENT     = 366,
+       OP_ESERVENT      = 367,
+       OP_GPWNAM        = 368,
+       OP_GPWUID        = 369,
+       OP_GPWENT        = 370,
+       OP_SPWENT        = 371,
+       OP_EPWENT        = 372,
+       OP_GGRNAM        = 373,
+       OP_GGRGID        = 374,
+       OP_GGRENT        = 375,
+       OP_SGRENT        = 376,
+       OP_EGRENT        = 377,
+       OP_GETLOGIN      = 378,
+       OP_SYSCALL       = 379,
+       OP_LOCK          = 380,
+       OP_ONCE          = 381,
+       OP_CUSTOM        = 382,
+       OP_COREARGS      = 383,
+       OP_AVHVSWITCH    = 384,
+       OP_RUNCV         = 385,
+       OP_FC            = 386,
+       OP_PADCV         = 387,
+       OP_INTROCV       = 388,
+       OP_CLONECV       = 389,
+       OP_PADRANGE      = 390,
+       OP_REFASSIGN     = 391,
+       OP_LVREF         = 392,
+       OP_LVREFSLICE    = 393,
+       OP_LVAVREF       = 394,
+       OP_ANONCONST     = 395,
        OP_max          
 } opcode;
 
-#define MAXO 397
+#define MAXO 396
 #define OP_FREED MAXO
 
 /* the OP_IS_* macros are optimized to a simple range check because
index 84ddac4..a9a503e 100644 (file)
@@ -759,15 +759,6 @@ to compress something else.  See L<perlfunc/pack>.
 (F) Only hard references may be blessed.  This is how Perl "enforces"
 encapsulation of objects.  See L<perlobj>.
 
-=item Can't "break" in a loop topicalizer
-
-(F) You called C<break>, but you're in a C<foreach> block rather than
-a C<given> block.  You probably meant to use C<next> or C<last>.
-
-=item Can't "break" outside a given block
-
-(F) You called C<break>, but you're not inside a C<given> block.
-
 =item Can't call method "%s" on an undefined value
 
 (F) You used the syntax of a method call, but the slot filled by the
index 727a6cd..d55bf2e 100644 (file)
@@ -255,7 +255,7 @@ X<control flow>
 
 =for Pod::Functions =Flow
 
-L<C<break>|/break>, L<C<caller>|/caller EXPR>,
+L<C<caller>|/caller EXPR>,
 L<C<continue>|/continue BLOCK>, L<C<die>|/die LIST>, L<C<do>|/do BLOCK>,
 L<C<dump>|/dump LABEL>, L<C<eval>|/eval EXPR>,
 L<C<evalbytes>|/evalbytes EXPR>, L<C<exit>|/exit EXPR>,
@@ -266,16 +266,9 @@ L<C<redo>|/redo LABEL>, L<C<return>|/return EXPR>,
 L<C<sub>|/sub NAME BLOCK>, L<C<__SUB__>|/__SUB__>,
 L<C<wantarray>|/wantarray>
 
-L<C<break>|/break> is available only if you enable the experimental
-L<C<"switch"> feature|feature/The 'switch' feature> or use the C<CORE::>
-prefix.  The L<C<"switch"> feature|feature/The 'switch' feature> also
-enables the C<given> and C<when> statements, which are
-documented in L<perlsyn/"Switch Statements">.
-The L<C<"switch"> feature|feature/The 'switch' feature> is enabled
-automatically with a C<use v5.10> (or higher) declaration in the current
-scope.  In Perl v5.14 and earlier, L<C<continue>|/continue BLOCK>
-required the L<C<"switch"> feature|feature/The 'switch' feature>, like
-the other keywords.
+In Perl v5.14 and earlier, L<C<continue>|/continue BLOCK>
+required the L<C<"switch"> feature|feature/The 'switch' feature> to
+be enabled.
 
 L<C<evalbytes>|/evalbytes EXPR> is only available with the
 L<C<"evalbytes"> feature|feature/The 'unicode_eval' and 'evalbytes' features>
@@ -908,21 +901,6 @@ that CLASSNAME is a true value.
 
 See L<perlmod/"Perl Modules">.
 
-=item break
-
-=for Pod::Functions +switch break out of a C<given> block
-
-Break out of a C<given> block.  Will signal an error if there is a
-closer C<foreach> block.  The search is for the closest dynamically
-enclosing topicalizer.
-
-L<C<break>|/break> is available only if the
-L<C<"switch"> feature|feature/The 'switch' feature> is enabled or if it
-is prefixed with C<CORE::>. The
-L<C<"switch"> feature|feature/The 'switch' feature> is enabled
-automatically with a C<use v5.10> (or higher) declaration in the current
-scope.
-
 =item caller EXPR
 X<caller> X<call stack> X<stack> X<stack trace>
 
index 480b352..9febd72 100644 (file)
@@ -620,8 +620,8 @@ example:
 
     use v5.14;
 
-Under the "switch" feature, Perl gains the experimental keywords C<given>,
-C<when>, and C<break>.  Starting from Perl 5.16, one can
+Under the "switch" feature, Perl gains the experimental keywords C<given>
+and C<when>.  Starting from Perl 5.16, one can
 prefix the switch keywords with C<CORE::> to access the feature without
 a C<use feature> statement.
 
@@ -676,12 +676,6 @@ less punctuation as
         $nothing = 1;
     }
 
-You can use the C<break> keyword to break out of the dynamically enclosing
-topicalizer, if it's a C<given> block.  This resembles the jump to the end
-of the topicalizer that implicitly happens at the end of every C<when>
-block, except that the explicit C<break> can only break
-out of a C<given> topicalizer, not a C<foreach>.
-
 You can use the C<continue> keyword to exit a C<when>
 block, proceeding to the following statement.  This is most commonly
 done last thing inside the block, to override the implicit jump to the
@@ -701,8 +695,7 @@ so providing the subroutine's return value, it evaluates to:
 
 =item *
 
-An empty list as soon as an explicit C<break>, C<next>, or C<last>
-is encountered.
+An empty list as soon as an explicit C<next> or C<last> is encountered.
 
 =item *
 
index de7ac58..37ffb0e 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -4739,29 +4739,6 @@ PP(pp_continue)
     return nextop;
 }
 
-PP(pp_break)
-{
-    I32 cxix;
-    PERL_CONTEXT *cx;
-
-    cxix = dopoptogivenfor(cxstack_ix);
-    if (cxix < 0)
-       DIE(aTHX_ "Can't \"break\" outside a given block");
-
-    cx = &cxstack[cxix];
-    if (CxFOREACH(cx))
-       DIE(aTHX_ "Can't \"break\" in a loop topicalizer");
-
-    if (cxix < cxstack_ix)
-        dounwind(cxix);
-
-    /* Restore the sp at the time we entered the given block */
-    cx = CX_CUR();
-    PL_stack_sp = PL_stack_base + cx->blk_oldsp;
-
-    return cx->blk_loop.my_op->op_nextop;
-}
-
 static MAGIC *
 S_doparseform(pTHX_ SV *sv)
 {
index 407cbd1..34fa56d 100644 (file)
@@ -32,7 +32,6 @@ PERL_CALLCONV OP *Perl_pp_binmode(pTHX);
 PERL_CALLCONV OP *Perl_pp_bit_and(pTHX);
 PERL_CALLCONV OP *Perl_pp_bit_or(pTHX);
 PERL_CALLCONV OP *Perl_pp_bless(pTHX);
-PERL_CALLCONV OP *Perl_pp_break(pTHX);
 PERL_CALLCONV OP *Perl_pp_caller(pTHX);
 PERL_CALLCONV OP *Perl_pp_chdir(pTHX);
 PERL_CALLCONV OP *Perl_pp_chop(pTHX);
index 1ee1f29..e7aecf0 100755 (executable)
@@ -41,7 +41,6 @@ my %feature_kw = (
     given     => 'switch',
     when      => 'switch',
     # continue is already a keyword
-    break     => 'switch',
     evalbytes => 'evalbytes',
     __SUB__   => '__SUB__',
     fc        => 'fc',
@@ -128,7 +127,6 @@ __END__
 -bind
 -binmode
 -bless
--break
 -caller
 -chdir
 -chmod
index b60eda0..037ac89 100644 (file)
@@ -332,7 +332,6 @@ entergiven  given()                 ck_null         d{
 leavegiven     leave given block       ck_null         1
 enterwhen      when()                  ck_null         d|
 leavewhen      leave when block        ck_null         1
-break          break                   ck_null         0
 continue       continue                ck_null         0
 
 # I/O.
index 0d3fab2..7d0bfd5 100644 (file)
@@ -16,13 +16,6 @@ EXPECT
 Unquoted string "when" may clash with future reserved word at - line 3.
 when
 ########
-# No switch; break should be a bareword.
-use warnings; no warnings 'experimental::smartmatch';
-print STDOUT break;
-EXPECT
-Unquoted string "break" may clash with future reserved word at - line 3.
-break
-########
 # No switch; but continue is still a keyword
 print STDOUT continue;
 EXPECT
@@ -40,12 +33,6 @@ given(1) { when(1) { print "okay" } }
 EXPECT
 okay
 ########
-# Use switch; so break is a keyword
-use feature 'switch';
-break;
-EXPECT
-Can't "break" outside a given block at - line 3.
-########
 # switch out of scope; given should be a bareword.
 use warnings; no warnings 'experimental::smartmatch';
 { use feature 'switch';
@@ -68,16 +55,6 @@ Unquoted string "when" may clash with future reserved word at - line 6.
 Okay here
 when
 ########
-# switch out of scope; break should be a bareword.
-use warnings; no warnings 'experimental::smartmatch';
-{ use feature 'switch';
-  given (1) { break }  
-}
-print STDOUT break;
-EXPECT
-Unquoted string "break" may clash with future reserved word at - line 6.
-break
-########
 # C<no feature 'switch'> should work
 use warnings; no warnings 'experimental::smartmatch';
 use feature 'switch';
@@ -99,20 +76,3 @@ EXPECT
 Unquoted string "when" may clash with future reserved word at - line 6.
 Okay here
 when
-########
-# Without the feature, no 'Unambiguous use of' warning:
-use warnings; no warnings 'experimental::smartmatch';
-@break = ($break = "break");
-print ${break}, ${break[0]};
-EXPECT
-breakbreak
-########
-# With the feature, we get an 'Unambiguous use of' warning:
-use warnings; no warnings 'experimental::smartmatch';
-use feature 'switch';
-@break = ($break = "break");
-print ${break}, ${break[0]};
-EXPECT
-Ambiguous use of ${break} resolved to $break at - line 5.
-Ambiguous use of ${break[...]} resolved to $break[...] at - line 5.
-breakbreak
index 277ac10..c553a51 100644 (file)
@@ -370,18 +370,6 @@ like join(" ", &CORE::bless([],'parcel')),
      qr/^parcel=ARRAY(?!.* )/, "&bless in list context";
 like &mybless([]), qr/^main=ARRAY/, '&bless with one arg';
 
-test_proto 'break';
-{ $tests ++;
-  my $tmp;
-  CORE::given(1) {
-    CORE::when(1) {
-      &mybreak;
-      $tmp = 'bad';
-    }
-  }
-  is $tmp, undef, '&break';
-}
-
 test_proto 'caller';
 $tests += 4;
 sub caller_test {
index 66425db..711d253 100644 (file)
@@ -7,7 +7,7 @@ BEGIN {
     set_up_inc('../lib');
 }
 
-plan tests => 253;
+plan tests => 252;
 
 while (<DATA>) {
     chomp;
@@ -51,7 +51,6 @@ atan2 ($$)
 bind (*$)
 binmode (*;$)
 bless ($;$)
-break ()
 caller (;$)
 chdir (;$)
 chmod (@)
index 5fdda90..0b5761b 100644 (file)
@@ -10,7 +10,7 @@ use strict;
 use warnings;
 no warnings 'experimental::smartmatch';
 
-plan tests => 164;
+plan tests => 161;
 
 # The behaviour of the feature pragma should be tested by lib/feature.t
 # using the tests in t/lib/feature/*. This file tests the behaviour of
@@ -29,9 +29,6 @@ use feature 'switch';
 eval { continue };
 like($@, qr/^Can't "continue" outside/, "continue outside");
 
-eval { break };
-like($@, qr/^Can't "break" outside/, "break outside");
-
 # Scoping rules
 
 {
@@ -590,14 +587,10 @@ my $f = tie my $v, "FetchCounter";
     for (1, "two") {
        when ($_ eq "two") {
            is($first, 0, "Loop: second");
-           eval {break};
-           like($@, qr/^Can't "break" in a loop topicalizer/,
-               q{Can't "break" in a loop topicalizer});
        }
        when ($_ == 1) {
            is($first, 1, "Loop: first");
            $first = 0;
-           # Implicit break is okay
        }
     }
 }
@@ -607,14 +600,10 @@ my $f = tie my $v, "FetchCounter";
     for $_ (1, "two") {
        when ($_ eq "two") {
            is($first, 0, "Explicit \$_: second");
-           eval {break};
-           like($@, qr/^Can't "break" in a loop topicalizer/,
-               q{Can't "break" in a loop topicalizer});
        }
        when ($_ == 1) {
            is($first, 1, "Explicit \$_: first");
            $first = 0;
-           # Implicit break is okay
        }
     }
 }
@@ -709,7 +698,7 @@ sub contains_x {
        do { $ok = 1; continue } when /pea/;
        $ok += 2;
        $ok = 0 when /pie/;
-       $ok += 4; break;
+       $ok += 4; next;
        $ok = 0;
     }
     is($ok, 7, "postfix regex");
@@ -762,7 +751,7 @@ is($letter, "a,c,e,", "next LABEL in when");
     goto GIVEN1;
     $flag = 1;
     GIVEN1: given ($flag) {
-       when ($_ == 0) { break; }
+       when ($_ == 0) { next; }
        $flag = 2;
     }
     is($flag, 0, "goto GIVEN1");
@@ -800,7 +789,7 @@ GIVEN4:
 GIVEN5:
     given ($flag) {
        when ($_ == 0) { $flag = 1; goto GIVEN5; $flag = 2; }
-       when ($_ == 1) { break; }
+       when ($_ == 1) { next; }
        $flag = 3;
     }
     is($flag, 1, "goto inside given and when to the given stmt");
@@ -893,7 +882,7 @@ GIVEN5:
     F: for (0, 1, 2, 3) {
        my @list = do { given ($_) {
            continue when $_ <= 1;
-           break    when $_ == 1;
+           next     when $_ == 1;
            next F   when $_ == 2;
            6, 7;
        } };
@@ -1041,7 +1030,7 @@ GIVEN5:
 
     my @descriptions = qw<
        when
-       break
+       next
        continue
        default
     >;
@@ -1057,7 +1046,7 @@ GIVEN5:
                given ($id) {
                    my $x;
                    when ($_ == 0) { Fmurrr->new($destroyed, 0) }
-                   when ($_ == 1) { my $y = Fmurrr->new($destroyed, 1); break }
+                   when ($_ == 1) { my $y = Fmurrr->new($destroyed, 1); next }
                    when ($_ == 2) { $x = Fmurrr->new($destroyed, 2); continue }
                    when ($_ == 2) { $x }
                    Fmurrr->new($destroyed, 3);
@@ -1065,25 +1054,25 @@ GIVEN5:
            };
            $res_id = $res->{id};
        }
-       $res_id = $id if $id == 1; # break doesn't return anything
+       $res_id = $id if $id == 1; # next doesn't return anything
 
        is $res_id,    $id, "given/when returns the right object - $desc";
        is $destroyed, 1,   "given/when does not leak - $desc";
     };
 }
 
-# break() must reset the stack
+# next() must reset the stack
 {
     my @res = (1, do {
        given ("x") {
            2, 3, do {
                when (/[a-z]/) {
-                   4, 5, 6, break
+                   4, 5, 6, next
                }
            }
        }
     });
-    is "@res", "1", "break resets the stack";
+    is "@res", "1", "next resets the stack";
 }
 
 # RT #94682:
diff --git a/toke.c b/toke.c
index 0967512..8b87058 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -7782,9 +7782,6 @@ Perl_yylex(pTHX)
        case KEY_bless:
            LOP(OP_BLESS,XTERM);
 
-       case KEY_break:
-           FUN0(OP_BREAK);
-
        case KEY_chop:
            UNI(OP_CHOP);