Skip to content

Commit da0d246

Browse files
committed
Drop FREE_OP_VAR_PTR() distinction
FREE_OP_VAR_PTR() is like FREE_OP(), but only frees VAR, rather than VARs and TMPs. I don't think this distinction makes sense anymore, as opcodes using FREE_OP_VAR_PTR() generally only accept VAR or CV. For the cases where other op types are accepted and only freeing VAR is desired we already have FREE_OP_IF_VAR(). This drops FREE_OP_VAR_PTR(), leaving only FREE_OP() and FREE_OP_IF_VAR().
1 parent fdbc745 commit da0d246

File tree

4 files changed

+60
-152
lines changed

4 files changed

+60
-152
lines changed

Zend/zend_execute.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -168,9 +168,6 @@ ZEND_API const zend_internal_function zend_pass_function = {
168168
zval_ptr_dtor_nogc(EX_VAR(var)); \
169169
}
170170

171-
#define FREE_OP_VAR_PTR(type, var) \
172-
FREE_OP(type, var)
173-
174171
#define CV_DEF_OF(i) (EX(func)->op_array.vars[i])
175172

176173
#define ZEND_VM_STACK_PAGE_SLOTS (16 * 1024) /* should be a power of 2 */

Zend/zend_vm_def.h

Lines changed: 31 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1093,7 +1093,7 @@ ZEND_VM_C_LABEL(assign_op_object):
10931093

10941094
FREE_OP_DATA();
10951095
FREE_OP2();
1096-
FREE_OP1_VAR_PTR();
1096+
FREE_OP1();
10971097
/* assign_obj has two opcodes! */
10981098
ZEND_VM_NEXT_OPCODE_EX(1, 2);
10991099
}
@@ -1229,7 +1229,7 @@ ZEND_VM_C_LABEL(assign_dim_op_ret_null):
12291229
}
12301230

12311231
FREE_OP2();
1232-
FREE_OP1_VAR_PTR();
1232+
FREE_OP1();
12331233
ZEND_VM_NEXT_OPCODE_EX(1, 2);
12341234
}
12351235

@@ -1260,7 +1260,7 @@ ZEND_VM_HANDLER(26, ZEND_ASSIGN_OP, VAR|CV, CONST|TMPVAR|CV, OP)
12601260
}
12611261

12621262
FREE_OP2();
1263-
FREE_OP1_VAR_PTR();
1263+
FREE_OP1();
12641264
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12651265
}
12661266

@@ -1328,7 +1328,7 @@ ZEND_VM_C_LABEL(pre_incdec_object):
13281328
} while (0);
13291329

13301330
FREE_OP2();
1331-
FREE_OP1_VAR_PTR();
1331+
FREE_OP1();
13321332
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
13331333
}
13341334

@@ -1400,7 +1400,7 @@ ZEND_VM_C_LABEL(post_incdec_object):
14001400
} while (0);
14011401

14021402
FREE_OP2();
1403-
FREE_OP1_VAR_PTR();
1403+
FREE_OP1();
14041404
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14051405
}
14061406

@@ -1490,7 +1490,7 @@ ZEND_VM_HELPER(zend_pre_inc_helper, VAR|CV, ANY)
14901490
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
14911491
}
14921492

1493-
FREE_OP1_VAR_PTR();
1493+
FREE_OP1();
14941494
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14951495
}
14961496

@@ -1542,7 +1542,7 @@ ZEND_VM_HELPER(zend_pre_dec_helper, VAR|CV, ANY)
15421542
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
15431543
}
15441544

1545-
FREE_OP1_VAR_PTR();
1545+
FREE_OP1();
15461546
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15471547
}
15481548

@@ -1592,7 +1592,7 @@ ZEND_VM_HELPER(zend_post_inc_helper, VAR|CV, ANY)
15921592
increment_function(var_ptr);
15931593
} while (0);
15941594

1595-
FREE_OP1_VAR_PTR();
1595+
FREE_OP1();
15961596
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15971597
}
15981598

@@ -1640,7 +1640,7 @@ ZEND_VM_HELPER(zend_post_dec_helper, VAR|CV, ANY)
16401640
decrement_function(var_ptr);
16411641
} while (0);
16421642

1643-
FREE_OP1_VAR_PTR();
1643+
FREE_OP1();
16441644
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16451645
}
16461646

@@ -2485,7 +2485,7 @@ ZEND_VM_C_LABEL(free_and_exit_assign_obj):
24852485
FREE_OP_DATA();
24862486
ZEND_VM_C_LABEL(exit_assign_obj):
24872487
FREE_OP2();
2488-
FREE_OP1_VAR_PTR();
2488+
FREE_OP1();
24892489
/* assign_obj has two opcodes! */
24902490
ZEND_VM_NEXT_OPCODE_EX(1, 2);
24912491
}
@@ -2634,7 +2634,7 @@ ZEND_VM_C_LABEL(assign_dim_error):
26342634
if (OP2_TYPE != IS_UNUSED) {
26352635
FREE_OP2();
26362636
}
2637-
FREE_OP1_VAR_PTR();
2637+
FREE_OP1();
26382638
/* assign_dim has two opcodes! */
26392639
ZEND_VM_NEXT_OPCODE_EX(1, 2);
26402640
}
@@ -2653,7 +2653,7 @@ ZEND_VM_HANDLER(22, ZEND_ASSIGN, VAR|CV, CONST|TMP|VAR|CV, SPEC(RETVAL))
26532653
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26542654
ZVAL_COPY(EX_VAR(opline->result.var), value);
26552655
}
2656-
FREE_OP1_VAR_PTR();
2656+
FREE_OP1();
26572657
/* zend_assign_to_variable() always takes care of op2, never free it! */
26582658

26592659
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -2688,8 +2688,8 @@ ZEND_VM_HANDLER(30, ZEND_ASSIGN_REF, VAR|CV, VAR|CV, SRC)
26882688
ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
26892689
}
26902690

2691-
FREE_OP2_VAR_PTR();
2692-
FREE_OP1_VAR_PTR();
2691+
FREE_OP2();
2692+
FREE_OP1();
26932693
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26942694
}
26952695

@@ -2723,9 +2723,9 @@ ZEND_VM_HANDLER(32, ZEND_ASSIGN_OBJ_REF, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CA
27232723
zend_assign_to_property_reference(container, OP1_TYPE, property, OP2_TYPE, value_ptr OPLINE_CC EXECUTE_DATA_CC);
27242724
}
27252725

2726-
FREE_OP1_VAR_PTR();
2726+
FREE_OP1();
27272727
FREE_OP2();
2728-
FREE_OP_DATA_VAR_PTR();
2728+
FREE_OP_DATA();
27292729
ZEND_VM_NEXT_OPCODE_EX(1, 2);
27302730
}
27312731

@@ -2760,7 +2760,7 @@ ZEND_VM_HANDLER(33, ZEND_ASSIGN_STATIC_PROP_REF, ANY, ANY, CACHE_SLOT|SRC)
27602760
ZVAL_COPY(EX_VAR(opline->result.var), prop);
27612761
}
27622762

2763-
FREE_OP_DATA_VAR_PTR();
2763+
FREE_OP_DATA();
27642764
ZEND_VM_NEXT_OPCODE_EX(1, 2);
27652765
}
27662766

@@ -4374,7 +4374,7 @@ ZEND_VM_COLD_CONST_HANDLER(111, ZEND_RETURN_BY_REF, CONST|TMP|VAR|CV, ANY, SRC,
43744374
if (return_value) {
43754375
ZVAL_NEW_REF(return_value, retval_ptr);
43764376
} else {
4377-
FREE_OP1_VAR_PTR();
4377+
FREE_OP1();
43784378
}
43794379
break;
43804380
}
@@ -4389,7 +4389,7 @@ ZEND_VM_COLD_CONST_HANDLER(111, ZEND_RETURN_BY_REF, CONST|TMP|VAR|CV, ANY, SRC,
43894389
ZVAL_REF(return_value, Z_REF_P(retval_ptr));
43904390
}
43914391

4392-
FREE_OP1_VAR_PTR();
4392+
FREE_OP1();
43934393
} while (0);
43944394

43954395
ZEND_OBSERVER_FCALL_END(execute_data, return_value);
@@ -4854,7 +4854,7 @@ ZEND_VM_HANDLER(67, ZEND_SEND_REF, VAR|CV, CONST|UNUSED|NUM)
48544854
}
48554855
ZVAL_REF(arg, Z_REF_P(varptr));
48564856

4857-
FREE_OP1_VAR_PTR();
4857+
FREE_OP1();
48584858
ZEND_VM_NEXT_OPCODE();
48594859
}
48604860

