This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add lvrefslice op type
authorFather Chrysostomos <sprout@cpan.org>
Fri, 26 Sep 2014 05:08:15 +0000 (22:08 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Sat, 11 Oct 2014 04:57:01 +0000 (21:57 -0700)
ext/Opcode/Opcode.pm
opcode.h
opnames.h
pp.c
pp_proto.h
regen/opcodes

index 71b60df..6f6987c 100644 (file)
@@ -402,7 +402,7 @@ These are a hotchpotch of opcodes still waiting to be considered
 
     once
 
-    rv2gv refgen srefgen ref refassign lvref
+    rv2gv refgen srefgen ref refassign lvref lvrefslice
 
     bless -- could be used to change ownership of objects
             (reblessing)
index 88c6e8a..545f4de 100644 (file)
--- a/opcode.h
+++ b/opcode.h
@@ -529,6 +529,7 @@ EXTCONST char* const PL_op_name[] = {
        "padrange",
        "refassign",
        "lvref",
+       "lvrefslice",
        "freed",
 };
 #endif
@@ -918,6 +919,7 @@ EXTCONST char* const PL_op_desc[] = {
        "list of private variables",
        "lvalue ref assignment",
        "lvalue ref assignment",
+       "lvalue ref assignment",
        "freed op",
 };
 #endif
@@ -1321,6 +1323,7 @@ EXT Perl_ppaddr_t PL_ppaddr[] /* or perlvars.h */
        Perl_pp_padrange,
        Perl_pp_refassign,
        Perl_pp_lvref,
+       Perl_pp_lvrefslice,
 }
 #endif
 #ifdef PERL_PPADDR_INITED
@@ -1720,6 +1723,7 @@ EXT Perl_check_t PL_check[] /* or perlvars.h */
        Perl_ck_null,           /* padrange */
        Perl_ck_refassign,      /* refassign */
        Perl_ck_null,           /* lvref */
+       Perl_ck_null,           /* lvrefslice */
 }
 #endif
 #ifdef PERL_CHECK_INITED
@@ -2113,6 +2117,7 @@ EXTCONST U32 PL_opargs[] = {
        0x00000040,     /* padrange */
        0x00000240,     /* refassign */
        0x00000140,     /* lvref */
+       0x00000440,     /* lvrefslice */
 };
 #endif
 
@@ -2724,6 +2729,7 @@ EXTCONST I16  PL_op_private_bitdef_ix[] = {
      630, /* padrange */
      632, /* refassign */
      635, /* lvref */
+      -1, /* lvrefslice */
 
 };
 
@@ -3473,6 +3479,7 @@ EXTCONST U8 PL_op_private_valid[] = {
     /* PADRANGE   */ (OPpPADRANGE_COUNTMASK|OPpLVAL_INTRO),
     /* REFASSIGN  */ (OPpARG2_MASK|OPpLVREF_ELEM|OPpLVAL_INTRO),
     /* LVREF      */ (OPpARG1_MASK|OPpLVREF_ELEM|OPpLVAL_INTRO),
+    /* LVREFSLICE */ (0),
 
 };
 
index 5125e16..3a9be48 100644 (file)
--- a/opnames.h
+++ b/opnames.h
@@ -395,10 +395,11 @@ typedef enum opcode {
        OP_PADRANGE      = 378,
        OP_REFASSIGN     = 379,
        OP_LVREF         = 380,
+       OP_LVREFSLICE    = 381,
        OP_max          
 } opcode;
 
-#define MAXO 381
+#define MAXO 382
 #define OP_FREED MAXO
 
 /* the OP_IS_* macros are optimized to a simple range check because
diff --git a/pp.c b/pp.c
index ebb2a33..a4c801e 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -6220,6 +6220,11 @@ PP(pp_lvref)
     RETURN;
 }
 
+PP(pp_lvrefslice)
+{
+    DIE(aTHX_ "Unimplemented");
+}
+
 /*
  * Local variables:
  * c-indentation-style: bsd
index 7122103..e7b9204 100644 (file)
@@ -146,6 +146,7 @@ PERL_CALLCONV OP *Perl_pp_lock(pTHX);
 PERL_CALLCONV OP *Perl_pp_lslice(pTHX);
 PERL_CALLCONV OP *Perl_pp_lt(pTHX);
 PERL_CALLCONV OP *Perl_pp_lvref(pTHX);
+PERL_CALLCONV OP *Perl_pp_lvrefslice(pTHX);
 PERL_CALLCONV OP *Perl_pp_mapwhile(pTHX);
 PERL_CALLCONV OP *Perl_pp_match(pTHX);
 PERL_CALLCONV OP *Perl_pp_method(pTHX);
index 0278fa5..065831c 100644 (file)
@@ -555,3 +555,4 @@ clonecv             private subroutine      ck_null         d0
 padrange       list of private variables       ck_null         d0
 refassign      lvalue ref assignment   ck_refassign    d2
 lvref          lvalue ref assignment   ck_null         d1
+lvrefslice     lvalue ref assignment   ck_null         d@