Skip to content

Commit 613a56d

Browse files
committed
Remove FREE_UNFETCHED concept
In master normal FREE_OPs work like FREE_UNFETCHED_OP used to, so there is no point in keeping this distinction anymore, it's just confusing.
1 parent c05bfa3 commit 613a56d

File tree

4 files changed

+32
-71
lines changed

4 files changed

+32
-71
lines changed

Zend/zend_execute.c

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -162,9 +162,6 @@ ZEND_API const zend_internal_function zend_pass_function = {
162162
zval_ptr_dtor_nogc(EX_VAR(var)); \
163163
}
164164

165-
#define FREE_UNFETCHED_OP(type, var) \
166-
FREE_OP(type, var)
167-
168165
#define FREE_OP_VAR_PTR(type, var) \
169166
FREE_OP(type, var)
170167

@@ -2903,7 +2900,7 @@ static zend_never_inline int zend_fetch_static_property_address_ex(zval **retval
29032900
if (EXPECTED((ce = CACHED_PTR(cache_slot)) == NULL)) {
29042901
ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
29052902
if (UNEXPECTED(ce == NULL)) {
2906-
FREE_UNFETCHED_OP(op1_type, opline->op1.var);
2903+
FREE_OP(op1_type, opline->op1.var);
29072904
return FAILURE;
29082905
}
29092906
if (UNEXPECTED(op1_type != IS_CONST)) {
@@ -2914,7 +2911,7 @@ static zend_never_inline int zend_fetch_static_property_address_ex(zval **retval
29142911
if (EXPECTED(op2_type == IS_UNUSED)) {
29152912
ce = zend_fetch_class(NULL, opline->op2.num);
29162913
if (UNEXPECTED(ce == NULL)) {
2917-
FREE_UNFETCHED_OP(op1_type, opline->op1.var);
2914+
FREE_OP(op1_type, opline->op1.var);
29182915
return FAILURE;
29192916
}
29202917
} else {

Zend/zend_vm_def.h

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1095,7 +1095,7 @@ ZEND_VM_HANDLER(29, ZEND_ASSIGN_STATIC_PROP_OP, ANY, ANY, OP)
10951095

10961096
if (UNEXPECTED(zend_fetch_static_property_address(&prop, &prop_info, (opline+1)->extended_value, BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS)) {
10971097
UNDEF_RESULT();
1098-
FREE_UNFETCHED_OP_DATA();
1098+
FREE_OP_DATA();
10991099
HANDLE_EXCEPTION();
11001100
}
11011101

@@ -1935,8 +1935,8 @@ ZEND_VM_COLD_HELPER(zend_use_tmp_in_write_context_helper, ANY, ANY)
19351935

19361936
SAVE_OPLINE();
19371937
zend_throw_error(NULL, "Cannot use temporary expression in write context");
1938-
FREE_UNFETCHED_OP2();
1939-
FREE_UNFETCHED_OP1();
1938+
FREE_OP2();
1939+
FREE_OP1();
19401940
ZVAL_UNDEF(EX_VAR(opline->result.var));
19411941
HANDLE_EXCEPTION();
19421942
}
@@ -1947,8 +1947,8 @@ ZEND_VM_COLD_HELPER(zend_use_undef_in_read_context_helper, ANY, ANY)
19471947

19481948
SAVE_OPLINE();
19491949
zend_throw_error(NULL, "Cannot use [] for reading");
1950-
FREE_UNFETCHED_OP2();
1951-
FREE_UNFETCHED_OP1();
1950+
FREE_OP2();
1951+
FREE_OP1();
19521952
ZVAL_UNDEF(EX_VAR(opline->result.var));
19531953
HANDLE_EXCEPTION();
19541954
}
@@ -2480,7 +2480,7 @@ ZEND_VM_HANDLER(25, ZEND_ASSIGN_STATIC_PROP, ANY, ANY, CACHE_SLOT, SPEC(OP_DATA=
24802480
SAVE_OPLINE();
24812481

24822482
if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
2483-
FREE_UNFETCHED_OP_DATA();
2483+
FREE_OP_DATA();
24842484
UNDEF_RESULT();
24852485
HANDLE_EXCEPTION();
24862486
}
@@ -2578,7 +2578,7 @@ ZEND_VM_C_LABEL(try_assign_dim_array):
25782578
} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
25792579
if (OP2_TYPE == IS_UNUSED) {
25802580
zend_use_new_element_for_string();
2581-
FREE_UNFETCHED_OP_DATA();
2581+
FREE_OP_DATA();
25822582
UNDEF_RESULT();
25832583
} else {
25842584
dim = GET_OP2_ZVAL_PTR(BP_VAR_R);
@@ -2591,7 +2591,7 @@ ZEND_VM_C_LABEL(try_assign_dim_array):
25912591
&& ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
25922592
&& !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
25932593
dim = GET_OP2_ZVAL_PTR(BP_VAR_R);
2594-
FREE_UNFETCHED_OP_DATA();
2594+
FREE_OP_DATA();
25952595
UNDEF_RESULT();
25962596
} else {
25972597
ZVAL_ARR(object_ptr, zend_new_array(8));
@@ -2601,7 +2601,7 @@ ZEND_VM_C_LABEL(try_assign_dim_array):
26012601
zend_use_scalar_as_array();
26022602
dim = GET_OP2_ZVAL_PTR(BP_VAR_R);
26032603
ZEND_VM_C_LABEL(assign_dim_error):
2604-
FREE_UNFETCHED_OP_DATA();
2604+
FREE_OP_DATA();
26052605
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26062606
ZVAL_NULL(EX_VAR(opline->result.var));
26072607
}
@@ -2716,7 +2716,7 @@ ZEND_VM_HANDLER(33, ZEND_ASSIGN_STATIC_PROP_REF, ANY, ANY, CACHE_SLOT|SRC)
27162716
SAVE_OPLINE();
27172717

27182718
if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value & ~ZEND_RETURNS_FUNCTION, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
2719-
FREE_UNFETCHED_OP_DATA();
2719+
FREE_OP_DATA();
27202720
UNDEF_RESULT();
27212721
HANDLE_EXCEPTION();
27222722
}
@@ -3521,7 +3521,7 @@ ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, UNUSED|CLASS_FETCH|CONST|VAR,
35213521
if (UNEXPECTED(ce == NULL)) {
35223522
ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
35233523
if (UNEXPECTED(ce == NULL)) {
3524-
FREE_UNFETCHED_OP2();
3524+
FREE_OP2();
35253525
HANDLE_EXCEPTION();
35263526
}
35273527
if (OP2_TYPE != IS_CONST) {
@@ -3531,7 +3531,7 @@ ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, UNUSED|CLASS_FETCH|CONST|VAR,
35313531
} else if (OP1_TYPE == IS_UNUSED) {
35323532
ce = zend_fetch_class(NULL, opline->op1.num);
35333533
if (UNEXPECTED(ce == NULL)) {
3534-
FREE_UNFETCHED_OP2();
3534+
FREE_OP2();
35353535
HANDLE_EXCEPTION();
35363536
}
35373537
} else {
@@ -4519,7 +4519,7 @@ ZEND_VM_COLD_HELPER(zend_cannot_pass_by_ref_helper, ANY, ANY)
45194519

45204520
SAVE_OPLINE();
45214521
zend_throw_error(NULL, "Cannot pass parameter %d by reference", arg_num);
4522-
FREE_UNFETCHED_OP1();
4522+
FREE_OP1();
45234523
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
45244524
ZVAL_UNDEF(arg);
45254525
HANDLE_EXCEPTION();
@@ -4929,7 +4929,7 @@ ZEND_VM_HANDLER(119, ZEND_SEND_ARRAY, ANY, ANY, NUM)
49294929
}
49304930
}
49314931
zend_type_error("call_user_func_array(): Argument #2 ($args) must be of type array, %s given", zend_zval_type_name(args));
4932-
FREE_UNFETCHED_OP2();
4932+
FREE_OP2();
49334933
FREE_OP1();
49344934
HANDLE_EXCEPTION();
49354935
} else {
@@ -5947,15 +5947,15 @@ ZEND_VM_COLD_HANDLER(179, ZEND_UNSET_STATIC_PROP, ANY, ANY, CACHE_SLOT)
59475947
if (UNEXPECTED(ce == NULL)) {
59485948
ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
59495949
if (UNEXPECTED(ce == NULL)) {
5950-
FREE_UNFETCHED_OP1();
5950+
FREE_OP1();
59515951
HANDLE_EXCEPTION();
59525952
}
59535953
/*CACHE_PTR(opline->extended_value, ce);*/
59545954
}
59555955
} else if (OP2_TYPE == IS_UNUSED) {
59565956
ce = zend_fetch_class(NULL, opline->op2.num);
59575957
if (UNEXPECTED(ce == NULL)) {
5958-
FREE_UNFETCHED_OP1();
5958+
FREE_OP1();
59595959
HANDLE_EXCEPTION();
59605960
}
59615961
} else {
@@ -7497,8 +7497,8 @@ ZEND_VM_COLD_HELPER(zend_yield_in_closed_generator_helper, ANY, ANY)
74977497

74987498
SAVE_OPLINE();
74997499
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
7500-
FREE_UNFETCHED_OP2();
7501-
FREE_UNFETCHED_OP1();
7500+
FREE_OP2();
7501+
FREE_OP1();
75027502
UNDEF_RESULT();
75037503
HANDLE_EXCEPTION();
75047504
}

Zend/zend_vm_execute.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -765,7 +765,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HAN
765765

766766
if (UNEXPECTED(zend_fetch_static_property_address(&prop, &prop_info, (opline+1)->extended_value, BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS)) {
767767
UNDEF_RESULT();
768-
FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
768+
FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
769769
HANDLE_EXCEPTION();
770770
}
771771

@@ -903,8 +903,8 @@ static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_us
903903

904904
SAVE_OPLINE();
905905
zend_throw_error(NULL, "Cannot use temporary expression in write context");
906-
FREE_UNFETCHED_OP(opline->op2_type, opline->op2.var);
907-
FREE_UNFETCHED_OP(opline->op1_type, opline->op1.var);
906+
FREE_OP(opline->op2_type, opline->op2.var);
907+
FREE_OP(opline->op1_type, opline->op1.var);
908908
ZVAL_UNDEF(EX_VAR(opline->result.var));
909909
HANDLE_EXCEPTION();
910910
}
@@ -915,8 +915,8 @@ static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_us
915915

916916
SAVE_OPLINE();
917917
zend_throw_error(NULL, "Cannot use [] for reading");
918-
FREE_UNFETCHED_OP(opline->op2_type, opline->op2.var);
919-
FREE_UNFETCHED_OP(opline->op1_type, opline->op1.var);
918+
FREE_OP(opline->op2_type, opline->op2.var);
919+
FREE_OP(opline->op1_type, opline->op1.var);
920920
ZVAL_UNDEF(EX_VAR(opline->result.var));
921921
HANDLE_EXCEPTION();
922922
}
@@ -1054,7 +1054,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HA
10541054
SAVE_OPLINE();
10551055

10561056
if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value & ~ZEND_RETURNS_FUNCTION, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
1057-
FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
1057+
FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
10581058
UNDEF_RESULT();
10591059
HANDLE_EXCEPTION();
10601060
}
@@ -1794,7 +1794,7 @@ static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_ca
17941794

17951795
SAVE_OPLINE();
17961796
zend_throw_error(NULL, "Cannot pass parameter %d by reference", arg_num);
1797-
FREE_UNFETCHED_OP(opline->op1_type, opline->op1.var);
1797+
FREE_OP(opline->op1_type, opline->op1.var);
17981798
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
17991799
ZVAL_UNDEF(arg);
18001800
HANDLE_EXCEPTION();
@@ -1968,7 +1968,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_O
19681968
}
19691969
}
19701970
zend_type_error("call_user_func_array(): Argument #2 ($args) must be of type array, %s given", zend_zval_type_name(args));
1971-
FREE_UNFETCHED_OP(opline->op2_type, opline->op2.var);
1971+
FREE_OP(opline->op2_type, opline->op2.var);
19721972
FREE_OP(opline->op1_type, opline->op1.var);
19731973
HANDLE_EXCEPTION();
19741974
} else {
@@ -2228,15 +2228,15 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP
22282228
if (UNEXPECTED(ce == NULL)) {
22292229
ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
22302230
if (UNEXPECTED(ce == NULL)) {
2231-
FREE_UNFETCHED_OP(opline->op1_type, opline->op1.var);
2231+
FREE_OP(opline->op1_type, opline->op1.var);
22322232
HANDLE_EXCEPTION();
22332233
}
22342234
/*CACHE_PTR(opline->extended_value, ce);*/
22352235
}
22362236
} else if (opline->op2_type == IS_UNUSED) {
22372237
ce = zend_fetch_class(NULL, opline->op2.num);
22382238
if (UNEXPECTED(ce == NULL)) {
2239-
FREE_UNFETCHED_OP(opline->op1_type, opline->op1.var);
2239+
FREE_OP(opline->op1_type, opline->op1.var);
22402240
HANDLE_EXCEPTION();
22412241
}
22422242
} else {
@@ -2621,8 +2621,8 @@ static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_yi
26212621

26222622
SAVE_OPLINE();
26232623
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
2624-
FREE_UNFETCHED_OP(opline->op2_type, opline->op2.var);
2625-
FREE_UNFETCHED_OP(opline->op1_type, opline->op1.var);
2624+
FREE_OP(opline->op2_type, opline->op2.var);
2625+
FREE_OP(opline->op1_type, opline->op1.var);
26262626
UNDEF_RESULT();
26272627
HANDLE_EXCEPTION();
26282628
}

