summaryrefslogtreecommitdiff
path: root/Zend/zend_vm_execute.h
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-05-13 14:43:10 +0200
committerNikita Popov <nikita.ppv@gmail.com>2019-05-13 14:43:10 +0200
commitf106f5716425285473a2ae6ed02c7eb1d09bb85d (patch)
treede5af4221043b2a6547612a65fd4563a5dd621cd /Zend/zend_vm_execute.h
parent6b691cd44ed87067db50a989b90152649c4cb715 (diff)
parente829d087299b59e638e91f18ea76f4dbe920c77b (diff)
downloadphp-git-f106f5716425285473a2ae6ed02c7eb1d09bb85d.tar.gz
Merge branch 'PHP-7.4'
Diffstat (limited to 'Zend/zend_vm_execute.h')
-rw-r--r--Zend/zend_vm_execute.h353
1 files changed, 284 insertions, 69 deletions
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index afc0a6bc8d..55f24ef2db 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -1722,6 +1722,113 @@ send_array:
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zend_free_op free_op1;
+ zval *op1;
+
+ SAVE_OPLINE();
+ op1 = get_zval_ptr(opline->op1_type, opline->op1, &free_op1, BP_VAR_R);
+
+add_again:
+ if (EXPECTED(Z_TYPE_P(op1) == IS_ARRAY)) {
+ HashTable *ht = Z_ARRVAL_P(op1);
+ zval *val;
+ zend_string *key;
+
+ ZEND_HASH_FOREACH_STR_KEY_VAL(ht, key, val) {
+ if (key) {
+ zend_throw_error(NULL, "Cannot unpack array with string keys");
+ FREE_OP(free_op1);
+ HANDLE_EXCEPTION();
+ } else {
+ if (Z_ISREF_P(val) && Z_REFCOUNT_P(val) == 1) {
+ val = Z_REFVAL_P(val);
+ }
+ Z_TRY_ADDREF_P(val);
+ if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), val)) {
+ zend_cannot_add_element();
+ zval_ptr_dtor_nogc(val);
+ break;
+ }
+ }
+ } ZEND_HASH_FOREACH_END();
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_OBJECT)) {
+ zend_class_entry *ce = Z_OBJCE_P(op1);
+ zend_object_iterator *iter;
+
+ if (!ce || !ce->get_iterator) {
+ zend_throw_error(NULL, "Only arrays and Traversables can be unpacked");
+ } else {
+ iter = ce->get_iterator(ce, op1, 0);
+ if (UNEXPECTED(!iter)) {
+ FREE_OP(free_op1);
+ if (!EG(exception)) {
+ zend_throw_exception_ex(
+ NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name)
+ );
+ }
+ HANDLE_EXCEPTION();
+ }
+
+ if (iter->funcs->rewind) {
+ iter->funcs->rewind(iter);
+ }
+
+ for (; iter->funcs->valid(iter) == SUCCESS; ) {
+ zval *val;
+
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ break;
+ }
+
+ val = iter->funcs->get_current_data(iter);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ break;
+ }
+
+ if (iter->funcs->get_current_key) {
+ zval key;
+ iter->funcs->get_current_key(iter, &key);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ break;
+ }
+
+ if (UNEXPECTED(Z_TYPE(key) != IS_LONG)) {
+ zend_throw_error(NULL,
+ (Z_TYPE(key) == IS_STRING) ?
+ "Cannot unpack Traversable with string keys" :
+ "Cannot unpack Traversable with non-integer keys");
+ zval_ptr_dtor(&key);
+ break;
+ }
+ }
+
+ ZVAL_DEREF(val);
+ Z_TRY_ADDREF_P(val);
+
+ if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), val)) {
+ zend_cannot_add_element();
+ zval_ptr_dtor_nogc(val);
+ }
+
+ iter->funcs->move_forward(iter);
+ }
+
+ zend_iterator_dtor(iter);
+ }
+ } else if (EXPECTED(Z_ISREF_P(op1))) {
+ op1 = Z_REFVAL_P(op1);
+ goto add_again;
+ } else {
+ zend_throw_error(NULL, "Only arrays and Traversables can be unpacked");
+ }
+
+ FREE_OP(free_op1);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -1970,6 +2077,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(
if (throw_op->result_type & (IS_VAR | IS_TMP_VAR)) {
switch (throw_op->opcode) {
case ZEND_ADD_ARRAY_ELEMENT:
+ case ZEND_ADD_ARRAY_UNPACK:
case ZEND_ROPE_INIT:
case ZEND_ROPE_ADD:
break; /* exception while building structures, live range handling will free those */
@@ -5809,7 +5917,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CONST_HA
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
- ZVAL_EMPTY_ARRAY(array);
+ ZVAL_ARR(array, zend_new_array(0));
ZEND_VM_NEXT_OPCODE();
}
}
@@ -8000,7 +8108,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_H
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
- ZVAL_EMPTY_ARRAY(array);
+ ZVAL_ARR(array, zend_new_array(0));
ZEND_VM_NEXT_OPCODE();
}
}
@@ -9205,7 +9313,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_H
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
- ZVAL_EMPTY_ARRAY(array);
+ ZVAL_ARR(array, zend_new_array(0));
ZEND_VM_NEXT_OPCODE();
}
}
@@ -10953,7 +11061,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDL
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
- ZVAL_EMPTY_ARRAY(array);
+ ZVAL_ARR(array, zend_new_array(0));
ZEND_VM_NEXT_OPCODE();
}
}
@@ -19094,7 +19202,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CONST_HAND
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
- ZVAL_EMPTY_ARRAY(array);
+ ZVAL_ARR(array, zend_new_array(0));
ZEND_VM_NEXT_OPCODE();
}
}
@@ -19601,7 +19709,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HAN
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
- ZVAL_EMPTY_ARRAY(array);
+ ZVAL_ARR(array, zend_new_array(0));
ZEND_VM_NEXT_OPCODE();
}
}
@@ -20185,7 +20293,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HAN
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
- ZVAL_EMPTY_ARRAY(array);
+ ZVAL_ARR(array, zend_new_array(0));
ZEND_VM_NEXT_OPCODE();
}
}
@@ -20656,7 +20764,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
- ZVAL_EMPTY_ARRAY(array);
+ ZVAL_ARR(array, zend_new_array(0));
ZEND_VM_NEXT_OPCODE();
}
}
@@ -25026,7 +25134,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CONST_HAND
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
- ZVAL_EMPTY_ARRAY(array);
+ ZVAL_ARR(array, zend_new_array(0));
ZEND_VM_NEXT_OPCODE();
}
}
@@ -27744,7 +27852,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HAN
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
- ZVAL_EMPTY_ARRAY(array);
+ ZVAL_ARR(array, zend_new_array(0));
ZEND_VM_NEXT_OPCODE();
}
}
@@ -29550,7 +29658,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HAN
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
- ZVAL_EMPTY_ARRAY(array);
+ ZVAL_ARR(array, zend_new_array(0));
ZEND_VM_NEXT_OPCODE();
}
}
@@ -32239,7 +32347,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
- ZVAL_EMPTY_ARRAY(array);
+ ZVAL_ARR(array, zend_new_array(0));
ZEND_VM_NEXT_OPCODE();
}
}
@@ -34629,6 +34737,27 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUS
ZEND_VM_NEXT_OPCODE();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ zval *array;
+ uint32_t size;
+ USE_OPLINE
+
+ array = EX_VAR(opline->result.var);
+ if (IS_UNUSED != IS_UNUSED) {
+ size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
+ ZVAL_ARR(array, zend_new_array(size));
+ /* Explicitly initialize array as not-packed if flag is set */
+ if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
+ zend_hash_real_init_mixed(Z_ARRVAL_P(array));
+ }
+ ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ } else {
+ ZVAL_ARR(array, zend_new_array(0));
+ ZEND_VM_NEXT_OPCODE();
+ }
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -36609,6 +36738,27 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_U
ZEND_VM_NEXT_OPCODE();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ zval *array;
+ uint32_t size;
+ USE_OPLINE
+
+ array = EX_VAR(opline->result.var);
+ if (IS_UNUSED != IS_UNUSED) {
+ size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
+ ZVAL_ARR(array, zend_new_array(size));
+ /* Explicitly initialize array as not-packed if flag is set */
+ if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
+ zend_hash_real_init_mixed(Z_ARRVAL_P(array));
+ }
+ ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ } else {
+ ZVAL_ARR(array, zend_new_array(0));
+ ZEND_VM_NEXT_OPCODE();
+ }
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -37278,6 +37428,27 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER
ZEND_VM_NEXT_OPCODE();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ zval *array;
+ uint32_t size;
+ USE_OPLINE
+
+ array = EX_VAR(opline->result.var);
+ if (IS_UNUSED != IS_UNUSED) {
+ size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
+ ZVAL_ARR(array, zend_new_array(size));
+ /* Explicitly initialize array as not-packed if flag is set */
+ if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
+ zend_hash_real_init_mixed(Z_ARRVAL_P(array));
+ }
+ ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ } else {
+ ZVAL_ARR(array, zend_new_array(0));
+ ZEND_VM_NEXT_OPCODE();
+ }
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -39316,6 +39487,27 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_U
ZEND_VM_NEXT_OPCODE();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ zval *array;
+ uint32_t size;
+ USE_OPLINE
+
+ array = EX_VAR(opline->result.var);
+ if (IS_UNUSED != IS_UNUSED) {
+ size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
+ ZVAL_ARR(array, zend_new_array(size));
+ /* Explicitly initialize array as not-packed if flag is set */
+ if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
+ zend_hash_real_init_mixed(Z_ARRVAL_P(array));
+ }
+ ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ } else {
+ ZVAL_ARR(array, zend_new_array(0));
+ ZEND_VM_NEXT_OPCODE();
+ }
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -44858,7 +45050,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDL
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
- ZVAL_EMPTY_ARRAY(array);
+ ZVAL_ARR(array, zend_new_array(0));
ZEND_VM_NEXT_OPCODE();
}
}
@@ -49088,7 +49280,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HAND
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
- ZVAL_EMPTY_ARRAY(array);
+ ZVAL_ARR(array, zend_new_array(0));
ZEND_VM_NEXT_OPCODE();
}
}
@@ -51186,7 +51378,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HAND
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
- ZVAL_EMPTY_ARRAY(array);
+ ZVAL_ARR(array, zend_new_array(0));
ZEND_VM_NEXT_OPCODE();
}
}
@@ -55286,7 +55478,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
- ZVAL_EMPTY_ARRAY(array);
+ ZVAL_ARR(array, zend_new_array(0));
ZEND_VM_NEXT_OPCODE();
}
}
@@ -57585,11 +57777,11 @@ ZEND_API void execute_ex(zend_execute_data *ex)
(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_LABEL,
(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_LABEL,
(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_CV_LABEL,
- (void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_LABEL,
+ (void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_LABEL,
+ (void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_CV_LABEL,
(void*)&&ZEND_INIT_ARRAY_SPEC_CV_CONST_LABEL,
(void*)&&ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_LABEL,
(void*)&&ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_LABEL,
@@ -59320,6 +59512,7 @@ ZEND_API void execute_ex(zend_execute_data *ex)
(void*)&&ZEND_POST_DEC_STATIC_PROP_SPEC_CV_UNUSED_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_ADD_ARRAY_UNPACK_SPEC_LABEL,
(void*)&&ZEND_JMP_FORWARD_SPEC_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
@@ -60408,6 +60601,10 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_SEND_ARRAY_SPEC)
ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_ARRAY_UNPACK_SPEC):
+ VM_TRACE(ZEND_ADD_ARRAY_UNPACK_SPEC)
+ ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC):
VM_TRACE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC)
ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -64358,6 +64555,10 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST)
ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_CONST):
+ VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_CONST)
+ ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_CONST):
VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_CONST)
ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -64498,6 +64699,10 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR)
ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR):
+ VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR)
+ ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR):
VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR)
ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -64530,6 +64735,10 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_NEW_SPEC_UNUSED_UNUSED)
ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED):
+ VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED)
+ ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_UNUSED):
VM_TRACE(ZEND_YIELD_SPEC_UNUSED_UNUSED)
ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -64686,6 +64895,10 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV)
ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_CV):
+ VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_CV)
+ ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_CV):
VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_CV)
ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -68428,11 +68641,11 @@ void zend_vm_init(void)
ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER,
ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER,
ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER,
- ZEND_NULL_HANDLER,
- ZEND_NULL_HANDLER,
- ZEND_NULL_HANDLER,
- ZEND_NULL_HANDLER,
- ZEND_NULL_HANDLER,
+ ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER,
+ ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER,
+ ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER,
+ ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER,
+ ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER,
ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER,
ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER,
ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER,
@@ -70163,6 +70376,7 @@ void zend_vm_init(void)
ZEND_POST_DEC_STATIC_PROP_SPEC_CV_UNUSED_HANDLER,
ZEND_NULL_HANDLER,
ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER,
+ ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER,
ZEND_JMP_FORWARD_SPEC_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
@@ -71203,9 +71417,9 @@ void zend_vm_init(void)
2705,
2706 | SPEC_RULE_OP1,
2711,
- 4449,
+ 4450,
2712,
- 4449,
+ 4450,
2713 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
2838 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
2863,
@@ -71213,8 +71427,8 @@ void zend_vm_init(void)
2865,
2866 | SPEC_RULE_OP1,
2871,
- 4449,
- 4449,
+ 4450,
+ 4450,
2872,
2873,
2874,
@@ -71267,7 +71481,8 @@ void zend_vm_init(void)
3505 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
3530 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
3555,
- 4449
+ 3556,
+ 4450
};
#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
zend_opcode_handler_funcs = labels;
@@ -71474,7 +71689,7 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3557 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
+ spec = 3558 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
if (op->op1_type < op->op2_type) {
zend_swap_operands(op);
}
@@ -71482,7 +71697,7 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3582 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
+ spec = 3583 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
if (op->op1_type < op->op2_type) {
zend_swap_operands(op);
}
@@ -71490,7 +71705,7 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3607 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
+ spec = 3608 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
if (op->op1_type < op->op2_type) {
zend_swap_operands(op);
}
@@ -71501,17 +71716,17 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3632 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
+ spec = 3633 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
} else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3657 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
+ spec = 3658 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3682 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
+ spec = 3683 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
}
break;
case ZEND_MUL:
@@ -71522,17 +71737,17 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3707 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
+ spec = 3708 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
} else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3732 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
+ spec = 3733 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3757 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
+ spec = 3758 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
}
break;
case ZEND_IS_EQUAL:
@@ -71543,12 +71758,12 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3782 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
+ spec = 3783 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3857 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
+ spec = 3858 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
}
break;
case ZEND_IS_NOT_EQUAL:
@@ -71559,12 +71774,12 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3932 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
+ spec = 3933 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 4007 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
+ spec = 4008 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
}
break;
case ZEND_IS_SMALLER:
@@ -71572,12 +71787,12 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 4082 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
+ spec = 4083 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 4157 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
+ spec = 4158 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
}
break;
case ZEND_IS_SMALLER_OR_EQUAL:
@@ -71585,75 +71800,75 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 4232 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
+ spec = 4233 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 4307 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
+ spec = 4308 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
}
break;
case ZEND_QM_ASSIGN:
if (op1_info == MAY_BE_DOUBLE) {
- spec = 4400 | SPEC_RULE_OP1;
+ spec = 4401 | SPEC_RULE_OP1;
} else if ((op->op1_type == IS_CONST) ? !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1)) : (!(op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE))))) {
- spec = 4405 | SPEC_RULE_OP1;
+ spec = 4406 | SPEC_RULE_OP1;
}
break;
case ZEND_PRE_INC:
if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
- spec = 4382 | SPEC_RULE_RETVAL;
+ spec = 4383 | SPEC_RULE_RETVAL;
} else if (op1_info == MAY_BE_LONG) {
- spec = 4384 | SPEC_RULE_RETVAL;
+ spec = 4385 | SPEC_RULE_RETVAL;
} else if (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)) {
- spec = 4386 | SPEC_RULE_RETVAL;
+ spec = 4387 | SPEC_RULE_RETVAL;
}
break;
case ZEND_PRE_DEC:
if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
- spec = 4388 | SPEC_RULE_RETVAL;
+ spec = 4389 | SPEC_RULE_RETVAL;
} else if (op1_info == MAY_BE_LONG) {
- spec = 4390 | SPEC_RULE_RETVAL;
+ spec = 4391 | SPEC_RULE_RETVAL;
} else if (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)) {
- spec = 4392 | SPEC_RULE_RETVAL;
+ spec = 4393 | SPEC_RULE_RETVAL;
}
break;
case ZEND_POST_INC:
if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
- spec = 4394;
- } else if (op1_info == MAY_BE_LONG) {
spec = 4395;
- } else if (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)) {
+ } else if (op1_info == MAY_BE_LONG) {
spec = 4396;
+ } else if (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)) {
+ spec = 4397;
}
break;
case ZEND_POST_DEC:
if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
- spec = 4397;
- } else if (op1_info == MAY_BE_LONG) {
spec = 4398;
- } else if (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)) {
+ } else if (op1_info == MAY_BE_LONG) {
spec = 4399;
+ } else if (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)) {
+ spec = 4400;
}
break;
case ZEND_JMP:
if (OP_JMP_ADDR(op, op->op1) > op) {
- spec = 3556;
+ spec = 3557;
}
break;
case ZEND_SEND_VAL:
if (op->op1_type == IS_CONST && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1))) {
- spec = 4445;
+ spec = 4446;
}
break;
case ZEND_SEND_VAR_EX:
if (op->op2.num <= MAX_ARG_FLAG_NUM && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
- spec = 4440 | SPEC_RULE_OP1;
+ spec = 4441 | SPEC_RULE_OP1;
}
break;
case ZEND_FE_FETCH_R:
if (op->op2_type == IS_CV && (op1_info & (MAY_BE_UNDEF|MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_ARRAY) {
- spec = 4447 | SPEC_RULE_RETVAL;
+ spec = 4448 | SPEC_RULE_RETVAL;
}
break;
case ZEND_FETCH_DIM_R:
@@ -71661,17 +71876,17 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 4410 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
+ spec = 4411 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
}
break;
case ZEND_SEND_VAL_EX:
if (op->op2.num <= MAX_ARG_FLAG_NUM && op->op1_type == IS_CONST && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1))) {
- spec = 4446;
+ spec = 4447;
}
break;
case ZEND_SEND_VAR:
if ((op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
- spec = 4435 | SPEC_RULE_OP1;
+ spec = 4436 | SPEC_RULE_OP1;
}
break;
case ZEND_BW_OR: