summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gv.c2
-rw-r--r--keywords.c14
-rw-r--r--keywords.h493
-rw-r--r--op.c4
-rw-r--r--pp.c2
-rwxr-xr-xregen/keywords.pl1
-rw-r--r--t/op/lexsub.t5
-rw-r--r--toke.c11
8 files changed, 262 insertions, 270 deletions
diff --git a/gv.c b/gv.c
index 136bada431..1c86029d84 100644
--- a/gv.c
+++ b/gv.c
@@ -463,7 +463,7 @@ S_maybe_add_coresub(pTHX_ HV * const stash, GV *gv,
/* no support for \&CORE::infix;
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_CORE :
+ case KEY_BEGIN : case KEY_CHECK : case KEY_cmp:
case KEY_default : case KEY_DESTROY:
case KEY_do : case KEY_dump : case KEY_else : case KEY_elsif :
case KEY_END : case KEY_eq : case KEY_eval :
diff --git a/keywords.c b/keywords.c
index 23d550df83..cd8a99ea2e 100644
--- a/keywords.c
+++ b/keywords.c
@@ -490,19 +490,9 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords)
goto unknown;
}
- case 4: /* 41 tokens of length 4 */
+ case 4: /* 40 tokens of length 4 */
switch (name[0])
{
- case 'C':
- if (name[1] == 'O' &&
- name[2] == 'R' &&
- name[3] == 'E')
- { /* CORE */
- return -KEY_CORE;
- }
-
- goto unknown;
-
case 'I':
if (name[1] == 'N' &&
name[2] == 'I' &&
@@ -3449,5 +3439,5 @@ unknown:
}
/* Generated from:
- * e5a540774760ea54c761ef17ee4a153cc264e9a700b817d561e390730c457406 regen/keywords.pl
+ * 7c6d47fd2890b2422a40331ec90eac08f9808209b01f2b9c113141410fea91b5 regen/keywords.pl
* ex: set ro: */
diff --git a/keywords.h b/keywords.h
index 5ebde874ff..f23896c410 100644
--- a/keywords.h
+++ b/keywords.h
@@ -23,253 +23,252 @@
#define KEY_AUTOLOAD 7
#define KEY_BEGIN 8
#define KEY_UNITCHECK 9
-#define KEY_CORE 10
-#define KEY_DESTROY 11
-#define KEY_END 12
-#define KEY_INIT 13
-#define KEY_CHECK 14
-#define KEY_abs 15
-#define KEY_accept 16
-#define KEY_alarm 17
-#define KEY_and 18
-#define KEY_atan2 19
-#define KEY_bind 20
-#define KEY_binmode 21
-#define KEY_bless 22
-#define KEY_break 23
-#define KEY_caller 24
-#define KEY_chdir 25
-#define KEY_chmod 26
-#define KEY_chomp 27
-#define KEY_chop 28
-#define KEY_chown 29
-#define KEY_chr 30
-#define KEY_chroot 31
-#define KEY_close 32
-#define KEY_closedir 33
-#define KEY_cmp 34
-#define KEY_connect 35
-#define KEY_continue 36
-#define KEY_cos 37
-#define KEY_crypt 38
-#define KEY_dbmclose 39
-#define KEY_dbmopen 40
-#define KEY_default 41
-#define KEY_defined 42
-#define KEY_delete 43
-#define KEY_die 44
-#define KEY_do 45
-#define KEY_dump 46
-#define KEY_each 47
-#define KEY_else 48
-#define KEY_elsif 49
-#define KEY_endgrent 50
-#define KEY_endhostent 51
-#define KEY_endnetent 52
-#define KEY_endprotoent 53
-#define KEY_endpwent 54
-#define KEY_endservent 55
-#define KEY_eof 56
-#define KEY_eq 57
-#define KEY_eval 58
-#define KEY_evalbytes 59
-#define KEY_exec 60
-#define KEY_exists 61
-#define KEY_exit 62
-#define KEY_exp 63
-#define KEY_fc 64
-#define KEY_fcntl 65
-#define KEY_fileno 66
-#define KEY_flock 67
-#define KEY_for 68
-#define KEY_foreach 69
-#define KEY_fork 70
-#define KEY_format 71
-#define KEY_formline 72
-#define KEY_ge 73
-#define KEY_getc 74
-#define KEY_getgrent 75
-#define KEY_getgrgid 76
-#define KEY_getgrnam 77
-#define KEY_gethostbyaddr 78
-#define KEY_gethostbyname 79
-#define KEY_gethostent 80
-#define KEY_getlogin 81
-#define KEY_getnetbyaddr 82
-#define KEY_getnetbyname 83
-#define KEY_getnetent 84
-#define KEY_getpeername 85
-#define KEY_getpgrp 86
-#define KEY_getppid 87
-#define KEY_getpriority 88
-#define KEY_getprotobyname 89
-#define KEY_getprotobynumber 90
-#define KEY_getprotoent 91
-#define KEY_getpwent 92
-#define KEY_getpwnam 93
-#define KEY_getpwuid 94
-#define KEY_getservbyname 95
-#define KEY_getservbyport 96
-#define KEY_getservent 97
-#define KEY_getsockname 98
-#define KEY_getsockopt 99
-#define KEY_given 100
-#define KEY_glob 101
-#define KEY_gmtime 102
-#define KEY_goto 103
-#define KEY_grep 104
-#define KEY_gt 105
-#define KEY_hex 106
-#define KEY_if 107
-#define KEY_index 108
-#define KEY_int 109
-#define KEY_ioctl 110
-#define KEY_join 111
-#define KEY_keys 112
-#define KEY_kill 113
-#define KEY_last 114
-#define KEY_lc 115
-#define KEY_lcfirst 116
-#define KEY_le 117
-#define KEY_length 118
-#define KEY_link 119
-#define KEY_listen 120
-#define KEY_local 121
-#define KEY_localtime 122
-#define KEY_lock 123
-#define KEY_log 124
-#define KEY_lstat 125
-#define KEY_lt 126
-#define KEY_m 127
-#define KEY_map 128
-#define KEY_mkdir 129
-#define KEY_msgctl 130
-#define KEY_msgget 131
-#define KEY_msgrcv 132
-#define KEY_msgsnd 133
-#define KEY_my 134
-#define KEY_ne 135
-#define KEY_next 136
-#define KEY_no 137
-#define KEY_not 138
-#define KEY_oct 139
-#define KEY_open 140
-#define KEY_opendir 141
-#define KEY_or 142
-#define KEY_ord 143
-#define KEY_our 144
-#define KEY_pack 145
-#define KEY_package 146
-#define KEY_pipe 147
-#define KEY_pop 148
-#define KEY_pos 149
-#define KEY_print 150
-#define KEY_printf 151
-#define KEY_prototype 152
-#define KEY_push 153
-#define KEY_q 154
-#define KEY_qq 155
-#define KEY_qr 156
-#define KEY_quotemeta 157
-#define KEY_qw 158
-#define KEY_qx 159
-#define KEY_rand 160
-#define KEY_read 161
-#define KEY_readdir 162
-#define KEY_readline 163
-#define KEY_readlink 164
-#define KEY_readpipe 165
-#define KEY_recv 166
-#define KEY_redo 167
-#define KEY_ref 168
-#define KEY_rename 169
-#define KEY_require 170
-#define KEY_reset 171
-#define KEY_return 172
-#define KEY_reverse 173
-#define KEY_rewinddir 174
-#define KEY_rindex 175
-#define KEY_rmdir 176
-#define KEY_s 177
-#define KEY_say 178
-#define KEY_scalar 179
-#define KEY_seek 180
-#define KEY_seekdir 181
-#define KEY_select 182
-#define KEY_semctl 183
-#define KEY_semget 184
-#define KEY_semop 185
-#define KEY_send 186
-#define KEY_setgrent 187
-#define KEY_sethostent 188
-#define KEY_setnetent 189
-#define KEY_setpgrp 190
-#define KEY_setpriority 191
-#define KEY_setprotoent 192
-#define KEY_setpwent 193
-#define KEY_setservent 194
-#define KEY_setsockopt 195
-#define KEY_shift 196
-#define KEY_shmctl 197
-#define KEY_shmget 198
-#define KEY_shmread 199
-#define KEY_shmwrite 200
-#define KEY_shutdown 201
-#define KEY_sin 202
-#define KEY_sleep 203
-#define KEY_socket 204
-#define KEY_socketpair 205
-#define KEY_sort 206
-#define KEY_splice 207
-#define KEY_split 208
-#define KEY_sprintf 209
-#define KEY_sqrt 210
-#define KEY_srand 211
-#define KEY_stat 212
-#define KEY_state 213
-#define KEY_study 214
-#define KEY_sub 215
-#define KEY_substr 216
-#define KEY_symlink 217
-#define KEY_syscall 218
-#define KEY_sysopen 219
-#define KEY_sysread 220
-#define KEY_sysseek 221
-#define KEY_system 222
-#define KEY_syswrite 223
-#define KEY_tell 224
-#define KEY_telldir 225
-#define KEY_tie 226
-#define KEY_tied 227
-#define KEY_time 228
-#define KEY_times 229
-#define KEY_tr 230
-#define KEY_truncate 231
-#define KEY_uc 232
-#define KEY_ucfirst 233
-#define KEY_umask 234
-#define KEY_undef 235
-#define KEY_unless 236
-#define KEY_unlink 237
-#define KEY_unpack 238
-#define KEY_unshift 239
-#define KEY_untie 240
-#define KEY_until 241
-#define KEY_use 242
-#define KEY_utime 243
-#define KEY_values 244
-#define KEY_vec 245
-#define KEY_wait 246
-#define KEY_waitpid 247
-#define KEY_wantarray 248
-#define KEY_warn 249
-#define KEY_when 250
-#define KEY_while 251
-#define KEY_write 252
-#define KEY_x 253
-#define KEY_xor 254
-#define KEY_y 255
+#define KEY_DESTROY 10
+#define KEY_END 11
+#define KEY_INIT 12
+#define KEY_CHECK 13
+#define KEY_abs 14
+#define KEY_accept 15
+#define KEY_alarm 16
+#define KEY_and 17
+#define KEY_atan2 18
+#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
/* Generated from:
- * e5a540774760ea54c761ef17ee4a153cc264e9a700b817d561e390730c457406 regen/keywords.pl
+ * 7c6d47fd2890b2422a40331ec90eac08f9808209b01f2b9c113141410fea91b5 regen/keywords.pl
* ex: set ro: */
diff --git a/op.c b/op.c
index fcefa23f86..dc0a4e3c42 100644
--- a/op.c
+++ b/op.c
@@ -11881,7 +11881,7 @@ Perl_custom_op_register(pTHX_ Perl_ppaddr_t ppaddr, const XOP *xop)
This function assigns the prototype of the named core function to C<sv>, or
to a new mortal SV if C<sv> is NULL. It returns the modified C<sv>, or
NULL if the core function has no prototype. C<code> is a code as returned
-by C<keyword()>. It must not be equal to 0 or -KEY_CORE.
+by C<keyword()>. It must not be equal to 0.
=cut
*/
@@ -11898,7 +11898,7 @@ Perl_core_prototype(pTHX_ SV *sv, const char *name, const int code,
PERL_ARGS_ASSERT_CORE_PROTOTYPE;
- assert (code && code != -KEY_CORE);
+ assert (code);
if (!sv) sv = sv_newmortal();
diff --git a/pp.c b/pp.c
index d090069cd0..a6ab24d317 100644
--- a/pp.c
+++ b/pp.c
@@ -493,7 +493,7 @@ PP(pp_prototype)
const char * s = SvPVX_const(TOPs);
if (strnEQ(s, "CORE::", 6)) {
const int code = keyword(s + 6, SvCUR(TOPs) - 6, 1);
- if (!code || code == -KEY_CORE)
+ if (!code)
DIE(aTHX_ "Can't find an opnumber for \"%"UTF8f"\"",
UTF8fARG(SvFLAGS(TOPs) & SVf_UTF8, SvCUR(TOPs)-6, s+6));
{
diff --git a/regen/keywords.pl b/regen/keywords.pl
index b783d08f77..bbc4188491 100755
--- a/regen/keywords.pl
+++ b/regen/keywords.pl
@@ -124,7 +124,6 @@ __END__
+AUTOLOAD
+BEGIN
+UNITCHECK
--CORE
+DESTROY
+END
+INIT
diff --git a/t/op/lexsub.t b/t/op/lexsub.t
index 0be305b0a0..07bfce542c 100644
--- a/t/op/lexsub.t
+++ b/t/op/lexsub.t
@@ -8,7 +8,7 @@ BEGIN {
*bar::like = *like;
}
no warnings 'deprecated';
-plan 139;
+plan 140;
# -------------------- Errors with feature disabled -------------------- #
@@ -284,6 +284,9 @@ sub make_anon_with_state_sub{
state sub END { shift }
is eval{END('jkqeudth')}, jkqeudth,
'state sub END {shift} implies @_, not @ARGV';
+ state sub CORE { scalar reverse shift }
+ is CORE::uc("hello"), "HELLO",
+ 'lexical CORE does not interfere with CORE::...';
}
{
state sub redef {}
diff --git a/toke.c b/toke.c
index 1b26d437d2..d7de0dbfdf 100644
--- a/toke.c
+++ b/toke.c
@@ -7004,8 +7004,10 @@ Perl_yylex(pTHX)
anydelim = word_takes_any_delimeter(PL_tokenbuf, len);
/* x::* is just a word, unless x is "CORE" */
- if (!anydelim && *s == ':' && s[1] == ':' && strNE(PL_tokenbuf, "CORE"))
+ if (!anydelim && *s == ':' && s[1] == ':') {
+ if (strEQ(PL_tokenbuf, "CORE")) goto case_KEY_CORE;
goto just_a_word;
+ }
d = s;
while (d < PL_bufend && isSPACE(*d))
@@ -7144,7 +7146,7 @@ Perl_yylex(pTHX)
}
gv = NULL;
gvp = 0;
- if (hgv && tmp != KEY_x && tmp != KEY_CORE) /* never ambiguous */
+ if (hgv && tmp != KEY_x) /* never ambiguous */
Perl_ck_warner(aTHX_ packWARN(WARN_AMBIGUOUS),
"Ambiguous call resolved as CORE::%s(), "
"qualify as such or use &",
@@ -7750,8 +7752,8 @@ Perl_yylex(pTHX)
}
goto just_a_word;
- case KEY_CORE:
- if (*s == ':' && s[1] == ':') {
+ case_KEY_CORE:
+ {
STRLEN olen = len;
d = s;
s += 2;
@@ -7775,7 +7777,6 @@ Perl_yylex(pTHX)
orig_keyword = tmp;
goto reserved_word;
}
- goto just_a_word;
case KEY_abs:
UNI(OP_ABS);