@@ -4891,7 +4891,7 @@ ZEND_VM_C_LABEL(send_var_by_ref):
48914891
}
48924892
ZVAL_REF(arg, Z_REF_P(varptr));
48934893

4894-
FREE_OP1_VAR_PTR();
4894+
FREE_OP1();
48954895
ZEND_VM_NEXT_OPCODE();
48964896
}
48974897

@@ -4984,7 +4984,7 @@ ZEND_VM_HOT_HANDLER(185, ZEND_SEND_FUNC_ARG, VAR, CONST|UNUSED|NUM)
49844984
}
49854985
ZVAL_REF(arg, Z_REF_P(varptr));
49864986

4987-
FREE_OP1_VAR_PTR();
4987+
FREE_OP1();
49884988
ZEND_VM_NEXT_OPCODE();
49894989
}
49904990

@@ -5910,7 +5910,7 @@ ZEND_VM_HANDLER(72, ZEND_ADD_ARRAY_ELEMENT, CONST|TMP|VAR|CV, CONST|TMPVAR|UNUSE
59105910
} else {
59115911
ZVAL_MAKE_REF_EX(expr_ptr, 2);
59125912
}
5913-
FREE_OP1_VAR_PTR();
5913+
FREE_OP1();
59145914
} else {
59155915
expr_ptr = GET_OP1_ZVAL_PTR(BP_VAR_R);
59165916
if (OP1_TYPE == IS_TMP_VAR) {
@@ -6496,7 +6496,7 @@ ZEND_VM_C_LABEL(num_index_dim):
64966496
} while (0);
64976497

64986498
FREE_OP2();
6499-
FREE_OP1_VAR_PTR();
6499+
FREE_OP1();
65006500
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
65016501
}
65026502

@@ -6541,7 +6541,7 @@ ZEND_VM_HANDLER(76, ZEND_UNSET_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_S
65416541
} while (0);
65426542

65436543
FREE_OP2();
6544-
FREE_OP1_VAR_PTR();
6544+
FREE_OP1();
65456545
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
65466546
}
65476547

@@ -6650,9 +6650,7 @@ ZEND_VM_COLD_CONST_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR)
66506650
}
66516651
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
66526652

6653-
if (OP1_TYPE == IS_VAR) {
6654-
FREE_OP1_VAR_PTR();
6655-
}
6653+
FREE_OP1_IF_VAR();
66566654
ZEND_VM_NEXT_OPCODE();
66576655
} else if (OP1_TYPE != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
66586656
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
@@ -6679,21 +6677,16 @@ ZEND_VM_COLD_CONST_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR)
66796677
properties = Z_OBJPROP_P(array_ptr);
66806678
if (zend_hash_num_elements(properties) == 0) {
66816679
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
6682-
FREE_OP1_VAR_PTR();
6680+
FREE_OP1_IF_VAR();
66836681
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
66846682
}
66856683

66866684
Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
6687-
FREE_OP1_VAR_PTR();
6685+
FREE_OP1_IF_VAR();
66886686
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
66896687
} else {
66906688
bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
6691-
6692-
if (OP1_TYPE == IS_VAR) {
6693-
FREE_OP1_VAR_PTR();
6694-
} else {
6695-
FREE_OP1();
6696-
}
6689+
FREE_OP1();
66976690
if (UNEXPECTED(EG(exception))) {
66986691
HANDLE_EXCEPTION();
66996692
} else if (is_empty) {
@@ -6706,11 +6699,7 @@ ZEND_VM_COLD_CONST_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR)
67066699
zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_type_name(array_ptr));
67076700
ZVAL_UNDEF(EX_VAR(opline->result.var));
67086701
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
6709-
if (OP1_TYPE == IS_VAR) {
6710-
FREE_OP1_VAR_PTR();
6711-
} else {
6712-
FREE_OP1();
6713-
}
6702+
FREE_OP1();
67146703
ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
67156704
}
67166705
}
@@ -8033,7 +8022,7 @@ ZEND_VM_HANDLER(160, ZEND_YIELD, CONST|TMP|VAR|CV|UNUSED, CONST|TMPVAR|CV|UNUSED
80338022
ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
80348023
} while (0);
80358024

8036-
FREE_OP1_VAR_PTR();
8025+
FREE_OP1();
80378026
}
80388027
} else {
80398028
zval *value = GET_OP1_ZVAL_PTR(BP_VAR_R);

0 commit comments

Comments
 (0)