Zend/zend_vm_gen.php

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -494,28 +494,6 @@
494494
"TMPVARCV" => "???",
495495
);
496496

497-
$op1_free_unfetched = array(
498-
"ANY" => "FREE_UNFETCHED_OP(opline->op1_type, opline->op1.var)",
499-
"TMP" => "zval_ptr_dtor_nogc(EX_VAR(opline->op1.var))",
500-
"VAR" => "zval_ptr_dtor_nogc(EX_VAR(opline->op1.var))",
501-
"CONST" => "",
502-
"UNUSED" => "",
503-
"CV" => "",
504-
"TMPVAR" => "zval_ptr_dtor_nogc(EX_VAR(opline->op1.var))",
505-
"TMPVARCV" => "???",
506-
);
507-
508-
$op2_free_unfetched = array(
509-
"ANY" => "FREE_UNFETCHED_OP(opline->op2_type, opline->op2.var)",
510-
"TMP" => "zval_ptr_dtor_nogc(EX_VAR(opline->op2.var))",
511-
"VAR" => "zval_ptr_dtor_nogc(EX_VAR(opline->op2.var))",
512-
"CONST" => "",
513-
"UNUSED" => "",
514-
"CV" => "",
515-
"TMPVAR" => "zval_ptr_dtor_nogc(EX_VAR(opline->op2.var))",
516-
"TMPVARCV" => "???",
517-
);
518-
519497
$op_data_type = array(
520498
"ANY" => "(opline+1)->op1_type",
521499
"TMP" => "IS_TMP_VAR",
@@ -582,17 +560,6 @@
582560
"TMPVARCV" => "???",
583561
);
584562

