File Coverage

blib/lib/Language/P/Keywords.pm
Criterion Covered Total %
statement 18 19 94.7
branch n/a
condition n/a
subroutine 7 8 87.5
pod 0 4 0.0
total 25 31 80.6


line stmt bran cond sub pod time code
1             package Language::P::Keywords;
2              
3 101     101   597 use Exporter 'import';
  101         180  
  101         13918  
4              
5             our( @KEYWORDS, @BUILTINS, @OVERRIDABLES );
6             BEGIN {
7 101     101   560 our @KEYWORDS = qw(KEY_IF KEY_UNLESS KEY_ELSE KEY_ELSIF KEY_FOR KEY_FOREACH KEY_WHILE KEY_UNTIL KEY_CONTINUE KEY_DO OP_LAST OP_NEXT OP_REDO OP_GOTO OP_MY OP_OUR OP_STATE KEY_LOCAL KEY_SUB KEY_PACKAGE);
8 101         338 our @BUILTINS = qw(KEY_EVAL KEY_PRINT KEY_DEFINED KEY_RETURN KEY_UNDEF KEY_MAP KEY_GREP);
9 101         14040 our @OVERRIDABLES = qw(KEY_UNLINK KEY_GLOB KEY_READLINE KEY_DIE KEY_OPEN KEY_PIPE KEY_CHDIR KEY_RMDIR KEY_READLINE KEY_CLOSE KEY_BINMODE KEY_ABS KEY_WANTARRAY);
10             };
11              
12             our @EXPORT = ( @KEYWORDS, @BUILTINS, @OVERRIDABLES,
13             qw(@KEYWORDS @BUILTINS @OVERRIDABLES),
14             qw(is_keyword is_builtin is_overridable is_id)
15             );
16             our %EXPORT_TAGS =
17             ( all => \@EXPORT,
18             constants => [ @KEYWORDS, @BUILTINS, @OVERRIDABLES ],
19             );
20              
21             use constant +
22 101         25143 { ID_MASK => 0x00003, # 2
23             KEYWORD_MASK => 0x0007c, # 5
24             BUILTIN_MASK => 0x00f80, # 5
25             OVERRIDABLE_MASK => 0x1f000, # 5
26 101     101   605 };
  101         172  
27              
28             use constant +
29 2020         4440 { ( map { $KEYWORDS[$_] => ( $_ + 1 ) << 2 } 0 .. $#KEYWORDS ),
  707         1514  
30 1313         94064 ( map { $BUILTINS[$_] => ( $_ + 1 ) << 7 } 0 .. $#BUILTINS ),
31 101         522 ( map { $OVERRIDABLES[$_] => ( $_ + 1 ) << 12 } 0 .. $#OVERRIDABLES ),
32 101     101   695 };
  101         218  
33              
34 467     467 0 2533 sub is_keyword($) { $_[0] & KEYWORD_MASK }
35 176     176 0 568 sub is_builtin($) { $_[0] & BUILTIN_MASK }
36 183     183 0 890 sub is_overridable($) { $_[0] & OVERRIDABLE_MASK }
37 0     0 0   sub is_id($) { $_[0] & ID_MASK }
38              
39             our %KEYWORDS =
40             (
41             'unlink' => KEY_UNLINK,
42             'print' => KEY_PRINT,
43             'eval' => KEY_EVAL,
44             'else' => KEY_ELSE,
45             'until' => KEY_UNTIL,
46             'elsif' => KEY_ELSIF,
47             'unless' => KEY_UNLESS,
48             'sub' => KEY_SUB,
49             'glob' => KEY_GLOB,
50             'grep' => KEY_GREP,
51             'rmdir' => KEY_RMDIR,
52             'next' => OP_NEXT,
53             'abs' => KEY_ABS,
54             'binmode' => KEY_BINMODE,
55             'chdir' => KEY_CHDIR,
56             'my' => OP_MY,
57             'last' => OP_LAST,
58             'close' => KEY_CLOSE,
59             'defined' => KEY_DEFINED,
60             'goto' => OP_GOTO,
61             'die' => KEY_DIE,
62             'pipe' => KEY_PIPE,
63             'readline' => KEY_READLINE,
64             'local' => KEY_LOCAL,
65             'foreach' => KEY_FOREACH,
66             'open' => KEY_OPEN,
67             'map' => KEY_MAP,
68             'our' => OP_OUR,
69             'do' => KEY_DO,
70             'return' => KEY_RETURN,
71             'state' => OP_STATE,
72             'undef' => KEY_UNDEF,
73             'redo' => OP_REDO,
74             'wantarray' => KEY_WANTARRAY,
75             'package' => KEY_PACKAGE,
76             'while' => KEY_WHILE,
77             'continue' => KEY_CONTINUE,
78             'for' => KEY_FOR,
79             'if' => KEY_IF,
80             );
81              
82             1;