summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFather Chrysostomos <sprout@cpan.org>2014-09-25 22:08:15 -0700
committerFather Chrysostomos <sprout@cpan.org>2014-10-10 21:57:01 -0700
commit16b99412618208db59abd8d0e599334702e65a55 (patch)
treec1a6d801a0d79f82723f53b961e62f0ceabfc996
parent6102323a2ca31b7c760d9a3b81cb1d3e3d551206 (diff)
downloadperl-16b99412618208db59abd8d0e599334702e65a55.tar.gz
Add lvrefslice op type
-rw-r--r--ext/Opcode/Opcode.pm2
-rw-r--r--opcode.h7
-rw-r--r--opnames.h3
-rw-r--r--pp.c5
-rw-r--r--pp_proto.h1
-rw-r--r--regen/opcodes1
6 files changed, 17 insertions, 2 deletions
diff --git a/ext/Opcode/Opcode.pm b/ext/Opcode/Opcode.pm
index 71b60df246..6f6987c5ca 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
+ rv2gv refgen srefgen ref refassign lvref lvrefslice
bless -- could be used to change ownership of objects
(reblessing)
diff --git a/opcode.h b/opcode.h
index 88c6e8af8c..545f4dec12 100644
--- 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),
};
diff --git a/opnames.h b/opnames.h
index 5125e166ed..3a9be48220 100644
--- 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 ebb2a33cfb..a4c801ebad 100644
--- 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
diff --git a/pp_proto.h b/pp_proto.h
index 71221035ba..e7b92046f0 100644
--- a/pp_proto.h
+++ b/pp_proto.h
@@ -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);
diff --git a/regen/opcodes b/regen/opcodes
index 0278fa551b..065831c7c5 100644
--- a/regen/opcodes
+++ b/regen/opcodes
@@ -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@