585-
$op_data_free_unfetched = array(
586-
"ANY" => "FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var)",
587-
"TMP" => "zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var))",
588-
"VAR" => "zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var))",
589-
"CONST" => "",
590-
"UNUSED" => "",
591-
"CV" => "",
592-
"TMPVAR" => "zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var))",
593-
"TMPVARCV" => "???",
594-
);
595-
596563
$list = array(); // list of opcode handlers and helpers in original order
597564
$opcodes = array(); // opcode handlers by code
598565
$helpers = array(); // opcode helpers by name
@@ -786,8 +753,6 @@ function gen_code($f, $spec, $kind, $code, $op1, $op2, $name, $extra_spec=null)
786753
"/FREE_OP2_IF_VAR\(\)/" => $op2_free_op_if_var[$op2],
787754
"/FREE_OP1_VAR_PTR\(\)/" => $op1_free_op_var_ptr[$op1],
788755
"/FREE_OP2_VAR_PTR\(\)/" => $op2_free_op_var_ptr[$op2],
789-
"/FREE_UNFETCHED_OP1\(\)/" => $op1_free_unfetched[$op1],
790-
"/FREE_UNFETCHED_OP2\(\)/" => $op2_free_unfetched[$op2],
791756
"/\!ZEND_VM_SPEC/m" => ($op1!="ANY"||$op2!="ANY")?"0":"1",
792757
"/ZEND_VM_SPEC/m" => ($op1!="ANY"||$op2!="ANY")?"1":"0",
793758
"/ZEND_VM_C_LABEL\(\s*([A-Za-z_]*)\s*\)/m" => "\\1".(($spec && $kind != ZEND_VM_KIND_CALL)?("_SPEC".$prefix[$op1].$prefix[$op2].extra_spec_name($extra_spec)):""),
@@ -802,7 +767,6 @@ function gen_code($f, $spec, $kind, $code, $op1, $op2, $name, $extra_spec=null)
802767
"/GET_OP_DATA_ZVAL_PTR_PTR\(([^)]*)\)/" => $op_data_get_zval_ptr_ptr[isset($extra_spec['OP_DATA']) ? $extra_spec['OP_DATA'] : "ANY"],
803768
"/FREE_OP_DATA\(\)/" => $op_data_free_op[isset($extra_spec['OP_DATA']) ? $extra_spec['OP_DATA'] : "ANY"],
804769
"/FREE_OP_DATA_VAR_PTR\(\)/" => $op_data_free_op_var_ptr[isset($extra_spec['OP_DATA']) ? $extra_spec['OP_DATA'] : "ANY"],
805-
"/FREE_UNFETCHED_OP_DATA\(\)/" => $op_data_free_unfetched[isset($extra_spec['OP_DATA']) ? $extra_spec['OP_DATA'] : "ANY"],
806770
"/RETURN_VALUE_USED\(opline\)/" => isset($extra_spec['RETVAL']) ? $extra_spec['RETVAL'] : "RETURN_VALUE_USED(opline)",
807771
"/arg_num <= MAX_ARG_FLAG_NUM/" => isset($extra_spec['QUICK_ARG']) ? $extra_spec['QUICK_ARG'] : "arg_num <= MAX_ARG_FLAG_NUM",
808772
"/ZEND_VM_SMART_BRANCH\(\s*([^,)]*)\s*,\s*([^)]*)\s*\)/" => isset($extra_spec['SMART_BRANCH']) ?

0 commit comments

Comments
 (0)