mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Allow arbitrary expressions in static variable initializer
Closes GH-9301
This commit is contained in:
parent
3189a9f94a
commit
0b1d750d91
44 changed files with 1118 additions and 690 deletions
337
Zend/zend_vm_execute.h
generated
337
Zend/zend_vm_execute.h
generated
|
@ -40366,6 +40366,85 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDL
|
|||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_STATIC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
USE_OPLINE
|
||||
HashTable *ht;
|
||||
zval *value;
|
||||
zval *variable_ptr;
|
||||
|
||||
variable_ptr = EX_VAR(opline->op1.var);
|
||||
|
||||
ht = ZEND_MAP_PTR_GET(EX(func)->op_array.static_variables_ptr);
|
||||
if (!ht) {
|
||||
ht = zend_array_dup(EX(func)->op_array.static_variables);
|
||||
ZEND_MAP_PTR_SET(EX(func)->op_array.static_variables_ptr, ht);
|
||||
}
|
||||
ZEND_ASSERT(GC_REFCOUNT(ht) == 1);
|
||||
|
||||
value = (zval*)((char*)ht->arData + (opline->extended_value & ~(ZEND_BIND_REF|ZEND_BIND_IMPLICIT|ZEND_BIND_EXPLICIT)));
|
||||
|
||||
SAVE_OPLINE();
|
||||
if (opline->extended_value & ZEND_BIND_REF) {
|
||||
i_zval_ptr_dtor(variable_ptr);
|
||||
if (UNEXPECTED(!Z_ISREF_P(value))) {
|
||||
zend_reference *ref = (zend_reference*)emalloc(sizeof(zend_reference));
|
||||
GC_SET_REFCOUNT(ref, 2);
|
||||
GC_TYPE_INFO(ref) = GC_REFERENCE;
|
||||
if (opline->op2_type == IS_UNUSED) {
|
||||
ZVAL_COPY_VALUE(&ref->val, value);
|
||||
} else {
|
||||
ZEND_ASSERT(!Z_REFCOUNTED_P(value));
|
||||
ZVAL_COPY(&ref->val, get_zval_ptr_deref(opline->op2_type, opline->op2, BP_VAR_R));
|
||||
FREE_OP(opline->op2_type, opline->op2.var);
|
||||
}
|
||||
ref->sources.ptr = NULL;
|
||||
Z_REF_P(value) = ref;
|
||||
Z_TYPE_INFO_P(value) = IS_REFERENCE_EX;
|
||||
ZVAL_REF(variable_ptr, ref);
|
||||
} else {
|
||||
Z_ADDREF_P(value);
|
||||
ZVAL_REF(variable_ptr, Z_REF_P(value));
|
||||
if (opline->op2_type != IS_UNUSED) {
|
||||
FREE_OP(opline->op2_type, opline->op2.var);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
i_zval_ptr_dtor(variable_ptr);
|
||||
ZVAL_COPY(variable_ptr, value);
|
||||
}
|
||||
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
USE_OPLINE
|
||||
HashTable *ht;
|
||||
zval *value;
|
||||
zval *variable_ptr;
|
||||
|
||||
variable_ptr = EX_VAR(opline->op1.var);
|
||||
|
||||
ht = ZEND_MAP_PTR_GET(EX(func)->op_array.static_variables_ptr);
|
||||
if (!ht) {
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
ZEND_ASSERT(GC_REFCOUNT(ht) == 1);
|
||||
|
||||
value = (zval*)((char*)ht->arData + opline->extended_value);
|
||||
if (Z_TYPE_EXTRA_P(value) & IS_STATIC_VAR_UNINITIALIZED) {
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
} else {
|
||||
SAVE_OPLINE();
|
||||
zval_ptr_dtor(variable_ptr);
|
||||
ZEND_ASSERT(Z_TYPE_P(value) == IS_REFERENCE);
|
||||
Z_ADDREF_P(value);
|
||||
ZVAL_REF(variable_ptr, Z_REF_P(value));
|
||||
ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 1);
|
||||
}
|
||||
}
|
||||
|
||||
static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
USE_OPLINE
|
||||
|
@ -49560,54 +49639,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(Z
|
|||
ZEND_VM_RETURN();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_STATIC_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
USE_OPLINE
|
||||
HashTable *ht;
|
||||
zval *value;
|
||||
zval *variable_ptr;
|
||||
|
||||
variable_ptr = EX_VAR(opline->op1.var);
|
||||
|
||||
ht = ZEND_MAP_PTR_GET(EX(func)->op_array.static_variables_ptr);
|
||||
if (!ht) {
|
||||
ht = zend_array_dup(EX(func)->op_array.static_variables);
|
||||
ZEND_MAP_PTR_SET(EX(func)->op_array.static_variables_ptr, ht);
|
||||
}
|
||||
ZEND_ASSERT(GC_REFCOUNT(ht) == 1);
|
||||
|
||||
value = (zval*)((char*)ht->arData + (opline->extended_value & ~(ZEND_BIND_REF|ZEND_BIND_IMPLICIT|ZEND_BIND_EXPLICIT)));
|
||||
|
||||
SAVE_OPLINE();
|
||||
if (opline->extended_value & ZEND_BIND_REF) {
|
||||
if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
|
||||
if (UNEXPECTED(zval_update_constant_ex(value, EX(func)->op_array.scope) != SUCCESS)) {
|
||||
HANDLE_EXCEPTION();
|
||||
}
|
||||
}
|
||||
|
||||
i_zval_ptr_dtor(variable_ptr);
|
||||
if (UNEXPECTED(!Z_ISREF_P(value))) {
|
||||
zend_reference *ref = (zend_reference*)emalloc(sizeof(zend_reference));
|
||||
GC_SET_REFCOUNT(ref, 2);
|
||||
GC_TYPE_INFO(ref) = GC_REFERENCE;
|
||||
ZVAL_COPY_VALUE(&ref->val, value);
|
||||
ref->sources.ptr = NULL;
|
||||
Z_REF_P(value) = ref;
|
||||
Z_TYPE_INFO_P(value) = IS_REFERENCE_EX;
|
||||
ZVAL_REF(variable_ptr, ref);
|
||||
} else {
|
||||
Z_ADDREF_P(value);
|
||||
ZVAL_REF(variable_ptr, Z_REF_P(value));
|
||||
}
|
||||
} else {
|
||||
i_zval_ptr_dtor(variable_ptr);
|
||||
ZVAL_COPY(variable_ptr, value);
|
||||
}
|
||||
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
{
|
||||
USE_OPLINE
|
||||
|
@ -55758,7 +55789,7 @@ ZEND_API void execute_ex(zend_execute_data *ex)
|
|||
(void*)&&ZEND_NULL_LABEL,
|
||||
(void*)&&ZEND_NULL_LABEL,
|
||||
(void*)&&ZEND_BIND_LEXICAL_SPEC_TMP_CV_LABEL,
|
||||
(void*)&&ZEND_BIND_STATIC_SPEC_CV_UNUSED_LABEL,
|
||||
(void*)&&ZEND_BIND_STATIC_SPEC_CV_LABEL,
|
||||
(void*)&&ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_LABEL,
|
||||
(void*)&&ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_LABEL,
|
||||
(void*)&&ZEND_NULL_LABEL,
|
||||
|
@ -55866,6 +55897,7 @@ ZEND_API void execute_ex(zend_execute_data *ex)
|
|||
(void*)&&ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_LABEL,
|
||||
(void*)&&ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_LABEL,
|
||||
(void*)&&ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_LABEL,
|
||||
(void*)&&ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV_LABEL,
|
||||
(void*)&&ZEND_RECV_NOTYPE_SPEC_LABEL,
|
||||
(void*)&&ZEND_JMP_FORWARD_SPEC_LABEL,
|
||||
(void*)&&ZEND_NULL_LABEL,
|
||||
|
@ -60435,6 +60467,14 @@ zend_leave_helper_SPEC_LABEL:
|
|||
VM_TRACE(ZEND_FETCH_CLASS_NAME_SPEC_CV)
|
||||
ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
|
||||
HYBRID_BREAK();
|
||||
HYBRID_CASE(ZEND_BIND_STATIC_SPEC_CV):
|
||||
VM_TRACE(ZEND_BIND_STATIC_SPEC_CV)
|
||||
ZEND_BIND_STATIC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
|
||||
HYBRID_BREAK();
|
||||
HYBRID_CASE(ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV):
|
||||
VM_TRACE(ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV)
|
||||
ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
|
||||
HYBRID_BREAK();
|
||||
HYBRID_CASE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED):
|
||||
VM_TRACE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED)
|
||||
ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
|
||||
|
@ -61079,10 +61119,6 @@ zend_leave_helper_SPEC_LABEL:
|
|||
VM_TRACE(ZEND_YIELD_SPEC_CV_UNUSED)
|
||||
ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
|
||||
HYBRID_BREAK();
|
||||
HYBRID_CASE(ZEND_BIND_STATIC_SPEC_CV_UNUSED):
|
||||
VM_TRACE(ZEND_BIND_STATIC_SPEC_CV_UNUSED)
|
||||
ZEND_BIND_STATIC_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
|
||||
HYBRID_BREAK();
|
||||
HYBRID_CASE(ZEND_CHECK_VAR_SPEC_CV_UNUSED):
|
||||
VM_TRACE(ZEND_CHECK_VAR_SPEC_CV_UNUSED)
|
||||
ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
|
||||
|
@ -63862,7 +63898,7 @@ void zend_vm_init(void)
|
|||
ZEND_NULL_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER,
|
||||
ZEND_BIND_STATIC_SPEC_CV_UNUSED_HANDLER,
|
||||
ZEND_BIND_STATIC_SPEC_CV_HANDLER,
|
||||
ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER,
|
||||
ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
|
@ -63970,6 +64006,7 @@ void zend_vm_init(void)
|
|||
ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_HANDLER,
|
||||
ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_HANDLER,
|
||||
ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_HANDLER,
|
||||
ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV_HANDLER,
|
||||
ZEND_RECV_NOTYPE_SPEC_HANDLER,
|
||||
ZEND_JMP_FORWARD_SPEC_HANDLER,
|
||||
ZEND_NULL_HANDLER,
|
||||
|
@ -64921,7 +64958,7 @@ void zend_vm_init(void)
|
|||
1255,
|
||||
1256 | SPEC_RULE_OP1,
|
||||
1261 | SPEC_RULE_OP1,
|
||||
3470,
|
||||
3471,
|
||||
1266 | SPEC_RULE_OP1,
|
||||
1271 | SPEC_RULE_OP1,
|
||||
1276 | SPEC_RULE_OP2,
|
||||
|
@ -65079,59 +65116,59 @@ void zend_vm_init(void)
|
|||
2564,
|
||||
2565,
|
||||
2566,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
3470,
|
||||
2567,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
3471,
|
||||
};
|
||||
#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
|
||||
zend_opcode_handler_funcs = labels;
|
||||
|
@ -65304,7 +65341,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 = 2569 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
|
||||
spec = 2570 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
|
||||
if (op->op1_type < op->op2_type) {
|
||||
zend_swap_operands(op);
|
||||
}
|
||||
|
@ -65312,7 +65349,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 = 2594 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
|
||||
spec = 2595 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
|
||||
if (op->op1_type < op->op2_type) {
|
||||
zend_swap_operands(op);
|
||||
}
|
||||
|
@ -65320,7 +65357,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 = 2619 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
|
||||
spec = 2620 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
|
||||
if (op->op1_type < op->op2_type) {
|
||||
zend_swap_operands(op);
|
||||
}
|
||||
|
@ -65331,17 +65368,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 = 2644 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
|
||||
spec = 2645 | 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 = 2669 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
|
||||
spec = 2670 | 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 = 2694 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
|
||||
spec = 2695 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
|
||||
}
|
||||
break;
|
||||
case ZEND_MUL:
|
||||
|
@ -65352,17 +65389,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 = 2719 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
|
||||
spec = 2720 | 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 = 2744 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
|
||||
spec = 2745 | 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 = 2769 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
|
||||
spec = 2770 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
|
||||
}
|
||||
break;
|
||||
case ZEND_IS_IDENTICAL:
|
||||
|
@ -65373,14 +65410,14 @@ 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 = 2794 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
|
||||
spec = 2795 | 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 = 2869 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
|
||||
spec = 2870 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
|
||||
} else if (op->op1_type == IS_CV && (op->op2_type & (IS_CONST|IS_CV)) && !(op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) && !(op2_info & (MAY_BE_UNDEF|MAY_BE_REF))) {
|
||||
spec = 3094 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
|
||||
spec = 3095 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
|
||||
}
|
||||
break;
|
||||
case ZEND_IS_NOT_IDENTICAL:
|
||||
|
@ -65391,14 +65428,14 @@ 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 = 2944 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
|
||||
spec = 2945 | 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 = 3019 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
|
||||
spec = 3020 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
|
||||
} else if (op->op1_type == IS_CV && (op->op2_type & (IS_CONST|IS_CV)) && !(op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) && !(op2_info & (MAY_BE_UNDEF|MAY_BE_REF))) {
|
||||
spec = 3099 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
|
||||
spec = 3100 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
|
||||
}
|
||||
break;
|
||||
case ZEND_IS_EQUAL:
|
||||
|
@ -65409,12 +65446,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 = 2794 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
|
||||
spec = 2795 | 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 = 2869 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
|
||||
spec = 2870 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
|
||||
}
|
||||
break;
|
||||
case ZEND_IS_NOT_EQUAL:
|
||||
|
@ -65425,12 +65462,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 = 2944 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
|
||||
spec = 2945 | 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 = 3019 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
|
||||
spec = 3020 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
|
||||
}
|
||||
break;
|
||||
case ZEND_IS_SMALLER:
|
||||
|
@ -65438,12 +65475,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 = 3104 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
|
||||
spec = 3105 | 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 = 3179 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
|
||||
spec = 3180 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
|
||||
}
|
||||
break;
|
||||
case ZEND_IS_SMALLER_OR_EQUAL:
|
||||
|
@ -65451,74 +65488,74 @@ 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 = 3254 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
|
||||
spec = 3255 | 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 = 3329 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
|
||||
spec = 3330 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
|
||||
}
|
||||
break;
|
||||
case ZEND_QM_ASSIGN:
|
||||
if (op1_info == MAY_BE_LONG) {
|
||||
spec = 3416 | SPEC_RULE_OP1;
|
||||
spec = 3417 | SPEC_RULE_OP1;
|
||||
} else if (op1_info == MAY_BE_DOUBLE) {
|
||||
spec = 3421 | SPEC_RULE_OP1;
|
||||
spec = 3422 | 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 = 3426 | SPEC_RULE_OP1;
|
||||
spec = 3427 | SPEC_RULE_OP1;
|
||||
}
|
||||
break;
|
||||
case ZEND_PRE_INC:
|
||||
if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
|
||||
spec = 3404 | SPEC_RULE_RETVAL;
|
||||
spec = 3405 | SPEC_RULE_RETVAL;
|
||||
} else if (op1_info == MAY_BE_LONG) {
|
||||
spec = 3406 | SPEC_RULE_RETVAL;
|
||||
spec = 3407 | SPEC_RULE_RETVAL;
|
||||
}
|
||||
break;
|
||||
case ZEND_PRE_DEC:
|
||||
if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
|
||||
spec = 3408 | SPEC_RULE_RETVAL;
|
||||
spec = 3409 | SPEC_RULE_RETVAL;
|
||||
} else if (op1_info == MAY_BE_LONG) {
|
||||
spec = 3410 | SPEC_RULE_RETVAL;
|
||||
spec = 3411 | SPEC_RULE_RETVAL;
|
||||
}
|
||||
break;
|
||||
case ZEND_POST_INC:
|
||||
if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
|
||||
spec = 3412;
|
||||
} else if (op1_info == MAY_BE_LONG) {
|
||||
spec = 3413;
|
||||
} else if (op1_info == MAY_BE_LONG) {
|
||||
spec = 3414;
|
||||
}
|
||||
break;
|
||||
case ZEND_POST_DEC:
|
||||
if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
|
||||
spec = 3414;
|
||||
} else if (op1_info == MAY_BE_LONG) {
|
||||
spec = 3415;
|
||||
} else if (op1_info == MAY_BE_LONG) {
|
||||
spec = 3416;
|
||||
}
|
||||
break;
|
||||
case ZEND_JMP:
|
||||
if (OP_JMP_ADDR(op, op->op1) > op) {
|
||||
spec = 2568;
|
||||
spec = 2569;
|
||||
}
|
||||
break;
|
||||
case ZEND_RECV:
|
||||
if (op->op2.num == MAY_BE_ANY) {
|
||||
spec = 2567;
|
||||
spec = 2568;
|
||||
}
|
||||
break;
|
||||
case ZEND_SEND_VAL:
|
||||
if (op->op1_type == IS_CONST && op->op2_type == IS_UNUSED && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1))) {
|
||||
spec = 3466;
|
||||
spec = 3467;
|
||||
}
|
||||
break;
|
||||
case ZEND_SEND_VAR_EX:
|
||||
if (op->op2_type == IS_UNUSED && op->op2.num <= MAX_ARG_FLAG_NUM && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
|
||||
spec = 3461 | SPEC_RULE_OP1;
|
||||
spec = 3462 | SPEC_RULE_OP1;
|
||||
}
|
||||
break;
|
||||
case ZEND_FE_FETCH_R:
|
||||
if (op->op2_type == IS_CV && (op1_info & (MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_ARRAY) {
|
||||
spec = 3468 | SPEC_RULE_RETVAL;
|
||||
spec = 3469 | SPEC_RULE_RETVAL;
|
||||
}
|
||||
break;
|
||||
case ZEND_FETCH_DIM_R:
|
||||
|
@ -65526,17 +65563,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 = 3431 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
|
||||
spec = 3432 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
|
||||
}
|
||||
break;
|
||||
case ZEND_SEND_VAL_EX:
|
||||
if (op->op2_type == IS_UNUSED && op->op2.num <= MAX_ARG_FLAG_NUM && op->op1_type == IS_CONST && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1))) {
|
||||
spec = 3467;
|
||||
spec = 3468;
|
||||
}
|
||||
break;
|
||||
case ZEND_SEND_VAR:
|
||||
if (op->op2_type == IS_UNUSED && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
|
||||
spec = 3456 | SPEC_RULE_OP1;
|
||||
spec = 3457 | SPEC_RULE_OP1;
|
||||
}
|
||||
break;
|
||||
case ZEND_BW_OR:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue