summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend_vm_def.h14
-rw-r--r--Zend/zend_vm_gen.php39
-rw-r--r--Zend/zend_vm_opcodes.c2
-rw-r--r--Zend/zend_vm_opcodes.h14
4 files changed, 40 insertions, 29 deletions
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 6089ab0524..41040596e0 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -2591,7 +2591,7 @@ ZEND_VM_HANDLER(44, ZEND_JMPNZ, CONST|TMPVAR|CV, ADDR)
ZEND_VM_JMP(opline);
}
-ZEND_VM_HANDLER(45, ZEND_JMPZNZ, CONST|TMPVAR|CV, ADDR, REL_LINE)
+ZEND_VM_HANDLER(45, ZEND_JMPZNZ, CONST|TMPVAR|CV, ADDR, REL_OPLINE)
{
USE_OPLINE
zend_free_op free_op1;
@@ -4205,7 +4205,7 @@ ZEND_VM_HANDLER(108, ZEND_THROW, CONST|TMP|VAR|CV, ANY)
HANDLE_EXCEPTION();
}
-ZEND_VM_HANDLER(107, ZEND_CATCH, CONST, CV, LINE)
+ZEND_VM_HANDLER(107, ZEND_CATCH, CONST, CV, OPLINE)
{
USE_OPLINE
zend_class_entry *ce, *catch_ce;
@@ -6097,7 +6097,7 @@ ZEND_VM_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, ADDR)
}
}
-ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY, REL_LINE)
+ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY, REL_OPLINE)
{
USE_OPLINE
zval *array;
@@ -6274,7 +6274,7 @@ ZEND_VM_C_LABEL(fe_fetch_r_exit):
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, REL_LINE)
+ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, REL_OPLINE)
{
USE_OPLINE
zval *array;
@@ -6475,7 +6475,7 @@ ZEND_VM_C_LABEL(fe_fetch_w_exit):
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_HANDLER(114, ZEND_ISSET_ISEMPTY_VAR, CONST|TMPVAR|CV, UNUSED, VAR_FETCH)
+ZEND_VM_HANDLER(114, ZEND_ISSET_ISEMPTY_VAR, CONST|TMPVAR|CV, UNUSED, VAR_FETCH|ISSET)
{
USE_OPLINE
zval *value;
@@ -7671,7 +7671,7 @@ ZEND_VM_HANDLER(159, ZEND_DISCARD_EXCEPTION, ANY, ANY)
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_HANDLER(162, ZEND_FAST_CALL, ADDR, LINE, FCALL)
+ZEND_VM_HANDLER(162, ZEND_FAST_CALL, ADDR, OPLINE, FAST_CALL)
{
USE_OPLINE
zval *fast_call = EX_VAR(opline->result.var);
@@ -7687,7 +7687,7 @@ ZEND_VM_HANDLER(162, ZEND_FAST_CALL, ADDR, LINE, FCALL)
ZEND_VM_CONTINUE();
}
-ZEND_VM_HANDLER(163, ZEND_FAST_RET, ANY, LINE, FRET)
+ZEND_VM_HANDLER(163, ZEND_FAST_RET, ANY, OPLINE, FAST_RET)
{
USE_OPLINE
zval *fast_call = EX_VAR(opline->op1.var);
diff --git a/Zend/zend_vm_gen.php b/Zend/zend_vm_gen.php
index 35b865731c..2f93acc1d6 100644
--- a/Zend/zend_vm_gen.php
+++ b/Zend/zend_vm_gen.php
@@ -60,19 +60,19 @@ $vm_op_flags = array(
"ZEND_VM_OP1_TMPVAR" => 1<<2,
"ZEND_VM_OP1_NUM" => 1<<3,
"ZEND_VM_OP1_ADDR" => 1<<4,
- "ZEND_VM_OP1_LINE" => 1<<5,
+ "ZEND_VM_OP1_OPLINE" => 1<<5,
"ZEND_VM_OP2_SPEC" => 1<<8,
"ZEND_VM_OP2_CONST" => 1<<9,
"ZEND_VM_OP2_TMPVAR" => 1<<10,
"ZEND_VM_OP2_NUM" => 1<<11,
"ZEND_VM_OP2_ADDR" => 1<<12,
- "ZEND_VM_OP2_LINE" => 1<<13,
+ "ZEND_VM_OP2_OPLINE" => 1<<13,
"ZEND_VM_EXT_NUM" => 1<<16,
"ZEND_VM_EXT_VAR" => 1<<17,
- "ZEND_VM_EXT_LINE" => 1<<18,
- "ZEND_VM_EXT_REL_LINE" => 1<<19,
+ "ZEND_VM_EXT_OPLINE" => 1<<18,
+ "ZEND_VM_EXT_REL_OPLINE" => 1<<19,
"ZEND_VM_EXT_DIM_OBJ" => 1<<20,
"ZEND_VM_EXT_CLASS_FETCH" => 1<<21,
"ZEND_VM_EXT_CONST_FETCH" => 1<<22,
@@ -80,8 +80,8 @@ $vm_op_flags = array(
"ZEND_VM_EXT_ARRAY_INIT" => 1<<24,
"ZEND_VM_EXT_TYPE" => 1<<25,
"ZEND_VM_EXT_EVAL" => 1<<26,
- "ZEND_VM_EXT_FCALL" => 1<<27,
- "ZEND_VM_EXT_FRET" => 1<<28,
+ "ZEND_VM_EXT_FAST_CALL" => 1<<27,
+ "ZEND_VM_EXT_FAST_RET" => 1<<28,
"ZEND_VM_EXT_ISSET" => 1<<29,
);
@@ -99,14 +99,14 @@ $vm_op_decode = array(
"TMPVAR" => ZEND_VM_OP1_SPEC | ZEND_VM_OP1_TMPVAR,
"NUM" => ZEND_VM_OP1_NUM,
"ADDR" => ZEND_VM_OP1_ADDR,
- "LINE" => ZEND_VM_OP1_LINE,
+ "OPLINE" => ZEND_VM_OP1_OPLINE,
);
$vm_ext_decode = array(
"NUM" => ZEND_VM_EXT_NUM,
"VAR" => ZEND_VM_EXT_VAR,
- "LINE" => ZEND_VM_EXT_LINE,
- "REL_LINE" => ZEND_VM_EXT_REL_LINE,
+ "OPLINE" => ZEND_VM_EXT_OPLINE,
+ "REL_OPLINE" => ZEND_VM_EXT_REL_OPLINE,
"DIM_OBJ" => ZEND_VM_EXT_DIM_OBJ,
"CLASS_FETCH" => ZEND_VM_EXT_CLASS_FETCH,
"CONST_FETCH" => ZEND_VM_EXT_CONST_FETCH,
@@ -114,8 +114,8 @@ $vm_ext_decode = array(
"ARRAY_INIT" => ZEND_VM_EXT_ARRAY_INIT,
"TYPE" => ZEND_VM_EXT_TYPE,
"EVAL" => ZEND_VM_EXT_EVAL,
- "FCALL" => ZEND_VM_EXT_FCALL,
- "FRET" => ZEND_VM_EXT_FRET,
+ "FAST_CALL" => ZEND_VM_EXT_FAST_CALL,
+ "FAST_RET" => ZEND_VM_EXT_FAST_RET,
"ISSET" => ZEND_VM_EXT_ISSET,
);
@@ -1399,11 +1399,16 @@ function parse_operand_spec($def, $lineno, $str, &$flags) {
function parse_ext_spec($def, $lineno, $str) {
global $vm_ext_decode;
- if (isset($vm_ext_decode[$str])) {
- return $vm_ext_decode[$str];
- } else {
- die("ERROR ($def:$lineno): Wrong extended_value type '$str'\n");
+ $flags = 0;
+ $a = explode("|",$str);
+ foreach($a as $val) {
+ if (isset($vm_ext_decode[$val])) {
+ $flags |= $vm_ext_decode[$val];
+ } else {
+ die("ERROR ($def:$lineno): Wrong extended_value type '$str'\n");
+ }
}
+ return $flags;
}
function gen_vm($def, $skel) {
@@ -1609,6 +1614,10 @@ function gen_vm($def, $skel) {
fputs($f,"#define $op $code\n");
}
+ $code = str_pad((string)$max_opcode,$code_len," ",STR_PAD_LEFT);
+ $op = str_pad("ZEND_VM_LAST_OPCODE",$max_opcode_len);
+ fputs($f,"\n#define $op $code\n");
+
fputs($f, "\n#endif\n");
fclose($f);
echo "zend_vm_opcodes.h generated successfully.\n";
diff --git a/Zend/zend_vm_opcodes.c b/Zend/zend_vm_opcodes.c
index 4b2913b5e1..d575e04a28 100644
--- a/Zend/zend_vm_opcodes.c
+++ b/Zend/zend_vm_opcodes.c
@@ -321,7 +321,7 @@ static uint32_t zend_vm_opcodes_flags[182] = {
0x00000003,
0x00010707,
0x00010703,
- 0x00800107,
+ 0x20800107,
0x20000707,
0x00000803,
0x00000801,
diff --git a/Zend/zend_vm_opcodes.h b/Zend/zend_vm_opcodes.h
index 72a04699e0..2eab6e7585 100644
--- a/Zend/zend_vm_opcodes.h
+++ b/Zend/zend_vm_opcodes.h
@@ -33,17 +33,17 @@
#define ZEND_VM_OP1_TMPVAR 0x00000004
#define ZEND_VM_OP1_NUM 0x00000008
#define ZEND_VM_OP1_ADDR 0x00000010
-#define ZEND_VM_OP1_LINE 0x00000020
+#define ZEND_VM_OP1_OPLINE 0x00000020
#define ZEND_VM_OP2_SPEC 0x00000100
#define ZEND_VM_OP2_CONST 0x00000200
#define ZEND_VM_OP2_TMPVAR 0x00000400
#define ZEND_VM_OP2_NUM 0x00000800
#define ZEND_VM_OP2_ADDR 0x00001000
-#define ZEND_VM_OP2_LINE 0x00002000
+#define ZEND_VM_OP2_OPLINE 0x00002000
#define ZEND_VM_EXT_NUM 0x00010000
#define ZEND_VM_EXT_VAR 0x00020000
-#define ZEND_VM_EXT_LINE 0x00040000
-#define ZEND_VM_EXT_REL_LINE 0x00080000
+#define ZEND_VM_EXT_OPLINE 0x00040000
+#define ZEND_VM_EXT_REL_OPLINE 0x00080000
#define ZEND_VM_EXT_DIM_OBJ 0x00100000
#define ZEND_VM_EXT_CLASS_FETCH 0x00200000
#define ZEND_VM_EXT_CONST_FETCH 0x00400000
@@ -51,8 +51,8 @@
#define ZEND_VM_EXT_ARRAY_INIT 0x01000000
#define ZEND_VM_EXT_TYPE 0x02000000
#define ZEND_VM_EXT_EVAL 0x04000000
-#define ZEND_VM_EXT_FCALL 0x08000000
-#define ZEND_VM_EXT_FRET 0x10000000
+#define ZEND_VM_EXT_FAST_CALL 0x08000000
+#define ZEND_VM_EXT_FAST_RET 0x10000000
#define ZEND_VM_EXT_ISSET 0x20000000
BEGIN_EXTERN_C()
@@ -240,4 +240,6 @@ END_EXTERN_C()
#define ZEND_ISSET_ISEMPTY_STATIC_PROP 180
#define ZEND_FETCH_CLASS_CONSTANT 181
+#define ZEND_VM_LAST_OPCODE 181
+
#endif