3 # Regenerate (overwriting only if changed):
5 # keywords.h keywords.c
7 # from information stored in the DATA section of this file.
9 # Accepts the standard regen_lib -q and -v args.
12 use Devel::Tokenizer::C 0.05;
14 require 'regen/regen_lib.pl';
16 my $h = open_new('keywords.h', '>',
17 { by => 'regen/keywords.pl', from => 'its data',
18 file => 'keywords.h', style => '*',
19 copyright => [1994 .. 1997, 1999 .. 2002, 2005 .. 2007]});
20 my $c = open_new('keywords.c', '>',
21 { by => 'regen/keywords.pl', from => 'its data', style => '*'});
30 my ($strength, $keyword) = /^([- +])([A-Z_a-z2]+)/;
31 die "Bad line '$_'" unless defined $strength;
32 print $h tab(5, "#define KEY_$keyword"), $keynum++, "\n";
33 push @{$by_strength{$strength}}, $keyword;
36 # If this hash changes, make sure the equivalent hash in
37 # dist/B-Deparse/Deparse.pm is also updated.
42 # continue is already a keyword
49 evalbytes=>'evalbytes',
54 my %pos = map { ($_ => 1) } @{$by_strength{'+'}};
56 my $t = Devel::Tokenizer::C->new(TokenFunc => \&perl_keyword,
57 TokenString => 'name',
58 StringLength => 'len',
62 $t->add_tokens(@{$by_strength{'+'}}, @{$by_strength{'-'}}, 'elseif');
64 my $switch = $t->generate(Indent => ' ');
68 #define PERL_IN_KEYWORDS_C
73 Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords)
77 PERL_ARGS_ASSERT_KEYWORD;
88 my $sign = $pos{$k} ? '' : '-';
92 Perl_ck_warner_d(aTHX_ packWARN(WARN_SYNTAX), "elseif should be elsif");
95 elsif (my $feature = $feature_kw{$k}) {
96 $feature =~ s/([\\"])/\\$1/g;
98 return (all_keywords || FEATURE_IS_ENABLED("$feature") ? ${sign}KEY_$k : 0);
102 return ${sign}KEY_$k;
106 read_only_bottom_close_and_rename($_, [$0]) foreach $c, $h;
109 # coresub_op in op.c expects __FILE__, __LINE__ and __PACKAGE__ to be the