Skip to content

Commit 5507d8b

Browse files
committed
wip
1 parent ad49aa4 commit 5507d8b

File tree

5 files changed

+138
-103
lines changed

5 files changed

+138
-103
lines changed

Zend/zend_compile.c

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7683,12 +7683,9 @@ void zend_compile_array(znode *result, zend_ast *ast) /* {{{ */
76837683
zend_compile_expr(&value_node, value_ast);
76847684
if (i == 0) {
76857685
opline = zend_emit_op_tmp(result, ZEND_INIT_ARRAY, &value_node, NULL);
7686-
opline->extended_value = list->children << ZEND_ARRAY_SIZE_SHIFT; //fixme
7687-
opline->extended_value |= ZEND_ARRAY_DISPATCH_TO_UNPACK;
7688-
} else {
7689-
opline = zend_emit_op(NULL, ZEND_ADD_ARRAY_UNPACK, &value_node, NULL);
7690-
SET_NODE(opline->result, result);
76917686
}
7687+
opline = zend_emit_op(NULL, ZEND_ADD_ARRAY_UNPACK, &value_node, NULL);
7688+
SET_NODE(opline->result, result);
76927689
continue;
76937690
}
76947691

Zend/zend_compile.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -995,8 +995,7 @@ static zend_always_inline int zend_check_arg_send_type(const zend_function *zf,
995995

996996
#define ZEND_ARRAY_ELEMENT_REF (1<<0)
997997
#define ZEND_ARRAY_NOT_PACKED (1<<1)
998-
#define ZEND_ARRAY_DISPATCH_TO_UNPACK (1<<2)
999-
#define ZEND_ARRAY_SIZE_SHIFT 3
998+
#define ZEND_ARRAY_SIZE_SHIFT 2
1000999

10011000
/* For "use" AST nodes and the seen symbol table */
10021001
#define ZEND_SYMBOL_CLASS (1<<0)

Zend/zend_vm_def.h

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5592,6 +5592,7 @@ ZEND_VM_HANDLER(208, ZEND_ADD_ARRAY_UNPACK, ANY, ANY)
55925592
SAVE_OPLINE();
55935593
op1 = GET_OP1_ZVAL_PTR(BP_VAR_R);
55945594

5595+
SEPARATE_ARRAY(EX_VAR(opline->result.var));
55955596
ZEND_VM_C_LABEL(add_again):
55965597
if (EXPECTED(Z_TYPE_P(op1) == IS_ARRAY)) {
55975598
HashTable *ht = Z_ARRVAL_P(op1);
@@ -5687,7 +5688,7 @@ ZEND_VM_C_LABEL(add_again):
56875688
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
56885689
}
56895690

5690-
ZEND_VM_HANDLER(71, ZEND_INIT_ARRAY, CONST|TMP|VAR|CV, CONST|TMPVAR|UNUSED|NEXT|CV, ARRAY_INIT|REF)
5691+
ZEND_VM_HANDLER(71, ZEND_INIT_ARRAY, CONST|TMP|VAR|CV|UNUSED, CONST|TMPVAR|UNUSED|NEXT|CV, ARRAY_INIT|REF)
56915692
{
56925693
zval *array;
56935694
uint32_t size;
@@ -5701,11 +5702,7 @@ ZEND_VM_HANDLER(71, ZEND_INIT_ARRAY, CONST|TMP|VAR|CV, CONST|TMPVAR|UNUSED|NEXT|
57015702
if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
57025703
zend_hash_real_init_mixed(Z_ARRVAL_P(array));
57035704
}
5704-
if (opline->extended_value & ZEND_ARRAY_DISPATCH_TO_UNPACK) {
5705-
ZEND_VM_DISPATCH_TO_HANDLER(ZEND_ADD_ARRAY_UNPACK);
5706-
} else {
5707-
ZEND_VM_DISPATCH_TO_HANDLER(ZEND_ADD_ARRAY_ELEMENT);
5708-
}
5705+
ZEND_VM_DISPATCH_TO_HANDLER(ZEND_ADD_ARRAY_ELEMENT);
57095706
} else {
57105707
ZVAL_EMPTY_ARRAY(array);
57115708
ZEND_VM_NEXT_OPCODE();

0 commit comments

Comments
 (0)