]> granicus.if.org Git - php/commitdiff
Fixed few issues:
authorDmitry Stogov <dmitry@zend.com>
Thu, 29 Oct 2015 06:15:37 +0000 (09:15 +0300)
committerDmitry Stogov <dmitry@zend.com>
Fri, 30 Oct 2015 04:18:44 +0000 (07:18 +0300)
- Added ZEND_VM_LAST_OPCODE macro
- Use better names LINE->OPLINE, REL_LINE->REL_OPLINE, FCALL->FAST_CALL, FRET->FAST_RET
- Added ISSET flag to extended value of ZEND_ISSET_ISEMPTY_VAR opcode

Zend/zend_vm_def.h
Zend/zend_vm_gen.php
Zend/zend_vm_opcodes.c
Zend/zend_vm_opcodes.h

index 6089ab05248ec5343d9b97f6266f07e804461fb3..41040596e04b410c1a0c32c5cca4ff2be5a6c07d 100644 (file)
@@ -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);
index 35b865731cfd5a69d0c2a2781e3d8bc96de62067..2f93acc1d60ef94f71790743f416a0d1cdb2dc7e 100644 (file)
@@ -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";
index 4b2913b5e14937fe690076daf5e8b07465bb8dbc..d575e04a28218208c439de2a1c57150d6ca36293 100644 (file)
@@ -321,7 +321,7 @@ static uint32_t zend_vm_opcodes_flags[182] = {
        0x00000003,
        0x00010707,
        0x00010703,
-       0x00800107,
+       0x20800107,
        0x20000707,
        0x00000803,
        0x00000801,
index 72a04699e0f37a482576b2ecaeb2c85d3726ab24..2eab6e758595932fae028bad57059b09a1434472 100644 (file)
 #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