diff options
author | Father Chrysostomos <sprout@cpan.org> | 2011-08-18 22:19:25 -0700 |
---|---|---|
committer | Father Chrysostomos <sprout@cpan.org> | 2011-08-24 23:38:27 -0700 |
commit | c2f605db621edfb16309200bbba8ced984d34476 (patch) | |
tree | cff01a54d0de63402bdd6d7644d45e67f76d9992 | |
parent | 1e4b6aa1907f271ce023ffe6f03439e2ce7f65dc (diff) | |
download | perl-c2f605db621edfb16309200bbba8ced984d34476.tar.gz |
Simplify the CORE::__FOO__ op-generation code
It just happens that the (caller)[...] offsets for file and line are
the same as the keyword numbers. KEY___PACKAGE__ is 3 and (caller)[0]
returns the package, so keyword_number % 3 can be used for the offset
instead of an unwieldy switch block.
-rw-r--r-- | keywords.c | 2 | ||||
-rw-r--r-- | keywords.h | 2 | ||||
-rw-r--r-- | op.c | 13 | ||||
-rwxr-xr-x | regen/keywords.pl | 4 |
4 files changed, 9 insertions, 12 deletions
diff --git a/keywords.c b/keywords.c index d442b325e8..b9ef465967 100644 --- a/keywords.c +++ b/keywords.c @@ -3399,5 +3399,5 @@ unknown: } /* Generated from: - * 34be1269b3c67c86c758c60794ddba6eadc528e0435f954d514c14a2f1c73a2e regen/keywords.pl + * 6563b55da87af894b79ef9d777217633eee6c7b5f352ff4c17317f562247f5fc regen/keywords.pl * ex: set ro: */ diff --git a/keywords.h b/keywords.h index 4631b671e0..83ad0efb56 100644 --- a/keywords.h +++ b/keywords.h @@ -268,5 +268,5 @@ #define KEY_y 252 /* Generated from: - * 34be1269b3c67c86c758c60794ddba6eadc528e0435f954d514c14a2f1c73a2e regen/keywords.pl + * 6563b55da87af894b79ef9d777217633eee6c7b5f352ff4c17317f562247f5fc regen/keywords.pl * ex: set ro: */ @@ -10336,20 +10336,13 @@ Perl_coresub_op(pTHX_ SV * const coreargssv, const int code, switch(opnum) { case 0: - { - IV index = 0; - switch(-code) { - case KEY___FILE__ : index = 1; break; - case KEY___LINE__ : index = 2; break; - } - return op_append_elem(OP_LINESEQ, + return op_append_elem(OP_LINESEQ, argop, newSLICEOP(0, - newSVOP(OP_CONST, 0, newSViv(index)), + newSVOP(OP_CONST, 0, newSViv(-code % 3)), newOP(OP_CALLER,0) ) - ); - } + ); default: switch (PL_opargs[opnum] & OA_CLASS_MASK) { case OA_BASEOP: diff --git a/regen/keywords.pl b/regen/keywords.pl index b2860504d5..5f7f1ef851 100755 --- a/regen/keywords.pl +++ b/regen/keywords.pl @@ -101,6 +101,10 @@ END read_only_bottom_close_and_rename($_, [$0]) foreach $c, $h; + +# coresub_op in op.c expects __FILE__, __LINE__ and __PACKAGE__ to be the +# first three. + __END__ NULL |