From: Nikita Popov Date: Thu, 7 Feb 2019 09:04:54 +0000 (+0100) Subject: Fix DIM_OBJ specialization in zend_vm_get_opcode_handler_func X-Git-Tag: php-7.4.0alpha1~1126 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1a4ffcd2b43f073059e66ed3ed88c4cd7db039dc;p=php Fix DIM_OBJ specialization in zend_vm_get_opcode_handler_func DIM_OBJ also specializes over ASSIGN_STATIC_PROP nowadays. --- diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index d8258c9783..89d958f659 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -72891,8 +72891,8 @@ static const void* ZEND_FASTCALL zend_vm_get_opcode_handler_ex(uint32_t spec, co offset += 1; } else if (op->extended_value == ZEND_ASSIGN_OBJ) { offset += 2; - } else if (op->extended_value == ZEND_ASSIGN_STATIC_PROP) { - offset += 3; + } else if (op->extended_value == ZEND_ASSIGN_STATIC_PROP) { + offset += 3; } } else if (spec & SPEC_RULE_ISSET) { offset = offset * 2 + (op->extended_value & ZEND_ISEMPTY); @@ -72946,11 +72946,13 @@ static const void *zend_vm_get_opcode_handler_func(zend_uchar opcode, const zend } } else if (spec & SPEC_RULE_DIM_OBJ) { - offset = offset * 3; + offset = offset * 4; if (op->extended_value == ZEND_ASSIGN_DIM) { offset += 1; } else if (op->extended_value == ZEND_ASSIGN_OBJ) { offset += 2; + } else if (op->extended_value == ZEND_ASSIGN_STATIC_PROP) { + offset += 3; } } else if (spec & SPEC_RULE_ISSET) offset = offset * 2 + (op->extended_value & ZEND_ISEMPTY); diff --git a/Zend/zend_vm_gen.php b/Zend/zend_vm_gen.php index f847294112..c7eaa522bb 100755 --- a/Zend/zend_vm_gen.php +++ b/Zend/zend_vm_gen.php @@ -2772,8 +2772,8 @@ function gen_vm($def, $skel) { out($f, "\t\t\t\toffset += 1;\n"); out($f, "\t\t\t} else if (op->extended_value == ZEND_ASSIGN_OBJ) {\n"); out($f, "\t\t\t\toffset += 2;\n"); - out($f, "\t\t} else if (op->extended_value == ZEND_ASSIGN_STATIC_PROP) {\n"); - out($f, "\t\t\toffset += 3;\n"); + out($f, "\t\t\t} else if (op->extended_value == ZEND_ASSIGN_STATIC_PROP) {\n"); + out($f, "\t\t\t\toffset += 3;\n"); out($f, "\t\t\t}\n"); $else = "} else "; } @@ -2870,11 +2870,13 @@ function gen_vm($def, $skel) { } if (isset($used_extra_spec["DIM_OBJ"])) { out($f, "\t\t{$else}if (spec & SPEC_RULE_DIM_OBJ) {\n"); - out($f, "\t\t\toffset = offset * 3;\n"); + out($f, "\t\t\toffset = offset * 4;\n"); out($f, "\t\t\tif (op->extended_value == ZEND_ASSIGN_DIM) {\n"); out($f, "\t\t\t\toffset += 1;\n"); out($f, "\t\t\t} else if (op->extended_value == ZEND_ASSIGN_OBJ) {\n"); out($f, "\t\t\t\toffset += 2;\n"); + out($f, "\t\t\t} else if (op->extended_value == ZEND_ASSIGN_STATIC_PROP) {\n"); + out($f, "\t\t\t\toffset += 3;\n"); out($f, "\t\t\t}\n"); out($f, "\t\t}\n"); $else = "else ";