diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2019-02-07 10:04:54 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-02-07 10:06:25 +0100 |
commit | 1a4ffcd2b43f073059e66ed3ed88c4cd7db039dc (patch) | |
tree | af865f92be8f1478e08d75d4c6d831539c9d43ed | |
parent | edb7ef4f8c73829a6fa94bb7278ad5b68e82cc68 (diff) | |
download | php-git-1a4ffcd2b43f073059e66ed3ed88c4cd7db039dc.tar.gz |
Fix DIM_OBJ specialization in zend_vm_get_opcode_handler_func
DIM_OBJ also specializes over ASSIGN_STATIC_PROP nowadays.
-rw-r--r-- | Zend/zend_vm_execute.h | 8 | ||||
-rwxr-xr-x | Zend/zend_vm_gen.php | 8 |
2 files changed, 10 insertions, 6 deletions
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 "; |