This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add coreargs op
authorFather Chrysostomos <sprout@cpan.org>
Wed, 17 Aug 2011 01:02:33 +0000 (18:02 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Thu, 18 Aug 2011 13:50:04 +0000 (06:50 -0700)
&CORE::foo subs will use this operator for sorting out @_.

ext/Opcode/Opcode.pm
opcode.h
opnames.h
pp.c
pp_proto.h
regen/opcodes

index b79256e..deec0bf 100644 (file)
@@ -6,7 +6,7 @@ use strict;
 
 our($VERSION, @ISA, @EXPORT_OK);
 
-$VERSION = "1.19";
+$VERSION = "1.20";
 
 use Carp;
 use Exporter ();
@@ -335,7 +335,7 @@ invert_opset function.
 
     warn die lineseq nextstate scope enter leave
 
-    rv2cv anoncode prototype
+    rv2cv anoncode prototype coreargs
 
     entersub leavesub leavesublv return method method_named -- XXX loops via recursion?
 
index 73c81dd..0ce4140 100644 (file)
--- a/opcode.h
+++ b/opcode.h
@@ -517,6 +517,7 @@ EXTCONST char* const PL_op_name[] = {
        "reach",
        "rkeys",
        "rvalues",
+       "coreargs",
 };
 #endif
 
@@ -895,6 +896,7 @@ EXTCONST char* const PL_op_desc[] = {
        "each on reference",
        "keys on reference",
        "values on reference",
+       "CORE:: subroutine",
 };
 #endif
 
@@ -1287,6 +1289,7 @@ EXT Perl_ppaddr_t PL_ppaddr[] /* or perlvars.h */
        Perl_pp_reach,  /* implemented by Perl_pp_rkeys */
        Perl_pp_rkeys,
        Perl_pp_rvalues,        /* implemented by Perl_pp_rkeys */
+       Perl_pp_coreargs,
 }
 #endif
 #ifdef PERL_PPADDR_INITED
@@ -1676,6 +1679,7 @@ EXT Perl_check_t PL_check[] /* or perlvars.h */
        Perl_ck_each,           /* reach */
        Perl_ck_each,           /* rkeys */
        Perl_ck_each,           /* rvalues */
+       Perl_ck_null,           /* coreargs */
 }
 #endif
 #ifdef PERL_CHECK_INITED
@@ -2059,6 +2063,7 @@ EXTCONST U32 PL_opargs[] = {
        0x00001b00,     /* reach */
        0x00001b08,     /* rkeys */
        0x00001b08,     /* rvalues */
+       0x00000600,     /* coreargs */
 };
 #endif
 
index 1e7ac3c..0bb9d81 100644 (file)
--- a/opnames.h
+++ b/opnames.h
@@ -385,10 +385,11 @@ typedef enum opcode {
        OP_REACH         = 368,
        OP_RKEYS         = 369,
        OP_RVALUES       = 370,
+       OP_COREARGS      = 371,
        OP_max          
 } opcode;
 
-#define MAXO 371
+#define MAXO 372
 
 /* the OP_IS_(SOCKET|FILETEST) macros are optimized to a simple range
     check because all the member OPs are contiguous in opcode.pl
diff --git a/pp.c b/pp.c
index 3421d97..b1520ba 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -5963,6 +5963,13 @@ PP(pp_boolkeys)
     RETURN;
 }
 
+/* For sorting out arguments passed to a &CORE:: subroutine */
+PP(pp_coreargs)
+{
+    dSP;
+    RETURN;
+}
+
 /*
  * Local variables:
  * c-indentation-style: bsd
index 2b01d6b..5e19fc3 100644 (file)
@@ -42,6 +42,7 @@ PERL_CALLCONV OP *Perl_pp_concat(pTHX);
 PERL_CALLCONV OP *Perl_pp_cond_expr(pTHX);
 PERL_CALLCONV OP *Perl_pp_const(pTHX);
 PERL_CALLCONV OP *Perl_pp_continue(pTHX);
+PERL_CALLCONV OP *Perl_pp_coreargs(pTHX);
 PERL_CALLCONV OP *Perl_pp_crypt(pTHX);
 PERL_CALLCONV OP *Perl_pp_dbmopen(pTHX);
 PERL_CALLCONV OP *Perl_pp_dbstate(pTHX);
index ec9c5a7..c9c6984 100644 (file)
@@ -539,3 +539,6 @@ custom              unknown custom operator         ck_null         0
 reach          each on reference                       ck_each         %       S
 rkeys          keys on reference                       ck_each         t%      S
 rvalues                values on reference                     ck_each         t%      S
+
+# For CORE:: subs
+coreargs       CORE:: subroutine       ck_null         $