diff options
-rw-r--r-- | ext/Opcode/Opcode.pm | 2 | ||||
-rw-r--r-- | lib/B/Op_private.pm | 1 | ||||
-rw-r--r-- | opcode.h | 8 | ||||
-rw-r--r-- | opnames.h | 3 | ||||
-rw-r--r-- | pp.c | 5 | ||||
-rw-r--r-- | pp_proto.h | 1 | ||||
-rw-r--r-- | regen/opcodes | 1 |
7 files changed, 19 insertions, 2 deletions
diff --git a/ext/Opcode/Opcode.pm b/ext/Opcode/Opcode.pm index 6f6987c5ca..7256126227 100644 --- a/ext/Opcode/Opcode.pm +++ b/ext/Opcode/Opcode.pm @@ -402,7 +402,7 @@ These are a hotchpotch of opcodes still waiting to be considered once - rv2gv refgen srefgen ref refassign lvref lvrefslice + rv2gv refgen srefgen ref refassign lvref lvrefslice lvavref bless -- could be used to change ownership of objects (reblessing) diff --git a/lib/B/Op_private.pm b/lib/B/Op_private.pm index 714fc317c0..78a1ab2a1f 100644 --- a/lib/B/Op_private.pm +++ b/lib/B/Op_private.pm @@ -394,6 +394,7 @@ $bits{log}{0} = $bf[0]; @{$bits{lslice}}{1,0} = ($bf[1], $bf[1]); $bits{lstat}{0} = $bf[0]; @{$bits{lt}}{1,0} = ($bf[1], $bf[1]); +$bits{lvavref}{0} = $bf[0]; @{$bits{lvref}}{6,5,0} = ($bf[7], $bf[7], $bf[0]); $bits{mapwhile}{0} = $bf[0]; $bits{method}{0} = $bf[0]; @@ -530,6 +530,7 @@ EXTCONST char* const PL_op_name[] = { "refassign", "lvref", "lvrefslice", + "lvavref", "freed", }; #endif @@ -920,6 +921,7 @@ EXTCONST char* const PL_op_desc[] = { "lvalue ref assignment", "lvalue ref assignment", "lvalue ref assignment", + "lvalue array reference", "freed op", }; #endif @@ -1324,6 +1326,7 @@ EXT Perl_ppaddr_t PL_ppaddr[] /* or perlvars.h */ Perl_pp_refassign, Perl_pp_lvref, Perl_pp_lvrefslice, + Perl_pp_lvavref, } #endif #ifdef PERL_PPADDR_INITED @@ -1724,6 +1727,7 @@ EXT Perl_check_t PL_check[] /* or perlvars.h */ Perl_ck_refassign, /* refassign */ Perl_ck_null, /* lvref */ Perl_ck_null, /* lvrefslice */ + Perl_ck_null, /* lvavref */ } #endif #ifdef PERL_CHECK_INITED @@ -2118,6 +2122,7 @@ EXTCONST U32 PL_opargs[] = { 0x00000240, /* refassign */ 0x00000b40, /* lvref */ 0x00000440, /* lvrefslice */ + 0x00000b40, /* lvavref */ }; #endif @@ -2740,6 +2745,7 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { 632, /* refassign */ 636, /* lvref */ 640, /* lvrefslice */ + 641, /* lvavref */ }; @@ -3101,6 +3107,7 @@ EXTCONST U16 PL_op_private_bitdefs[] = { /* refassign */ 0x277c, 0x037a, 0x13e8, 0x0067, /* lvref */ 0x277c, 0x037a, 0x13e8, 0x0003, /* lvrefslice */ 0x277d, + /* lvavref */ 0x0003, }; @@ -3491,6 +3498,7 @@ EXTCONST U8 PL_op_private_valid[] = { /* REFASSIGN */ (OPpARG2_MASK|OPpLVREF_ELEM|OPpLVREF_TYPE|OPpLVAL_INTRO), /* LVREF */ (OPpARG1_MASK|OPpLVREF_ELEM|OPpLVREF_TYPE|OPpLVAL_INTRO), /* LVREFSLICE */ (OPpLVAL_INTRO), + /* LVAVREF */ (OPpARG1_MASK), }; @@ -396,10 +396,11 @@ typedef enum opcode { OP_REFASSIGN = 379, OP_LVREF = 380, OP_LVREFSLICE = 381, + OP_LVAVREF = 382, OP_max } opcode; -#define MAXO 382 +#define MAXO 383 #define OP_FREED MAXO /* the OP_IS_* macros are optimized to a simple range check because @@ -6347,6 +6347,11 @@ PP(pp_lvrefslice) RETURN; } +PP(pp_lvavref) +{ + DIE(aTHX_ "Unimplemented"); +} + /* * Local variables: * c-indentation-style: bsd diff --git a/pp_proto.h b/pp_proto.h index e7b92046f0..9a399645e4 100644 --- a/pp_proto.h +++ b/pp_proto.h @@ -145,6 +145,7 @@ PERL_CALLCONV OP *Perl_pp_listen(pTHX); 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_lvavref(pTHX); PERL_CALLCONV OP *Perl_pp_lvref(pTHX); PERL_CALLCONV OP *Perl_pp_lvrefslice(pTHX); PERL_CALLCONV OP *Perl_pp_mapwhile(pTHX); diff --git a/regen/opcodes b/regen/opcodes index 60fceeba86..c60e623276 100644 --- a/regen/opcodes +++ b/regen/opcodes @@ -556,3 +556,4 @@ padrange list of private variables ck_null d0 refassign lvalue ref assignment ck_refassign d2 lvref lvalue ref assignment ck_null d% lvrefslice lvalue ref assignment ck_null d@ +lvavref lvalue array reference ck_null d% |