summaryrefslogtreecommitdiff
path: root/Zend
diff options
context:
space:
mode:
Diffstat (limited to 'Zend')
-rw-r--r--Zend/RFCs/001.txt136
-rw-r--r--Zend/RFCs/002.txt169
-rw-r--r--Zend/RFCs/003.txt72
-rw-r--r--Zend/ZEND_CHANGES1166
-rw-r--r--Zend/Zend.m4137
-rw-r--r--Zend/acinclude.m42
-rw-r--r--Zend/build.mk6
-rw-r--r--Zend/configure.ac (renamed from Zend/configure.in)16
-rw-r--r--Zend/tests/007.phpt2
-rw-r--r--Zend/tests/009.phpt9
-rw-r--r--Zend/tests/024.phpt8
-rw-r--r--Zend/tests/026.phpt2
-rw-r--r--Zend/tests/033.phpt2
-rw-r--r--Zend/tests/ErrorException_getSeverity.phpt1261
-rw-r--r--Zend/tests/abstract_inheritance_001.phpt12
-rw-r--r--Zend/tests/abstract_inheritance_002.phpt12
-rw-r--r--Zend/tests/abstract_inheritance_003.phpt12
-rw-r--r--Zend/tests/anonymous_func_001.phpt21
-rw-r--r--Zend/tests/anonymous_func_002.phpt5
-rw-r--r--Zend/tests/anonymous_func_003.phpt3
-rw-r--r--Zend/tests/assert/bug70208.phpt3
-rw-r--r--Zend/tests/assert/indirect_var_access_misoptimization.phpt2
-rw-r--r--Zend/tests/assign_dim_obj_null_return.phpt4
-rw-r--r--Zend/tests/bug19859.phpt2
-rw-r--r--Zend/tests/bug20240.phpt2
-rw-r--r--Zend/tests/bug21478.phpt1
-rw-r--r--Zend/tests/bug21888.phpt4
-rw-r--r--Zend/tests/bug22725.phpt2
-rw-r--r--Zend/tests/bug22836.phpt2
-rw-r--r--Zend/tests/bug24436.phpt2
-rw-r--r--Zend/tests/bug24635.phpt2
-rw-r--r--Zend/tests/bug24699.phpt2
-rw-r--r--Zend/tests/bug24884.phpt2
-rw-r--r--Zend/tests/bug26697.phpt11
-rw-r--r--Zend/tests/bug26698.phpt8
-rw-r--r--Zend/tests/bug28444.phpt12
-rw-r--r--Zend/tests/bug31098.phpt4
-rw-r--r--Zend/tests/bug31102.phpt13
-rw-r--r--Zend/tests/bug33116.phpt5
-rw-r--r--Zend/tests/bug35470.phpt2
-rw-r--r--Zend/tests/bug36303.phpt2
-rw-r--r--Zend/tests/bug37138.phpt2
-rw-r--r--Zend/tests/bug37811.phpt2
-rw-r--r--Zend/tests/bug39003.phpt5
-rw-r--r--Zend/tests/bug39304.phpt6
-rw-r--r--Zend/tests/bug39304_2_4.phpt14
-rw-r--r--Zend/tests/bug39542.phpt4
-rw-r--r--Zend/tests/bug42798.phpt4
-rw-r--r--Zend/tests/bug43344_1.phpt8
-rw-r--r--Zend/tests/bug43450.phpt2
-rw-r--r--Zend/tests/bug44660.phpt12
-rw-r--r--Zend/tests/bug46665.phpt9
-rw-r--r--Zend/tests/bug46811.phpt2
-rw-r--r--Zend/tests/bug47109.phpt2
-rw-r--r--Zend/tests/bug47572.phpt2
-rw-r--r--Zend/tests/bug47714.phpt6
-rw-r--r--Zend/tests/bug48533.phpt8
-rw-r--r--Zend/tests/bug48693.phpt7
-rw-r--r--Zend/tests/bug48770.phpt2
-rw-r--r--Zend/tests/bug48770_2.phpt4
-rw-r--r--Zend/tests/bug48770_3.phpt4
-rw-r--r--Zend/tests/bug49893.phpt2
-rw-r--r--Zend/tests/bug49908.phpt16
-rw-r--r--Zend/tests/bug52237.phpt2
-rw-r--r--Zend/tests/bug54262.phpt2
-rw-r--r--Zend/tests/bug54585.phpt4
-rw-r--r--Zend/tests/bug55007.phpt4
-rw-r--r--Zend/tests/bug55509.phpt142
-rw-r--r--Zend/tests/bug60598.phpt4
-rw-r--r--Zend/tests/bug61011.phpt5
-rw-r--r--Zend/tests/bug61970.phpt16
-rw-r--r--Zend/tests/bug61970_1.phpt15
-rw-r--r--Zend/tests/bug61970_2.phpt19
-rw-r--r--Zend/tests/bug62358.phpt2
-rw-r--r--Zend/tests/bug62907.phpt4
-rw-r--r--Zend/tests/bug63305.phpt7
-rw-r--r--Zend/tests/bug64720.phpt9
-rw-r--r--Zend/tests/bug64979.phpt60
-rw-r--r--Zend/tests/bug65254.phpt5
-rw-r--r--Zend/tests/bug67858.phpt2
-rw-r--r--Zend/tests/bug68652.phpt11
-rw-r--r--Zend/tests/bug69755.phpt2
-rw-r--r--Zend/tests/bug69788.phpt2
-rw-r--r--Zend/tests/bug70805.phpt2
-rw-r--r--Zend/tests/bug70805_1.phpt2
-rw-r--r--Zend/tests/bug70805_2.phpt2
-rw-r--r--Zend/tests/bug71163.phpt4
-rw-r--r--Zend/tests/bug71474.phpt46
-rw-r--r--Zend/tests/bug72911.phpt4
-rw-r--r--Zend/tests/bug72918.phpt44
-rw-r--r--Zend/tests/bug72944.phpt2
-rw-r--r--Zend/tests/bug73163.phpt2
-rw-r--r--Zend/tests/bug73181.phpt3
-rw-r--r--Zend/tests/bug73987.phpt18
-rw-r--r--Zend/tests/bug73987_1.phpt18
-rw-r--r--Zend/tests/bug73987_2.phpt20
-rw-r--r--Zend/tests/bug73987_3.phpt20
-rw-r--r--Zend/tests/bug74053.phpt43
-rw-r--r--Zend/tests/bug74188.phpt14
-rw-r--r--Zend/tests/bug74269.phpt17
-rw-r--r--Zend/tests/bug74810.phpt25
-rw-r--r--Zend/tests/bug74836.phpt33
-rw-r--r--Zend/tests/bug76337.phpt12
-rw-r--r--Zend/tests/call_user_func_002.phpt6
-rw-r--r--Zend/tests/call_user_func_003.phpt6
-rw-r--r--Zend/tests/cast_to_object.phptbin1106 -> 1112 bytes
-rw-r--r--Zend/tests/catch.phpt6
-rw-r--r--Zend/tests/class_alias_007.phpt4
-rw-r--r--Zend/tests/closure_025.phpt3
-rw-r--r--Zend/tests/constants_002.phpt2
-rw-r--r--Zend/tests/constants_005.phpt2
-rw-r--r--Zend/tests/dereference_014.phpt4
-rw-r--r--Zend/tests/dtor_scope.phpt2
-rw-r--r--Zend/tests/each_001.phpt2
-rw-r--r--Zend/tests/each_002.phpt1
-rw-r--r--Zend/tests/each_003.phpt1
-rw-r--r--Zend/tests/exception_012.phpt2
-rw-r--r--Zend/tests/fe_fetch_dtor_exception.phpt22
-rw-r--r--Zend/tests/foreach_018.phpt20
-rw-r--r--Zend/tests/foreach_empty_loop_leak.phpt23
-rw-r--r--Zend/tests/generators/errors/count_error.phpt18
-rw-r--r--Zend/tests/instanceof.phpt4
-rw-r--r--Zend/tests/instanceof_001.phpt2
-rw-r--r--Zend/tests/is_a.phpt4
-rw-r--r--Zend/tests/isset_003.phpt2
-rw-r--r--Zend/tests/isset_003_2_4.phpt42
-rw-r--r--Zend/tests/ns_041.phpt2
-rw-r--r--Zend/tests/ns_069.inc2
-rw-r--r--Zend/tests/ns_069.phpt4
-rw-r--r--Zend/tests/ns_076.phpt6
-rw-r--r--Zend/tests/ns_088.phpt2
-rw-r--r--Zend/tests/ns_094.phpt2
-rw-r--r--Zend/tests/ns_trailing_comma_01.phpt30
-rw-r--r--Zend/tests/ns_trailing_comma_02.phpt52
-rw-r--r--Zend/tests/ns_trailing_comma_error_01.phpt8
-rw-r--r--Zend/tests/ns_trailing_comma_error_02.phpt8
-rw-r--r--Zend/tests/ns_trailing_comma_error_03.phpt8
-rw-r--r--Zend/tests/ns_trailing_comma_error_04.phpt8
-rw-r--r--Zend/tests/ns_trailing_comma_error_05.phpt8
-rw-r--r--Zend/tests/ns_trailing_comma_error_06.phpt8
-rw-r--r--Zend/tests/ns_trailing_comma_error_07.phpt8
-rw-r--r--Zend/tests/ns_trailing_comma_error_08.phpt8
-rw-r--r--Zend/tests/object_array_cast.phpt12
-rw-r--r--Zend/tests/object_types/invalid_default_value.phpt10
-rw-r--r--Zend/tests/object_types/missing_return_type_inheritance_in_class.phpt15
-rw-r--r--Zend/tests/object_types/missing_return_type_inheritance_in_interface.phpt15
-rw-r--r--Zend/tests/object_types/return_type_in_class.phpt26
-rw-r--r--Zend/tests/object_types/return_type_in_function.phpt16
-rw-r--r--Zend/tests/object_types/return_type_inheritance_in_class.phpt26
-rw-r--r--Zend/tests/object_types/return_type_inheritance_in_interface.phpt26
-rw-r--r--Zend/tests/object_types/return_type_reflection.phpt31
-rw-r--r--Zend/tests/object_types/type_hint_in_class_method.phpt19
-rw-r--r--Zend/tests/object_types/type_hint_in_function.phpt17
-rw-r--r--Zend/tests/object_types/type_hint_reflection.phpt31
-rw-r--r--Zend/tests/objects_009.phpt3
-rw-r--r--Zend/tests/overloaded_func_001.phpt2
-rw-r--r--Zend/tests/overloaded_func_002.phpt2
-rw-r--r--Zend/tests/parse_str_with_unpack.phpt3
-rw-r--r--Zend/tests/php_errormsg_misoptimization.phpt2
-rw-r--r--Zend/tests/return_types/internal_functions001.phpt13
-rw-r--r--Zend/tests/return_types/internal_functions002.phpt12
-rw-r--r--Zend/tests/return_types/reflection001.phpt7
-rw-r--r--Zend/tests/settype_object.phptbin1126 -> 1132 bytes
-rw-r--r--Zend/tests/str_offset_002.phpt24
-rw-r--r--Zend/tests/switch_on_numeric_strings.phpt29
-rw-r--r--Zend/tests/temporary_cleaning_013.phpt311
-rw-r--r--Zend/tests/temporary_cleaning_014.phpt15
-rw-r--r--Zend/tests/temporary_cleaning_015.phpt17
-rw-r--r--Zend/tests/temporary_cleaning_016.phpt16
-rw-r--r--Zend/tests/this_in_mb_parse_str.phpt2
-rw-r--r--Zend/tests/this_in_parse_str.phpt2
-rw-r--r--Zend/tests/traits/bug60217b.phpt2
-rw-r--r--Zend/tests/traits/bug69579.phpt2
-rw-r--r--Zend/tests/traits/bug74607.phpt22
-rw-r--r--Zend/tests/traits/bug74607a.phpt22
-rw-r--r--Zend/tests/traits/bug75607.phpt25
-rw-r--r--Zend/tests/traits/bug75607a.phpt36
-rw-r--r--Zend/tests/traits/bugs/abstract-methods05.phpt2
-rw-r--r--Zend/tests/traits/bugs/case-sensitive.phpt46
-rw-r--r--Zend/tests/traits/static_001.phpt42
-rw-r--r--Zend/tests/traits/static_002.phpt44
-rw-r--r--Zend/tests/traits/static_003.phpt52
-rw-r--r--Zend/tests/traits/static_004.phpt42
-rw-r--r--Zend/tests/traits/static_forward_static_call.phpt54
-rw-r--r--Zend/tests/traits/static_get_called_class.phpt46
-rw-r--r--Zend/tests/traits/trait_constant_001.phpt72
-rw-r--r--Zend/tests/traits/trait_constant_002.phpt52
-rw-r--r--Zend/tests/type_declarations/nullable_null.phpt11
-rw-r--r--Zend/tests/type_declarations/parameter_type_variance.phpt34
-rw-r--r--Zend/tests/unset_cast_deprecated.phpt14
-rw-r--r--Zend/tests/unset_cv05.phpt7
-rw-r--r--Zend/tests/unset_cv07.phpt18
-rw-r--r--Zend/tests/unused_shared_static_variables.phpt16
-rw-r--r--Zend/tests/use_function/conditional_function_declaration.phpt6
-rw-r--r--Zend/tests/use_late_binding_conflict.phpt13
-rw-r--r--Zend/tests/use_no_eval_conflict.phpt13
-rw-r--r--Zend/tests/varSyntax/propertyOfStringError.phpt2
-rw-r--r--Zend/tests/zend_signed_multiply-64bit-2.phpt149
-rw-r--r--Zend/tests/zend_signed_multiply-64bit.phpt2
-rw-r--r--Zend/zend.c190
-rw-r--r--Zend/zend.h28
-rw-r--r--Zend/zend_API.c273
-rw-r--r--Zend/zend_API.h216
-rw-r--r--Zend/zend_alloc.c19
-rw-r--r--Zend/zend_alloc.h10
-rw-r--r--Zend/zend_alloc_sizes.h10
-rw-r--r--Zend/zend_arena.h2
-rw-r--r--Zend/zend_ast.c18
-rw-r--r--Zend/zend_ast.h10
-rw-r--r--Zend/zend_bitset.h10
-rw-r--r--Zend/zend_build.h10
-rw-r--r--Zend/zend_builtin_functions.c383
-rw-r--r--Zend/zend_builtin_functions.h2
-rw-r--r--Zend/zend_closures.c17
-rw-r--r--Zend/zend_closures.h2
-rw-r--r--Zend/zend_compile.c632
-rw-r--r--Zend/zend_compile.h96
-rw-r--r--Zend/zend_config.nw.h2
-rw-r--r--Zend/zend_config.w32.h2
-rw-r--r--Zend/zend_constants.c32
-rw-r--r--Zend/zend_constants.h5
-rw-r--r--Zend/zend_default_classes.c2
-rw-r--r--Zend/zend_dtrace.c9
-rw-r--r--Zend/zend_dtrace.h10
-rw-r--r--Zend/zend_errors.h2
-rw-r--r--Zend/zend_exceptions.c104
-rw-r--r--Zend/zend_exceptions.h14
-rw-r--r--Zend/zend_execute.c858
-rw-r--r--Zend/zend_execute.h20
-rw-r--r--Zend/zend_execute_API.c304
-rw-r--r--Zend/zend_extensions.c21
-rw-r--r--Zend/zend_extensions.h5
-rw-r--r--Zend/zend_float.c10
-rw-r--r--Zend/zend_float.h10
-rw-r--r--Zend/zend_gc.c148
-rw-r--r--Zend/zend_gc.h25
-rw-r--r--Zend/zend_generators.c18
-rw-r--r--Zend/zend_generators.h2
-rw-r--r--Zend/zend_globals.h16
-rw-r--r--Zend/zend_globals_macros.h2
-rw-r--r--Zend/zend_hash.c203
-rw-r--r--Zend/zend_hash.h80
-rw-r--r--Zend/zend_highlight.c2
-rw-r--r--Zend/zend_highlight.h2
-rw-r--r--Zend/zend_inheritance.c174
-rw-r--r--Zend/zend_inheritance.h2
-rw-r--r--Zend/zend_ini.c16
-rw-r--r--Zend/zend_ini.h16
-rw-r--r--Zend/zend_ini_parser.y2
-rw-r--r--Zend/zend_ini_scanner.h2
-rw-r--r--Zend/zend_interfaces.c46
-rw-r--r--Zend/zend_interfaces.h3
-rw-r--r--Zend/zend_istdiostream.h2
-rw-r--r--Zend/zend_iterators.c2
-rw-r--r--Zend/zend_iterators.h2
-rw-r--r--Zend/zend_language_parser.y25
-rw-r--r--Zend/zend_language_scanner.c263
-rw-r--r--Zend/zend_language_scanner.h4
-rw-r--r--Zend/zend_language_scanner.l3
-rw-r--r--Zend/zend_list.c2
-rw-r--r--Zend/zend_list.h2
-rw-r--r--Zend/zend_llist.c2
-rw-r--r--Zend/zend_llist.h2
-rw-r--r--Zend/zend_long.h2
-rw-r--r--Zend/zend_modules.h4
-rw-r--r--Zend/zend_multibyte.c4
-rw-r--r--Zend/zend_multibyte.h4
-rw-r--r--Zend/zend_multiply.h43
-rw-r--r--Zend/zend_object_handlers.c53
-rw-r--r--Zend/zend_object_handlers.h2
-rw-r--r--Zend/zend_objects.c28
-rw-r--r--Zend/zend_objects.h2
-rw-r--r--Zend/zend_objects_API.c116
-rw-r--r--Zend/zend_objects_API.h18
-rw-r--r--Zend/zend_opcode.c105
-rw-r--r--Zend/zend_operators.c157
-rw-r--r--Zend/zend_operators.h75
-rw-r--r--Zend/zend_portability.h73
-rw-r--r--Zend/zend_ptr_stack.c2
-rw-r--r--Zend/zend_ptr_stack.h2
-rw-r--r--Zend/zend_range_check.h2
-rw-r--r--Zend/zend_signal.c4
-rw-r--r--Zend/zend_signal.h2
-rw-r--r--Zend/zend_smart_str.c17
-rw-r--r--Zend/zend_smart_str.h28
-rw-r--r--Zend/zend_smart_str_public.h10
-rw-r--r--Zend/zend_smart_string.h149
-rw-r--r--Zend/zend_smart_string_public.h43
-rw-r--r--Zend/zend_sort.c4
-rw-r--r--Zend/zend_sort.h2
-rw-r--r--Zend/zend_sprintf.c2
-rw-r--r--Zend/zend_stack.c2
-rw-r--r--Zend/zend_stack.h2
-rw-r--r--Zend/zend_stream.c19
-rw-r--r--Zend/zend_stream.h10
-rw-r--r--Zend/zend_string.c286
-rw-r--r--Zend/zend_string.h73
-rw-r--r--Zend/zend_strtod.h10
-rw-r--r--Zend/zend_strtod_int.h9
-rw-r--r--Zend/zend_ts_hash.c4
-rw-r--r--Zend/zend_ts_hash.h6
-rw-r--r--Zend/zend_type_info.h2
-rw-r--r--Zend/zend_types.h134
-rw-r--r--Zend/zend_variables.h39
-rw-r--r--Zend/zend_virtual_cwd.c217
-rw-r--r--Zend/zend_virtual_cwd.h61
-rw-r--r--Zend/zend_vm.h13
-rw-r--r--Zend/zend_vm_def.h1840
-rw-r--r--Zend/zend_vm_execute.h24652
-rw-r--r--Zend/zend_vm_execute.skl34
-rw-r--r--Zend/zend_vm_gen.php683
-rw-r--r--Zend/zend_vm_opcodes.c30
-rw-r--r--Zend/zend_vm_opcodes.h21
313 files changed, 24148 insertions, 15161 deletions
diff --git a/Zend/RFCs/001.txt b/Zend/RFCs/001.txt
deleted file mode 100644
index bf1d847b97..0000000000
--- a/Zend/RFCs/001.txt
+++ /dev/null
@@ -1,136 +0,0 @@
-Revamped object model using object handles
-===========================================
-
-Background
-----------
-
-In the Zend Engine 1.0 (and its predecessor the PHP 3 scripting
-engine) the object model's design is that instantiated objects are
-language values. This means that when programmers are performing
-operations, such variable assignment and passing parameters to
-functions, objects are handled very similarly to the way other
-primitive types are handled such as integers and strings.
-Semantically this means that the whole object is being copied. The
-approach Java takes is different where one refers to objects by handle
-and not by value (one can think of a handle as an objects' ID).
-
-Need
-----
-
-Unfortunately, the approach taken up to now has severely limited the
-Zend Engine's object oriented model, both feature and simplicity
-wise. One of the main problems with the former approach is that object
-instantiation and duplication is very hard to control, a problem which
-can not only lead to inefficient development but also often to strange
-run-time behavior. Changing the object model to a handle oriented
-model will allow the addressing of many needs such as destructors,
-de-referencing method return values, tight control of object
-duplication and more.
-
-Overview
---------
-
-The proposed object model is very much influenced by the Java
-model. In general, when you create a new object you will be getting a
-handle to the object instead of the object itself. When this handle is
-sent to functions, assigned and copied it is only the handle which is
-copied/sent/assigned. The object itself is never copied nor
-duplicated. This results in all handles of this object to always point
-at the same object making it a very consistent solution and saving
-unnecessary duplication and confusing behavior.
-
-Functionality
--------------
-
-After this change the basic use of objects will be almost identical to
-previous versions of the scripting engine. However, you won't bump
-into awkward and confusing copying & destructing of objects. In order
-to create and use a new object instance you will do the following:
-$object = new MyClass(); $object->method();
-
-The previous code will assign $object the handle of a new instance of
-the class MyClass and call one of its methods.
-
-
-Consider the following code:
-
-1 class MyClass
-2 {
-3 function setMember($value)
-4 {
-5 $this->member = $value;
-6 }
-7
-8 function getMember()
-9 {
-10 return $this->member;
-11 }
-12 }
-13
-14 function foo($obj)
-15 {
-16 $obj->setMember("foo");
-17 }
-18
-19 $object = new MyClass();
-20 $object->setMember("bar");
-21 foo($object);
-22 print $object->getMember();
-
-Without the new Java-like handles, at line 20 the objects' data member
-member is set to the string value of "bar". Because of the internal
-representation of objects in the Zend Engine 1.0, the object is marked
-as a reference, and when it is sent by value to the function foo, it
-is duplicated (!). Therefore, the call to foo() on line 21 will
-result in the $obj->setMember("foo") call being called on a duplicate
-of $object. Line 22 will then result in "bar" being printed.
-
-This is how the scripting engine has worked until today. Most
-developers are probably unaware of the fact that they aren't always
-talking to the same object but often duplicates; others may have
-realized this can usually be solved by always passing objects by
-reference (unless a replica is actually desired, which is uncommon).
-
-The new object model will allow for a much more intuitive
-implementation of the code. On line 21, the object's handle (ID) is
-passed to foo() by value. Inside foo(), the object is fetched
-according to this handle and, therefore, the setMember() method is
-called on the originally instantiated object and not a copy. Line 22
-will therefore result in "foo" being printed. This approach gives
-developers tighter control of when objects are created and duplicated.
-An additional not-as-important benefit is that the object handle will
-be passed to foo() by value, which most probably will also save
-unnecessary duplication of the value containing the ID itself and thus
-additionally improving run-time performance.
-
-This was just a simple description of why the new object model solves
-awkward behavior and makes object handling much easier, intuitive and
-efficient. The importance of this change goes far beyond what is
-mentioned in this section as you will see in further sections which
-describe new features with a majority of them being based on this
-change.
-
-Compatibility Notes
---------------------
-
-Many PHP programmers aren't even aware of the copying quirks of the
-current object model and, therefore, there is a relatively good chance
-that the amount of PHP applications that will work out of the box or
-after a very small amount of modifications would be high.
-
-To simplify migration, version 2.0 will support an optional
-'auto-clone' feature, which will perform a cloning of the object
-whenever it would have been copied in version 1.0. Optionally, it
-will also be possible to request that the engine will emit an E_NOTICE
-message whenever such an automatic clone occurs, in order to allow
-developers to gradually migrate to the version 2.0-style behavior
-(without automatic clones).
-
-Dependencies
-------------
-
-The new object model is not dependent on other features. Many of the
-other Zend Engine 2.0 features, such as the $foo->bar()->barbara()
-syntax, destructors and others completely rely on this new object
-model.
-
diff --git a/Zend/RFCs/002.txt b/Zend/RFCs/002.txt
deleted file mode 100644
index 7d7cb885d8..0000000000
--- a/Zend/RFCs/002.txt
+++ /dev/null
@@ -1,169 +0,0 @@
-Title: Zend 2.0 Namespaces
-Version: $Id$
-Status: declined
-Maintainer: Stig S. Bakken <ssb@php.net>
-Created: 2001-09-08
-Modified: 2001-09-08
-
-
-1. Background/Need
-==================
-
-PHP and Zend 1.0 have come to a point where a lot of reusable code is
-being written; from simple functions and classes to entire application
-frameworks. It is becoming increasingly difficult to avoid symbol
-name collisions with the current scoping methods.
-
-The symbol scopes available in Zend 1.0 are the global scope, the
-class scope and the function scope. All scopes but classes may
-contain variables, only the class and global scopes may contain
-functions, while only the global scope may contain constants and
-classes. This means that all of Zend 1.0's scoping methods are
-inherently limited for solving symbol name collision problems.
-
-
-2. Overview
-===========
-
-Namespaces in Zend 2.0 provide a way to manage the symbol collision
-problem by making it possible to define multiple symbol tables able to
-contain all types of symbols. Zend will get the notion of a current
-namespace, defaulting to the current global one. The current name
-space may be changed on a file-by-file basis. Symbols in other name
-spaces than the current one may be referenced using a new namespace
-operator. It will be possible to "import" symbols from one namespace
-into another.
-
-
-3. Functionality
-================
-
-3.1. Namespace Syntax
-=====================
-
-The namespace operator ":" is used to refer to symbols in other
-namespaces than the current one:
-
-Class: Namespace:class
-Function: Namespace:function
-Static method: Namespace:class::method
-Variable: $Namespace:variable
-Constant: Namespace:CONSTANT
-Class variable: $Namespace:class::variable
-
-To refer to symbols in the global namespace, symbols are prefixed with
-only the namespace operator:
-
-Class: :class
-Function: :function
-Static method: :class::method
-Variable: $:variable
-Constant: :CONSTANT
-Class variable: $:class::variable
-
-Note: $:variable will effectively be just another syntax for
-$GLOBALS['variable'].
-
-A namespace may have a name containing a ":", it is always the last
-":" character in the symbol qualifier that is the actual namespace
-operator:
-
-Class: Name:Space:class
-Function: Name:Space:function
-Static method: Name:Space:class::method
-Variable: $Name:Space:variable
-Constant: Name:Space:CONSTANT
-Class variable: $Name:Space:class::variable
-
-(Here, the ":" between "Name" and "Space" is part of the name, it is
-the one after "Space" that is the namespace operator.)
-
-
-3.2. Defining Namespaces
-========================
-
-Individual files may define a namespace that will apply to the entire
-file. If no "namespace" operator occurs in the file, it will be in
-the global namespace:
-
- 1 namespace HTML;
- 2
- 3 class Form {
- 4 function Form() {
- 5 // constructor
- 6 }
- 7 // ...
- 8 }
-
-Or with the "nested" name syntax:
-
- 1 namespace HTML:Form;
- 2
- 3 class Image {
- 4 var $src;
- 5 function Image($src) {
- 6 $this->src = $src;
- 7 }
- 8 // ...
- 9 }
-
-Code executed within the "HTML" namespace may refer to the Form class
-as just "Form". Code executed from within other namespaces has to
-refer to it as "HTML:Form". The "namespace" statement must occur
-before any other statements in the file.
-
-# [ssb 2001-09-08]:
-# Should it be possible to "add" symbols to a namespace by including a
-# second file with the same namespace statement?
-
-
-3.3. Importing Symbols
-======================
-
-It is possible to import symbols from another namespace into the
-current one with the "import" statement:
-
- import * from HTML; // all symbols
-
- import Form from HTML; // single symbols
-
- import Form,Table from HTML; // multiple symbols
-
-There is a potential for name clashes between symols of different
-types that have the same qualifier syntax. These are resolved in this
-order: class, function, constant.
-
-Optionally, the symbol type may be explicitly given to import (as
-"class", "function", "variable" or "constant"):
-
- import class Form from HTML;
-
-And finally, you may import all symbols of a given type:
-
- import constant * from HTML:Table;
-
-The namespace with its symbols must already be defined before using
-"import".
-
-
-4. Compatibility Notes
-======================
-
-Old code that does not take advantage of namespaces will run without
-modifications.
-
-
-5. Dependencies
-===============
-
-The class variable syntax depends on this class variables being
-implemented in the new ZE2 object model.
-
-
-6. Acknowledgements
-===================
-
-Andi Gutmans <andi@zend.com> and Zeev Suraski <zeev@zend.com> for
-initial ZE2 namespaces proposal
-
-Dean Hall <php@apt7.com> for the initial symbol qualification syntax
diff --git a/Zend/RFCs/003.txt b/Zend/RFCs/003.txt
deleted file mode 100644
index ac042183d4..0000000000
--- a/Zend/RFCs/003.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-Title: Loose type requirements for functions
-Version: $Id$
-Status: draft
-Maintainer: Brian Moon <brianm@dealnews.com>
-Created: 2001-09-17
-Modified: 2001-09-17
-
-
-1. Background/Need
-==================
-
-Many internal functions of PHP will reject parameters because of their
-type (the array and variable function come to mind). For userland
-this is not an easy task as there is no uniform way to do it. An
-addition to the engine for requiring loose types would allow
-developers to know that the data passed to their functions are of the
-correct type and reduce the need for duplicating the same code in
-every function to check for the type of data.
-
-
-2. Overview
-===========
-
-Loose typing mostly means evaluating the contents of the variable and
-not the type of the variable itself. The requirements for this would
-and should work much like several of the is_* functions do now.
-
-The typing of parameters would be optional and those not typed would
-simply continue to be treated as they are now.
-
-3. Functionality
-================
-
-3.1. Allowed Types
-==================
-
-Only loose types should be needed to ensure the data is usable by the
-function. Duplicating the functionallity of is_scalar, is_resource,
-is_array and is_object should give developers all the information they
-need to use a variable correctly.
-
-3.2. Syntax
-===========
-
-The current function syntax should be expanded to allow typing of
-variables inline in a C style.
-
-function foo ($var){
-}
-
-could be changed to require an array such as:
-
-function foo (array $var){
-}
-
-3.3. Errors
-===========
-
-Mis-matches in type should be reported as fatal errors and should halt
-the execution of a script as that function cannot be run and code
-following could not reliably run.
-
-
-4. Compatibility Notes
-======================
-
-Old code that does not take advantage of this will run without
-modifications.
-
-
-
-
diff --git a/Zend/ZEND_CHANGES b/Zend/ZEND_CHANGES
deleted file mode 100644
index 94e164c290..0000000000
--- a/Zend/ZEND_CHANGES
+++ /dev/null
@@ -1,1166 +0,0 @@
-Changes in the Zend Engine 2.0
-
- * New Object Model.
-
- The Zend Engine's handling of objects has been completely
- changed in order to allow for new features, but also to increase
- its performance.
-
- Objects were handled in previous versions like primitive types
- (for instance integers and strings). The drawback of this method
- is, that semantically the whole object was copied when a
- variable was assigned or parameters were passed to a method. The
- new approach refers to objects by handle and not by value (one
- can think of a handle as an object's ID).
-
- Many PHP programmers aren't even aware of the copying quirks of
- the old object model and, therefore, there is a relatively good
- chance that the amount of PHP applications that will work out of
- the box or after a very small amount of modifications would be
- high.
-
- * $this
-
- Unlike in Zend Engine 1 the pseudo variable $this cannot be
- exchanged in Zend Engine 2. You can of course modify or work with
- an object by using $this but you cannot replace $this with another
- object to change the original object.
-
- Example:
-
- <?php
- class Foo {
- function replace($other)
- {
- $this = $other;
- }
- }
-
- $object = new Foo;
- $object->prop = 'Hello';
-
- $other = new Foo;
- $other->prop = 'Bye';
-
- $object->replace($other);
-
- print $object->prop; // still shows 'Hello'
-
- ?>
-
- Zend Engine 2.0 will issue a compile error, if an assignment
- to $this is found.
-
- * Private and Protected Members.
-
- The Zend Engine 2.0 introduces private and protected member
- variables. Note that for performance reasons no error message is
- emitted in case of an illegal access to a private or protectecd
- member variable.
-
- Example:
-
- <?php
- class MyClass {
- private $Hello = "Hello, World!\n";
- protected $Bar = "Hello, Foo!\n";
- protected $Foo = "Hello, Bar!\n";
-
- function printHello() {
- print "MyClass::printHello() " . $this->Hello;
- print "MyClass::printHello() " . $this->Bar;
- print "MyClass::printHello() " . $this->Foo;
- }
- }
-
- class MyClass2 extends MyClass {
- protected $Foo;
-
- function printHello() {
- MyClass::printHello(); /* Should print */
- print "MyClass2::printHello() " . $this->Hello; /* Shouldn't print out anything */
- print "MyClass2::printHello() " . $this->Bar; /* Shouldn't print (not declared)*/
- print "MyClass2::printHello() " . $this->Foo; /* Should print */
- }
- }
-
- $obj = new MyClass();
- print $obj->Hello; /* Shouldn't print out anything */
- print $obj->Bar; /* Shouldn't print out anything */
- print $obj->Foo; /* Shouldn't print out anything */
- $obj->printHello(); /* Should print */
-
- $obj = new MyClass2();
- print $obj->Hello; /* Shouldn't print out anything */
- print $obj->Bar; /* Shouldn't print out anything */
- print $obj->Foo; /* Shouldn't print out anything */
- $obj->printHello();
- ?>
-
- Protected member variables can be accessed in classes extending the
- class they are declared in, whereas private member variables can
- only be accessed by the class they belong to.
-
- * Private and protected methods.
-
- The Zend Engine 2.0 introduces private and protected methods.
-
- Example:
-
- <?php
- class Foo {
- private function aPrivateMethod() {
- echo "Foo::aPrivateMethod() called.\n";
- }
-
- protected function aProtectedMethod() {
- echo "Foo::aProtectedMethod() called.\n";
- $this->aPrivateMethod();
- }
- }
-
- class Bar extends Foo {
- public function aPublicMethod() {
- echo "Bar::aPublicMethod() called.\n";
- $this->aProtectedMethod();
- }
- }
-
- $o = new Bar;
- $o->aPublicMethod();
- ?>
-
- Old code that has no user-defined classes or functions named
- 'public', 'protected' or 'private' should run without modifications.
-
- * Abstract Classes and Methods.
-
- The Zend Engine 2.0 introduces abstract classes and methods. An
- abstract method only declares the method's signature and does not
- provide an implementation. A class that contains abstract methods
- needs to be declared abstract.
-
- Example:
-
- <?php
- abstract class AbstractClass {
- abstract public function test();
- }
-
- class ImplementedClass extends AbstractClass {
- public function test() {
- echo "ImplementedClass::test() called.\n";
- }
- }
-
- $o = new ImplementedClass;
- $o->test();
- ?>
-
- Classes that do not have abstract methods can be declared abstract
- to prevent them from being instantiated.
-
- Old code that has no user-defined classes or functions named
- 'abstract' should run without modifications.
-
- * Interfaces.
-
- The Zend Engine 2.0 introduces interfaces. A class may implement
- an arbitrary list of interfaces.
-
- Example:
-
- <?php
- interface Printable {
- public function dump();
- }
-
- class PrintableExample implements Printable {
- public function dump() {
- // ...
- }
- }
- ?>
-
- Old code that has no user-defined classes or functions named
- 'interface' or 'implements' should run without modifications.
-
- An interface may extend one or more base interfaces (but not
- implement them). Neither a class nor an interface can inherit
- methods of the same name from different root interfaces.
-
- Interfaces may contain abstract static methods.
-
- Example:
-
- <?php
- interface Printable {
- function dump();
- }
-
- interface Streamable extends Printable {
- function writeToStream();
- static function readFromStream();
- }
-
- class PrintableExample implements Streamable {
- public function dump() {
- // ...
- }
- function writeToStream() {
- // ...
- }
- static function readFromStream() {
- // ...
- }
- }
- ?>
-
- A class that does not implement all interface methods must be
- declared as an abstract class.
-
- * Class Type Hints.
-
- While remaining loosely typed the Zend Engine 2.0 introduces the
- ability to use class type hints to declare the expected class of
- objects that are passed as parameters to a method.
-
- Example:
-
- <?php
- interface Foo {
- function a(Foo $foo);
- }
-
- interface Bar {
- function b(Bar $bar);
- }
-
- class FooBar implements Foo, Bar {
- function a(Foo $foo) {
- // ...
- }
-
- function b(Bar $bar) {
- // ...
- }
- }
-
- $a = new FooBar;
- $b = new FooBar;
-
- $a->a($b);
- $a->b($b);
- ?>
-
- These class type hints are not checked upon compilation, as would
- be the case in a typed language, but during runtime.
-
- This means that
-
- function foo(ClassName $object) {
- // ...
- }
-
- is equivalent to
-
- function foo($object) {
- if (!($object instanceof ClassName)) {
- die('Argument 1 must be an instance of ClassName');
- }
- }
-
- This syntax only applies to objects/classes, not built-in types.
-
- * Final methods and classes.
-
- The Zend Engine 2.0 introduces the "final" keyword to declare
- final methods. Those cannot be overridden by sub-classes.
-
- Example:
-
- <?php
- class Foo {
- final function bar() {
- // ...
- }
- }
- ?>
-
- It is furthermore possible to make a class final. Doing this
- prevents a class from being specialized (it cannot be inherited
- by another class). There's no need to declare the methods of
- a final class themselves as final.
-
- Example:
-
- <?php
- final class Foo {
- // class definition
- }
- // the next line is impossible
- // class Bork extends Foo {}
- ?>
-
- Properties cannot be final. See per-class constants below.
-
- Old code that has no user-defined classes or functions named
- 'final' should run without modifications.
-
- * Object Cloning.
-
- The Zend Engine 1.0 offered no way a user could decide what copy
- constructor to run when an object is duplicated. During
- duplication, the Zend Engine 1.0 did a bitwise copy making an
- identical replica of all the object's properties.
-
- Creating a copy of an object with fully replicated properties is
- not always the wanted behavior. A good example of the need for
- copy constructors, is if you have an object which represents a
- GTK window and the object holds the resource of this GTK window,
- when you create a duplicate you might want to create a new
- window with the same properties and have the new object hold the
- resource of the new window. Another example is if your object
- holds a reference to another object which it uses and when you
- replicate the parent object you want to create a new instance of
- this other object so that the replica has its own separate copy.
-
- An object copy is created by using the clone operator.
-
- Example:
-
- <?php
- $copy_of_object = clone $object;
- ?>
-
- When the developer asks to create a new copy of an object, the
- Zend Engine will check if a __clone() method has been defined or
- not. If not, it will call a default __clone() which will copy
- all of the object's properties. If a __clone() method is
- defined, then it will be responsible to set the necessary
- properties in the created object. For convenience, the engine
- ensures, that the clone will be initialized with all of the
- properties from the source object, so that developers can start
- with a by-value replica of the source object, and only override
- properties that need to be changed.
-
- Example:
- <?php
- class MyCloneable {
- static $id = 0;
-
- function MyCloneable() {
- $this->id = self::$id++;
- }
-
- function __clone() {
- $this->address = 'New York';
- $this->id = self::$id++;
- }
- }
-
- $obj = new MyCloneable();
-
- $obj->name = 'Hello';
- $obj->address = 'Tel-Aviv';
-
- $obj_clone = clone $obj;
-
- print $obj->id . "\n";
- print $obj->name . "\n";
- print $obj->address . "\n";
-
- print $obj_clone->id . "\n";
- print $obj_clone->name . "\n";
- print $obj_clone->address . "\n";
- ?>
-
- * Unified Constructors.
-
- The Zend Engine allows developers to declare constructor methods
- for classes. Classes which have a constructor method call this
- method on each newly-created object, so it is suitable for any
- initialization that the object may need before it can be used.
-
- With the Zend Engine 1.0, constructor methods were class methods
- that had the same name as the class itself. Since it is very
- common to call parent constructors from derived classes, the way
- the Zend Engine 1.0 worked made it a bit cumbersome to move
- classes around in a large class hierarchy. If a class is moved
- to reside under a different parent, the constructor name of that
- parent changes as well, and the code in the derived class that
- calls the parent constructor has to be modified.
-
- The Zend Engine 2.0 introduces a standard way of declaring
- constructor methods by calling them by the name __construct().
-
- Example:
-
- <?php
- class BaseClass {
- function __construct() {
- print "In BaseClass constructor\n";
- }
- }
-
- class SubClass extends BaseClass {
- function __construct() {
- parent::__construct();
- print "In SubClass constructor\n";
- }
- }
-
- $obj = new BaseClass();
- $obj = new SubClass();
- ?>
-
- For backwards compatibility, if the Zend Engine 2.0 cannot find
- a __construct() function for a given class, it will search for
- the old-style constructor function, by the name of the class.
- Effectively, it means that the only case that would have
- compatibility issues is if the class had a method named
- __construct() which was used for different semantics.
-
- * Destructors.
-
- Having the ability to define destructors for objects can be very
- useful. Destructors can log messages for debugging, close
- database connections and do other clean-up work.
-
- No mechanism for object destructors existed in the Zend Engine
- 1.0, although PHP had already support for registering functions
- which should be run on request shutdown.
-
- The Zend Engine 2.0 introduces a destructor concept similar to
- that of other object-oriented languages, such as Java: When the
- last reference to an object is destroyed the object's
- destructor, which is a class method name __destruct() that
- receives no parameters, is called before the object is freed
- from memory.
-
- Example:
-
- <?php
- class MyDestructableClass {
- function __construct() {
- print "In constructor\n";
- $this->name = 'MyDestructableClass';
- }
-
- function __destruct() {
- print 'Destroying ' . $this->name . "\n";
- }
- }
-
- $obj = new MyDestructableClass();
- ?>
-
- Like constructors, parent destructors will not be called
- implicitly by the engine. In order to run a parent destructor,
- one would have to explicitly call parent::__destruct() in the
- destructor body.
-
- * Constants.
-
- The Zend Engine 2.0 introduces per-class constants.
-
- Example:
-
- <?php
- class Foo {
- const constant = 'constant';
- }
-
- echo 'Foo::constant = ' . Foo::constant . "\n";
- ?>
-
- Old code that has no user-defined classes or functions
- named 'const' will run without modifications.
-
- * Exceptions.
-
- The Zend Engine 1.0 had no exception handling. The Zend Engine 2.0
- introduces a exception model similar to that of other programming
- languages. But there is no catch all and no finally clause.
-
- Old code that has no user-defined classes or functions 'catch',
- 'throw' and 'try' will run without modifications.
-
- Exceptions can be rethrown in catch blocks. Also it is possible to
- have multiple catch blocks. In that case the caught exception is
- compared with the classtype of each catch block from top to bottom
- and the first block that has a 'instanceof' match gets executed.
- When the catch block finishes execution continues at the end of
- the last catch block. If no catch block has a 'instanceof' match
- then the next try/catch block is searched until no more try/catch
- blocks are available. In that case the exception is an uncaught
- exception and the program terminates with showing the exception.
-
- Example:
-
- <?php
- class MyException {
- function __construct($exception) {
- $this->exception = $exception;
- }
-
- function Display() {
- print "MyException: $this->exception\n";
- }
- }
-
- class MyExceptionFoo extends MyException {
- function __construct($exception) {
- $this->exception = $exception;
- }
-
- function Display() {
- print "MyException: $this->exception\n";
- }
- }
-
- try {
- throw new MyExceptionFoo('Hello');
- }
- catch (MyException $exception) {
- $exception->Display();
- }
- catch (Exception $exception) {
- echo $exception;
- }
- ?>
-
- Even though the above example shows that it is possible to define
- exception classes that don't inherit from Exception it is best to
- do so. This is because the internal Exception class can gather a
- lot of information otherwise not available. The PHP code emulation
- code would look something like shown below. The comments show the
- meaning of each property. As the code shows it is possible to read
- any available information by using the getter methods. But since
- some of the methods are used internally they are marked final. All
- in all the class is very restrictive because it must be ensured
- that anything used internally always works as expected.
-
- Emulating class Exception:
-
- <?php
- class Exception {
- function __construct(/*string*/ $message=NULL, /*int*/ $code=0) {
- if (func_num_args()) {
- $this->message = $message;
- }
- $this->code = $code;
- $this->file = __FILE__; // of throw clause
- $this->line = __LINE__; // of throw clause
- $this->trace = debug_backtrace();
- $this->string = StringFormat($this);
- }
-
- protected $message = 'Unknown exception'; // exception message
- protected $code = 0; // user defined exception code
- protected $file; // source filename of exception
- protected $line; // source line of exception
-
- private $trace; // backtrace of exception
- private $string; // internal only!!
-
- final function getMessage() {
- return $this->message;
- }
- final function getCode() {
- return $this->code;
- }
- final function getFile() {
- return $this->file;
- }
- final function getTrace() {
- return $this->trace;
- }
- final function getTraceAsString() {
- return self::TraceFormat($this);
- }
- function _toString() {
- return $this->string;
- }
- static private function StringFormat(Exception $exception) {
- // ... a function not available in PHP scripts
- // that returns all relevant information as a string
- }
- static private function TraceFormat(Exception $exception) {
- // ... a function not available in PHP scripts
- // that returns the backtrace as a string
- }
- }
- ?>
-
- If you derive your exception classes from this Exception base class
- your exceptions will be nicely shown in the builtin handler for
- uncaught exceptions.
-
- Note: The method getMessage() is a final read only access method to
- the private proeprty message that is set in the constructor. If you
- feel a need to overwrite the exception display then overload method
- __toString() in your derived class or implement your own extneral
- exception display function to accomplish your desired formatting.
-
- Example:
-
- <?php
- function display_exception(Exception $ex)
- {
- echo 'Exception: ' . $ex->getMessage() . 'with backtrace: <pre>';
- echo $ex->getTrace();
- echo '</pre>';
- }
-
- try
- {
- // your code here
- }
- catch (Exception $ex)
- {
- display_exeption($ex);
- }
- ?>
-
- * Dereferencing objects returned from functions.
-
- Example:
-
- <?php
- class Circle {
- function draw() {
- print "Circle\n";
- }
- }
-
- class Square {
- function draw() {
- print "Square\n";
- }
- }
-
- function ShapeFactoryMethod($shape) {
- switch ($shape) {
- case 'Circle': return new Circle();
- case 'Square': return new Square();
- }
- }
-
- ShapeFactoryMethod('Circle')->draw();
- ShapeFactoryMethod('Square')->draw();
- ?>
-
- * Member variables of classes can now be initialized.
-
- Example:
-
- <?php
- class foo {
- static $my_static = 5;
- public $my_prop = 'bla';
- }
-
- print foo::$my_static;
-
- $obj = foo;
-
- print $obj->my_prop;
- ?>
-
- * Static Methods.
-
- The Zend Engine 2.0 introduces the 'static' keyword to declare
- a method static, thus callable from outside the object context.
-
- Example:
-
- <?php
- class Foo {
- public static function aStaticMethod() {
- // ...
- }
- }
-
- Foo::aStaticMethod();
- ?>
-
- The pseudo variable $this is not available inside a method that
- has been declared static.
-
- * instanceof.
- New support for an instanceof operator which checks if an object
- is of a certain class or interface type.
-
- Example:
-
- <?php
-
- class Foo {
- }
-
- $obj = new Foo();
- if ($obj instanceof Foo) {
- print "Yay!\n";
- }
- ?>
-
- * Parameters that are passed by reference to a function
- may now have default values.
-
- Example:
-
- <?php
- function my_function(&$var = null) {
- if ($var === null) {
- die('$var needs to have a value');
- }
- }
- ?>
-
- * __autoload().
-
- The __autoload() interceptor function will be automatically called
- when an undeclared class is to be instantiated. The name of that
- class will be passed to the __autoload() interceptor function as its
- only argument. __autoload() must succeed in loading the class. If it
- doesn't then an E_ERROR is emitted.
-
- Example:
-
- <?php
- function __autoload($className) {
- include_once $className . '.php';
- }
-
- $object = new ClassName;
- ?>
-
- * Method calls and property accesses can be overloaded
- by class methods __call(), __get() and __set().
-
- __get() and __set() Example:
-
- <?php
- class Setter {
- public $n;
- public $x = array('a' => 1, 'b' => 2, 'c' => 3);
-
- function __get($nm) {
- print "Getting [$nm]\n";
-
- if(isset($this->x[$nm])) {
- $r = $this->x[$nm];
- print "Returning: $r\n";
- return $r;
- } else {
- print "Nothing!\n";
- }
- }
-
- function __set($nm, $val) {
- print "Setting [$nm] to $val\n";
-
- if(isset($this->x[$nm])) {
- $this->x[$nm] = $val;
- print "OK!\n";
- } else {
- print "Not OK!\n";
- }
- }
- }
-
- $foo = new Setter();
- $foo->n = 1;
- $foo->a = 100;
- $foo->a++;
- $foo->z++;
- var_dump($foo);
- ?>
-
- __call() Example:
-
- <?php
- class Caller {
- var $x = array(1, 2, 3);
-
- function __call($m, $a) {
- print "Method $m called:\n";
- var_dump($a);
- return $this->x;
- }
- }
-
- $foo = new Caller();
- $a = $foo->test(1, '2', 3.4, true);
- var_dump($a);
- ?>
-
- * Iteration
-
- Objects may be iterated in an overloaded way when used with
- foreach. The default behavior is to iterate over all properties
- with respect to property visibility.
-
- Example:
-
- <?php
- class Foo {
- var $x = 1;
- var $y = 2;
- }
-
- $obj = new Foo;
-
- foreach ($obj as $prp_name => $prop_value) {
- // using the property
- }
- ?>
-
- Each class whose instances can be iterated with foreach should
- implement the empty interface 'Traversable'. Hence any object
- that says it implements 'Traversable' can be used with foreach.
-
- The interfaces 'IteratorAggregate' and 'Iterator' allow to specify
- how class objects are iterated in PHP code. The first of them simply
- has a method 'getIterator' which must return an object that either
- implements the interface 'Iterator' or is instantiated from an
- internal class that can be iterated.
-
- Example:
-
- <?php
- class ObjectIterator implements Iterator {
-
- private $obj;
- private $num;
-
- function __construct($obj) {
- $this->obj = $obj;
- }
- function rewind() {
- $this->num = 0;
- }
- function valid() {
- return $this->num < $this->obj->max;
- }
- function key() {
- return $this->num;
- }
- function current() {
- switch($this->num) {
- case 0: return "1st";
- case 1: return "2nd";
- case 2: return "3rd";
- default: return $this->num."th";
- }
- }
- function next() {
- $this->num++;
- }
- }
-
- class Object implements IteratorAggregate {
-
- public $max = 3;
-
- function getIterator() {
- return new ObjectIterator($this);
- }
- }
-
- $obj = new Object;
-
- // this foreach ...
- foreach($obj as $key => $val) {
- echo "$key = $val\n";
- }
-
- // matches the following 7 lines with the for directive.
- $it = $obj->getIterator();
- for($it->rewind(); $it->valid(); $it->next()) {
- $key = $it->key();
- $val = $it->current();
- echo "$key = $val\n";
- }
- unset($it);
- ?>
-
- The matching for directive is very intersting here since it shows
- the use of all abstract methods declared in the interfaces Iterator
- and IteratorAggregate respectively.
-
- * Array overloading
-
- Objects can be used with Array notation when they implement the
- interface ArrayAccess. You cannot use such objects in standard
- array functions, however you have full control over the array
- notation. This allows lazy initialization or read only array.
-
- Note that setting [] results in a call to offsetSet() with
- index being NULL. That means that as with standard arrays you
- cannot store NULL keys.
-
- Example:
-
- <?php
- class ArrayClass implements ArrayAccess {
- public $a = array();
-
- function offsetExists($index) {
- return array_key_exists($index, $this->a);
- }
- function offsetGet($index) {
- return $this->a[$index];
- }
- function offsetSet($index, $newval) {
- return $this->a[$index] = $newval;
- }
- function offsetUnset($index) {
- unset($this->a[$index]);
- }
- }
-
- $obj = new ArrayClass;
-
- $obj[0] = 'bla'; // calls offsetSet(0,'bla')
- $obj[] = 42; // calls offsetSet(NULL, 42)
- $x = $obj[0]; // calls offsetGet(0)
- $b = isset($obj[0]); // calls offsetExists(0)
- unset($obj[0]); // calls offsetUnset(0)
- ?>
-
-
- * __METHOD__
-
- The pseudo constant __METHOD__ shows the current class and method
- when used inside a method and the function when used outside of a
- class.
-
- Example:
-
- <?php
- class Foo {
- function Show() {
- echo __FILE__ . '(' . __LINE__ . ')' . __METHOD__;
- }
- }
- function Test() {
- echo __FILE__ . '(' . __LINE__ . ')' . __METHOD__;
- }
- ?>
-
- * __toString()
-
- The magic method __toString() allows to overload the object to
- string conversion. This conversion is only done automatically for
- the printing functions (echo, print) but not for other functions
- that expect strings. Also the function __toString is not used in
- places where objects are not allowed but strings are like array
- indices. Note that specialized objects may be converted to a string
- in any place but without calling __toString().
-
- Example:
-
- <?php
- class Foo {
- function __toString() {
- return "What ever";
- }
- }
-
- $obj = new Foo;
-
- $str = (string) $obj; // call __toString()
-
- echo $obj; // call __toString()
-
- $ar = array();
- $ar[(string)$obj]; // this works
- $ar[$obj]; // this is not allowed
- ?>
-
- * Reflection API
-
- PHP 5 comes with a complete Reflection API that adds the ability to
- reverse-engineer classes, interfaces, functions and methods as well
- as extensions.
-
- The Reflection API also offers ways of getting doc comments for
- functions, classes and methods.
-
- Nearly all aspects of object oriented code can be reflected by
- using the Reflection API which is documented separately:
- http://sitten-polizei.de/php/reflection_api/docs/language.reflection.html
-
- Example:
-
- <?php
- class Foo {
- public $prop;
- function Func($name) {
- echo "Hello $name";
- }
- }
-
- ReflectionClass::export('Foo');
- ReflectionObject::export(new Foo);
- ReflectionMethod::export('Foo', 'func');
- ReflectionProperty::export('Foo', 'prop');
- ReflectionExtension::export('standard');
- ?>
-
- * New memory manager
- The Zend Engine has a new memory manager which allows it to run efficiently
- in multi-threaded environments as it doesn't need to use mutexes to lock
- and unlock during allocation/deallocation.
-
- * Others
- Probably other changes which we forgot to list. This list will be kept up-to-date
- as much as possible.
-
-
-Changes in the Zend Engine 1.0
-
- The Zend Engine was designed from the ground up for increased speed,
- reduced memory consumption and more reliable execution. We dare say
- it meets all of these goals and does so pretty well. Beyond that,
- there are several improvements in the language engine features:
-
- * References support.
-
- $foo = &$a; would make $foo and $a be two names to the same
- variable. This works with arrays as well, on either side; e.g.,
- $foo = &$a[7]; would make $foo and $a[7] be two names to the
- same variable. Changing one would change the other and vice
- versa.
-
- * Object overloading support.
-
- This feature allows various OO libraries to use the OO notation
- of PHP to access their functionality. Right now, no use is made
- of that feature, but we'd have a COM module ready by the time
- PHP 4.0 is released. A CORBA module would probably follow.
-
- * include() and eval() are now functions, and not statements.
-
- That means they return a value. The default return value from
- include() and eval() is 1, so that you can do if (include())
- without further coding. The return value may be changed by
- returning a value from the global scope of the included file or
- the evaluated string. For example, if 'return 7;' is executed in
- the global scope of foo.inc, include('foo.inc') would evaluate
- to 7.
-
- * Automatic resource deallocation.
-
- Several people have been bitten by the fact that PHP 3.0 had no
- concept of reference counting. The Zend Engine adds full
- reference counting for every value in the system, including
- resources. As soon as a resource is no longer referenced from
- any variable, it is automatically destroyed to save memory and
- resources. The most obvious example for the advantage in this is
- a loop that has an SQL query inside it, something like '$result
- = sql_query(...);'. In PHP 3.0, every iteration resulted in
- another SQL result-set allocated in the memory, and all of the
- result sets weren't destroyed until the end of the script's
- execution. With the Zend Engine, as soon as we overwrite an old
- result set with a new one, the old result set which is no longer
- referenced, is destroyed.
-
- * Full support for nesting arrays and objects within each other,
- in as many levels as you want.
-
- * true and false are now constants of type boolean.
-
- Comparing any other value to them would convert that value to a
- boolean first, and conduct the comparison later. That means, for
- example, that 5==true would evaluate to true (in PHP 3.0, true
- was nothing but a constant for the integer value of 1, so
- 5==true was identical to 5==1, which was false).
-
- * Runtime binding of function names.
-
- This complex name has a simple explanation - you can now call
- functions before they're declared!
-
- * Added here-docs support.
-
- * Added foreach.
-
- Two syntaxes supported:
-
- foreach(array_expr as $val) statement
- foreach(array_expr as $key => $val) statement
-
- * A true unset() implementation.
-
- A variable or element that is unset(), is now sent to oblivion
- in its entirely, no trace remains from it.
-
- * Output buffering support.
-
- Use ob_start() to begin output buffering, ob_end_flush() to end
- buffering and send out the buffered contents, ob_end_clean() to
- end buffering without sending the buffered contents, and
- ob_get_contents() to retrieve the current contents of the output
- buffer. Header information (header(), content type, cookies) are
- not buffered. By turning on output buffering, you can
- effectively send header information all throughout your file,
- regardless of whether you've emitted body output or not.
-
- * Full variable reference within quoted strings:
-
- ${expr} - full indirect reference support for scalar
- variables
- {variable} - full variable support
-
- For example:
-
- $foo[5]['bar'] = 'foobar';
- print "{$foo[5]["bar"]}"; // would print "foobar"
-
- * Ability to call member functions of other classes from within
- member functions or from the global scope.
-
- You can now, for example, override a parent function with a
- child function, and call the parent function from it.
-
- * Runtime information for classes (class name, parent, available
- functions, etc.).
-
- * Much more efficient syntax highlighter - runs much quicker,
- performs more reliably, and generates much tighter HTML.
-
- * A full-featured debugger has been integrated with the language
- (supports breakpoints, expression evaluation, step-in/over,
- function call backtrace, and more).
-
- The Zend Engine claims 100% compatibility with the engine of PHP
- 3.0, and is shamelessly lying about it. Here's why:
-
- * Static variable initializers only accept scalar values
- (in PHP 3.0 they accepted any valid expression). The impact
- should be somewhere in between void and non existent, since
- initializing a static variable with anything but a simple
- static value makes no sense at all.
-
- * The scope of break and continue is local to that of an
- include()'d file or an eval()'d string. The impact should
- be somewhat smaller of the one above.
-
- * The return statement no longer works from a require()'d file. It
- hardly worked in PHP 3.0, so the impact should be fairly small. If
- you want this functionality - use include() instead.
-
- * unset() is no longer a function, but a statement.
-
- * The following letter combination is not supported within
- encapsulated strings: "{$". If you have a string that includes
- this letter combination, for example, print "{$somevar"; (which
- printed the letter { and the contents of the variable $somevar in
- PHP 3.0), it will result in a parse error with the Zend Engine.
- In this case, you would have to change the code to print
- "\{$somevar"; This incompatibility is due to the full variable
- reference within quoted strings feature added in the Zend
- Engine.
diff --git a/Zend/Zend.m4 b/Zend/Zend.m4
index 8afb7f59b5..7a01c0b036 100644
--- a/Zend/Zend.m4
+++ b/Zend/Zend.m4
@@ -466,3 +466,140 @@ else
HAVE_GCC_GLOBAL_REGS=no
fi
AC_MSG_RESULT($ZEND_GCC_GLOBAL_REGS)
+
+dnl
+dnl Check if atof() accepts NAN
+dnl
+AC_CACHE_CHECK(whether atof() accepts NAN, ac_cv_atof_accept_nan,[
+AC_TRY_RUN([
+#include <math.h>
+#include <stdlib.h>
+
+#ifdef HAVE_ISNAN
+#define zend_isnan(a) isnan(a)
+#elif defined(HAVE_FPCLASS)
+#define zend_isnan(a) ((fpclass(a) == FP_SNAN) || (fpclass(a) == FP_QNAN))
+#else
+#define zend_isnan(a) 0
+#endif
+
+int main(int argc, char** argv)
+{
+ return zend_isnan(atof("NAN")) ? 0 : 1;
+}
+],[
+ ac_cv_atof_accept_nan=yes
+],[
+ ac_cv_atof_accept_nan=no
+],[
+ ac_cv_atof_accept_nan=no
+])])
+if test "$ac_cv_atof_accept_nan" = "yes"; then
+ AC_DEFINE([HAVE_ATOF_ACCEPTS_NAN], 1, [whether atof() accepts NAN])
+fi
+
+dnl
+dnl Check if atof() accepts INF
+dnl
+AC_CACHE_CHECK(whether atof() accepts INF, ac_cv_atof_accept_inf,[
+AC_TRY_RUN([
+#include <math.h>
+#include <stdlib.h>
+
+#ifdef HAVE_ISINF
+#define zend_isinf(a) isinf(a)
+#elif defined(INFINITY)
+/* Might not work, but is required by ISO C99 */
+#define zend_isinf(a) (((a)==INFINITY)?1:0)
+#elif defined(HAVE_FPCLASS)
+#define zend_isinf(a) ((fpclass(a) == FP_PINF) || (fpclass(a) == FP_NINF))
+#else
+#define zend_isinf(a) 0
+#endif
+
+int main(int argc, char** argv)
+{
+ return zend_isinf(atof("INF")) && zend_isinf(atof("-INF")) ? 0 : 1;
+}
+],[
+ ac_cv_atof_accept_inf=yes
+],[
+ ac_cv_atof_accept_inf=no
+],[
+ ac_cv_atof_accept_inf=no
+])])
+if test "$ac_cv_atof_accept_inf" = "yes"; then
+ AC_DEFINE([HAVE_ATOF_ACCEPTS_INF], 1, [whether atof() accepts INF])
+fi
+
+dnl
+dnl Check if HUGE_VAL == INF
+dnl
+AC_CACHE_CHECK(whether HUGE_VAL == INF, ac_cv_huge_val_inf,[
+AC_TRY_RUN([
+#include <math.h>
+#include <stdlib.h>
+
+#ifdef HAVE_ISINF
+#define zend_isinf(a) isinf(a)
+#elif defined(INFINITY)
+/* Might not work, but is required by ISO C99 */
+#define zend_isinf(a) (((a)==INFINITY)?1:0)
+#elif defined(HAVE_FPCLASS)
+#define zend_isinf(a) ((fpclass(a) == FP_PINF) || (fpclass(a) == FP_NINF))
+#else
+#define zend_isinf(a) 0
+#endif
+
+int main(int argc, char** argv)
+{
+ return zend_isinf(HUGE_VAL) ? 0 : 1;
+}
+],[
+ ac_cv_huge_val_inf=yes
+],[
+ ac_cv_huge_val_inf=no
+],[
+ ac_cv_huge_val_inf=yes
+])])
+dnl This is the most probable fallback so we assume yes in case of cross compile.
+if test "$ac_cv_huge_val_inf" = "yes"; then
+ AC_DEFINE([HAVE_HUGE_VAL_INF], 1, [whether HUGE_VAL == INF])
+fi
+
+dnl
+dnl Check if HUGE_VAL + -HUGEVAL == NAN
+dnl
+AC_CACHE_CHECK(whether HUGE_VAL + -HUGEVAL == NAN, ac_cv_huge_val_nan,[
+AC_TRY_RUN([
+#include <math.h>
+#include <stdlib.h>
+
+#ifdef HAVE_ISNAN
+#define zend_isnan(a) isnan(a)
+#elif defined(HAVE_FPCLASS)
+#define zend_isnan(a) ((fpclass(a) == FP_SNAN) || (fpclass(a) == FP_QNAN))
+#else
+#define zend_isnan(a) 0
+#endif
+
+int main(int argc, char** argv)
+{
+#if defined(__sparc__) && !(__GNUC__ >= 3)
+ /* prevent bug #27830 */
+ return 1;
+#else
+ return zend_isnan(HUGE_VAL + -HUGE_VAL) ? 0 : 1;
+#endif
+}
+],[
+ ac_cv_huge_val_nan=yes
+],[
+ ac_cv_huge_val_nan=no
+],[
+ ac_cv_huge_val_nan=yes
+])])
+dnl This is the most probable fallback so we assume yes in case of cross compile.
+if test "$ac_cv_huge_val_nan" = "yes"; then
+ AC_DEFINE([HAVE_HUGE_VAL_NAN], 1, [whether HUGE_VAL + -HUGEVAL == NAN])
+fi
diff --git a/Zend/acinclude.m4 b/Zend/acinclude.m4
index 9d6cb1da63..32a39891c1 100644
--- a/Zend/acinclude.m4
+++ b/Zend/acinclude.m4
@@ -107,7 +107,7 @@ int main(void)
], [ac_cv_c_bigendian_php=yes], [ac_cv_c_bigendian_php=no], [ac_cv_c_bigendian_php=unknown])
])
if test $ac_cv_c_bigendian_php = yes; then
- AC_DEFINE(WORDS_BIGENDIAN, [], [Define if processor uses big-endian word])
+ AC_DEFINE(WORDS_BIGENDIAN, 1, [Define if processor uses big-endian word])
fi
])
diff --git a/Zend/build.mk b/Zend/build.mk
index 3c83a6fe82..702cb647e9 100644
--- a/Zend/build.mk
+++ b/Zend/build.mk
@@ -30,14 +30,14 @@ $(LT_TARGETS):
$(makefile_in_files): $(makefile_am_files)
automake -a -i $(AMFLAGS) $(makefile_files)
-aclocal.m4: configure.in acinclude.m4
+aclocal.m4: configure.ac acinclude.m4
aclocal
-$(config_h_in): configure.in
+$(config_h_in): configure.ac
# explicitly remove target since autoheader does not seem to work
# correctly otherwise (timestamps are not updated)
@rm -f $@
autoheader
-configure: aclocal.m4 configure.in
+configure: aclocal.m4 configure.ac
autoconf
diff --git a/Zend/configure.in b/Zend/configure.ac
index 6d4d450ea8..00e599d639 100644
--- a/Zend/configure.in
+++ b/Zend/configure.ac
@@ -24,9 +24,6 @@ AH_TOP([
#undef uint
#undef ulong
-
-/* Define if you want to enable memory limit support */
-#define MEMORY_LIMIT 0
])
AH_BOTTOM([
@@ -62,13 +59,6 @@ int zend_sprintf(char *buffer, const char *format, ...);
#include <math.h>
-/* To enable the is_nan, is_infinite and is_finite PHP functions */
-#ifdef NETWARE
- #define HAVE_DECL_ISNAN 1
- #define HAVE_DECL_ISINF 1
- #define HAVE_DECL_ISFINITE 1
-#endif
-
#ifndef zend_isnan
#if HAVE_DECL_ISNAN
#define zend_isnan(a) isnan(a)
@@ -102,12 +92,6 @@ int zend_sprintf(char *buffer, const char *format, ...);
#endif /* ifndef ZEND_ACCONFIG_H_NO_C_PROTOS */
-#ifdef NETWARE
-#ifdef USE_WINSOCK
-#/*This detection against winsock is of no use*/ undef HAVE_SOCKLEN_T
-#/*This detection against winsock is of no use*/ undef HAVE_SYS_SOCKET_H
-#endif
-#endif
])
dnl We want this one before the checks, so the checks can modify CFLAGS.
diff --git a/Zend/tests/007.phpt b/Zend/tests/007.phpt
index 3fff2b830a..f8e5b99a0e 100644
--- a/Zend/tests/007.phpt
+++ b/Zend/tests/007.phpt
@@ -25,6 +25,8 @@ echo "Done\n";
Warning: each() expects exactly 1 parameter, 0 given in %s on line %d
NULL
+Deprecated: The each() function is deprecated. This message will be suppressed on further calls in %s on line %d
+
Warning: Variable passed to each() is not an array or object in %s on line %d
NULL
diff --git a/Zend/tests/009.phpt b/Zend/tests/009.phpt
index b44a6ba687..0dc9453576 100644
--- a/Zend/tests/009.phpt
+++ b/Zend/tests/009.phpt
@@ -7,6 +7,10 @@ class foo {
function bar () {
var_dump(get_class());
}
+ function testNull ()
+ {
+ var_dump(get_class(null));
+ }
}
class foo2 extends foo {
@@ -27,6 +31,8 @@ var_dump(get_class("qwerty"));
var_dump(get_class($f1));
var_dump(get_class($f2));
+$f1->testNull();
+
echo "Done\n";
?>
--EXPECTF--
@@ -45,4 +51,7 @@ Warning: get_class() expects parameter 1 to be object, string given in %s on lin
bool(false)
string(3) "foo"
string(4) "foo2"
+
+Warning: get_class() expects parameter 1 to be object, null given in %s on line %d
+bool(false)
Done
diff --git a/Zend/tests/024.phpt b/Zend/tests/024.phpt
index f89c49e613..34dac0f1e3 100644
--- a/Zend/tests/024.phpt
+++ b/Zend/tests/024.phpt
@@ -37,15 +37,15 @@ NULL
Notice: Undefined variable: b in %s on line %d
int(1)
-Notice: Trying to get property of non-object in %s on line %d
+Notice: Trying to get property '1' of non-object in %s on line %d
NULL
-Notice: Trying to get property of non-object in %s on line %d
+Notice: Trying to get property '1' of non-object in %s on line %d
NULL
Notice: Undefined variable: c in %s on line %d
-Notice: Trying to get property of non-object in %s on line %d
+Notice: Trying to get property '1' of non-object in %s on line %d
-Notice: Trying to get property of non-object in %s on line %d
+Notice: Trying to get property '' of non-object in %s on line %d
NULL
diff --git a/Zend/tests/026.phpt b/Zend/tests/026.phpt
index 5fa0e1677c..b3088e8473 100644
--- a/Zend/tests/026.phpt
+++ b/Zend/tests/026.phpt
@@ -18,7 +18,7 @@ print "ok\n";
?>
--EXPECTF--
-Notice: Trying to get property of non-object in %s on line %d
+Notice: Trying to get property 'a' of non-object in %s on line %d
ok
Warning: Creating default object from empty value in %s on line %d
diff --git a/Zend/tests/033.phpt b/Zend/tests/033.phpt
index 17319e0d61..5ff0089058 100644
--- a/Zend/tests/033.phpt
+++ b/Zend/tests/033.phpt
@@ -24,7 +24,7 @@ Notice: Undefined variable: arr in %s on line %d
Notice: Undefined variable: arr in %s on line %d
-Notice: Trying to get property of non-object in %s on line %d
+Notice: Trying to get property 'foo' of non-object in %s on line %d
Warning: Creating default object from empty value in %s on line %d
diff --git a/Zend/tests/ErrorException_getSeverity.phpt b/Zend/tests/ErrorException_getSeverity.phpt
new file mode 100644
index 0000000000..6ad8af109d
--- /dev/null
+++ b/Zend/tests/ErrorException_getSeverity.phpt
@@ -0,0 +1,1261 @@
+--TEST--
+final public int ErrorException::getSeverity ( void );
+--CREDITS--
+marcosptf - <marcosptf@yahoo.com.br> - #phparty7 - @phpsp - novatec/2015 - sao paulo - br
+--INI--
+error_reporting = E_ALL
+--FILE--
+<?php
+
+const EXCEPTION_CODE_ERROR = 0;
+const EXCEPTION_SEVERITY_ERROR_MSG = "This exception severity is: ";
+const EXCEPTION_PARAM_MSG = "string message param";
+const EXCEPTION_TRACE_AS_STRING_MSG = "#0 {main}";
+
+try {
+ throw new ErrorException();
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_ERROR);
+ var_dump($e->getMessage() === "");
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_ERROR);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_ERROR);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_ERROR);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_ERROR);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_WARNING);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_WARNING);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_PARSE);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_PARSE);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_NOTICE);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_NOTICE);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_CORE_ERROR);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_CORE_ERROR);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_CORE_WARNING);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_CORE_WARNING);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_CORE_WARNING);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_CORE_WARNING);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_COMPILE_ERROR);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_COMPILE_ERROR);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_COMPILE_WARNING);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_COMPILE_WARNING);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_USER_ERROR);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_USER_ERROR);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_USER_WARNING);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_USER_WARNING);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_USER_NOTICE);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_USER_NOTICE);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_STRICT);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_STRICT);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_RECOVERABLE_ERROR);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_RECOVERABLE_ERROR);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_DEPRECATED);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_DEPRECATED);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_USER_DEPRECATED);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_USER_DEPRECATED);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_ERROR, __FILE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_ERROR);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_WARNING, __FILE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_WARNING);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_PARSE, __FILE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_PARSE);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_NOTICE, __FILE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_NOTICE);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_CORE_ERROR, __FILE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_CORE_ERROR);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_CORE_WARNING, __FILE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_CORE_WARNING);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_CORE_WARNING, __FILE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_CORE_WARNING);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_COMPILE_ERROR, __FILE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_COMPILE_ERROR);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_COMPILE_WARNING, __FILE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_COMPILE_WARNING);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_USER_ERROR, __FILE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_USER_ERROR);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_USER_WARNING, __FILE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_USER_WARNING);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_USER_NOTICE, __FILE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_USER_NOTICE);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_STRICT, __FILE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_STRICT);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_RECOVERABLE_ERROR, __FILE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_RECOVERABLE_ERROR);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_DEPRECATED, __FILE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_DEPRECATED);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_USER_DEPRECATED, __FILE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_USER_DEPRECATED);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_ERROR, __FILE__, __LINE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_ERROR);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_WARNING, __FILE__, __LINE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_WARNING);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_PARSE, __FILE__, __LINE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_PARSE);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_NOTICE, __FILE__, __LINE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_NOTICE);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_CORE_ERROR, __FILE__, __LINE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_CORE_ERROR);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_CORE_WARNING, __FILE__, __LINE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_CORE_WARNING);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_CORE_WARNING, __FILE__, __LINE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_CORE_WARNING);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_COMPILE_ERROR, __FILE__, __LINE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_COMPILE_ERROR);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_COMPILE_WARNING, __FILE__, __LINE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_COMPILE_WARNING);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_USER_ERROR, __FILE__, __LINE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_USER_ERROR);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_USER_WARNING, __FILE__, __LINE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_USER_WARNING);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_USER_NOTICE, __FILE__, __LINE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_USER_NOTICE);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_STRICT, __FILE__, __LINE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_STRICT);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_RECOVERABLE_ERROR, __FILE__, __LINE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_RECOVERABLE_ERROR);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_DEPRECATED, __FILE__, __LINE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_DEPRECATED);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_USER_DEPRECATED, __FILE__, __LINE__);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_USER_DEPRECATED);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_USER_DEPRECATED, __FILE__, __LINE__, NULL);
+} catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_USER_DEPRECATED);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_ERROR, __FILE__, __LINE__, NULL);
+} catch(Exception $exceptionErr) {
+ try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_ERROR, __FILE__, __LINE__, $exceptionErr->getPrevious());
+ } catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_ERROR);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+ }
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_WARNING, __FILE__, __LINE__, NULL);
+} catch(Exception $exceptionErr) {
+ try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_WARNING, __FILE__, __LINE__, $exceptionErr->getPrevious());
+ } catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_WARNING);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+ }
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_PARSE, __FILE__, __LINE__, NULL);
+} catch(Exception $exceptionErr) {
+ try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_PARSE, __FILE__, __LINE__, $exceptionErr->getPrevious());
+ } catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_PARSE);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+ }
+}
+
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_NOTICE, __FILE__, __LINE__, NULL);
+} catch(Exception $exceptionErr) {
+ try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_NOTICE, __FILE__, __LINE__, $exceptionErr->getPrevious());
+ } catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_NOTICE);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+ }
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_CORE_ERROR, __FILE__, __LINE__, NULL);
+} catch(Exception $exceptionErr) {
+ try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_CORE_ERROR, __FILE__, __LINE__, $exceptionErr->getPrevious());
+ } catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_CORE_ERROR);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+ }
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_CORE_WARNING, __FILE__, __LINE__, NULL);
+} catch(Exception $exceptionErr) {
+ try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_CORE_WARNING, __FILE__, __LINE__, $exceptionErr->getPrevious());
+ } catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_CORE_WARNING);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+ }
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_COMPILE_ERROR, __FILE__, __LINE__, NULL);
+} catch(Exception $exceptionErr) {
+ try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_COMPILE_ERROR, __FILE__, __LINE__, $exceptionErr->getPrevious());
+ } catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_COMPILE_ERROR);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+ }
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_COMPILE_WARNING, __FILE__, __LINE__, NULL);
+} catch(Exception $exceptionErr) {
+ try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_COMPILE_WARNING, __FILE__, __LINE__, $exceptionErr->getPrevious());
+ } catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_COMPILE_WARNING);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+ }
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_USER_ERROR, __FILE__, __LINE__, NULL);
+} catch(Exception $exceptionErr) {
+ try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_USER_ERROR, __FILE__, __LINE__, $exceptionErr->getPrevious());
+ } catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_USER_ERROR);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+ }
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_USER_WARNING, __FILE__, __LINE__, NULL);
+} catch(Exception $exceptionErr) {
+ try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_USER_WARNING, __FILE__, __LINE__, $exceptionErr->getPrevious());
+ } catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_USER_WARNING);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+ }
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_USER_NOTICE, __FILE__, __LINE__, NULL);
+} catch(Exception $exceptionErr) {
+ try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_USER_NOTICE, __FILE__, __LINE__, $exceptionErr->getPrevious());
+ } catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_USER_NOTICE);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+ }
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_STRICT, __FILE__, __LINE__, NULL);
+} catch(Exception $exceptionErr) {
+ try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_STRICT, __FILE__, __LINE__, $exceptionErr->getPrevious());
+ } catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_STRICT);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+ }
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_RECOVERABLE_ERROR, __FILE__, __LINE__, NULL);
+} catch(Exception $exceptionErr) {
+ try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_RECOVERABLE_ERROR, __FILE__, __LINE__, $exceptionErr->getPrevious());
+ } catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_RECOVERABLE_ERROR);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+ }
+}
+
+try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_USER_DEPRECATED, __FILE__, __LINE__, NULL);
+} catch(Exception $exceptionErr) {
+ try {
+ throw new ErrorException(EXCEPTION_PARAM_MSG, EXCEPTION_CODE_ERROR, E_USER_DEPRECATED, __FILE__, __LINE__, $exceptionErr->getPrevious());
+ } catch(ErrorException $e) {
+ echo EXCEPTION_SEVERITY_ERROR_MSG . $e->getSeverity();
+ var_dump($e->getSeverity() === E_USER_DEPRECATED);
+ var_dump($e->getMessage() === EXCEPTION_PARAM_MSG);
+ var_dump($e->getCode() === 0);
+ var_dump($e->getPrevious() === NULL);
+ var_dump($e->getFile() === __FILE__);
+ var_dump($e->getTraceAsString() === EXCEPTION_TRACE_AS_STRING_MSG);
+ }
+}
+
+?>
+--EXPECTF--
+This exception severity is: 1bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 1bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 1bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 1bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 2bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 4bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 8bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 16bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 32bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 32bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 64bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 128bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 256bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 512bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 1024bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 2048bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 4096bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 8192bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 16384bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 1bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 2bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 4bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 8bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 16bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 32bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 32bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 64bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 128bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 256bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 512bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 1024bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 2048bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 4096bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 8192bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 16384bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 1bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 2bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 4bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 8bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 16bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 32bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 32bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 64bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 128bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 256bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 512bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 1024bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 2048bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 4096bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 8192bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 16384bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 16384bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 1bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 2bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 4bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 8bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 16bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 32bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 64bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 128bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 256bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 512bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 1024bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 2048bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 4096bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+This exception severity is: 16384bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
diff --git a/Zend/tests/abstract_inheritance_001.phpt b/Zend/tests/abstract_inheritance_001.phpt
new file mode 100644
index 0000000000..9e061e65d5
--- /dev/null
+++ b/Zend/tests/abstract_inheritance_001.phpt
@@ -0,0 +1,12 @@
+--TEST--
+Allow abstract function override
+--FILE--
+<?php
+
+abstract class A { abstract function bar($x); }
+abstract class B extends A { abstract function bar($x); }
+
+echo "DONE";
+?>
+--EXPECT--
+DONE
diff --git a/Zend/tests/abstract_inheritance_002.phpt b/Zend/tests/abstract_inheritance_002.phpt
new file mode 100644
index 0000000000..78f53c85c8
--- /dev/null
+++ b/Zend/tests/abstract_inheritance_002.phpt
@@ -0,0 +1,12 @@
+--TEST--
+Allow abstract function override
+--FILE--
+<?php
+
+abstract class A { abstract function bar($x); }
+abstract class B extends A { abstract function bar($x, $y = 0); }
+
+echo "DONE";
+?>
+--EXPECT--
+DONE
diff --git a/Zend/tests/abstract_inheritance_003.phpt b/Zend/tests/abstract_inheritance_003.phpt
new file mode 100644
index 0000000000..24d5920cc1
--- /dev/null
+++ b/Zend/tests/abstract_inheritance_003.phpt
@@ -0,0 +1,12 @@
+--TEST--
+Allow abstract function override
+--FILE--
+<?php
+
+abstract class A { abstract function bar($x, $y = 0); }
+abstract class B extends A { abstract function bar($x); }
+
+echo "DONE";
+?>
+--EXPECTF--
+Fatal error: Declaration of B::bar($x) must be compatible with A::bar($x, $y = 0) in %s
diff --git a/Zend/tests/anonymous_func_001.phpt b/Zend/tests/anonymous_func_001.phpt
index 644a7f49ad..8e4bc42a0b 100644
--- a/Zend/tests/anonymous_func_001.phpt
+++ b/Zend/tests/anonymous_func_001.phpt
@@ -12,24 +12,43 @@ for ($i = 0; $i < 10; $i++) {
}
?>
---EXPECT--
+--EXPECTF--
+Deprecated: Function create_function() is deprecated in %s on line %d
int(0)
int(0)
+
+Deprecated: Function create_function() is deprecated in %s on line %d
int(1)
int(1)
+
+Deprecated: Function create_function() is deprecated in %s on line %d
int(2)
int(2)
+
+Deprecated: Function create_function() is deprecated in %s on line %d
int(3)
int(3)
+
+Deprecated: Function create_function() is deprecated in %s on line %d
int(4)
int(4)
+
+Deprecated: Function create_function() is deprecated in %s on line %d
int(5)
int(5)
+
+Deprecated: Function create_function() is deprecated in %s on line %d
int(6)
int(6)
+
+Deprecated: Function create_function() is deprecated in %s on line %d
int(7)
int(7)
+
+Deprecated: Function create_function() is deprecated in %s on line %d
int(8)
int(8)
+
+Deprecated: Function create_function() is deprecated in %s on line %d
int(9)
int(9)
diff --git a/Zend/tests/anonymous_func_002.phpt b/Zend/tests/anonymous_func_002.phpt
index 4c40b62300..1b9375c89f 100644
--- a/Zend/tests/anonymous_func_002.phpt
+++ b/Zend/tests/anonymous_func_002.phpt
@@ -11,6 +11,9 @@ var_dump($arr[$test(1)]);
var_dump($arr[$test(0)]() == $arr);
?>
---EXPECT--
+--EXPECTF--
+Deprecated: Function create_function() is deprecated in %s on line %d
+
+Deprecated: Function create_function() is deprecated in %s on line %d
int(2)
bool(true)
diff --git a/Zend/tests/anonymous_func_003.phpt b/Zend/tests/anonymous_func_003.phpt
index 32c5cf085c..f06a463727 100644
--- a/Zend/tests/anonymous_func_003.phpt
+++ b/Zend/tests/anonymous_func_003.phpt
@@ -11,5 +11,6 @@ try {
}
?>
---EXPECT--
+--EXPECTF--
+Deprecated: Function create_function() is deprecated in %s on line %d
bool(true)
diff --git a/Zend/tests/assert/bug70208.phpt b/Zend/tests/assert/bug70208.phpt
index ec9325334c..6b7dfaeb33 100644
--- a/Zend/tests/assert/bug70208.phpt
+++ b/Zend/tests/assert/bug70208.phpt
@@ -19,5 +19,6 @@ class test {
new test;
?>
---EXPECT--
+--EXPECTF--
+Deprecated: assert(): Calling assert() with a string argument is deprecated in %s on line %d
int(1)
diff --git a/Zend/tests/assert/indirect_var_access_misoptimization.phpt b/Zend/tests/assert/indirect_var_access_misoptimization.phpt
index 61c193ab60..6c05a8c607 100644
--- a/Zend/tests/assert/indirect_var_access_misoptimization.phpt
+++ b/Zend/tests/assert/indirect_var_access_misoptimization.phpt
@@ -15,5 +15,7 @@ test();
?>
--EXPECTF--
+Deprecated: assert(): Calling assert() with a string argument is deprecated in %s on line %d
+
Notice: Object of class stdClass could not be converted to int in %s on line %d
int(2)
diff --git a/Zend/tests/assign_dim_obj_null_return.phpt b/Zend/tests/assign_dim_obj_null_return.phpt
index e833ef3591..cff877fd8f 100644
--- a/Zend/tests/assign_dim_obj_null_return.phpt
+++ b/Zend/tests/assign_dim_obj_null_return.phpt
@@ -49,8 +49,8 @@ NULL
Warning: Cannot use a scalar value as an array in %s on line %d
NULL
-Warning: Attempt to assign property of non-object in %s on line %d
+Warning: Attempt to assign property 'foo' of non-object in %s on line %d
NULL
-Warning: Attempt to assign property of non-object in %s on line %d
+Warning: Attempt to assign property 'foo' of non-object in %s on line %d
NULL
diff --git a/Zend/tests/bug19859.phpt b/Zend/tests/bug19859.phpt
index d961b75a78..6eb1701e7b 100644
--- a/Zend/tests/bug19859.phpt
+++ b/Zend/tests/bug19859.phpt
@@ -1,7 +1,5 @@
--TEST--
Bug #19859 (__call() does not catch call_user_func_array() calls)
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 is needed'); ?>
--FILE--
<?php
class test
diff --git a/Zend/tests/bug20240.phpt b/Zend/tests/bug20240.phpt
index 53bb050576..9e2f23ba66 100644
--- a/Zend/tests/bug20240.phpt
+++ b/Zend/tests/bug20240.phpt
@@ -1,7 +1,5 @@
--TEST--
Bug #20240 (order of destructor calls)
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 is needed'); ?>
--FILE--
<?php
diff --git a/Zend/tests/bug21478.phpt b/Zend/tests/bug21478.phpt
index 5955c4c1dc..6e07a378c2 100644
--- a/Zend/tests/bug21478.phpt
+++ b/Zend/tests/bug21478.phpt
@@ -2,7 +2,6 @@
Bug #21478 (Zend/zend_alloc.c :: shutdown_memory_manager produces segfault)
--SKIPIF--
<?php
- if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 is needed');
if (!function_exists('stream_filter_register')) die('skip stream_filter_register() not available');
?>
--FILE--
diff --git a/Zend/tests/bug21888.phpt b/Zend/tests/bug21888.phpt
index a13da1943a..b32bd35607 100644
--- a/Zend/tests/bug21888.phpt
+++ b/Zend/tests/bug21888.phpt
@@ -1,9 +1,5 @@
--TEST--
Bug #21888 (protected property and protected method of the same name)
---SKIPIF--
-<?php
- if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 is needed');
-?>
--FILE--
<?php
class mom {
diff --git a/Zend/tests/bug22725.phpt b/Zend/tests/bug22725.phpt
index 5f3c258b14..e5dc49d8f6 100644
--- a/Zend/tests/bug22725.phpt
+++ b/Zend/tests/bug22725.phpt
@@ -1,7 +1,5 @@
--TEST--
Bug #22725 (A derived class can call a parent's protected method that calls a private method)
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
--FILE--
<?php
class Foo {
diff --git a/Zend/tests/bug22836.phpt b/Zend/tests/bug22836.phpt
index 06a5c3242c..205fd1c696 100644
--- a/Zend/tests/bug22836.phpt
+++ b/Zend/tests/bug22836.phpt
@@ -1,7 +1,5 @@
--TEST--
Bug #22836 (returning references to NULL)
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 is needed'); ?>
--FILE--
<?php
function &f()
diff --git a/Zend/tests/bug24436.phpt b/Zend/tests/bug24436.phpt
index 0c261b668e..11b8702cdc 100644
--- a/Zend/tests/bug24436.phpt
+++ b/Zend/tests/bug24436.phpt
@@ -1,7 +1,5 @@
--TEST--
Bug #24436 (isset()/empty() produce errors with non-existent variables in classes)
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 is needed'); ?>
--INI--
error_reporting=2047
--FILE--
diff --git a/Zend/tests/bug24635.phpt b/Zend/tests/bug24635.phpt
index d9466d971e..758a803a06 100644
--- a/Zend/tests/bug24635.phpt
+++ b/Zend/tests/bug24635.phpt
@@ -1,7 +1,5 @@
--TEST--
Bug #24635 (crash on dtor calling other functions)
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 is needed'); ?>
--FILE--
<?php
class SiteClass {
diff --git a/Zend/tests/bug24699.phpt b/Zend/tests/bug24699.phpt
index 81ca4f5091..0958a6e673 100644
--- a/Zend/tests/bug24699.phpt
+++ b/Zend/tests/bug24699.phpt
@@ -1,7 +1,5 @@
--TEST--
Bug #24699 (Memory Leak with per-class constants)
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 is needed'); ?>
--FILE--
<?php
class TEST { const FOO = SEEK_CUR; };
diff --git a/Zend/tests/bug24884.phpt b/Zend/tests/bug24884.phpt
index 457acd00d5..3788479cb0 100644
--- a/Zend/tests/bug24884.phpt
+++ b/Zend/tests/bug24884.phpt
@@ -1,7 +1,5 @@
--TEST--
Bug #24884 (calling $this->__clone(); crashes php)
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
--FILE--
<?php
class Test {
diff --git a/Zend/tests/bug26697.phpt b/Zend/tests/bug26697.phpt
index 8266a23e34..8dda17028a 100644
--- a/Zend/tests/bug26697.phpt
+++ b/Zend/tests/bug26697.phpt
@@ -1,24 +1,21 @@
--TEST--
Bug #26697 (calling class_exists on a nonexistent class in __autoload results in segfault)
---SKIPIF--
-<?php if (function_exists('__autoload')) die('skip __autoload() declared in auto_prepend_file');?>
--FILE--
<?php
-function __autoload($name)
-{
+spl_autoload_register(function ($name) {
echo __METHOD__ . "($name)\n";
var_dump(class_exists('NotExistingClass'));
echo __METHOD__ . "($name), done\n";
-}
+});
var_dump(class_exists('NotExistingClass'));
?>
===DONE===
--EXPECTF--
-__autoload(NotExistingClass)
+{closure}(NotExistingClass)
bool(false)
-__autoload(NotExistingClass), done
+{closure}(NotExistingClass), done
bool(false)
===DONE===
diff --git a/Zend/tests/bug26698.phpt b/Zend/tests/bug26698.phpt
index aecc708a0d..a4d6ad13f8 100644
--- a/Zend/tests/bug26698.phpt
+++ b/Zend/tests/bug26698.phpt
@@ -5,7 +5,7 @@ Bug #26698 (Thrown exceptions while evaluting argument to pass as parameter cras
ini_set("report_memleaks", 0); // the exception thrown in this test results in a memory leak, which is fine
-class Object
+class ObjectOne
{
function getNone()
{
@@ -23,7 +23,7 @@ class Proxy
{
try
{
- $res = new Object();
+ $res = new ObjectOne();
$this->three($res->getNone());
}
catch(Exception $e)
@@ -36,7 +36,7 @@ class Proxy
{
try
{
- $res = new Object();
+ $res = new ObjectOne();
$this->three(1, $res->getNone());
}
catch(Exception $e)
@@ -49,7 +49,7 @@ class Proxy
{
try
{
- $res = new Object();
+ $res = new ObjectOne();
$this->three(1, 2, $res->getNone());
}
catch(Exception $e)
diff --git a/Zend/tests/bug28444.phpt b/Zend/tests/bug28444.phpt
index 78c08d2fc6..b7e863da92 100644
--- a/Zend/tests/bug28444.phpt
+++ b/Zend/tests/bug28444.phpt
@@ -9,7 +9,7 @@ function my_error_handler($errno, $errstr, $errfile, $errline) {
set_error_handler('my_error_handler');
-class Object
+class ObjectOne
{
public $x;
@@ -26,7 +26,7 @@ class Overloaded
function __construct($x)
{
- $this->x = new Object($x);
+ $this->x = new ObjectOne($x);
}
function __get($prop)
@@ -47,7 +47,7 @@ var_dump($y->x->x);
var_dump($y->x->x = 3);
var_dump($y->y = 3);
var_dump($y->y);
-var_dump($y->z = new Object(4));
+var_dump($y->z = new ObjectOne(4));
var_dump($y->z->x);
$t = $y->z;
var_dump($t->x = 5);
@@ -56,7 +56,7 @@ var_dump($y->z->x = 6);
?>
===DONE===
--EXPECTF--
-object(Object)#%d (1) {
+object(ObjectOne)#%d (1) {
["x"]=>
int(2)
}
@@ -66,9 +66,9 @@ Overloaded::__set(y,3)
int(3)
Overloaded::__get(y)
int(3)
-string(55) "Object of class Object could not be converted to string"
+string(58) "Object of class ObjectOne could not be converted to string"
Overloaded::__set(z,)
-object(Object)#%d (1) {
+object(ObjectOne)#%d (1) {
["x"]=>
int(4)
}
diff --git a/Zend/tests/bug31098.phpt b/Zend/tests/bug31098.phpt
index 31823a1aa5..1849528231 100644
--- a/Zend/tests/bug31098.phpt
+++ b/Zend/tests/bug31098.phpt
@@ -44,7 +44,7 @@ ok
ok
ok
-Notice: Trying to get property of non-object in %s on line %d
+Notice: Trying to get property 'wrong' of non-object in %s on line %d
ok
Warning: Illegal string offset 'wrong' in %s on line %d
@@ -52,4 +52,4 @@ ok
ok
Warning: Illegal string offset 'wrong' in %s on line %d
-ok \ No newline at end of file
+ok
diff --git a/Zend/tests/bug31102.phpt b/Zend/tests/bug31102.phpt
index 5de01f7282..fd6da0f7c2 100644
--- a/Zend/tests/bug31102.phpt
+++ b/Zend/tests/bug31102.phpt
@@ -5,8 +5,7 @@ Bug #31102 (Exception not handled when thrown inside __autoload())
$test = 0;
-function __autoload($class)
-{
+spl_autoload_register(function ($class) {
global $test;
echo __METHOD__ . "($class,$test)\n";
@@ -22,7 +21,7 @@ function __autoload($class)
case 3:
return;
}
-}
+});
while($test++ < 5)
{
@@ -39,11 +38,11 @@ while($test++ < 5)
===DONE===
<?php exit(0); ?>
--EXPECTF--
-__autoload(Test1,1)
+{closure}(Test1,1)
Caught: Test1::__construct
-__autoload(Test2,2)
-Caught: __autoload
-__autoload(Test3,3)
+{closure}(Test2,2)
+Caught: {closure}
+{closure}(Test3,3)
Fatal error: Uncaught Error: Class 'Test3' not found in %sbug31102.php(%d) : eval()'d code:1
Stack trace:
diff --git a/Zend/tests/bug33116.phpt b/Zend/tests/bug33116.phpt
index aa714a1f85..13aae6611e 100644
--- a/Zend/tests/bug33116.phpt
+++ b/Zend/tests/bug33116.phpt
@@ -2,11 +2,10 @@
Bug #33116 (crash when assigning class name to global variable in __autoload)
--FILE--
<?php
-function __autoload($class)
-{
+spl_autoload_register(function ($class) {
$GLOBALS['include'][] = $class;
eval("class DefClass{}");
-}
+});
$a = new DefClass;
print_r($a);
diff --git a/Zend/tests/bug35470.phpt b/Zend/tests/bug35470.phpt
index 5a854552bb..01d045744a 100644
--- a/Zend/tests/bug35470.phpt
+++ b/Zend/tests/bug35470.phpt
@@ -5,7 +5,7 @@ Bug #35470 (Assigning global using variable name from array doesn't function)
$x = array("test", "55");
global ${$x[0]};
${$x[0]} = $x[1];
-echo "Test: $test\n";;
+echo "Test: $test\n";
?>
--EXPECT--
Test: 55
diff --git a/Zend/tests/bug36303.phpt b/Zend/tests/bug36303.phpt
index 0f92323834..3ea036a838 100644
--- a/Zend/tests/bug36303.phpt
+++ b/Zend/tests/bug36303.phpt
@@ -8,7 +8,7 @@ foreach($x->a->b as &$v) {
echo "ok\n";
?>
--EXPECTF--
-Warning: Attempt to modify property of non-object in %sbug36303.php on line 3
+Warning: Attempt to modify property 'a' of non-object in %sbug36303.php on line 3
Warning: Invalid argument supplied for foreach() in %sbug36303.php on line 3
ok
diff --git a/Zend/tests/bug37138.phpt b/Zend/tests/bug37138.phpt
index f8503f8da9..e39ad199a1 100644
--- a/Zend/tests/bug37138.phpt
+++ b/Zend/tests/bug37138.phpt
@@ -2,7 +2,7 @@
Bug #37138 (__autoload tries to load callback'ed self and parent)
--FILE--
<?php
-function __autoload ($CN) {var_dump ($CN);}
+spl_autoload_register(function ($CN) { var_dump ($CN); });
class st {
public static function e () {echo ("EHLO\n");}
public static function e2 () {call_user_func (array ('self', 'e'));}
diff --git a/Zend/tests/bug37811.phpt b/Zend/tests/bug37811.phpt
index f224f9b311..299018363d 100644
--- a/Zend/tests/bug37811.phpt
+++ b/Zend/tests/bug37811.phpt
@@ -23,6 +23,6 @@ string(3) "Foo"
Warning: Constants may only evaluate to scalar values or arrays in %sbug37811.php on line %d
-Notice: Use of undefined constant Baz - assumed 'Baz' in %sbug37811.php on line %d
+Warning: Use of undefined constant Baz - assumed 'Baz' (this will throw an Error in a future version of PHP) in %sbug37811.php on line %d
string(3) "Baz"
===DONE===
diff --git a/Zend/tests/bug39003.phpt b/Zend/tests/bug39003.phpt
index add14512c8..01761faa98 100644
--- a/Zend/tests/bug39003.phpt
+++ b/Zend/tests/bug39003.phpt
@@ -10,10 +10,9 @@ class ClassName
function test (OtherClassName $object) { }
-function __autoload($class)
-{
+spl_autoload_register(function ($class) {
var_dump("__autload($class)");
-}
+});
$obj = new ClassName;
test($obj);
diff --git a/Zend/tests/bug39304.phpt b/Zend/tests/bug39304.phpt
index 2e9ebcdee4..77da1a8bb8 100644
--- a/Zend/tests/bug39304.phpt
+++ b/Zend/tests/bug39304.phpt
@@ -4,9 +4,9 @@ Bug #39304 (Segmentation fault with list unpacking of string offset)
<?php
$s = "";
list($a, $b) = $s[0];
-echo "I am alive";
+ var_dump($a,$b);
?>
--EXPECTF--
Notice: Uninitialized string offset: 0 in %sbug39304.php on line %d
-I am alive
-
+NULL
+NULL
diff --git a/Zend/tests/bug39304_2_4.phpt b/Zend/tests/bug39304_2_4.phpt
deleted file mode 100644
index 917c64e2cd..0000000000
--- a/Zend/tests/bug39304_2_4.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-Bug #39304 (Segmentation fault with list unpacking of string offset)
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.4.0', '<')) die('skip ZendEngine 2.4 needed'); ?>
---FILE--
-<?php
- $s = "";
- list($a, $b) = $s[0];
- var_dump($a,$b);
-?>
---EXPECTF--
-Notice: Uninitialized string offset: 0 in %sbug39304_2_4.php on line %d
-NULL
-NULL
diff --git a/Zend/tests/bug39542.phpt b/Zend/tests/bug39542.phpt
index 13ddc0a91f..2008fe140a 100644
--- a/Zend/tests/bug39542.phpt
+++ b/Zend/tests/bug39542.phpt
@@ -10,11 +10,11 @@ if (substr(PHP_OS, 0, 3) == 'WIN') {
set_include_path(dirname(__FILE__).'/bug39542:.');
}
-function __autoload($class) {
+spl_autoload_register(function ($class) {
if (!require_once($class.'.php')) {
error_log('Error: Autoload class: '.$class.' not found!');
}
-}
+});
new bug39542();
diff --git a/Zend/tests/bug42798.phpt b/Zend/tests/bug42798.phpt
index 1c45867722..1141a30503 100644
--- a/Zend/tests/bug42798.phpt
+++ b/Zend/tests/bug42798.phpt
@@ -2,10 +2,10 @@
Bug #42798 (_autoload() not triggered for classes used in method signature)
--FILE--
<?php
-function __autoload($className) {
+spl_autoload_register(function ($className) {
print "$className\n";
exit();
-}
+});
function foo($c = ok::constant) {
}
diff --git a/Zend/tests/bug43344_1.phpt b/Zend/tests/bug43344_1.phpt
index 59129d75cf..4635240699 100644
--- a/Zend/tests/bug43344_1.phpt
+++ b/Zend/tests/bug43344_1.phpt
@@ -19,14 +19,14 @@ echo f2()."\n";
echo f3()."\n";
?>
--EXPECTF--
-Notice: Use of undefined constant bar - assumed 'bar' in %sbug43344_1.php on line 13
+Warning: Use of undefined constant bar - assumed 'bar' (this will throw an Error in a future version of PHP) in %sbug43344_1.php on line 13
bar
-Notice: Use of undefined constant bar - assumed 'bar' in %sbug43344_1.php on line 3
+Warning: Use of undefined constant bar - assumed 'bar' (this will throw an Error in a future version of PHP) in %sbug43344_1.php on line 3
bar
-Notice: Use of undefined constant bar - assumed 'bar' in %sbug43344_1.php on line 6
+Warning: Use of undefined constant bar - assumed 'bar' (this will throw an Error in a future version of PHP) in %sbug43344_1.php on line 6
bar
-Notice: Use of undefined constant bar - assumed 'bar' in %sbug43344_1.php on line 9
+Warning: Use of undefined constant bar - assumed 'bar' (this will throw an Error in a future version of PHP) in %sbug43344_1.php on line 9
bar
diff --git a/Zend/tests/bug43450.phpt b/Zend/tests/bug43450.phpt
index f0cd4f75bc..9f6c5f8504 100644
--- a/Zend/tests/bug43450.phpt
+++ b/Zend/tests/bug43450.phpt
@@ -1,7 +1,7 @@
--TEST--
Bug #43450 (Memory leak on some functions with implicit object __toString() call)
--SKIPIF--
-<?php if (!function_exists('memory_get_usage')) die('memory_get_usage() not installed'); ?>
+<?php if (!function_exists('memory_get_usage')) die('skip memory_get_usage() not installed'); ?>
--INI--
opcache.enable_cli=0
--FILE--
diff --git a/Zend/tests/bug44660.phpt b/Zend/tests/bug44660.phpt
index 1027377d34..002744ce64 100644
--- a/Zend/tests/bug44660.phpt
+++ b/Zend/tests/bug44660.phpt
@@ -28,22 +28,22 @@ var_dump($a);
?>
--EXPECTF--
--> read access:
-Notice: Trying to get property of non-object in %sbug44660.php on line 6
+Notice: Trying to get property 'p' of non-object in %sbug44660.php on line 6
--> direct assignment:
-Warning: Attempt to assign property of non-object in %sbug44660.php on line 9
+Warning: Attempt to assign property 'p' of non-object in %sbug44660.php on line 9
--> increment:
-Warning: Attempt to increment/decrement property of non-object in %sbug44660.php on line 12
+Warning: Attempt to increment/decrement property 'p' of non-object in %sbug44660.php on line 12
--> reference assignment:
-Warning: Attempt to modify property of non-object in %sbug44660.php on line 15
+Warning: Attempt to modify property 'p' of non-object in %sbug44660.php on line 15
--> reference assignment:
-Warning: Attempt to modify property of non-object in %sbug44660.php on line 18
+Warning: Attempt to modify property 'p' of non-object in %sbug44660.php on line 18
--> indexed assignment:
-Warning: Attempt to modify property of non-object in %sbug44660.php on line 21
+Warning: Attempt to modify property 'p' of non-object in %sbug44660.php on line 21
--> Confirm assignments have had no impact:
bool(true)
diff --git a/Zend/tests/bug46665.phpt b/Zend/tests/bug46665.phpt
index 1f82454387..954dbfaefb 100644
--- a/Zend/tests/bug46665.phpt
+++ b/Zend/tests/bug46665.phpt
@@ -3,12 +3,13 @@ Bug #46665 (Triggering autoload with a variable classname causes truncated autol
--FILE--
<?php
-$baz = '\\Foo\\Bar\\Baz';
-new $baz();
-function __autoload($class) {
+spl_autoload_register(function ($class) {
var_dump($class);
require __DIR__ .'/bug46665_autoload.inc';
-}
+});
+
+$baz = '\\Foo\\Bar\\Baz';
+new $baz();
?>
--EXPECTF--
diff --git a/Zend/tests/bug46811.phpt b/Zend/tests/bug46811.phpt
index e98f6e7720..fe41bffff6 100644
--- a/Zend/tests/bug46811.phpt
+++ b/Zend/tests/bug46811.phpt
@@ -9,5 +9,5 @@ var_dump(ini_get("arg_separator.output"));
?>
--EXPECTF--
bool(false)
-%unicode|string%(1) "&"
+string(1) "&"
diff --git a/Zend/tests/bug47109.phpt b/Zend/tests/bug47109.phpt
index 8f810d7fb1..4d157345b2 100644
--- a/Zend/tests/bug47109.phpt
+++ b/Zend/tests/bug47109.phpt
@@ -7,5 +7,5 @@ $a->{"a"."b"};
--EXPECTF--
Notice: Undefined variable: a in %sbug47109.php on line 2
-Notice: Trying to get property of non-object in %sbug47109.php on line 2
+Notice: Trying to get property 'ab' of non-object in %sbug47109.php on line 2
diff --git a/Zend/tests/bug47572.phpt b/Zend/tests/bug47572.phpt
index 695cc3a7f9..67bb3ec111 100644
--- a/Zend/tests/bug47572.phpt
+++ b/Zend/tests/bug47572.phpt
@@ -14,4 +14,4 @@ $foo = new Foo();
?>
--EXPECTF--
-Notice: Use of undefined constant FOO - assumed 'FOO' in %s on line %d
+Warning: Use of undefined constant FOO - assumed 'FOO' (this will throw an Error in a future version of PHP) in %s on line %d
diff --git a/Zend/tests/bug47714.phpt b/Zend/tests/bug47714.phpt
index e8ef8c330f..546da44a86 100644
--- a/Zend/tests/bug47714.phpt
+++ b/Zend/tests/bug47714.phpt
@@ -10,11 +10,7 @@ function au($class) {
}');
}
-function __autoload($class) {
- au($class);
-}
-
-//spl_autoload_register('au');
+spl_autoload_register('au');
set_exception_handler(function($exception) {
$h = new handler();
diff --git a/Zend/tests/bug48533.phpt b/Zend/tests/bug48533.phpt
index 61a56d38ac..3b4777884e 100644
--- a/Zend/tests/bug48533.phpt
+++ b/Zend/tests/bug48533.phpt
@@ -31,11 +31,11 @@ $x::c();
?>
--EXPECTF--
-%unicode|string%(9) "__call::a"
+string(9) "__call::a"
int(2)
-%unicode|string%(9) "__call::c"
-%unicode|string%(15) "__callStatic::a"
+string(9) "__call::c"
+string(15) "__callStatic::a"
Deprecated: Non-static method foo::b() should not be called statically in %s on line %d
int(2)
-%unicode|string%(15) "__callStatic::c"
+string(15) "__callStatic::c"
diff --git a/Zend/tests/bug48693.phpt b/Zend/tests/bug48693.phpt
index 41e0d82274..f916b6407b 100644
--- a/Zend/tests/bug48693.phpt
+++ b/Zend/tests/bug48693.phpt
@@ -31,15 +31,22 @@ var_dump(
?>
--EXPECTF--
+Deprecated: Function create_function() is deprecated in %s on line %d
ParseError: syntax error, unexpected '}', expecting end of file in %sbug48693.php(4) : runtime-created function:1
Stack trace:
#0 %sbug48693.php(4): create_function('', 'return 1; }')
#1 {main}
+
+Deprecated: Function create_function() is deprecated in %s on line %d
+
+Deprecated: Function create_function() is deprecated in %s on line %d
ParseError: syntax error, unexpected end of file in %sbug48693.php(14) : runtime-created function:1
Stack trace:
#0 %sbug48693.php(14): create_function('', '{')
#1 {main}
+
+Deprecated: Function create_function() is deprecated in %s on line %d
int(2)
int(3)
diff --git a/Zend/tests/bug48770.phpt b/Zend/tests/bug48770.phpt
index 40fa84157b..067e892e66 100644
--- a/Zend/tests/bug48770.phpt
+++ b/Zend/tests/bug48770.phpt
@@ -50,4 +50,4 @@ $c->func('This should work!');
?>
--EXPECTF--
-%unicode|string%(26) "A::func: This should work!"
+string(26) "A::func: This should work!"
diff --git a/Zend/tests/bug48770_2.phpt b/Zend/tests/bug48770_2.phpt
index dff54e1550..54ce92fa61 100644
--- a/Zend/tests/bug48770_2.phpt
+++ b/Zend/tests/bug48770_2.phpt
@@ -46,8 +46,8 @@ $c->func('This should work!');
?>
--EXPECTF--
-%unicode|string%(27) "A::func2: This should work!"
-%unicode|string%(27) "A::func3: This should work!"
+string(27) "A::func2: This should work!"
+string(27) "A::func3: This should work!"
Warning: call_user_func_array() expects parameter 1 to be a valid callback, cannot access private method A::func22() in %s on line %d
diff --git a/Zend/tests/bug48770_3.phpt b/Zend/tests/bug48770_3.phpt
index 68fe84314d..43311df533 100644
--- a/Zend/tests/bug48770_3.phpt
+++ b/Zend/tests/bug48770_3.phpt
@@ -45,7 +45,7 @@ $c->func('This should work!');
?>
--EXPECTF--
-%unicode|string%(27) "B::func2: This should work!"
-%unicode|string%(27) "B::func3: This should work!"
+string(27) "B::func2: This should work!"
+string(27) "B::func3: This should work!"
Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'B' does not have a method 'inexistent' in %s on line %d
diff --git a/Zend/tests/bug49893.phpt b/Zend/tests/bug49893.phpt
index b340f7bdfd..addf447073 100644
--- a/Zend/tests/bug49893.phpt
+++ b/Zend/tests/bug49893.phpt
@@ -20,7 +20,7 @@ class B {
try {
$b = new B();
} catch(Exception $e) {
- echo $e->getMessage() . "\n";;
+ echo $e->getMessage() . "\n";
}
?>
--EXPECT--
diff --git a/Zend/tests/bug49908.phpt b/Zend/tests/bug49908.phpt
index ea05f2b567..6999b9e0aa 100644
--- a/Zend/tests/bug49908.phpt
+++ b/Zend/tests/bug49908.phpt
@@ -3,7 +3,7 @@ Bug #49908 (throwing exception in __autoload crashes when interface is not defin
--FILE--
<?php
-function __autoload($className) {
+spl_autoload_register(function ($className) {
var_dump($className);
if ($className == 'Foo') {
@@ -11,18 +11,20 @@ function __autoload($className) {
} else {
throw new Exception($className);
}
-}
+});
new Foo;
?>
--EXPECTF--
-%unicode|string%(3) "Foo"
-%unicode|string%(3) "Bar"
+string(3) "Foo"
+string(3) "Bar"
Fatal error: Uncaught Exception: Bar in %s:%d
Stack trace:
-#0 %s(7): __autoload('Bar')
-#1 %s(13): __autoload('Foo')
-#2 {main}
+#0 [internal function]: {closure}('Bar')
+#1 %s(%d): spl_autoload_call('Bar')
+#2 [internal function]: {closure}('Foo')
+#3 %s(%d): spl_autoload_call('Foo')
+#4 {main}
thrown in %s on line %d
diff --git a/Zend/tests/bug52237.phpt b/Zend/tests/bug52237.phpt
index 0b54787aa9..47d39f8e9d 100644
--- a/Zend/tests/bug52237.phpt
+++ b/Zend/tests/bug52237.phpt
@@ -8,5 +8,5 @@ var_dump($data);
?>
--EXPECTF--
-Warning: Attempt to modify property of non-object in %sbug52237.php on line 3
+Warning: Attempt to modify property 'info' of non-object in %sbug52237.php on line 3
string(4) "test"
diff --git a/Zend/tests/bug54262.phpt b/Zend/tests/bug54262.phpt
index 17a6ea6381..16933ca300 100644
--- a/Zend/tests/bug54262.phpt
+++ b/Zend/tests/bug54262.phpt
@@ -11,7 +11,7 @@ echo "ok\n";
--EXPECTF--
bool(false)
-Warning: Attempt to modify property of non-object in %sbug54262.php on line 4
+Warning: Attempt to modify property 'a' of non-object in %sbug54262.php on line 4
Warning: Cannot use a scalar value as an array in %sbug54262.php on line 5
ok
diff --git a/Zend/tests/bug54585.phpt b/Zend/tests/bug54585.phpt
index 2ca11f3e6a..deabe55af8 100644
--- a/Zend/tests/bug54585.phpt
+++ b/Zend/tests/bug54585.phpt
@@ -5,11 +5,13 @@ track_errors=On
--FILE--
<?php
function testing($source) {
- unset($source[$cos]);
+ unset($source[$cos]);
}
testing($_GET);
echo "ok\n";
?>
--EXPECTF--
+Deprecated: Directive 'track_errors' is deprecated in Unknown on line 0
+
Notice: Undefined variable: cos in %sbug54585.php on line 3
ok
diff --git a/Zend/tests/bug55007.phpt b/Zend/tests/bug55007.phpt
index 425ce8f296..c3fb3c47f9 100644
--- a/Zend/tests/bug55007.phpt
+++ b/Zend/tests/bug55007.phpt
@@ -3,10 +3,10 @@ Bug #55007 (compiler fail after previous fail)
--FILE--
<?php
-function __autoload($classname) {
+spl_autoload_register(function ($classname) {
if ('CompileErrorClass'==$classname) eval('class CompileErrorClass { function foo() { $a[]; } }');
if ('MyErrorHandler'==$classname) eval('class MyErrorHandler { function __construct() { print "My error handler runs.\n"; } }');
-}
+});
function shutdown() {
new MyErrorHandler();
diff --git a/Zend/tests/bug55509.phpt b/Zend/tests/bug55509.phpt
index 5268789df6..4fc3299620 100644
--- a/Zend/tests/bug55509.phpt
+++ b/Zend/tests/bug55509.phpt
@@ -1,71 +1,71 @@
---TEST--
-Bug #55509 (segfault on x86_64 using more than 2G memory)
---SKIPIF--
-<?php
-if (PHP_INT_SIZE == 4) {
- die('skip Not for 32-bits OS');
-}
-
-$zend_mm_enabled = getenv("USE_ZEND_ALLOC");
-if ($zend_mm_enabled === "0") {
- die("skip Zend MM disabled");
-}
-
-if (getenv("SKIP_SLOW_TESTS")) die("skip slow test");
-// check the available memory
-if (PHP_OS == 'Linux') {
- $lines = file('/proc/meminfo');
- $infos = array();
- foreach ($lines as $line) {
- $tmp = explode(":", $line);
- $index = strtolower($tmp[0]);
- $value = (int)ltrim($tmp[1], " ")*1024;
- $infos[$index] = $value;
- }
- $freeMemory = $infos['memfree']+$infos['buffers']+$infos['cached'];
- if ($freeMemory < 2100*1024*1024) {
- die('skip Not enough memory.');
- }
-}
-elseif (PHP_OS == 'FreeBSD') {
- $lines = explode("\n",`sysctl -a`);
- $infos = array();
- foreach ($lines as $line) {
- if(!$line){
- continue;
- }
- $tmp = explode(":", $line);
- $index = strtolower($tmp[0]);
- $value = trim($tmp[1], " ");
- $infos[$index] = $value;
- }
- $freeMemory = ($infos['vm.stats.vm.v_inactive_count']*$infos['hw.pagesize'])
- +($infos['vm.stats.vm.v_cache_count']*$infos['hw.pagesize'])
- +($infos['vm.stats.vm.v_free_count']*$infos['hw.pagesize']);
- if ($freeMemory < 2100*1024*1024) {
- die('skip Not enough memory.');
- }
-}
-?>
---INI--
-memory_limit=2100M
---FILE--
-<?php
-$a1 = str_repeat("1", 1024 * 1024 * 1024 * 0.5);
-echo "1\n";
-$a2 = str_repeat("2", 1024 * 1024 * 1024 * 0.5);
-echo "2\n";
-$a3 = str_repeat("3", 1024 * 1024 * 1024 * 0.5);
-echo "3\n";
-$a4 = str_repeat("4", 1024 * 1024 * 1024 * 0.5);
-echo "4\n";
-$a5 = str_repeat("5", 1024 * 1024 * 1024 * 0.5);
-echo "5\n";
-?>
---EXPECTF--
-1
-2
-3
-4
-
-Fatal error: Allowed memory size of %d bytes exhausted%s(tried to allocate %d bytes) in %sbug55509.php on line %d
+--TEST--
+Bug #55509 (segfault on x86_64 using more than 2G memory)
+--SKIPIF--
+<?php
+if (PHP_INT_SIZE == 4) {
+ die('skip Not for 32-bits OS');
+}
+
+$zend_mm_enabled = getenv("USE_ZEND_ALLOC");
+if ($zend_mm_enabled === "0") {
+ die("skip Zend MM disabled");
+}
+
+if (getenv("SKIP_SLOW_TESTS")) die("skip slow test");
+// check the available memory
+if (PHP_OS == 'Linux') {
+ $lines = file('/proc/meminfo');
+ $infos = array();
+ foreach ($lines as $line) {
+ $tmp = explode(":", $line);
+ $index = strtolower($tmp[0]);
+ $value = (int)ltrim($tmp[1], " ")*1024;
+ $infos[$index] = $value;
+ }
+ $freeMemory = $infos['memfree']+$infos['buffers']+$infos['cached'];
+ if ($freeMemory < 2100*1024*1024) {
+ die('skip Not enough memory.');
+ }
+}
+elseif (PHP_OS == 'FreeBSD') {
+ $lines = explode("\n",`sysctl -a`);
+ $infos = array();
+ foreach ($lines as $line) {
+ if(!$line){
+ continue;
+ }
+ $tmp = explode(":", $line);
+ $index = strtolower($tmp[0]);
+ $value = trim($tmp[1], " ");
+ $infos[$index] = $value;
+ }
+ $freeMemory = ($infos['vm.stats.vm.v_inactive_count']*$infos['hw.pagesize'])
+ +($infos['vm.stats.vm.v_cache_count']*$infos['hw.pagesize'])
+ +($infos['vm.stats.vm.v_free_count']*$infos['hw.pagesize']);
+ if ($freeMemory < 2100*1024*1024) {
+ die('skip Not enough memory.');
+ }
+}
+?>
+--INI--
+memory_limit=2100M
+--FILE--
+<?php
+$a1 = str_repeat("1", 1024 * 1024 * 1024 * 0.5);
+echo "1\n";
+$a2 = str_repeat("2", 1024 * 1024 * 1024 * 0.5);
+echo "2\n";
+$a3 = str_repeat("3", 1024 * 1024 * 1024 * 0.5);
+echo "3\n";
+$a4 = str_repeat("4", 1024 * 1024 * 1024 * 0.5);
+echo "4\n";
+$a5 = str_repeat("5", 1024 * 1024 * 1024 * 0.5);
+echo "5\n";
+?>
+--EXPECTF--
+1
+2
+3
+4
+
+Fatal error: Allowed memory size of %d bytes exhausted%s(tried to allocate %d bytes) in %sbug55509.php on line %d
diff --git a/Zend/tests/bug60598.phpt b/Zend/tests/bug60598.phpt
index eeee75a19d..143ac79504 100644
--- a/Zend/tests/bug60598.phpt
+++ b/Zend/tests/bug60598.phpt
@@ -6,7 +6,7 @@ define('OBJECT_COUNT', 10000);
$containers = array();
-class Object {
+class ObjectOne {
protected $_guid = 0;
public function __construct() {
global $containers;
@@ -20,7 +20,7 @@ class Object {
}
for ($i = 0; $i < OBJECT_COUNT; ++$i) {
- new Object();
+ new ObjectOne();
}
// You probably won't see this because of the "zend_mm_heap corrupted"
diff --git a/Zend/tests/bug61011.phpt b/Zend/tests/bug61011.phpt
index bce0e33209..1e91a55078 100644
--- a/Zend/tests/bug61011.phpt
+++ b/Zend/tests/bug61011.phpt
@@ -2,9 +2,10 @@
Bug #61011 (Crash when an exception is thrown by __autoload accessing a static property)
--FILE--
<?php
-function __autoload($name) {
+spl_autoload_register(function ($name) {
throw new Exception($name);
-}
+});
+
try {
echo AAA::$a; //zend_fetch_var_address_helper
} catch (Exception $e) {
diff --git a/Zend/tests/bug61970.phpt b/Zend/tests/bug61970.phpt
new file mode 100644
index 0000000000..9cdb87a01a
--- /dev/null
+++ b/Zend/tests/bug61970.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Bug #61970 (Restraining __construct() access level in subclass gives a fatal error)
+--FILE--
+<?php
+
+class Foo {
+ public function __construct(){}
+}
+
+class Bar extends Foo {
+ protected function __construct(){}
+}
+
+echo 'DONE';
+--EXPECT--
+DONE
diff --git a/Zend/tests/bug61970_1.phpt b/Zend/tests/bug61970_1.phpt
new file mode 100644
index 0000000000..978884adba
--- /dev/null
+++ b/Zend/tests/bug61970_1.phpt
@@ -0,0 +1,15 @@
+--TEST--
+Bug #61970 (Restraining __construct() access level in subclass gives a fatal error - stays when implementing abstract)
+--FILE--
+<?php
+
+abstract class Foo {
+ abstract public function __construct();
+}
+
+class Bar extends Foo {
+ protected function __construct(){}
+}
+
+--EXPECTF--
+Fatal error: Access level to Bar::__construct() must be public (as in class Foo) in %s
diff --git a/Zend/tests/bug61970_2.phpt b/Zend/tests/bug61970_2.phpt
new file mode 100644
index 0000000000..56203f7685
--- /dev/null
+++ b/Zend/tests/bug61970_2.phpt
@@ -0,0 +1,19 @@
+--TEST--
+Bug #61970 (Restraining __construct() access level in subclass gives a fatal error - stays when inheriting implemented abstract)
+--FILE--
+<?php
+
+abstract class Foo {
+ abstract public function __construct();
+}
+
+class Bar extends Foo {
+ public function __construct(){}
+}
+
+class Baz extends Bar {
+ protected function __construct(){}
+}
+
+--EXPECTF--
+Fatal error: Access level to Baz::__construct() must be public (as in class Bar) in %s
diff --git a/Zend/tests/bug62358.phpt b/Zend/tests/bug62358.phpt
index 35bbc33835..8509383d46 100644
--- a/Zend/tests/bug62358.phpt
+++ b/Zend/tests/bug62358.phpt
@@ -23,4 +23,4 @@ class B extends A {
}
?>
--EXPECTF--
-Fatal error: Declaration of B::foo($var) must be compatible with I::foo() in %sbug62358.php on line 17
+Fatal error: Declaration of B::foo($var) must be compatible with A::foo() in %sbug62358.php on line 17
diff --git a/Zend/tests/bug62907.phpt b/Zend/tests/bug62907.phpt
index 53ab17cb32..c47c34bbe7 100644
--- a/Zend/tests/bug62907.phpt
+++ b/Zend/tests/bug62907.phpt
@@ -2,7 +2,7 @@
Bug #62907 (Double free when use traits)
--FILE--
<?php
-function __autoload($name) {
+spl_autoload_register(function ($name) {
if ($name == "B") {
eval ("abstract class B extends A { }");
} else if ($name == "A") {
@@ -11,7 +11,7 @@ function __autoload($name) {
eval ("trait T { public function __construct() { } }");
}
return TRUE;
-}
+});
class C extends B {
public function __construct() {
diff --git a/Zend/tests/bug63305.phpt b/Zend/tests/bug63305.phpt
index 4bd3a4dbeb..bd18ccbb1c 100644
--- a/Zend/tests/bug63305.phpt
+++ b/Zend/tests/bug63305.phpt
@@ -2,9 +2,8 @@
Bug #63305 (zend_mm_heap corrupted with traits)
--FILE--
<?php
-new Attachment("");
-function __autoload($class) {
+spl_autoload_register(function ($class) {
switch ($class) {
case "Attachment":
eval(<<<'PHP'
@@ -36,7 +35,9 @@ PHP
break;
}
return TRUE;
-}
+});
+
+new Attachment("");
echo "okey";
?>
--EXPECT--
diff --git a/Zend/tests/bug64720.phpt b/Zend/tests/bug64720.phpt
index 45dee3e8c4..efe3379bd4 100644
--- a/Zend/tests/bug64720.phpt
+++ b/Zend/tests/bug64720.phpt
@@ -44,9 +44,6 @@ $foo = new Foo();
$bar = new Bar();
$bar->test();
?>
---EXPECTF--
-Fatal error: Uncaught Error: Access to undeclared static property: Stat::$requests in %sbug64720.php:12
-Stack trace:
-#0 [internal function]: Stat->__destruct()
-#1 {main}
- thrown in %sbug64720.php on line 12
+OK
+--EXPECT--
+OK
diff --git a/Zend/tests/bug64979.phpt b/Zend/tests/bug64979.phpt
index 5bc8e5a6ab..6122ccf270 100644
--- a/Zend/tests/bug64979.phpt
+++ b/Zend/tests/bug64979.phpt
@@ -1,30 +1,30 @@
---TEST--
-Bug #64979 (Wrong behavior of static variables in closure generators)
---FILE--
-<?php
-
-function new_closure_gen() {
- return function() {
- static $foo = 0;
- yield ++$foo;
- };
-}
-
-$closure1 = new_closure_gen();
-$closure2 = new_closure_gen();
-
-$gen1 = $closure1();
-$gen2 = $closure1();
-$gen3 = $closure2();
-
-foreach (array($gen1, $gen2, $gen3) as $gen) {
- foreach ($gen as $val) {
- var_dump($val);
- }
-}
-
-?>
---EXPECT--
-int(1)
-int(2)
-int(1)
+--TEST--
+Bug #64979 (Wrong behavior of static variables in closure generators)
+--FILE--
+<?php
+
+function new_closure_gen() {
+ return function() {
+ static $foo = 0;
+ yield ++$foo;
+ };
+}
+
+$closure1 = new_closure_gen();
+$closure2 = new_closure_gen();
+
+$gen1 = $closure1();
+$gen2 = $closure1();
+$gen3 = $closure2();
+
+foreach (array($gen1, $gen2, $gen3) as $gen) {
+ foreach ($gen as $val) {
+ var_dump($val);
+ }
+}
+
+?>
+--EXPECT--
+int(1)
+int(2)
+int(1)
diff --git a/Zend/tests/bug65254.phpt b/Zend/tests/bug65254.phpt
index d2ebba4d97..d58759bfd4 100644
--- a/Zend/tests/bug65254.phpt
+++ b/Zend/tests/bug65254.phpt
@@ -2,12 +2,11 @@
Bug #65254 (Exception not catchable when exception thrown in autoload with a namespace)
--FILE--
<?php
-function __autoload($class)
-{
+spl_autoload_register(function ($class) {
eval("namespace ns_test; class test {}");
throw new \Exception('abcd');
-}
+});
try
{
diff --git a/Zend/tests/bug67858.phpt b/Zend/tests/bug67858.phpt
index f0cfc74b0a..1186cd6a6f 100644
--- a/Zend/tests/bug67858.phpt
+++ b/Zend/tests/bug67858.phpt
@@ -15,5 +15,7 @@ f();
?>
--EXPECTF--
+Deprecated: Directive 'track_errors' is deprecated in Unknown on line 0
+
Notice: Undefined variable: var in %s on line %d
string(23) "Undefined variable: var"
diff --git a/Zend/tests/bug68652.phpt b/Zend/tests/bug68652.phpt
index 8e54af2e34..de450b102a 100644
--- a/Zend/tests/bug68652.phpt
+++ b/Zend/tests/bug68652.phpt
@@ -36,11 +36,6 @@ class Bar {
$foo = new Foo();
?>
---EXPECTF--
-Fatal error: Uncaught Error: Access to undeclared static property: Bar::$instance in %sbug68652.php:%d
-Stack trace:
-#0 %s(%d): Bar::getInstance()
-#1 [internal function]: Foo->__destruct()
-#2 {main}
- thrown in %sbug68652.php on line %d
-
+OK
+--EXPECT--
+OK
diff --git a/Zend/tests/bug69755.phpt b/Zend/tests/bug69755.phpt
index 67c0ed3383..08432808e2 100644
--- a/Zend/tests/bug69755.phpt
+++ b/Zend/tests/bug69755.phpt
@@ -5,4 +5,4 @@ Bug #69755: segfault in ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER
c . 10;
?>
--EXPECTF--
-Notice: Use of undefined constant c - assumed 'c' in %sbug69755.php on line 2
+Warning: Use of undefined constant c - assumed 'c' (this will throw an Error in a future version of PHP) in %sbug69755.php on line 2
diff --git a/Zend/tests/bug69788.phpt b/Zend/tests/bug69788.phpt
index 63dd42d451..326328ccfa 100644
--- a/Zend/tests/bug69788.phpt
+++ b/Zend/tests/bug69788.phpt
@@ -5,4 +5,4 @@ Bug #69788: Malformed script causes Uncaught Error in php-cgi, valgrind SIGILL
--EXPECTF--
Notice: Array to string conversion in %s on line %d
-Notice: Use of undefined constant t - assumed 't' in %s on line %d
+Warning: Use of undefined constant t - assumed 't' (this will throw an Error in a future version of PHP) in %s on line %d
diff --git a/Zend/tests/bug70805.phpt b/Zend/tests/bug70805.phpt
index 256f52eed5..ec835bcd1b 100644
--- a/Zend/tests/bug70805.phpt
+++ b/Zend/tests/bug70805.phpt
@@ -27,7 +27,7 @@ $c = new A;
$array = array($c); //This is used to leave a room for $GLOBALS["a"]
unset($c);
-while ($i++ < 9997) {
+while ($i++ < 9998) {
$t = [];
$t[] = &$t;
unset($t);
diff --git a/Zend/tests/bug70805_1.phpt b/Zend/tests/bug70805_1.phpt
index af57cdb5d9..51595668a1 100644
--- a/Zend/tests/bug70805_1.phpt
+++ b/Zend/tests/bug70805_1.phpt
@@ -29,7 +29,7 @@ $c = new A;
$array = array($c);
unset($c);
-while ($i++ < 9997) {
+while ($i++ < 9998) {
$t = [];
$t[] = &$t;
unset($t);
diff --git a/Zend/tests/bug70805_2.phpt b/Zend/tests/bug70805_2.phpt
index c878c83bbc..a4d01aa626 100644
--- a/Zend/tests/bug70805_2.phpt
+++ b/Zend/tests/bug70805_2.phpt
@@ -24,7 +24,7 @@ $a->b->a = $a;
$i = 0;
-while ($i++ < 9998) {
+while ($i++ < 9999) {
$t = [];
$t[] = &$t;
unset($t);
diff --git a/Zend/tests/bug71163.phpt b/Zend/tests/bug71163.phpt
index 102b1b93ec..2f6cbd5a45 100644
--- a/Zend/tests/bug71163.phpt
+++ b/Zend/tests/bug71163.phpt
@@ -2,10 +2,10 @@
Bug #71163 (Segmentation Fault (cleanup_unfinished_calls))
--FILE--
<?php
-function __autoload($name) {
+spl_autoload_register(function ($name) {
eval ("class $name extends Exception { public static function foo() {}}");
throw new Exception("boom");
-}
+});
function test2() {
try {
diff --git a/Zend/tests/bug71474.phpt b/Zend/tests/bug71474.phpt
index e67bb9b240..72b0db91a1 100644
--- a/Zend/tests/bug71474.phpt
+++ b/Zend/tests/bug71474.phpt
@@ -1,23 +1,23 @@
---TEST--
-Bug #71474: Crash because of VM stack corruption on Magento2
---FILE--
-<?php
-class foo {
- function __call($name, $args) {
- $a = $b = $c = $d = $e = $f = 1;
- }
-}
-
-function test($n, $x) {
-// var_dump($n);
- if ($n > 0) {
- $x->bug();
- test($n - 1, $x);
- }
-}
-
-test(3000, new foo());
-echo "OK\n";
-?>
---EXPECT--
-OK
+--TEST--
+Bug #71474: Crash because of VM stack corruption on Magento2
+--FILE--
+<?php
+class foo {
+ function __call($name, $args) {
+ $a = $b = $c = $d = $e = $f = 1;
+ }
+}
+
+function test($n, $x) {
+// var_dump($n);
+ if ($n > 0) {
+ $x->bug();
+ test($n - 1, $x);
+ }
+}
+
+test(3000, new foo());
+echo "OK\n";
+?>
+--EXPECT--
+OK
diff --git a/Zend/tests/bug72911.phpt b/Zend/tests/bug72911.phpt
index 098261cadf..84f04eff1e 100644
--- a/Zend/tests/bug72911.phpt
+++ b/Zend/tests/bug72911.phpt
@@ -11,7 +11,7 @@ var_dump($b);
?>
--EXPECTF--
-Warning: Attempt to modify property of non-object in %sbug72911.php on line %d
+Warning: Attempt to modify property 'b' of non-object in %sbug72911.php on line %d
-Warning: Attempt to assign property of non-object in %sbug72911.php on line %d
+Warning: Attempt to assign property 'i' of non-object in %sbug72911.php on line %d
NULL
diff --git a/Zend/tests/bug72918.phpt b/Zend/tests/bug72918.phpt
index f3dc1d2918..403d4e69c5 100644
--- a/Zend/tests/bug72918.phpt
+++ b/Zend/tests/bug72918.phpt
@@ -1,22 +1,22 @@
---TEST--
-Bug #72918 (negative offset inside a quoted string leads to parse error)
---FILE--
-<?php
-$array = [-3 => 'foo'];
-$string = 'abcde';
-
-echo "$array[-3]\n";
-echo "$string[-3]\n";
-echo <<<EOT
-$array[-3]
-$string[-3]
-
-EOT;
-?>
-===DONE===
---EXPECT--
-foo
-c
-foo
-c
-===DONE===
+--TEST--
+Bug #72918 (negative offset inside a quoted string leads to parse error)
+--FILE--
+<?php
+$array = [-3 => 'foo'];
+$string = 'abcde';
+
+echo "$array[-3]\n";
+echo "$string[-3]\n";
+echo <<<EOT
+$array[-3]
+$string[-3]
+
+EOT;
+?>
+===DONE===
+--EXPECT--
+foo
+c
+foo
+c
+===DONE===
diff --git a/Zend/tests/bug72944.phpt b/Zend/tests/bug72944.phpt
index 541730a22a..5f494beb40 100644
--- a/Zend/tests/bug72944.phpt
+++ b/Zend/tests/bug72944.phpt
@@ -6,7 +6,7 @@ Bug #72944 (Null pointer deref in zval_delref_p).
echo "OK\n";
?>
--EXPECTF--
-Notice: Use of undefined constant e - assumed 'e' in %sbug72944.php on line 2
+Warning: Use of undefined constant e - assumed 'e' (this will throw an Error in a future version of PHP) in %sbug72944.php on line 2
Notice: Undefined variable: A in %sbug72944.php on line 2
OK
diff --git a/Zend/tests/bug73163.phpt b/Zend/tests/bug73163.phpt
index 448d7f5959..5c0560458d 100644
--- a/Zend/tests/bug73163.phpt
+++ b/Zend/tests/bug73163.phpt
@@ -14,7 +14,7 @@ doSomething();
?>
--EXPECTF--
-Fatal error: Uncaught Exception: Use of undefined constant UNDEFINED - assumed 'UNDEFINED' in %s:%d
+Fatal error: Uncaught Exception: Use of undefined constant UNDEFINED - assumed 'UNDEFINED' (this will throw an Error in a future version of PHP) in %s:%d
Stack trace:
#0 %s(%d): {closure}(%s)
#1 %s(%d): doSomething()
diff --git a/Zend/tests/bug73181.phpt b/Zend/tests/bug73181.phpt
index 2994e99b9f..3ab93ebf5b 100644
--- a/Zend/tests/bug73181.phpt
+++ b/Zend/tests/bug73181.phpt
@@ -11,7 +11,8 @@ function x() {
x();
?>
---EXPECT--
+--EXPECTF--
+Deprecated: parse_str(): Calling parse_str() without the result argument is deprecated in %s on line %d
array(2) {
[1]=>
string(0) ""
diff --git a/Zend/tests/bug73987.phpt b/Zend/tests/bug73987.phpt
new file mode 100644
index 0000000000..610b594a64
--- /dev/null
+++ b/Zend/tests/bug73987.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Bug #73987 (Method compatibility check looks to original definition and not parent - nullability interface)
+--FILE--
+<?php
+
+interface I {
+ public function example($a, $b, $c);
+}
+class A implements I {
+ public function example($a, $b = null, $c = null) { } // compatible with I::example
+}
+class B extends A {
+ public function example($a, $b, $c = null) { } // compatible with I::example
+}
+
+?>
+--EXPECTF--
+Fatal error: Declaration of B::example($a, $b, $c = NULL) must be compatible with A::example($a, $b = NULL, $c = NULL) in %s
diff --git a/Zend/tests/bug73987_1.phpt b/Zend/tests/bug73987_1.phpt
new file mode 100644
index 0000000000..010987ea5f
--- /dev/null
+++ b/Zend/tests/bug73987_1.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Bug #73987 (Method compatibility check looks to original definition and not parent - return types interface)
+--FILE--
+<?php
+
+interface I {
+ public function example();
+}
+class A implements I {
+ public function example(): int { } // compatible with I::example
+}
+class B extends A {
+ public function example(): string { } // compatible with I::example
+}
+
+?>
+--EXPECTF--
+Fatal error: Declaration of B::example(): string must be compatible with A::example(): int in %s
diff --git a/Zend/tests/bug73987_2.phpt b/Zend/tests/bug73987_2.phpt
new file mode 100644
index 0000000000..a70f1455e8
--- /dev/null
+++ b/Zend/tests/bug73987_2.phpt
@@ -0,0 +1,20 @@
+--TEST--
+Bug #73987 (Method compatibility check looks to original definition and not parent - nullabilty abstract)
+--FILE--
+<?php
+
+abstract class A {
+ abstract function example($a, $b, $c);
+}
+
+class B extends A {
+ function example($a, $b = null, $c = null) { }
+}
+
+class C extends B {
+ function example($a, $b, $c = null) { }
+}
+
+?>
+--EXPECTF--
+Fatal error: Declaration of C::example($a, $b, $c = NULL) must be compatible with B::example($a, $b = NULL, $c = NULL) in %s
diff --git a/Zend/tests/bug73987_3.phpt b/Zend/tests/bug73987_3.phpt
new file mode 100644
index 0000000000..89e4686ed6
--- /dev/null
+++ b/Zend/tests/bug73987_3.phpt
@@ -0,0 +1,20 @@
+--TEST--
+Bug #73987 (Method compatibility check looks to original definition and not parent - return types abstract)
+--FILE--
+<?php
+
+abstract class A {
+ abstract function example();
+}
+
+class B extends A {
+ function example(): int { }
+}
+
+class C extends B {
+ function example(): string { }
+}
+
+?>
+--EXPECTF--
+Fatal error: Declaration of C::example(): string must be compatible with B::example(): int in %s
diff --git a/Zend/tests/bug74053.phpt b/Zend/tests/bug74053.phpt
new file mode 100644
index 0000000000..b1936a58e9
--- /dev/null
+++ b/Zend/tests/bug74053.phpt
@@ -0,0 +1,43 @@
+--TEST--
+Bug #74053 (Corrupted class entries on shutdown when a destructor spawns another object)
+--FILE--
+<?php
+class b {
+ function __destruct() {
+ echo "b::destruct\n";
+ }
+}
+class a {
+ static $b;
+ static $new;
+ static $max = 10;
+ function __destruct() {
+ if (self::$max-- <= 0) return;
+ echo "a::destruct\n";
+ self::$b = new b;
+ self::$new[] = new a;
+ }
+}
+new a;
+?>
+--EXPECT--
+a::destruct
+b::destruct
+a::destruct
+b::destruct
+a::destruct
+b::destruct
+a::destruct
+b::destruct
+a::destruct
+b::destruct
+a::destruct
+b::destruct
+a::destruct
+b::destruct
+a::destruct
+b::destruct
+a::destruct
+b::destruct
+a::destruct
+b::destruct
diff --git a/Zend/tests/bug74188.phpt b/Zend/tests/bug74188.phpt
deleted file mode 100644
index 3eb4facdd9..0000000000
--- a/Zend/tests/bug74188.phpt
+++ /dev/null
@@ -1,14 +0,0 @@
---TEST--
-Fixes bug 74188 (undeclared static variables emit a warning with ?? operator)
---FILE--
-<?php
-abstract class Test
-{
- public static function get()
- {
- static::$a ?? true;
- }
-}
-Test::get();
-?>
---EXPECT--
diff --git a/Zend/tests/bug74269.phpt b/Zend/tests/bug74269.phpt
new file mode 100644
index 0000000000..53ef570fb6
--- /dev/null
+++ b/Zend/tests/bug74269.phpt
@@ -0,0 +1,17 @@
+--TEST--
+Bug #74269: It's possible to override trait property with different loosely-equal value
+--FILE--
+<?php
+trait PropertiesTrait
+{
+ public $same = true;
+}
+
+class PropertiesExample
+{
+ use PropertiesTrait;
+ public $same = 2;
+}
+?>
+--EXPECTF--
+Fatal error: PropertiesExample and PropertiesTrait define the same property ($same) in the composition of PropertiesExample. However, the definition differs and is considered incompatible. Class was composed in %s
diff --git a/Zend/tests/bug74810.phpt b/Zend/tests/bug74810.phpt
new file mode 100644
index 0000000000..6c24e4bce8
--- /dev/null
+++ b/Zend/tests/bug74810.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Bug #74810: Something odd about ordering of func_get_args() result in 7.2
+--FILE--
+<?php
+
+function test_slice1() {
+ var_dump(array_slice(func_get_args(), 1));
+}
+function test_slice5() {
+ var_dump(array_slice(func_get_args(), 5));
+}
+
+test_slice1(1, 2, 3);
+test_slice5(1, 2, 3);
+
+?>
+--EXPECT--
+array(2) {
+ [0]=>
+ int(2)
+ [1]=>
+ int(3)
+}
+array(0) {
+}
diff --git a/Zend/tests/bug74836.phpt b/Zend/tests/bug74836.phpt
new file mode 100644
index 0000000000..7281a07e0e
--- /dev/null
+++ b/Zend/tests/bug74836.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Bug #74836 (isset on zero-prefixed numeric indexes in array broken)
+--FILE--
+<?php
+$s = "1234567890a";
+$a[10] = "42";
+$i = "010";
+
+var_dump($s["10"], isset($s["10"]));
+var_dump($s["010"], isset($s["010"]));
+var_dump($s[$i], isset($s[$i]));
+
+var_dump($a["10"], isset($a["10"]));
+var_dump($a["010"], isset($a["010"]));
+var_dump($a[$i], isset($a[$i]));
+?>
+--EXPECTF--
+string(1) "a"
+bool(true)
+string(1) "a"
+bool(true)
+string(1) "a"
+bool(true)
+string(2) "42"
+bool(true)
+
+Notice: Undefined index: 010 in %s on line %d
+NULL
+bool(false)
+
+Notice: Undefined index: 010 in %s on line %d
+NULL
+bool(false)
diff --git a/Zend/tests/bug76337.phpt b/Zend/tests/bug76337.phpt
new file mode 100644
index 0000000000..07608e2660
--- /dev/null
+++ b/Zend/tests/bug76337.phpt
@@ -0,0 +1,12 @@
+--TEST--
+Bug 76337: segmentation fault when an extension use zend_register_class_alias() and opcache enabled
+--SKIPIF--
+<?php if (!class_exists('_ZendTestClass') || !extension_loaded('Zend OPcache')) die('skip');
+--INI--
+opcache.enable=1
+opcache.enable_cli=1
+--FILE--
+<?php
+var_dump(class_exists('_ZendTestClassAlias'));
+--EXPECT--
+bool(true)
diff --git a/Zend/tests/call_user_func_002.phpt b/Zend/tests/call_user_func_002.phpt
index e79dd1a759..454c6fda96 100644
--- a/Zend/tests/call_user_func_002.phpt
+++ b/Zend/tests/call_user_func_002.phpt
@@ -3,9 +3,9 @@ Testing call_user_func() with autoload and passing invalid params
--FILE--
<?php
-function __autoload($class) {
+spl_autoload_register(function ($class) {
var_dump($class);
-}
+});
call_user_func(array('foo', 'bar'));
call_user_func(array('', 'bar'));
@@ -14,7 +14,7 @@ call_user_func(array($foo, ''));
?>
--EXPECTF--
-%unicode|string%(3) "foo"
+string(3) "foo"
Warning: call_user_func() expects parameter 1 to be a valid callback, class 'foo' not found in %s on line %d
diff --git a/Zend/tests/call_user_func_003.phpt b/Zend/tests/call_user_func_003.phpt
index d516584eb2..102433f557 100644
--- a/Zend/tests/call_user_func_003.phpt
+++ b/Zend/tests/call_user_func_003.phpt
@@ -20,11 +20,11 @@ var_dump(call_user_func(function() use (&$foo) { return $foo; }, '__invoke'));
?>
--EXPECTF--
-%unicode|string%(3) "OK!"
+string(3) "OK!"
object(Closure)#%d (1) {
- [%u|b%"static"]=>
+ ["static"]=>
array(1) {
- [%u|b%"instance"]=>
+ ["instance"]=>
object(Closure)#%d (0) {
}
}
diff --git a/Zend/tests/cast_to_object.phpt b/Zend/tests/cast_to_object.phpt
index f8d4878475..04d68053e2 100644
--- a/Zend/tests/cast_to_object.phpt
+++ b/Zend/tests/cast_to_object.phpt
Binary files differ
diff --git a/Zend/tests/catch.phpt b/Zend/tests/catch.phpt
index 0ec5cf7590..a83dd75baf 100644
--- a/Zend/tests/catch.phpt
+++ b/Zend/tests/catch.phpt
@@ -2,11 +2,11 @@
catch shouldn't call __autoload
--FILE--
<?php
-function __autoload($name) {
+
+spl_autoload_register(function ($name) {
echo("AUTOLOAD '$name'\n");
eval("class $name {}");
-}
-
+});
try {
} catch (A $e) {
diff --git a/Zend/tests/class_alias_007.phpt b/Zend/tests/class_alias_007.phpt
index 247398e2ed..edcc096ade 100644
--- a/Zend/tests/class_alias_007.phpt
+++ b/Zend/tests/class_alias_007.phpt
@@ -3,9 +3,9 @@ Testing class_alias() using autoload
--FILE--
<?php
-function __autoload($a) {
+spl_autoload_register(function ($a) {
class foo { }
-}
+});
class_alias('foo', 'bar', 1);
diff --git a/Zend/tests/closure_025.phpt b/Zend/tests/closure_025.phpt
index 8ee187e1c8..b3d03a7ad9 100644
--- a/Zend/tests/closure_025.phpt
+++ b/Zend/tests/closure_025.phpt
@@ -8,5 +8,6 @@ $a = create_function('$x', 'return function($y) use ($x) { return $x * $y; };');
var_dump($a(2)->__invoke(4));
?>
---EXPECT--
+--EXPECTF--
+Deprecated: Function create_function() is deprecated in %s on line %d
int(8)
diff --git a/Zend/tests/constants_002.phpt b/Zend/tests/constants_002.phpt
index d590bf44b9..832da1564d 100644
--- a/Zend/tests/constants_002.phpt
+++ b/Zend/tests/constants_002.phpt
@@ -13,6 +13,6 @@ var_dump(foo);
--EXPECTF--
Warning: Constants may only evaluate to scalar values or arrays in %s on line %d
-Notice: Use of undefined constant foo - assumed 'foo' in %s on line %d
+Warning: Use of undefined constant foo - assumed 'foo' (this will throw an Error in a future version of PHP) in %s on line %d
string(%d) "foo"
resource(%d) of type (stream)
diff --git a/Zend/tests/constants_005.phpt b/Zend/tests/constants_005.phpt
index d2a205b784..b5a3a6bd38 100644
--- a/Zend/tests/constants_005.phpt
+++ b/Zend/tests/constants_005.phpt
@@ -7,6 +7,6 @@ define("ZEND_THREAD_safe", 123);
var_dump(ZEND_THREAD_safe);
?>
--EXPECTF--
-Notice: Use of undefined constant ZEND_THREAD_safe - assumed 'ZEND_THREAD_safe' in %s on line %d
+Warning: Use of undefined constant ZEND_THREAD_safe - assumed 'ZEND_THREAD_safe' (this will throw an Error in a future version of PHP) in %s on line %d
string(16) "ZEND_THREAD_safe"
int(123)
diff --git a/Zend/tests/dereference_014.phpt b/Zend/tests/dereference_014.phpt
index 62dffd3698..859ac93348 100644
--- a/Zend/tests/dereference_014.phpt
+++ b/Zend/tests/dereference_014.phpt
@@ -27,8 +27,8 @@ var_dump($h);
?>
--EXPECTF--
-Notice: Trying to get property of non-object in %s on line %d
+Notice: Trying to get property 'a' of non-object in %s on line %d
NULL
-Notice: Trying to get property of non-object in %s on line %d
+Notice: Trying to get property 'b' of non-object in %s on line %d
NULL
diff --git a/Zend/tests/dtor_scope.phpt b/Zend/tests/dtor_scope.phpt
index ab991cf949..80f42cacb5 100644
--- a/Zend/tests/dtor_scope.phpt
+++ b/Zend/tests/dtor_scope.phpt
@@ -1,7 +1,5 @@
--TEST--
Scoping in destructor call
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?>
--FILE--
<?php
class T
diff --git a/Zend/tests/each_001.phpt b/Zend/tests/each_001.phpt
index 06ab52a9c8..f2cae3d875 100644
--- a/Zend/tests/each_001.phpt
+++ b/Zend/tests/each_001.phpt
@@ -7,4 +7,6 @@ each($foo);
?>
--EXPECTF--
+Deprecated: The each() function is deprecated. This message will be suppressed on further calls in %s on line %d
+
Warning: Variable passed to each() is not an array or object in %s on line %d
diff --git a/Zend/tests/each_002.phpt b/Zend/tests/each_002.phpt
index 31b749e5fd..5454f5ce0f 100644
--- a/Zend/tests/each_002.phpt
+++ b/Zend/tests/each_002.phpt
@@ -16,6 +16,7 @@ var_dump(each($a));
?>
--EXPECTF--
+Deprecated: The each() function is deprecated. This message will be suppressed on further calls in %s on line %d
bool(false)
bool(false)
array(4) {
diff --git a/Zend/tests/each_003.phpt b/Zend/tests/each_003.phpt
index fbd54550fc..d0038c0561 100644
--- a/Zend/tests/each_003.phpt
+++ b/Zend/tests/each_003.phpt
@@ -12,6 +12,7 @@ var_dump(each($a[1]));
?>
--EXPECTF--
+Deprecated: The each() function is deprecated. This message will be suppressed on further calls in %s on line %d
array(4) {
[1]=>
array(0) {
diff --git a/Zend/tests/exception_012.phpt b/Zend/tests/exception_012.phpt
index bf00529a6c..a28e1643f5 100644
--- a/Zend/tests/exception_012.phpt
+++ b/Zend/tests/exception_012.phpt
@@ -13,6 +13,8 @@ $func();
--EXPECTHEADERS--
Content-type: text/html; charset=UTF-8
--EXPECTF--
+Deprecated: Function create_function() is deprecated in %s on line %d
+
Fatal error: Uncaught AssertionError: assert(false) in %sexception_012.php(%d) : runtime-created function:%d
Stack trace:
#0 %sexception_012.php(%d) : runtime-created function(%d): assert(false, 'assert(false)')
diff --git a/Zend/tests/fe_fetch_dtor_exception.phpt b/Zend/tests/fe_fetch_dtor_exception.phpt
new file mode 100644
index 0000000000..840544b8ec
--- /dev/null
+++ b/Zend/tests/fe_fetch_dtor_exception.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Dtor may throw exception furing FE_FETCH assignment
+--FILE--
+<?php
+
+$v = new class {
+ function __destruct() {
+ throw new Exception("foo");
+ }
+};
+
+try {
+ foreach ([1, 2] as $v) {
+ var_dump($v);
+ }
+} catch (Exception $e) {
+ echo $e->getMessage(), "\n";
+}
+
+?>
+--EXPECT--
+foo
diff --git a/Zend/tests/foreach_018.phpt b/Zend/tests/foreach_018.phpt
new file mode 100644
index 0000000000..3c0be7be19
--- /dev/null
+++ b/Zend/tests/foreach_018.phpt
@@ -0,0 +1,20 @@
+--TEST--
+Foreach on stdClass with properties looking like mangled properties
+--FILE--
+<?php
+
+$obj = (object)[
+ "\0A\0b" => 42,
+ "\0*\0c" => 24,
+];
+
+foreach ($obj as $k => $v) {
+ var_dump($k, $v);
+}
+
+?>
+--EXPECT--
+string(1) "b"
+int(42)
+string(1) "c"
+int(24)
diff --git a/Zend/tests/foreach_empty_loop_leak.phpt b/Zend/tests/foreach_empty_loop_leak.phpt
new file mode 100644
index 0000000000..70b391181b
--- /dev/null
+++ b/Zend/tests/foreach_empty_loop_leak.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Empty foreach loops with exception must not leak
+--FILE--
+<?php
+
+class Foo implements IteratorAggregate {
+ public function getIterator() {
+ return new ArrayIterator([]);
+ }
+ public function __destruct() {
+ throw new Exception;
+ }
+}
+
+try {
+ foreach (new Foo as $x);
+} catch (Exception $e) {
+ echo "Exception caught\n";
+}
+
+?>
+--EXPECT--
+Exception caught
diff --git a/Zend/tests/generators/errors/count_error.phpt b/Zend/tests/generators/errors/count_error.phpt
new file mode 100644
index 0000000000..97e03e7d71
--- /dev/null
+++ b/Zend/tests/generators/errors/count_error.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Generators can't be counted
+--FILE--
+<?php
+
+function gen() { yield; }
+
+$gen = gen();
+
+try {
+ count($gen);
+} catch (Exception $e) {
+ echo $e;
+}
+
+?>
+--EXPECTF--
+Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d
diff --git a/Zend/tests/instanceof.phpt b/Zend/tests/instanceof.phpt
index 8bcbede999..97d67ff567 100644
--- a/Zend/tests/instanceof.phpt
+++ b/Zend/tests/instanceof.phpt
@@ -2,10 +2,10 @@
instanceof shouldn't call __autoload
--FILE--
<?php
-function __autoload($name) {
+spl_autoload_register(function ($name) {
echo("AUTOLOAD '$name'\n");
eval("class $name {}");
-}
+});
class A {
}
diff --git a/Zend/tests/instanceof_001.phpt b/Zend/tests/instanceof_001.phpt
index 95e43ba506..9c86136c54 100644
--- a/Zend/tests/instanceof_001.phpt
+++ b/Zend/tests/instanceof_001.phpt
@@ -22,6 +22,8 @@ var_dump("$a" instanceof stdClass);
--EXPECTF--
bool(true)
bool(true)
+
+Deprecated: Function create_function() is deprecated in %s on line %d
bool(true)
bool(true)
bool(false)
diff --git a/Zend/tests/is_a.phpt b/Zend/tests/is_a.phpt
index f4161f2390..3714d50a62 100644
--- a/Zend/tests/is_a.phpt
+++ b/Zend/tests/is_a.phpt
@@ -4,10 +4,10 @@ is_a() and is_subclass_of() shouldn't call __autoload
error_reporting=14335
--FILE--
<?php
-function __autoload($name) {
+spl_autoload_register(function ($name) {
echo("AUTOLOAD '$name'\n");
eval("class $name {}");
-}
+});
class BASE {
}
diff --git a/Zend/tests/isset_003.phpt b/Zend/tests/isset_003.phpt
index 92225b5906..eac72f7e0a 100644
--- a/Zend/tests/isset_003.phpt
+++ b/Zend/tests/isset_003.phpt
@@ -33,7 +33,7 @@ Notice: Undefined variable: c in %s on line %d
Notice: Undefined variable: d in %s on line %d
-Notice: Trying to get property of non-object in %s on line %d
+Notice: Trying to get property '' of non-object in %s on line %d
bool(false)
bool(true)
bool(false)
diff --git a/Zend/tests/isset_003_2_4.phpt b/Zend/tests/isset_003_2_4.phpt
deleted file mode 100644
index 42d8cc6a08..0000000000
--- a/Zend/tests/isset_003_2_4.phpt
+++ /dev/null
@@ -1,42 +0,0 @@
---TEST--
-Testing isset accessing undefined array itens and properties
---SKIPIF--
-<?php if (version_compare(zend_version(), '2.4.0', '<')) die('skip ZendEngine 2.4 needed'); ?>
---FILE--
-<?php
-
-$a = 'foo';
-$b =& $a;
-
-var_dump(isset($b));
-
-var_dump(isset($a[0], $b[1]));
-
-var_dump(isset($a[0]->a));
-
-var_dump(isset($c[0][1][2]->a->b->c->d));
-
-var_dump(isset(${$a}->{$b->{$c[$d]}}));
-
-var_dump(isset($GLOBALS));
-
-var_dump(isset($GLOBALS[1]));
-
-var_dump(isset($GLOBALS[1]->$GLOBALS));
-
-?>
---EXPECTF--
-bool(true)
-bool(true)
-bool(false)
-bool(false)
-
-Notice: Undefined variable: c in %s on line %d
-
-Notice: Undefined variable: d in %s on line %d
-
-Notice: Trying to get property of non-object in %s on line %d
-bool(false)
-bool(true)
-bool(false)
-bool(false)
diff --git a/Zend/tests/ns_041.phpt b/Zend/tests/ns_041.phpt
index 0632fc9815..cf5c3929b5 100644
--- a/Zend/tests/ns_041.phpt
+++ b/Zend/tests/ns_041.phpt
@@ -18,5 +18,5 @@ ok
ok
ok
-Notice: Use of undefined constant BAR - assumed 'BAR' in %sns_041.php on line 9
+Warning: Use of undefined constant BAR - assumed 'BAR' (this will throw an Error in a future version of PHP) in %sns_041.php on line 9
BAR
diff --git a/Zend/tests/ns_069.inc b/Zend/tests/ns_069.inc
index 4f186390ad..46d8f8f488 100644
--- a/Zend/tests/ns_069.inc
+++ b/Zend/tests/ns_069.inc
@@ -1,3 +1,3 @@
<?php
-var_dump((binary)__NAMESPACE__);
+var_dump(__NAMESPACE__);
diff --git a/Zend/tests/ns_069.phpt b/Zend/tests/ns_069.phpt
index 63269d0de7..cbfb927049 100644
--- a/Zend/tests/ns_069.phpt
+++ b/Zend/tests/ns_069.phpt
@@ -7,9 +7,9 @@ namespace foo;
class Test {
static function f() {
- var_dump((binary)__NAMESPACE__);
+ var_dump(__NAMESPACE__);
include __DIR__ . '/ns_069.inc';
- var_dump((binary)__NAMESPACE__);
+ var_dump(__NAMESPACE__);
}
}
diff --git a/Zend/tests/ns_076.phpt b/Zend/tests/ns_076.phpt
index 1468654d55..ea97e924b1 100644
--- a/Zend/tests/ns_076.phpt
+++ b/Zend/tests/ns_076.phpt
@@ -11,11 +11,11 @@ echo "\n";
var_dump($a);
echo \unknown;
--EXPECTF--
-Notice: Use of undefined constant unknown - assumed 'unknown' in %sns_076.php on line %d
+Warning: Use of undefined constant unknown - assumed 'unknown' (this will throw an Error in a future version of PHP) in %sns_076.php on line %d
-Notice: Use of undefined constant unknown - assumed 'unknown' in %sns_076.php on line %d
+Warning: Use of undefined constant unknown - assumed 'unknown' (this will throw an Error in a future version of PHP) in %sns_076.php on line %d
-Notice: Use of undefined constant unknown - assumed 'unknown' in %sns_076.php on line %d
+Warning: Use of undefined constant unknown - assumed 'unknown' (this will throw an Error in a future version of PHP) in %sns_076.php on line %d
unknown
array(1) {
["unknown"]=>
diff --git a/Zend/tests/ns_088.phpt b/Zend/tests/ns_088.phpt
index 7af8dcc8d3..18210da6df 100644
--- a/Zend/tests/ns_088.phpt
+++ b/Zend/tests/ns_088.phpt
@@ -14,4 +14,4 @@ namespace Fiz\Biz\Buz {
}
?>
--EXPECTF--
-Parse error: syntax error, unexpected '{', expecting ',' or '}' in %sns_088.php on line 5
+Parse error: syntax error, unexpected '{', expecting '}' in %sns_088.php on line 5
diff --git a/Zend/tests/ns_094.phpt b/Zend/tests/ns_094.phpt
index 16001da67e..f33bf560a9 100644
--- a/Zend/tests/ns_094.phpt
+++ b/Zend/tests/ns_094.phpt
@@ -12,4 +12,4 @@ use const Foo\Bar\{
};
--EXPECTF--
-Parse error: syntax error, unexpected 'const' (T_CONST), expecting identifier (T_STRING) in %s on line 7
+Parse error: syntax error, unexpected 'const' (T_CONST), expecting '}' in %s on line 7
diff --git a/Zend/tests/ns_trailing_comma_01.phpt b/Zend/tests/ns_trailing_comma_01.phpt
new file mode 100644
index 0000000000..cbd443f0f7
--- /dev/null
+++ b/Zend/tests/ns_trailing_comma_01.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Mixed group use declaration can contain trailing comma
+--FILE--
+<?php
+namespace Foo {
+ const FOO_CONST = "Foo const\n";
+ function foo_func() {
+ echo "Foo func\n";
+ }
+ class FooClass {
+ function __construct() {
+ echo "Foo class\n";
+ }
+ }
+}
+namespace {
+ use Foo\{
+ const FOO_CONST,
+ function foo_func,
+ FooClass as BarClass,
+ };
+ echo FOO_CONST;
+ foo_func();
+ new BarClass;
+}
+?>
+--EXPECT--
+Foo const
+Foo func
+Foo class
diff --git a/Zend/tests/ns_trailing_comma_02.phpt b/Zend/tests/ns_trailing_comma_02.phpt
new file mode 100644
index 0000000000..658a1734af
--- /dev/null
+++ b/Zend/tests/ns_trailing_comma_02.phpt
@@ -0,0 +1,52 @@
+--TEST--
+Unmixed group use declaration can contain trailing comma
+--FILE--
+<?php
+namespace Foo {
+ const FOO_CONST_1 = "Foo const 1\n";
+ const FOO_CONST_2 = "Foo const 2\n";
+}
+namespace Bar {
+ function foo_func_1() {
+ echo "Bar func 1\n";
+ }
+ function foo_func_2() {
+ echo "Bar func 2\n";
+ }
+}
+namespace Baz {
+ class BazFooClass {
+ function __construct() { echo "BazFoo class\n"; }
+ }
+ class BazBarClass {
+ function __construct() { echo "BazBar class\n"; }
+ }
+}
+namespace {
+ use const Foo\{
+ FOO_CONST_1,
+ FOO_CONST_2,
+ };
+ use function Bar\{
+ foo_func_1,
+ foo_func_2,
+ };
+ use Baz\{
+ BazFooClass,
+ BazBarClass,
+ };
+ echo FOO_CONST_1;
+ echo FOO_CONST_2;
+ foo_func_1();
+ foo_func_2();
+ new BazFooClass;
+ new BazBarClass;
+}
+?>
+--EXPECT--
+Foo const 1
+Foo const 2
+Bar func 1
+Bar func 2
+BazFoo class
+BazBar class
diff --git a/Zend/tests/ns_trailing_comma_error_01.phpt b/Zend/tests/ns_trailing_comma_error_01.phpt
new file mode 100644
index 0000000000..6ada1f7bf2
--- /dev/null
+++ b/Zend/tests/ns_trailing_comma_error_01.phpt
@@ -0,0 +1,8 @@
+--TEST--
+Group use declarations mustn't be empty
+--FILE--
+<?php
+use Baz\{};
+?>
+--EXPECTF--
+Parse error: syntax error, unexpected '}', expecting identifier (T_STRING) or function (T_FUNCTION) or const (T_CONST) in %s on line %d \ No newline at end of file
diff --git a/Zend/tests/ns_trailing_comma_error_02.phpt b/Zend/tests/ns_trailing_comma_error_02.phpt
new file mode 100644
index 0000000000..c9d0d92dee
--- /dev/null
+++ b/Zend/tests/ns_trailing_comma_error_02.phpt
@@ -0,0 +1,8 @@
+--TEST--
+Group use declarations mustn't contain just a comma
+--FILE--
+<?php
+use Baz\{,};
+?>
+--EXPECTF--
+Parse error: syntax error, unexpected ',', expecting identifier (T_STRING) or function (T_FUNCTION) or const (T_CONST) in %s on line %d \ No newline at end of file
diff --git a/Zend/tests/ns_trailing_comma_error_03.phpt b/Zend/tests/ns_trailing_comma_error_03.phpt
new file mode 100644
index 0000000000..9d10c47dcc
--- /dev/null
+++ b/Zend/tests/ns_trailing_comma_error_03.phpt
@@ -0,0 +1,8 @@
+--TEST--
+Group use declarations mustn't allow more than one comma
+--FILE--
+<?php
+use Baz\{Foo,,};
+?>
+--EXPECTF--
+Parse error: syntax error, unexpected ',', expecting '}' in %s on line %d \ No newline at end of file
diff --git a/Zend/tests/ns_trailing_comma_error_04.phpt b/Zend/tests/ns_trailing_comma_error_04.phpt
new file mode 100644
index 0000000000..d04b1af272
--- /dev/null
+++ b/Zend/tests/ns_trailing_comma_error_04.phpt
@@ -0,0 +1,8 @@
+--TEST--
+Group use declarations mustn't begin with a comma
+--FILE--
+<?php
+use Baz\{,Foo};
+?>
+--EXPECTF--
+Parse error: syntax error, unexpected ',', expecting identifier (T_STRING) or function (T_FUNCTION) or const (T_CONST) in %s on line %d \ No newline at end of file
diff --git a/Zend/tests/ns_trailing_comma_error_05.phpt b/Zend/tests/ns_trailing_comma_error_05.phpt
new file mode 100644
index 0000000000..1d43e8fe32
--- /dev/null
+++ b/Zend/tests/ns_trailing_comma_error_05.phpt
@@ -0,0 +1,8 @@
+--TEST--
+Group use declarations mustn't contain two commas mid-list
+--FILE--
+<?php
+use Baz\{Foo,,Bar};
+?>
+--EXPECTF--
+Parse error: syntax error, unexpected ',', expecting '}' in %s on line %d \ No newline at end of file
diff --git a/Zend/tests/ns_trailing_comma_error_06.phpt b/Zend/tests/ns_trailing_comma_error_06.phpt
new file mode 100644
index 0000000000..2f2738e204
--- /dev/null
+++ b/Zend/tests/ns_trailing_comma_error_06.phpt
@@ -0,0 +1,8 @@
+--TEST--
+Unmixed group use declarations mustn't allow more than one comma
+--FILE--
+<?php
+use const Baz\{Foo,,};
+?>
+--EXPECTF--
+Parse error: syntax error, unexpected ',', expecting '}' in %s on line %d \ No newline at end of file
diff --git a/Zend/tests/ns_trailing_comma_error_07.phpt b/Zend/tests/ns_trailing_comma_error_07.phpt
new file mode 100644
index 0000000000..c60dd6a4b0
--- /dev/null
+++ b/Zend/tests/ns_trailing_comma_error_07.phpt
@@ -0,0 +1,8 @@
+--TEST--
+Unmixed group use declarations mustn't begin with a comma
+--FILE--
+<?php
+use function Baz\{,Foo};
+?>
+--EXPECTF--
+Parse error: syntax error, unexpected ',', expecting identifier (T_STRING) in %s on line %d \ No newline at end of file
diff --git a/Zend/tests/ns_trailing_comma_error_08.phpt b/Zend/tests/ns_trailing_comma_error_08.phpt
new file mode 100644
index 0000000000..b23446301d
--- /dev/null
+++ b/Zend/tests/ns_trailing_comma_error_08.phpt
@@ -0,0 +1,8 @@
+--TEST--
+Unmixed group use declarations mustn't contain two commas mid-list
+--FILE--
+<?php
+use const Baz\{Foo,,Bar};
+?>
+--EXPECTF--
+Parse error: syntax error, unexpected ',', expecting '}' in %s on line %d \ No newline at end of file
diff --git a/Zend/tests/object_array_cast.phpt b/Zend/tests/object_array_cast.phpt
index 1cf3dbbd9c..b1c12b579d 100644
--- a/Zend/tests/object_array_cast.phpt
+++ b/Zend/tests/object_array_cast.phpt
@@ -14,11 +14,11 @@ var_dump($obj);
?>
--EXPECT--
object(stdClass)#1 (3) {
- [0]=>
+ ["0"]=>
int(1)
- [1]=>
+ ["1"]=>
int(2)
- [2]=>
+ ["2"]=>
int(3)
}
array(3) {
@@ -38,10 +38,10 @@ array(3) {
int(3)
}
object(stdClass)#1 (3) {
- [0]=>
+ ["0"]=>
int(1)
- [1]=>
+ ["1"]=>
int(2)
- [2]=>
+ ["2"]=>
int(3)
}
diff --git a/Zend/tests/object_types/invalid_default_value.phpt b/Zend/tests/object_types/invalid_default_value.phpt
new file mode 100644
index 0000000000..2768e00e7d
--- /dev/null
+++ b/Zend/tests/object_types/invalid_default_value.phpt
@@ -0,0 +1,10 @@
+--TEST--
+Object type can only default to null
+--FILE--
+<?php
+
+function test(object $obj = 42) { }
+
+?>
+--EXPECTF--
+Fatal error: Default value for parameters with an object type can only be NULL in %s on line %d
diff --git a/Zend/tests/object_types/missing_return_type_inheritance_in_class.phpt b/Zend/tests/object_types/missing_return_type_inheritance_in_class.phpt
new file mode 100644
index 0000000000..138ae1f5b5
--- /dev/null
+++ b/Zend/tests/object_types/missing_return_type_inheritance_in_class.phpt
@@ -0,0 +1,15 @@
+--TEST--
+Missing class method a object return type during inheritance
+--FILE--
+<?php
+
+class One {
+ public function a() : object {}
+}
+
+class Two extends One {
+ public function a() {}
+}
+
+--EXPECTF--
+Fatal error: Declaration of Two::a() must be compatible with One::a(): object in %s on line 9 \ No newline at end of file
diff --git a/Zend/tests/object_types/missing_return_type_inheritance_in_interface.phpt b/Zend/tests/object_types/missing_return_type_inheritance_in_interface.phpt
new file mode 100644
index 0000000000..af9032949c
--- /dev/null
+++ b/Zend/tests/object_types/missing_return_type_inheritance_in_interface.phpt
@@ -0,0 +1,15 @@
+--TEST--
+Missing interface method a object return type during inheritance
+--FILE--
+<?php
+
+interface One {
+ public function a() : object;
+}
+
+interface Two extends One {
+ public function a();
+}
+
+--EXPECTF--
+Fatal error: Declaration of Two::a() must be compatible with One::a(): object in %s on line %d
diff --git a/Zend/tests/object_types/return_type_in_class.phpt b/Zend/tests/object_types/return_type_in_class.phpt
new file mode 100644
index 0000000000..2d0f771106
--- /dev/null
+++ b/Zend/tests/object_types/return_type_in_class.phpt
@@ -0,0 +1,26 @@
+--TEST--
+Adding a class method object return type
+--FILE--
+<?php
+
+interface One {
+ public function a() : object;
+}
+
+class Two implements One {
+ public function a() : object {}
+}
+
+$three = new class extends Two {
+ public function a() : object {
+ return 12345;
+ }
+};
+$three->a();
+--EXPECTF--
+
+Fatal error: Uncaught TypeError: Return value of class@anonymous::a() must be an object, integer returned in %s:13
+Stack trace:
+#0 %s(16): class@anonymous->a()
+#1 {main}
+ thrown in %s on line 13
diff --git a/Zend/tests/object_types/return_type_in_function.phpt b/Zend/tests/object_types/return_type_in_function.phpt
new file mode 100644
index 0000000000..e8ae75f490
--- /dev/null
+++ b/Zend/tests/object_types/return_type_in_function.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Adding a function object return type
+--FILE--
+<?php
+
+function a() : object {
+ return 12345;
+}
+a();
+--EXPECTF--
+
+Fatal error: Uncaught TypeError: Return value of a() must be an object, integer returned in %s:4
+Stack trace:
+#0 %s(6): a()
+#1 {main}
+ thrown in %s on line 4 \ No newline at end of file
diff --git a/Zend/tests/object_types/return_type_inheritance_in_class.phpt b/Zend/tests/object_types/return_type_inheritance_in_class.phpt
new file mode 100644
index 0000000000..826758f326
--- /dev/null
+++ b/Zend/tests/object_types/return_type_inheritance_in_class.phpt
@@ -0,0 +1,26 @@
+--TEST--
+Adding class method a object return type during inheritance is allowed
+--FILE--
+<?php
+
+class One {
+ public function a() {}
+}
+
+class Two extends One {
+ public function a() : object {}
+}
+
+$three = new class extends Two {
+ public function a() : object {
+ return 12345;
+ }
+};
+$three->a();
+
+--EXPECTF--
+Fatal error: Uncaught TypeError: Return value of class@anonymous::a() must be an object, integer returned in %s:13
+Stack trace:
+#0 %s(16): class@anonymous->a()
+#1 {main}
+ thrown in %s on line 13
diff --git a/Zend/tests/object_types/return_type_inheritance_in_interface.phpt b/Zend/tests/object_types/return_type_inheritance_in_interface.phpt
new file mode 100644
index 0000000000..fe1f6e6c0c
--- /dev/null
+++ b/Zend/tests/object_types/return_type_inheritance_in_interface.phpt
@@ -0,0 +1,26 @@
+--TEST--
+Adding interface method a object return type during inheritance is allowed
+--FILE--
+<?php
+
+interface One {
+ public function a();
+}
+
+interface Two extends One {
+ public function a() : object;
+}
+
+$three = new class implements Two {
+ public function a() : object {
+ return 12345;
+ }
+};
+$three->a();
+
+--EXPECTF--
+Fatal error: Uncaught TypeError: Return value of class@anonymous::a() must be an object, integer returned in %s:13
+Stack trace:
+#0 %s(16): class@anonymous->a()
+#1 {main}
+ thrown in %s on line 13
diff --git a/Zend/tests/object_types/return_type_reflection.phpt b/Zend/tests/object_types/return_type_reflection.phpt
new file mode 100644
index 0000000000..461199febe
--- /dev/null
+++ b/Zend/tests/object_types/return_type_reflection.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Reflecting object return type
+--FILE--
+<?php
+
+interface One {
+ public function a() : object;
+}
+
+class Two implements One {
+ public function a() : object {}
+}
+
+function a() : object {}
+
+$returnTypeOne = (new ReflectionClass(One::class))->getMethod('a')->getReturnType();
+var_dump($returnTypeOne->isBuiltin(), (string)$returnTypeOne);
+
+$returnTypeTwo = (new ReflectionClass(Two::class))->getMethod('a')->getReturnType();
+var_dump($returnTypeTwo->isBuiltin(), (string)$returnTypeTwo);
+
+$returnTypea = (new ReflectionFunction('a'))->getReturnType();
+var_dump($returnTypea->isBuiltin(), (string)$returnTypea);
+
+--EXPECTF--
+bool(true)
+string(6) "object"
+bool(true)
+string(6) "object"
+bool(true)
+string(6) "object" \ No newline at end of file
diff --git a/Zend/tests/object_types/type_hint_in_class_method.phpt b/Zend/tests/object_types/type_hint_in_class_method.phpt
new file mode 100644
index 0000000000..e41caa0e70
--- /dev/null
+++ b/Zend/tests/object_types/type_hint_in_class_method.phpt
@@ -0,0 +1,19 @@
+--TEST--
+Adding a class method object type hint
+--FILE--
+<?php
+
+class One {
+ public function a(object $obj) {}
+}
+
+$one = new One();
+$one->a(new One());
+$one->a(123);
+--EXPECTF--
+
+Fatal error: Uncaught TypeError: Argument 1 passed to One::a() must be an object, integer given, called in %s:4
+Stack trace:
+#0 %s(9): One->a(123)
+#1 {main}
+ thrown in %s on line 4 \ No newline at end of file
diff --git a/Zend/tests/object_types/type_hint_in_function.phpt b/Zend/tests/object_types/type_hint_in_function.phpt
new file mode 100644
index 0000000000..917726ce2e
--- /dev/null
+++ b/Zend/tests/object_types/type_hint_in_function.phpt
@@ -0,0 +1,17 @@
+--TEST--
+Adding a function object type hint
+--FILE--
+<?php
+
+class A {}
+function a(object $obj) {}
+
+a(new A());
+a(123);
+--EXPECTF--
+
+Fatal error: Uncaught TypeError: Argument 1 passed to a() must be an object, integer given, called in %s.php on line 7 and defined in %s:4
+Stack trace:
+#0 %s(7): a(123)
+#1 {main}
+ thrown in %s on line 4 \ No newline at end of file
diff --git a/Zend/tests/object_types/type_hint_reflection.phpt b/Zend/tests/object_types/type_hint_reflection.phpt
new file mode 100644
index 0000000000..8968e35d6c
--- /dev/null
+++ b/Zend/tests/object_types/type_hint_reflection.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Reflecting object type hint
+--FILE--
+<?php
+
+interface One {
+ public function a(object $obj);
+}
+
+class Two implements One {
+ public function a(object $obj) {}
+}
+
+function a(object $obj) {}
+
+$typeHintOne = (new ReflectionClass(One::class))->getMethod('a')->getParameters()[0]->getType();
+var_dump($typeHintOne->isBuiltin(), (string)$typeHintOne);
+
+$typeHintTwo = (new ReflectionClass(Two::class))->getMethod('a')->getParameters()[0]->getType();
+var_dump($typeHintTwo->isBuiltin(), (string)$typeHintTwo);
+
+$typeHinta = (new ReflectionFunction('a'))->getParameters()[0]->getType();
+var_dump($typeHinta->isBuiltin(), (string)$typeHinta);
+
+--EXPECTF--
+bool(true)
+string(6) "object"
+bool(true)
+string(6) "object"
+bool(true)
+string(6) "object" \ No newline at end of file
diff --git a/Zend/tests/objects_009.phpt b/Zend/tests/objects_009.phpt
index 353266b093..e2333235ab 100644
--- a/Zend/tests/objects_009.phpt
+++ b/Zend/tests/objects_009.phpt
@@ -19,6 +19,5 @@ class test3 extends test {
echo "Done\n";
?>
---EXPECTF--
-Warning: Declaration of test3::foo($arg) should be compatible with test::foo(Test $arg) in %s on line %d
+--EXPECT--
Done
diff --git a/Zend/tests/overloaded_func_001.phpt b/Zend/tests/overloaded_func_001.phpt
index 2702772a46..0b7360e8f9 100644
--- a/Zend/tests/overloaded_func_001.phpt
+++ b/Zend/tests/overloaded_func_001.phpt
@@ -2,7 +2,7 @@
Overloaded function 001
--SKIPIF--
<?php
-if (!PHP_DEBUG) die("skip only run in debug version");
+if (!class_exists('_ZendTestClass')) die("skip needs class with overloaded function");
?>
--FILE--
<?php
diff --git a/Zend/tests/overloaded_func_002.phpt b/Zend/tests/overloaded_func_002.phpt
index 6c16965919..2762f41840 100644
--- a/Zend/tests/overloaded_func_002.phpt
+++ b/Zend/tests/overloaded_func_002.phpt
@@ -2,7 +2,7 @@
Overloaded function 002
--SKIPIF--
<?php
-if (!PHP_DEBUG) die("skip only run in debug version");
+if (!class_exists('_ZendTestClass')) die("skip needs class with overloaded function");
?>
--FILE--
<?php
diff --git a/Zend/tests/parse_str_with_unpack.phpt b/Zend/tests/parse_str_with_unpack.phpt
index 50b296d710..8daa711374 100644
--- a/Zend/tests/parse_str_with_unpack.phpt
+++ b/Zend/tests/parse_str_with_unpack.phpt
@@ -11,5 +11,6 @@ function test() {
test();
?>
---EXPECT--
+--EXPECTF--
+Deprecated: parse_str(): Calling parse_str() without the result argument is deprecated in %s on line %d
int(42)
diff --git a/Zend/tests/php_errormsg_misoptimization.phpt b/Zend/tests/php_errormsg_misoptimization.phpt
index c121c1021a..ae389db248 100644
--- a/Zend/tests/php_errormsg_misoptimization.phpt
+++ b/Zend/tests/php_errormsg_misoptimization.phpt
@@ -14,6 +14,8 @@ test();
?>
--EXPECTF--
+Deprecated: Directive 'track_errors' is deprecated in Unknown on line 0
+
Notice: Undefined variable: undef in %s on line %d
Warning: A non-numeric value encountered in %s on line %d
diff --git a/Zend/tests/return_types/internal_functions001.phpt b/Zend/tests/return_types/internal_functions001.phpt
index fffaf54574..5dfd2784da 100644
--- a/Zend/tests/return_types/internal_functions001.phpt
+++ b/Zend/tests/return_types/internal_functions001.phpt
@@ -1,15 +1,14 @@
--TEST--
Return type for internal functions
-
--SKIPIF--
<?php
-if (!function_exists('zend_test_func')) {
- print 'skip';
-}
-
+if (!function_exists('zend_test_array_return')) die('skip');
+// Internal function return types are only checked in debug builds
+if (!PHP_DEBUG) die('skip requires debug build');
+?>
--FILE--
<?php
-zend_test_func();
+zend_test_array_return();
?>
--EXPECTF--
-Fatal error: Return value of zend_test_func() must be of the type array, null returned in %s on line %d
+Fatal error: Return value of zend_test_array_return() must be of the type array, null returned in %s on line %d
diff --git a/Zend/tests/return_types/internal_functions002.phpt b/Zend/tests/return_types/internal_functions002.phpt
index 7cdb2b884a..0daf3481c8 100644
--- a/Zend/tests/return_types/internal_functions002.phpt
+++ b/Zend/tests/return_types/internal_functions002.phpt
@@ -1,16 +1,12 @@
--TEST--
Return type for internal functions 2
-
--SKIPIF--
<?php
-if (!function_exists('zend_test_func2')) {
- print 'skip';
-}
-
+if (!function_exists('zend_test_nullable_array_return')) die('skip');
--FILE--
<?php
-zend_test_func2();
-echo "==DONE==\n"
+zend_test_nullable_array_return();
?>
---EXPECTF--
+==DONE==
+--EXPECT--
==DONE==
diff --git a/Zend/tests/return_types/reflection001.phpt b/Zend/tests/return_types/reflection001.phpt
index 6492ee1906..c95f7292b5 100644
--- a/Zend/tests/return_types/reflection001.phpt
+++ b/Zend/tests/return_types/reflection001.phpt
@@ -1,12 +1,9 @@
--TEST--
Return type and Reflection::export()
-
--SKIPIF--
<?php
-if (!extension_loaded('reflection') || !defined('PHP_VERSION_ID') || PHP_VERSION_ID < 70000) {
- print 'skip';
-}
-
+if (!extension_loaded('reflection')) print 'skip';
+?>
--FILE--
<?php
diff --git a/Zend/tests/settype_object.phpt b/Zend/tests/settype_object.phpt
index d619dce7e3..7f9e5bc64b 100644
--- a/Zend/tests/settype_object.phpt
+++ b/Zend/tests/settype_object.phpt
Binary files differ
diff --git a/Zend/tests/str_offset_002.phpt b/Zend/tests/str_offset_002.phpt
index 2f5e4ee890..d3a9152905 100644
--- a/Zend/tests/str_offset_002.phpt
+++ b/Zend/tests/str_offset_002.phpt
@@ -1,12 +1,12 @@
---TEST--
-string offset 002
---FILE--
-<?php
-$a = "aaa";
-$x = array(&$a[1]);
-?>
---EXPECTF--
-Fatal error: Uncaught Error: Cannot create references to/from string offsets in %sstr_offset_002.php:3
-Stack trace:
-#0 {main}
- thrown in %sstr_offset_002.php on line 3
+--TEST--
+string offset 002
+--FILE--
+<?php
+$a = "aaa";
+$x = array(&$a[1]);
+?>
+--EXPECTF--
+Fatal error: Uncaught Error: Cannot create references to/from string offsets in %sstr_offset_002.php:3
+Stack trace:
+#0 {main}
+ thrown in %sstr_offset_002.php on line 3
diff --git a/Zend/tests/switch_on_numeric_strings.phpt b/Zend/tests/switch_on_numeric_strings.phpt
new file mode 100644
index 0000000000..b436cefe41
--- /dev/null
+++ b/Zend/tests/switch_on_numeric_strings.phpt
@@ -0,0 +1,29 @@
+--TEST--
+Switch on numeric strings
+--FILE--
+<?php
+
+function test($value) {
+ switch ($value) {
+ case "01": return "01";
+ case "1": return "1";
+
+ case " 2": return " 2";
+ case "2": return "2";
+
+ case "10.0": return "10.0";
+ case "1e1": return "1e1";
+
+ default: return "default";
+ }
+}
+
+var_dump(test("1"));
+var_dump(test("2"));
+var_dump(test("1e1"));
+
+?>
+--EXPECT--
+string(2) "01"
+string(2) " 2"
+string(4) "10.0"
diff --git a/Zend/tests/temporary_cleaning_013.phpt b/Zend/tests/temporary_cleaning_013.phpt
new file mode 100644
index 0000000000..34e4080f56
--- /dev/null
+++ b/Zend/tests/temporary_cleaning_013.phpt
@@ -0,0 +1,311 @@
+--TEST--
+Exceptions thrown in operand cleaning must cause leak of return value
+--FILE--
+<?php
+
+try {
+ var_dump(new class {
+ function __toString() { return "a"; }
+ function __destruct() { throw new Exception; }
+ } . "foo");
+} catch (Exception $e) { print "caught Exception 1\n"; }
+
+try {
+ var_dump([0] + [new class {
+ function __destruct() { throw new Exception; }
+ }]);
+} catch (Exception $e) { print "caught Exception 2\n"; }
+
+try {
+ $foo = [0];
+ var_dump($foo += [new class {
+ function __destruct() { throw new Exception; }
+ }]);
+} catch (Exception $e) { print "caught Exception 3\n"; }
+
+try {
+ $foo = (object)["foo" => [0]];
+ var_dump($foo->foo += [new class {
+ function __destruct() { throw new Exception; }
+ }]);
+} catch (Exception $e) { print "caught Exception 4\n"; }
+
+try {
+ $foo = new class {
+ function __get($x) { return [0]; }
+ function __set($x, $y) {}
+ };
+ var_dump($foo->foo += [new class {
+ function __destruct() { throw new Exception; }
+ }]);
+} catch (Exception $e) { print "caught Exception 5\n"; }
+
+try {
+ $foo = new class {
+ public $bar = [0];
+ function &__get($x) { return $this->bar; }
+ };
+ var_dump($foo->foo += [new class {
+ function __destruct() { throw new Exception; }
+ }]);
+} catch (Exception $e) { print "caught Exception 6\n"; }
+
+try {
+ $foo = new class implements ArrayAccess {
+ function offsetGet($x) { return [0]; }
+ function offsetSet($x, $y) {}
+ function offsetExists($x) { return true; }
+ function offsetUnset($x) {}
+ };
+ var_dump($foo[0] += [new class {
+ function __destruct() { throw new Exception; }
+ }]);
+} catch (Exception $e) { print "caught Exception 7\n"; }
+
+try {
+ $foo = new class implements ArrayAccess {
+ public $foo = [0];
+ function &offsetGet($x) { return $this->foo; }
+ function offsetSet($x, $y) {}
+ function offsetExists($x) { return true; }
+ function offsetUnset($x) {}
+ };
+ var_dump($foo[0] += [new class {
+ function __destruct() { throw new Exception; }
+ }]);
+} catch (Exception $e) { print "caught Exception 8\n"; }
+
+try {
+ var_dump((function() { return new class {
+ function __construct() { $this->foo = new stdClass; }
+ function __destruct() { throw new Exception; }
+ }; })()->foo++);
+} catch (Exception $e) { print "caught Exception 9\n"; }
+
+try {
+ var_dump((function() { return new class {
+ function __get($x) { return new stdClass; }
+ function __set($x, $y) {}
+ function __destruct() { throw new Exception; }
+ }; })()->foo++);
+} catch (Exception $e) { print "caught Exception 10\n"; }
+
+try {
+ var_dump((function() { return new class {
+ function __construct() { $this->bar = new stdClass; }
+ function &__get($x) { return $this->bar; }
+ function __destruct() { throw new Exception; }
+ }; })()->foo++);
+} catch (Exception $e) { print "caught Exception 11\n"; }
+
+try {
+ var_dump(++(function() { return new class {
+ function __construct() { $this->foo = new stdClass; }
+ function __destruct() { throw new Exception; }
+ }; })()->foo);
+} catch (Exception $e) { print "caught Exception 12\n"; }
+
+try {
+ var_dump(++(function() { return new class {
+ function __get($x) { return new stdClass; }
+ function __set($x, $y) {}
+ function __destruct() { throw new Exception; }
+ }; })()->foo);
+} catch (Exception $e) { print "caught Exception 13\n"; }
+
+try {
+ var_dump(++(function() { return new class {
+ function __construct() { $this->bar = new stdClass; }
+ function &__get($x) { return $this->bar; }
+ function __destruct() { throw new Exception; }
+ }; })()->foo);
+} catch (Exception $e) { print "caught Exception 14\n"; }
+
+try {
+ var_dump((function() { return new class implements ArrayAccess {
+ function offsetGet($x) { return [new stdClass]; }
+ function offsetSet($x, $y) {}
+ function offsetExists($x) { return true; }
+ function offsetUnset($x) {}
+ function __destruct() { throw new Exception; }
+ }; })()[0]++);
+} catch (Exception $e) { print "caught Exception 15\n"; }
+
+try {
+ var_dump(++(function() { return new class implements ArrayAccess {
+ function offsetGet($x) { return [new stdClass]; }
+ function offsetSet($x, $y) {}
+ function offsetExists($x) { return true; }
+ function offsetUnset($x) {}
+ function __destruct() { throw new Exception; }
+ }; })()[0]);
+} catch (Exception $e) { print "caught Exception 16\n"; }
+
+try {
+ var_dump((new class {
+ function __construct() { $this->foo = new stdClass; }
+ function __destruct() { throw new Exception; }
+ })->foo);
+} catch (Exception $e) { print "caught Exception 17\n"; }
+
+try {
+ var_dump((new class {
+ function __get($x) { return new stdClass; }
+ function __set($x, $y) {}
+ function __destruct() { throw new Exception; }
+ })->foo);
+} catch (Exception $e) { print "caught Exception 18\n"; }
+
+try {
+ var_dump((new class implements ArrayAccess {
+ function offsetGet($x) { return [new stdClass]; }
+ function offsetSet($x, $y) {}
+ function offsetExists($x) { return true; }
+ function offsetUnset($x) {}
+ function __destruct() { throw new Exception; }
+ })[0]);
+} catch (Exception $e) { print "caught Exception 19\n"; }
+
+try {
+ var_dump(isset((new class {
+ function __construct() { $this->foo = new stdClass; }
+ function __destruct() { throw new Exception; }
+ })->foo->bar));
+} catch (Exception $e) { print "caught Exception 20\n"; }
+
+try {
+ var_dump(isset((new class {
+ function __get($x) { return new stdClass; }
+ function __set($x, $y) {}
+ function __destruct() { throw new Exception; }
+ })->foo->bar));
+} catch (Exception $e) { print "caught Exception 21\n"; }
+
+try {
+ var_dump(isset((new class implements ArrayAccess {
+ function offsetGet($x) { return [new stdClass]; }
+ function offsetSet($x, $y) {}
+ function offsetExists($x) { return true; }
+ function offsetUnset($x) {}
+ function __destruct() { throw new Exception; }
+ })[0]->bar));
+} catch (Exception $e) { print "caught Exception 22\n"; }
+
+try {
+ $foo = new class {
+ function __destruct() { throw new Exception; }
+ };
+ var_dump($foo = new stdClass);
+} catch (Exception $e) { print "caught Exception 23\n"; }
+
+try {
+ $foo = [new class {
+ function __destruct() { throw new Exception; }
+ }];
+ var_dump($foo[0] = new stdClass);
+} catch (Exception $e) { print "caught Exception 24\n"; }
+
+try {
+ $foo = (object) ["foo" => new class {
+ function __destruct() { throw new Exception; }
+ }];
+ var_dump($foo->foo = new stdClass);
+} catch (Exception $e) { print "caught Exception 25\n"; }
+
+try {
+ $foo = new class {
+ function __get($x) {}
+ function __set($x, $y) { throw new Exception; }
+ };
+ var_dump($foo->foo = new stdClass);
+} catch (Exception $e) { print "caught Exception 26\n"; }
+
+try {
+ $foo = new class implements ArrayAccess {
+ function offsetGet($x) {}
+ function offsetSet($x, $y) { throw new Exception; }
+ function offsetExists($x) { return true; }
+ function offsetUnset($x) {}
+ };
+ var_dump($foo[0] = new stdClass);
+} catch (Exception $e) { print "caught Exception 27\n"; }
+
+try {
+ $foo = new class {
+ function __destruct() { throw new Exception; }
+ };
+ $bar = new stdClass;
+ var_dump($foo = &$bar);
+} catch (Exception $e) { print "caught Exception 28\n"; }
+
+try {
+ $f = function() {
+ return new class {
+ function __toString() { return "a"; }
+ function __destruct() { throw new Exception; }
+ };
+ };
+ var_dump("{$f()}foo");
+} catch (Exception $e) { print "caught Exception 29\n"; }
+
+try {
+ $f = function() {
+ return new class {
+ function __toString() { return "a"; }
+ function __destruct() { throw new Exception; }
+ };
+ };
+ var_dump("bar{$f()}foo");
+} catch (Exception $e) { print "caught Exception 30\n"; }
+
+try {
+ var_dump((string) new class {
+ function __toString() { $x = "Z"; return ++$x; }
+ function __destruct() { throw new Exception; }
+ });
+} catch (Exception $e) { print "caught Exception 31\n"; }
+
+try {
+ var_dump(clone (new class {
+ function __clone() { throw new Exception; }
+ }));
+} catch (Exception $e) { print "caught Exception 32\n"; }
+
+?>
+--EXPECTF--
+caught Exception 1
+caught Exception 2
+caught Exception 3
+caught Exception 4
+caught Exception 5
+caught Exception 6
+caught Exception 7
+caught Exception 8
+caught Exception 9
+caught Exception 10
+caught Exception 11
+caught Exception 12
+caught Exception 13
+caught Exception 14
+
+Notice: Indirect modification of overloaded element of class@anonymous has no effect in %s on line %d
+caught Exception 15
+
+Notice: Indirect modification of overloaded element of class@anonymous has no effect in %s on line %d
+caught Exception 16
+caught Exception 17
+caught Exception 18
+caught Exception 19
+caught Exception 20
+caught Exception 21
+caught Exception 22
+caught Exception 23
+caught Exception 24
+caught Exception 25
+caught Exception 26
+caught Exception 27
+caught Exception 28
+caught Exception 29
+caught Exception 30
+caught Exception 31
+caught Exception 32
diff --git a/Zend/tests/temporary_cleaning_014.phpt b/Zend/tests/temporary_cleaning_014.phpt
new file mode 100644
index 0000000000..39effae18a
--- /dev/null
+++ b/Zend/tests/temporary_cleaning_014.phpt
@@ -0,0 +1,15 @@
+--TEST--
+Leak in JMP_SET
+--SKIPIF--
+<?php if (!extension_loaded("gmp")) print "skip"; ?>
+--FILE--
+<?php
+set_error_handler(function() { throw new Exception; });
+try {
+ new GMP ?: null;
+} catch (Exception $e) {
+}
+?>
+DONE
+--EXPECT--
+DONE
diff --git a/Zend/tests/temporary_cleaning_015.phpt b/Zend/tests/temporary_cleaning_015.phpt
new file mode 100644
index 0000000000..7690abba76
--- /dev/null
+++ b/Zend/tests/temporary_cleaning_015.phpt
@@ -0,0 +1,17 @@
+--TEST--
+Attempt to free invalid structure (result of ROPE_INIT is not a zval)
+--FILE--
+<?php
+set_error_handler(function () {
+ throw new Exception();
+});
+$a = [];
+$b = "";
+try {
+ echo "$a$b\n";
+} catch (Exception $ex) {
+}
+?>
+DONE
+--EXPECT--
+DONE
diff --git a/Zend/tests/temporary_cleaning_016.phpt b/Zend/tests/temporary_cleaning_016.phpt
new file mode 100644
index 0000000000..d7be78e1ff
--- /dev/null
+++ b/Zend/tests/temporary_cleaning_016.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Live ranges should be ordered according to "start" position
+--FILE--
+<?php
+set_error_handler(function($no, $msg) { throw new Exception; });
+
+try {
+ $a = [];
+ $str = "$a${"y$a$a"}y";
+} catch (Exception $e) {
+}
+?>
+DONE
+--EXPECT--
+DONE
+
diff --git a/Zend/tests/this_in_mb_parse_str.phpt b/Zend/tests/this_in_mb_parse_str.phpt
index 8dfac94722..2d5af4794e 100644
--- a/Zend/tests/this_in_mb_parse_str.phpt
+++ b/Zend/tests/this_in_mb_parse_str.phpt
@@ -11,6 +11,8 @@ function foo() {
foo();
?>
--EXPECTF--
+Deprecated: mb_parse_str(): Calling mb_parse_str() without the result argument is deprecated in %s on line %d
+
Fatal error: Uncaught Error: Cannot re-assign $this in %sthis_in_mb_parse_str.php:3
Stack trace:
#0 %sthis_in_mb_parse_str.php(3): mb_parse_str('this=42')
diff --git a/Zend/tests/this_in_parse_str.phpt b/Zend/tests/this_in_parse_str.phpt
index 4540d282cc..0bd9064d60 100644
--- a/Zend/tests/this_in_parse_str.phpt
+++ b/Zend/tests/this_in_parse_str.phpt
@@ -9,6 +9,8 @@ function foo() {
foo();
?>
--EXPECTF--
+Deprecated: parse_str(): Calling parse_str() without the result argument is deprecated in %s on line %d
+
Fatal error: Uncaught Error: Cannot re-assign $this in %sthis_in_parse_str.php:3
Stack trace:
#0 %sthis_in_parse_str.php(3): parse_str('this=42')
diff --git a/Zend/tests/traits/bug60217b.phpt b/Zend/tests/traits/bug60217b.phpt
index eb852a4fb4..8b2b64e534 100644
--- a/Zend/tests/traits/bug60217b.phpt
+++ b/Zend/tests/traits/bug60217b.phpt
@@ -23,4 +23,4 @@ $o = new CBroken;
$o->foo(1);
--EXPECTF--
-Fatal error: Declaration of TBroken2::foo($a, $b = 0) must be compatible with TBroken1::foo($a) in %s on line %d
+Fatal error: Declaration of TBroken1::foo($a) must be compatible with TBroken2::foo($a, $b = 0) in %s
diff --git a/Zend/tests/traits/bug69579.phpt b/Zend/tests/traits/bug69579.phpt
index 421734e74e..009bddadca 100644
--- a/Zend/tests/traits/bug69579.phpt
+++ b/Zend/tests/traits/bug69579.phpt
@@ -2,7 +2,7 @@
Bug #69579 (Internal trait double-free)
--SKIPIF--
<?php
-if (!PHP_DEBUG) die("skip only run in debug version");
+if (!trait_exists('_ZendTestTrait')) die("skip requires internal trait");
?>
--FILE--
<?php
diff --git a/Zend/tests/traits/bug74607.phpt b/Zend/tests/traits/bug74607.phpt
new file mode 100644
index 0000000000..6f158db7e2
--- /dev/null
+++ b/Zend/tests/traits/bug74607.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Bug #74607 (Traits enforce different inheritance rules - return types)
+--FILE--
+<?php
+
+abstract class L1{
+abstract function m3($x);
+}
+
+trait L2t{
+function m3($x): int{}
+}
+
+class L2 extends L1{
+use L2t;
+}
+
+echo "DONE";
+
+?>
+--EXPECT--
+DONE
diff --git a/Zend/tests/traits/bug74607a.phpt b/Zend/tests/traits/bug74607a.phpt
new file mode 100644
index 0000000000..efdced95c5
--- /dev/null
+++ b/Zend/tests/traits/bug74607a.phpt
@@ -0,0 +1,22 @@
+--TEST--
+Bug #74607 (Traits enforce different inheritance rules - number of required parameters)
+--FILE--
+<?php
+
+abstract class L1{
+abstract function m3($x);
+}
+
+trait L2t{
+function m3($x, $y = 0){}
+}
+
+class L2 extends L1{
+use L2t;
+}
+
+echo "DONE";
+
+?>
+--EXPECT--
+DONE
diff --git a/Zend/tests/traits/bug75607.phpt b/Zend/tests/traits/bug75607.phpt
new file mode 100644
index 0000000000..a3a10425f4
--- /dev/null
+++ b/Zend/tests/traits/bug75607.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Bug #75607 (Comparision of initial static properties failing)
+--FILE--
+<?php
+
+trait T1
+{
+ public static $prop1 = 1;
+}
+
+class Base
+{
+ public static $prop1 = 1;
+}
+
+class Child extends base
+{
+ use T1;
+}
+
+echo "DONE";
+
+?>
+--EXPECT--
+DONE
diff --git a/Zend/tests/traits/bug75607a.phpt b/Zend/tests/traits/bug75607a.phpt
new file mode 100644
index 0000000000..9f5f03521e
--- /dev/null
+++ b/Zend/tests/traits/bug75607a.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Bug #75607 (Comparision of initial static properties failing)
+--FILE--
+<?php
+
+trait T1
+{
+ public static $prop1 = 1;
+}
+
+trait T2
+{
+ public static $prop1 = 1;
+}
+
+class Base
+{
+ use T1;
+}
+
+class Child extends base
+{
+
+}
+
+class Grand extends Child
+{
+ use T2;
+}
+
+$c = new Grand();
+var_dump($c::$prop1);
+
+?>
+--EXPECT--
+int(1)
diff --git a/Zend/tests/traits/bugs/abstract-methods05.phpt b/Zend/tests/traits/bugs/abstract-methods05.phpt
index 9a1315f868..839be75c2b 100644
--- a/Zend/tests/traits/bugs/abstract-methods05.phpt
+++ b/Zend/tests/traits/bugs/abstract-methods05.phpt
@@ -22,4 +22,4 @@ class TraitsTest1 {
?>
--EXPECTF--
-Fatal error: Declaration of THelloA::hello($a) must be compatible with THelloB::hello() in %s on line %d
+Fatal error: Declaration of THelloB::hello() must be compatible with THelloA::hello($a) in %s on line %d
diff --git a/Zend/tests/traits/bugs/case-sensitive.phpt b/Zend/tests/traits/bugs/case-sensitive.phpt
index 13d4188f2f..6a65ccff03 100644
--- a/Zend/tests/traits/bugs/case-sensitive.phpt
+++ b/Zend/tests/traits/bugs/case-sensitive.phpt
@@ -1,23 +1,23 @@
---TEST--
-Check for problems with case sensitivity in compositions
---FILE--
-<?php
-error_reporting(E_ALL);
-
-trait A {
- public function M1() {}
- public function M2() {}
-}
-
-trait B {
- public function M1() {}
- public function M2() {}
-}
-
-class MyClass {
- use A;
- use B;
-}
-?>
---EXPECTF--
-Fatal error: Trait method M1 has not been applied, because there are collisions with other trait methods on MyClass in %s on line %d
+--TEST--
+Check for problems with case sensitivity in compositions
+--FILE--
+<?php
+error_reporting(E_ALL);
+
+trait A {
+ public function M1() {}
+ public function M2() {}
+}
+
+trait B {
+ public function M1() {}
+ public function M2() {}
+}
+
+class MyClass {
+ use A;
+ use B;
+}
+?>
+--EXPECTF--
+Fatal error: Trait method M1 has not been applied, because there are collisions with other trait methods on MyClass in %s on line %d
diff --git a/Zend/tests/traits/static_001.phpt b/Zend/tests/traits/static_001.phpt
index d86cb851b9..5953c008d5 100644
--- a/Zend/tests/traits/static_001.phpt
+++ b/Zend/tests/traits/static_001.phpt
@@ -1,22 +1,22 @@
---TEST--
-Traits with static methods.
---CREDITS--
-Simas Toleikis simast@gmail.com
---FILE--
-<?php
-
- trait TestTrait {
- public static function test() {
- return 'Test';
- }
- }
-
- class A {
- use TestTrait;
- }
-
- echo A::test();
-
-?>
---EXPECT--
+--TEST--
+Traits with static methods.
+--CREDITS--
+Simas Toleikis simast@gmail.com
+--FILE--
+<?php
+
+ trait TestTrait {
+ public static function test() {
+ return 'Test';
+ }
+ }
+
+ class A {
+ use TestTrait;
+ }
+
+ echo A::test();
+
+?>
+--EXPECT--
Test \ No newline at end of file
diff --git a/Zend/tests/traits/static_002.phpt b/Zend/tests/traits/static_002.phpt
index c076085519..64ebf6bf14 100644
--- a/Zend/tests/traits/static_002.phpt
+++ b/Zend/tests/traits/static_002.phpt
@@ -1,23 +1,23 @@
---TEST--
-Traits with static methods referenced using variable.
---CREDITS--
-Simas Toleikis simast@gmail.com
---FILE--
-<?php
-
- trait TestTrait {
- public static function test() {
- return 'Test';
- }
- }
-
- class A {
- use TestTrait;
- }
-
- $class = "A";
- echo $class::test();
-
-?>
---EXPECT--
+--TEST--
+Traits with static methods referenced using variable.
+--CREDITS--
+Simas Toleikis simast@gmail.com
+--FILE--
+<?php
+
+ trait TestTrait {
+ public static function test() {
+ return 'Test';
+ }
+ }
+
+ class A {
+ use TestTrait;
+ }
+
+ $class = "A";
+ echo $class::test();
+
+?>
+--EXPECT--
Test \ No newline at end of file
diff --git a/Zend/tests/traits/static_003.phpt b/Zend/tests/traits/static_003.phpt
index fbe5421c71..01953cf724 100644
--- a/Zend/tests/traits/static_003.phpt
+++ b/Zend/tests/traits/static_003.phpt
@@ -1,27 +1,27 @@
---TEST--
-Traits with late static bindings.
---CREDITS--
-Simas Toleikis simast@gmail.com
---FILE--
-<?php
-
- trait TestTrait {
- public static function test() {
- return static::$test;
- }
- }
-
- class A {
- use TestTrait;
- protected static $test = "Test A";
- }
-
- class B extends A {
- protected static $test = "Test B";
- }
-
- echo B::test();
-
-?>
---EXPECT--
+--TEST--
+Traits with late static bindings.
+--CREDITS--
+Simas Toleikis simast@gmail.com
+--FILE--
+<?php
+
+ trait TestTrait {
+ public static function test() {
+ return static::$test;
+ }
+ }
+
+ class A {
+ use TestTrait;
+ protected static $test = "Test A";
+ }
+
+ class B extends A {
+ protected static $test = "Test B";
+ }
+
+ echo B::test();
+
+?>
+--EXPECT--
Test B \ No newline at end of file
diff --git a/Zend/tests/traits/static_004.phpt b/Zend/tests/traits/static_004.phpt
index c360f457f0..3c3f380908 100644
--- a/Zend/tests/traits/static_004.phpt
+++ b/Zend/tests/traits/static_004.phpt
@@ -1,22 +1,22 @@
---TEST--
-Traits with __callStatic magic method.
---CREDITS--
-Simas Toleikis simast@gmail.com
---FILE--
-<?php
-
- trait TestTrait {
- public static function __callStatic($name, $arguments) {
- return $name;
- }
- }
-
- class A {
- use TestTrait;
- }
-
- echo A::Test();
-
-?>
---EXPECT--
+--TEST--
+Traits with __callStatic magic method.
+--CREDITS--
+Simas Toleikis simast@gmail.com
+--FILE--
+<?php
+
+ trait TestTrait {
+ public static function __callStatic($name, $arguments) {
+ return $name;
+ }
+ }
+
+ class A {
+ use TestTrait;
+ }
+
+ echo A::Test();
+
+?>
+--EXPECT--
Test \ No newline at end of file
diff --git a/Zend/tests/traits/static_forward_static_call.phpt b/Zend/tests/traits/static_forward_static_call.phpt
index 878cf1fcc1..9cda8aee1d 100644
--- a/Zend/tests/traits/static_forward_static_call.phpt
+++ b/Zend/tests/traits/static_forward_static_call.phpt
@@ -1,28 +1,28 @@
---TEST--
-Traits and forward_static_call().
---CREDITS--
-Simas Toleikis simast@gmail.com
---FILE--
-<?php
-
- trait TestTrait {
- public static function test() {
- return 'Forwarded '.forward_static_call(array('A', 'test'));
- }
- }
-
- class A {
- public static function test() {
- return "Test A";
- }
- }
-
- class B extends A {
- use TestTrait;
- }
-
- echo B::test();
-
-?>
---EXPECT--
+--TEST--
+Traits and forward_static_call().
+--CREDITS--
+Simas Toleikis simast@gmail.com
+--FILE--
+<?php
+
+ trait TestTrait {
+ public static function test() {
+ return 'Forwarded '.forward_static_call(array('A', 'test'));
+ }
+ }
+
+ class A {
+ public static function test() {
+ return "Test A";
+ }
+ }
+
+ class B extends A {
+ use TestTrait;
+ }
+
+ echo B::test();
+
+?>
+--EXPECT--
Forwarded Test A \ No newline at end of file
diff --git a/Zend/tests/traits/static_get_called_class.phpt b/Zend/tests/traits/static_get_called_class.phpt
index dc29ecefa2..bd7a603712 100644
--- a/Zend/tests/traits/static_get_called_class.phpt
+++ b/Zend/tests/traits/static_get_called_class.phpt
@@ -1,24 +1,24 @@
---TEST--
-Traits and get_called_class().
---CREDITS--
-Simas Toleikis simast@gmail.com
---FILE--
-<?php
-
- trait TestTrait {
- public static function test() {
- return get_called_class();
- }
- }
-
- class A {
- use TestTrait;
- }
-
- class B extends A { }
-
- echo B::test();
-
-?>
---EXPECT--
+--TEST--
+Traits and get_called_class().
+--CREDITS--
+Simas Toleikis simast@gmail.com
+--FILE--
+<?php
+
+ trait TestTrait {
+ public static function test() {
+ return get_called_class();
+ }
+ }
+
+ class A {
+ use TestTrait;
+ }
+
+ class B extends A { }
+
+ echo B::test();
+
+?>
+--EXPECT--
B \ No newline at end of file
diff --git a/Zend/tests/traits/trait_constant_001.phpt b/Zend/tests/traits/trait_constant_001.phpt
index 0fd8ff921b..590949c2f6 100644
--- a/Zend/tests/traits/trait_constant_001.phpt
+++ b/Zend/tests/traits/trait_constant_001.phpt
@@ -1,36 +1,36 @@
---TEST--
-__TRAIT__: Basics, a constant denoiting the trait of definition.
---FILE--
-<?php
-
-trait TestTrait {
- public static function test() {
- return __TRAIT__;
- }
-}
-
-class Direct {
- use TestTrait;
-}
-
-class IndirectInheritance extends Direct {
-
-}
-
-trait TestTraitIndirect {
- use TestTrait;
-}
-
-class Indirect {
- use TestTraitIndirect;
-}
-
-echo Direct::test()."\n";
-echo IndirectInheritance::test()."\n";
-echo Indirect::test()."\n";
-
-?>
---EXPECT--
-TestTrait
-TestTrait
-TestTrait
+--TEST--
+__TRAIT__: Basics, a constant denoiting the trait of definition.
+--FILE--
+<?php
+
+trait TestTrait {
+ public static function test() {
+ return __TRAIT__;
+ }
+}
+
+class Direct {
+ use TestTrait;
+}
+
+class IndirectInheritance extends Direct {
+
+}
+
+trait TestTraitIndirect {
+ use TestTrait;
+}
+
+class Indirect {
+ use TestTraitIndirect;
+}
+
+echo Direct::test()."\n";
+echo IndirectInheritance::test()."\n";
+echo Indirect::test()."\n";
+
+?>
+--EXPECT--
+TestTrait
+TestTrait
+TestTrait
diff --git a/Zend/tests/traits/trait_constant_002.phpt b/Zend/tests/traits/trait_constant_002.phpt
index 327dd44a64..bbafbf210e 100644
--- a/Zend/tests/traits/trait_constant_002.phpt
+++ b/Zend/tests/traits/trait_constant_002.phpt
@@ -1,27 +1,27 @@
---TEST--
-__TRAIT__: Use outside of traits.
---FILE--
-<?php
-
- class MyClass {
- static function test() {
- return __TRAIT__;
- }
- }
-
- function someFun() {
- return __TRAIT__;
- }
-
-
- $t = __TRAIT__;
- var_dump($t);
- $t = MyClass::test();
- var_dump($t);
- $t = someFun();
- var_dump($t);
-?>
---EXPECT--
-string(0) ""
-string(0) ""
+--TEST--
+__TRAIT__: Use outside of traits.
+--FILE--
+<?php
+
+ class MyClass {
+ static function test() {
+ return __TRAIT__;
+ }
+ }
+
+ function someFun() {
+ return __TRAIT__;
+ }
+
+
+ $t = __TRAIT__;
+ var_dump($t);
+ $t = MyClass::test();
+ var_dump($t);
+ $t = someFun();
+ var_dump($t);
+?>
+--EXPECT--
+string(0) ""
+string(0) ""
string(0) "" \ No newline at end of file
diff --git a/Zend/tests/type_declarations/nullable_null.phpt b/Zend/tests/type_declarations/nullable_null.phpt
new file mode 100644
index 0000000000..61b05e995b
--- /dev/null
+++ b/Zend/tests/type_declarations/nullable_null.phpt
@@ -0,0 +1,11 @@
+--TEST--
+nullable class
+--FILE--
+<?php
+function test(Foo $a = null) {
+ echo "ok\n";
+}
+test(null);
+?>
+--EXPECT--
+ok
diff --git a/Zend/tests/type_declarations/parameter_type_variance.phpt b/Zend/tests/type_declarations/parameter_type_variance.phpt
new file mode 100644
index 0000000000..61915a2e6c
--- /dev/null
+++ b/Zend/tests/type_declarations/parameter_type_variance.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Parameter variance with no type
+--FILE--
+<?php
+
+class Foo {
+ function testParentClass(Foo $foo) {}
+ function testBothClass(Foo $foo) {}
+ function testChildClass($foo) {}
+ function testNoneClass($foo) {}
+
+ function testParentBuiltin(int $foo) {}
+ function testBothBuiltin(int $foo) {}
+ function testChildBuiltin($foo) {}
+ function testNoneBuiltin($foo) {}
+}
+
+class Bar extends Foo {
+ function testParentClass($foo) {}
+ function testBothClass(Foo $foo) {}
+ function testChildClass(Foo $foo) {}
+ function testNoneClass($foo) {}
+
+ function testParentBuiltin($foo) {}
+ function testBothBuiltin(int $foo) {}
+ function testChildBuiltin(int $foo) {}
+ function testNoneBuiltin($foo) {}
+}
+
+?>
+--EXPECTF--
+Warning: Declaration of Bar::testChildClass(Foo $foo) should be compatible with Foo::testChildClass($foo) in %s on line %d
+
+Warning: Declaration of Bar::testChildBuiltin(int $foo) should be compatible with Foo::testChildBuiltin($foo) in %s on line %d
diff --git a/Zend/tests/unset_cast_deprecated.phpt b/Zend/tests/unset_cast_deprecated.phpt
new file mode 100644
index 0000000000..6744c85f02
--- /dev/null
+++ b/Zend/tests/unset_cast_deprecated.phpt
@@ -0,0 +1,14 @@
+--TEST--
+The (unset) cast is deprecated
+--FILE--
+<?php
+
+$x = 1;
+var_dump((unset) $x);
+var_dump($x);
+
+?>
+--EXPECTF--
+Deprecated: The (unset) cast is deprecated in %s on line %d
+NULL
+int(1)
diff --git a/Zend/tests/unset_cv05.phpt b/Zend/tests/unset_cv05.phpt
index 36fea3bc40..2992e624c3 100644
--- a/Zend/tests/unset_cv05.phpt
+++ b/Zend/tests/unset_cv05.phpt
@@ -12,18 +12,11 @@ include(dirname(__FILE__).'/../../ext/session/tests/skipif.inc');
--FILE--
<?php
$_SESSION = "ok\n";
-echo $_SESSION;
session_start();
echo $_SESSION;
echo "\nok\n";
?>
--EXPECTF--
-ok
-
-Warning: session_start(): Cannot send session cookie - headers already sent by (output started at %sunset_cv05.php on line %d
-
-Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at %sunset_cv05.php:%d) in %sunset_cv05.php on line %d
-
Notice: Array to string conversion in %sunset_cv05.php on line %d
Array
ok
diff --git a/Zend/tests/unset_cv07.phpt b/Zend/tests/unset_cv07.phpt
deleted file mode 100644
index 3f893ca235..0000000000
--- a/Zend/tests/unset_cv07.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-unset() CV 7 (indirect unset() of global variable in import_request_variables())
---SKIPIF--
-<?php if(PHP_VERSION_ID >= 50399){ die('skip not needed anymore without register_globals'); } ?>
---GET--
-x=2
---FILE--
-<?php
-$_x = "1\n";
-echo $_x;
-import_request_variables("g","_");
-echo $_x;
-echo "\nok\n";
-?>
---EXPECTF--
-1
-2
-ok
diff --git a/Zend/tests/unused_shared_static_variables.phpt b/Zend/tests/unused_shared_static_variables.phpt
new file mode 100644
index 0000000000..fc87a19f6a
--- /dev/null
+++ b/Zend/tests/unused_shared_static_variables.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Cleanup of shared static variables HT that has never been used should not assert
+--FILE--
+<?php
+
+class A {
+ public function test() {
+ static $x;
+ }
+}
+class B extends A {}
+
+?>
+===DONE===
+--EXPECT--
+===DONE===
diff --git a/Zend/tests/use_function/conditional_function_declaration.phpt b/Zend/tests/use_function/conditional_function_declaration.phpt
index ccfb96103a..02ac0803f0 100644
--- a/Zend/tests/use_function/conditional_function_declaration.phpt
+++ b/Zend/tests/use_function/conditional_function_declaration.phpt
@@ -1,5 +1,5 @@
--TEST--
-function that is conditionally defined at runtime should not cause compiler error
+function that is conditionally defined is subject to symbol use checks
--FILE--
<?php
@@ -13,5 +13,5 @@ use function bar\foo;
echo "Done";
?>
---EXPECT--
-Done
+--EXPECTF--
+Fatal error: Cannot use function bar\foo as foo because the name is already in use in %s on line %d
diff --git a/Zend/tests/use_late_binding_conflict.phpt b/Zend/tests/use_late_binding_conflict.phpt
new file mode 100644
index 0000000000..c8514d0b1a
--- /dev/null
+++ b/Zend/tests/use_late_binding_conflict.phpt
@@ -0,0 +1,13 @@
+--TEST--
+Use conflicts are detected for late-bound classes
+--FILE--
+<?php
+
+/* Reverse declaration order disables early-binding */
+class B extends A {}
+class A {}
+use Foo\B;
+
+?>
+--EXPECTF--
+Fatal error: Cannot use Foo\B as B because the name is already in use in %s on line %d
diff --git a/Zend/tests/use_no_eval_conflict.phpt b/Zend/tests/use_no_eval_conflict.phpt
new file mode 100644
index 0000000000..cf9014b77d
--- /dev/null
+++ b/Zend/tests/use_no_eval_conflict.phpt
@@ -0,0 +1,13 @@
+--TEST--
+Use conflicts should not occur across eval()s
+--FILE--
+<?php
+
+/* It is important that these two eval()s occur on the same line,
+ * as this forces them to have the same filename. */
+eval("class A {}"); eval("use Foo\A;");
+
+?>
+===DONE===
+--EXPECT--
+===DONE===
diff --git a/Zend/tests/varSyntax/propertyOfStringError.phpt b/Zend/tests/varSyntax/propertyOfStringError.phpt
index 85abc5849a..4fa50e7df0 100644
--- a/Zend/tests/varSyntax/propertyOfStringError.phpt
+++ b/Zend/tests/varSyntax/propertyOfStringError.phpt
@@ -7,4 +7,4 @@ Cannot take property of a string
?>
--EXPECTF--
-Notice: Trying to get property of non-object in %s on line %d
+Notice: Trying to get property 'bar' of non-object in %s on line %d
diff --git a/Zend/tests/zend_signed_multiply-64bit-2.phpt b/Zend/tests/zend_signed_multiply-64bit-2.phpt
new file mode 100644
index 0000000000..f0a3bafa5e
--- /dev/null
+++ b/Zend/tests/zend_signed_multiply-64bit-2.phpt
@@ -0,0 +1,149 @@
+--TEST--
+Zend signed multiply 64-bit, variation 2
+--SKIPIF--
+<?php if ((1 << 31) < 0) print "skip Running on 32-bit target"; ?>
+--FILE--
+<?php
+for($c = -16; $c < 0; $c++) {
+ var_dump($c, intdiv(PHP_INT_MIN, 10), intdiv(PHP_INT_MIN, 10) * $c);
+ echo "-----------\n";
+}
+for($c = 0; $c <= 16; $c++) {
+ var_dump($c, intdiv(PHP_INT_MAX, 10), intdiv(PHP_INT_MAX, 10) * $c);
+ echo "-----------\n";
+}
+?>
+--EXPECTF--
+int(-16)
+int(-922337203685477580)
+float(1.4757395258968E+19)
+-----------
+int(-15)
+int(-922337203685477580)
+float(1.3835058055282E+19)
+-----------
+int(-14)
+int(-922337203685477580)
+float(1.2912720851597E+19)
+-----------
+int(-13)
+int(-922337203685477580)
+float(1.1990383647911E+19)
+-----------
+int(-12)
+int(-922337203685477580)
+float(1.1068046444226E+19)
+-----------
+int(-11)
+int(-922337203685477580)
+float(1.014570924054E+19)
+-----------
+int(-10)
+int(-922337203685477580)
+int(9223372036854775800)
+-----------
+int(-9)
+int(-922337203685477580)
+int(8301034833169298220)
+-----------
+int(-8)
+int(-922337203685477580)
+int(7378697629483820640)
+-----------
+int(-7)
+int(-922337203685477580)
+int(6456360425798343060)
+-----------
+int(-6)
+int(-922337203685477580)
+int(5534023222112865480)
+-----------
+int(-5)
+int(-922337203685477580)
+int(4611686018427387900)
+-----------
+int(-4)
+int(-922337203685477580)
+int(3689348814741910320)
+-----------
+int(-3)
+int(-922337203685477580)
+int(2767011611056432740)
+-----------
+int(-2)
+int(-922337203685477580)
+int(1844674407370955160)
+-----------
+int(-1)
+int(-922337203685477580)
+int(922337203685477580)
+-----------
+int(0)
+int(922337203685477580)
+int(0)
+-----------
+int(1)
+int(922337203685477580)
+int(922337203685477580)
+-----------
+int(2)
+int(922337203685477580)
+int(1844674407370955160)
+-----------
+int(3)
+int(922337203685477580)
+int(2767011611056432740)
+-----------
+int(4)
+int(922337203685477580)
+int(3689348814741910320)
+-----------
+int(5)
+int(922337203685477580)
+int(4611686018427387900)
+-----------
+int(6)
+int(922337203685477580)
+int(5534023222112865480)
+-----------
+int(7)
+int(922337203685477580)
+int(6456360425798343060)
+-----------
+int(8)
+int(922337203685477580)
+int(7378697629483820640)
+-----------
+int(9)
+int(922337203685477580)
+int(8301034833169298220)
+-----------
+int(10)
+int(922337203685477580)
+int(9223372036854775800)
+-----------
+int(11)
+int(922337203685477580)
+float(1.014570924054E+19)
+-----------
+int(12)
+int(922337203685477580)
+float(1.1068046444226E+19)
+-----------
+int(13)
+int(922337203685477580)
+float(1.1990383647911E+19)
+-----------
+int(14)
+int(922337203685477580)
+float(1.2912720851597E+19)
+-----------
+int(15)
+int(922337203685477580)
+float(1.3835058055282E+19)
+-----------
+int(16)
+int(922337203685477580)
+float(1.4757395258968E+19)
+-----------
+
diff --git a/Zend/tests/zend_signed_multiply-64bit.phpt b/Zend/tests/zend_signed_multiply-64bit.phpt
index 94a6e035fa..d392b2e78a 100644
--- a/Zend/tests/zend_signed_multiply-64bit.phpt
+++ b/Zend/tests/zend_signed_multiply-64bit.phpt
@@ -1,5 +1,5 @@
--TEST--
-Zend signed multiply 64-bit
+Zend signed multiply 64-bit, variation 1
--SKIPIF--
<?php if ((1 << 31) < 0) print "skip Running on 32-bit target"; ?>
--FILE--
diff --git a/Zend/zend.c b/Zend/zend.c
index 15cab8048f..72a7b4d588 100644
--- a/Zend/zend.c
+++ b/Zend/zend.c
@@ -32,8 +32,17 @@
#include "zend_dtrace.h"
#include "zend_virtual_cwd.h"
#include "zend_smart_str.h"
+#include "zend_smart_string.h"
#ifdef ZTS
+ZEND_API int compiler_globals_id;
+ZEND_API int executor_globals_id;
+static HashTable *global_function_table = NULL;
+static HashTable *global_class_table = NULL;
+static HashTable *global_constants_table = NULL;
+static HashTable *global_auto_globals_table = NULL;
+static HashTable *global_persistent_list = NULL;
+ZEND_TSRMLS_CACHE_DEFINE()
# define GLOBAL_FUNCTION_TABLE global_function_table
# define GLOBAL_CLASS_TABLE global_class_table
# define GLOBAL_CONSTANTS_TABLE global_constants_table
@@ -45,6 +54,15 @@
# define GLOBAL_CONSTANTS_TABLE EG(zend_constants)
#endif
+ZEND_API zend_utility_values zend_uv;
+ZEND_API zend_bool zend_dtrace_enabled;
+
+/* version information */
+static char *zend_version_info;
+static uint32_t zend_version_info_length;
+#define ZEND_CORE_VERSION_INFO "Zend Engine v" ZEND_VERSION ", Copyright (c) 1998-2018 Zend Technologies\n"
+#define PRINT_ZVAL_INDENT 4
+
/* true multithread-shared globals */
ZEND_API zend_class_entry *zend_standard_class_def = NULL;
ZEND_API size_t (*zend_printf)(const char *format, ...);
@@ -53,9 +71,9 @@ ZEND_API FILE *(*zend_fopen)(const char *filename, zend_string **opened_path);
ZEND_API int (*zend_stream_open_function)(const char *filename, zend_file_handle *handle);
ZEND_API void (*zend_ticks_function)(int ticks);
ZEND_API void (*zend_interrupt_function)(zend_execute_data *execute_data);
-ZEND_API void (*zend_error_cb)(int type, const char *error_filename, const uint error_lineno, const char *format, va_list args);
-size_t (*zend_vspprintf)(char **pbuf, size_t max_len, const char *format, va_list ap);
-zend_string *(*zend_vstrpprintf)(size_t max_len, const char *format, va_list ap);
+ZEND_API void (*zend_error_cb)(int type, const char *error_filename, const uint32_t error_lineno, const char *format, va_list args);
+void (*zend_printf_to_smart_string)(smart_string *buf, const char *format, va_list ap);
+void (*zend_printf_to_smart_str)(smart_str *buf, const char *format, va_list ap);
ZEND_API char *(*zend_getenv)(char *name, size_t name_len);
ZEND_API zend_string *(*zend_resolve_path)(const char *filename, int filename_len);
@@ -139,26 +157,76 @@ ZEND_INI_BEGIN()
#endif
ZEND_INI_END()
+ZEND_API size_t zend_vspprintf(char **pbuf, size_t max_len, const char *format, va_list ap) /* {{{ */
+{
+ smart_string buf = {0};
-#ifdef ZTS
-ZEND_API int compiler_globals_id;
-ZEND_API int executor_globals_id;
-static HashTable *global_function_table = NULL;
-static HashTable *global_class_table = NULL;
-static HashTable *global_constants_table = NULL;
-static HashTable *global_auto_globals_table = NULL;
-static HashTable *global_persistent_list = NULL;
-ZEND_TSRMLS_CACHE_DEFINE()
-#endif
+ /* since there are places where (v)spprintf called without checking for null,
+ a bit of defensive coding here */
+ if (!pbuf) {
+ return 0;
+ }
-ZEND_API zend_utility_values zend_uv;
-ZEND_API zend_bool zend_dtrace_enabled;
+ zend_printf_to_smart_string(&buf, format, ap);
-/* version information */
-static char *zend_version_info;
-static uint zend_version_info_length;
-#define ZEND_CORE_VERSION_INFO "Zend Engine v" ZEND_VERSION ", Copyright (c) 1998-2018 Zend Technologies\n"
-#define PRINT_ZVAL_INDENT 4
+ if (max_len && buf.len > max_len) {
+ buf.len = max_len;
+ }
+
+ smart_string_0(&buf);
+
+ if (buf.c) {
+ *pbuf = buf.c;
+ return buf.len;
+ } else {
+ *pbuf = estrndup("", 0);
+ return 0;
+ }
+}
+/* }}} */
+
+ZEND_API size_t zend_spprintf(char **message, size_t max_len, const char *format, ...) /* {{{ */
+{
+ va_list arg;
+ size_t len;
+
+ va_start(arg, format);
+ len = zend_vspprintf(message, max_len, format, arg);
+ va_end(arg);
+ return len;
+}
+/* }}} */
+
+ZEND_API zend_string *zend_vstrpprintf(size_t max_len, const char *format, va_list ap) /* {{{ */
+{
+ smart_str buf = {0};
+
+ zend_printf_to_smart_str(&buf, format, ap);
+
+ if (!buf.s) {
+ return ZSTR_EMPTY_ALLOC();
+ }
+
+ if (max_len && ZSTR_LEN(buf.s) > max_len) {
+ ZSTR_LEN(buf.s) = max_len;
+ }
+
+ smart_str_0(&buf);
+ return buf.s;
+}
+/* }}} */
+
+ZEND_API zend_string *zend_strpprintf(size_t max_len, const char *format, ...) /* {{{ */
+{
+ va_list arg;
+ zend_string *str;
+
+ va_start(arg, format);
+ str = zend_vstrpprintf(max_len, format, arg);
+ va_end(arg);
+ return str;
+}
+/* }}} */
static void zend_print_zval_r_to_buf(smart_str *buf, zval *expr, int indent);
@@ -512,12 +580,6 @@ static void compiler_globals_ctor(zend_compiler_globals *compiler_globals) /* {{
compiler_globals->static_members_table = NULL;
}
compiler_globals->script_encoding_list = NULL;
-
- compiler_globals->empty_string = zend_zts_interned_string_init("", sizeof("")-1);
-
- memset(compiler_globals->one_char_string, 0, sizeof(compiler_globals->one_char_string));
-
- zend_known_interned_strings_init(&compiler_globals->known_strings, &compiler_globals->known_strings_count);
}
/* }}} */
@@ -542,11 +604,6 @@ static void compiler_globals_dtor(zend_compiler_globals *compiler_globals) /* {{
pefree((char*)compiler_globals->script_encoding_list, 1);
}
compiler_globals->last_static_member = 0;
-
- zend_zts_interned_string_free(&compiler_globals->empty_string);
-
- compiler_globals->known_strings = NULL;
- compiler_globals->known_strings_count = 0;
}
/* }}} */
@@ -555,7 +612,7 @@ static void executor_globals_ctor(zend_executor_globals *executor_globals) /* {{
ZEND_TSRMLS_CACHE_UPDATE();
zend_startup_constants();
- zend_copy_constants(EG(zend_constants), GLOBAL_CONSTANTS_TABLE);
+ zend_copy_constants(executor_globals->zend_constants, GLOBAL_CONSTANTS_TABLE);
zend_init_rsrc_plist();
zend_init_exception_op();
zend_init_call_trampoline_op();
@@ -580,7 +637,7 @@ static void executor_globals_ctor(zend_executor_globals *executor_globals) /* {{
#ifdef ZEND_WIN32
zend_get_windows_version_info(&executor_globals->windows_version_info);
#endif
- executor_globals->valid_symbol_table = 0;
+ executor_globals->flags = EG_FLAGS_INITIAL;
}
/* }}} */
@@ -689,8 +746,8 @@ int zend_startup(zend_utility_functions *utility_functions, char **extensions) /
zend_get_configuration_directive_p = utility_functions->get_configuration_directive;
zend_ticks_function = utility_functions->ticks_function;
zend_on_timeout = utility_functions->on_timeout;
- zend_vspprintf = utility_functions->vspprintf_function;
- zend_vstrpprintf = utility_functions->vstrpprintf_function;
+ zend_printf_to_smart_string = utility_functions->printf_to_smart_string_function;
+ zend_printf_to_smart_str = utility_functions->printf_to_smart_str_function;
zend_getenv = utility_functions->getenv_function;
zend_resolve_path = utility_functions->resolve_path_function;
@@ -791,6 +848,7 @@ int zend_startup(zend_utility_functions *utility_functions, char **extensions) /
#ifdef ZTS
tsrm_set_new_thread_end_handler(zend_new_thread_end_handler);
+ tsrm_set_shutdown_handler(zend_interned_strings_dtor);
#endif
return SUCCESS;
@@ -834,13 +892,9 @@ void zend_post_startup(void) /* {{{ */
}
free(EG(zend_constants));
- virtual_cwd_deactivate();
-
executor_globals_ctor(executor_globals);
global_persistent_list = &EG(persistent_list);
zend_copy_ini_directives();
-#else
- virtual_cwd_deactivate();
#endif
}
/* }}} */
@@ -848,31 +902,6 @@ void zend_post_startup(void) /* {{{ */
void zend_shutdown(void) /* {{{ */
{
zend_destroy_rsrc_list(&EG(persistent_list));
- if (EG(active))
- {
- /*
- * The order of destruction is important here.
- * See bugs #65463 and 66036.
- */
- zend_function *func;
- zend_class_entry *ce;
-
- ZEND_HASH_REVERSE_FOREACH_PTR(GLOBAL_FUNCTION_TABLE, func) {
- if (func->type == ZEND_USER_FUNCTION) {
- zend_cleanup_op_array_data((zend_op_array *) func);
- }
- } ZEND_HASH_FOREACH_END();
- ZEND_HASH_REVERSE_FOREACH_PTR(GLOBAL_CLASS_TABLE, ce) {
- if (ce->type == ZEND_USER_CLASS) {
- zend_cleanup_user_class_data(ce);
- } else {
- break;
- }
- } ZEND_HASH_FOREACH_END();
- zend_cleanup_internal_classes();
- zend_hash_reverse_apply(GLOBAL_FUNCTION_TABLE, (apply_func_t) clean_non_persistent_function_full);
- zend_hash_reverse_apply(GLOBAL_CLASS_TABLE, (apply_func_t) clean_non_persistent_class_full);
- }
zend_destroy_modules();
virtual_cwd_deactivate();
@@ -902,14 +931,16 @@ void zend_shutdown(void) /* {{{ */
#endif
zend_destroy_rsrc_list_dtors();
+#ifndef ZTS
zend_interned_strings_dtor();
+#endif
}
/* }}} */
void zend_set_utility_values(zend_utility_values *utility_values) /* {{{ */
{
zend_uv = *utility_values;
- zend_uv.import_use_extension_length = (uint)strlen(zend_uv.import_use_extension);
+ zend_uv.import_use_extension_length = (uint32_t)strlen(zend_uv.import_use_extension);
}
/* }}} */
@@ -928,7 +959,7 @@ ZEND_COLD void zenderror(const char *error) /* {{{ */
/* }}} */
BEGIN_EXTERN_C()
-ZEND_API ZEND_COLD void _zend_bailout(char *filename, uint lineno) /* {{{ */
+ZEND_API ZEND_COLD void _zend_bailout(const char *filename, uint32_t lineno) /* {{{ */
{
if (!EG(bailout)) {
@@ -947,9 +978,9 @@ END_EXTERN_C()
ZEND_API void zend_append_version_info(const zend_extension *extension) /* {{{ */
{
char *new_info;
- uint new_info_length;
+ uint32_t new_info_length;
- new_info_length = (uint)(sizeof(" with v, , by \n")
+ new_info_length = (uint32_t)(sizeof(" with v, , by \n")
+ strlen(extension->name)
+ strlen(extension->version)
+ strlen(extension->copyright)
@@ -1072,8 +1103,6 @@ ZEND_API ZEND_COLD void zend_error(int type, const char *format, ...) /* {{{ */
static ZEND_COLD void zend_error_va_list(int type, const char *format, va_list args)
#endif
{
- char *str;
- int len;
#if !defined(HAVE_NORETURN) || defined(HAVE_NORETURN_ALIAS)
va_list args;
#endif
@@ -1081,7 +1110,7 @@ static ZEND_COLD void zend_error_va_list(int type, const char *format, va_list a
zval params[5];
zval retval;
const char *error_filename;
- uint error_lineno = 0;
+ uint32_t error_lineno = 0;
zval orig_user_error_handler;
zend_bool in_compilation;
zend_class_entry *saved_class_entry;
@@ -1202,24 +1231,9 @@ static ZEND_COLD void zend_error_va_list(int type, const char *format, va_list a
break;
default:
/* Handle the error in user space */
-/* va_copy() is __va_copy() in old gcc versions.
- * According to the autoconf manual, using
- * memcpy(&dst, &src, sizeof(va_list))
- * gives maximum portability. */
-#ifndef va_copy
-# ifdef __va_copy
-# define va_copy(dest, src) __va_copy((dest), (src))
-# else
-# define va_copy(dest, src) memcpy(&(dest), &(src), sizeof(va_list))
-# endif
-#endif
va_copy(usr_copy, args);
- len = (int)zend_vspprintf(&str, 0, format, usr_copy);
- ZVAL_NEW_STR(&params[1], zend_string_init(str, len, 0));
- efree(str);
-#ifdef va_copy
+ ZVAL_STR(&params[1], zend_vstrpprintf(0, format, usr_copy));
va_end(usr_copy);
-#endif
ZVAL_LONG(&params[0], type);
@@ -1534,4 +1548,6 @@ void free_estring(char **str_p) /* {{{ */
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend.h b/Zend/zend.h
index 35d518ca8f..74f68964c9 100644
--- a/Zend/zend.h
+++ b/Zend/zend.h
@@ -22,12 +22,10 @@
#ifndef ZEND_H
#define ZEND_H
-#define ZEND_VERSION "3.1.0"
+#define ZEND_VERSION "3.2.0"
#define ZEND_ENGINE_3
-#define ZEND_MAX_RESERVED_RESOURCES 4
-
#include "zend_types.h"
#include "zend_errors.h"
#include "zend_alloc.h"
@@ -40,6 +38,7 @@
#include "zend_iterators.h"
#include "zend_stream.h"
#include "zend_smart_str_public.h"
+#include "zend_smart_string_public.h"
#include "zend_signal.h"
#define HANDLE_BLOCK_INTERRUPTIONS() ZEND_SIGNAL_BLOCK_INTERRUPTIONS()
@@ -178,7 +177,7 @@ struct _zend_class_entry {
};
typedef struct _zend_utility_functions {
- void (*error_function)(int type, const char *error_filename, const uint error_lineno, const char *format, va_list args) ZEND_ATTRIBUTE_PTR_FORMAT(printf, 4, 0);
+ void (*error_function)(int type, const char *error_filename, const uint32_t error_lineno, const char *format, va_list args) ZEND_ATTRIBUTE_PTR_FORMAT(printf, 4, 0);
size_t (*printf_function)(const char *format, ...) ZEND_ATTRIBUTE_PTR_FORMAT(printf, 1, 2);
size_t (*write_function)(const char *str, size_t str_length);
FILE *(*fopen_function)(const char *filename, zend_string **opened_path);
@@ -187,15 +186,15 @@ typedef struct _zend_utility_functions {
void (*ticks_function)(int ticks);
void (*on_timeout)(int seconds);
int (*stream_open_function)(const char *filename, zend_file_handle *handle);
- size_t (*vspprintf_function)(char **pbuf, size_t max_len, const char *format, va_list ap);
- zend_string *(*vstrpprintf_function)(size_t max_len, const char *format, va_list ap);
+ void (*printf_to_smart_string_function)(smart_string *buf, const char *format, va_list ap);
+ void (*printf_to_smart_str_function)(smart_str *buf, const char *format, va_list ap);
char *(*getenv_function)(char *name, size_t name_len);
zend_string *(*resolve_path_function)(const char *filename, int filename_len);
} zend_utility_functions;
typedef struct _zend_utility_values {
char *import_use_extension;
- uint import_use_extension_length;
+ uint32_t import_use_extension_length;
zend_bool html_errors;
} zend_utility_values;
@@ -226,7 +225,12 @@ void zend_register_standard_ini_entries(void);
void zend_post_startup(void);
void zend_set_utility_values(zend_utility_values *utility_values);
-ZEND_API ZEND_COLD void _zend_bailout(char *filename, uint lineno);
+ZEND_API ZEND_COLD void _zend_bailout(const char *filename, uint32_t lineno);
+
+ZEND_API size_t zend_vspprintf(char **pbuf, size_t max_len, const char *format, va_list ap);
+ZEND_API size_t zend_spprintf(char **message, size_t max_len, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 3, 4);
+ZEND_API zend_string *zend_vstrpprintf(size_t max_len, const char *format, va_list ap);
+ZEND_API zend_string *zend_strpprintf(size_t max_len, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3);
ZEND_API char *get_zend_version(void);
ZEND_API int zend_make_printable_zval(zval *expr, zval *expr_copy);
@@ -259,11 +263,11 @@ extern ZEND_API zend_write_func_t zend_write;
extern ZEND_API FILE *(*zend_fopen)(const char *filename, zend_string **opened_path);
extern ZEND_API void (*zend_ticks_function)(int ticks);
extern ZEND_API void (*zend_interrupt_function)(zend_execute_data *execute_data);
-extern ZEND_API void (*zend_error_cb)(int type, const char *error_filename, const uint error_lineno, const char *format, va_list args) ZEND_ATTRIBUTE_PTR_FORMAT(printf, 4, 0);
+extern ZEND_API void (*zend_error_cb)(int type, const char *error_filename, const uint32_t error_lineno, const char *format, va_list args) ZEND_ATTRIBUTE_PTR_FORMAT(printf, 4, 0);
extern ZEND_API void (*zend_on_timeout)(int seconds);
extern ZEND_API int (*zend_stream_open_function)(const char *filename, zend_file_handle *handle);
-extern size_t (*zend_vspprintf)(char **pbuf, size_t max_len, const char *format, va_list ap);
-extern zend_string *(*zend_vstrpprintf)(size_t max_len, const char *format, va_list ap);
+extern void (*zend_printf_to_smart_string)(smart_string *buf, const char *format, va_list ap);
+extern void (*zend_printf_to_smart_str)(smart_str *buf, const char *format, va_list ap);
extern ZEND_API char *(*zend_getenv)(char *name, size_t name_len);
extern ZEND_API zend_string *(*zend_resolve_path)(const char *filename, int filename_len);
@@ -331,4 +335,6 @@ ZEND_API void zend_restore_error_handling(zend_error_handling *saved);
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_API.c b/Zend/zend_API.c
index 604dd47c70..fedef6f574 100644
--- a/Zend/zend_API.c
+++ b/Zend/zend_API.c
@@ -202,13 +202,43 @@ ZEND_API char *zend_zval_type_name(const zval *arg) /* {{{ */
}
/* }}} */
-ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameters_count_error(int num_args, int min_num_args, int max_num_args) /* {{{ */
+ZEND_API zend_string *zend_zval_get_type(const zval *arg) /* {{{ */
+{
+ switch (Z_TYPE_P(arg)) {
+ case IS_NULL:
+ return ZSTR_KNOWN(ZEND_STR_NULL);
+ case IS_FALSE:
+ case IS_TRUE:
+ return ZSTR_KNOWN(ZEND_STR_BOOLEAN);
+ case IS_LONG:
+ return ZSTR_KNOWN(ZEND_STR_INTEGER);
+ case IS_DOUBLE:
+ return ZSTR_KNOWN(ZEND_STR_DOUBLE);
+ case IS_STRING:
+ return ZSTR_KNOWN(ZEND_STR_STRING);
+ case IS_ARRAY:
+ return ZSTR_KNOWN(ZEND_STR_ARRAY);
+ case IS_OBJECT:
+ return ZSTR_KNOWN(ZEND_STR_OBJECT);
+ case IS_RESOURCE:
+ if (zend_rsrc_list_get_rsrc_type(Z_RES_P(arg))) {
+ return ZSTR_KNOWN(ZEND_STR_RESOURCE);
+ } else {
+ return ZSTR_KNOWN(ZEND_STR_CLOSED_RESOURCE);
+ }
+ default:
+ return NULL;
+ }
+}
+/* }}} */
+
+ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameters_count_error(zend_bool throw_, int num_args, int min_num_args, int max_num_args) /* {{{ */
{
zend_function *active_function = EG(current_execute_data)->func;
const char *class_name = active_function->common.scope ? ZSTR_VAL(active_function->common.scope->name) : "";
zend_internal_argument_count_error(
- ZEND_ARG_USES_STRICT_TYPES(),
+ throw_ || ZEND_ARG_USES_STRICT_TYPES(),
"%s%s%s() expects %s %d parameter%s, %d given",
class_name, \
class_name[0] ? "::" : "", \
@@ -220,7 +250,7 @@ ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameters_count_error(int num_
}
/* }}} */
-ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_type_error(int num, zend_expected_type expected_type, zval *arg) /* {{{ */
+ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_type_error(zend_bool throw_, int num, zend_expected_type expected_type, zval *arg) /* {{{ */
{
const char *space;
const char *class_name = get_active_class_name(&space);
@@ -229,28 +259,28 @@ ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_type_error(int num, z
NULL
};
- zend_internal_type_error(ZEND_ARG_USES_STRICT_TYPES(), "%s%s%s() expects parameter %d to be %s, %s given",
+ zend_internal_type_error(throw_ || ZEND_ARG_USES_STRICT_TYPES(), "%s%s%s() expects parameter %d to be %s, %s given",
class_name, space, get_active_function_name(), num, expected_error[expected_type], zend_zval_type_name(arg));
}
/* }}} */
-ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_class_error(int num, char *name, zval *arg) /* {{{ */
+ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_class_error(zend_bool throw_, int num, char *name, zval *arg) /* {{{ */
{
const char *space;
const char *class_name = get_active_class_name(&space);
- zend_internal_type_error(ZEND_ARG_USES_STRICT_TYPES(), "%s%s%s() expects parameter %d to be %s, %s given",
+ zend_internal_type_error(throw_ || ZEND_ARG_USES_STRICT_TYPES(), "%s%s%s() expects parameter %d to be %s, %s given",
class_name, space, get_active_function_name(), num, name, zend_zval_type_name(arg));
}
/* }}} */
-ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_callback_error(int severity, int num, char *error) /* {{{ */
+ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_callback_error(zend_bool throw_, int severity, int num, char *error) /* {{{ */
{
const char *space;
const char *class_name = get_active_class_name(&space);
if (severity == E_WARNING) {
- zend_internal_type_error(ZEND_ARG_USES_STRICT_TYPES(), "%s%s%s() expects parameter %d to be a valid callback, %s",
+ zend_internal_type_error(throw_ || ZEND_ARG_USES_STRICT_TYPES(), "%s%s%s() expects parameter %d to be a valid callback, %s",
class_name, space, get_active_function_name(), num, error);
} else if (severity == E_ERROR) {
zend_throw_error(zend_ce_type_error, "%s%s%s() expects parameter %d to be a valid callback, %s",
@@ -1377,7 +1407,7 @@ ZEND_API int add_assoc_str_ex(zval *arg, const char *key, size_t key_len, zend_s
}
/* }}} */
-ZEND_API int add_assoc_string_ex(zval *arg, const char *key, size_t key_len, char *str) /* {{{ */
+ZEND_API int add_assoc_string_ex(zval *arg, const char *key, size_t key_len, const char *str) /* {{{ */
{
zval *ret, tmp;
@@ -1387,7 +1417,7 @@ ZEND_API int add_assoc_string_ex(zval *arg, const char *key, size_t key_len, cha
}
/* }}} */
-ZEND_API int add_assoc_stringl_ex(zval *arg, const char *key, size_t key_len, char *str, size_t length) /* {{{ */
+ZEND_API int add_assoc_stringl_ex(zval *arg, const char *key, size_t key_len, const char *str, size_t length) /* {{{ */
{
zval *ret, tmp;
@@ -1562,7 +1592,7 @@ ZEND_API int add_next_index_zval(zval *arg, zval *value) /* {{{ */
}
/* }}} */
-ZEND_API zval *add_get_assoc_string_ex(zval *arg, const char *key, uint key_len, const char *str) /* {{{ */
+ZEND_API zval *add_get_assoc_string_ex(zval *arg, const char *key, uint32_t key_len, const char *str) /* {{{ */
{
zval tmp, *ret;
@@ -1572,7 +1602,7 @@ ZEND_API zval *add_get_assoc_string_ex(zval *arg, const char *key, uint key_len,
}
/* }}} */
-ZEND_API zval *add_get_assoc_stringl_ex(zval *arg, const char *key, uint key_len, const char *str, size_t length) /* {{{ */
+ZEND_API zval *add_get_assoc_stringl_ex(zval *arg, const char *key, uint32_t key_len, const char *str, size_t length) /* {{{ */
{
zval tmp, *ret;
@@ -2019,6 +2049,7 @@ ZEND_API zend_module_entry* zend_register_module_ex(zend_module_entry *module) /
lcname = zend_string_alloc(name_len, 1);
zend_str_tolower_copy(ZSTR_VAL(lcname), module->name, name_len);
+ lcname = zend_new_interned_string(lcname);
if ((module_ptr = zend_hash_add_mem(&module_registry, lcname, module, sizeof(zend_module_entry))) == NULL) {
zend_error(E_CORE_WARNING, "Module '%s' already loaded", module->name);
zend_string_release(lcname);
@@ -2189,11 +2220,15 @@ ZEND_API int zend_register_functions(zend_class_entry *scope, const zend_functio
/* Don't count the variadic argument */
internal_function->num_args--;
}
- if (info->type_hint) {
- if (info->class_name) {
- ZEND_ASSERT(info->type_hint == IS_OBJECT);
- if (!scope && (!strcasecmp(info->class_name, "self") || !strcasecmp(info->class_name, "parent"))) {
- zend_error_noreturn(E_CORE_ERROR, "Cannot declare a return type of %s outside of a class scope", info->class_name);
+ if (ZEND_TYPE_IS_SET(info->type)) {
+ if (ZEND_TYPE_IS_CLASS(info->type)) {
+ const char *type_name = (const char*)info->type;
+
+ if (type_name[0] == '?') {
+ type_name++;
+ }
+ if (!scope && (!strcasecmp(type_name, "self") || !strcasecmp(type_name, "parent"))) {
+ zend_error_noreturn(E_CORE_ERROR, "Cannot declare a return type of %s outside of a class scope", type_name);
}
}
@@ -2250,14 +2285,43 @@ ZEND_API int zend_register_functions(zend_class_entry *scope, const zend_functio
if (reg_function->common.arg_info && reg_function->common.num_args) {
uint32_t i;
for (i = 0; i < reg_function->common.num_args; i++) {
- if (reg_function->common.arg_info[i].class_name ||
- reg_function->common.arg_info[i].type_hint) {
+ if (ZEND_TYPE_IS_SET(reg_function->common.arg_info[i].type)) {
reg_function->common.fn_flags |= ZEND_ACC_HAS_TYPE_HINTS;
break;
}
}
}
+ if (reg_function->common.arg_info &&
+ (reg_function->common.fn_flags & (ZEND_ACC_HAS_RETURN_TYPE|ZEND_ACC_HAS_TYPE_HINTS))) {
+ /* convert "const char*" class type names into "zend_string*" */
+ uint32_t i;
+ uint32_t num_args = reg_function->common.num_args + 1;
+ zend_arg_info *arg_info = reg_function->common.arg_info - 1;
+ zend_arg_info *new_arg_info;
+
+ if (reg_function->common.fn_flags & ZEND_ACC_VARIADIC) {
+ num_args++;
+ }
+ new_arg_info = malloc(sizeof(zend_arg_info) * num_args);
+ memcpy(new_arg_info, arg_info, sizeof(zend_arg_info) * num_args);
+ reg_function->common.arg_info = new_arg_info + 1;
+ for (i = 0; i < num_args; i++) {
+ if (ZEND_TYPE_IS_CLASS(new_arg_info[i].type)) {
+ const char *class_name = (const char*)new_arg_info[i].type;
+ zend_bool allow_null = 0;
+ zend_string *str;
+
+ if (class_name[0] == '?') {
+ class_name++;
+ allow_null = 1;
+ }
+ str = zend_new_interned_string(zend_string_init(class_name, strlen(class_name), 1));
+ new_arg_info[i].type = ZEND_TYPE_ENCODE_CLASS(str, allow_null);
+ }
+ }
+ }
+
if (scope) {
/* Look for ctor, dtor, clone
* If it's an old-style constructor, store it only if we don't have
@@ -2349,7 +2413,6 @@ ZEND_API int zend_register_functions(zend_class_entry *scope, const zend_functio
dtor->common.fn_flags &= ~ZEND_ACC_ALLOW_STATIC;
}
if (clone) {
- clone->common.fn_flags |= ZEND_ACC_CLONE;
if (clone->common.fn_flags & ZEND_ACC_STATIC) {
zend_error(error_type, "%s::%s() cannot be static", ZSTR_VAL(scope->name), ZSTR_VAL(clone->common.function_name));
}
@@ -2520,12 +2583,10 @@ void module_destructor(zend_module_entry *module) /* {{{ */
}
#if HAVE_LIBDL
-#if !(defined(NETWARE) && defined(APACHE_1_BUILD))
if (module->handle && !getenv("ZEND_DONT_UNLOAD_MODULES")) {
DL_UNLOAD(module->handle);
}
#endif
-#endif
}
/* }}} */
@@ -2724,6 +2785,7 @@ ZEND_API int zend_register_class_alias_ex(const char *name, size_t name_len, zen
zend_assert_valid_class_name(lcname);
+ lcname = zend_new_interned_string(lcname);
ce = zend_hash_add_ptr(CG(class_table), lcname, ce);
zend_string_release(lcname);
if (ce) {
@@ -3184,14 +3246,86 @@ get_function_via_handler:
}
/* }}} */
-ZEND_API zend_bool zend_is_callable_ex(zval *callable, zend_object *object, uint check_flags, zend_string **callable_name, zend_fcall_info_cache *fcc, char **error) /* {{{ */
+static zend_string *zend_create_method_string(zend_string *class_name, zend_string *method_name) {
+ zend_string *callable_name = zend_string_alloc(
+ ZSTR_LEN(class_name) + ZSTR_LEN(method_name) + sizeof("::") - 1, 0);
+ char *ptr = ZSTR_VAL(callable_name);
+ memcpy(ptr, ZSTR_VAL(class_name), ZSTR_LEN(class_name));
+ ptr += ZSTR_LEN(class_name);
+ memcpy(ptr, "::", sizeof("::") - 1);
+ ptr += sizeof("::") - 1;
+ memcpy(ptr, ZSTR_VAL(method_name), ZSTR_LEN(method_name) + 1);
+ return callable_name;
+}
+
+ZEND_API zend_string *zend_get_callable_name_ex(zval *callable, zend_object *object) /* {{{ */
+{
+try_again:
+ switch (Z_TYPE_P(callable)) {
+ case IS_STRING:
+ if (object) {
+ return zend_create_method_string(object->ce->name, Z_STR_P(callable));
+ }
+ return zend_string_copy(Z_STR_P(callable));
+
+ case IS_ARRAY:
+ {
+ zval *method = NULL;
+ zval *obj = NULL;
+
+ if (zend_hash_num_elements(Z_ARRVAL_P(callable)) == 2) {
+ obj = zend_hash_index_find_deref(Z_ARRVAL_P(callable), 0);
+ method = zend_hash_index_find_deref(Z_ARRVAL_P(callable), 1);
+ }
+
+ if (obj == NULL || method == NULL || Z_TYPE_P(method) != IS_STRING) {
+ return zend_string_init("Array", sizeof("Array")-1, 0);
+ }
+
+ if (Z_TYPE_P(obj) == IS_STRING) {
+ return zend_create_method_string(Z_STR_P(obj), Z_STR_P(method));
+ } else if (Z_TYPE_P(obj) == IS_OBJECT) {
+ return zend_create_method_string(Z_OBJCE_P(obj)->name, Z_STR_P(method));
+ } else {
+ return zend_string_init("Array", sizeof("Array")-1, 0);
+ }
+ }
+ case IS_OBJECT:
+ {
+ zend_class_entry *calling_scope;
+ zend_function *fptr;
+ zend_object *object;
+ if (Z_OBJ_HANDLER_P(callable, get_closure)
+ && Z_OBJ_HANDLER_P(callable, get_closure)(callable, &calling_scope, &fptr, &object) == SUCCESS) {
+ zend_class_entry *ce = Z_OBJCE_P(callable);
+ zend_string *callable_name = zend_string_alloc(
+ ZSTR_LEN(ce->name) + sizeof("::__invoke") - 1, 0);
+ memcpy(ZSTR_VAL(callable_name), ZSTR_VAL(ce->name), ZSTR_LEN(ce->name));
+ memcpy(ZSTR_VAL(callable_name) + ZSTR_LEN(ce->name), "::__invoke", sizeof("::__invoke"));
+ return callable_name;
+ }
+ return zval_get_string(callable);
+ }
+ case IS_REFERENCE:
+ callable = Z_REFVAL_P(callable);
+ goto try_again;
+ default:
+ return zval_get_string(callable);
+ }
+}
+/* }}} */
+
+ZEND_API zend_string *zend_get_callable_name(zval *callable) /* {{{ */
+{
+ return zend_get_callable_name_ex(callable, NULL);
+}
+/* }}} */
+
+static zend_bool zend_is_callable_impl(zval *callable, zend_object *object, uint32_t check_flags, zend_fcall_info_cache *fcc, char **error) /* {{{ */
{
zend_bool ret;
zend_fcall_info_cache fcc_local;
- if (callable_name) {
- *callable_name = NULL;
- }
if (fcc == NULL) {
fcc = &fcc_local;
}
@@ -3205,32 +3339,14 @@ ZEND_API zend_bool zend_is_callable_ex(zval *callable, zend_object *object, uint
fcc->function_handler = NULL;
fcc->object = NULL;
- if (object &&
- (!EG(objects_store).object_buckets ||
- !IS_OBJ_VALID(EG(objects_store).object_buckets[object->handle]))) {
- return 0;
- }
-
again:
switch (Z_TYPE_P(callable)) {
case IS_STRING:
if (object) {
fcc->object = object;
fcc->calling_scope = object->ce;
- if (callable_name) {
- char *ptr;
-
- *callable_name = zend_string_alloc(ZSTR_LEN(fcc->calling_scope->name) + Z_STRLEN_P(callable) + sizeof("::") - 1, 0);
- ptr = ZSTR_VAL(*callable_name);
- memcpy(ptr, ZSTR_VAL(fcc->calling_scope->name), ZSTR_LEN(fcc->calling_scope->name));
- ptr += ZSTR_LEN(fcc->calling_scope->name);
- memcpy(ptr, "::", sizeof("::") - 1);
- ptr += sizeof("::") - 1;
- memcpy(ptr, Z_STRVAL_P(callable), Z_STRLEN_P(callable) + 1);
- }
- } else if (callable_name) {
- *callable_name = zend_string_copy(Z_STR_P(callable));
}
+
if (check_flags & IS_CALLABLE_CHECK_SYNTAX_ONLY) {
fcc->called_scope = fcc->calling_scope;
return 1;
@@ -3273,19 +3389,6 @@ again:
ZVAL_DEREF(obj);
if (Z_TYPE_P(obj) == IS_STRING) {
- if (callable_name) {
- char *ptr;
-
-
- *callable_name = zend_string_alloc(Z_STRLEN_P(obj) + Z_STRLEN_P(method) + sizeof("::") - 1, 0);
- ptr = ZSTR_VAL(*callable_name);
- memcpy(ptr, Z_STRVAL_P(obj), Z_STRLEN_P(obj));
- ptr += Z_STRLEN_P(obj);
- memcpy(ptr, "::", sizeof("::") - 1);
- ptr += sizeof("::") - 1;
- memcpy(ptr, Z_STRVAL_P(method), Z_STRLEN_P(method) + 1);
- }
-
if (check_flags & IS_CALLABLE_CHECK_SYNTAX_ONLY) {
return 1;
}
@@ -3295,27 +3398,11 @@ again:
}
} else if (Z_TYPE_P(obj) == IS_OBJECT) {
- if (!EG(objects_store).object_buckets ||
- !IS_OBJ_VALID(EG(objects_store).object_buckets[Z_OBJ_HANDLE_P(obj)])) {
- return 0;
- }
fcc->calling_scope = Z_OBJCE_P(obj); /* TBFixed: what if it's overloaded? */
fcc->object = Z_OBJ_P(obj);
- if (callable_name) {
- char *ptr;
-
- *callable_name = zend_string_alloc(ZSTR_LEN(fcc->calling_scope->name) + Z_STRLEN_P(method) + sizeof("::") - 1, 0);
- ptr = ZSTR_VAL(*callable_name);
- memcpy(ptr, ZSTR_VAL(fcc->calling_scope->name), ZSTR_LEN(fcc->calling_scope->name));
- ptr += ZSTR_LEN(fcc->calling_scope->name);
- memcpy(ptr, "::", sizeof("::") - 1);
- ptr += sizeof("::") - 1;
- memcpy(ptr, Z_STRVAL_P(method), Z_STRLEN_P(method) + 1);
- }
-
if (check_flags & IS_CALLABLE_CHECK_SYNTAX_ONLY) {
fcc->called_scope = fcc->calling_scope;
return 1;
@@ -3350,43 +3437,36 @@ again:
} else {
if (error) zend_spprintf(error, 0, "array must have exactly two members");
}
- if (callable_name) {
- *callable_name = zend_string_init("Array", sizeof("Array")-1, 0);
- }
}
return 0;
case IS_OBJECT:
if (Z_OBJ_HANDLER_P(callable, get_closure) && Z_OBJ_HANDLER_P(callable, get_closure)(callable, &fcc->calling_scope, &fcc->function_handler, &fcc->object) == SUCCESS) {
fcc->called_scope = fcc->calling_scope;
- if (callable_name) {
- zend_class_entry *ce = Z_OBJCE_P(callable); /* TBFixed: what if it's overloaded? */
-
- *callable_name = zend_string_alloc(ZSTR_LEN(ce->name) + sizeof("::__invoke") - 1, 0);
- memcpy(ZSTR_VAL(*callable_name), ZSTR_VAL(ce->name), ZSTR_LEN(ce->name));
- memcpy(ZSTR_VAL(*callable_name) + ZSTR_LEN(ce->name), "::__invoke", sizeof("::__invoke"));
- }
fcc->initialized = 1;
return 1;
}
- if (callable_name) {
- *callable_name = zval_get_string(callable);
- }
if (error) zend_spprintf(error, 0, "no array or string given");
return 0;
case IS_REFERENCE:
callable = Z_REFVAL_P(callable);
goto again;
default:
- if (callable_name) {
- *callable_name = zval_get_string(callable);
- }
if (error) zend_spprintf(error, 0, "no array or string given");
return 0;
}
}
/* }}} */
-ZEND_API zend_bool zend_is_callable(zval *callable, uint check_flags, zend_string **callable_name) /* {{{ */
+ZEND_API zend_bool zend_is_callable_ex(zval *callable, zend_object *object, uint32_t check_flags, zend_string **callable_name, zend_fcall_info_cache *fcc, char **error) /* {{{ */
+{
+ zend_bool ret = zend_is_callable_impl(callable, object, check_flags, fcc, error);
+ if (callable_name) {
+ *callable_name = zend_get_callable_name_ex(callable, object);
+ }
+ return ret;
+}
+
+ZEND_API zend_bool zend_is_callable(zval *callable, uint32_t check_flags, zend_string **callable_name) /* {{{ */
{
return zend_is_callable_ex(callable, NULL, check_flags, callable_name, NULL, NULL);
}
@@ -3418,7 +3498,7 @@ ZEND_API zend_bool zend_make_callable(zval *callable, zend_string **callable_nam
}
/* }}} */
-ZEND_API int zend_fcall_info_init(zval *callable, uint check_flags, zend_fcall_info *fci, zend_fcall_info_cache *fcc, zend_string **callable_name, char **error) /* {{{ */
+ZEND_API int zend_fcall_info_init(zval *callable, uint32_t check_flags, zend_fcall_info *fci, zend_fcall_info_cache *fcc, zend_string **callable_name, char **error) /* {{{ */
{
if (!zend_is_callable_ex(callable, NULL, check_flags, callable_name, fcc, error)) {
return FAILURE;
@@ -3666,7 +3746,11 @@ ZEND_API int zend_declare_property_ex(zend_class_entry *ce, zend_string *name, z
default:
break;
}
+
+ /* Must be interned to avoid ZTS data races */
+ name = zend_new_interned_string(zend_string_copy(name));
}
+
if (access_type & ZEND_ACC_PUBLIC) {
property_info->name = zend_string_copy(name);
} else if (access_type & ZEND_ACC_PRIVATE) {
@@ -3791,6 +3875,9 @@ ZEND_API int zend_declare_class_constant(zend_class_entry *ce, const char *name,
int ret;
zend_string *key = zend_string_init(name, name_length, ce->type & ZEND_INTERNAL_CLASS);
+ if (ce->type == ZEND_INTERNAL_CLASS) {
+ key = zend_new_interned_string(key);
+ }
ret = zend_declare_class_constant_ex(ce, key, value, ZEND_ACC_PUBLIC, NULL);
zend_string_release(key);
return ret;
@@ -4250,4 +4337,6 @@ ZEND_API zend_bool zend_is_iterable(zval *iterable) /* {{{ */
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_API.h b/Zend/zend_API.h
index 79267ac00d..3840770362 100644
--- a/Zend/zend_API.h
+++ b/Zend/zend_API.h
@@ -35,7 +35,7 @@ BEGIN_EXTERN_C()
typedef struct _zend_function_entry {
const char *fname;
- void (*handler)(INTERNAL_FUNCTION_PARAMETERS);
+ zif_handler handler;
const struct _zend_internal_arg_info *arg_info;
uint32_t num_args;
uint32_t flags;
@@ -97,24 +97,32 @@ typedef struct _zend_fcall_info_cache {
#define ZEND_FE_END { NULL, NULL, NULL, 0, 0 }
-#define ZEND_ARG_INFO(pass_by_ref, name) { #name, NULL, 0, pass_by_ref, 0, 0 },
-#define ZEND_ARG_PASS_INFO(pass_by_ref) { NULL, NULL, 0, pass_by_ref, 0, 0 },
-#define ZEND_ARG_OBJ_INFO(pass_by_ref, name, classname, allow_null) { #name, #classname, IS_OBJECT, pass_by_ref, allow_null, 0 },
-#define ZEND_ARG_ARRAY_INFO(pass_by_ref, name, allow_null) { #name, NULL, IS_ARRAY, pass_by_ref, allow_null, 0 },
-#define ZEND_ARG_CALLABLE_INFO(pass_by_ref, name, allow_null) { #name, NULL, IS_CALLABLE, pass_by_ref, allow_null, 0 },
-#define ZEND_ARG_TYPE_INFO(pass_by_ref, name, type_hint, allow_null) { #name, NULL, type_hint, pass_by_ref, allow_null, 0 },
-#define ZEND_ARG_VARIADIC_INFO(pass_by_ref, name) { #name, NULL, 0, pass_by_ref, 0, 1 },
+#define ZEND_ARG_INFO(pass_by_ref, name) { #name, 0, pass_by_ref, 0},
+#define ZEND_ARG_PASS_INFO(pass_by_ref) { NULL, 0, pass_by_ref, 0},
+#define ZEND_ARG_OBJ_INFO(pass_by_ref, name, classname, allow_null) { #name, ZEND_TYPE_ENCODE_CLASS_CONST(#classname, allow_null), pass_by_ref, 0 },
+#define ZEND_ARG_ARRAY_INFO(pass_by_ref, name, allow_null) { #name, ZEND_TYPE_ENCODE(IS_ARRAY, allow_null), pass_by_ref, 0 },
+#define ZEND_ARG_CALLABLE_INFO(pass_by_ref, name, allow_null) { #name, ZEND_TYPE_ENCODE(IS_CALLABLE, allow_null), pass_by_ref, 0 },
+#define ZEND_ARG_TYPE_INFO(pass_by_ref, name, type_hint, allow_null) { #name, ZEND_TYPE_ENCODE(type_hint, allow_null), pass_by_ref, 0 },
+#define ZEND_ARG_VARIADIC_INFO(pass_by_ref, name) { #name, 0, pass_by_ref, 1 },
+#define ZEND_ARG_VARIADIC_TYPE_INFO(pass_by_ref, name, type_hint, allow_null) { #name, ZEND_TYPE_ENCODE(type_hint, allow_null), pass_by_ref, 1 },
+#define ZEND_ARG_VARIADIC_OBJ_INFO(pass_by_ref, name, classname, allow_null) { #name, ZEND_TYPE_ENCODE_CLASS_CONST(#classname, allow_null), pass_by_ref, 1 },
+
+#define ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, return_reference, required_num_args, class_name, allow_null) \
+ static const zend_internal_arg_info name[] = { \
+ { (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_ENCODE_CLASS_CONST(#class_name, allow_null), return_reference, 0 },
+#define ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO(name, class_name, allow_null) \
+ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, 0, -1, class_name, allow_null)
-#define ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, return_reference, required_num_args, type, class_name, allow_null) \
+#define ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, return_reference, required_num_args, type, allow_null) \
static const zend_internal_arg_info name[] = { \
- { (const char*)(zend_uintptr_t)(required_num_args), class_name, type, return_reference, allow_null, 0 },
-#define ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(name, type, class_name, allow_null) \
- ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, 0, -1, type, class_name, allow_null)
+ { (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_ENCODE(type, allow_null), return_reference, 0 },
+#define ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(name, type, allow_null) \
+ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, 0, -1, type, allow_null)
#define ZEND_BEGIN_ARG_INFO_EX(name, _unused, return_reference, required_num_args) \
static const zend_internal_arg_info name[] = { \
- { (const char*)(zend_uintptr_t)(required_num_args), NULL, 0, return_reference, 0, 0 },
+ { (const char*)(zend_uintptr_t)(required_num_args), 0, return_reference, 0 },
#define ZEND_BEGIN_ARG_INFO(name, _unused) \
ZEND_BEGIN_ARG_INFO_EX(name, 0, ZEND_RETURN_VALUE, -1)
#define ZEND_END_ARG_INFO() };
@@ -260,6 +268,8 @@ ZEND_API int zend_copy_parameters_array(int param_count, zval *argument_array);
_zend_get_parameters_array_ex(param_count, argument_array)
#define zend_parse_parameters_none() \
(EXPECTED(ZEND_NUM_ARGS() == 0) ? SUCCESS : zend_parse_parameters(ZEND_NUM_ARGS(), ""))
+#define zend_parse_parameters_none_throw() \
+ (EXPECTED(ZEND_NUM_ARGS() == 0) ? SUCCESS : zend_parse_parameters_throw(ZEND_NUM_ARGS(), ""))
/* Parameter parsing API -- andrei */
@@ -269,6 +279,7 @@ ZEND_API int zend_parse_parameters(int num_args, const char *type_spec, ...);
ZEND_API int zend_parse_parameters_ex(int flags, int num_args, const char *type_spec, ...);
ZEND_API int zend_parse_parameters_throw(int num_args, const char *type_spec, ...);
ZEND_API char *zend_zval_type_name(const zval *arg);
+ZEND_API zend_string *zend_zval_get_type(const zval *arg);
ZEND_API int zend_parse_method_parameters(int num_args, zval *this_ptr, const char *type_spec, ...);
ZEND_API int zend_parse_method_parameters_ex(int flags, int num_args, zval *this_ptr, const char *type_spec, ...);
@@ -312,8 +323,10 @@ ZEND_API ZEND_COLD void zend_wrong_param_count(void);
#define IS_CALLABLE_STRICT (IS_CALLABLE_CHECK_IS_STATIC)
-ZEND_API zend_bool zend_is_callable_ex(zval *callable, zend_object *object, uint check_flags, zend_string **callable_name, zend_fcall_info_cache *fcc, char **error);
-ZEND_API zend_bool zend_is_callable(zval *callable, uint check_flags, zend_string **callable_name);
+ZEND_API zend_string *zend_get_callable_name_ex(zval *callable, zend_object *object);
+ZEND_API zend_string *zend_get_callable_name(zval *callable);
+ZEND_API zend_bool zend_is_callable_ex(zval *callable, zend_object *object, uint32_t check_flags, zend_string **callable_name, zend_fcall_info_cache *fcc, char **error);
+ZEND_API zend_bool zend_is_callable(zval *callable, uint32_t check_flags, zend_string **callable_name);
ZEND_API zend_bool zend_make_callable(zval *callable, zend_string **callable_name);
ZEND_API const char *zend_get_module_version(const char *module_name);
ZEND_API int zend_get_module_started(const char *module_name);
@@ -398,8 +411,8 @@ ZEND_API int add_assoc_bool_ex(zval *arg, const char *key, size_t key_len, int b
ZEND_API int add_assoc_resource_ex(zval *arg, const char *key, size_t key_len, zend_resource *r);
ZEND_API int add_assoc_double_ex(zval *arg, const char *key, size_t key_len, double d);
ZEND_API int add_assoc_str_ex(zval *arg, const char *key, size_t key_len, zend_string *str);
-ZEND_API int add_assoc_string_ex(zval *arg, const char *key, size_t key_len, char *str);
-ZEND_API int add_assoc_stringl_ex(zval *arg, const char *key, size_t key_len, char *str, size_t length);
+ZEND_API int add_assoc_string_ex(zval *arg, const char *key, size_t key_len, const char *str);
+ZEND_API int add_assoc_stringl_ex(zval *arg, const char *key, size_t key_len, const char *str, size_t length);
ZEND_API int add_assoc_zval_ex(zval *arg, const char *key, size_t key_len, zval *value);
#define add_assoc_long(__arg, __key, __n) add_assoc_long_ex(__arg, __key, strlen(__key), __n)
@@ -438,8 +451,8 @@ ZEND_API int add_next_index_string(zval *arg, const char *str);
ZEND_API int add_next_index_stringl(zval *arg, const char *str, size_t length);
ZEND_API int add_next_index_zval(zval *arg, zval *value);
-ZEND_API zval *add_get_assoc_string_ex(zval *arg, const char *key, uint key_len, const char *str);
-ZEND_API zval *add_get_assoc_stringl_ex(zval *arg, const char *key, uint key_len, const char *str, size_t length);
+ZEND_API zval *add_get_assoc_string_ex(zval *arg, const char *key, uint32_t key_len, const char *str);
+ZEND_API zval *add_get_assoc_stringl_ex(zval *arg, const char *key, uint32_t key_len, const char *str, size_t length);
#define add_get_assoc_string(__arg, __key, __str) add_get_assoc_string_ex(__arg, __key, strlen(__key), __str)
#define add_get_assoc_stringl(__arg, __key, __str, __length) add_get_assoc_stringl_ex(__arg, __key, strlen(__key), __str, __length)
@@ -492,7 +505,7 @@ ZEND_API extern const zend_fcall_info_cache empty_fcall_info_cache;
* The callable_name argument may be NULL.
* Set check_flags to IS_CALLABLE_STRICT for every new usage!
*/
-ZEND_API int zend_fcall_info_init(zval *callable, uint check_flags, zend_fcall_info *fci, zend_fcall_info_cache *fcc, zend_string **callable_name, char **error);
+ZEND_API int zend_fcall_info_init(zval *callable, uint32_t check_flags, zend_fcall_info *fci, zend_fcall_info_cache *fcc, zend_string **callable_name, char **error);
/** Clear arguments connected with zend_fcall_info *fci
* If free_mem is not zero then the params array gets free'd as well
@@ -701,10 +714,10 @@ typedef enum _zend_expected_type {
Z_EXPECTED_LAST
} zend_expected_type;
-ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameters_count_error(int num_args, int min_num_args, int max_num_args);
-ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_type_error(int num, zend_expected_type expected_type, zval *arg);
-ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_class_error(int num, char *name, zval *arg);
-ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_callback_error(int severity, int num, char *error);
+ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameters_count_error(zend_bool throw_, int num_args, int min_num_args, int max_num_args);
+ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_type_error(zend_bool throw_, int num, zend_expected_type expected_type, zval *arg);
+ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_class_error(zend_bool throw_, int num, char *name, zval *arg);
+ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_callback_error(zend_bool throw_, int severity, int num, char *error);
#define ZPP_ERROR_OK 0
#define ZPP_ERROR_FAILURE 1
@@ -738,7 +751,7 @@ ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_callback_error(int severity, in
(UNEXPECTED(_num_args > _max_num_args) && \
EXPECTED(_max_num_args >= 0))) { \
if (!(_flags & ZEND_PARSE_PARAMS_QUIET)) { \
- zend_wrong_parameters_count_error(_num_args, _min_num_args, _max_num_args); \
+ zend_wrong_parameters_count_error(_flags & ZEND_PARSE_PARAMS_THROW, _num_args, _min_num_args, _max_num_args); \
} \
error_code = ZPP_ERROR_FAILURE; \
break; \
@@ -754,11 +767,11 @@ ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_callback_error(int severity, in
if (UNEXPECTED(error_code != ZPP_ERROR_OK)) { \
if (!(_flags & ZEND_PARSE_PARAMS_QUIET)) { \
if (error_code == ZPP_ERROR_WRONG_CALLBACK) { \
- zend_wrong_callback_error(E_WARNING, _i, _error); \
+ zend_wrong_callback_error(_flags & ZEND_PARSE_PARAMS_THROW, E_WARNING, _i, _error); \
} else if (error_code == ZPP_ERROR_WRONG_CLASS) { \
- zend_wrong_parameter_class_error(_i, _error, _arg); \
+ zend_wrong_parameter_class_error(_flags & ZEND_PARSE_PARAMS_THROW, _i, _error, _arg); \
} else if (error_code == ZPP_ERROR_WRONG_ARG) { \
- zend_wrong_parameter_type_error(_i, _expected_type, _arg); \
+ zend_wrong_parameter_type_error(_flags & ZEND_PARSE_PARAMS_THROW, _i, _expected_type, _arg); \
} \
} \
failure; \
@@ -768,7 +781,7 @@ ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_callback_error(int severity, in
#define ZEND_PARSE_PARAMETERS_END() \
ZEND_PARSE_PARAMETERS_END_EX(return)
-#define Z_PARAM_PROLOGUE(separate) \
+#define Z_PARAM_PROLOGUE(deref, separate) \
++_i; \
ZEND_ASSERT(_i <= _min_num_args || _optional==1); \
ZEND_ASSERT(_i > _min_num_args || _optional==0); \
@@ -777,7 +790,9 @@ ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_callback_error(int severity, in
} \
_real_arg++; \
_arg = _real_arg; \
- ZVAL_DEREF(_arg); \
+ if (deref) { \
+ ZVAL_DEREF(_arg); \
+ } \
if (separate) { \
SEPARATE_ZVAL_NOREF(_arg); \
}
@@ -787,67 +802,82 @@ ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_callback_error(int severity, in
_optional = 1;
/* old "a" */
-#define Z_PARAM_ARRAY_EX(dest, check_null, separate) \
- Z_PARAM_PROLOGUE(separate); \
+#define Z_PARAM_ARRAY_EX2(dest, check_null, deref, separate) \
+ Z_PARAM_PROLOGUE(deref, separate); \
if (UNEXPECTED(!zend_parse_arg_array(_arg, &dest, check_null, 0))) { \
_expected_type = Z_EXPECTED_ARRAY; \
error_code = ZPP_ERROR_WRONG_ARG; \
break; \
}
+#define Z_PARAM_ARRAY_EX(dest, check_null, separate) \
+ Z_PARAM_ARRAY_EX2(dest, check_null, separate, separate)
+
#define Z_PARAM_ARRAY(dest) \
Z_PARAM_ARRAY_EX(dest, 0, 0)
/* old "A" */
-#define Z_PARAM_ARRAY_OR_OBJECT_EX(dest, check_null, separate) \
- Z_PARAM_PROLOGUE(separate); \
+#define Z_PARAM_ARRAY_OR_OBJECT_EX2(dest, check_null, deref, separate) \
+ Z_PARAM_PROLOGUE(deref, separate); \
if (UNEXPECTED(!zend_parse_arg_array(_arg, &dest, check_null, 1))) { \
_expected_type = Z_EXPECTED_ARRAY; \
error_code = ZPP_ERROR_WRONG_ARG; \
break; \
}
+#define Z_PARAM_ARRAY_OR_OBJECT_EX(dest, check_null, separate) \
+ Z_PARAM_ARRAY_OR_OBJECT_EX2(dest, check_null, separate, separate)
+
#define Z_PARAM_ARRAY_OR_OBJECT(dest, check_null, separate) \
Z_PARAM_ARRAY_OR_OBJECT_EX(dest, 0, 0)
/* old "b" */
-#define Z_PARAM_BOOL_EX(dest, is_null, check_null, separate) \
- Z_PARAM_PROLOGUE(separate); \
+#define Z_PARAM_BOOL_EX2(dest, is_null, check_null, deref, separate) \
+ Z_PARAM_PROLOGUE(deref, separate); \
if (UNEXPECTED(!zend_parse_arg_bool(_arg, &dest, &is_null, check_null))) { \
_expected_type = Z_EXPECTED_BOOL; \
error_code = ZPP_ERROR_WRONG_ARG; \
break; \
}
+#define Z_PARAM_BOOL_EX(dest, is_null, check_null, separate) \
+ Z_PARAM_BOOL_EX2(dest, is_null, check_null, separate, separate)
+
#define Z_PARAM_BOOL(dest) \
Z_PARAM_BOOL_EX(dest, _dummy, 0, 0)
/* old "C" */
-#define Z_PARAM_CLASS_EX(dest, check_null, separate) \
- Z_PARAM_PROLOGUE(separate); \
+#define Z_PARAM_CLASS_EX2(dest, check_null, deref, separate) \
+ Z_PARAM_PROLOGUE(deref, separate); \
if (UNEXPECTED(!zend_parse_arg_class(_arg, &dest, _i, check_null))) { \
error_code = ZPP_ERROR_FAILURE; \
break; \
}
+#define Z_PARAM_CLASS_EX(dest, check_null, separate) \
+ Z_PARAM_CLASS_EX2(dest, check_null, separate, separate)
+
#define Z_PARAM_CLASS(dest) \
Z_PARAM_CLASS_EX(dest, 0, 0)
/* old "d" */
-#define Z_PARAM_DOUBLE_EX(dest, is_null, check_null, separate) \
- Z_PARAM_PROLOGUE(separate); \
+#define Z_PARAM_DOUBLE_EX2(dest, is_null, check_null, deref, separate) \
+ Z_PARAM_PROLOGUE(deref, separate); \
if (UNEXPECTED(!zend_parse_arg_double(_arg, &dest, &is_null, check_null))) { \
_expected_type = Z_EXPECTED_DOUBLE; \
error_code = ZPP_ERROR_WRONG_ARG; \
break; \
}
+#define Z_PARAM_DOUBLE_EX(dest, is_null, check_null, separate) \
+ Z_PARAM_DOUBLE_EX2(dest, is_null, check_null, separate, separate)
+
#define Z_PARAM_DOUBLE(dest) \
Z_PARAM_DOUBLE_EX(dest, _dummy, 0, 0)
/* old "f" */
-#define Z_PARAM_FUNC_EX(dest_fci, dest_fcc, check_null, separate) \
- Z_PARAM_PROLOGUE(separate); \
+#define Z_PARAM_FUNC_EX2(dest_fci, dest_fcc, check_null, deref, separate) \
+ Z_PARAM_PROLOGUE(deref, separate); \
if (UNEXPECTED(!zend_parse_arg_func(_arg, &dest_fci, &dest_fcc, check_null, &_error))) { \
if (!_error) { \
_expected_type = Z_EXPECTED_FUNC; \
@@ -858,75 +888,93 @@ ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_callback_error(int severity, in
break; \
} \
} else if (UNEXPECTED(_error != NULL)) { \
- zend_wrong_callback_error(E_DEPRECATED, _i, _error); \
+ zend_wrong_callback_error(_flags & ZEND_PARSE_PARAMS_THROW, E_DEPRECATED, _i, _error); \
}
+#define Z_PARAM_FUNC_EX(dest_fci, dest_fcc, check_null, separate) \
+ Z_PARAM_FUNC_EX2(dest_fci, dest_fcc, check_null, separate, separate)
+
#define Z_PARAM_FUNC(dest_fci, dest_fcc) \
Z_PARAM_FUNC_EX(dest_fci, dest_fcc, 0, 0)
/* old "h" */
-#define Z_PARAM_ARRAY_HT_EX(dest, check_null, separate) \
- Z_PARAM_PROLOGUE(separate); \
+#define Z_PARAM_ARRAY_HT_EX2(dest, check_null, deref, separate) \
+ Z_PARAM_PROLOGUE(deref, separate); \
if (UNEXPECTED(!zend_parse_arg_array_ht(_arg, &dest, check_null, 0, separate))) { \
_expected_type = Z_EXPECTED_ARRAY; \
error_code = ZPP_ERROR_WRONG_ARG; \
break; \
}
+#define Z_PARAM_ARRAY_HT_EX(dest, check_null, separate) \
+ Z_PARAM_ARRAY_HT_EX2(dest, check_null, separate, separate)
+
#define Z_PARAM_ARRAY_HT(dest) \
Z_PARAM_ARRAY_HT_EX(dest, 0, 0)
/* old "H" */
-#define Z_PARAM_ARRAY_OR_OBJECT_HT_EX(dest, check_null, separate) \
- Z_PARAM_PROLOGUE(separate); \
+#define Z_PARAM_ARRAY_OR_OBJECT_HT_EX2(dest, check_null, deref, separate) \
+ Z_PARAM_PROLOGUE(deref, separate); \
if (UNEXPECTED(!zend_parse_arg_array_ht(_arg, &dest, check_null, 1, separate))) { \
_expected_type = Z_EXPECTED_ARRAY; \
error_code = ZPP_ERROR_WRONG_ARG; \
break; \
}
+#define Z_PARAM_ARRAY_OR_OBJECT_HT_EX(dest, check_null, separate) \
+ Z_PARAM_ARRAY_OR_OBJECT_HT_EX2(dest, check_null, separate, separate)
+
#define Z_PARAM_ARRAY_OR_OBJECT_HT(dest) \
Z_PARAM_ARRAY_OR_OBJECT_HT_EX(dest, 0, 0)
/* old "l" */
-#define Z_PARAM_LONG_EX(dest, is_null, check_null, separate) \
- Z_PARAM_PROLOGUE(separate); \
+#define Z_PARAM_LONG_EX2(dest, is_null, check_null, deref, separate) \
+ Z_PARAM_PROLOGUE(deref, separate); \
if (UNEXPECTED(!zend_parse_arg_long(_arg, &dest, &is_null, check_null, 0))) { \
_expected_type = Z_EXPECTED_LONG; \
error_code = ZPP_ERROR_WRONG_ARG; \
break; \
}
+#define Z_PARAM_LONG_EX(dest, is_null, check_null, separate) \
+ Z_PARAM_LONG_EX2(dest, is_null, check_null, separate, separate)
+
#define Z_PARAM_LONG(dest) \
Z_PARAM_LONG_EX(dest, _dummy, 0, 0)
/* old "L" */
-#define Z_PARAM_STRICT_LONG_EX(dest, is_null, check_null, separate) \
- Z_PARAM_PROLOGUE(separate); \
+#define Z_PARAM_STRICT_LONG_EX2(dest, is_null, check_null, deref, separate) \
+ Z_PARAM_PROLOGUE(deref, separate); \
if (UNEXPECTED(!zend_parse_arg_long(_arg, &dest, &is_null, check_null, 1))) { \
_expected_type = Z_EXPECTED_LONG; \
error_code = ZPP_ERROR_WRONG_ARG; \
break; \
}
+#define Z_PARAM_STRICT_LONG_EX(dest, is_null, check_null, separate) \
+ Z_PARAM_STRICT_LONG_EX2(dest, is_null, check_null, separate, separate)
+
#define Z_PARAM_STRICT_LONG(dest) \
Z_PARAM_STRICT_LONG_EX(dest, _dummy, 0, 0)
/* old "o" */
-#define Z_PARAM_OBJECT_EX(dest, check_null, separate) \
- Z_PARAM_PROLOGUE(separate); \
+#define Z_PARAM_OBJECT_EX2(dest, check_null, deref, separate) \
+ Z_PARAM_PROLOGUE(deref, separate); \
if (UNEXPECTED(!zend_parse_arg_object(_arg, &dest, NULL, check_null))) { \
_expected_type = Z_EXPECTED_OBJECT; \
error_code = ZPP_ERROR_WRONG_ARG; \
break; \
}
+#define Z_PARAM_OBJECT_EX(dest, check_null, separate) \
+ Z_PARAM_OBJECT_EX2(dest, check_null, separate, separate)
+
#define Z_PARAM_OBJECT(dest) \
Z_PARAM_OBJECT_EX(dest, 0, 0)
/* old "O" */
-#define Z_PARAM_OBJECT_OF_CLASS_EX(dest, _ce, check_null, separate) \
- Z_PARAM_PROLOGUE(separate); \
+#define Z_PARAM_OBJECT_OF_CLASS_EX2(dest, _ce, check_null, deref, separate) \
+ Z_PARAM_PROLOGUE(deref, separate); \
if (UNEXPECTED(!zend_parse_arg_object(_arg, &dest, _ce, check_null))) { \
if (_ce) { \
_error = ZSTR_VAL((_ce)->name); \
@@ -939,89 +987,101 @@ ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_callback_error(int severity, in
} \
}
+#define Z_PARAM_OBJECT_OF_CLASS_EX(dest, _ce, check_null, separate) \
+ Z_PARAM_OBJECT_OF_CLASS_EX2(dest, _ce, check_null, separate, separate)
+
#define Z_PARAM_OBJECT_OF_CLASS(dest, _ce) \
Z_PARAM_OBJECT_OF_CLASS_EX(dest, _ce, 0, 0)
/* old "p" */
-#define Z_PARAM_PATH_EX(dest, dest_len, check_null, separate) \
- Z_PARAM_PROLOGUE(separate); \
+#define Z_PARAM_PATH_EX2(dest, dest_len, check_null, deref, separate) \
+ Z_PARAM_PROLOGUE(deref, separate); \
if (UNEXPECTED(!zend_parse_arg_path(_arg, &dest, &dest_len, check_null))) { \
_expected_type = Z_EXPECTED_PATH; \
error_code = ZPP_ERROR_WRONG_ARG; \
break; \
}
+#define Z_PARAM_PATH_EX(dest, dest_len, check_null, separate) \
+ Z_PARAM_PATH_EX2(dest, dest_len, check_null, separate, separate)
+
#define Z_PARAM_PATH(dest, dest_len) \
Z_PARAM_PATH_EX(dest, dest_len, 0, 0)
/* old "P" */
-#define Z_PARAM_PATH_STR_EX(dest, check_null, separate) \
- Z_PARAM_PROLOGUE(separate); \
+#define Z_PARAM_PATH_STR_EX2(dest, check_null, deref, separate) \
+ Z_PARAM_PROLOGUE(deref, separate); \
if (UNEXPECTED(!zend_parse_arg_path_str(_arg, &dest, check_null))) { \
_expected_type = Z_EXPECTED_PATH; \
error_code = ZPP_ERROR_WRONG_ARG; \
break; \
}
+#define Z_PARAM_PATH_STR_EX(dest, check_null, separate) \
+ Z_PARAM_PATH_STR_EX2(dest, check_null, separate, separate)
+
#define Z_PARAM_PATH_STR(dest) \
Z_PARAM_PATH_STR_EX(dest, 0, 0)
/* old "r" */
-#define Z_PARAM_RESOURCE_EX(dest, check_null, separate) \
- Z_PARAM_PROLOGUE(separate); \
+#define Z_PARAM_RESOURCE_EX2(dest, check_null, deref, separate) \
+ Z_PARAM_PROLOGUE(deref, separate); \
if (UNEXPECTED(!zend_parse_arg_resource(_arg, &dest, check_null))) { \
_expected_type = Z_EXPECTED_RESOURCE; \
error_code = ZPP_ERROR_WRONG_ARG; \
break; \
}
+#define Z_PARAM_RESOURCE_EX(dest, check_null, separate) \
+ Z_PARAM_RESOURCE_EX2(dest, check_null, separate, separate)
+
#define Z_PARAM_RESOURCE(dest) \
Z_PARAM_RESOURCE_EX(dest, 0, 0)
/* old "s" */
-#define Z_PARAM_STRING_EX(dest, dest_len, check_null, separate) \
- Z_PARAM_PROLOGUE(separate); \
+#define Z_PARAM_STRING_EX2(dest, dest_len, check_null, deref, separate) \
+ Z_PARAM_PROLOGUE(deref, separate); \
if (UNEXPECTED(!zend_parse_arg_string(_arg, &dest, &dest_len, check_null))) { \
_expected_type = Z_EXPECTED_STRING; \
error_code = ZPP_ERROR_WRONG_ARG; \
break; \
}
+#define Z_PARAM_STRING_EX(dest, dest_len, check_null, separate) \
+ Z_PARAM_STRING_EX2(dest, dest_len, check_null, separate, separate)
+
#define Z_PARAM_STRING(dest, dest_len) \
Z_PARAM_STRING_EX(dest, dest_len, 0, 0)
/* old "S" */
-#define Z_PARAM_STR_EX(dest, check_null, separate) \
- Z_PARAM_PROLOGUE(separate); \
+#define Z_PARAM_STR_EX2(dest, check_null, deref, separate) \
+ Z_PARAM_PROLOGUE(deref, separate); \
if (UNEXPECTED(!zend_parse_arg_str(_arg, &dest, check_null))) { \
_expected_type = Z_EXPECTED_STRING; \
error_code = ZPP_ERROR_WRONG_ARG; \
break; \
}
+#define Z_PARAM_STR_EX(dest, check_null, separate) \
+ Z_PARAM_STR_EX2(dest, check_null, separate, separate)
+
#define Z_PARAM_STR(dest) \
Z_PARAM_STR_EX(dest, 0, 0)
/* old "z" */
+#define Z_PARAM_ZVAL_EX2(dest, check_null, deref, separate) \
+ Z_PARAM_PROLOGUE(deref, separate); \
+ zend_parse_arg_zval_deref(_arg, &dest, check_null);
+
#define Z_PARAM_ZVAL_EX(dest, check_null, separate) \
- if (separate) { \
- Z_PARAM_PROLOGUE(separate); \
- zend_parse_arg_zval_deref(_arg, &dest, check_null); \
- } else { \
- ++_i; \
- ZEND_ASSERT(_i <= _min_num_args || _optional==1); \
- ZEND_ASSERT(_i > _min_num_args || _optional==0); \
- if (_optional && UNEXPECTED(_i >_num_args)) break; \
- _real_arg++; \
- zend_parse_arg_zval(_real_arg, &dest, check_null); \
- }
+ Z_PARAM_ZVAL_EX2(dest, check_null, separate, separate)
#define Z_PARAM_ZVAL(dest) \
Z_PARAM_ZVAL_EX(dest, 0, 0)
/* old "z" (with dereference) */
#define Z_PARAM_ZVAL_DEREF_EX(dest, check_null, separate) \
- Z_PARAM_PROLOGUE(separate); \
+ Z_PARAM_PROLOGUE(1, separate); \
zend_parse_arg_zval_deref(_arg, &dest, check_null);
#define Z_PARAM_ZVAL_DEREF(dest) \
@@ -1263,4 +1323,6 @@ END_EXTERN_C()
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_alloc.c b/Zend/zend_alloc.c
index d87b066fcc..5b79d3cf0b 100644
--- a/Zend/zend_alloc.c
+++ b/Zend/zend_alloc.c
@@ -370,7 +370,7 @@ static ZEND_COLD ZEND_NORETURN void zend_mm_safe_error(zend_mm_heap *heap,
size_t limit,
#if ZEND_DEBUG
const char *filename,
- uint lineno,
+ uint32_t lineno,
#endif
size_t size)
{
@@ -1234,7 +1234,7 @@ static zend_never_inline void *zend_mm_alloc_small_slow(zend_mm_heap *heap, uint
end = (zend_mm_free_slot*)((char*)bin + (bin_data_size[bin_num] * (bin_elements[bin_num] - 1)));
heap->free_slot[bin_num] = p = (zend_mm_free_slot*)((char*)bin + bin_data_size[bin_num]);
do {
- p->next_free_slot = (zend_mm_free_slot*)((char*)p + bin_data_size[bin_num]);;
+ p->next_free_slot = (zend_mm_free_slot*)((char*)p + bin_data_size[bin_num]);
#if ZEND_DEBUG
do {
zend_mm_debug_info *dbg = (zend_mm_debug_info*)((char*)p + bin_data_size[bin_num] - ZEND_MM_ALIGNED_SIZE(sizeof(zend_mm_debug_info)));
@@ -1894,7 +1894,7 @@ ZEND_API size_t zend_mm_gc(zend_mm_heap *heap)
if (free_counter == bin_elements[i]) {
has_free_pages = 1;
}
- chunk->map[page_num] = ZEND_MM_SRUN_EX(i, free_counter);;
+ chunk->map[page_num] = ZEND_MM_SRUN_EX(i, free_counter);
p = p->next_free_slot;
}
@@ -1921,7 +1921,7 @@ ZEND_API size_t zend_mm_gc(zend_mm_heap *heap)
ZEND_ASSERT(ZEND_MM_SRUN_BIN_NUM(info) == i);
if (ZEND_MM_SRUN_FREE_COUNTER(info) == bin_elements[i]) {
/* remove from cache */
- p = p->next_free_slot;;
+ p = p->next_free_slot;
*q = p;
} else {
q = &p->next_free_slot;
@@ -2509,9 +2509,6 @@ ZEND_API void* ZEND_FASTCALL _ecalloc(size_t nmemb, size_t size ZEND_FILE_LINE_D
void *p;
p = _safe_emalloc(nmemb, size, 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
- if (UNEXPECTED(p == NULL)) {
- return p;
- }
memset(p, 0, size * nmemb);
return p;
}
@@ -2526,9 +2523,6 @@ ZEND_API char* ZEND_FASTCALL _estrdup(const char *s ZEND_FILE_LINE_DC ZEND_FILE_
zend_error_noreturn(E_ERROR, "Possible integer overflow in memory allocation (1 * %zu + 1)", length);
}
p = (char *) _emalloc(length + 1 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
- if (UNEXPECTED(p == NULL)) {
- return p;
- }
memcpy(p, s, length+1);
return p;
}
@@ -2541,9 +2535,6 @@ ZEND_API char* ZEND_FASTCALL _estrndup(const char *s, size_t length ZEND_FILE_LI
zend_error_noreturn(E_ERROR, "Possible integer overflow in memory allocation (1 * %zu + 1)", length);
}
p = (char *) _emalloc(length + 1 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
- if (UNEXPECTED(p == NULL)) {
- return p;
- }
memcpy(p, s, length);
p[length] = 0;
return p;
@@ -2864,4 +2855,6 @@ ZEND_API void * __zend_realloc(void *p, size_t len)
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_alloc.h b/Zend/zend_alloc.h
index f2d8d67f5d..ea6cbf7871 100644
--- a/Zend/zend_alloc.h
+++ b/Zend/zend_alloc.h
@@ -50,8 +50,8 @@ typedef struct _zend_leak_info {
size_t size;
const char *filename;
const char *orig_filename;
- uint lineno;
- uint orig_lineno;
+ uint32_t lineno;
+ uint32_t orig_lineno;
} zend_leak_info;
#if ZEND_DEBUG
@@ -59,8 +59,8 @@ typedef struct _zend_mm_debug_info {
size_t size;
const char *filename;
const char *orig_filename;
- uint lineno;
- uint orig_lineno;
+ uint32_t lineno;
+ uint32_t orig_lineno;
} zend_mm_debug_info;
# define ZEND_MM_OVERHEAD ZEND_MM_ALIGNED_SIZE(sizeof(zend_mm_debug_info))
@@ -402,4 +402,6 @@ END_EXTERN_C()
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_alloc_sizes.h b/Zend/zend_alloc_sizes.h
index d771fadf13..afcfcab508 100644
--- a/Zend/zend_alloc_sizes.h
+++ b/Zend/zend_alloc_sizes.h
@@ -62,3 +62,13 @@
_(29, 3072, 4, 3, x, y)
#endif /* ZEND_ALLOC_SIZES_H */
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
+ */
diff --git a/Zend/zend_arena.h b/Zend/zend_arena.h
index 79d6b329d5..84bdc4912a 100644
--- a/Zend/zend_arena.h
+++ b/Zend/zend_arena.h
@@ -120,4 +120,6 @@ static zend_always_inline void zend_arena_release(zend_arena **arena_ptr, void *
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c
index fd3cce8735..c0fdf48cba 100644
--- a/Zend/zend_ast.c
+++ b/Zend/zend_ast.c
@@ -277,7 +277,7 @@ ZEND_API int zend_ast_evaluate(zval *result, zend_ast *ast, zend_class_entry *sc
zval *zv = zend_ast_get_zval(ast);
if (Z_OPT_CONSTANT_P(zv)) {
- if (!(Z_TYPE_FLAGS_P(zv) & IS_TYPE_IMMUTABLE)) {
+ if (Z_TYPE_FLAGS_P(zv) & IS_TYPE_REFCOUNTED) {
if (UNEXPECTED(zval_update_constant_ex(zv, scope) != SUCCESS)) {
ret = FAILURE;
break;
@@ -432,11 +432,7 @@ ZEND_API int zend_ast_evaluate(zval *result, zend_ast *ast, zend_class_entry *sc
} else {
zval tmp;
- if (ast->attr == ZEND_DIM_IS) {
- zend_fetch_dimension_by_zval_is(&tmp, &op1, &op2, IS_CONST);
- } else {
- zend_fetch_dimension_by_zval(&tmp, &op1, &op2);
- }
+ zend_fetch_dimension_const(&tmp, &op1, &op2, (ast->attr == ZEND_DIM_IS) ? BP_VAR_IS : BP_VAR_R);
if (UNEXPECTED(Z_ISREF(tmp))) {
ZVAL_DUP(result, Z_REFVAL(tmp));
@@ -1725,3 +1721,13 @@ ZEND_API zend_string *zend_ast_export(const char *prefix, zend_ast *ast, const c
smart_str_0(&str);
return str.s;
}
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
+ */
diff --git a/Zend/zend_ast.h b/Zend/zend_ast.h
index 2231b0a32c..08a8ab57f4 100644
--- a/Zend/zend_ast.h
+++ b/Zend/zend_ast.h
@@ -275,3 +275,13 @@ static zend_always_inline zend_ast *zend_ast_list_rtrim(zend_ast *ast) {
return ast;
}
#endif
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
+ */
diff --git a/Zend/zend_bitset.h b/Zend/zend_bitset.h
index 7b3c47d32f..65959381d9 100644
--- a/Zend/zend_bitset.h
+++ b/Zend/zend_bitset.h
@@ -245,6 +245,14 @@ static inline int zend_bitset_last(zend_bitset set, uint32_t len)
} \
} while (0)
+static inline int zend_bitset_pop_first(zend_bitset set, uint32_t len) {
+ int i = zend_bitset_first(set, len);
+ if (i >= 0) {
+ zend_bitset_excl(set, i);
+ }
+ return i;
+}
+
#endif /* _ZEND_BITSET_H_ */
/*
@@ -253,4 +261,6 @@ static inline int zend_bitset_last(zend_bitset set, uint32_t len)
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_build.h b/Zend/zend_build.h
index 6e0afae4ed..20f5ea861b 100644
--- a/Zend/zend_build.h
+++ b/Zend/zend_build.h
@@ -44,3 +44,13 @@
#define ZEND_BUILD_EXTRA
#endif
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
+ */
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c
index 184b352ec8..81c78f2a97 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -29,15 +29,6 @@
#include "zend_closures.h"
#include "zend_generators.h"
-#undef ZEND_TEST_EXCEPTIONS
-
-#if ZEND_DEBUG
-static zend_class_entry *zend_test_interface;
-static zend_class_entry *zend_test_class;
-static zend_class_entry *zend_test_trait;
-static zend_object_handlers zend_test_class_handlers;
-#endif
-
static ZEND_FUNCTION(zend_version);
static ZEND_FUNCTION(func_num_args);
static ZEND_FUNCTION(func_get_arg);
@@ -61,13 +52,6 @@ static ZEND_FUNCTION(interface_exists);
static ZEND_FUNCTION(trait_exists);
static ZEND_FUNCTION(function_exists);
static ZEND_FUNCTION(class_alias);
-#if ZEND_DEBUG
-static ZEND_FUNCTION(leak);
-static ZEND_FUNCTION(leak_variable);
-#ifdef ZEND_TEST_EXCEPTIONS
-static ZEND_FUNCTION(crash);
-#endif
-#endif
static ZEND_FUNCTION(get_included_files);
static ZEND_FUNCTION(is_subclass_of);
static ZEND_FUNCTION(is_a);
@@ -93,13 +77,9 @@ static ZEND_FUNCTION(get_extension_funcs);
static ZEND_FUNCTION(get_defined_constants);
static ZEND_FUNCTION(debug_backtrace);
static ZEND_FUNCTION(debug_print_backtrace);
-#if ZEND_DEBUG
-static ZEND_FUNCTION(zend_test_func);
-static ZEND_FUNCTION(zend_test_func2);
-#ifdef ZTS
+#if ZEND_DEBUG && defined(ZTS)
static ZEND_FUNCTION(zend_thread_id);
#endif
-#endif
static ZEND_FUNCTION(gc_mem_caches);
static ZEND_FUNCTION(gc_collect_cycles);
static ZEND_FUNCTION(gc_enabled);
@@ -199,13 +179,6 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_alias, 0, 0, 2)
ZEND_ARG_INFO(0, autoload)
ZEND_END_ARG_INFO()
-#if ZEND_DEBUG
-ZEND_BEGIN_ARG_INFO_EX(arginfo_leak_variable, 0, 0, 1)
- ZEND_ARG_INFO(0, variable)
- ZEND_ARG_INFO(0, leak_data)
-ZEND_END_ARG_INFO()
-#endif
-
ZEND_BEGIN_ARG_INFO_EX(arginfo_trigger_error, 0, 0, 1)
ZEND_ARG_INFO(0, message)
ZEND_ARG_INFO(0, error_type)
@@ -259,70 +232,8 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_extension_loaded, 0, 0, 1)
ZEND_ARG_INFO(0, extension_name)
ZEND_END_ARG_INFO()
-#if ZEND_DEBUG
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_zend_test_func, IS_ARRAY, NULL, 0)
-ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_zend_test_func2, IS_ARRAY, NULL, 1)
-ZEND_END_ARG_INFO()
-#endif
-
/* }}} */
-#if ZEND_DEBUG
-static zend_object *zend_test_class_new(zend_class_entry *class_type) /* {{{ */ {
- zend_object *obj = zend_objects_new(class_type);
- obj->handlers = &zend_test_class_handlers;
- return obj;
-}
-/* }}} */
-
-static zend_function *zend_test_class_method_get(zend_object **object, zend_string *name, const zval *key) /* {{{ */ {
- zend_internal_function *fptr = emalloc(sizeof(zend_internal_function));
- fptr->type = ZEND_OVERLOADED_FUNCTION_TEMPORARY;
- fptr->num_args = 1;
- fptr->arg_info = NULL;
- fptr->scope = (*object)->ce;
- fptr->fn_flags = ZEND_ACC_CALL_VIA_HANDLER;
- fptr->function_name = zend_string_copy(name);
- fptr->handler = ZEND_FN(zend_test_func);
- zend_set_function_arg_flags((zend_function*)fptr);
-
- return (zend_function*)fptr;
-}
-/* }}} */
-
-static zend_function *zend_test_class_static_method_get(zend_class_entry *ce, zend_string *name) /* {{{ */ {
- zend_internal_function *fptr = emalloc(sizeof(zend_internal_function));
- fptr->type = ZEND_OVERLOADED_FUNCTION;
- fptr->num_args = 1;
- fptr->arg_info = NULL;
- fptr->scope = ce;
- fptr->fn_flags = ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_STATIC;
- fptr->function_name = name;
- fptr->handler = ZEND_FN(zend_test_func);
- zend_set_function_arg_flags((zend_function*)fptr);
-
- return (zend_function*)fptr;
-}
-/* }}} */
-
-static int zend_test_class_call_method(zend_string *method, zend_object *object, INTERNAL_FUNCTION_PARAMETERS) /* {{{ */ {
- RETVAL_STR(zend_string_copy(method));
- return 0;
-}
-/* }}} */
-
-static ZEND_METHOD(_ZendTestTrait, testMethod) /* {{{ */ {
- RETURN_TRUE;
-}
-/* }}} */
-
-static zend_function_entry zend_test_trait_methods[] = {
- ZEND_ME(_ZendTestTrait, testMethod, arginfo_zend__void, ZEND_ACC_PUBLIC)
- ZEND_FE_END
-};
-#endif
-
static const zend_function_entry builtin_functions[] = { /* {{{ */
ZEND_FE(zend_version, arginfo_zend__void)
ZEND_FE(func_num_args, arginfo_zend__void)
@@ -347,13 +258,6 @@ static const zend_function_entry builtin_functions[] = { /* {{{ */
ZEND_FE(trait_exists, arginfo_trait_exists)
ZEND_FE(function_exists, arginfo_function_exists)
ZEND_FE(class_alias, arginfo_class_alias)
-#if ZEND_DEBUG
- ZEND_FE(leak, NULL)
- ZEND_FE(leak_variable, arginfo_leak_variable)
-#ifdef ZEND_TEST_EXCEPTIONS
- ZEND_FE(crash, NULL)
-#endif
-#endif
ZEND_FE(get_included_files, arginfo_zend__void)
ZEND_FALIAS(get_required_files, get_included_files, arginfo_zend__void)
ZEND_FE(is_subclass_of, arginfo_is_subclass_of)
@@ -372,7 +276,7 @@ static const zend_function_entry builtin_functions[] = { /* {{{ */
ZEND_FE(get_declared_interfaces, arginfo_zend__void)
ZEND_FE(get_defined_functions, arginfo_get_defined_functions)
ZEND_FE(get_defined_vars, arginfo_zend__void)
- ZEND_FE(create_function, arginfo_create_function)
+ ZEND_DEP_FE(create_function, arginfo_create_function)
ZEND_FE(get_resource_type, arginfo_get_resource_type)
ZEND_FE(get_resources, arginfo_get_resources)
ZEND_FE(get_loaded_extensions, arginfo_get_loaded_extensions)
@@ -381,13 +285,9 @@ static const zend_function_entry builtin_functions[] = { /* {{{ */
ZEND_FE(get_defined_constants, arginfo_get_defined_constants)
ZEND_FE(debug_backtrace, arginfo_debug_backtrace)
ZEND_FE(debug_print_backtrace, arginfo_debug_print_backtrace)
-#if ZEND_DEBUG
- ZEND_FE(zend_test_func, arginfo_zend_test_func)
- ZEND_FE(zend_test_func2, arginfo_zend_test_func2)
-#ifdef ZTS
+#if ZEND_DEBUG && defined(ZTS)
ZEND_FE(zend_thread_id, NULL)
#endif
-#endif
ZEND_FE(gc_mem_caches, arginfo_zend__void)
ZEND_FE(gc_collect_cycles, arginfo_zend__void)
ZEND_FE(gc_enabled, arginfo_zend__void)
@@ -405,26 +305,6 @@ ZEND_MINIT_FUNCTION(core) { /* {{{ */
zend_register_default_classes();
-#if ZEND_DEBUG
- INIT_CLASS_ENTRY(class_entry, "_ZendTestInterface", NULL);
- zend_test_interface = zend_register_internal_interface(&class_entry);
- zend_declare_class_constant_long(zend_test_interface, ZEND_STRL("DUMMY"), 0);
- INIT_CLASS_ENTRY(class_entry, "_ZendTestClass", NULL);
- zend_test_class = zend_register_internal_class_ex(&class_entry, NULL);
- zend_class_implements(zend_test_class, 1, zend_test_interface);
- zend_test_class->create_object = zend_test_class_new;
- zend_test_class->get_static_method = zend_test_class_static_method_get;
-
- memcpy(&zend_test_class_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
- zend_test_class_handlers.get_method = zend_test_class_method_get;
- zend_test_class_handlers.call_method = zend_test_class_call_method;
-
- INIT_CLASS_ENTRY(class_entry, "_ZendTestTrait", zend_test_trait_methods);
- zend_test_trait = zend_register_internal_class(&class_entry);
- zend_test_trait->ce_flags |= ZEND_ACC_TRAIT;
- zend_declare_property_null(zend_test_trait, "testProp", sizeof("testProp")-1, ZEND_ACC_PUBLIC);
-#endif
-
return SUCCESS;
}
/* }}} */
@@ -657,9 +537,10 @@ ZEND_FUNCTION(strcmp)
{
zend_string *s1, *s2;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "SS", &s1, &s2) == FAILURE) {
- return;
- }
+ ZEND_PARSE_PARAMETERS_START(2, 2)
+ Z_PARAM_STR(s1)
+ Z_PARAM_STR(s2)
+ ZEND_PARSE_PARAMETERS_END();
RETURN_LONG(zend_binary_strcmp(ZSTR_VAL(s1), ZSTR_LEN(s1), ZSTR_VAL(s2), ZSTR_LEN(s2)));
}
@@ -672,9 +553,11 @@ ZEND_FUNCTION(strncmp)
zend_string *s1, *s2;
zend_long len;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "SSl", &s1, &s2, &len) == FAILURE) {
- return;
- }
+ ZEND_PARSE_PARAMETERS_START(3, 3)
+ Z_PARAM_STR(s1)
+ Z_PARAM_STR(s2)
+ Z_PARAM_LONG(len)
+ ZEND_PARSE_PARAMETERS_END();
if (len < 0) {
zend_error(E_WARNING, "Length must be greater than or equal to 0");
@@ -691,9 +574,10 @@ ZEND_FUNCTION(strcasecmp)
{
zend_string *s1, *s2;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "SS", &s1, &s2) == FAILURE) {
- return;
- }
+ ZEND_PARSE_PARAMETERS_START(2, 2)
+ Z_PARAM_STR(s1)
+ Z_PARAM_STR(s2)
+ ZEND_PARSE_PARAMETERS_END();
RETURN_LONG(zend_binary_strcasecmp(ZSTR_VAL(s1), ZSTR_LEN(s1), ZSTR_VAL(s2), ZSTR_LEN(s2)));
}
@@ -706,9 +590,11 @@ ZEND_FUNCTION(strncasecmp)
zend_string *s1, *s2;
zend_long len;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "SSl", &s1, &s2, &len) == FAILURE) {
- return;
- }
+ ZEND_PARSE_PARAMETERS_START(3, 3)
+ Z_PARAM_STR(s1)
+ Z_PARAM_STR(s2)
+ Z_PARAM_LONG(len)
+ ZEND_PARSE_PARAMETERS_END();
if (len < 0) {
zend_error(E_WARNING, "Length must be greater than or equal to 0");
@@ -732,6 +618,11 @@ ZEND_FUNCTION(each)
return;
}
+ if (!EG(each_deprecation_thrown)) {
+ zend_error(E_DEPRECATED, "The each() function is deprecated. This message will be suppressed on further calls");
+ EG(each_deprecation_thrown) = 1;
+ }
+
target_hash = HASH_OF(array);
if (!target_hash) {
zend_error(E_WARNING,"Variable passed to each() is not an array or object");
@@ -763,7 +654,7 @@ ZEND_FUNCTION(each)
if (Z_REFCOUNTED_P(entry)) Z_ADDREF_P(entry);
}
zend_hash_index_add_new(Z_ARRVAL_P(return_value), 1, entry);
- zend_hash_add_new(Z_ARRVAL_P(return_value), CG(known_strings)[ZEND_STR_VALUE], entry);
+ zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_VALUE), entry);
/* add the key elements */
if (zend_hash_get_current_key(target_hash, &key, &num_key) == HASH_KEY_IS_STRING) {
@@ -773,7 +664,7 @@ ZEND_FUNCTION(each)
ZVAL_LONG(&tmp, num_key);
}
zend_hash_index_add_new(Z_ARRVAL_P(return_value), 0, &tmp);
- zend_hash_add_new(Z_ARRVAL_P(return_value), CG(known_strings)[ZEND_STR_KEY], &tmp);
+ zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_KEY), &tmp);
zend_hash_move_forward(target_hash);
}
/* }}} */
@@ -797,7 +688,7 @@ ZEND_FUNCTION(error_reporting)
zend_ini_entry *p = EG(error_reporting_ini_entry);
if (!p) {
- p = zend_hash_find_ptr(EG(ini_directives), CG(known_strings)[ZEND_STR_ERROR_REPORTING]);
+ p = zend_hash_find_ptr(EG(ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING));
if (p) {
EG(error_reporting_ini_entry) = p;
} else {
@@ -809,7 +700,7 @@ ZEND_FUNCTION(error_reporting)
ALLOC_HASHTABLE(EG(modified_ini_directives));
zend_hash_init(EG(modified_ini_directives), 8, NULL, NULL, 0);
}
- if (EXPECTED(zend_hash_add_ptr(EG(modified_ini_directives), CG(known_strings)[ZEND_STR_ERROR_REPORTING], p) != NULL)) {
+ if (EXPECTED(zend_hash_add_ptr(EG(modified_ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING), p) != NULL)) {
p->orig_value = p->value;
p->orig_modifiable = p->modifiable;
p->modified = 1;
@@ -841,7 +732,7 @@ static int validate_constant_array(HashTable *ht) /* {{{ */
ZVAL_DEREF(val);
if (Z_REFCOUNTED_P(val)) {
if (Z_TYPE_P(val) == IS_ARRAY) {
- if (!Z_IMMUTABLE_P(val)) {
+ if (Z_REFCOUNTED_P(val)) {
if (Z_ARRVAL_P(val)->u.v.nApplyCount > 0) {
zend_error(E_WARNING, "Constants cannot be recursive arrays");
ret = 0;
@@ -879,7 +770,7 @@ static void copy_constant_array(zval *dst, zval *src) /* {{{ */
new_val = zend_hash_index_add_new(Z_ARRVAL_P(dst), idx, val);
}
if (Z_TYPE_P(val) == IS_ARRAY) {
- if (!Z_IMMUTABLE_P(val)) {
+ if (Z_REFCOUNTED_P(val)) {
copy_constant_array(new_val, val);
}
} else if (Z_REFCOUNTED_P(val)) {
@@ -929,7 +820,7 @@ repeat:
case IS_RESOURCE:
break;
case IS_ARRAY:
- if (!Z_IMMUTABLE_P(val)) {
+ if (Z_REFCOUNTED_P(val)) {
if (!validate_constant_array(Z_ARRVAL_P(val))) {
RETURN_FALSE;
} else {
@@ -959,7 +850,7 @@ repeat:
RETURN_FALSE;
}
- ZVAL_DUP(&c.value, val);
+ ZVAL_COPY(&c.value, val);
zval_ptr_dtor(&val_free);
register_constant:
c.flags = case_sensitive; /* non persistent */
@@ -998,7 +889,7 @@ ZEND_FUNCTION(get_class)
{
zval *obj = NULL;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "|o!", &obj) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "|o", &obj) == FAILURE) {
RETURN_FALSE;
}
@@ -1228,8 +1119,7 @@ ZEND_FUNCTION(get_object_vars)
HashTable *properties;
zend_string *key;
zend_object *zobj;
- zend_ulong index;
- zend_bool fast_copy = 0;
+ zend_ulong num_key;
ZEND_PARSE_PARAMETERS_START(1, 1)
Z_PARAM_OBJECT(obj)
@@ -1248,45 +1138,49 @@ ZEND_FUNCTION(get_object_vars)
zobj = Z_OBJ_P(obj);
if (!zobj->ce->default_properties_count && properties == zobj->properties && !ZEND_HASH_GET_APPLY_COUNT(properties)) {
- fast_copy = 1;
- /* Check if the object has a numeric property, See Bug 73998 */
- ZEND_HASH_FOREACH_STR_KEY(properties, key) {
- if (key && ZEND_HANDLE_NUMERIC(key, index)) {
- fast_copy = 0;
- break;
- }
- } ZEND_HASH_FOREACH_END();
- }
-
- if (fast_copy) {
+ /* fast copy */
if (EXPECTED(zobj->handlers == &std_object_handlers)) {
- if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
- GC_REFCOUNT(properties)++;
- }
- RETURN_ARR(properties);
+ RETURN_ARR(zend_proptable_to_symtable(properties, 0));
}
- RETURN_ARR(zend_array_dup(properties));
+ RETURN_ARR(zend_proptable_to_symtable(properties, 1));
} else {
array_init_size(return_value, zend_hash_num_elements(properties));
- ZEND_HASH_FOREACH_STR_KEY_VAL_IND(properties, key, value) {
- if (key) {
- if (zend_check_property_access(zobj, key) == SUCCESS) {
- if (Z_ISREF_P(value) && Z_REFCOUNT_P(value) == 1) {
- value = Z_REFVAL_P(value);
- }
- if (Z_REFCOUNTED_P(value)) {
- Z_ADDREF_P(value);
- }
- if (ZSTR_VAL(key)[0] == 0) {
- const char *prop_name, *class_name;
- size_t prop_len;
- zend_unmangle_property_name_ex(key, &class_name, &prop_name, &prop_len);
- zend_hash_str_add_new(Z_ARRVAL_P(return_value), prop_name, prop_len, value);
- } else {
- zend_symtable_add_new(Z_ARRVAL_P(return_value), key, value);
- }
+ ZEND_HASH_FOREACH_KEY_VAL(properties, num_key, key, value) {
+ zend_bool unmangle = 0;
+ if (Z_TYPE_P(value) == IS_INDIRECT) {
+ value = Z_INDIRECT_P(value);
+ if (UNEXPECTED(Z_ISUNDEF_P(value))) {
+ continue;
}
+
+ ZEND_ASSERT(key);
+ if (zend_check_property_access(zobj, key) == FAILURE) {
+ continue;
+ }
+ unmangle = 1;
+ }
+
+ if (Z_ISREF_P(value) && Z_REFCOUNT_P(value) == 1) {
+ value = Z_REFVAL_P(value);
+ }
+ Z_TRY_ADDREF_P(value);
+
+ if (UNEXPECTED(!key)) {
+ /* This case is only possible due to loopholes, e.g. ArrayObject */
+ zend_hash_index_add(Z_ARRVAL_P(return_value), num_key, value);
+ } else if (unmangle && ZSTR_VAL(key)[0] == 0) {
+ const char *prop_name, *class_name;
+ size_t prop_len;
+ zend_unmangle_property_name_ex(key, &class_name, &prop_name, &prop_len);
+ /* We assume here that a mangled property name is never
+ * numeric. This is probably a safe assumption, but
+ * theoretically someone might write an extension with
+ * private, numeric properties. Well, too bad.
+ */
+ zend_hash_str_add_new(Z_ARRVAL_P(return_value), prop_name, prop_len, value);
+ } else {
+ zend_symtable_add_new(Z_ARRVAL_P(return_value), key, value);
}
} ZEND_HASH_FOREACH_END();
}
@@ -1650,63 +1544,6 @@ ZEND_FUNCTION(class_alias)
}
/* }}} */
-#if ZEND_DEBUG
-/* {{{ proto void leak([int num_bytes])
- Cause an intentional memory leak, for testing/debugging purposes */
-ZEND_FUNCTION(leak)
-{
- zend_long leakbytes = 3;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &leakbytes) == FAILURE) {
- return;
- }
-
- emalloc(leakbytes);
-}
-/* }}} */
-
-/* {{{ proto void leak_variable(mixed variable [, bool leak_data])
- Leak a variable that is a resource or an object */
-ZEND_FUNCTION(leak_variable)
-{
- zval *zv;
- zend_bool leak_data = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "z|b", &zv, &leak_data) == FAILURE) {
- return;
- }
-
- if (!leak_data) {
- Z_ADDREF_P(zv);
- } else if (Z_TYPE_P(zv) == IS_RESOURCE) {
- Z_ADDREF_P(zv);
- } else if (Z_TYPE_P(zv) == IS_OBJECT) {
- Z_ADDREF_P(zv);
- } else {
- zend_error(E_WARNING, "Leaking non-zval data is only applicable to resources and objects");
- }
-}
-/* }}} */
-
-
-#ifdef ZEND_TEST_EXCEPTIONS
-/* {{{ proto void crash(void)
- Crash the script */
-ZEND_FUNCTION(crash)
-{
- char *nowhere = NULL;
-
- if (zend_parse_parameters_none() == FAILURE) {
- return;
- }
-
- memcpy(nowhere, "something", sizeof("something"));
-}
-/* }}} */
-#endif
-
-#endif /* ZEND_DEBUG */
-
/* {{{ proto array get_included_files(void)
Returns an array with the file names that were include_once()'d */
ZEND_FUNCTION(get_included_files)
@@ -1760,7 +1597,6 @@ ZEND_FUNCTION(trigger_error)
ZEND_FUNCTION(set_error_handler)
{
zval *error_handler;
- zend_string *error_handler_name = NULL;
zend_long error_type = E_ALL;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z|l", &error_handler, &error_type) == FAILURE) {
@@ -1768,13 +1604,13 @@ ZEND_FUNCTION(set_error_handler)
}
if (Z_TYPE_P(error_handler) != IS_NULL) { /* NULL == unset */
- if (!zend_is_callable(error_handler, 0, &error_handler_name)) {
+ if (!zend_is_callable(error_handler, 0, NULL)) {
+ zend_string *error_handler_name = zend_get_callable_name(error_handler);
zend_error(E_WARNING, "%s() expects the argument (%s) to be a valid callback",
get_active_function_name(), error_handler_name?ZSTR_VAL(error_handler_name):"unknown");
zend_string_release(error_handler_name);
return;
}
- zend_string_release(error_handler_name);
}
if (Z_TYPE(EG(user_error_handler)) != IS_UNDEF) {
@@ -1829,20 +1665,19 @@ ZEND_FUNCTION(restore_error_handler)
ZEND_FUNCTION(set_exception_handler)
{
zval *exception_handler;
- zend_string *exception_handler_name = NULL;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &exception_handler) == FAILURE) {
return;
}
if (Z_TYPE_P(exception_handler) != IS_NULL) { /* NULL == unset */
- if (!zend_is_callable(exception_handler, 0, &exception_handler_name)) {
+ if (!zend_is_callable(exception_handler, 0, NULL)) {
+ zend_string *exception_handler_name = zend_get_callable_name(exception_handler);
zend_error(E_WARNING, "%s() expects the argument (%s) to be a valid callback",
get_active_function_name(), exception_handler_name?ZSTR_VAL(exception_handler_name):"unknown");
zend_string_release(exception_handler_name);
return;
}
- zend_string_release(exception_handler_name);
}
if (Z_TYPE(EG(user_exception_handler)) != IS_UNDEF) {
@@ -2092,28 +1927,12 @@ ZEND_FUNCTION(create_function)
}
/* }}} */
-#if ZEND_DEBUG
-ZEND_FUNCTION(zend_test_func)
-{
- zval *arg1, *arg2;
-
- zend_parse_parameters(ZEND_NUM_ARGS(), "|zz", &arg1, &arg2);
-}
-
-ZEND_FUNCTION(zend_test_func2)
-{
- zval *arg1, *arg2;
-
- zend_parse_parameters(ZEND_NUM_ARGS(), "|zz", &arg1, &arg2);
-}
-
-#ifdef ZTS
+#if ZEND_DEBUG && defined(ZTS)
ZEND_FUNCTION(zend_thread_id)
{
RETURN_LONG((zend_long)tsrm_thread_id());
}
#endif
-#endif
/* {{{ proto string get_resource_type(resource res)
Get the resource type name for a given resource */
@@ -2654,9 +2473,9 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int
lineno = skip->opline->lineno;
}
ZVAL_STR_COPY(&tmp, filename);
- zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_FILE], &tmp);
+ zend_hash_add_new(Z_ARRVAL(stack_frame), ZSTR_KNOWN(ZEND_STR_FILE), &tmp);
ZVAL_LONG(&tmp, lineno);
- zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_LINE], &tmp);
+ zend_hash_add_new(Z_ARRVAL(stack_frame), ZSTR_KNOWN(ZEND_STR_LINE), &tmp);
/* try to fetch args only if an FCALL was just made - elsewise we're in the middle of a function
* and debug_baktrace() might have been called by the error_handler. in this case we don't
@@ -2674,9 +2493,9 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int
}
if (prev->func && ZEND_USER_CODE(prev->func->common.type)) {
ZVAL_STR_COPY(&tmp, prev->func->op_array.filename);
- zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_FILE], &tmp);
+ zend_hash_add_new(Z_ARRVAL(stack_frame), ZSTR_KNOWN(ZEND_STR_FILE), &tmp);
ZVAL_LONG(&tmp, prev->opline->lineno);
- zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_LINE], &tmp);
+ zend_hash_add_new(Z_ARRVAL(stack_frame), ZSTR_KNOWN(ZEND_STR_LINE), &tmp);
break;
}
prev_call = prev;
@@ -2702,7 +2521,7 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int
if (function_name) {
ZVAL_STR_COPY(&tmp, function_name);
- zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_FUNCTION], &tmp);
+ zend_hash_add_new(Z_ARRVAL(stack_frame), ZSTR_KNOWN(ZEND_STR_FUNCTION), &tmp);
if (object) {
if (func->common.scope) {
@@ -2712,27 +2531,27 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int
} else {
ZVAL_STR(&tmp, object->handlers->get_class_name(object));
}
- zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_CLASS], &tmp);
+ zend_hash_add_new(Z_ARRVAL(stack_frame), ZSTR_KNOWN(ZEND_STR_CLASS), &tmp);
if ((options & DEBUG_BACKTRACE_PROVIDE_OBJECT) != 0) {
ZVAL_OBJ(&tmp, object);
- zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_OBJECT], &tmp);
+ zend_hash_add_new(Z_ARRVAL(stack_frame), ZSTR_KNOWN(ZEND_STR_OBJECT), &tmp);
Z_ADDREF(tmp);
}
- ZVAL_INTERNED_STR(&tmp, CG(known_strings)[ZEND_STR_OBJECT_OPERATOR]);
- zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_TYPE], &tmp);
+ ZVAL_INTERNED_STR(&tmp, ZSTR_KNOWN(ZEND_STR_OBJECT_OPERATOR));
+ zend_hash_add_new(Z_ARRVAL(stack_frame), ZSTR_KNOWN(ZEND_STR_TYPE), &tmp);
} else if (func->common.scope) {
ZVAL_STR_COPY(&tmp, func->common.scope->name);
- zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_CLASS], &tmp);
- ZVAL_INTERNED_STR(&tmp, CG(known_strings)[ZEND_STR_PAAMAYIM_NEKUDOTAYIM]);
- zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_TYPE], &tmp);
+ zend_hash_add_new(Z_ARRVAL(stack_frame), ZSTR_KNOWN(ZEND_STR_CLASS), &tmp);
+ ZVAL_INTERNED_STR(&tmp, ZSTR_KNOWN(ZEND_STR_PAAMAYIM_NEKUDOTAYIM));
+ zend_hash_add_new(Z_ARRVAL(stack_frame), ZSTR_KNOWN(ZEND_STR_TYPE), &tmp);
}
if ((options & DEBUG_BACKTRACE_IGNORE_ARGS) == 0 &&
func->type != ZEND_EVAL_CODE) {
debug_backtrace_get_args(call, &tmp);
- zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_ARGS], &tmp);
+ zend_hash_add_new(Z_ARRVAL(stack_frame), ZSTR_KNOWN(ZEND_STR_ARGS), &tmp);
}
} else {
/* i know this is kinda ugly, but i'm trying to avoid extra cycles in the main execution loop */
@@ -2741,30 +2560,30 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int
if (!ptr->func || !ZEND_USER_CODE(ptr->func->common.type) || ptr->opline->opcode != ZEND_INCLUDE_OR_EVAL) {
/* can happen when calling eval from a custom sapi */
- pseudo_function_name = CG(known_strings)[ZEND_STR_UNKNOWN];
+ pseudo_function_name = ZSTR_KNOWN(ZEND_STR_UNKNOWN);
build_filename_arg = 0;
} else
switch (ptr->opline->extended_value) {
case ZEND_EVAL:
- pseudo_function_name = CG(known_strings)[ZEND_STR_EVAL];
+ pseudo_function_name = ZSTR_KNOWN(ZEND_STR_EVAL);
build_filename_arg = 0;
break;
case ZEND_INCLUDE:
- pseudo_function_name = CG(known_strings)[ZEND_STR_INCLUDE];
+ pseudo_function_name = ZSTR_KNOWN(ZEND_STR_INCLUDE);
break;
case ZEND_REQUIRE:
- pseudo_function_name = CG(known_strings)[ZEND_STR_REQUIRE];
+ pseudo_function_name = ZSTR_KNOWN(ZEND_STR_REQUIRE);
break;
case ZEND_INCLUDE_ONCE:
- pseudo_function_name = CG(known_strings)[ZEND_STR_INCLUDE_ONCE];
+ pseudo_function_name = ZSTR_KNOWN(ZEND_STR_INCLUDE_ONCE);
break;
case ZEND_REQUIRE_ONCE:
- pseudo_function_name = CG(known_strings)[ZEND_STR_REQUIRE_ONCE];
+ pseudo_function_name = ZSTR_KNOWN(ZEND_STR_REQUIRE_ONCE);
break;
default:
/* this can actually happen if you use debug_backtrace() in your error_handler and
* you're in the top-scope */
- pseudo_function_name = CG(known_strings)[ZEND_STR_UNKNOWN];
+ pseudo_function_name = ZSTR_KNOWN(ZEND_STR_UNKNOWN);
build_filename_arg = 0;
break;
}
@@ -2780,11 +2599,11 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int
ZVAL_STR_COPY(&tmp, include_filename);
zend_hash_next_index_insert_new(Z_ARRVAL(arg_array), &tmp);
- zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_ARGS], &arg_array);
+ zend_hash_add_new(Z_ARRVAL(stack_frame), ZSTR_KNOWN(ZEND_STR_ARGS), &arg_array);
}
ZVAL_INTERNED_STR(&tmp, pseudo_function_name);
- zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_FUNCTION], &tmp);
+ zend_hash_add_new(Z_ARRVAL(stack_frame), ZSTR_KNOWN(ZEND_STR_FUNCTION), &tmp);
}
zend_hash_next_index_insert_new(Z_ARRVAL_P(return_value), &stack_frame);
@@ -2889,4 +2708,6 @@ ZEND_FUNCTION(get_extension_funcs)
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_builtin_functions.h b/Zend/zend_builtin_functions.h
index feefb2bef8..e065098ef6 100644
--- a/Zend/zend_builtin_functions.h
+++ b/Zend/zend_builtin_functions.h
@@ -36,4 +36,6 @@ END_EXTERN_C()
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_closures.c b/Zend/zend_closures.c
index 01aae545d4..23ea9bc2e2 100644
--- a/Zend/zend_closures.c
+++ b/Zend/zend_closures.c
@@ -34,15 +34,12 @@
#define ZEND_CLOSURE_PROPERTY_ERROR() \
zend_throw_error(NULL, "Closure object cannot have properties")
-/* reuse bit to mark "fake" closures (it wasn't used for functions before) */
-#define ZEND_ACC_FAKE_CLOSURE ZEND_ACC_INTERFACE
-
typedef struct _zend_closure {
zend_object std;
zend_function func;
zval this_ptr;
zend_class_entry *called_scope;
- void (*orig_internal_handler)(INTERNAL_FUNCTION_PARAMETERS);
+ zif_handler orig_internal_handler;
} zend_closure;
/* non-static since it needs to be referenced */
@@ -229,7 +226,7 @@ ZEND_METHOD(Closure, bind)
}
/* }}} */
-static void zend_closure_call_magic(INTERNAL_FUNCTION_PARAMETERS) /* {{{ */ {
+static ZEND_NAMED_FUNCTION(zend_closure_call_magic) /* {{{ */ {
zend_fcall_info fci;
zend_fcall_info_cache fcc;
zval params[2];
@@ -363,7 +360,7 @@ ZEND_API zend_function *zend_get_closure_invoke_method(zend_object *object) /* {
invoke->internal_function.handler = ZEND_MN(Closure___invoke);
invoke->internal_function.module = 0;
invoke->internal_function.scope = zend_ce_closure;
- invoke->internal_function.function_name = CG(known_strings)[ZEND_STR_MAGIC_INVOKE];
+ invoke->internal_function.function_name = ZSTR_KNOWN(ZEND_STR_MAGIC_INVOKE);
return invoke;
}
/* }}} */
@@ -504,12 +501,12 @@ static HashTable *zend_closure_get_debug_info(zval *object, int *is_temp) /* {{{
if (closure->func.type == ZEND_USER_FUNCTION && closure->func.op_array.static_variables) {
HashTable *static_variables = closure->func.op_array.static_variables;
ZVAL_ARR(&val, zend_array_dup(static_variables));
- zend_hash_update(debug_info, CG(known_strings)[ZEND_STR_STATIC], &val);
+ zend_hash_update(debug_info, ZSTR_KNOWN(ZEND_STR_STATIC), &val);
}
if (Z_TYPE(closure->this_ptr) != IS_UNDEF) {
Z_ADDREF(closure->this_ptr);
- zend_hash_update(debug_info, CG(known_strings)[ZEND_STR_THIS], &closure->this_ptr);
+ zend_hash_update(debug_info, ZSTR_KNOWN(ZEND_STR_THIS), &closure->this_ptr);
}
if (arg_info &&
@@ -629,7 +626,7 @@ void zend_register_closure_ce(void) /* {{{ */
}
/* }}} */
-static void zend_closure_internal_handler(INTERNAL_FUNCTION_PARAMETERS) /* {{{ */
+static ZEND_NAMED_FUNCTION(zend_closure_internal_handler) /* {{{ */
{
zend_closure *closure = (zend_closure*)EX(func)->common.prototype;
closure->orig_internal_handler(INTERNAL_FUNCTION_PARAM_PASSTHRU);
@@ -742,4 +739,6 @@ void zend_closure_bind_var(zval *closure_zv, zend_string *var_name, zval *var) /
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_closures.h b/Zend/zend_closures.h
index 5d8140f763..4c7c041da8 100644
--- a/Zend/zend_closures.h
+++ b/Zend/zend_closures.h
@@ -45,4 +45,6 @@ END_EXTERN_C()
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 32fa64c4b1..95d93903de 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -87,6 +87,7 @@ ZEND_API zend_executor_globals executor_globals;
#endif
static zend_op *zend_emit_op(znode *result, zend_uchar opcode, znode *op1, znode *op2);
+static zend_bool zend_try_ct_eval_array(zval *result, zend_ast *ast);
static void zend_destroy_property_info_internal(zval *zv) /* {{{ */
{
@@ -161,6 +162,7 @@ static const struct reserved_class_name reserved_class_names[] = {
{ZEND_STRL("true")},
{ZEND_STRL("void")},
{ZEND_STRL("iterable")},
+ {ZEND_STRL("object")},
{NULL, 0}
};
@@ -184,7 +186,7 @@ static zend_bool zend_is_reserved_class_name(const zend_string *name) /* {{{ */
}
/* }}} */
-ZEND_API void zend_assert_valid_class_name(const zend_string *name) /* {{{ */
+void zend_assert_valid_class_name(const zend_string *name) /* {{{ */
{
if (zend_is_reserved_class_name(name)) {
zend_error_noreturn(E_COMPILE_ERROR,
@@ -206,6 +208,7 @@ static const builtin_type_info builtin_types[] = {
{ZEND_STRL("bool"), _IS_BOOL},
{ZEND_STRL("void"), IS_VOID},
{ZEND_STRL("iterable"), IS_ITERABLE},
+ {ZEND_STRL("object"), IS_OBJECT},
{NULL, 0, IS_UNDEF}
};
@@ -234,7 +237,6 @@ void zend_oparray_context_begin(zend_oparray_context *prev_context) /* {{{ */
CG(context).vars_size = 0;
CG(context).literals_size = 0;
CG(context).backpatch_count = 0;
- CG(context).in_finally = 0;
CG(context).fast_call_var = -1;
CG(context).try_catch_offset = -1;
CG(context).current_brk_cont = -1;
@@ -301,12 +303,14 @@ void zend_file_context_begin(zend_file_context *prev_context) /* {{{ */
FC(in_namespace) = 0;
FC(has_bracketed_namespaces) = 0;
FC(declarables).ticks = 0;
+ zend_hash_init(&FC(seen_symbols), 8, NULL, NULL, 0);
}
/* }}} */
void zend_file_context_end(zend_file_context *prev_context) /* {{{ */
{
zend_end_namespace();
+ zend_hash_destroy(&FC(seen_symbols));
CG(file_context) = *prev_context;
}
/* }}} */
@@ -318,12 +322,27 @@ void zend_init_compiler_data_structures(void) /* {{{ */
CG(active_class_entry) = NULL;
CG(in_compilation) = 0;
CG(start_lineno) = 0;
- zend_hash_init(&CG(const_filenames), 8, NULL, NULL, 0);
CG(encoding_declared) = 0;
}
/* }}} */
+static void zend_register_seen_symbol(zend_string *name, uint32_t kind) {
+ zval *zv = zend_hash_find(&FC(seen_symbols), name);
+ if (zv) {
+ Z_LVAL_P(zv) |= kind;
+ } else {
+ zval tmp;
+ ZVAL_LONG(&tmp, kind);
+ zend_hash_add_new(&FC(seen_symbols), name, &tmp);
+ }
+}
+
+static zend_bool zend_have_seen_symbol(zend_string *name, uint32_t kind) {
+ zval *zv = zend_hash_find(&FC(seen_symbols), name);
+ return zv && (Z_LVAL_P(zv) & kind) != 0;
+}
+
ZEND_API void file_handle_dtor(zend_file_handle *fh) /* {{{ */
{
@@ -349,7 +368,6 @@ void shutdown_compiler(void) /* {{{ */
zend_stack_destroy(&CG(loop_var_stack));
zend_stack_destroy(&CG(delayed_oplines_stack));
zend_hash_destroy(&CG(filenames_table));
- zend_hash_destroy(&CG(const_filenames));
zend_arena_destroy(CG(arena));
}
/* }}} */
@@ -1258,17 +1276,17 @@ static void zend_mark_function_as_generator() /* {{{ */
if (CG(active_op_array)->fn_flags & ZEND_ACC_HAS_RETURN_TYPE) {
zend_arg_info return_info = CG(active_op_array)->arg_info[-1];
- if (return_info.type_hint != IS_ITERABLE) {
+ if (ZEND_TYPE_CODE(return_info.type) != IS_ITERABLE) {
const char *msg = "Generators may only declare a return type of Generator, Iterator, Traversable, or iterable, %s is not permitted";
- if (!return_info.class_name) {
- zend_error_noreturn(E_COMPILE_ERROR, msg, zend_get_type_by_const(return_info.type_hint));
+ if (!ZEND_TYPE_IS_CLASS(return_info.type)) {
+ zend_error_noreturn(E_COMPILE_ERROR, msg, zend_get_type_by_const(ZEND_TYPE_CODE(return_info.type)));
}
- if (!zend_string_equals_literal_ci(return_info.class_name, "Traversable")
- && !zend_string_equals_literal_ci(return_info.class_name, "Iterator")
- && !zend_string_equals_literal_ci(return_info.class_name, "Generator")) {
- zend_error_noreturn(E_COMPILE_ERROR, msg, ZSTR_VAL(return_info.class_name));
+ if (!zend_string_equals_literal_ci(ZEND_TYPE_NAME(return_info.type), "Traversable")
+ && !zend_string_equals_literal_ci(ZEND_TYPE_NAME(return_info.type), "Iterator")
+ && !zend_string_equals_literal_ci(ZEND_TYPE_NAME(return_info.type), "Generator")) {
+ zend_error_noreturn(E_COMPILE_ERROR, msg, ZSTR_VAL(ZEND_TYPE_NAME(return_info.type)));
}
}
}
@@ -1713,9 +1731,6 @@ again:
goto again;
case T_CLOSE_TAG:
- if (LANG_SCNG(yy_text)[LANG_SCNG(yy_leng)-1] != '>') {
- CG(increment_lineno) = 1;
- }
retval = ';'; /* implicit ; */
break;
case T_OPEN_TAG_WITH_ECHO:
@@ -1885,22 +1900,6 @@ ZEND_API size_t zend_dirname(char *path, size_t len)
return len;
}
}
-#elif defined(NETWARE)
- /*
- * Find the first occurrence of : from the left
- * move the path pointer to the position just after :
- * increment the len_adjust to the length of path till colon character(inclusive)
- * If there is no character beyond : simple return len
- */
- char *colonpos = NULL;
- colonpos = strchr(path, ':');
- if (colonpos != NULL) {
- len_adjust = ((colonpos - path) + 1);
- path += len_adjust;
- if (len_adjust == len) {
- return len;
- }
- }
#endif
if (len == 0) {
@@ -1925,20 +1924,9 @@ ZEND_API size_t zend_dirname(char *path, size_t len)
}
if (end < path) {
/* No slash found, therefore return '.' */
-#ifdef NETWARE
- if (len_adjust == 0) {
- path[0] = '.';
- path[1] = '\0';
- return 1; /* only one character */
- } else {
- path[0] = '\0';
- return len_adjust;
- }
-#else
path[0] = '.';
path[1] = '\0';
return 1 + len_adjust;
-#endif
}
/* Strip slashes which came before the file name */
@@ -2095,6 +2083,8 @@ static void zend_check_live_ranges(zend_op *opline) /* {{{ */
} else if (opline->opcode == ZEND_FAST_RET) {
/* fast_calls don't have to be destroyed */
} else if (opline->opcode == ZEND_CASE ||
+ opline->opcode == ZEND_SWITCH_LONG ||
+ opline->opcode == ZEND_SWITCH_STRING ||
opline->opcode == ZEND_FE_FETCH_R ||
opline->opcode == ZEND_FE_FETCH_RW ||
opline->opcode == ZEND_FE_FREE ||
@@ -2230,6 +2220,7 @@ ZEND_API int zend_is_smart_branch(zend_op *opline) /* {{{ */
case ZEND_IS_SMALLER:
case ZEND_IS_SMALLER_OR_EQUAL:
case ZEND_CASE:
+ case ZEND_ISSET_ISEMPTY_CV:
case ZEND_ISSET_ISEMPTY_VAR:
case ZEND_ISSET_ISEMPTY_DIM_OBJ:
case ZEND_ISSET_ISEMPTY_PROP_OBJ:
@@ -2237,6 +2228,7 @@ ZEND_API int zend_is_smart_branch(zend_op *opline) /* {{{ */
case ZEND_INSTANCEOF:
case ZEND_TYPE_CHECK:
case ZEND_DEFINED:
+ case ZEND_IN_ARRAY:
return 1;
default:
return 0;
@@ -2336,26 +2328,26 @@ static zend_op *zend_delayed_compile_end(uint32_t offset) /* {{{ */
static void zend_emit_return_type_check(
znode *expr, zend_arg_info *return_info, zend_bool implicit) /* {{{ */
{
- /* `return ...;` is illegal in a void function (but `return;` isn't) */
- if (return_info->type_hint == IS_VOID) {
- if (expr) {
- if (expr->op_type == IS_CONST && Z_TYPE(expr->u.constant) == IS_NULL) {
- zend_error_noreturn(E_COMPILE_ERROR,
- "A void function must not return a value "
- "(did you mean \"return;\" instead of \"return null;\"?)");
- } else {
- zend_error_noreturn(E_COMPILE_ERROR, "A void function must not return a value");
+ if (ZEND_TYPE_IS_SET(return_info->type)) {
+ zend_op *opline;
+
+ /* `return ...;` is illegal in a void function (but `return;` isn't) */
+ if (ZEND_TYPE_CODE(return_info->type) == IS_VOID) {
+ if (expr) {
+ if (expr->op_type == IS_CONST && Z_TYPE(expr->u.constant) == IS_NULL) {
+ zend_error_noreturn(E_COMPILE_ERROR,
+ "A void function must not return a value "
+ "(did you mean \"return;\" instead of \"return null;\"?)");
+ } else {
+ zend_error_noreturn(E_COMPILE_ERROR, "A void function must not return a value");
+ }
}
+ /* we don't need run-time check */
+ return;
}
- /* we don't need run-time check */
- return;
- }
-
- if (return_info->type_hint != IS_UNDEF) {
- zend_op *opline;
if (!expr && !implicit) {
- if (return_info->allow_null) {
+ if (ZEND_TYPE_ALLOW_NULL(return_info->type)) {
zend_error_noreturn(E_COMPILE_ERROR,
"A function with return type must return a value "
"(did you mean \"return null;\" instead of \"return;\"?)");
@@ -2366,11 +2358,11 @@ static void zend_emit_return_type_check(
}
if (expr && expr->op_type == IS_CONST) {
- if ((return_info->type_hint == Z_TYPE(expr->u.constant))
- ||((return_info->type_hint == _IS_BOOL)
+ if ((ZEND_TYPE_CODE(return_info->type) == Z_TYPE(expr->u.constant))
+ ||((ZEND_TYPE_CODE(return_info->type) == _IS_BOOL)
&& (Z_TYPE(expr->u.constant) == IS_FALSE
|| Z_TYPE(expr->u.constant) == IS_TRUE))
- || (return_info->allow_null
+ || (ZEND_TYPE_ALLOW_NULL(return_info->type)
&& Z_TYPE(expr->u.constant) == IS_NULL)) {
/* we don't need run-time check */
return;
@@ -2382,7 +2374,7 @@ static void zend_emit_return_type_check(
opline->result_type = expr->op_type = IS_TMP_VAR;
opline->result.var = expr->u.op.var = get_temporary_variable(CG(active_op_array));
}
- if (return_info->class_name) {
+ if (ZEND_TYPE_IS_CLASS(return_info->type)) {
opline->op2.num = CG(active_op_array)->cache_size;
CG(active_op_array)->cache_size += sizeof(void*);
} else {
@@ -3480,13 +3472,7 @@ int zend_compile_func_chr(znode *result, zend_ast_list *args) /* {{{ */
zend_long c = Z_LVAL_P(zend_ast_get_zval(args->child[0])) & 0xff;
result->op_type = IS_CONST;
- if (CG(one_char_string)[c]) {
- ZVAL_INTERNED_STR(&result->u.constant, CG(one_char_string)[c]);
- } else {
- ZVAL_NEW_STR(&result->u.constant, zend_string_alloc(1, 0));
- Z_STRVAL_P(&result->u.constant)[0] = (char)c;
- Z_STRVAL_P(&result->u.constant)[1] = '\0';
- }
+ ZVAL_INTERNED_STR(&result->u.constant, ZSTR_CHAR(c));
return SUCCESS;
} else {
return FAILURE;
@@ -3571,6 +3557,37 @@ int zend_compile_func_cufa(znode *result, zend_ast_list *args, zend_string *lcna
}
zend_compile_init_user_func(args->child[0], 0, lcname);
+ if (args->child[1]->kind == ZEND_AST_CALL
+ && args->child[1]->child[0]->kind == ZEND_AST_ZVAL
+ && Z_TYPE_P(zend_ast_get_zval(args->child[1]->child[0])) == IS_STRING
+ && args->child[1]->child[1]->kind == ZEND_AST_ARG_LIST) {
+ zend_string *orig_name = zend_ast_get_str(args->child[1]->child[0]);
+ zend_ast_list *list = zend_ast_get_list(args->child[1]->child[1]);
+ zend_bool is_fully_qualified;
+ zend_string *name = zend_resolve_function_name(orig_name, args->child[1]->child[0]->attr, &is_fully_qualified);
+
+ if (zend_string_equals_literal_ci(name, "array_slice")
+ && list->children == 3
+ && list->child[1]->kind == ZEND_AST_ZVAL) {
+ zval *zv = zend_ast_get_zval(list->child[1]);
+
+ if (Z_TYPE_P(zv) == IS_LONG
+ && Z_LVAL_P(zv) >= 0
+ && Z_LVAL_P(zv) <= 0x7fffffff) {
+ zend_op *opline;
+ znode len_node;
+
+ zend_compile_expr(&arg_node, list->child[0]);
+ zend_compile_expr(&len_node, list->child[2]);
+ opline = zend_emit_op(NULL, ZEND_SEND_ARRAY, &arg_node, &len_node);
+ opline->extended_value = Z_LVAL_P(zv);
+ zend_emit_op(result, ZEND_DO_FCALL, NULL, NULL);
+ zend_string_release(name);
+ return SUCCESS;
+ }
+ }
+ zend_string_release(name);
+ }
zend_compile_expr(&arg_node, args->child[1]);
zend_emit_op(NULL, ZEND_SEND_ARRAY, &arg_node, NULL);
zend_emit_op(result, ZEND_DO_FCALL, NULL, NULL);
@@ -3654,6 +3671,204 @@ static int zend_compile_assert(znode *result, zend_ast_list *args, zend_string *
}
/* }}} */
+static int zend_compile_func_in_array(znode *result, zend_ast_list *args) /* {{{ */
+{
+ zend_bool strict = 0;
+ znode array, needly;
+ zend_op *opline;
+
+ if (args->children == 3) {
+ if (args->child[2]->kind == ZEND_AST_ZVAL) {
+ strict = zend_is_true(zend_ast_get_zval(args->child[2]));
+ } else if (args->child[2]->kind == ZEND_AST_CONST) {
+ zval value;
+ zend_ast *name_ast = args->child[2]->child[0];
+ zend_bool is_fully_qualified;
+ zend_string *resolved_name = zend_resolve_const_name(
+ zend_ast_get_str(name_ast), name_ast->attr, &is_fully_qualified);
+
+ if (!zend_try_ct_eval_const(&value, resolved_name, is_fully_qualified)) {
+ zend_string_release(resolved_name);
+ return FAILURE;
+ }
+
+ zend_string_release(resolved_name);
+ strict = zend_is_true(&value);
+ zval_ptr_dtor(&value);
+ } else {
+ return FAILURE;
+ }
+ } else if (args->children != 2) {
+ return FAILURE;
+ }
+
+ if (args->child[1]->kind != ZEND_AST_ARRAY
+ || !zend_try_ct_eval_array(&array.u.constant, args->child[1])) {
+ return FAILURE;
+ }
+
+ if (zend_hash_num_elements(Z_ARRVAL(array.u.constant)) > 0) {
+ zend_bool ok = 1;
+ zval *val, tmp;
+ HashTable *src = Z_ARRVAL(array.u.constant);
+ HashTable *dst = emalloc(sizeof(HashTable));
+
+ zend_hash_init(dst, zend_hash_num_elements(src), NULL, ZVAL_PTR_DTOR, 0);
+ ZVAL_TRUE(&tmp);
+
+ if (strict) {
+ ZEND_HASH_FOREACH_VAL(src, val) {
+ if (Z_TYPE_P(val) == IS_STRING) {
+ zend_hash_add(dst, Z_STR_P(val), &tmp);
+ } else if (Z_TYPE_P(val) == IS_LONG) {
+ zend_hash_index_add(dst, Z_LVAL_P(val), &tmp);
+ } else {
+ zend_array_destroy(dst);
+ ok = 0;
+ break;
+ }
+ } ZEND_HASH_FOREACH_END();
+ } else {
+ ZEND_HASH_FOREACH_VAL(src, val) {
+ if (Z_TYPE_P(val) != IS_STRING
+ || is_numeric_string(Z_STRVAL_P(val), Z_STRLEN_P(val), NULL, NULL, 0)) {
+ zend_array_destroy(dst);
+ ok = 0;
+ break;
+ }
+ zend_hash_add(dst, Z_STR_P(val), &tmp);
+ } ZEND_HASH_FOREACH_END();
+ }
+
+ zend_array_destroy(src);
+ if (!ok) {
+ return FAILURE;
+ }
+ Z_ARRVAL(array.u.constant) = dst;
+ }
+ array.op_type = IS_CONST;
+
+ zend_compile_expr(&needly, args->child[0]);
+
+ opline = zend_emit_op_tmp(result, ZEND_IN_ARRAY, &needly, &array);
+ opline->extended_value = strict;
+
+ return SUCCESS;
+}
+/* }}} */
+
+int zend_compile_func_count(znode *result, zend_ast_list *args) /* {{{ */
+{
+ znode arg_node;
+
+ if (args->children != 1 || args->child[0]->kind == ZEND_AST_UNPACK) {
+ return FAILURE;
+ }
+
+ zend_compile_expr(&arg_node, args->child[0]);
+ zend_emit_op_tmp(result, ZEND_COUNT, &arg_node, NULL);
+ return SUCCESS;
+}
+/* }}} */
+
+int zend_compile_func_get_class(znode *result, zend_ast_list *args) /* {{{ */
+{
+ if (args->children == 0) {
+ zend_emit_op_tmp(result, ZEND_GET_CLASS, NULL, NULL);
+ } else {
+ znode arg_node;
+
+ if (args->children != 1 || args->child[0]->kind == ZEND_AST_UNPACK) {
+ return FAILURE;
+ }
+
+ zend_compile_expr(&arg_node, args->child[0]);
+ zend_emit_op_tmp(result, ZEND_GET_CLASS, &arg_node, NULL);
+ }
+ return SUCCESS;
+}
+/* }}} */
+
+int zend_compile_func_get_called_class(znode *result, zend_ast_list *args) /* {{{ */
+{
+ if (args->children != 0) {
+ return FAILURE;
+ }
+
+ zend_emit_op_tmp(result, ZEND_GET_CALLED_CLASS, NULL, NULL);
+ return SUCCESS;
+}
+/* }}} */
+
+int zend_compile_func_gettype(znode *result, zend_ast_list *args) /* {{{ */
+{
+ znode arg_node;
+
+ if (args->children != 1 || args->child[0]->kind == ZEND_AST_UNPACK) {
+ return FAILURE;
+ }
+
+ zend_compile_expr(&arg_node, args->child[0]);
+ zend_emit_op_tmp(result, ZEND_GET_TYPE, &arg_node, NULL);
+ return SUCCESS;
+}
+/* }}} */
+
+int zend_compile_func_num_args(znode *result, zend_ast_list *args) /* {{{ */
+{
+ if (CG(active_op_array)->function_name && args->children == 0) {
+ zend_emit_op_tmp(result, ZEND_FUNC_NUM_ARGS, NULL, NULL);
+ return SUCCESS;
+ } else {
+ return FAILURE;
+ }
+}
+/* }}} */
+
+int zend_compile_func_get_args(znode *result, zend_ast_list *args) /* {{{ */
+{
+ if (CG(active_op_array)->function_name && args->children == 0) {
+ zend_emit_op_tmp(result, ZEND_FUNC_GET_ARGS, NULL, NULL);
+ return SUCCESS;
+ } else {
+ return FAILURE;
+ }
+}
+/* }}} */
+
+int zend_compile_func_array_slice(znode *result, zend_ast_list *args) /* {{{ */
+{
+ if (CG(active_op_array)->function_name
+ && args->children == 2
+ && args->child[0]->kind == ZEND_AST_CALL
+ && args->child[0]->child[0]->kind == ZEND_AST_ZVAL
+ && Z_TYPE_P(zend_ast_get_zval(args->child[0]->child[0])) == IS_STRING
+ && args->child[0]->child[1]->kind == ZEND_AST_ARG_LIST
+ && args->child[1]->kind == ZEND_AST_ZVAL) {
+
+ zend_string *orig_name = zend_ast_get_str(args->child[0]->child[0]);
+ zend_bool is_fully_qualified;
+ zend_string *name = zend_resolve_function_name(orig_name, args->child[0]->child[0]->attr, &is_fully_qualified);
+ zend_ast_list *list = zend_ast_get_list(args->child[0]->child[1]);
+ zval *zv = zend_ast_get_zval(args->child[1]);
+ znode first;
+
+ if (zend_string_equals_literal_ci(name, "func_get_args")
+ && list->children == 0
+ && Z_TYPE_P(zv) == IS_LONG
+ && Z_LVAL_P(zv) >= 0) {
+ first.op_type = IS_CONST;
+ ZVAL_LONG(&first.u.constant, Z_LVAL_P(zv));
+ zend_emit_op_tmp(result, ZEND_FUNC_GET_ARGS, &first, NULL);
+ zend_string_release(name);
+ return SUCCESS;
+ }
+ zend_string_release(name);
+ }
+ return FAILURE;
+}
+/* }}} */
+
int zend_try_compile_special_func(znode *result, zend_string *lcname, zend_ast_list *args, zend_function *fbc, uint32_t type) /* {{{ */
{
if (fbc->internal_function.handler == ZEND_FN(display_disabled_function)) {
@@ -3712,6 +3927,22 @@ int zend_try_compile_special_func(znode *result, zend_string *lcname, zend_ast_l
return zend_compile_func_cufa(result, args, lcname);
} else if (zend_string_equals_literal(lcname, "call_user_func")) {
return zend_compile_func_cuf(result, args, lcname);
+ } else if (zend_string_equals_literal(lcname, "in_array")) {
+ return zend_compile_func_in_array(result, args);
+ } else if (zend_string_equals_literal(lcname, "count")) {
+ return zend_compile_func_count(result, args);
+ } else if (zend_string_equals_literal(lcname, "get_class")) {
+ return zend_compile_func_get_class(result, args);
+ } else if (zend_string_equals_literal(lcname, "get_called_class")) {
+ return zend_compile_func_get_called_class(result, args);
+ } else if (zend_string_equals_literal(lcname, "gettype")) {
+ return zend_compile_func_gettype(result, args);
+ } else if (zend_string_equals_literal(lcname, "func_num_args")) {
+ return zend_compile_func_num_args(result, args);
+ } else if (zend_string_equals_literal(lcname, "func_get_args")) {
+ return zend_compile_func_get_args(result, args);
+ } else if (zend_string_equals_literal(lcname, "array_slice")) {
+ return zend_compile_func_array_slice(result, args);
} else {
return FAILURE;
}
@@ -4060,8 +4291,7 @@ void zend_compile_unset(zend_ast *ast) /* {{{ */
if (is_this_fetch(var_ast)) {
zend_error_noreturn(E_COMPILE_ERROR, "Cannot unset $this");
} else if (zend_try_compile_cv(&var_node, var_ast) == SUCCESS) {
- opline = zend_emit_op(NULL, ZEND_UNSET_VAR, &var_node, NULL);
- opline->extended_value = ZEND_FETCH_LOCAL | ZEND_QUICK_SET;
+ opline = zend_emit_op(NULL, ZEND_UNSET_CV, &var_node, NULL);
} else {
opline = zend_compile_simple_var_no_cv(NULL, var_ast, BP_VAR_UNSET, 0);
opline->opcode = ZEND_UNSET_VAR;
@@ -4623,6 +4853,58 @@ void zend_compile_if(zend_ast *ast) /* {{{ */
}
/* }}} */
+static zend_uchar determine_switch_jumptable_type(zend_ast_list *cases) {
+ uint32_t i;
+ zend_uchar common_type = IS_UNDEF;
+ for (i = 0; i < cases->children; i++) {
+ zend_ast *case_ast = cases->child[i];
+ zend_ast **cond_ast = &case_ast->child[0];
+ zval *cond_zv;
+ if (!case_ast->child[0]) {
+ /* Skip default clause */
+ continue;
+ }
+
+ zend_eval_const_expr(cond_ast);
+ if ((*cond_ast)->kind != ZEND_AST_ZVAL) {
+ /* Non-constant case */
+ return IS_UNDEF;
+ }
+
+ cond_zv = zend_ast_get_zval(case_ast->child[0]);
+ if (Z_TYPE_P(cond_zv) != IS_LONG && Z_TYPE_P(cond_zv) != IS_STRING) {
+ /* We only optimize switched on integers and strings */
+ return IS_UNDEF;
+ }
+
+ if (common_type == IS_UNDEF) {
+ common_type = Z_TYPE_P(cond_zv);
+ } else if (common_type != Z_TYPE_P(cond_zv)) {
+ /* Non-uniform case types */
+ return IS_UNDEF;
+ }
+
+ if (Z_TYPE_P(cond_zv) == IS_STRING
+ && is_numeric_string(Z_STRVAL_P(cond_zv), Z_STRLEN_P(cond_zv), NULL, NULL, 0)) {
+ /* Numeric strings cannot be compared with a simple hash lookup */
+ return IS_UNDEF;
+ }
+ }
+
+ return common_type;
+}
+
+static zend_bool should_use_jumptable(zend_ast_list *cases, zend_uchar jumptable_type) {
+ /* Thresholds are chosen based on when the average switch time for equidistributed
+ * input becomes smaller when using the jumptable optimization. */
+ if (jumptable_type == IS_LONG) {
+ return cases->children >= 5;
+ } else {
+ ZEND_ASSERT(jumptable_type == IS_STRING);
+ return cases->children >= 2;
+ }
+}
+
void zend_compile_switch(zend_ast *ast) /* {{{ */
{
zend_ast *expr_ast = ast->child[0];
@@ -4633,7 +4915,9 @@ void zend_compile_switch(zend_ast *ast) /* {{{ */
znode expr_node, case_node;
zend_op *opline;
- uint32_t *jmpnz_opnums, opnum_default_jmp;
+ uint32_t *jmpnz_opnums, opnum_default_jmp, opnum_switch;
+ zend_uchar jumptable_type;
+ HashTable *jumptable = NULL;
zend_compile_expr(&expr_node, expr_ast);
@@ -4642,6 +4926,24 @@ void zend_compile_switch(zend_ast *ast) /* {{{ */
case_node.op_type = IS_TMP_VAR;
case_node.u.op.var = get_temporary_variable(CG(active_op_array));
+ jumptable_type = determine_switch_jumptable_type(cases);
+ if (jumptable_type != IS_UNDEF && should_use_jumptable(cases, jumptable_type)) {
+ znode jumptable_op;
+
+ ALLOC_HASHTABLE(jumptable);
+ zend_hash_init(jumptable, cases->children, NULL, NULL, 0);
+ jumptable_op.op_type = IS_CONST;
+ ZVAL_ARR(&jumptable_op.u.constant, jumptable);
+
+ opline = zend_emit_op(NULL,
+ jumptable_type == IS_LONG ? ZEND_SWITCH_LONG : ZEND_SWITCH_STRING,
+ &expr_node, &jumptable_op);
+ if (opline->op1_type == IS_CONST) {
+ zval_copy_ctor(CT_CONSTANT(opline->op1));
+ }
+ opnum_switch = opline - CG(active_op_array)->opcodes;
+ }
+
jmpnz_opnums = safe_emalloc(sizeof(uint32_t), cases->children, 0);
for (i = 0; i < cases->children; ++i) {
zend_ast *case_ast = cases->child[i];
@@ -4686,8 +4988,27 @@ void zend_compile_switch(zend_ast *ast) /* {{{ */
if (cond_ast) {
zend_update_jump_target_to_next(jmpnz_opnums[i]);
+
+ if (jumptable) {
+ zval *cond_zv = zend_ast_get_zval(cond_ast);
+ zval jmp_target;
+ ZVAL_LONG(&jmp_target, get_next_op_number(CG(active_op_array)));
+
+ ZEND_ASSERT(Z_TYPE_P(cond_zv) == jumptable_type);
+ if (Z_TYPE_P(cond_zv) == IS_LONG) {
+ zend_hash_index_add(jumptable, Z_LVAL_P(cond_zv), &jmp_target);
+ } else {
+ ZEND_ASSERT(Z_TYPE_P(cond_zv) == IS_STRING);
+ zend_hash_add(jumptable, Z_STR_P(cond_zv), &jmp_target);
+ }
+ }
} else {
zend_update_jump_target_to_next(opnum_default_jmp);
+
+ if (jumptable) {
+ opline = &CG(active_op_array)->opcodes[opnum_switch];
+ opline->extended_value = get_next_op_number(CG(active_op_array));
+ }
}
zend_compile_stmt(stmt_ast);
@@ -4695,6 +5016,11 @@ void zend_compile_switch(zend_ast *ast) /* {{{ */
if (!has_default_case) {
zend_update_jump_target_to_next(opnum_default_jmp);
+
+ if (jumptable) {
+ opline = &CG(active_op_array)->opcodes[opnum_switch];
+ opline->extended_value = get_next_op_number(CG(active_op_array));
+ }
}
zend_end_loop(get_next_op_number(CG(active_op_array)), &expr_node);
@@ -4859,9 +5185,7 @@ void zend_compile_try(zend_ast *ast) /* {{{ */
zend_emit_op(NULL, ZEND_JMP, NULL, NULL);
- CG(context).in_finally++;
zend_compile_stmt(finally_ast);
- CG(context).in_finally--;
CG(active_op_array)->try_catch_array[try_catch_offset].finally_op = opnum_jmp + 1;
CG(active_op_array)->try_catch_array[try_catch_offset].finally_end
@@ -5056,10 +5380,10 @@ ZEND_API void zend_set_function_arg_flags(zend_function *func) /* {{{ */
}
/* }}} */
-static void zend_compile_typename(zend_ast *ast, zend_arg_info *arg_info) /* {{{ */
+static void zend_compile_typename(zend_ast *ast, zend_arg_info *arg_info, zend_bool allow_null) /* {{{ */
{
if (ast->kind == ZEND_AST_TYPE) {
- arg_info->type_hint = ast->attr;
+ arg_info->type = ZEND_TYPE_ENCODE(ast->attr, allow_null);
} else {
zend_string *class_name = zend_ast_get_str(ast);
zend_uchar type = zend_lookup_builtin_type_by_name(class_name);
@@ -5070,7 +5394,7 @@ static void zend_compile_typename(zend_ast *ast, zend_arg_info *arg_info) /* {{{
"Scalar type declaration '%s' must be unqualified",
ZSTR_VAL(zend_string_tolower(class_name)));
}
- arg_info->type_hint = type;
+ arg_info->type = ZEND_TYPE_ENCODE(type, allow_null);
} else {
uint32_t fetch_type = zend_get_class_fetch_type_ast(ast);
if (fetch_type == ZEND_FETCH_CLASS_DEFAULT) {
@@ -5081,8 +5405,7 @@ static void zend_compile_typename(zend_ast *ast, zend_arg_info *arg_info) /* {{{
zend_string_addref(class_name);
}
- arg_info->type_hint = IS_OBJECT;
- arg_info->class_name = class_name;
+ arg_info->type = ZEND_TYPE_ENCODE_CLASS(class_name, allow_null);
}
}
}
@@ -5096,23 +5419,23 @@ void zend_compile_params(zend_ast *ast, zend_ast *return_type_ast) /* {{{ */
zend_arg_info *arg_infos;
if (return_type_ast) {
+ zend_bool allow_null = 0;
+
/* Use op_array->arg_info[-1] for return type */
arg_infos = safe_emalloc(sizeof(zend_arg_info), list->children + 1, 0);
arg_infos->name = NULL;
arg_infos->pass_by_reference = (op_array->fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0;
arg_infos->is_variadic = 0;
- arg_infos->type_hint = 0;
- arg_infos->allow_null = 0;
- arg_infos->class_name = NULL;
+ arg_infos->type = 0;
if (return_type_ast->attr & ZEND_TYPE_NULLABLE) {
- arg_infos->allow_null = 1;
+ allow_null = 1;
return_type_ast->attr &= ~ZEND_TYPE_NULLABLE;
}
- zend_compile_typename(return_type_ast, arg_infos);
+ zend_compile_typename(return_type_ast, arg_infos, allow_null);
- if (arg_infos->type_hint == IS_VOID && arg_infos->allow_null) {
+ if (ZEND_TYPE_CODE(arg_infos->type) == IS_VOID && ZEND_TYPE_ALLOW_NULL(arg_infos->type)) {
zend_error_noreturn(E_COMPILE_ERROR, "Void type cannot be nullable");
}
@@ -5189,11 +5512,11 @@ void zend_compile_params(zend_ast *ast, zend_ast *return_type_ast) /* {{{ */
arg_info->name = zend_string_copy(name);
arg_info->pass_by_reference = is_ref;
arg_info->is_variadic = is_variadic;
- arg_info->type_hint = 0;
- arg_info->allow_null = 1;
- arg_info->class_name = NULL;
+ /* TODO: Keep compatibility, but may be better reset "allow_null" ??? */
+ arg_info->type = ZEND_TYPE_ENCODE(0, 1);
if (type_ast) {
+ zend_bool allow_null;
zend_bool has_null_default = default_ast
&& (Z_TYPE(default_node.u.constant) == IS_NULL
|| (Z_TYPE(default_node.u.constant) == IS_CONSTANT
@@ -5201,17 +5524,17 @@ void zend_compile_params(zend_ast *ast, zend_ast *return_type_ast) /* {{{ */
zend_bool is_explicitly_nullable = (type_ast->attr & ZEND_TYPE_NULLABLE) == ZEND_TYPE_NULLABLE;
op_array->fn_flags |= ZEND_ACC_HAS_TYPE_HINTS;
- arg_info->allow_null = has_null_default || is_explicitly_nullable;
+ allow_null = has_null_default || is_explicitly_nullable;
type_ast->attr &= ~ZEND_TYPE_NULLABLE;
- zend_compile_typename(type_ast, arg_info);
+ zend_compile_typename(type_ast, arg_info, allow_null);
- if (arg_info->type_hint == IS_VOID) {
+ if (ZEND_TYPE_CODE(arg_info->type) == IS_VOID) {
zend_error_noreturn(E_COMPILE_ERROR, "void cannot be used as a parameter type");
}
if (type_ast->kind == ZEND_AST_TYPE) {
- if (arg_info->type_hint == IS_ARRAY) {
+ if (ZEND_TYPE_CODE(arg_info->type) == IS_ARRAY) {
if (default_ast && !has_null_default
&& Z_TYPE(default_node.u.constant) != IS_ARRAY
&& !Z_CONSTANT(default_node.u.constant)
@@ -5219,7 +5542,7 @@ void zend_compile_params(zend_ast *ast, zend_ast *return_type_ast) /* {{{ */
zend_error_noreturn(E_COMPILE_ERROR, "Default value for parameters "
"with array type can only be an array or NULL");
}
- } else if (arg_info->type_hint == IS_CALLABLE && default_ast) {
+ } else if (ZEND_TYPE_CODE(arg_info->type) == IS_CALLABLE && default_ast) {
if (!has_null_default && !Z_CONSTANT(default_node.u.constant)) {
zend_error_noreturn(E_COMPILE_ERROR, "Default value for parameters "
"with callable type can only be NULL");
@@ -5227,10 +5550,10 @@ void zend_compile_params(zend_ast *ast, zend_ast *return_type_ast) /* {{{ */
}
} else {
if (default_ast && !has_null_default && !Z_CONSTANT(default_node.u.constant)) {
- if (arg_info->class_name) {
+ if (ZEND_TYPE_IS_CLASS(arg_info->type)) {
zend_error_noreturn(E_COMPILE_ERROR, "Default value for parameters "
"with a class type can only be NULL");
- } else switch (arg_info->type_hint) {
+ } else switch (ZEND_TYPE_CODE(arg_info->type)) {
case IS_DOUBLE:
if (Z_TYPE(default_node.u.constant) != IS_DOUBLE && Z_TYPE(default_node.u.constant) != IS_LONG) {
zend_error_noreturn(E_COMPILE_ERROR, "Default value for parameters "
@@ -5244,12 +5567,17 @@ void zend_compile_params(zend_ast *ast, zend_ast *return_type_ast) /* {{{ */
"with iterable type can only be an array or NULL");
}
break;
+
+ case IS_OBJECT:
+ zend_error_noreturn(E_COMPILE_ERROR, "Default value for parameters "
+ "with an object type can only be NULL");
+ break;
default:
- if (!ZEND_SAME_FAKE_TYPE(arg_info->type_hint, Z_TYPE(default_node.u.constant))) {
+ if (!ZEND_SAME_FAKE_TYPE(ZEND_TYPE_CODE(arg_info->type), Z_TYPE(default_node.u.constant))) {
zend_error_noreturn(E_COMPILE_ERROR, "Default value for parameters "
"with a %s type can only be %s or NULL",
- zend_get_type_by_const(arg_info->type_hint), zend_get_type_by_const(arg_info->type_hint));
+ zend_get_type_by_const(ZEND_TYPE_CODE(arg_info->type)), zend_get_type_by_const(ZEND_TYPE_CODE(arg_info->type)));
}
break;
}
@@ -5258,13 +5586,13 @@ void zend_compile_params(zend_ast *ast, zend_ast *return_type_ast) /* {{{ */
/* Allocate cache slot to speed-up run-time class resolution */
if (opline->opcode == ZEND_RECV_INIT) {
- if (arg_info->class_name) {
+ if (ZEND_TYPE_IS_CLASS(arg_info->type)) {
zend_alloc_cache_slot(opline->op2.constant);
} else {
Z_CACHE_SLOT(op_array->literals[opline->op2.constant]) = -1;
}
} else {
- if (arg_info->class_name) {
+ if (ZEND_TYPE_IS_CLASS(arg_info->type)) {
opline->op2.num = op_array->cache_size;
op_array->cache_size += sizeof(void*);
} else {
@@ -5542,15 +5870,18 @@ static void zend_begin_func_decl(znode *result, zend_op_array *op_array, zend_as
}
}
- if (zend_string_equals_literal(lcname, ZEND_AUTOLOAD_FUNC_NAME)
- && zend_ast_get_list(params_ast)->children != 1
- ) {
- zend_error_noreturn(E_COMPILE_ERROR, "%s() must take exactly 1 argument",
- ZEND_AUTOLOAD_FUNC_NAME);
+ if (zend_string_equals_literal(lcname, ZEND_AUTOLOAD_FUNC_NAME)) {
+ if (zend_ast_get_list(params_ast)->children != 1) {
+ zend_error_noreturn(E_COMPILE_ERROR, "%s() must take exactly 1 argument",
+ ZEND_AUTOLOAD_FUNC_NAME);
+ }
+
+ zend_error(E_DEPRECATED, "__autoload() is deprecated, use spl_autoload_register() instead");
}
key = zend_build_runtime_definition_key(lcname, decl->lex_pos);
zend_hash_update_ptr(CG(function_table), key, op_array);
+ zend_register_seen_symbol(lcname, ZEND_SYMBOL_FUNCTION);
if (op_array->fn_flags & ZEND_ACC_CLOSURE) {
opline = zend_emit_op_tmp(result, ZEND_DECLARE_LAMBDA_FUNCTION, NULL, NULL);
@@ -5952,6 +6283,8 @@ void zend_compile_class_decl(zend_ast *ast) /* {{{ */
"because the name is already in use", ZSTR_VAL(name));
}
}
+
+ zend_register_seen_symbol(lcname, ZEND_SYMBOL_CLASS);
} else {
name = zend_generate_anon_class_name(decl->lex_pos);
lcname = zend_string_tolower(name);
@@ -6067,7 +6400,6 @@ void zend_compile_class_decl(zend_ast *ast) /* {{{ */
}
}
if (ce->clone) {
- ce->clone->common.fn_flags |= ZEND_ACC_CLONE;
if (ce->clone->common.fn_flags & ZEND_ACC_STATIC) {
zend_error_noreturn(E_COMPILE_ERROR, "Clone method %s::%s() cannot be static",
ZSTR_VAL(ce->name), ZSTR_VAL(ce->clone->common.function_name));
@@ -6120,19 +6452,19 @@ void zend_compile_class_decl(zend_ast *ast) /* {{{ */
static HashTable *zend_get_import_ht(uint32_t type) /* {{{ */
{
switch (type) {
- case T_CLASS:
+ case ZEND_SYMBOL_CLASS:
if (!FC(imports)) {
FC(imports) = emalloc(sizeof(HashTable));
zend_hash_init(FC(imports), 8, NULL, str_dtor, 0);
}
return FC(imports);
- case T_FUNCTION:
+ case ZEND_SYMBOL_FUNCTION:
if (!FC(imports_function)) {
FC(imports_function) = emalloc(sizeof(HashTable));
zend_hash_init(FC(imports_function), 8, NULL, str_dtor, 0);
}
return FC(imports_function);
- case T_CONST:
+ case ZEND_SYMBOL_CONST:
if (!FC(imports_const)) {
FC(imports_const) = emalloc(sizeof(HashTable));
zend_hash_init(FC(imports_const), 8, NULL, str_dtor, 0);
@@ -6148,11 +6480,11 @@ static HashTable *zend_get_import_ht(uint32_t type) /* {{{ */
static char *zend_get_use_type_str(uint32_t type) /* {{{ */
{
switch (type) {
- case T_CLASS:
+ case ZEND_SYMBOL_CLASS:
return "";
- case T_FUNCTION:
+ case ZEND_SYMBOL_FUNCTION:
return " function";
- case T_CONST:
+ case ZEND_SYMBOL_CONST:
return " const";
EMPTY_SWITCH_DEFAULT_CASE()
}
@@ -6172,41 +6504,6 @@ static void zend_check_already_in_use(uint32_t type, zend_string *old_name, zend
}
/* }}} */
-static void zend_check_use_conflict(
- uint32_t type, zend_string *old_name, zend_string *new_name, zend_string *lookup_name) {
- switch (type) {
- case T_CLASS:
- {
- zend_class_entry *ce = zend_hash_find_ptr(CG(class_table), lookup_name);
- if (ce && ce->type == ZEND_USER_CLASS
- && ce->info.user.filename == CG(compiled_filename)
- ) {
- zend_check_already_in_use(type, old_name, new_name, lookup_name);
- }
- break;
- }
- case T_FUNCTION:
- {
- zend_function *fn = zend_hash_find_ptr(CG(function_table), lookup_name);
- if (fn && fn->type == ZEND_USER_FUNCTION
- && fn->op_array.filename == CG(compiled_filename)
- ) {
- zend_check_already_in_use(type, old_name, new_name, lookup_name);
- }
- break;
- }
- case T_CONST:
- {
- zend_string *filename = zend_hash_find_ptr(&CG(const_filenames), lookup_name);
- if (filename && filename == CG(compiled_filename)) {
- zend_check_already_in_use(type, old_name, new_name, lookup_name);
- }
- break;
- }
- EMPTY_SWITCH_DEFAULT_CASE()
- }
-}
-
void zend_compile_use(zend_ast *ast) /* {{{ */
{
zend_ast_list *list = zend_ast_get_list(ast);
@@ -6214,7 +6511,7 @@ void zend_compile_use(zend_ast *ast) /* {{{ */
zend_string *current_ns = FC(current_namespace);
uint32_t type = ast->attr;
HashTable *current_import = zend_get_import_ht(type);
- zend_bool case_sensitive = type == T_CONST;
+ zend_bool case_sensitive = type == ZEND_SYMBOL_CONST;
for (i = 0; i < list->children; ++i) {
zend_ast *use_ast = list->child[i];
@@ -6252,7 +6549,7 @@ void zend_compile_use(zend_ast *ast) /* {{{ */
lookup_name = zend_string_tolower(new_name);
}
- if (type == T_CLASS && zend_is_reserved_class_name(new_name)) {
+ if (type == ZEND_SYMBOL_CLASS && zend_is_reserved_class_name(new_name)) {
zend_error_noreturn(E_COMPILE_ERROR, "Cannot use %s as %s because '%s' "
"is a special class name", ZSTR_VAL(old_name), ZSTR_VAL(new_name), ZSTR_VAL(new_name));
}
@@ -6263,11 +6560,15 @@ void zend_compile_use(zend_ast *ast) /* {{{ */
ZSTR_VAL(ns_name)[ZSTR_LEN(current_ns)] = '\\';
memcpy(ZSTR_VAL(ns_name) + ZSTR_LEN(current_ns) + 1, ZSTR_VAL(lookup_name), ZSTR_LEN(lookup_name) + 1);
- zend_check_use_conflict(type, old_name, new_name, ns_name);
+ if (zend_have_seen_symbol(ns_name, type)) {
+ zend_check_already_in_use(type, old_name, new_name, ns_name);
+ }
zend_string_free(ns_name);
} else {
- zend_check_use_conflict(type, old_name, new_name, lookup_name);
+ if (zend_have_seen_symbol(lookup_name, type)) {
+ zend_check_already_in_use(type, old_name, new_name, lookup_name);
+ }
}
zend_string_addref(old_name);
@@ -6340,7 +6641,7 @@ void zend_compile_const_decl(zend_ast *ast) /* {{{ */
zend_emit_op(NULL, ZEND_DECLARE_CONST, &name_node, &value_node);
- zend_hash_add_ptr(&CG(const_filenames), name, CG(compiled_filename));
+ zend_register_seen_symbol(name, ZEND_SYMBOL_CONST);
}
}
/* }}}*/
@@ -6456,9 +6757,9 @@ static zend_bool zend_try_ct_eval_magic_const(zval *zv, zend_ast *ast) /* {{{ */
zend_string *filename = CG(compiled_filename);
zend_string *dirname = zend_string_init(ZSTR_VAL(filename), ZSTR_LEN(filename), 0);
#ifdef ZEND_WIN32
- php_win32_ioutil_dirname(ZSTR_VAL(dirname), ZSTR_LEN(dirname));
+ ZSTR_LEN(dirname) = php_win32_ioutil_dirname(ZSTR_VAL(dirname), ZSTR_LEN(dirname));
#else
- zend_dirname(ZSTR_VAL(dirname), ZSTR_LEN(dirname));
+ ZSTR_LEN(dirname) = zend_dirname(ZSTR_VAL(dirname), ZSTR_LEN(dirname));
#endif
if (strcmp(ZSTR_VAL(dirname), ".") == 0) {
@@ -6468,9 +6769,9 @@ static zend_bool zend_try_ct_eval_magic_const(zval *zv, zend_ast *ast) /* {{{ */
#elif HAVE_GETWD
ZEND_IGNORE_VALUE(VCWD_GETWD(ZSTR_VAL(dirname)));
#endif
+ ZSTR_LEN(dirname) = strlen(ZSTR_VAL(dirname));
}
- ZSTR_LEN(dirname) = strlen(ZSTR_VAL(dirname));
ZVAL_STR(zv, dirname);
break;
}
@@ -6920,6 +7221,10 @@ void zend_compile_cast(znode *result, zend_ast *ast) /* {{{ */
opline = zend_emit_op_tmp(result, ZEND_CAST, &expr_node, NULL);
opline->extended_value = ast->attr;
+
+ if (ast->attr == IS_NULL) {
+ zend_error(E_DEPRECATED, "The (unset) cast is deprecated");
+ }
}
/* }}} */
@@ -7164,8 +7469,7 @@ void zend_compile_isset_or_empty(znode *result, zend_ast *ast) /* {{{ */
if (is_this_fetch(var_ast)) {
opline = zend_emit_op(result, ZEND_ISSET_ISEMPTY_THIS, NULL, NULL);
} else if (zend_try_compile_cv(&var_node, var_ast) == SUCCESS) {
- opline = zend_emit_op(result, ZEND_ISSET_ISEMPTY_VAR, &var_node, NULL);
- opline->extended_value = ZEND_FETCH_LOCAL | ZEND_QUICK_SET;
+ opline = zend_emit_op(result, ZEND_ISSET_ISEMPTY_CV, &var_node, NULL);
} else {
opline = zend_compile_simple_var_no_cv(result, var_ast, BP_VAR_IS, 0);
opline->opcode = ZEND_ISSET_ISEMPTY_VAR;
@@ -7247,6 +7551,9 @@ void zend_compile_array(znode *result, zend_ast *ast) /* {{{ */
return;
}
+ /* Empty arrays are handled at compile-time */
+ ZEND_ASSERT(list->children > 0);
+
for (i = 0; i < list->children; ++i) {
zend_ast *elem_ast = list->child[i];
zend_ast *value_ast, *key_ast;
@@ -7290,11 +7597,6 @@ void zend_compile_array(znode *result, zend_ast *ast) /* {{{ */
}
}
- /* Handle empty array */
- if (!list->children) {
- zend_emit_op_tmp(result, ZEND_INIT_ARRAY, NULL, NULL);
- }
-
/* Add a flag to INIT_ARRAY if we know this array cannot be packed */
if (!packed) {
ZEND_ASSERT(opnum_init != (uint32_t)-1);
@@ -7542,7 +7844,7 @@ static void zend_compile_encaps_list(znode *result, zend_ast *ast) /* {{{ */
GET_NODE(result, opline->result);
} else {
uint32_t var;
- uint32_t range = zend_start_live_range(CG(active_op_array), rope_init_lineno);
+ uint32_t range = zend_start_live_range_ex(CG(active_op_array), rope_init_lineno);
init_opline->extended_value = j;
opline->opcode = ZEND_ROPE_END;
@@ -8262,11 +8564,7 @@ void zend_eval_const_expr(zend_ast **ast_ptr) /* {{{ */
return;
}
c = (zend_uchar) Z_STRVAL_P(container)[offset];
- if (CG(one_char_string)[c]) {
- ZVAL_INTERNED_STR(&result, CG(one_char_string)[c]);
- } else {
- ZVAL_NEW_STR(&result, zend_string_init((char *) &c, 1, 0));
- }
+ ZVAL_INTERNED_STR(&result, ZSTR_CHAR(c));
} else if (Z_TYPE_P(container) <= IS_FALSE) {
ZVAL_NULL(&result);
} else {
@@ -8357,4 +8655,6 @@ void zend_eval_const_expr(zend_ast **ast_ptr) /* {{{ */
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h
index fff6d03917..af83311d62 100644
--- a/Zend/zend_compile.h
+++ b/Zend/zend_compile.h
@@ -121,6 +121,8 @@ typedef struct _zend_file_context {
HashTable *imports;
HashTable *imports_function;
HashTable *imports_const;
+
+ HashTable seen_symbols;
} zend_file_context;
typedef union _zend_parser_stack_elem {
@@ -189,7 +191,6 @@ typedef struct _zend_oparray_context {
int vars_size;
int literals_size;
int backpatch_count;
- int in_finally;
uint32_t fast_call_var;
uint32_t try_catch_offset;
int current_brk_cont;
@@ -198,23 +199,22 @@ typedef struct _zend_oparray_context {
HashTable *labels;
} zend_oparray_context;
+/*
+ * Function and method flags
+ *
+ * Free flags:
+ * 0x10
+ * 0x20
+ * 0x8000
+ * 0x2000000
+ */
+
/* method flags (types) */
#define ZEND_ACC_STATIC 0x01
#define ZEND_ACC_ABSTRACT 0x02
#define ZEND_ACC_FINAL 0x04
#define ZEND_ACC_IMPLEMENTED_ABSTRACT 0x08
-/* class flags (types) */
-/* ZEND_ACC_IMPLICIT_ABSTRACT_CLASS is used for abstract classes (since it is set by any abstract method even interfaces MAY have it set, too). */
-/* ZEND_ACC_EXPLICIT_ABSTRACT_CLASS denotes that a class was explicitly defined as abstract by using the keyword. */
-#define ZEND_ACC_IMPLICIT_ABSTRACT_CLASS 0x10
-#define ZEND_ACC_EXPLICIT_ABSTRACT_CLASS 0x20
-#define ZEND_ACC_INTERFACE 0x40
-#define ZEND_ACC_TRAIT 0x80
-#define ZEND_ACC_ANON_CLASS 0x100
-#define ZEND_ACC_ANON_BOUND 0x200
-#define ZEND_ACC_INHERITED 0x400
-
/* method flags (visibility) */
/* The order of those must be kept - public < protected < private */
#define ZEND_ACC_PUBLIC 0x100
@@ -228,7 +228,6 @@ typedef struct _zend_oparray_context {
/* method flags (special method detection) */
#define ZEND_ACC_CTOR 0x2000
#define ZEND_ACC_DTOR 0x4000
-#define ZEND_ACC_CLONE 0x8000
/* method flag used by Closure::__invoke() */
#define ZEND_ACC_USER_ARG_INFO 0x80
@@ -242,18 +241,8 @@ typedef struct _zend_oparray_context {
/* deprecation flag */
#define ZEND_ACC_DEPRECATED 0x40000
-/* class implement interface(s) flag */
-#define ZEND_ACC_IMPLEMENT_INTERFACES 0x80000
-#define ZEND_ACC_IMPLEMENT_TRAITS 0x400000
-
-/* class constants updated */
-#define ZEND_ACC_CONSTANTS_UPDATED 0x100000
-
-/* user class has methods with static variables */
-#define ZEND_HAS_STATIC_IN_METHODS 0x800000
-
-
#define ZEND_ACC_CLOSURE 0x100000
+#define ZEND_ACC_FAKE_CLOSURE 0x40
#define ZEND_ACC_GENERATOR 0x800000
#define ZEND_ACC_NO_RT_ARENA 0x80000
@@ -290,6 +279,33 @@ typedef struct _zend_oparray_context {
/* op_array uses strict mode types */
#define ZEND_ACC_STRICT_TYPES 0x80000000
+/*
+ * Class flags
+ *
+ * Classes also use the ZEND_ACC_FINAL (0x04) flag, otherwise there is no overlap.
+ */
+
+/* class flags (types) */
+/* ZEND_ACC_IMPLICIT_ABSTRACT_CLASS is used for abstract classes (since it is set by any abstract method even interfaces MAY have it set, too). */
+/* ZEND_ACC_EXPLICIT_ABSTRACT_CLASS denotes that a class was explicitly defined as abstract by using the keyword. */
+#define ZEND_ACC_IMPLICIT_ABSTRACT_CLASS 0x10
+#define ZEND_ACC_EXPLICIT_ABSTRACT_CLASS 0x20
+#define ZEND_ACC_INTERFACE 0x40
+#define ZEND_ACC_TRAIT 0x80
+#define ZEND_ACC_ANON_CLASS 0x100
+#define ZEND_ACC_ANON_BOUND 0x200
+#define ZEND_ACC_INHERITED 0x400
+
+/* class implement interface(s) flag */
+#define ZEND_ACC_IMPLEMENT_INTERFACES 0x80000
+#define ZEND_ACC_IMPLEMENT_TRAITS 0x400000
+
+/* class constants updated */
+#define ZEND_ACC_CONSTANTS_UPDATED 0x100000
+
+/* user class has methods with static variables */
+#define ZEND_HAS_STATIC_IN_METHODS 0x800000
+
char *zend_visibility_string(uint32_t fn_flags);
typedef struct _zend_property_info {
@@ -319,20 +335,16 @@ typedef struct _zend_class_constant {
/* arg_info for internal functions */
typedef struct _zend_internal_arg_info {
const char *name;
- const char *class_name;
- zend_uchar type_hint;
+ zend_type type;
zend_uchar pass_by_reference;
- zend_bool allow_null;
zend_bool is_variadic;
} zend_internal_arg_info;
/* arg_info for user functions */
typedef struct _zend_arg_info {
zend_string *name;
- zend_string *class_name;
- zend_uchar type_hint;
+ zend_type type;
zend_uchar pass_by_reference;
- zend_bool allow_null;
zend_bool is_variadic;
} zend_arg_info;
@@ -343,10 +355,8 @@ typedef struct _zend_arg_info {
*/
typedef struct _zend_internal_function_info {
zend_uintptr_t required_num_args;
- const char *class_name;
- zend_uchar type_hint;
+ zend_type type;
zend_bool return_reference;
- zend_bool allow_null;
zend_bool _is_variadic;
} zend_internal_function_info;
@@ -399,6 +409,9 @@ struct _zend_op_array {
#define ZEND_RETURN_VALUE 0
#define ZEND_RETURN_REFERENCE 1
+/* zend_internal_function_handler */
+typedef void (*zif_handler)(INTERNAL_FUNCTION_PARAMETERS);
+
typedef struct _zend_internal_function {
/* Common elements */
zend_uchar type;
@@ -412,7 +425,7 @@ typedef struct _zend_internal_function {
zend_internal_arg_info *arg_info;
/* END of common elements */
- void (*handler)(INTERNAL_FUNCTION_PARAMETERS);
+ zif_handler handler;
struct _zend_module_entry *module;
void *reserved[ZEND_MAX_RESERVED_RESOURCES];
} zend_internal_function;
@@ -474,6 +487,7 @@ struct _zend_execute_data {
#define ZEND_CALL_ALLOCATED (1 << 7)
#define ZEND_CALL_GENERATOR (1 << 8)
#define ZEND_CALL_DYNAMIC (1 << 9)
+#define ZEND_CALL_FAKE_CLOSURE (1 << 10)
#define ZEND_CALL_INFO_SHIFT 16
@@ -765,12 +779,8 @@ ZEND_API int open_file_for_scanning(zend_file_handle *file_handle);
ZEND_API void init_op_array(zend_op_array *op_array, zend_uchar type, int initial_ops_size);
ZEND_API void destroy_op_array(zend_op_array *op_array);
ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle);
-ZEND_API void zend_cleanup_user_class_data(zend_class_entry *ce);
ZEND_API void zend_cleanup_internal_class_data(zend_class_entry *ce);
ZEND_API void zend_cleanup_internal_classes(void);
-ZEND_API void zend_cleanup_op_array_data(zend_op_array *op_array);
-ZEND_API int clean_non_persistent_function_full(zval *zv);
-ZEND_API int clean_non_persistent_class_full(zval *zv);
ZEND_API void destroy_zend_function(zend_function *function);
ZEND_API void zend_function_dtor(zval *zv);
@@ -816,7 +826,7 @@ int zendlex(zend_parser_stack_elem *elem);
int zend_add_literal(zend_op_array *op_array, zval *zv);
-ZEND_API void zend_assert_valid_class_name(const zend_string *const_name);
+void zend_assert_valid_class_name(const zend_string *const_name);
/* BEGIN: OPCODES */
@@ -896,7 +906,6 @@ ZEND_API void zend_assert_valid_class_name(const zend_string *const_name);
#define ZEND_ISSET 0x02000000
#define ZEND_ISEMPTY 0x01000000
#define ZEND_ISSET_ISEMPTY_MASK (ZEND_ISSET | ZEND_ISEMPTY)
-#define ZEND_QUICK_SET 0x00800000
#define ZEND_FETCH_ARG_MASK 0x000fffff
@@ -966,6 +975,11 @@ static zend_always_inline int zend_check_arg_send_type(const zend_function *zf,
#define ZEND_ARRAY_NOT_PACKED (1<<1)
#define ZEND_ARRAY_SIZE_SHIFT 2
+/* For "use" AST nodes and the seen symbol table */
+#define ZEND_SYMBOL_CLASS (1<<0)
+#define ZEND_SYMBOL_FUNCTION (1<<1)
+#define ZEND_SYMBOL_CONST (1<<2)
+
/* Pseudo-opcodes that are used only temporarily during compilation */
#define ZEND_GOTO 253
#define ZEND_BRK 254
@@ -1042,4 +1056,6 @@ ZEND_API zend_bool zend_binary_op_produces_numeric_string_error(uint32_t opcode,
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_config.nw.h b/Zend/zend_config.nw.h
index c2fe64c360..b4700370db 100644
--- a/Zend/zend_config.nw.h
+++ b/Zend/zend_config.nw.h
@@ -86,4 +86,6 @@ typedef unsigned int uint;
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_config.w32.h b/Zend/zend_config.w32.h
index bd6402d2d3..43626cefe4 100644
--- a/Zend/zend_config.w32.h
+++ b/Zend/zend_config.w32.h
@@ -90,4 +90,6 @@ typedef unsigned int uint;
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c
index 968a522151..14d712235a 100644
--- a/Zend/zend_constants.c
+++ b/Zend/zend_constants.c
@@ -69,20 +69,6 @@ void zend_copy_constants(HashTable *target, HashTable *source)
}
-static int clean_non_persistent_constant(zval *zv)
-{
- zend_constant *c = Z_PTR_P(zv);
- return (c->flags & CONST_PERSISTENT) ? ZEND_HASH_APPLY_STOP : ZEND_HASH_APPLY_REMOVE;
-}
-
-
-static int clean_non_persistent_constant_full(zval *zv)
-{
- zend_constant *c = Z_PTR_P(zv);
- return (c->flags & CONST_PERSISTENT) ? 0 : 1;
-}
-
-
static int clean_module_constant(zval *el, void *arg)
{
zend_constant *c = (zend_constant *)Z_PTR_P(el);
@@ -152,16 +138,6 @@ int zend_shutdown_constants(void)
return SUCCESS;
}
-
-void clean_non_persistent_constants(void)
-{
- if (EG(full_tables_cleanup)) {
- zend_hash_apply(EG(zend_constants), clean_non_persistent_constant_full);
- } else {
- zend_hash_reverse_apply(EG(zend_constants), clean_non_persistent_constant);
- }
-}
-
ZEND_API void zend_register_null_constant(const char *name, size_t name_len, int flags, int module_number)
{
zend_constant c;
@@ -439,7 +415,7 @@ failure:
}
}
-zend_constant *zend_quick_get_constant(const zval *key, uint32_t flags)
+ZEND_API zend_constant* ZEND_FASTCALL zend_quick_get_constant(const zval *key, uint32_t flags)
{
zend_constant *c;
@@ -490,6 +466,10 @@ ZEND_API int zend_register_constant(zend_constant *c)
printf("Registering constant for module %d\n", c->module_number);
#endif
+ if (c->module_number != PHP_USER_CONSTANT) {
+ c->name = zend_new_interned_string(c->name);
+ }
+
if (!(c->flags & CONST_CS)) {
lowercase_name = zend_string_alloc(ZSTR_LEN(c->name), c->flags & CONST_PERSISTENT);
zend_str_tolower_copy(ZSTR_VAL(lowercase_name), ZSTR_VAL(c->name), ZSTR_LEN(c->name));
@@ -536,4 +516,6 @@ ZEND_API int zend_register_constant(zend_constant *c)
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_constants.h b/Zend/zend_constants.h
index 6bb57cbf13..bbe2a4ce5c 100644
--- a/Zend/zend_constants.h
+++ b/Zend/zend_constants.h
@@ -64,7 +64,6 @@ void free_zend_constant(zval *zv);
int zend_startup_constants(void);
int zend_shutdown_constants(void);
void zend_register_standard_constants(void);
-void clean_non_persistent_constants(void);
ZEND_API int zend_verify_const_access(zend_class_constant *c, zend_class_entry *ce);
ZEND_API zval *zend_get_constant(zend_string *name);
ZEND_API zval *zend_get_constant_str(const char *name, size_t name_len);
@@ -77,7 +76,7 @@ ZEND_API void zend_register_string_constant(const char *name, size_t name_len, c
ZEND_API void zend_register_stringl_constant(const char *name, size_t name_len, char *strval, size_t strlen, int flags, int module_number);
ZEND_API int zend_register_constant(zend_constant *c);
void zend_copy_constants(HashTable *target, HashTable *sourc);
-zend_constant *zend_quick_get_constant(const zval *key, uint32_t flags);
+ZEND_API zend_constant* ZEND_FASTCALL zend_quick_get_constant(const zval *key, uint32_t flags);
END_EXTERN_C()
#define ZEND_CONSTANT_DTOR free_zend_constant
@@ -90,4 +89,6 @@ END_EXTERN_C()
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_default_classes.c b/Zend/zend_default_classes.c
index cc5120916c..a3e1cd69d8 100644
--- a/Zend/zend_default_classes.c
+++ b/Zend/zend_default_classes.c
@@ -43,4 +43,6 @@ ZEND_API void zend_register_default_classes(void)
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_dtrace.c b/Zend/zend_dtrace.c
index a92ba40546..79c963492a 100644
--- a/Zend/zend_dtrace.c
+++ b/Zend/zend_dtrace.c
@@ -115,3 +115,12 @@ ZEND_API void dtrace_execute_internal(zend_execute_data *execute_data, zval *ret
#endif /* HAVE_DTRACE */
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
+ */
diff --git a/Zend/zend_dtrace.h b/Zend/zend_dtrace.h
index f2250eccae..d1dbc49fd4 100644
--- a/Zend/zend_dtrace.h
+++ b/Zend/zend_dtrace.h
@@ -46,3 +46,13 @@ ZEND_API void dtrace_execute_internal(zend_execute_data *execute_data, zval *ret
#endif
#endif /* _ZEND_DTRACE_H */
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
+ */
diff --git a/Zend/zend_errors.h b/Zend/zend_errors.h
index 19e72689aa..03eec39237 100644
--- a/Zend/zend_errors.h
+++ b/Zend/zend_errors.h
@@ -49,4 +49,6 @@
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_exceptions.c b/Zend/zend_exceptions.c
index caa0d71372..f54158d707 100644
--- a/Zend/zend_exceptions.c
+++ b/Zend/zend_exceptions.c
@@ -88,18 +88,18 @@ void zend_exception_set_previous(zend_object *exception, zend_object *add_previo
ZVAL_OBJ(&zv, exception);
ex = &zv;
do {
- ancestor = zend_read_property_ex(i_get_exception_base(&pv), &pv, CG(known_strings)[ZEND_STR_PREVIOUS], 1, &rv);
+ ancestor = zend_read_property_ex(i_get_exception_base(&pv), &pv, ZSTR_KNOWN(ZEND_STR_PREVIOUS), 1, &rv);
while (Z_TYPE_P(ancestor) == IS_OBJECT) {
if (Z_OBJ_P(ancestor) == Z_OBJ_P(ex)) {
OBJ_RELEASE(add_previous);
return;
}
- ancestor = zend_read_property_ex(i_get_exception_base(ancestor), ancestor, CG(known_strings)[ZEND_STR_PREVIOUS], 1, &rv);
+ ancestor = zend_read_property_ex(i_get_exception_base(ancestor), ancestor, ZSTR_KNOWN(ZEND_STR_PREVIOUS), 1, &rv);
}
base_ce = i_get_exception_base(ex);
- previous = zend_read_property_ex(base_ce, ex, CG(known_strings)[ZEND_STR_PREVIOUS], 1, &rv);
+ previous = zend_read_property_ex(base_ce, ex, ZSTR_KNOWN(ZEND_STR_PREVIOUS), 1, &rv);
if (Z_TYPE_P(previous) == IS_NULL) {
- zend_update_property_ex(base_ce, ex, CG(known_strings)[ZEND_STR_PREVIOUS], &pv);
+ zend_update_property_ex(base_ce, ex, ZSTR_KNOWN(ZEND_STR_PREVIOUS), &pv);
GC_REFCOUNT(add_previous)--;
return;
}
@@ -223,17 +223,17 @@ static zend_object *zend_default_exception_new_ex(zend_class_entry *class_type,
if (EXPECTED(class_type != zend_ce_parse_error || !(filename = zend_get_compiled_filename()))) {
ZVAL_STRING(&tmp, zend_get_executed_filename());
- zend_update_property_ex(base_ce, &obj, CG(known_strings)[ZEND_STR_FILE], &tmp);
+ zend_update_property_ex(base_ce, &obj, ZSTR_KNOWN(ZEND_STR_FILE), &tmp);
zval_ptr_dtor(&tmp);
ZVAL_LONG(&tmp, zend_get_executed_lineno());
- zend_update_property_ex(base_ce, &obj, CG(known_strings)[ZEND_STR_LINE], &tmp);
+ zend_update_property_ex(base_ce, &obj, ZSTR_KNOWN(ZEND_STR_LINE), &tmp);
} else {
ZVAL_STR(&tmp, filename);
- zend_update_property_ex(base_ce, &obj, CG(known_strings)[ZEND_STR_FILE], &tmp);
+ zend_update_property_ex(base_ce, &obj, ZSTR_KNOWN(ZEND_STR_FILE), &tmp);
ZVAL_LONG(&tmp, zend_get_compiled_lineno());
- zend_update_property_ex(base_ce, &obj, CG(known_strings)[ZEND_STR_LINE], &tmp);
+ zend_update_property_ex(base_ce, &obj, ZSTR_KNOWN(ZEND_STR_LINE), &tmp);
}
- zend_update_property_ex(base_ce, &obj, CG(known_strings)[ZEND_STR_TRACE], &trace);
+ zend_update_property_ex(base_ce, &obj, ZSTR_KNOWN(ZEND_STR_TRACE), &trace);
return object;
}
@@ -289,16 +289,16 @@ ZEND_METHOD(exception, __construct)
if (message) {
ZVAL_STR(&tmp, message);
- zend_update_property_ex(base_ce, object, CG(known_strings)[ZEND_STR_MESSAGE], &tmp);
+ zend_update_property_ex(base_ce, object, ZSTR_KNOWN(ZEND_STR_MESSAGE), &tmp);
}
if (code) {
ZVAL_LONG(&tmp, code);
- zend_update_property_ex(base_ce, object, CG(known_strings)[ZEND_STR_CODE], &tmp);
+ zend_update_property_ex(base_ce, object, ZSTR_KNOWN(ZEND_STR_CODE), &tmp);
}
if (previous) {
- zend_update_property_ex(base_ce, object, CG(known_strings)[ZEND_STR_PREVIOUS], previous);
+ zend_update_property_ex(base_ce, object, ZSTR_KNOWN(ZEND_STR_PREVIOUS), previous);
}
}
/* }}} */
@@ -306,9 +306,9 @@ ZEND_METHOD(exception, __construct)
/* {{{ proto Exception::__wakeup()
Exception unserialize checks */
#define CHECK_EXC_TYPE(id, type) \
- pvalue = zend_read_property_ex(i_get_exception_base(object), (object), CG(known_strings)[id], 1, &value); \
+ pvalue = zend_read_property_ex(i_get_exception_base(object), (object), ZSTR_KNOWN(id), 1, &value); \
if (Z_TYPE_P(pvalue) != IS_NULL && Z_TYPE_P(pvalue) != type) { \
- zend_unset_property(i_get_exception_base(object), object, ZSTR_VAL(CG(known_strings)[id]), ZSTR_LEN(CG(known_strings)[id])); \
+ zend_unset_property(i_get_exception_base(object), object, ZSTR_VAL(ZSTR_KNOWN(id)), ZSTR_LEN(ZSTR_KNOWN(id))); \
}
ZEND_METHOD(exception, __wakeup)
@@ -358,31 +358,31 @@ ZEND_METHOD(error_exception, __construct)
if (message) {
ZVAL_STRING(&tmp, message);
- zend_update_property_ex(zend_ce_exception, object, CG(known_strings)[ZEND_STR_MESSAGE], &tmp);
+ zend_update_property_ex(zend_ce_exception, object, ZSTR_KNOWN(ZEND_STR_MESSAGE), &tmp);
zval_ptr_dtor(&tmp);
}
if (code) {
ZVAL_LONG(&tmp, code);
- zend_update_property_ex(zend_ce_exception, object, CG(known_strings)[ZEND_STR_CODE], &tmp);
+ zend_update_property_ex(zend_ce_exception, object, ZSTR_KNOWN(ZEND_STR_CODE), &tmp);
}
if (previous) {
- zend_update_property_ex(zend_ce_exception, object, CG(known_strings)[ZEND_STR_PREVIOUS], previous);
+ zend_update_property_ex(zend_ce_exception, object, ZSTR_KNOWN(ZEND_STR_PREVIOUS), previous);
}
ZVAL_LONG(&tmp, severity);
- zend_update_property_ex(zend_ce_exception, object, CG(known_strings)[ZEND_STR_SEVERITY], &tmp);
+ zend_update_property_ex(zend_ce_exception, object, ZSTR_KNOWN(ZEND_STR_SEVERITY), &tmp);
if (argc >= 4) {
ZVAL_STRING(&tmp, filename);
- zend_update_property_ex(zend_ce_exception, object, CG(known_strings)[ZEND_STR_FILE], &tmp);
+ zend_update_property_ex(zend_ce_exception, object, ZSTR_KNOWN(ZEND_STR_FILE), &tmp);
zval_ptr_dtor(&tmp);
if (argc < 5) {
lineno = 0; /* invalidate lineno */
}
ZVAL_LONG(&tmp, lineno);
- zend_update_property_ex(zend_ce_exception, object, CG(known_strings)[ZEND_STR_LINE], &tmp);
+ zend_update_property_ex(zend_ce_exception, object, ZSTR_KNOWN(ZEND_STR_LINE), &tmp);
}
}
/* }}} */
@@ -393,9 +393,9 @@ ZEND_METHOD(error_exception, __construct)
}
#define GET_PROPERTY(object, id) \
- zend_read_property_ex(i_get_exception_base(object), (object), CG(known_strings)[id], 0, &rv)
+ zend_read_property_ex(i_get_exception_base(object), (object), ZSTR_KNOWN(id), 0, &rv)
#define GET_PROPERTY_SILENT(object, id) \
- zend_read_property_ex(i_get_exception_base(object), (object), CG(known_strings)[id], 1, &rv)
+ zend_read_property_ex(i_get_exception_base(object), (object), ZSTR_KNOWN(id), 1, &rv)
/* {{{ proto string Exception|Error::getFile()
Get the file in which the exception occurred */
@@ -520,12 +520,8 @@ static void _build_trace_args(zval *arg, smart_str *str) /* {{{ */
smart_str_appends(str, ", ");
break;
case IS_DOUBLE: {
- double dval = Z_DVAL_P(arg);
- char *s_tmp;
- size_t l_tmp = zend_spprintf(&s_tmp, MAX_LENGTH_OF_DOUBLE + EG(precision) + 1, "%.*G", (int) EG(precision), dval); /* SAFE */
- smart_str_appendl(str, s_tmp, l_tmp);
+ smart_str_append_printf(str, "%.*G", (int) EG(precision), Z_DVAL_P(arg));
smart_str_appends(str, ", ");
- efree(s_tmp);
break;
}
case IS_ARRAY:
@@ -551,14 +547,14 @@ static void _build_trace_string(smart_str *str, HashTable *ht, uint32_t num) /*
smart_str_append_long(str, num);
smart_str_appendc(str, ' ');
- file = zend_hash_find(ht, CG(known_strings)[ZEND_STR_FILE]);
+ file = zend_hash_find(ht, ZSTR_KNOWN(ZEND_STR_FILE));
if (file) {
if (Z_TYPE_P(file) != IS_STRING) {
zend_error(E_WARNING, "Function name is no string");
smart_str_appends(str, "[unknown function]");
} else{
zend_long line;
- tmp = zend_hash_find(ht, CG(known_strings)[ZEND_STR_LINE]);
+ tmp = zend_hash_find(ht, ZSTR_KNOWN(ZEND_STR_LINE));
if (tmp) {
if (Z_TYPE_P(tmp) == IS_LONG) {
line = Z_LVAL_P(tmp);
@@ -577,11 +573,11 @@ static void _build_trace_string(smart_str *str, HashTable *ht, uint32_t num) /*
} else {
smart_str_appends(str, "[internal function]: ");
}
- TRACE_APPEND_KEY(CG(known_strings)[ZEND_STR_CLASS]);
- TRACE_APPEND_KEY(CG(known_strings)[ZEND_STR_TYPE]);
- TRACE_APPEND_KEY(CG(known_strings)[ZEND_STR_FUNCTION]);
+ TRACE_APPEND_KEY(ZSTR_KNOWN(ZEND_STR_CLASS));
+ TRACE_APPEND_KEY(ZSTR_KNOWN(ZEND_STR_TYPE));
+ TRACE_APPEND_KEY(ZSTR_KNOWN(ZEND_STR_FUNCTION));
smart_str_appendc(str, '(');
- tmp = zend_hash_find(ht, CG(known_strings)[ZEND_STR_ARGS]);
+ tmp = zend_hash_find(ht, ZSTR_KNOWN(ZEND_STR_ARGS));
if (tmp) {
if (Z_TYPE_P(tmp) == IS_ARRAY) {
size_t last_len = ZSTR_LEN(str->s);
@@ -618,7 +614,7 @@ ZEND_METHOD(exception, getTraceAsString)
object = getThis();
base_ce = i_get_exception_base(object);
- trace = zend_read_property_ex(base_ce, object, CG(known_strings)[ZEND_STR_TRACE], 1, &rv);
+ trace = zend_read_property_ex(base_ce, object, ZSTR_KNOWN(ZEND_STR_TRACE), 1, &rv);
if (Z_TYPE_P(trace) != IS_ARRAY) {
RETURN_FALSE;
}
@@ -651,30 +647,6 @@ ZEND_METHOD(exception, getPrevious)
ZVAL_COPY(return_value, GET_PROPERTY_SILENT(getThis(), ZEND_STR_PREVIOUS));
} /* }}} */
-size_t zend_spprintf(char **message, size_t max_len, const char *format, ...) /* {{{ */
-{
- va_list arg;
- size_t len;
-
- va_start(arg, format);
- len = zend_vspprintf(message, max_len, format, arg);
- va_end(arg);
- return len;
-}
-/* }}} */
-
-zend_string *zend_strpprintf(size_t max_len, const char *format, ...) /* {{{ */
-{
- va_list arg;
- zend_string *str;
-
- va_start(arg, format);
- str = zend_vstrpprintf(max_len, format, arg);
- va_end(arg);
- return str;
-}
-/* }}} */
-
/* {{{ proto string Exception|Error::__toString()
Obtain the string representation of the Exception object */
ZEND_METHOD(exception, __toString)
@@ -764,7 +736,7 @@ ZEND_METHOD(exception, __toString)
/* We store the result in the private property string so we can access
* the result in uncaught exception handlers without memleaks. */
ZVAL_STR(&tmp, str);
- zend_update_property_ex(base_ce, exception, CG(known_strings)[ZEND_STR_STRING], &tmp);
+ zend_update_property_ex(base_ce, exception, ZSTR_KNOWN(ZEND_STR_STRING), &tmp);
RETURN_STR(str);
}
@@ -924,12 +896,12 @@ ZEND_API ZEND_COLD zend_object *zend_throw_exception(zend_class_entry *exception
if (message) {
ZVAL_STRING(&tmp, message);
- zend_update_property_ex(exception_ce, &ex, CG(known_strings)[ZEND_STR_MESSAGE], &tmp);
+ zend_update_property_ex(exception_ce, &ex, ZSTR_KNOWN(ZEND_STR_MESSAGE), &tmp);
zval_ptr_dtor(&tmp);
}
if (code) {
ZVAL_LONG(&tmp, code);
- zend_update_property_ex(exception_ce, &ex, CG(known_strings)[ZEND_STR_CODE], &tmp);
+ zend_update_property_ex(exception_ce, &ex, ZSTR_KNOWN(ZEND_STR_CODE), &tmp);
}
zend_throw_exception_internal(&ex);
@@ -958,12 +930,12 @@ ZEND_API ZEND_COLD zend_object *zend_throw_error_exception(zend_class_entry *exc
zend_object *obj = zend_throw_exception(exception_ce, message, code);
ZVAL_OBJ(&ex, obj);
ZVAL_LONG(&tmp, severity);
- zend_update_property_ex(zend_ce_error_exception, &ex, CG(known_strings)[ZEND_STR_SEVERITY], &tmp);
+ zend_update_property_ex(zend_ce_error_exception, &ex, ZSTR_KNOWN(ZEND_STR_SEVERITY), &tmp);
return obj;
}
/* }}} */
-static void zend_error_va(int type, const char *file, uint lineno, const char *format, ...) /* {{{ */
+static void zend_error_va(int type, const char *file, uint32_t lineno, const char *format, ...) /* {{{ */
{
va_list args;
@@ -973,7 +945,7 @@ static void zend_error_va(int type, const char *file, uint lineno, const char *f
}
/* }}} */
-static void zend_error_helper(int type, const char *filename, const uint lineno, const char *format, ...) /* {{{ */
+static void zend_error_helper(int type, const char *filename, const uint32_t lineno, const char *format, ...) /* {{{ */
{
va_list va;
@@ -1011,7 +983,7 @@ ZEND_API ZEND_COLD void zend_exception_error(zend_object *ex, int severity) /* {
if (Z_TYPE(tmp) != IS_STRING) {
zend_error(E_WARNING, "%s::__toString() must return a string", ZSTR_VAL(ce_exception->name));
} else {
- zend_update_property_ex(i_get_exception_base(&exception), &exception, CG(known_strings)[ZEND_STR_STRING], &tmp);
+ zend_update_property_ex(i_get_exception_base(&exception), &exception, ZSTR_KNOWN(ZEND_STR_STRING), &tmp);
}
}
zval_ptr_dtor(&tmp);
@@ -1077,4 +1049,6 @@ ZEND_API ZEND_COLD void zend_throw_exception_object(zval *exception) /* {{{ */
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_exceptions.h b/Zend/zend_exceptions.h
index 6ca6f94db4..44d83cfb4e 100644
--- a/Zend/zend_exceptions.h
+++ b/Zend/zend_exceptions.h
@@ -68,9 +68,15 @@ extern ZEND_API void (*zend_throw_exception_hook)(zval *ex);
/* show an exception using zend_error(severity,...), severity should be E_ERROR */
ZEND_API ZEND_COLD void zend_exception_error(zend_object *exception, int severity);
-/* do not export, in php it's available thru spprintf directly */
-size_t zend_spprintf(char **message, size_t max_len, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 3, 4);
-zend_string *zend_strpprintf(size_t max_len, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3);
+#include "zend_globals.h"
+
+static zend_always_inline void zend_rethrow_exception(zend_execute_data *execute_data)
+{
+ if (EX(opline)->opcode != ZEND_HANDLE_EXCEPTION) {
+ EG(opline_before_exception) = EX(opline);
+ EX(opline) = EG(exception_op);
+ }
+}
END_EXTERN_C()
@@ -82,4 +88,6 @@ END_EXTERN_C()
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index 968618a6aa..8a9ddb2d8d 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -45,6 +45,46 @@
/* Virtual current working directory support */
#include "zend_virtual_cwd.h"
+#ifdef HAVE_GCC_GLOBAL_REGS
+# if defined(__GNUC__) && ZEND_GCC_VERSION >= 4008 && defined(i386)
+# define ZEND_VM_FP_GLOBAL_REG "%esi"
+# define ZEND_VM_IP_GLOBAL_REG "%edi"
+# elif defined(__GNUC__) && ZEND_GCC_VERSION >= 4008 && defined(__x86_64__)
+# define ZEND_VM_FP_GLOBAL_REG "%r14"
+# define ZEND_VM_IP_GLOBAL_REG "%r15"
+# elif defined(__GNUC__) && ZEND_GCC_VERSION >= 4008 && defined(__powerpc64__)
+# define ZEND_VM_FP_GLOBAL_REG "r28"
+# define ZEND_VM_IP_GLOBAL_REG "r29"
+# elif defined(__IBMC__) && ZEND_GCC_VERSION >= 4002 && defined(__powerpc64__)
+# define ZEND_VM_FP_GLOBAL_REG "r28"
+# define ZEND_VM_IP_GLOBAL_REG "r29"
+# endif
+#endif
+
+#if defined(ZEND_VM_FP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
+# pragma GCC diagnostic ignored "-Wvolatile-register-var"
+ register zend_execute_data* volatile execute_data __asm__(ZEND_VM_FP_GLOBAL_REG);
+# pragma GCC diagnostic warning "-Wvolatile-register-var"
+# define EXECUTE_DATA_D void
+# define EXECUTE_DATA_C
+# define EXECUTE_DATA_DC
+# define EXECUTE_DATA_CC
+# define NO_EXECUTE_DATA_CC
+#else
+# define EXECUTE_DATA_D zend_execute_data* execute_data
+# define EXECUTE_DATA_C execute_data
+# define EXECUTE_DATA_DC , EXECUTE_DATA_D
+# define EXECUTE_DATA_CC , EXECUTE_DATA_C
+# define NO_EXECUTE_DATA_CC , NULL
+#endif
+
+#if defined(ZEND_VM_IP_GLOBAL_REG) && ((ZEND_VM_KIND == ZEND_VM_KIND_CALL) || (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID))
+# pragma GCC diagnostic ignored "-Wvolatile-register-var"
+ register const zend_op* volatile opline __asm__(ZEND_VM_IP_GLOBAL_REG);
+# pragma GCC diagnostic warning "-Wvolatile-register-var"
+#else
+#endif
+
#define _CONST_CODE 0
#define _TMP_CODE 1
#define _VAR_CODE 2
@@ -53,21 +93,16 @@
typedef int (ZEND_FASTCALL *incdec_t)(zval *);
-#define get_zval_ptr(op_type, node, ex, should_free, type) _get_zval_ptr(op_type, node, ex, should_free, type)
-#define get_zval_ptr_deref(op_type, node, ex, should_free, type) _get_zval_ptr_deref(op_type, node, ex, should_free, type)
-#define get_zval_ptr_r(op_type, node, ex, should_free) _get_zval_ptr_r(op_type, node, ex, should_free)
-#define get_zval_ptr_r_deref(op_type, node, ex, should_free) _get_zval_ptr_r_deref(op_type, node, ex, should_free)
-#define get_zval_ptr_undef(op_type, node, ex, should_free, type) _get_zval_ptr_undef(op_type, node, ex, should_free, type)
-#define get_zval_ptr_ptr(op_type, node, ex, should_free, type) _get_zval_ptr_ptr(op_type, node, ex, should_free, type)
-#define get_zval_ptr_ptr_undef(op_type, node, ex, should_free, type) _get_zval_ptr_ptr(op_type, node, ex, should_free, type)
-#define get_obj_zval_ptr(op_type, node, ex, should_free, type) _get_obj_zval_ptr(op_type, node, ex, should_free, type)
-#define get_obj_zval_ptr_undef(op_type, node, ex, should_free, type) _get_obj_zval_ptr_undef(op_type, node, ex, should_free, type)
-#define get_obj_zval_ptr_ptr(op_type, node, ex, should_free, type) _get_obj_zval_ptr_ptr(op_type, node, ex, should_free, type)
-
-/* Prototypes */
-static void zend_extension_statement_handler(const zend_extension *extension, zend_execute_data *frame);
-static void zend_extension_fcall_begin_handler(const zend_extension *extension, zend_execute_data *frame);
-static void zend_extension_fcall_end_handler(const zend_extension *extension, zend_execute_data *frame);
+#define get_zval_ptr(op_type, node, should_free, type) _get_zval_ptr(op_type, node, should_free, type EXECUTE_DATA_CC)
+#define get_zval_ptr_deref(op_type, node, should_free, type) _get_zval_ptr_deref(op_type, node, should_free, type EXECUTE_DATA_CC)
+#define get_zval_ptr_r(op_type, node, should_free) _get_zval_ptr_r(op_type, node, should_free EXECUTE_DATA_CC)
+#define get_zval_ptr_r_deref(op_type, node, should_free) _get_zval_ptr_r_deref(op_type, node, should_free EXECUTE_DATA_CC)
+#define get_zval_ptr_undef(op_type, node, should_free, type) _get_zval_ptr_undef(op_type, node, should_free, type EXECUTE_DATA_CC)
+#define get_zval_ptr_ptr(op_type, node, should_free, type) _get_zval_ptr_ptr(op_type, node, should_free, type EXECUTE_DATA_CC)
+#define get_zval_ptr_ptr_undef(op_type, node, should_free, type) _get_zval_ptr_ptr(op_type, node, should_free, type EXECUTE_DATA_CC)
+#define get_obj_zval_ptr(op_type, node, should_free, type) _get_obj_zval_ptr(op_type, node, should_free, type EXECUTE_DATA_CC)
+#define get_obj_zval_ptr_undef(op_type, node, should_free, type) _get_obj_zval_ptr_undef(op_type, node, should_free, type EXECUTE_DATA_CC)
+#define get_obj_zval_ptr_ptr(op_type, node, should_free, type) _get_obj_zval_ptr_ptr(op_type, node, should_free, type EXECUTE_DATA_CC)
#define RETURN_VALUE_USED(opline) ((opline)->result_type != IS_UNUSED)
@@ -120,19 +155,16 @@ ZEND_API const zend_internal_function zend_pass_function = {
#define CV_DEF_OF(i) (EX(func)->op_array.vars[i])
-#define ZEND_VM_MAIN_STACK_PAGE_SLOTS (16 * 1024) /* should be a power of 2 */
-#define ZEND_VM_GENERATOR_STACK_PAGE_SLOTS (256)
+#define ZEND_VM_STACK_PAGE_SLOTS (16 * 1024) /* should be a power of 2 */
-#define ZEND_VM_STACK_PAGE_SLOTS(gen) ((gen) ? ZEND_VM_GENERATOR_STACK_PAGE_SLOTS : ZEND_VM_MAIN_STACK_PAGE_SLOTS)
+#define ZEND_VM_STACK_PAGE_SIZE (ZEND_VM_STACK_PAGE_SLOTS * sizeof(zval))
-#define ZEND_VM_STACK_PAGE_SIZE(gen) (ZEND_VM_STACK_PAGE_SLOTS(gen) * sizeof(zval))
+#define ZEND_VM_STACK_FREE_PAGE_SIZE \
+ ((ZEND_VM_STACK_PAGE_SLOTS - ZEND_VM_STACK_HEADER_SLOTS) * sizeof(zval))
-#define ZEND_VM_STACK_FREE_PAGE_SIZE(gen) \
- ((ZEND_VM_STACK_PAGE_SLOTS(gen) - ZEND_VM_STACK_HEADER_SLOTS) * sizeof(zval))
-
-#define ZEND_VM_STACK_PAGE_ALIGNED_SIZE(gen, size) \
+#define ZEND_VM_STACK_PAGE_ALIGNED_SIZE(size) \
(((size) + ZEND_VM_STACK_HEADER_SLOTS * sizeof(zval) \
- + (ZEND_VM_STACK_PAGE_SIZE(gen) - 1)) & ~(ZEND_VM_STACK_PAGE_SIZE(gen) - 1))
+ + (ZEND_VM_STACK_PAGE_SIZE - 1)) & ~(ZEND_VM_STACK_PAGE_SIZE - 1))
static zend_always_inline zend_vm_stack zend_vm_stack_new_page(size_t size, zend_vm_stack prev) {
zend_vm_stack page = (zend_vm_stack)emalloc(size);
@@ -145,7 +177,7 @@ static zend_always_inline zend_vm_stack zend_vm_stack_new_page(size_t size, zend
ZEND_API void zend_vm_stack_init(void)
{
- EG(vm_stack) = zend_vm_stack_new_page(ZEND_VM_STACK_PAGE_SIZE(0 /* main stack */), NULL);
+ EG(vm_stack) = zend_vm_stack_new_page(ZEND_VM_STACK_PAGE_SIZE, NULL);
EG(vm_stack)->top++;
EG(vm_stack_top) = EG(vm_stack)->top;
EG(vm_stack_end) = EG(vm_stack)->end;
@@ -170,8 +202,8 @@ ZEND_API void* zend_vm_stack_extend(size_t size)
stack = EG(vm_stack);
stack->top = EG(vm_stack_top);
EG(vm_stack) = stack = zend_vm_stack_new_page(
- EXPECTED(size < ZEND_VM_STACK_FREE_PAGE_SIZE(0)) ?
- ZEND_VM_STACK_PAGE_SIZE(0) : ZEND_VM_STACK_PAGE_ALIGNED_SIZE(0, size),
+ EXPECTED(size < ZEND_VM_STACK_FREE_PAGE_SIZE) ?
+ ZEND_VM_STACK_PAGE_SIZE : ZEND_VM_STACK_PAGE_ALIGNED_SIZE(size),
stack);
ptr = stack->top;
EG(vm_stack_top) = (void*)(((char*)ptr) + size);
@@ -184,7 +216,7 @@ ZEND_API zval* zend_get_compiled_variable_value(const zend_execute_data *execute
return EX_VAR(var);
}
-static zend_always_inline zval *_get_zval_ptr_tmp(uint32_t var, const zend_execute_data *execute_data, zend_free_op *should_free)
+static zend_always_inline zval *_get_zval_ptr_tmp(uint32_t var, zend_free_op *should_free EXECUTE_DATA_DC)
{
zval *ret = EX_VAR(var);
*should_free = ret;
@@ -194,7 +226,7 @@ static zend_always_inline zval *_get_zval_ptr_tmp(uint32_t var, const zend_execu
return ret;
}
-static zend_always_inline zval *_get_zval_ptr_var(uint32_t var, const zend_execute_data *execute_data, zend_free_op *should_free)
+static zend_always_inline zval *_get_zval_ptr_var(uint32_t var, zend_free_op *should_free EXECUTE_DATA_DC)
{
zval *ret = EX_VAR(var);
@@ -202,7 +234,7 @@ static zend_always_inline zval *_get_zval_ptr_var(uint32_t var, const zend_execu
return ret;
}
-static zend_always_inline zval *_get_zval_ptr_var_deref(uint32_t var, const zend_execute_data *execute_data, zend_free_op *should_free)
+static zend_always_inline zval *_get_zval_ptr_var_deref(uint32_t var, zend_free_op *should_free EXECUTE_DATA_DC)
{
zval *ret = EX_VAR(var);
@@ -211,7 +243,7 @@ static zend_always_inline zval *_get_zval_ptr_var_deref(uint32_t var, const zend
return ret;
}
-static zend_never_inline ZEND_COLD void zval_undefined_cv(uint32_t var, const zend_execute_data *execute_data)
+static zend_never_inline ZEND_COLD void zval_undefined_cv(uint32_t var EXECUTE_DATA_DC)
{
if (EXPECTED(EG(exception) == NULL)) {
zend_string *cv = CV_DEF_OF(EX_VAR_TO_NUM(var));
@@ -219,18 +251,18 @@ static zend_never_inline ZEND_COLD void zval_undefined_cv(uint32_t var, const ze
}
}
-static zend_never_inline zval *_get_zval_cv_lookup(zval *ptr, uint32_t var, int type, const zend_execute_data *execute_data)
+static zend_never_inline zval *_get_zval_cv_lookup(zval *ptr, uint32_t var, int type EXECUTE_DATA_DC)
{
switch (type) {
case BP_VAR_R:
case BP_VAR_UNSET:
- zval_undefined_cv(var, execute_data);
+ zval_undefined_cv(var EXECUTE_DATA_CC);
/* break missing intentionally */
case BP_VAR_IS:
ptr = &EG(uninitialized_zval);
break;
case BP_VAR_RW:
- zval_undefined_cv(var, execute_data);
+ zval_undefined_cv(var EXECUTE_DATA_CC);
/* break missing intentionally */
case BP_VAR_W:
ZVAL_NULL(ptr);
@@ -239,107 +271,107 @@ static zend_never_inline zval *_get_zval_cv_lookup(zval *ptr, uint32_t var, int
return ptr;
}
-static zend_always_inline zval *_get_zval_cv_lookup_BP_VAR_R(zval *ptr, uint32_t var, const zend_execute_data *execute_data)
+static zend_always_inline zval *_get_zval_cv_lookup_BP_VAR_R(zval *ptr, uint32_t var EXECUTE_DATA_DC)
{
- zval_undefined_cv(var, execute_data);
+ zval_undefined_cv(var EXECUTE_DATA_CC);
return &EG(uninitialized_zval);
}
-static zend_always_inline zval *_get_zval_cv_lookup_BP_VAR_UNSET(zval *ptr, uint32_t var, const zend_execute_data *execute_data)
+static zend_always_inline zval *_get_zval_cv_lookup_BP_VAR_UNSET(zval *ptr, uint32_t var EXECUTE_DATA_DC)
{
- zval_undefined_cv(var, execute_data);
+ zval_undefined_cv(var EXECUTE_DATA_CC);
return &EG(uninitialized_zval);
}
-static zend_always_inline zval *_get_zval_cv_lookup_BP_VAR_RW(zval *ptr, uint32_t var, const zend_execute_data *execute_data)
+static zend_always_inline zval *_get_zval_cv_lookup_BP_VAR_RW(zval *ptr, uint32_t var EXECUTE_DATA_DC)
{
ZVAL_NULL(ptr);
- zval_undefined_cv(var, execute_data);
+ zval_undefined_cv(var EXECUTE_DATA_CC);
return ptr;
}
-static zend_always_inline zval *_get_zval_cv_lookup_BP_VAR_W(zval *ptr, uint32_t var, const zend_execute_data *execute_data)
+static zend_always_inline zval *_get_zval_cv_lookup_BP_VAR_W(zval *ptr, uint32_t var EXECUTE_DATA_DC)
{
ZVAL_NULL(ptr);
return ptr;
}
-static zend_always_inline zval *_get_zval_ptr_cv(const zend_execute_data *execute_data, uint32_t var, int type)
+static zend_always_inline zval *_get_zval_ptr_cv(uint32_t var, int type EXECUTE_DATA_DC)
{
zval *ret = EX_VAR(var);
if (UNEXPECTED(Z_TYPE_P(ret) == IS_UNDEF)) {
- return _get_zval_cv_lookup(ret, var, type, execute_data);
+ return _get_zval_cv_lookup(ret, var, type EXECUTE_DATA_CC);
}
return ret;
}
-static zend_always_inline zval *_get_zval_ptr_cv_undef(const zend_execute_data *execute_data, uint32_t var)
+static zend_always_inline zval *_get_zval_ptr_cv_undef(uint32_t var EXECUTE_DATA_DC)
{
return EX_VAR(var);
}
-static zend_always_inline zval *_get_zval_ptr_cv_deref(const zend_execute_data *execute_data, uint32_t var, int type)
+static zend_always_inline zval *_get_zval_ptr_cv_deref(uint32_t var, int type EXECUTE_DATA_DC)
{
zval *ret = EX_VAR(var);
if (UNEXPECTED(Z_TYPE_P(ret) == IS_UNDEF)) {
- return _get_zval_cv_lookup(ret, var, type, execute_data);
+ return _get_zval_cv_lookup(ret, var, type EXECUTE_DATA_CC);
}
ZVAL_DEREF(ret);
return ret;
}
-static zend_always_inline zval *_get_zval_ptr_cv_BP_VAR_R(const zend_execute_data *execute_data, uint32_t var)
+static zend_always_inline zval *_get_zval_ptr_cv_BP_VAR_R(uint32_t var EXECUTE_DATA_DC)
{
zval *ret = EX_VAR(var);
if (UNEXPECTED(Z_TYPE_P(ret) == IS_UNDEF)) {
- return _get_zval_cv_lookup_BP_VAR_R(ret, var, execute_data);
+ return _get_zval_cv_lookup_BP_VAR_R(ret, var EXECUTE_DATA_CC);
}
return ret;
}
-static zend_always_inline zval *_get_zval_ptr_cv_deref_BP_VAR_R(const zend_execute_data *execute_data, uint32_t var)
+static zend_always_inline zval *_get_zval_ptr_cv_deref_BP_VAR_R(uint32_t var EXECUTE_DATA_DC)
{
zval *ret = EX_VAR(var);
if (UNEXPECTED(Z_TYPE_P(ret) == IS_UNDEF)) {
- return _get_zval_cv_lookup_BP_VAR_R(ret, var, execute_data);
+ return _get_zval_cv_lookup_BP_VAR_R(ret, var EXECUTE_DATA_CC);
}
ZVAL_DEREF(ret);
return ret;
}
-static zend_always_inline zval *_get_zval_ptr_cv_BP_VAR_UNSET(const zend_execute_data *execute_data, uint32_t var)
+static zend_always_inline zval *_get_zval_ptr_cv_BP_VAR_UNSET(uint32_t var EXECUTE_DATA_DC)
{
zval *ret = EX_VAR(var);
if (UNEXPECTED(Z_TYPE_P(ret) == IS_UNDEF)) {
- return _get_zval_cv_lookup_BP_VAR_UNSET(ret, var, execute_data);
+ return _get_zval_cv_lookup_BP_VAR_UNSET(ret, var EXECUTE_DATA_CC);
}
return ret;
}
-static zend_always_inline zval *_get_zval_ptr_cv_deref_BP_VAR_UNSET(const zend_execute_data *execute_data, uint32_t var)
+static zend_always_inline zval *_get_zval_ptr_cv_deref_BP_VAR_UNSET(uint32_t var EXECUTE_DATA_DC)
{
zval *ret = EX_VAR(var);
if (UNEXPECTED(Z_TYPE_P(ret) == IS_UNDEF)) {
- return _get_zval_cv_lookup_BP_VAR_UNSET(ret, var, execute_data);
+ return _get_zval_cv_lookup_BP_VAR_UNSET(ret, var EXECUTE_DATA_CC);
}
ZVAL_DEREF(ret);
return ret;
}
-static zend_always_inline zval *_get_zval_ptr_cv_BP_VAR_IS(const zend_execute_data *execute_data, uint32_t var)
+static zend_always_inline zval *_get_zval_ptr_cv_BP_VAR_IS(uint32_t var EXECUTE_DATA_DC)
{
zval *ret = EX_VAR(var);
return ret;
}
-static zend_always_inline zval *_get_zval_ptr_cv_deref_BP_VAR_IS(const zend_execute_data *execute_data, uint32_t var)
+static zend_always_inline zval *_get_zval_ptr_cv_deref_BP_VAR_IS(uint32_t var EXECUTE_DATA_DC)
{
zval *ret = EX_VAR(var);
@@ -347,169 +379,169 @@ static zend_always_inline zval *_get_zval_ptr_cv_deref_BP_VAR_IS(const zend_exec
return ret;
}
-static zend_always_inline zval *_get_zval_ptr_cv_BP_VAR_RW(const zend_execute_data *execute_data, uint32_t var)
+static zend_always_inline zval *_get_zval_ptr_cv_BP_VAR_RW(uint32_t var EXECUTE_DATA_DC)
{
zval *ret = EX_VAR(var);
if (UNEXPECTED(Z_TYPE_P(ret) == IS_UNDEF)) {
- return _get_zval_cv_lookup_BP_VAR_RW(ret, var, execute_data);
+ return _get_zval_cv_lookup_BP_VAR_RW(ret, var EXECUTE_DATA_CC);
}
return ret;
}
-static zend_always_inline zval *_get_zval_ptr_cv_deref_BP_VAR_RW(const zend_execute_data *execute_data, uint32_t var)
+static zend_always_inline zval *_get_zval_ptr_cv_deref_BP_VAR_RW(uint32_t var EXECUTE_DATA_DC)
{
zval *ret = EX_VAR(var);
if (UNEXPECTED(Z_TYPE_P(ret) == IS_UNDEF)) {
- return _get_zval_cv_lookup_BP_VAR_RW(ret, var, execute_data);
+ return _get_zval_cv_lookup_BP_VAR_RW(ret, var EXECUTE_DATA_CC);
}
ZVAL_DEREF(ret);
return ret;
}
-static zend_always_inline zval *_get_zval_ptr_cv_BP_VAR_W(const zend_execute_data *execute_data, uint32_t var)
+static zend_always_inline zval *_get_zval_ptr_cv_BP_VAR_W(uint32_t var EXECUTE_DATA_DC)
{
zval *ret = EX_VAR(var);
if (Z_TYPE_P(ret) == IS_UNDEF) {
- return _get_zval_cv_lookup_BP_VAR_W(ret, var, execute_data);
+ return _get_zval_cv_lookup_BP_VAR_W(ret, var EXECUTE_DATA_CC);
}
return ret;
}
-static zend_always_inline zval *_get_zval_ptr_cv_undef_BP_VAR_W(const zend_execute_data *execute_data, uint32_t var)
+static zend_always_inline zval *_get_zval_ptr_cv_undef_BP_VAR_W(uint32_t var EXECUTE_DATA_DC)
{
return EX_VAR(var);
}
-static zend_always_inline zval *_get_zval_ptr_cv_undef_BP_VAR_RW(const zend_execute_data *execute_data, uint32_t var)
+static zend_always_inline zval *_get_zval_ptr_cv_undef_BP_VAR_RW(uint32_t var EXECUTE_DATA_DC)
{
return EX_VAR(var);
}
-static zend_always_inline zval *_get_zval_ptr_cv_undef_BP_VAR_UNSET(const zend_execute_data *execute_data, uint32_t var)
+static zend_always_inline zval *_get_zval_ptr_cv_undef_BP_VAR_UNSET(uint32_t var EXECUTE_DATA_DC)
{
return EX_VAR(var);
}
-static zend_always_inline zval *_get_zval_ptr_cv_deref_BP_VAR_W(const zend_execute_data *execute_data, uint32_t var)
+static zend_always_inline zval *_get_zval_ptr_cv_deref_BP_VAR_W(uint32_t var EXECUTE_DATA_DC)
{
zval *ret = EX_VAR(var);
if (Z_TYPE_P(ret) == IS_UNDEF) {
- return _get_zval_cv_lookup_BP_VAR_W(ret, var, execute_data);
+ return _get_zval_cv_lookup_BP_VAR_W(ret, var EXECUTE_DATA_CC);
}
ZVAL_DEREF(ret);
return ret;
}
-static zend_always_inline zval *_get_zval_ptr(int op_type, znode_op node, const zend_execute_data *execute_data, zend_free_op *should_free, int type)
+static zend_always_inline zval *_get_zval_ptr(int op_type, znode_op node, zend_free_op *should_free, int type EXECUTE_DATA_DC)
{
if (op_type & (IS_TMP_VAR|IS_VAR)) {
if (op_type == IS_TMP_VAR) {
- return _get_zval_ptr_tmp(node.var, execute_data, should_free);
+ return _get_zval_ptr_tmp(node.var, should_free EXECUTE_DATA_CC);
} else {
ZEND_ASSERT(op_type == IS_VAR);
- return _get_zval_ptr_var(node.var, execute_data, should_free);
+ return _get_zval_ptr_var(node.var, should_free EXECUTE_DATA_CC);
}
} else {
*should_free = NULL;
if (op_type == IS_CONST) {
return EX_CONSTANT(node);
} else if (op_type == IS_CV) {
- return _get_zval_ptr_cv(execute_data, node.var, type);
+ return _get_zval_ptr_cv(node.var, type EXECUTE_DATA_CC);
} else {
return NULL;
}
}
}
-static zend_always_inline zval *_get_zval_ptr_r(int op_type, znode_op node, const zend_execute_data *execute_data, zend_free_op *should_free)
+static zend_always_inline zval *_get_zval_ptr_r(int op_type, znode_op node, zend_free_op *should_free EXECUTE_DATA_DC)
{
if (op_type & (IS_TMP_VAR|IS_VAR)) {
if (op_type == IS_TMP_VAR) {
- return _get_zval_ptr_tmp(node.var, execute_data, should_free);
+ return _get_zval_ptr_tmp(node.var, should_free EXECUTE_DATA_CC);
} else {
ZEND_ASSERT(op_type == IS_VAR);
- return _get_zval_ptr_var(node.var, execute_data, should_free);
+ return _get_zval_ptr_var(node.var, should_free EXECUTE_DATA_CC);
}
} else {
*should_free = NULL;
if (op_type == IS_CONST) {
return EX_CONSTANT(node);
} else if (op_type == IS_CV) {
- return _get_zval_ptr_cv_BP_VAR_R(execute_data, node.var);
+ return _get_zval_ptr_cv_BP_VAR_R(node.var EXECUTE_DATA_CC);
} else {
return NULL;
}
}
}
-static zend_always_inline zval *_get_zval_ptr_deref(int op_type, znode_op node, const zend_execute_data *execute_data, zend_free_op *should_free, int type)
+static zend_always_inline zval *_get_zval_ptr_deref(int op_type, znode_op node, zend_free_op *should_free, int type EXECUTE_DATA_DC)
{
if (op_type & (IS_TMP_VAR|IS_VAR)) {
if (op_type == IS_TMP_VAR) {
- return _get_zval_ptr_tmp(node.var, execute_data, should_free);
+ return _get_zval_ptr_tmp(node.var, should_free EXECUTE_DATA_CC);
} else {
ZEND_ASSERT(op_type == IS_VAR);
- return _get_zval_ptr_var_deref(node.var, execute_data, should_free);
+ return _get_zval_ptr_var_deref(node.var, should_free EXECUTE_DATA_CC);
}
} else {
*should_free = NULL;
if (op_type == IS_CONST) {
return EX_CONSTANT(node);
} else if (op_type == IS_CV) {
- return _get_zval_ptr_cv_deref(execute_data, node.var, type);
+ return _get_zval_ptr_cv_deref(node.var, type EXECUTE_DATA_CC);
} else {
return NULL;
}
}
}
-static zend_always_inline zval *_get_zval_ptr_r_deref(int op_type, znode_op node, const zend_execute_data *execute_data, zend_free_op *should_free)
+static zend_always_inline zval *_get_zval_ptr_r_deref(int op_type, znode_op node, zend_free_op *should_free EXECUTE_DATA_DC)
{
if (op_type & (IS_TMP_VAR|IS_VAR)) {
if (op_type == IS_TMP_VAR) {
- return _get_zval_ptr_tmp(node.var, execute_data, should_free);
+ return _get_zval_ptr_tmp(node.var, should_free EXECUTE_DATA_CC);
} else {
ZEND_ASSERT(op_type == IS_VAR);
- return _get_zval_ptr_var_deref(node.var, execute_data, should_free);
+ return _get_zval_ptr_var_deref(node.var, should_free EXECUTE_DATA_CC);
}
} else {
*should_free = NULL;
if (op_type == IS_CONST) {
return EX_CONSTANT(node);
} else if (op_type == IS_CV) {
- return _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, node.var);
+ return _get_zval_ptr_cv_deref_BP_VAR_R(node.var EXECUTE_DATA_CC);
} else {
return NULL;
}
}
}
-static zend_always_inline zval *_get_zval_ptr_undef(int op_type, znode_op node, const zend_execute_data *execute_data, zend_free_op *should_free, int type)
+static zend_always_inline zval *_get_zval_ptr_undef(int op_type, znode_op node, zend_free_op *should_free, int type EXECUTE_DATA_DC)
{
if (op_type & (IS_TMP_VAR|IS_VAR)) {
if (op_type == IS_TMP_VAR) {
- return _get_zval_ptr_tmp(node.var, execute_data, should_free);
+ return _get_zval_ptr_tmp(node.var, should_free EXECUTE_DATA_CC);
} else {
ZEND_ASSERT(op_type == IS_VAR);
- return _get_zval_ptr_var(node.var, execute_data, should_free);
+ return _get_zval_ptr_var(node.var, should_free EXECUTE_DATA_CC);
}
} else {
*should_free = NULL;
if (op_type == IS_CONST) {
return EX_CONSTANT(node);
} else if (op_type == IS_CV) {
- return _get_zval_ptr_cv_undef(execute_data, node.var);
+ return _get_zval_ptr_cv_undef(node.var EXECUTE_DATA_CC);
} else {
return NULL;
}
}
}
-static zend_always_inline zval *_get_zval_ptr_ptr_var(uint32_t var, const zend_execute_data *execute_data, zend_free_op *should_free)
+static zend_always_inline zval *_get_zval_ptr_ptr_var(uint32_t var, zend_free_op *should_free EXECUTE_DATA_DC)
{
zval *ret = EX_VAR(var);
@@ -522,47 +554,47 @@ static zend_always_inline zval *_get_zval_ptr_ptr_var(uint32_t var, const zend_e
return ret;
}
-static inline zval *_get_zval_ptr_ptr(int op_type, znode_op node, const zend_execute_data *execute_data, zend_free_op *should_free, int type)
+static inline zval *_get_zval_ptr_ptr(int op_type, znode_op node, zend_free_op *should_free, int type EXECUTE_DATA_DC)
{
if (op_type == IS_CV) {
*should_free = NULL;
- return _get_zval_ptr_cv(execute_data, node.var, type);
+ return _get_zval_ptr_cv(node.var, type EXECUTE_DATA_CC);
} else /* if (op_type == IS_VAR) */ {
ZEND_ASSERT(op_type == IS_VAR);
- return _get_zval_ptr_ptr_var(node.var, execute_data, should_free);
+ return _get_zval_ptr_ptr_var(node.var, should_free EXECUTE_DATA_CC);
}
}
-static zend_always_inline zval *_get_obj_zval_ptr_unused(zend_execute_data *execute_data)
+static zend_always_inline zval *_get_obj_zval_ptr_unused(EXECUTE_DATA_D)
{
return &EX(This);
}
-static inline zval *_get_obj_zval_ptr(int op_type, znode_op op, zend_execute_data *execute_data, zend_free_op *should_free, int type)
+static inline zval *_get_obj_zval_ptr(int op_type, znode_op op, zend_free_op *should_free, int type EXECUTE_DATA_DC)
{
if (op_type == IS_UNUSED) {
*should_free = NULL;
return &EX(This);
}
- return get_zval_ptr(op_type, op, execute_data, should_free, type);
+ return get_zval_ptr(op_type, op, should_free, type);
}
-static inline zval *_get_obj_zval_ptr_undef(int op_type, znode_op op, zend_execute_data *execute_data, zend_free_op *should_free, int type)
+static inline zval *_get_obj_zval_ptr_undef(int op_type, znode_op op, zend_free_op *should_free, int type EXECUTE_DATA_DC)
{
if (op_type == IS_UNUSED) {
*should_free = NULL;
return &EX(This);
}
- return get_zval_ptr_undef(op_type, op, execute_data, should_free, type);
+ return get_zval_ptr_undef(op_type, op, should_free, type);
}
-static inline zval *_get_obj_zval_ptr_ptr(int op_type, znode_op node, zend_execute_data *execute_data, zend_free_op *should_free, int type)
+static inline zval *_get_obj_zval_ptr_ptr(int op_type, znode_op node, zend_free_op *should_free, int type EXECUTE_DATA_DC)
{
if (op_type == IS_UNUSED) {
*should_free = NULL;
return &EX(This);
}
- return get_zval_ptr_ptr(op_type, node, execute_data, should_free, type);
+ return get_zval_ptr_ptr(op_type, node, should_free, type);
}
static inline void zend_assign_to_variable_reference(zval *variable_ptr, zval *value_ptr)
@@ -585,7 +617,7 @@ static inline void zend_assign_to_variable_reference(zval *variable_ptr, zval *v
zval_dtor_func(garbage);
return;
} else {
- GC_ZVAL_CHECK_POSSIBLE_ROOT(variable_ptr);
+ gc_check_possible_root(garbage);
}
}
ZVAL_REF(variable_ptr, ref);
@@ -608,25 +640,6 @@ static inline int make_real_object(zval *object)
return 1;
}
-static zend_class_entry *zend_verify_internal_arg_class_kind(
- const zend_internal_arg_info *cur_arg_info)
-{
- zend_string *key;
- zend_class_entry *ce;
- ALLOCA_FLAG(use_heap);
-
- ZSTR_ALLOCA_INIT(key, cur_arg_info->class_name, strlen(cur_arg_info->class_name), use_heap);
- ce = zend_fetch_class(key, (ZEND_FETCH_CLASS_AUTO | ZEND_FETCH_CLASS_NO_AUTOLOAD));
- ZSTR_ALLOCA_FREE(key, use_heap);
-
- return ce;
-}
-
-static zend_always_inline zend_class_entry* zend_verify_arg_class_kind(const zend_arg_info *cur_arg_info)
-{
- return zend_fetch_class(cur_arg_info->class_name, (ZEND_FETCH_CLASS_AUTO | ZEND_FETCH_CLASS_NO_AUTOLOAD));
-}
-
static ZEND_COLD void zend_verify_type_error_common(
const zend_function *zf, const zend_arg_info *arg_info,
const zend_class_entry *ce, zval *value,
@@ -636,7 +649,6 @@ static ZEND_COLD void zend_verify_type_error_common(
{
zend_bool is_interface = 0;
*fname = ZSTR_VAL(zf->common.function_name);
-
if (zf->common.scope) {
*fsep = "::";
*fclass = ZSTR_VAL(zf->common.scope->name);
@@ -645,46 +657,50 @@ static ZEND_COLD void zend_verify_type_error_common(
*fclass = "";
}
- switch (arg_info->type_hint) {
- case IS_OBJECT:
- if (ce) {
- if (ce->ce_flags & ZEND_ACC_INTERFACE) {
- *need_msg = "implement interface ";
- is_interface = 1;
- } else {
- *need_msg = "be an instance of ";
- }
- *need_kind = ZSTR_VAL(ce->name);
+ if (ZEND_TYPE_IS_CLASS(arg_info->type)) {
+ if (ce) {
+ if (ce->ce_flags & ZEND_ACC_INTERFACE) {
+ *need_msg = "implement interface ";
+ is_interface = 1;
} else {
- /* We don't know whether it's a class or interface, assume it's a class */
*need_msg = "be an instance of ";
- *need_kind = zf->common.type == ZEND_INTERNAL_FUNCTION
- ? ((zend_internal_arg_info *) arg_info)->class_name
- : ZSTR_VAL(arg_info->class_name);
}
- break;
- case IS_CALLABLE:
- *need_msg = "be callable";
- *need_kind = "";
- break;
- case IS_ITERABLE:
- *need_msg = "be iterable";
- *need_kind = "";
- break;
- default:
- *need_msg = "be of the type ";
- *need_kind = zend_get_type_by_const(arg_info->type_hint);
- break;
+ *need_kind = ZSTR_VAL(ce->name);
+ } else {
+ /* We don't know whether it's a class or interface, assume it's a class */
+
+ *need_msg = "be an instance of ";
+ *need_kind = ZSTR_VAL(ZEND_TYPE_NAME(arg_info->type));
+ }
+ } else {
+ switch (ZEND_TYPE_CODE(arg_info->type)) {
+ case IS_OBJECT:
+ *need_msg = "be an ";
+ *need_kind = "object";
+ break;
+ case IS_CALLABLE:
+ *need_msg = "be callable";
+ *need_kind = "";
+ break;
+ case IS_ITERABLE:
+ *need_msg = "be iterable";
+ *need_kind = "";
+ break;
+ default:
+ *need_msg = "be of the type ";
+ *need_kind = zend_get_type_by_const(ZEND_TYPE_CODE(arg_info->type));
+ break;
+ }
}
- if (arg_info->allow_null) {
+ if (ZEND_TYPE_ALLOW_NULL(arg_info->type)) {
*need_or_null = is_interface ? " or be null" : " or null";
} else {
*need_or_null = "";
}
if (value) {
- if (arg_info->type_hint == IS_OBJECT && Z_TYPE_P(value) == IS_OBJECT) {
+ if (ZEND_TYPE_IS_CLASS(arg_info->type) && Z_TYPE_P(value) == IS_OBJECT) {
*given_msg = "instance of ";
*given_kind = ZSTR_VAL(Z_OBJCE_P(value)->name);
} else {
@@ -804,137 +820,49 @@ static zend_bool zend_verify_scalar_type_hint(zend_uchar type_hint, zval *arg, z
return zend_verify_weak_scalar_type_hint(type_hint, arg);
}
-static zend_always_inline zend_bool zend_check_internal_type(
- const zend_function *zf, const zend_internal_arg_info *arg_info,
- zval *arg, zend_class_entry **ce, zend_bool is_return_type)
-{
- if (!arg_info->type_hint) {
- return 1;
- }
-
- ZVAL_DEREF(arg);
- if (EXPECTED(arg_info->type_hint == Z_TYPE_P(arg))) {
- if (arg_info->class_name) {
- *ce = zend_verify_internal_arg_class_kind(arg_info);
- return *ce && instanceof_function(Z_OBJCE_P(arg), *ce);
- }
- return 1;
- }
-
- if (Z_TYPE_P(arg) == IS_NULL && arg_info->allow_null) {
- return 1;
- }
-
- if (arg_info->class_name) {
- *ce = zend_verify_internal_arg_class_kind(arg_info);
- return 0;
- } else if (arg_info->type_hint == IS_CALLABLE) {
- return zend_is_callable(arg, IS_CALLABLE_CHECK_SILENT, NULL);
- } else if (arg_info->type_hint == IS_ITERABLE) {
- return zend_is_iterable(arg);
- } else if (arg_info->type_hint == _IS_BOOL &&
- EXPECTED(Z_TYPE_P(arg) == IS_FALSE || Z_TYPE_P(arg) == IS_TRUE)) {
- return 1;
- } else if (is_return_type) {
- /* Internal return types are always strict */
- return 0;
- } else {
- /* Internal parameter types honor strict_types */
- return zend_verify_scalar_type_hint(arg_info->type_hint, arg, ZEND_CALL_USES_STRICT_TYPES(EG(current_execute_data)));
- }
-}
-
-static int zend_verify_internal_arg_type(zend_function *zf, uint32_t arg_num, zval *arg)
-{
- const zend_internal_arg_info *cur_arg_info;
- zend_class_entry *ce = NULL;
-
- if (EXPECTED(arg_num <= zf->internal_function.num_args)) {
- cur_arg_info = &zf->internal_function.arg_info[arg_num-1];
- } else if (zf->internal_function.fn_flags & ZEND_ACC_VARIADIC) {
- cur_arg_info = &zf->internal_function.arg_info[zf->internal_function.num_args];
- } else {
- return 1;
- }
-
- if (UNEXPECTED(!zend_check_internal_type(zf, cur_arg_info, arg, &ce, 0))) {
- zend_verify_arg_error(zf, (const zend_arg_info *) cur_arg_info, arg_num, ce, arg);
- return 0;
- }
-
- return 1;
-}
-
-static zend_never_inline int zend_verify_internal_arg_types(zend_function *fbc, zend_execute_data *call)
-{
- uint32_t i;
- uint32_t num_args = ZEND_CALL_NUM_ARGS(call);
- zval *p = ZEND_CALL_ARG(call, 1);
-
- for (i = 0; i < num_args; ++i) {
- if (UNEXPECTED(!zend_verify_internal_arg_type(fbc, i + 1, p))) {
- EG(current_execute_data) = call->prev_execute_data;
- zend_vm_stack_free_args(call);
- return 0;
- }
- p++;
- }
- return 1;
-}
-
static zend_always_inline zend_bool zend_check_type(
- const zend_function *zf, const zend_arg_info *arg_info,
+ zend_type type,
zval *arg, zend_class_entry **ce, void **cache_slot,
- zval *default_value, zend_bool is_return_type)
+ zval *default_value, zend_class_entry *scope,
+ zend_bool is_return_type)
{
- if (!arg_info->type_hint) {
+ if (!ZEND_TYPE_IS_SET(type)) {
return 1;
}
ZVAL_DEREF(arg);
- if (EXPECTED(arg_info->type_hint == Z_TYPE_P(arg))) {
- if (arg_info->class_name) {
- if (EXPECTED(*cache_slot)) {
- *ce = (zend_class_entry *) *cache_slot;
- } else {
- *ce = zend_verify_arg_class_kind(arg_info);
- if (UNEXPECTED(!*ce)) {
- return 0;
- }
- *cache_slot = (void *) *ce;
- }
- if (UNEXPECTED(!instanceof_function(Z_OBJCE_P(arg), *ce))) {
- return 0;
+ if (ZEND_TYPE_IS_CLASS(type)) {
+ if (EXPECTED(*cache_slot)) {
+ *ce = (zend_class_entry *) *cache_slot;
+ } else {
+ *ce = zend_fetch_class(ZEND_TYPE_NAME(type), (ZEND_FETCH_CLASS_AUTO | ZEND_FETCH_CLASS_NO_AUTOLOAD));
+ if (UNEXPECTED(!*ce)) {
+ return Z_TYPE_P(arg) == IS_NULL && (ZEND_TYPE_ALLOW_NULL(type) || (default_value && is_null_constant(scope, default_value)));
}
+ *cache_slot = (void *) *ce;
}
+ if (EXPECTED(Z_TYPE_P(arg) == IS_OBJECT)) {
+ return instanceof_function(Z_OBJCE_P(arg), *ce);
+ }
+ return Z_TYPE_P(arg) == IS_NULL && (ZEND_TYPE_ALLOW_NULL(type) || (default_value && is_null_constant(scope, default_value)));
+ } else if (EXPECTED(ZEND_TYPE_CODE(type) == Z_TYPE_P(arg))) {
return 1;
}
- if (Z_TYPE_P(arg) == IS_NULL && (arg_info->allow_null || (default_value && is_null_constant(zf->common.scope, default_value)))) {
+ if (Z_TYPE_P(arg) == IS_NULL && (ZEND_TYPE_ALLOW_NULL(type) || (default_value && is_null_constant(scope, default_value)))) {
/* Null passed to nullable type */
return 1;
}
- if (UNEXPECTED(arg_info->class_name)) {
- /* This is always an error - we fetch the class name for the error message here */
- if (EXPECTED(*cache_slot)) {
- *ce = (zend_class_entry *) *cache_slot;
- } else {
- *ce = zend_verify_arg_class_kind(arg_info);
- if (*ce) {
- *cache_slot = (void *) *ce;
- }
- }
- return 0;
- } else if (arg_info->type_hint == IS_CALLABLE) {
+ if (ZEND_TYPE_CODE(type) == IS_CALLABLE) {
return zend_is_callable(arg, IS_CALLABLE_CHECK_SILENT, NULL);
- } else if (arg_info->type_hint == IS_ITERABLE) {
+ } else if (ZEND_TYPE_CODE(type) == IS_ITERABLE) {
return zend_is_iterable(arg);
- } else if (arg_info->type_hint == _IS_BOOL &&
+ } else if (ZEND_TYPE_CODE(type) == _IS_BOOL &&
EXPECTED(Z_TYPE_P(arg) == IS_FALSE || Z_TYPE_P(arg) == IS_TRUE)) {
return 1;
} else {
- return zend_verify_scalar_type_hint(arg_info->type_hint, arg,
+ return zend_verify_scalar_type_hint(ZEND_TYPE_CODE(type), arg,
is_return_type ? ZEND_RET_USES_STRICT_TYPES() : ZEND_ARG_USES_STRICT_TYPES());
}
@@ -955,7 +883,7 @@ static zend_always_inline int zend_verify_arg_type(zend_function *zf, uint32_t a
return 1;
}
- if (UNEXPECTED(!zend_check_type(zf, cur_arg_info, arg, &ce, cache_slot, default_value, 0))) {
+ if (UNEXPECTED(!zend_check_type(cur_arg_info->type, arg, &ce, cache_slot, default_value, zf->common.scope, 0))) {
zend_verify_arg_error(zf, cur_arg_info, arg_num, ce, arg);
return 0;
}
@@ -963,6 +891,25 @@ static zend_always_inline int zend_verify_arg_type(zend_function *zf, uint32_t a
return 1;
}
+static zend_never_inline int zend_verify_internal_arg_types(zend_function *fbc, zend_execute_data *call)
+{
+ uint32_t i;
+ uint32_t num_args = ZEND_CALL_NUM_ARGS(call);
+ zval *p = ZEND_CALL_ARG(call, 1);
+ void *dummy_cache_slot;
+
+ for (i = 0; i < num_args; ++i) {
+ dummy_cache_slot = NULL;
+ if (UNEXPECTED(!zend_verify_arg_type(fbc, i + 1, p, NULL, &dummy_cache_slot))) {
+ EG(current_execute_data) = call->prev_execute_data;
+ zend_vm_stack_free_args(call);
+ return 0;
+ }
+ p++;
+ }
+ return 1;
+}
+
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_missing_arg_error(zend_execute_data *execute_data)
{
zend_execute_data *ptr = EX(prev_execute_data);
@@ -1041,13 +988,14 @@ static int zend_verify_internal_return_type(zend_function *zf, zval *ret)
{
zend_internal_arg_info *ret_info = zf->internal_function.arg_info - 1;
zend_class_entry *ce = NULL;
+ void *dummy_cache_slot = NULL;
- if (UNEXPECTED(ret_info->type_hint == IS_VOID && Z_TYPE_P(ret) != IS_NULL)) {
+ if (UNEXPECTED(ZEND_TYPE_CODE(ret_info->type) == IS_VOID && Z_TYPE_P(ret) != IS_NULL)) {
zend_verify_void_return_error(zf, zend_zval_type_name(ret), "");
return 0;
}
- if (UNEXPECTED(!zend_check_internal_type(zf, ret_info, ret, &ce, 1))) {
+ if (UNEXPECTED(!zend_check_type(ret_info->type, ret, &ce, &dummy_cache_slot, NULL, NULL, 1))) {
zend_verify_internal_return_error(zf, ce, ret);
return 0;
}
@@ -1061,7 +1009,7 @@ static zend_always_inline void zend_verify_return_type(zend_function *zf, zval *
zend_arg_info *ret_info = zf->common.arg_info - 1;
zend_class_entry *ce = NULL;
- if (UNEXPECTED(!zend_check_type(zf, ret_info, ret, &ce, cache_slot, NULL, 1))) {
+ if (UNEXPECTED(!zend_check_type(ret_info->type, ret, &ce, cache_slot, NULL, NULL, 1))) {
zend_verify_return_error(zf, ce, ret);
}
}
@@ -1070,13 +1018,13 @@ static ZEND_COLD int zend_verify_missing_return_type(zend_function *zf, void **c
{
zend_arg_info *ret_info = zf->common.arg_info - 1;
- if (ret_info->type_hint && UNEXPECTED(ret_info->type_hint != IS_VOID)) {
+ if (ZEND_TYPE_IS_SET(ret_info->type) && UNEXPECTED(ZEND_TYPE_CODE(ret_info->type) != IS_VOID)) {
zend_class_entry *ce = NULL;
- if (ret_info->class_name) {
+ if (ZEND_TYPE_IS_CLASS(ret_info->type)) {
if (EXPECTED(*cache_slot)) {
ce = (zend_class_entry*) *cache_slot;
} else {
- ce = zend_verify_arg_class_kind(ret_info);
+ ce = zend_fetch_class(ZEND_TYPE_NAME(ret_info->type), (ZEND_FETCH_CLASS_AUTO | ZEND_FETCH_CLASS_NO_AUTOLOAD));
if (ce) {
*cache_slot = (void*)ce;
}
@@ -1098,7 +1046,7 @@ static zend_never_inline void zend_assign_to_object_dim(zval *object, zval *dim,
Z_OBJ_HT_P(object)->write_dimension(object, dim, value);
}
-static zend_never_inline void zend_binary_assign_op_obj_dim(zval *object, zval *property, zval *value, zval *retval, binary_op_type binary_op)
+static zend_never_inline void zend_binary_assign_op_obj_dim(zval *object, zval *property, zval *value, zval *retval, binary_op_type binary_op EXECUTE_DATA_DC)
{
zval *z;
zval rv, res;
@@ -1132,7 +1080,7 @@ static zend_never_inline void zend_binary_assign_op_obj_dim(zval *object, zval *
}
}
-static zend_never_inline zend_long zend_check_string_offset(zval *dim, int type)
+static zend_never_inline zend_long zend_check_string_offset(zval *dim, int type EXECUTE_DATA_DC)
{
zend_long offset;
@@ -1148,7 +1096,7 @@ try_again:
}
break;
case IS_UNDEF:
- zval_undefined_cv(EG(current_execute_data)->opline->op2.var, EG(current_execute_data));
+ zval_undefined_cv(EX(opline)->op2.var EXECUTE_DATA_CC);
case IS_DOUBLE:
case IS_NULL:
case IS_FALSE:
@@ -1171,10 +1119,10 @@ try_again:
return offset;
}
-static zend_never_inline ZEND_COLD void zend_wrong_string_offset(void)
+static zend_never_inline ZEND_COLD void zend_wrong_string_offset(EXECUTE_DATA_D)
{
const char *msg = NULL;
- const zend_op *opline = EG(current_execute_data)->opline;
+ const zend_op *opline = EX(opline);
const zend_op *end;
uint32_t var;
@@ -1290,15 +1238,15 @@ static zend_never_inline ZEND_COLD void zend_wrong_string_offset(void)
zend_throw_error(NULL, msg);
}
-static zend_never_inline void zend_assign_to_string_offset(zval *str, zval *dim, zval *value, zval *result)
+static zend_never_inline void zend_assign_to_string_offset(zval *str, zval *dim, zval *value, zval *result EXECUTE_DATA_DC)
{
zend_string *old_str;
zend_uchar c;
size_t string_len;
zend_long offset;
- offset = zend_check_string_offset(dim, BP_VAR_W);
- if (offset < (zend_long)(-Z_STRLEN_P(str))) {
+ offset = zend_check_string_offset(dim, BP_VAR_W EXECUTE_DATA_CC);
+ if (offset < -(zend_long)Z_STRLEN_P(str)) {
/* Error on negative offset */
zend_error(E_WARNING, "Illegal string offset: " ZEND_LONG_FMT, offset);
if (result) {
@@ -1353,11 +1301,7 @@ static zend_never_inline void zend_assign_to_string_offset(zval *str, zval *dim,
if (result) {
/* Return the new character */
- if (CG(one_char_string)[c]) {
- ZVAL_INTERNED_STR(result, CG(one_char_string)[c]);
- } else {
- ZVAL_NEW_STR(result, zend_string_init(Z_STRVAL_P(str) + offset, 1, 0));
- }
+ ZVAL_INTERNED_STR(result, ZSTR_CHAR(c));
}
}
@@ -1373,6 +1317,7 @@ static zend_never_inline void zend_post_incdec_overloaded_property(zval *object,
z = Z_OBJ_HT(obj)->read_property(&obj, property, BP_VAR_R, cache_slot, &rv);
if (UNEXPECTED(EG(exception))) {
OBJ_RELEASE(Z_OBJ(obj));
+ ZVAL_UNDEF(result);
return;
}
@@ -1418,6 +1363,9 @@ static zend_never_inline void zend_pre_incdec_overloaded_property(zval *object,
zptr = z = Z_OBJ_HT(obj)->read_property(&obj, property, BP_VAR_R, cache_slot, &rv);
if (UNEXPECTED(EG(exception))) {
OBJ_RELEASE(Z_OBJ(obj));
+ if (result) {
+ ZVAL_UNDEF(result);
+ }
return;
}
@@ -1463,6 +1411,9 @@ static zend_never_inline void zend_assign_op_overloaded_property(zval *object, z
z = Z_OBJ_HT(obj)->read_property(&obj, property, BP_VAR_R, cache_slot, &rv);
if (UNEXPECTED(EG(exception))) {
OBJ_RELEASE(Z_OBJ(obj));
+ if (result) {
+ ZVAL_UNDEF(result);
+ }
return;
}
if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
@@ -1517,7 +1468,7 @@ static void zend_extension_fcall_end_handler(const zend_extension *extension, ze
}
-static zend_always_inline HashTable *zend_get_target_symbol_table(zend_execute_data *execute_data, int fetch_type)
+static zend_always_inline HashTable *zend_get_target_symbol_table(int fetch_type EXECUTE_DATA_DC)
{
HashTable *ht;
@@ -1534,7 +1485,7 @@ static zend_always_inline HashTable *zend_get_target_symbol_table(zend_execute_d
return ht;
}
-static zend_always_inline zval *zend_fetch_dimension_address_inner(HashTable *ht, const zval *dim, int dim_type, int type)
+static zend_always_inline zval *zend_fetch_dimension_address_inner(HashTable *ht, const zval *dim, int dim_type, int type EXECUTE_DATA_DC)
{
zval *retval;
zend_string *offset_key;
@@ -1615,7 +1566,7 @@ str_index:
} else {
switch (Z_TYPE_P(dim)) {
case IS_UNDEF:
- zval_undefined_cv(EG(current_execute_data)->opline->op2.var, EG(current_execute_data));
+ zval_undefined_cv(EX(opline)->op2.var EXECUTE_DATA_CC);
/* break missing intentionally */
case IS_NULL:
offset_key = ZSTR_EMPTY_ALLOC();
@@ -1645,27 +1596,27 @@ str_index:
return retval;
}
-static zend_never_inline zval* ZEND_FASTCALL zend_fetch_dimension_address_inner_W(HashTable *ht, const zval *dim)
+static zend_never_inline zval* ZEND_FASTCALL zend_fetch_dimension_address_inner_W(HashTable *ht, const zval *dim EXECUTE_DATA_DC)
{
- return zend_fetch_dimension_address_inner(ht, dim, IS_TMP_VAR, BP_VAR_W);
+ return zend_fetch_dimension_address_inner(ht, dim, IS_TMP_VAR, BP_VAR_W EXECUTE_DATA_CC);
}
-static zend_never_inline zval* ZEND_FASTCALL zend_fetch_dimension_address_inner_W_CONST(HashTable *ht, const zval *dim)
+static zend_never_inline zval* ZEND_FASTCALL zend_fetch_dimension_address_inner_W_CONST(HashTable *ht, const zval *dim EXECUTE_DATA_DC)
{
- return zend_fetch_dimension_address_inner(ht, dim, IS_CONST, BP_VAR_W);
+ return zend_fetch_dimension_address_inner(ht, dim, IS_CONST, BP_VAR_W EXECUTE_DATA_CC);
}
-static zend_never_inline zval* ZEND_FASTCALL zend_fetch_dimension_address_inner_RW(HashTable *ht, const zval *dim)
+static zend_never_inline zval* ZEND_FASTCALL zend_fetch_dimension_address_inner_RW(HashTable *ht, const zval *dim EXECUTE_DATA_DC)
{
- return zend_fetch_dimension_address_inner(ht, dim, IS_TMP_VAR, BP_VAR_RW);
+ return zend_fetch_dimension_address_inner(ht, dim, IS_TMP_VAR, BP_VAR_RW EXECUTE_DATA_CC);
}
-static zend_never_inline zval* ZEND_FASTCALL zend_fetch_dimension_address_inner_RW_CONST(HashTable *ht, const zval *dim)
+static zend_never_inline zval* ZEND_FASTCALL zend_fetch_dimension_address_inner_RW_CONST(HashTable *ht, const zval *dim EXECUTE_DATA_DC)
{
- return zend_fetch_dimension_address_inner(ht, dim, IS_CONST, BP_VAR_RW);
+ return zend_fetch_dimension_address_inner(ht, dim, IS_CONST, BP_VAR_RW EXECUTE_DATA_CC);
}
-static zend_always_inline void zend_fetch_dimension_address(zval *result, zval *container, zval *dim, int dim_type, int type)
+static zend_always_inline void zend_fetch_dimension_address(zval *result, zval *container, zval *dim, int dim_type, int type EXECUTE_DATA_DC)
{
zval *retval;
@@ -1681,7 +1632,7 @@ fetch_from_array:
return;
}
} else {
- retval = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, dim_type, type);
+ retval = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, dim_type, type EXECUTE_DATA_CC);
if (UNEXPECTED(!retval)) {
ZVAL_ERROR(result);
return;
@@ -1699,13 +1650,13 @@ fetch_from_array:
if (dim == NULL) {
zend_throw_error(NULL, "[] operator not supported for strings");
} else {
- zend_check_string_offset(dim, type);
- zend_wrong_string_offset();
+ zend_check_string_offset(dim, type EXECUTE_DATA_CC);
+ zend_wrong_string_offset(EXECUTE_DATA_C);
}
ZVAL_ERROR(result);
} else if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
if (/*dim_type == IS_CV &&*/ dim && UNEXPECTED(Z_TYPE_P(dim) == IS_UNDEF)) {
- zval_undefined_cv(EG(current_execute_data)->opline->op2.var, EG(current_execute_data));
+ zval_undefined_cv(EX(opline)->op2.var EXECUTE_DATA_CC);
dim = &EG(uninitialized_zval);
}
if (!Z_OBJ_HT_P(container)->read_dimension) {
@@ -1741,10 +1692,10 @@ fetch_from_array:
}
} else {
if (type != BP_VAR_W && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zval_undefined_cv(EG(current_execute_data)->opline->op1.var, EG(current_execute_data));
+ zval_undefined_cv(EX(opline)->op1.var EXECUTE_DATA_CC);
}
if (/*dim_type == IS_CV &&*/ dim && UNEXPECTED(Z_TYPE_P(dim) == IS_UNDEF)) {
- zval_undefined_cv(EG(current_execute_data)->opline->op2.var, EG(current_execute_data));
+ zval_undefined_cv(EX(opline)->op2.var EXECUTE_DATA_CC);
}
if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
if (type != BP_VAR_UNSET) {
@@ -1769,29 +1720,29 @@ fetch_from_array:
}
}
-static zend_never_inline void zend_fetch_dimension_address_W(zval *result, zval *container_ptr, zval *dim, int dim_type)
+static zend_never_inline void zend_fetch_dimension_address_W(zval *result, zval *container_ptr, zval *dim, int dim_type EXECUTE_DATA_DC)
{
- zend_fetch_dimension_address(result, container_ptr, dim, dim_type, BP_VAR_W);
+ zend_fetch_dimension_address(result, container_ptr, dim, dim_type, BP_VAR_W EXECUTE_DATA_CC);
}
-static zend_never_inline void zend_fetch_dimension_address_RW(zval *result, zval *container_ptr, zval *dim, int dim_type)
+static zend_never_inline void zend_fetch_dimension_address_RW(zval *result, zval *container_ptr, zval *dim, int dim_type EXECUTE_DATA_DC)
{
- zend_fetch_dimension_address(result, container_ptr, dim, dim_type, BP_VAR_RW);
+ zend_fetch_dimension_address(result, container_ptr, dim, dim_type, BP_VAR_RW EXECUTE_DATA_CC);
}
-static zend_never_inline void zend_fetch_dimension_address_UNSET(zval *result, zval *container_ptr, zval *dim, int dim_type)
+static zend_never_inline void zend_fetch_dimension_address_UNSET(zval *result, zval *container_ptr, zval *dim, int dim_type EXECUTE_DATA_DC)
{
- zend_fetch_dimension_address(result, container_ptr, dim, dim_type, BP_VAR_UNSET);
+ zend_fetch_dimension_address(result, container_ptr, dim, dim_type, BP_VAR_UNSET EXECUTE_DATA_CC);
}
-static zend_always_inline void zend_fetch_dimension_address_read(zval *result, zval *container, zval *dim, int dim_type, int type, int support_strings, int slow)
+static zend_always_inline void zend_fetch_dimension_address_read(zval *result, zval *container, zval *dim, int dim_type, int type, int support_strings, int slow EXECUTE_DATA_DC)
{
zval *retval;
if (!slow) {
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
try_array:
- retval = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, dim_type, type);
+ retval = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, dim_type, type EXECUTE_DATA_CC);
ZVAL_COPY(result, retval);
return;
} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
@@ -1819,7 +1770,7 @@ try_string_offset:
zend_error(E_WARNING, "Illegal string offset '%s'", Z_STRVAL_P(dim));
break;
case IS_UNDEF:
- zval_undefined_cv(EG(current_execute_data)->opline->op2.var, EG(current_execute_data));
+ zval_undefined_cv(EX(opline)->op2.var EXECUTE_DATA_CC);
case IS_DOUBLE:
case IS_NULL:
case IS_FALSE:
@@ -1856,15 +1807,11 @@ try_string_offset:
? (zend_long)Z_STRLEN_P(container) + offset : offset;
c = (zend_uchar)Z_STRVAL_P(container)[real_offset];
- if (CG(one_char_string)[c]) {
- ZVAL_INTERNED_STR(result, CG(one_char_string)[c]);
- } else {
- ZVAL_NEW_STR(result, zend_string_init(Z_STRVAL_P(container) + real_offset, 1, 0));
- }
+ ZVAL_INTERNED_STR(result, ZSTR_CHAR(c));
}
} else if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
if (/*dim_type == IS_CV &&*/ UNEXPECTED(Z_TYPE_P(dim) == IS_UNDEF)) {
- zval_undefined_cv(EG(current_execute_data)->opline->op2.var, EG(current_execute_data));
+ zval_undefined_cv(EX(opline)->op2.var EXECUTE_DATA_CC);
dim = &EG(uninitialized_zval);
}
if (!Z_OBJ_HT_P(container)->read_dimension) {
@@ -1884,46 +1831,44 @@ try_string_offset:
}
} else {
if (type != BP_VAR_IS && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zval_undefined_cv(EG(current_execute_data)->opline->op1.var, EG(current_execute_data));
+ zval_undefined_cv(EX(opline)->op1.var EXECUTE_DATA_CC);
}
if (/*dim_type == IS_CV &&*/ UNEXPECTED(Z_TYPE_P(dim) == IS_UNDEF)) {
- zval_undefined_cv(EG(current_execute_data)->opline->op2.var, EG(current_execute_data));
+ zval_undefined_cv(EX(opline)->op2.var EXECUTE_DATA_CC);
}
ZVAL_NULL(result);
}
}
-static zend_never_inline void zend_fetch_dimension_address_read_R(zval *result, zval *container, zval *dim, int dim_type)
-{
- zend_fetch_dimension_address_read(result, container, dim, dim_type, BP_VAR_R, 1, 0);
-}
-
-static zend_never_inline void zend_fetch_dimension_address_read_R_slow(zval *result, zval *container, zval *dim)
+static zend_never_inline void zend_fetch_dimension_address_read_R(zval *result, zval *container, zval *dim, int dim_type EXECUTE_DATA_DC)
{
- zend_fetch_dimension_address_read(result, container, dim, IS_CV, BP_VAR_R, 1, 1);
+ zend_fetch_dimension_address_read(result, container, dim, dim_type, BP_VAR_R, 1, 0 EXECUTE_DATA_CC);
}
-static zend_never_inline void zend_fetch_dimension_address_read_IS(zval *result, zval *container, zval *dim, int dim_type)
+static zend_never_inline void zend_fetch_dimension_address_read_R_slow(zval *result, zval *container, zval *dim EXECUTE_DATA_DC)
{
- zend_fetch_dimension_address_read(result, container, dim, dim_type, BP_VAR_IS, 1, 0);
+ zend_fetch_dimension_address_read(result, container, dim, IS_CV, BP_VAR_R, 1, 1 EXECUTE_DATA_CC);
}
-static zend_never_inline void zend_fetch_dimension_address_read_LIST(zval *result, zval *container, zval *dim)
+static zend_never_inline void zend_fetch_dimension_address_read_IS(zval *result, zval *container, zval *dim, int dim_type EXECUTE_DATA_DC)
{
- zend_fetch_dimension_address_read(result, container, dim, IS_TMP_VAR, BP_VAR_R, 0, 0);
+ zend_fetch_dimension_address_read(result, container, dim, dim_type, BP_VAR_IS, 1, 0 EXECUTE_DATA_CC);
}
-ZEND_API void zend_fetch_dimension_by_zval(zval *result, zval *container, zval *dim)
+static zend_never_inline void zend_fetch_dimension_address_read_LIST(zval *result, zval *container, zval *dim EXECUTE_DATA_DC)
{
- zend_fetch_dimension_address_read_R(result, container, dim, IS_TMP_VAR);
+ zend_fetch_dimension_address_read(result, container, dim, IS_TMP_VAR, BP_VAR_R, 0, 0 EXECUTE_DATA_CC);
}
-ZEND_API void zend_fetch_dimension_by_zval_is(zval *result, zval *container, zval *dim, int dim_type)
+ZEND_API void zend_fetch_dimension_const(zval *result, zval *container, zval *dim, int type)
{
- zend_fetch_dimension_address_read(result, container, dim, dim_type, BP_VAR_IS, 1, 0);
+ if (type == BP_VAR_IS) {
+ zend_fetch_dimension_address_read_IS(result, container, dim, IS_CONST NO_EXECUTE_DATA_CC);
+ } else {
+ zend_fetch_dimension_address_read_R(result, container, dim, IS_CONST NO_EXECUTE_DATA_CC);
+ }
}
-
static zend_always_inline void zend_fetch_property_address(zval *result, zval *container, uint32_t container_op_type, zval *prop_ptr, uint32_t prop_op_type, void **cache_slot, int type)
{
if (container_op_type != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
@@ -1943,7 +1888,9 @@ static zend_always_inline void zend_fetch_property_address(zval *result, zval *c
object_init(container);
} else {
if (container_op_type != IS_VAR || EXPECTED(!Z_ISERROR_P(container))) {
- zend_error(E_WARNING, "Attempt to modify property of non-object");
+ zend_string *property_name = zval_get_string(prop_ptr);
+ zend_error(E_WARNING, "Attempt to modify property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
ZVAL_ERROR(result);
return;
@@ -2002,6 +1949,96 @@ use_read_property:
}
}
+static zend_always_inline zval* zend_fetch_static_property_address(zval *varname, zend_uchar varname_type, znode_op op2, zend_uchar op2_type, int type EXECUTE_DATA_DC)
+{
+ zval *retval;
+ zend_string *name;
+ zend_class_entry *ce;
+
+ if (varname_type == IS_CONST) {
+ name = Z_STR_P(varname);
+ } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
+ name = Z_STR_P(varname);
+ zend_string_addref(name);
+ } else {
+ if (varname_type == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
+ zval_undefined_cv(EX(opline)->op1.var EXECUTE_DATA_CC);
+ }
+ name = zval_get_string(varname);
+ }
+
+ if (op2_type == IS_CONST) {
+ if (varname_type == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(varname))) != NULL)) {
+ retval = CACHED_PTR(Z_CACHE_SLOT_P(varname) + sizeof(void*));
+
+ /* check if static properties were destoyed */
+ if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
+ if (type != BP_VAR_IS) {
+ zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
+ }
+ return NULL;
+ }
+
+ return retval;
+ } else {
+ zval *class_name = EX_CONSTANT(op2);
+
+ if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(class_name))) == NULL)) {
+ ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
+ if (UNEXPECTED(ce == NULL)) {
+ if (varname_type != IS_CONST) {
+ zend_string_release(name);
+ }
+ return NULL;
+ }
+ CACHE_PTR(Z_CACHE_SLOT_P(class_name), ce);
+ }
+ }
+ } else {
+ if (op2_type == IS_UNUSED) {
+ ce = zend_fetch_class(NULL, op2.num);
+ if (UNEXPECTED(ce == NULL)) {
+ if (varname_type != IS_CONST) {
+ zend_string_release(name);
+ }
+ return NULL;
+ }
+ } else {
+ ce = Z_CE_P(EX_VAR(op2.var));
+ }
+ if (varname_type == IS_CONST &&
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(varname)) == ce)) {
+ retval = CACHED_PTR(Z_CACHE_SLOT_P(varname) + sizeof(void*));
+
+ /* check if static properties were destoyed */
+ if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
+ if (type != BP_VAR_IS) {
+ zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
+ }
+ return NULL;
+ }
+
+ return retval;
+ }
+ }
+
+ retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
+
+ if (varname_type != IS_CONST) {
+ zend_string_release(name);
+ }
+
+ if (UNEXPECTED(retval == NULL)) {
+ return NULL;
+ }
+
+ if (varname_type == IS_CONST) {
+ CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(varname), ce, retval);
+ }
+
+ return retval;
+}
+
#if ZEND_INTENSIVE_DEBUGGING
#define CHECK_SYMBOL_TABLES() \
@@ -2060,12 +2097,12 @@ static zend_always_inline void i_free_compiled_variables(zend_execute_data *exec
zval *end = cv + EX(func)->op_array.last_var;
while (EXPECTED(cv != end)) {
if (Z_REFCOUNTED_P(cv)) {
- if (!Z_DELREF_P(cv)) {
- zend_refcounted *r = Z_COUNTED_P(cv);
+ zend_refcounted *r = Z_COUNTED_P(cv);
+ if (!--GC_REFCOUNT(r)) {
ZVAL_NULL(cv);
zval_dtor_func(r);
} else {
- GC_ZVAL_CHECK_POSSIBLE_ROOT(cv);
+ gc_check_possible_root(r);
}
}
cv++;
@@ -2205,88 +2242,35 @@ static zend_always_inline void i_init_code_execute_data(zend_execute_data *execu
}
/* }}} */
-static zend_always_inline void i_init_execute_data(zend_execute_data *execute_data, zend_op_array *op_array, zval *return_value) /* {{{ */
+ZEND_API void zend_init_func_execute_data(zend_execute_data *execute_data, zend_op_array *op_array, zval *return_value) /* {{{ */
{
- ZEND_ASSERT(EX(func) == (zend_function*)op_array);
-
- EX(opline) = op_array->opcodes;
- EX(call) = NULL;
- EX(return_value) = return_value;
-
- if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
- zend_attach_symbol_table(execute_data);
- } else {
- uint32_t first_extra_arg, num_args;
-
- /* Handle arguments */
- first_extra_arg = op_array->num_args;
- num_args = EX_NUM_ARGS();
- if (UNEXPECTED(num_args > first_extra_arg)) {
- if (EXPECTED(!(op_array->fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE))) {
- zval *end, *src, *dst;
- uint32_t type_flags = 0;
-
- if (EXPECTED((op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) == 0)) {
- /* Skip useless ZEND_RECV and ZEND_RECV_INIT opcodes */
- EX(opline) += first_extra_arg;
- }
-
- /* move extra args into separate array after all CV and TMP vars */
- end = EX_VAR_NUM(first_extra_arg - 1);
- src = end + (num_args - first_extra_arg);
- dst = src + (op_array->last_var + op_array->T - first_extra_arg);
- if (EXPECTED(src != dst)) {
- do {
- type_flags |= Z_TYPE_INFO_P(src);
- ZVAL_COPY_VALUE(dst, src);
- ZVAL_UNDEF(src);
- src--;
- dst--;
- } while (src != end);
- } else {
- do {
- type_flags |= Z_TYPE_INFO_P(src);
- src--;
- } while (src != end);
- }
- ZEND_ADD_CALL_FLAG(execute_data, ((type_flags >> Z_TYPE_FLAGS_SHIFT) & IS_TYPE_REFCOUNTED));
- }
- } else if (EXPECTED((op_array->fn_flags & ZEND_ACC_HAS_TYPE_HINTS) == 0)) {
- /* Skip useless ZEND_RECV and ZEND_RECV_INIT opcodes */
- EX(opline) += num_args;
- }
-
- /* Initialize CV variables (skip arguments) */
- if (EXPECTED((int)num_args < op_array->last_var)) {
- zval *var = EX_VAR_NUM(num_args);
- zval *end = EX_VAR_NUM(op_array->last_var);
-
- do {
- ZVAL_UNDEF(var);
- var++;
- } while (var != end);
- }
+ EX(prev_execute_data) = EG(current_execute_data);
+ if (!op_array->run_time_cache) {
+ op_array->run_time_cache = zend_arena_alloc(&CG(arena), op_array->cache_size);
+ memset(op_array->run_time_cache, 0, op_array->cache_size);
}
+ i_init_func_execute_data(execute_data, op_array, return_value);
+}
+/* }}} */
+ZEND_API void zend_init_code_execute_data(zend_execute_data *execute_data, zend_op_array *op_array, zval *return_value) /* {{{ */
+{
+ EX(prev_execute_data) = EG(current_execute_data);
if (!op_array->run_time_cache) {
- if (op_array->function_name) {
- op_array->run_time_cache = zend_arena_alloc(&CG(arena), op_array->cache_size);
- } else {
- op_array->run_time_cache = emalloc(op_array->cache_size);
- }
+ op_array->run_time_cache = emalloc(op_array->cache_size);
memset(op_array->run_time_cache, 0, op_array->cache_size);
}
- EX_LOAD_RUN_TIME_CACHE(op_array);
- EX_LOAD_LITERALS(op_array);
-
- EG(current_execute_data) = execute_data;
+ i_init_code_execute_data(execute_data, op_array, return_value);
}
/* }}} */
ZEND_API void zend_init_execute_data(zend_execute_data *execute_data, zend_op_array *op_array, zval *return_value) /* {{{ */
{
- EX(prev_execute_data) = EG(current_execute_data);
- i_init_execute_data(execute_data, op_array, return_value);
+ if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
+ zend_init_code_execute_data(execute_data, op_array, return_value);
+ } else {
+ zend_init_func_execute_data(execute_data, op_array, return_value);
+ }
}
/* }}} */
@@ -2347,7 +2331,7 @@ static zend_always_inline void zend_vm_stack_extend_call_frame(zend_execute_data
}
/* }}} */
-static zend_always_inline zend_generator *zend_get_running_generator(zend_execute_data *execute_data) /* {{{ */
+static zend_always_inline zend_generator *zend_get_running_generator(EXECUTE_DATA_D) /* {{{ */
{
/* The generator object is stored in EX(return_value) */
zend_generator *generator = (zend_generator *) EX(return_value);
@@ -2656,6 +2640,9 @@ static zend_never_inline zend_execute_data *zend_init_dynamic_call_object(zval *
ZEND_ASSERT(GC_TYPE((zend_object*)fbc->common.prototype) == IS_OBJECT);
GC_REFCOUNT((zend_object*)fbc->common.prototype)++;
call_info |= ZEND_CALL_CLOSURE;
+ if (fbc->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
+ call_info |= ZEND_CALL_FAKE_CLOSURE;
+ }
} else if (object) {
call_info |= ZEND_CALL_RELEASE_THIS;
GC_REFCOUNT(object)++; /* For $this pointer */
@@ -2855,8 +2842,9 @@ already_compiled:
}
/* }}} */
-static zend_never_inline int zend_do_fcall_overloaded(zend_function *fbc, zend_execute_data *call, zval *ret) /* {{{ */
+ZEND_API int ZEND_FASTCALL zend_do_fcall_overloaded(zend_execute_data *call, zval *ret) /* {{{ */
{
+ zend_function *fbc = call->func;
zend_object *object;
/* Not sure what should be done here if it's a static method */
@@ -2891,22 +2879,6 @@ static zend_never_inline int zend_do_fcall_overloaded(zend_function *fbc, zend_e
}
/* }}} */
-#ifdef HAVE_GCC_GLOBAL_REGS
-# if defined(__GNUC__) && ZEND_GCC_VERSION >= 4008 && defined(i386)
-# define ZEND_VM_FP_GLOBAL_REG "%esi"
-# define ZEND_VM_IP_GLOBAL_REG "%edi"
-# elif defined(__GNUC__) && ZEND_GCC_VERSION >= 4008 && defined(__x86_64__)
-# define ZEND_VM_FP_GLOBAL_REG "%r14"
-# define ZEND_VM_IP_GLOBAL_REG "%r15"
-# elif defined(__GNUC__) && ZEND_GCC_VERSION >= 4008 && defined(__powerpc64__)
-# define ZEND_VM_FP_GLOBAL_REG "r28"
-# define ZEND_VM_IP_GLOBAL_REG "r29"
-# elif defined(__IBMC__) && ZEND_GCC_VERSION >= 4002 && defined(__powerpc64__)
-# define ZEND_VM_FP_GLOBAL_REG "r28"
-# define ZEND_VM_IP_GLOBAL_REG "r29"
-# endif
-#endif
-
#define ZEND_VM_NEXT_OPCODE_EX(check_exception, skip) \
CHECK_SYMBOL_TABLES() \
if (check_exception) { \
@@ -2967,6 +2939,7 @@ static zend_never_inline int zend_do_fcall_overloaded(zend_function *fbc, zend_e
break; \
} \
if ((_check) && UNEXPECTED(EG(exception))) { \
+ ZVAL_UNDEF(EX_VAR(opline->result.var)); \
HANDLE_EXCEPTION(); \
} \
if (__result) { \
@@ -2978,6 +2951,7 @@ static zend_never_inline int zend_do_fcall_overloaded(zend_function *fbc, zend_e
} while (0)
# define ZEND_VM_SMART_BRANCH_JMPZ(_result, _check) do { \
if ((_check) && UNEXPECTED(EG(exception))) { \
+ ZVAL_UNDEF(EX_VAR(opline->result.var)); \
HANDLE_EXCEPTION(); \
} \
if (_result) { \
@@ -2989,6 +2963,7 @@ static zend_never_inline int zend_do_fcall_overloaded(zend_function *fbc, zend_e
} while (0)
# define ZEND_VM_SMART_BRANCH_JMPNZ(_result, _check) do { \
if ((_check) && UNEXPECTED(EG(exception))) { \
+ ZVAL_UNDEF(EX_VAR(opline->result.var)); \
HANDLE_EXCEPTION(); \
} \
if (!(_result)) { \
@@ -3013,9 +2988,15 @@ static zend_never_inline int zend_do_fcall_overloaded(zend_function *fbc, zend_e
#endif
#define GET_OP1_UNDEF_CV(ptr, type) \
- _get_zval_cv_lookup_ ## type(ptr, opline->op1.var, execute_data)
+ _get_zval_cv_lookup_ ## type(ptr, opline->op1.var EXECUTE_DATA_CC)
#define GET_OP2_UNDEF_CV(ptr, type) \
- _get_zval_cv_lookup_ ## type(ptr, opline->op2.var, execute_data)
+ _get_zval_cv_lookup_ ## type(ptr, opline->op2.var EXECUTE_DATA_CC)
+
+#define UNDEF_RESULT() do { \
+ if (opline->result_type & (IS_VAR | IS_TMP_VAR)) { \
+ ZVAL_UNDEF(EX_VAR(opline->result.var)); \
+ } \
+ } while (0)
#include "zend_vm_execute.h"
@@ -3041,12 +3022,35 @@ ZEND_API user_opcode_handler_t zend_get_user_opcode_handler(zend_uchar opcode)
ZEND_API zval *zend_get_zval_ptr(int op_type, const znode_op *node, const zend_execute_data *execute_data, zend_free_op *should_free, int type)
{
- return get_zval_ptr(op_type, *node, execute_data, should_free, type);
+ zval *ret;
+
+ switch (op_type) {
+ case IS_CONST:
+ ret = EX_CONSTANT(*node);
+ *should_free = NULL;
+ break;
+ case IS_TMP_VAR:
+ case IS_VAR:
+ ret = EX_VAR(node->var);
+ *should_free = ret;
+ break;
+ case IS_CV:
+ ret = EX_VAR(node->var);
+ *should_free = NULL;
+ break;
+ default:
+ ret = NULL;
+ *should_free = ret;
+ break;
+ }
+ return ret;
}
ZEND_API void ZEND_FASTCALL zend_check_internal_arg_type(zend_function *zf, uint32_t arg_num, zval *arg)
{
- zend_verify_internal_arg_type(zf, arg_num, arg);
+ void *dummy_cache_slot = NULL;
+
+ zend_verify_arg_type(zf, arg_num, arg, NULL, &dummy_cache_slot);
}
ZEND_API int ZEND_FASTCALL zend_check_arg_type(zend_function *zf, uint32_t arg_num, zval *arg, zval *default_value, void **cache_slot)
@@ -3060,4 +3064,6 @@ ZEND_API int ZEND_FASTCALL zend_check_arg_type(zend_function *zf, uint32_t arg_n
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_execute.h b/Zend/zend_execute.h
index 2f0c40fd39..51a6dc84d5 100644
--- a/Zend/zend_execute.h
+++ b/Zend/zend_execute.h
@@ -37,6 +37,8 @@ void init_executor(void);
void shutdown_executor(void);
void shutdown_destructors(void);
ZEND_API void zend_init_execute_data(zend_execute_data *execute_data, zend_op_array *op_array, zval *return_value);
+ZEND_API void zend_init_func_execute_data(zend_execute_data *execute_data, zend_op_array *op_array, zval *return_value);
+ZEND_API void zend_init_code_execute_data(zend_execute_data *execute_data, zend_op_array *op_array, zval *return_value);
ZEND_API void zend_execute(zend_op_array *op_array, zval *return_value);
ZEND_API void execute_ex(zend_execute_data *execute_data);
ZEND_API void execute_internal(zend_execute_data *execute_data, zval *return_value);
@@ -105,8 +107,7 @@ static zend_always_inline zval* zend_assign_to_variable(zval *variable_ptr, zval
return variable_ptr;
} else { /* we need to split */
/* optimized version of GC_ZVAL_CHECK_POSSIBLE_ROOT(variable_ptr) */
- if ((Z_COLLECTABLE_P(variable_ptr)) &&
- UNEXPECTED(!GC_INFO(garbage))) {
+ if (UNEXPECTED(GC_MAY_LEAK(garbage))) {
gc_possible_root(garbage);
}
}
@@ -220,12 +221,12 @@ static zend_always_inline void zend_vm_stack_free_extra_args_ex(uint32_t call_in
do {
p--;
if (Z_REFCOUNTED_P(p)) {
- if (!Z_DELREF_P(p)) {
- zend_refcounted *r = Z_COUNTED_P(p);
+ zend_refcounted *r = Z_COUNTED_P(p);
+ if (!--GC_REFCOUNT(r)) {
ZVAL_NULL(p);
zval_dtor_func(r);
} else {
- GC_ZVAL_CHECK_POSSIBLE_ROOT(p);
+ gc_check_possible_root(r);
}
}
} while (p != end);
@@ -288,7 +289,7 @@ ZEND_API const char *get_active_class_name(const char **space);
ZEND_API const char *get_active_function_name(void);
ZEND_API const char *zend_get_executed_filename(void);
ZEND_API zend_string *zend_get_executed_filename_ex(void);
-ZEND_API uint zend_get_executed_lineno(void);
+ZEND_API uint32_t zend_get_executed_lineno(void);
ZEND_API zend_class_entry *zend_get_executed_scope(void);
ZEND_API zend_bool zend_is_executing(void);
@@ -299,8 +300,7 @@ ZEND_API zend_class_entry *zend_fetch_class(zend_string *class_name, int fetch_t
ZEND_API zend_class_entry *zend_fetch_class_by_name(zend_string *class_name, const zval *key, int fetch_type);
void zend_verify_abstract_class(zend_class_entry *ce);
-ZEND_API void zend_fetch_dimension_by_zval(zval *result, zval *container, zval *dim);
-ZEND_API void zend_fetch_dimension_by_zval_is(zval *result, zval *container, zval *dim, int dim_type);
+ZEND_API void zend_fetch_dimension_const(zval *result, zval *container, zval *dim, int type);
ZEND_API zval* zend_get_compiled_variable_value(const zend_execute_data *execute_data_ptr, uint32_t var);
@@ -324,6 +324,8 @@ ZEND_API void zend_clean_and_cache_symbol_table(zend_array *symbol_table);
void zend_free_compiled_variables(zend_execute_data *execute_data);
void zend_cleanup_unfinished_execution(zend_execute_data *execute_data, uint32_t op_num, uint32_t catch_op_num);
+ZEND_API int ZEND_FASTCALL zend_do_fcall_overloaded(zend_execute_data *call, zval *ret);
+
#define CACHE_ADDR(num) \
((void**)((char*)EX_RUN_TIME_CACHE() + (num)))
@@ -377,4 +379,6 @@ END_EXTERN_C()
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c
index 8688a9dcf9..e46d0d84ee 100644
--- a/Zend/zend_execute_API.c
+++ b/Zend/zend_execute_API.c
@@ -100,28 +100,21 @@ static void zend_extension_deactivator(zend_extension *extension) /* {{{ */
}
/* }}} */
-static int clean_non_persistent_function(zval *zv) /* {{{ */
+static int clean_non_persistent_constant_full(zval *zv) /* {{{ */
{
- zend_function *function = Z_PTR_P(zv);
- return (function->type == ZEND_INTERNAL_FUNCTION) ? ZEND_HASH_APPLY_STOP : ZEND_HASH_APPLY_REMOVE;
+ zend_constant *c = Z_PTR_P(zv);
+ return (c->flags & CONST_PERSISTENT) ? ZEND_HASH_APPLY_KEEP : ZEND_HASH_APPLY_REMOVE;
}
/* }}} */
-ZEND_API int clean_non_persistent_function_full(zval *zv) /* {{{ */
+static int clean_non_persistent_function_full(zval *zv) /* {{{ */
{
zend_function *function = Z_PTR_P(zv);
return (function->type == ZEND_INTERNAL_FUNCTION) ? ZEND_HASH_APPLY_KEEP : ZEND_HASH_APPLY_REMOVE;
}
/* }}} */
-static int clean_non_persistent_class(zval *zv) /* {{{ */
-{
- zend_class_entry *ce = Z_PTR_P(zv);
- return (ce->type == ZEND_INTERNAL_CLASS) ? ZEND_HASH_APPLY_STOP : ZEND_HASH_APPLY_REMOVE;
-}
-/* }}} */
-
-ZEND_API int clean_non_persistent_class_full(zval *zv) /* {{{ */
+static int clean_non_persistent_class_full(zval *zv) /* {{{ */
{
zend_class_entry *ce = Z_PTR_P(zv);
return (ce->type == ZEND_INTERNAL_CLASS) ? ZEND_HASH_APPLY_KEEP : ZEND_HASH_APPLY_REMOVE;
@@ -153,7 +146,6 @@ void init_executor(void) /* {{{ */
zend_vm_stack_init();
zend_hash_init(&EG(symbol_table), 64, NULL, ZVAL_PTR_DTOR, 0);
- EG(valid_symbol_table) = 1;
zend_llist_apply(&zend_extensions, (llist_apply_func_t) zend_extension_activator);
@@ -162,6 +154,7 @@ void init_executor(void) /* {{{ */
EG(ticks_count) = 0;
ZVAL_UNDEF(&EG(user_error_handler));
+ ZVAL_UNDEF(&EG(user_exception_handler));
EG(current_execute_data) = NULL;
@@ -185,6 +178,8 @@ void init_executor(void) /* {{{ */
EG(ht_iterators) = EG(ht_iterators_slots);
memset(EG(ht_iterators), 0, sizeof(EG(ht_iterators_slots)));
+ EG(each_deprecation_thrown) = 0;
+
EG(active) = 1;
}
/* }}} */
@@ -251,139 +246,127 @@ void shutdown_destructors(void) /* {{{ */
void shutdown_executor(void) /* {{{ */
{
- zend_function *func;
- zend_class_entry *ce;
+ zend_string *key;
+ zval *zv;
+#if ZEND_DEBUG
+ zend_bool fast_shutdown = 0;
+#else
+ zend_bool fast_shutdown = is_zend_mm() && !EG(full_tables_cleanup);
+#endif
zend_try {
+ zend_llist_destroy(&CG(open_files));
+ } zend_end_try();
-/* Removed because this can not be safely done, e.g. in this situation:
- Object 1 creates object 2
- Object 3 holds reference to object 2.
- Now when 1 and 2 are destroyed, 3 can still access 2 in its destructor, with
- very problematic results */
-/* zend_objects_store_call_destructors(&EG(objects_store)); */
+ zend_try {
+ zend_close_rsrc_list(&EG(regular_list));
+ } zend_end_try();
-/* Moved after symbol table cleaners, because some of the cleaners can call
- destructors, which would use EG(symtable_cache_ptr) and thus leave leaks */
-/* while (EG(symtable_cache_ptr)>=EG(symtable_cache)) {
- zend_hash_destroy(*EG(symtable_cache_ptr));
- efree(*EG(symtable_cache_ptr));
- EG(symtable_cache_ptr)--;
- }
-*/
+ zend_objects_store_free_object_storage(&EG(objects_store), fast_shutdown);
+
+ /* All resources and objects are destroyed. */
+ /* No PHP callback functions may be called after this point. */
+ EG(active) = 0;
+
+ zend_try {
zend_llist_apply(&zend_extensions, (llist_apply_func_t) zend_extension_deactivator);
+ } zend_end_try();
- if (CG(unclean_shutdown)) {
- EG(symbol_table).pDestructor = zend_unclean_zval_ptr_dtor;
- }
+ if (fast_shutdown) {
+ /* Fast Request Shutdown
+ * =====================
+ * Zend Memory Manager frees memory by its own. We don't have to free
+ * each allocated block separately.
+ */
+ ZEND_HASH_REVERSE_FOREACH_VAL(EG(zend_constants), zv) {
+ zend_constant *c = Z_PTR_P(zv);
+ if (c->flags & CONST_PERSISTENT) {
+ break;
+ }
+ } ZEND_HASH_FOREACH_END_DEL();
+ ZEND_HASH_REVERSE_FOREACH_VAL(EG(function_table), zv) {
+ zend_function *func = Z_PTR_P(zv);
+ if (func->type == ZEND_INTERNAL_FUNCTION) {
+ break;
+ }
+ } ZEND_HASH_FOREACH_END_DEL();
+ ZEND_HASH_REVERSE_FOREACH_VAL(EG(class_table), zv) {
+ zend_class_entry *ce = Z_PTR_P(zv);
+ if (ce->type == ZEND_INTERNAL_CLASS) {
+ break;
+ }
+ } ZEND_HASH_FOREACH_END_DEL();
+
+ zend_cleanup_internal_classes();
+ } else {
zend_hash_graceful_reverse_destroy(&EG(symbol_table));
- } zend_end_try();
- EG(valid_symbol_table) = 0;
- zend_try {
- zval *zeh;
+#if ZEND_DEBUG
+ if (GC_G(gc_enabled) && !CG(unclean_shutdown)) {
+ gc_collect_cycles();
+ }
+#endif
+
/* remove error handlers before destroying classes and functions,
* so that if handler used some class, crash would not happen */
if (Z_TYPE(EG(user_error_handler)) != IS_UNDEF) {
- zeh = &EG(user_error_handler);
- zval_ptr_dtor(zeh);
+ zval_ptr_dtor(&EG(user_error_handler));
ZVAL_UNDEF(&EG(user_error_handler));
}
if (Z_TYPE(EG(user_exception_handler)) != IS_UNDEF) {
- zeh = &EG(user_exception_handler);
- zval_ptr_dtor(zeh);
+ zval_ptr_dtor(&EG(user_exception_handler));
ZVAL_UNDEF(&EG(user_exception_handler));
}
zend_stack_clean(&EG(user_error_handlers_error_reporting), NULL, 1);
zend_stack_clean(&EG(user_error_handlers), (void (*)(void *))ZVAL_PTR_DTOR, 1);
zend_stack_clean(&EG(user_exception_handlers), (void (*)(void *))ZVAL_PTR_DTOR, 1);
- } zend_end_try();
- zend_try {
- /* Cleanup static data for functions and arrays.
- * We need a separate cleanup stage because of the following problem:
- * Suppose we destroy class X, which destroys the class's function table,
- * and in the function table we have function foo() that has static $bar.
- * Now if an object of class X is assigned to $bar, its destructor will be
- * called and will fail since X's function table is in mid-destruction.
- * So we want first of all to clean up all data and then move to tables destruction.
- * Note that only run-time accessed data need to be cleaned up, pre-defined data can
- * not contain objects and thus are not probelmatic */
+ zend_vm_stack_destroy();
+
if (EG(full_tables_cleanup)) {
- ZEND_HASH_FOREACH_PTR(EG(function_table), func) {
- if (func->type == ZEND_USER_FUNCTION) {
- zend_cleanup_op_array_data((zend_op_array *) func);
+ zend_hash_reverse_apply(EG(zend_constants), clean_non_persistent_constant_full);
+ zend_hash_reverse_apply(EG(function_table), clean_non_persistent_function_full);
+ zend_hash_reverse_apply(EG(class_table), clean_non_persistent_class_full);
+ } else {
+ ZEND_HASH_REVERSE_FOREACH_STR_KEY_VAL(EG(zend_constants), key, zv) {
+ zend_constant *c = Z_PTR_P(zv);
+ if (c->flags & CONST_PERSISTENT) {
+ break;
}
- } ZEND_HASH_FOREACH_END();
- ZEND_HASH_REVERSE_FOREACH_PTR(EG(class_table), ce) {
- if (ce->type == ZEND_USER_CLASS) {
- zend_cleanup_user_class_data(ce);
- } else {
- zend_cleanup_internal_class_data(ce);
+ zval_ptr_dtor(&c->value);
+ if (c->name) {
+ zend_string_release(c->name);
}
- } ZEND_HASH_FOREACH_END();
- } else {
- ZEND_HASH_REVERSE_FOREACH_PTR(EG(function_table), func) {
- if (func->type != ZEND_USER_FUNCTION) {
+ efree(c);
+ zend_string_release(key);
+ } ZEND_HASH_FOREACH_END_DEL();
+ ZEND_HASH_REVERSE_FOREACH_STR_KEY_VAL(EG(function_table), key, zv) {
+ zend_function *func = Z_PTR_P(zv);
+ if (func->type == ZEND_INTERNAL_FUNCTION) {
break;
}
- zend_cleanup_op_array_data((zend_op_array *) func);
- } ZEND_HASH_FOREACH_END();
- ZEND_HASH_REVERSE_FOREACH_PTR(EG(class_table), ce) {
- if (ce->type != ZEND_USER_CLASS) {
+ destroy_op_array(&func->op_array);
+ zend_string_release(key);
+ } ZEND_HASH_FOREACH_END_DEL();
+ ZEND_HASH_REVERSE_FOREACH_STR_KEY_VAL(EG(class_table), key, zv) {
+ zend_class_entry *ce = Z_PTR_P(zv);
+ if (ce->type == ZEND_INTERNAL_CLASS) {
break;
}
- zend_cleanup_user_class_data(ce);
- } ZEND_HASH_FOREACH_END();
- zend_cleanup_internal_classes();
+ destroy_zend_class(zv);
+ zend_string_release(key);
+ } ZEND_HASH_FOREACH_END_DEL();
}
- } zend_end_try();
- zend_try {
- zend_llist_destroy(&CG(open_files));
- } zend_end_try();
-
- zend_try {
- clean_non_persistent_constants();
- } zend_end_try();
-
- zend_try {
- zend_close_rsrc_list(&EG(regular_list));
- } zend_end_try();
-
-#if ZEND_DEBUG
- if (GC_G(gc_enabled) && !CG(unclean_shutdown)) {
- gc_collect_cycles();
- }
-#endif
-
- zend_try {
- zend_objects_store_free_object_storage(&EG(objects_store));
-
- zend_vm_stack_destroy();
-
- /* Destroy all op arrays */
- if (EG(full_tables_cleanup)) {
- zend_hash_reverse_apply(EG(function_table), clean_non_persistent_function_full);
- zend_hash_reverse_apply(EG(class_table), clean_non_persistent_class_full);
- } else {
- zend_hash_reverse_apply(EG(function_table), clean_non_persistent_function);
- zend_hash_reverse_apply(EG(class_table), clean_non_persistent_class);
- }
+ zend_cleanup_internal_classes();
while (EG(symtable_cache_ptr)>=EG(symtable_cache)) {
zend_hash_destroy(*EG(symtable_cache_ptr));
FREE_HASHTABLE(*EG(symtable_cache_ptr));
EG(symtable_cache_ptr)--;
}
- } zend_end_try();
-
- zend_try {
-#if 0&&ZEND_DEBUG
- signal(SIGSEGV, original_sigsegv_handler);
-#endif
zend_hash_destroy(&EG(included_files));
@@ -395,9 +378,11 @@ void shutdown_executor(void) /* {{{ */
zend_hash_destroy(EG(in_autoload));
FREE_HASHTABLE(EG(in_autoload));
}
- } zend_end_try();
- zend_shutdown_fpu();
+ if (EG(ht_iterators) != EG(ht_iterators_slots)) {
+ efree(EG(ht_iterators));
+ }
+ }
#if ZEND_DEBUG
if (EG(ht_iterators_used) && !CG(unclean_shutdown)) {
@@ -406,11 +391,8 @@ void shutdown_executor(void) /* {{{ */
#endif
EG(ht_iterators_used) = 0;
- if (EG(ht_iterators) != EG(ht_iterators_slots)) {
- efree(EG(ht_iterators));
- }
- EG(active) = 0;
+ zend_shutdown_fpu();
}
/* }}} */
@@ -505,7 +487,7 @@ ZEND_API zend_string *zend_get_executed_filename_ex(void) /* {{{ */
}
/* }}} */
-ZEND_API uint zend_get_executed_lineno(void) /* {{{ */
+ZEND_API uint32_t zend_get_executed_lineno(void) /* {{{ */
{
zend_execute_data *ex = EG(current_execute_data);
@@ -573,7 +555,7 @@ ZEND_API int zval_update_constant_ex(zval *p, zend_class_entry *scope) /* {{{ */
zend_throw_error(NULL, "Cannot declare self-referencing constant '%s'", Z_STRVAL_P(p));
return FAILURE;
}
- inline_change = (Z_TYPE_FLAGS_P(p) & IS_TYPE_IMMUTABLE) == 0;
+ inline_change = (Z_TYPE_FLAGS_P(p) & IS_TYPE_REFCOUNTED) != 0;
SEPARATE_ZVAL_NOREF(p);
MARK_CONSTANT_VISITED(p);
if (Z_CONST_FLAGS_P(p) & IS_CONSTANT_CLASS) {
@@ -609,7 +591,7 @@ ZEND_API int zval_update_constant_ex(zval *p, zend_class_entry *scope) /* {{{ */
actual_len -= (actual - Z_STRVAL_P(p));
}
- zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'", actual, actual);
+ zend_error(E_WARNING, "Use of undefined constant %s - assumed '%s' (this will throw an Error in a future version of PHP)", actual, actual);
if (EG(exception)) {
RESET_CONSTANT_VISITED(p);
return FAILURE;
@@ -638,7 +620,7 @@ ZEND_API int zval_update_constant_ex(zval *p, zend_class_entry *scope) /* {{{ */
} else if (Z_TYPE_P(p) == IS_CONSTANT_AST) {
zval tmp;
- inline_change = (Z_TYPE_FLAGS_P(p) & IS_TYPE_IMMUTABLE) == 0;
+ inline_change = (Z_TYPE_FLAGS_P(p) & IS_TYPE_REFCOUNTED) != 0;
if (UNEXPECTED(zend_ast_evaluate(&tmp, Z_ASTVAL_P(p), scope) != SUCCESS)) {
return FAILURE;
}
@@ -722,19 +704,18 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache) /
}
if (!fci_cache || !fci_cache->initialized) {
- zend_string *callable_name;
char *error = NULL;
if (!fci_cache) {
fci_cache = &fci_cache_local;
}
- if (!zend_is_callable_ex(&fci->function_name, fci->object, IS_CALLABLE_CHECK_SILENT, &callable_name, fci_cache, &error)) {
+ if (!zend_is_callable_ex(&fci->function_name, fci->object, IS_CALLABLE_CHECK_SILENT, NULL, fci_cache, &error)) {
if (error) {
+ zend_string *callable_name
+ = zend_get_callable_name_ex(&fci->function_name, fci->object);
zend_error(E_WARNING, "Invalid callback %s, %s", ZSTR_VAL(callable_name), error);
efree(error);
- }
- if (callable_name) {
zend_string_release(callable_name);
}
if (EG(current_execute_data) == &dummy_execute_data) {
@@ -749,16 +730,12 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache) /
zend_error(E_DEPRECATED, "%s", error);
efree(error);
if (UNEXPECTED(EG(exception))) {
- if (callable_name) {
- zend_string_release(callable_name);
- }
if (EG(current_execute_data) == &dummy_execute_data) {
EG(current_execute_data) = dummy_execute_data.prev_execute_data;
}
return FAILURE;
}
}
- zend_string_release(callable_name);
}
func = fci_cache->function_handler;
@@ -767,38 +744,19 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache) /
call = zend_vm_stack_push_call_frame(ZEND_CALL_TOP_FUNCTION | ZEND_CALL_DYNAMIC,
func, fci->param_count, fci_cache->called_scope, fci->object);
- if (fci->object &&
- (!EG(objects_store).object_buckets ||
- !IS_OBJ_VALID(EG(objects_store).object_buckets[fci->object->handle]))) {
- zend_vm_stack_free_call_frame(call);
- if (EG(current_execute_data) == &dummy_execute_data) {
- EG(current_execute_data) = dummy_execute_data.prev_execute_data;
- }
- return FAILURE;
- }
- if (func->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED)) {
- if (func->common.fn_flags & ZEND_ACC_ABSTRACT) {
- zend_throw_error(NULL, "Cannot call abstract method %s::%s()", ZSTR_VAL(func->common.scope->name), ZSTR_VAL(func->common.function_name));
+ if (UNEXPECTED(func->common.fn_flags & ZEND_ACC_DEPRECATED)) {
+ zend_error(E_DEPRECATED, "Function %s%s%s() is deprecated",
+ func->common.scope ? ZSTR_VAL(func->common.scope->name) : "",
+ func->common.scope ? "::" : "",
+ ZSTR_VAL(func->common.function_name));
+ if (UNEXPECTED(EG(exception))) {
zend_vm_stack_free_call_frame(call);
if (EG(current_execute_data) == &dummy_execute_data) {
EG(current_execute_data) = dummy_execute_data.prev_execute_data;
}
return FAILURE;
}
- if (func->common.fn_flags & ZEND_ACC_DEPRECATED) {
- zend_error(E_DEPRECATED, "Function %s%s%s() is deprecated",
- func->common.scope ? ZSTR_VAL(func->common.scope->name) : "",
- func->common.scope ? "::" : "",
- ZSTR_VAL(func->common.function_name));
- if (UNEXPECTED(EG(exception))) {
- zend_vm_stack_free_call_frame(call);
- if (EG(current_execute_data) == &dummy_execute_data) {
- EG(current_execute_data) = dummy_execute_data.prev_execute_data;
- }
- return FAILURE;
- }
- }
}
for (i=0; i<fci->param_count; i++) {
@@ -842,16 +800,22 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache) /
}
if (UNEXPECTED(func->op_array.fn_flags & ZEND_ACC_CLOSURE)) {
+ uint32_t call_info;
+
ZEND_ASSERT(GC_TYPE((zend_object*)func->op_array.prototype) == IS_OBJECT);
GC_REFCOUNT((zend_object*)func->op_array.prototype)++;
- ZEND_ADD_CALL_FLAG(call, ZEND_CALL_CLOSURE);
+ call_info = ZEND_CALL_CLOSURE;
+ if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
+ call_info |= ZEND_CALL_FAKE_CLOSURE;
+ }
+ ZEND_ADD_CALL_FLAG(call, call_info);
}
if (func->type == ZEND_USER_FUNCTION) {
int call_via_handler = (func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) != 0;
const zend_op *current_opline_before_exception = EG(opline_before_exception);
- zend_init_execute_data(call, &func->op_array, fci->retval);
+ zend_init_func_execute_data(call, &func->op_array, fci->retval);
zend_execute_ex(call);
EG(opline_before_exception) = current_opline_before_exception;
if (call_via_handler) {
@@ -873,12 +837,6 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache) /
EG(current_execute_data) = call->prev_execute_data;
zend_vm_stack_free_args(call);
- /* We shouldn't fix bad extensions here,
- because it can break proper ones (Bug #34045)
- if (!EX(function_state).function->common.return_reference)
- {
- INIT_PZVAL(f->retval);
- }*/
if (EG(exception)) {
zval_ptr_dtor(fci->retval);
ZVAL_UNDEF(fci->retval);
@@ -920,9 +878,15 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache) /
EG(current_execute_data) = dummy_execute_data.prev_execute_data;
}
- if (EG(exception)) {
- zend_throw_exception_internal(NULL);
+ if (UNEXPECTED(EG(exception))) {
+ if (UNEXPECTED(!EG(current_execute_data))) {
+ zend_throw_exception_internal(NULL);
+ } else if (EG(current_execute_data)->func &&
+ ZEND_USER_CODE(EG(current_execute_data)->func->common.type)) {
+ zend_rethrow_exception(EG(current_execute_data));
+ }
}
+
return SUCCESS;
}
/* }}} */
@@ -970,7 +934,7 @@ ZEND_API zend_class_entry *zend_lookup_class_ex(zend_string *name, const zval *k
}
if (!EG(autoload_func)) {
- zend_function *func = zend_hash_find_ptr(EG(function_table), CG(known_strings)[ZEND_STR_MAGIC_AUTOLOAD]);
+ zend_function *func = zend_hash_find_ptr(EG(function_table), ZSTR_KNOWN(ZEND_STR_MAGIC_AUTOLOAD));
if (func) {
EG(autoload_func) = func;
} else {
@@ -983,10 +947,8 @@ ZEND_API zend_class_entry *zend_lookup_class_ex(zend_string *name, const zval *k
}
/* Verify class name before passing it to __autoload() */
- if (strspn(ZSTR_VAL(name), "0123456789_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377\\") != ZSTR_LEN(name)) {
- if (!key) {
- zend_string_release(lc_name);
- }
+ if (!key && strspn(ZSTR_VAL(name), "0123456789_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377\\") != ZSTR_LEN(name)) {
+ zend_string_release(lc_name);
return NULL;
}
@@ -1206,7 +1168,7 @@ static void zend_timeout_handler(int dummy) /* {{{ */
if (EG(timed_out)) {
/* Die on hard timeout */
const char *error_filename = NULL;
- uint error_lineno = 0;
+ uint32_t error_lineno = 0;
char log_buffer[2048];
int output_len = 0;
@@ -1681,7 +1643,7 @@ ZEND_API int zend_set_local_var(zend_string *name, zval *value, int force) /* {{
if (force) {
zend_array *symbol_table = zend_rebuild_symbol_table();
if (symbol_table) {
- return zend_hash_update(symbol_table, name, value) ? SUCCESS : FAILURE;;
+ return zend_hash_update(symbol_table, name, value) ? SUCCESS : FAILURE;
}
}
} else {
@@ -1723,7 +1685,7 @@ ZEND_API int zend_set_local_var_str(const char *name, size_t len, zval *value, i
if (force) {
zend_array *symbol_table = zend_rebuild_symbol_table();
if (symbol_table) {
- return zend_hash_str_update(symbol_table, name, len, value) ? SUCCESS : FAILURE;;
+ return zend_hash_str_update(symbol_table, name, len, value) ? SUCCESS : FAILURE;
}
}
} else {
@@ -1754,4 +1716,6 @@ ZEND_API int zend_forbid_dynamic_call(const char *func_name) /* {{{ */
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_extensions.c b/Zend/zend_extensions.c
index a616d5ea69..cca40dd191 100644
--- a/Zend/zend_extensions.c
+++ b/Zend/zend_extensions.c
@@ -29,8 +29,6 @@ int zend_load_extension(const char *path)
{
#if ZEND_EXTENSIONS_SUPPORT
DL_HANDLE handle;
- zend_extension *new_extension;
- zend_extension_version_info *extension_version_info;
handle = DL_LOAD(path);
if (!handle) {
@@ -43,6 +41,22 @@ int zend_load_extension(const char *path)
#endif
return FAILURE;
}
+ return zend_load_extension_handle(handle, path);
+#else
+ fprintf(stderr, "Extensions are not supported on this platform.\n");
+/* See http://support.microsoft.com/kb/190351 */
+#ifdef ZEND_WIN32
+ fflush(stderr);
+#endif
+ return FAILURE;
+#endif
+}
+
+int zend_load_extension_handle(DL_HANDLE handle, const char *path)
+{
+#if ZEND_EXTENSIONS_SUPPORT
+ zend_extension *new_extension;
+ zend_extension_version_info *extension_version_info;
extension_version_info = (zend_extension_version_info *) DL_FETCH_SYMBOL(handle, "extension_version_info");
if (!extension_version_info) {
@@ -62,7 +76,6 @@ int zend_load_extension(const char *path)
return FAILURE;
}
-
/* allow extension to proclaim compatibility with any Zend version */
if (extension_version_info->zend_extension_api_no != ZEND_EXTENSION_API_NO &&(!new_extension->api_no_check || new_extension->api_no_check(ZEND_EXTENSION_API_NO) != SUCCESS)) {
if (extension_version_info->zend_extension_api_no > ZEND_EXTENSION_API_NO) {
@@ -327,4 +340,6 @@ ZEND_API size_t zend_extensions_op_array_persist(zend_op_array *op_array, void *
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_extensions.h b/Zend/zend_extensions.h
index 4707edfce3..b865644403 100644
--- a/Zend/zend_extensions.h
+++ b/Zend/zend_extensions.h
@@ -46,7 +46,7 @@ You can use the following macro to check the extension API version for compatibi
/* The first number is the engine version and the rest is the date (YYYYMMDD).
* This way engine 2/3 API no. is always greater than engine 1 API no.. */
-#define ZEND_EXTENSION_API_NO 320160303
+#define ZEND_EXTENSION_API_NO 320170718
typedef struct _zend_extension_version_info {
int zend_extension_api_no;
@@ -145,6 +145,7 @@ void zend_shutdown_extensions(void);
BEGIN_EXTERN_C()
ZEND_API int zend_load_extension(const char *path);
+ZEND_API int zend_load_extension_handle(DL_HANDLE handle, const char *path);
ZEND_API int zend_register_extension(zend_extension *new_extension, DL_HANDLE handle);
ZEND_API zend_extension *zend_get_extension(const char *extension_name);
ZEND_API size_t zend_extensions_op_array_persist_calc(zend_op_array *op_array);
@@ -159,4 +160,6 @@ END_EXTERN_C()
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_float.c b/Zend/zend_float.c
index 2dd1d3b6cb..04f2acce8f 100644
--- a/Zend/zend_float.c
+++ b/Zend/zend_float.c
@@ -56,3 +56,13 @@ ZEND_API void zend_ensure_fpu_mode(void) /* {{{ */
XPFPA_SWITCH_DOUBLE();
}
/* }}} */
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
+ */
diff --git a/Zend/zend_float.h b/Zend/zend_float.h
index 95d8e51a1a..ef2f2dba56 100644
--- a/Zend/zend_float.h
+++ b/Zend/zend_float.h
@@ -418,3 +418,13 @@ END_EXTERN_C()
#endif /* FPU CONTROL */
#endif
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
+ */
diff --git a/Zend/zend_gc.c b/Zend/zend_gc.c
index 7bfbe279ab..47236a934e 100644
--- a/Zend/zend_gc.c
+++ b/Zend/zend_gc.c
@@ -375,11 +375,11 @@ tail_call:
ht = NULL;
GC_REF_SET_BLACK(ref);
- if (GC_TYPE(ref) == IS_OBJECT && !(GC_FLAGS(ref) & IS_OBJ_FREE_CALLED)) {
+ if (GC_TYPE(ref) == IS_OBJECT) {
zend_object_get_gc_t get_gc;
zend_object *obj = (zend_object*)ref;
- if (EXPECTED(IS_OBJ_VALID(EG(objects_store).object_buckets[obj->handle]) &&
+ if (EXPECTED(!(GC_FLAGS(ref) & IS_OBJ_FREE_CALLED) &&
(get_gc = obj->handlers->get_gc) != NULL)) {
int n;
zval *zv, *end;
@@ -485,12 +485,12 @@ tail_call:
GC_BENCH_INC(zval_marked_grey);
GC_REF_SET_COLOR(ref, GC_GREY);
- if (GC_TYPE(ref) == IS_OBJECT && !(GC_FLAGS(ref) & IS_OBJ_FREE_CALLED)) {
+ if (GC_TYPE(ref) == IS_OBJECT) {
zend_object_get_gc_t get_gc;
zend_object *obj = (zend_object*)ref;
- if (EXPECTED(IS_OBJ_VALID(EG(objects_store).object_buckets[obj->handle]) &&
- (get_gc = obj->handlers->get_gc) != NULL)) {
+ if (EXPECTED(!(GC_FLAGS(ref) & IS_OBJ_FREE_CALLED) &&
+ (get_gc = obj->handlers->get_gc) != NULL)) {
int n;
zval *zv, *end;
zval tmp;
@@ -529,11 +529,6 @@ tail_call:
}
} else if (GC_TYPE(ref) == IS_REFERENCE) {
if (Z_REFCOUNTED(((zend_reference*)ref)->val)) {
- if (UNEXPECTED(!EG(objects_store).object_buckets) &&
- Z_TYPE(((zend_reference*)ref)->val) == IS_OBJECT) {
- Z_TYPE_INFO(((zend_reference*)ref)->val) = IS_NULL;
- return;
- }
ref = Z_COUNTED(((zend_reference*)ref)->val);
GC_REFCOUNT(ref)--;
goto tail_call;
@@ -563,14 +558,9 @@ tail_call:
zv = Z_INDIRECT_P(zv);
}
if (Z_REFCOUNTED_P(zv)) {
- if (Z_TYPE_P(zv) == IS_OBJECT &&
- UNEXPECTED(!EG(objects_store).object_buckets)) {
- Z_TYPE_INFO_P(zv) = IS_NULL;
- } else {
- ref = Z_COUNTED_P(zv);
- GC_REFCOUNT(ref)--;
- gc_mark_grey(ref);
- }
+ ref = Z_COUNTED_P(zv);
+ GC_REFCOUNT(ref)--;
+ gc_mark_grey(ref);
}
p++;
}
@@ -578,14 +568,9 @@ tail_call:
if (Z_TYPE_P(zv) == IS_INDIRECT) {
zv = Z_INDIRECT_P(zv);
}
- if (Z_TYPE_P(zv) == IS_OBJECT &&
- UNEXPECTED(!EG(objects_store).object_buckets)) {
- Z_TYPE_INFO_P(zv) = IS_NULL;
- } else {
- ref = Z_COUNTED_P(zv);
- GC_REFCOUNT(ref)--;
- goto tail_call;
- }
+ ref = Z_COUNTED_P(zv);
+ GC_REFCOUNT(ref)--;
+ goto tail_call;
}
}
@@ -613,11 +598,11 @@ tail_call:
gc_scan_black(ref);
} else {
GC_REF_SET_COLOR(ref, GC_WHITE);
- if (GC_TYPE(ref) == IS_OBJECT && !(GC_FLAGS(ref) & IS_OBJ_FREE_CALLED)) {
+ if (GC_TYPE(ref) == IS_OBJECT) {
zend_object_get_gc_t get_gc;
zend_object *obj = (zend_object*)ref;
- if (EXPECTED(IS_OBJ_VALID(EG(objects_store).object_buckets[obj->handle]) &&
+ if (EXPECTED(!(GC_FLAGS(ref) & IS_OBJ_FREE_CALLED) &&
(get_gc = obj->handlers->get_gc) != NULL)) {
int n;
zval *zv, *end;
@@ -775,11 +760,11 @@ tail_call:
count++;
}
- if (GC_TYPE(ref) == IS_OBJECT && !(GC_FLAGS(ref) & IS_OBJ_FREE_CALLED)) {
+ if (GC_TYPE(ref) == IS_OBJECT) {
zend_object_get_gc_t get_gc;
zend_object *obj = (zend_object*)ref;
- if (EXPECTED(IS_OBJ_VALID(EG(objects_store).object_buckets[obj->handle]) &&
+ if (EXPECTED(!(GC_FLAGS(ref) & IS_OBJ_FREE_CALLED) &&
(get_gc = obj->handlers->get_gc) != NULL)) {
int n;
zval *zv, *end;
@@ -967,12 +952,12 @@ tail_call:
GC_REMOVE_FROM_BUFFER(ref);
}
- if (GC_TYPE(ref) == IS_OBJECT && !(GC_FLAGS(ref) & IS_OBJ_FREE_CALLED)) {
+ if (GC_TYPE(ref) == IS_OBJECT) {
zend_object_get_gc_t get_gc;
zend_object *obj = (zend_object*)ref;
- if (EXPECTED(IS_OBJ_VALID(EG(objects_store).object_buckets[obj->handle]) &&
- (get_gc = obj->handlers->get_gc) != NULL)) {
+ if (EXPECTED(!(GC_FLAGS(ref) & IS_OBJ_FREE_CALLED) &&
+ (get_gc = obj->handlers->get_gc) != NULL)) {
int n;
zval *zv, *end;
zval tmp;
@@ -1111,45 +1096,45 @@ ZEND_API int zend_gc_collect_cycles(void)
if (gc_flags & GC_HAS_DESTRUCTORS) {
GC_TRACE("Calling destructors");
- if (EG(objects_store).object_buckets) {
- /* Remember reference counters before calling destructors */
- current = to_free.next;
- while (current != &to_free) {
- current->refcount = GC_REFCOUNT(current->ref);
- current = current->next;
- }
- /* Call destructors */
- current = to_free.next;
- while (current != &to_free) {
- p = current->ref;
- GC_G(next_to_free) = current->next;
- if (GC_TYPE(p) == IS_OBJECT) {
- zend_object *obj = (zend_object*)p;
-
- if (IS_OBJ_VALID(EG(objects_store).object_buckets[obj->handle]) &&
- !(GC_FLAGS(obj) & IS_OBJ_DESTRUCTOR_CALLED)) {
- GC_TRACE_REF(obj, "calling destructor");
- GC_FLAGS(obj) |= IS_OBJ_DESTRUCTOR_CALLED;
- if (obj->handlers->dtor_obj) {
- GC_REFCOUNT(obj)++;
- obj->handlers->dtor_obj(obj);
- GC_REFCOUNT(obj)--;
- }
+ /* Remember reference counters before calling destructors */
+ current = to_free.next;
+ while (current != &to_free) {
+ current->refcount = GC_REFCOUNT(current->ref);
+ current = current->next;
+ }
+
+ /* Call destructors */
+ current = to_free.next;
+ while (current != &to_free) {
+ p = current->ref;
+ GC_G(next_to_free) = current->next;
+ if (GC_TYPE(p) == IS_OBJECT) {
+ zend_object *obj = (zend_object*)p;
+
+ if (!(GC_FLAGS(obj) & IS_OBJ_DESTRUCTOR_CALLED)) {
+ GC_TRACE_REF(obj, "calling destructor");
+ GC_FLAGS(obj) |= IS_OBJ_DESTRUCTOR_CALLED;
+ if (obj->handlers->dtor_obj
+ && (obj->handlers->dtor_obj != zend_objects_destroy_object
+ || obj->ce->destructor)) {
+ GC_REFCOUNT(obj)++;
+ obj->handlers->dtor_obj(obj);
+ GC_REFCOUNT(obj)--;
}
}
- current = GC_G(next_to_free);
}
+ current = GC_G(next_to_free);
+ }
- /* Remove values captured in destructors */
- current = to_free.next;
- while (current != &to_free) {
- GC_G(next_to_free) = current->next;
- if (GC_REFCOUNT(current->ref) > current->refcount) {
- gc_remove_nested_data_from_buffer(current->ref, current);
- }
- current = GC_G(next_to_free);
+ /* Remove values captured in destructors */
+ current = to_free.next;
+ while (current != &to_free) {
+ GC_G(next_to_free) = current->next;
+ if (GC_REFCOUNT(current->ref) > current->refcount) {
+ gc_remove_nested_data_from_buffer(current->ref, current);
}
+ current = GC_G(next_to_free);
}
}
@@ -1164,26 +1149,27 @@ ZEND_API int zend_gc_collect_cycles(void)
if (GC_TYPE(p) == IS_OBJECT) {
zend_object *obj = (zend_object*)p;
- if (EG(objects_store).object_buckets &&
- IS_OBJ_VALID(EG(objects_store).object_buckets[obj->handle])) {
- EG(objects_store).object_buckets[obj->handle] = SET_OBJ_INVALID(obj);
- GC_TYPE(obj) = IS_NULL;
- if (!(GC_FLAGS(obj) & IS_OBJ_FREE_CALLED)) {
- GC_FLAGS(obj) |= IS_OBJ_FREE_CALLED;
- if (obj->handlers->free_obj) {
- GC_REFCOUNT(obj)++;
- obj->handlers->free_obj(obj);
- GC_REFCOUNT(obj)--;
- }
+ EG(objects_store).object_buckets[obj->handle] = SET_OBJ_INVALID(obj);
+ GC_TYPE(obj) = IS_NULL;
+ if (!(GC_FLAGS(obj) & IS_OBJ_FREE_CALLED)) {
+ GC_FLAGS(obj) |= IS_OBJ_FREE_CALLED;
+ if (obj->handlers->free_obj) {
+ GC_REFCOUNT(obj)++;
+ obj->handlers->free_obj(obj);
+ GC_REFCOUNT(obj)--;
}
- SET_OBJ_BUCKET_NUMBER(EG(objects_store).object_buckets[obj->handle], EG(objects_store).free_list_head);
- EG(objects_store).free_list_head = obj->handle;
- p = current->ref = (zend_refcounted*)(((char*)obj) - obj->handlers->offset);
}
+ SET_OBJ_BUCKET_NUMBER(EG(objects_store).object_buckets[obj->handle], EG(objects_store).free_list_head);
+ EG(objects_store).free_list_head = obj->handle;
+ p = current->ref = (zend_refcounted*)(((char*)obj) - obj->handlers->offset);
} else if (GC_TYPE(p) == IS_ARRAY) {
zend_array *arr = (zend_array*)p;
GC_TYPE(arr) = IS_NULL;
+
+ /* GC may destroy arrays with rc>1. This is valid and safe. */
+ HT_ALLOW_COW_VIOLATION(arr);
+
zend_hash_destroy(arr);
}
current = GC_G(next_to_free);
@@ -1226,6 +1212,8 @@ ZEND_API int zend_gc_collect_cycles(void)
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*
* vim:noexpandtab:
*/
diff --git a/Zend/zend_gc.h b/Zend/zend_gc.h
index ca4487c6d5..f0bc5610cd 100644
--- a/Zend/zend_gc.h
+++ b/Zend/zend_gc.h
@@ -132,9 +132,6 @@ ZEND_API void gc_reset(void);
ZEND_API int zend_gc_collect_cycles(void);
END_EXTERN_C()
-#define GC_ZVAL_CHECK_POSSIBLE_ROOT(z) \
- gc_check_possible_root((z))
-
#define GC_REMOVE_FROM_BUFFER(p) do { \
zend_refcounted *_p = (zend_refcounted*)(p); \
if (GC_ADDRESS(GC_INFO(_p))) { \
@@ -142,11 +139,23 @@ END_EXTERN_C()
} \
} while (0)
-static zend_always_inline void gc_check_possible_root(zval *z)
+#define GC_MAY_LEAK(ref) \
+ ((GC_TYPE_INFO(ref) & \
+ (GC_INFO_MASK | (GC_COLLECTABLE << GC_FLAGS_SHIFT))) == \
+ (GC_COLLECTABLE << GC_FLAGS_SHIFT))
+
+static zend_always_inline void gc_check_possible_root(zend_refcounted *ref)
{
- ZVAL_DEREF(z);
- if (Z_COLLECTABLE_P(z) && UNEXPECTED(!Z_GC_INFO_P(z))) {
- gc_possible_root(Z_COUNTED_P(z));
+ if (GC_TYPE(ref) == IS_REFERENCE) {
+ zval *zv = &((zend_reference*)ref)->val;
+
+ if (!Z_REFCOUNTED_P(zv)) {
+ return;
+ }
+ ref = Z_COUNTED_P(zv);
+ }
+ if (UNEXPECTED(GC_MAY_LEAK(ref))) {
+ gc_possible_root(ref);
}
}
@@ -158,4 +167,6 @@ static zend_always_inline void gc_check_possible_root(zval *z)
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c
index 9242269906..3eb022b78b 100644
--- a/Zend/zend_generators.c
+++ b/Zend/zend_generators.c
@@ -427,7 +427,7 @@ static void zend_generator_throw_exception(zend_generator *generator, zval *exce
if (exception) {
zend_throw_exception_object(exception);
} else {
- zend_throw_exception_internal(NULL);
+ zend_rethrow_exception(EG(current_execute_data));
}
generator->execute_data->opline++;
EG(current_execute_data) = original_execute_data;
@@ -744,12 +744,8 @@ static int zend_generator_get_next_delegated_value(zend_generator *generator) /*
}
return SUCCESS;
-exception: {
- zend_execute_data *ex = EG(current_execute_data);
- EG(current_execute_data) = generator->execute_data;
- zend_throw_exception_internal(NULL);
- EG(current_execute_data) = ex;
- }
+exception:
+ zend_rethrow_exception(generator->execute_data);
failure:
zval_ptr_dtor(&generator->values);
@@ -835,7 +831,11 @@ try_again:
if (UNEXPECTED(EG(exception) != NULL)) {
if (generator == orig_generator) {
zend_generator_close(generator, 0);
- zend_throw_exception_internal(NULL);
+ if (EG(current_execute_data) &&
+ EG(current_execute_data)->func &&
+ ZEND_USER_CODE(EG(current_execute_data)->func->common.type)) {
+ zend_rethrow_exception(EG(current_execute_data));
+ }
} else {
generator = zend_generator_get_current(orig_generator);
zend_generator_throw_exception(generator, NULL);
@@ -1262,4 +1262,6 @@ void zend_register_generator_ce(void) /* {{{ */
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_generators.h b/Zend/zend_generators.h
index bd415d5638..2de3a1d947 100644
--- a/Zend/zend_generators.h
+++ b/Zend/zend_generators.h
@@ -143,4 +143,6 @@ END_EXTERN_C()
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_globals.h b/Zend/zend_globals.h
index e7a48c1be7..802c7be889 100644
--- a/Zend/zend_globals.h
+++ b/Zend/zend_globals.h
@@ -105,18 +105,11 @@ struct _zend_compiler_globals {
uint32_t compiler_options; /* set of ZEND_COMPILE_* constants */
- HashTable const_filenames;
-
zend_oparray_context context;
zend_file_context file_context;
zend_arena *arena;
- zend_string *empty_string;
- zend_string *one_char_string[256];
- zend_string **known_strings;
- uint32_t known_strings_count;
-
HashTable interned_strings;
const zend_encoding **script_encoding_list;
@@ -215,7 +208,7 @@ struct _zend_executor_globals {
struct _zend_module_entry *current_module;
zend_bool active;
- zend_bool valid_symbol_table;
+ zend_uchar flags;
zend_long assertions;
@@ -232,9 +225,14 @@ struct _zend_executor_globals {
zend_function trampoline;
zend_op call_trampoline_op;
+ zend_bool each_deprecation_thrown;
+
void *reserved[ZEND_MAX_RESERVED_RESOURCES];
};
+#define EG_FLAGS_INITIAL 0x00
+#define EG_FLAGS_IN_SHUTDOWN 0x01
+
struct _zend_ini_scanner_globals {
zend_file_handle *yy_in;
zend_file_handle *yy_out;
@@ -304,4 +302,6 @@ struct _zend_php_scanner_globals {
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_globals_macros.h b/Zend/zend_globals_macros.h
index 615068c145..c9840c3514 100644
--- a/Zend/zend_globals_macros.h
+++ b/Zend/zend_globals_macros.h
@@ -76,4 +76,6 @@ END_EXTERN_C()
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c
index dc44383855..f1b0c9b86c 100644
--- a/Zend/zend_hash.c
+++ b/Zend/zend_hash.c
@@ -24,13 +24,15 @@
#include "zend_globals.h"
#include "zend_variables.h"
-#define HT_DEBUG 0
-#if HT_DEBUG
-# define HT_ASSERT(c) ZEND_ASSERT(c)
+#if ZEND_DEBUG
+# define HT_ASSERT(ht, expr) \
+ ZEND_ASSERT((expr) || ((ht)->u.flags & HASH_FLAG_ALLOW_COW_VIOLATION))
#else
-# define HT_ASSERT(c)
+# define HT_ASSERT(ht, expr)
#endif
+#define HT_ASSERT_RC1(ht) HT_ASSERT(ht, GC_REFCOUNT(ht) == 1)
+
#define HT_POISONED_PTR ((HashTable *) (intptr_t) -1)
#if ZEND_DEBUG
@@ -127,7 +129,7 @@ static zend_always_inline uint32_t zend_hash_check_size(uint32_t nSize)
static zend_always_inline void zend_hash_real_init_ex(HashTable *ht, int packed)
{
- HT_ASSERT(GC_REFCOUNT(ht) == 1);
+ HT_ASSERT_RC1(ht);
ZEND_ASSERT(!((ht)->u.flags & HASH_FLAG_INITIALIZED));
if (packed) {
HT_SET_DATA_ADDR(ht, pemalloc(HT_SIZE(ht), (ht)->u.flags & HASH_FLAG_PERSISTENT));
@@ -156,7 +158,7 @@ static zend_always_inline void zend_hash_real_init_ex(HashTable *ht, int packed)
static zend_always_inline void zend_hash_check_init(HashTable *ht, int packed)
{
- HT_ASSERT(GC_REFCOUNT(ht) == 1);
+ HT_ASSERT_RC1(ht);
if (UNEXPECTED(!((ht)->u.flags & HASH_FLAG_INITIALIZED))) {
zend_hash_real_init_ex(ht, packed);
}
@@ -171,7 +173,7 @@ static const uint32_t uninitialized_bucket[-HT_MIN_MASK] =
ZEND_API void ZEND_FASTCALL _zend_hash_init(HashTable *ht, uint32_t nSize, dtor_func_t pDestructor, zend_bool persistent ZEND_FILE_LINE_DC)
{
GC_REFCOUNT(ht) = 1;
- GC_TYPE_INFO(ht) = IS_ARRAY;
+ GC_TYPE_INFO(ht) = IS_ARRAY | (persistent ? 0 : (GC_COLLECTABLE << GC_FLAGS_SHIFT));
ht->u.flags = (persistent ? HASH_FLAG_PERSISTENT : 0) | HASH_FLAG_APPLY_PROTECTION | HASH_FLAG_STATIC_KEYS;
ht->nTableMask = HT_MIN_MASK;
HT_SET_DATA_ADDR(ht, &uninitialized_bucket);
@@ -185,7 +187,7 @@ ZEND_API void ZEND_FASTCALL _zend_hash_init(HashTable *ht, uint32_t nSize, dtor_
static void ZEND_FASTCALL zend_hash_packed_grow(HashTable *ht)
{
- HT_ASSERT(GC_REFCOUNT(ht) == 1);
+ HT_ASSERT_RC1(ht);
if (ht->nTableSize >= HT_MAX_SIZE) {
zend_error_noreturn(E_ERROR, "Possible integer overflow in memory allocation (%u * %zu + %zu)", ht->nTableSize * 2, sizeof(Bucket), sizeof(Bucket));
}
@@ -197,7 +199,7 @@ ZEND_API void ZEND_FASTCALL zend_hash_real_init(HashTable *ht, zend_bool packed)
{
IS_CONSISTENT(ht);
- HT_ASSERT(GC_REFCOUNT(ht) == 1);
+ HT_ASSERT_RC1(ht);
zend_hash_real_init_ex(ht, packed);
}
@@ -206,7 +208,7 @@ ZEND_API void ZEND_FASTCALL zend_hash_packed_to_hash(HashTable *ht)
void *new_data, *old_data = HT_GET_DATA_ADDR(ht);
Bucket *old_buckets = ht->arData;
- HT_ASSERT(GC_REFCOUNT(ht) == 1);
+ HT_ASSERT_RC1(ht);
ht->u.flags &= ~HASH_FLAG_PACKED;
new_data = pemalloc(HT_SIZE_EX(ht->nTableSize, -ht->nTableSize), (ht)->u.flags & HASH_FLAG_PERSISTENT);
ht->nTableMask = -ht->nTableSize;
@@ -221,7 +223,7 @@ ZEND_API void ZEND_FASTCALL zend_hash_to_packed(HashTable *ht)
void *new_data, *old_data = HT_GET_DATA_ADDR(ht);
Bucket *old_buckets = ht->arData;
- HT_ASSERT(GC_REFCOUNT(ht) == 1);
+ HT_ASSERT_RC1(ht);
new_data = pemalloc(HT_SIZE_EX(ht->nTableSize, HT_MIN_MASK), (ht)->u.flags & HASH_FLAG_PERSISTENT);
ht->u.flags |= HASH_FLAG_PACKED | HASH_FLAG_STATIC_KEYS;
ht->nTableMask = HT_MIN_MASK;
@@ -241,7 +243,7 @@ ZEND_API void ZEND_FASTCALL _zend_hash_init_ex(HashTable *ht, uint32_t nSize, dt
ZEND_API void ZEND_FASTCALL zend_hash_extend(HashTable *ht, uint32_t nSize, zend_bool packed)
{
- HT_ASSERT(GC_REFCOUNT(ht) == 1);
+ HT_ASSERT_RC1(ht);
if (nSize == 0) return;
if (UNEXPECTED(!((ht)->u.flags & HASH_FLAG_INITIALIZED))) {
if (nSize > ht->nTableSize) {
@@ -544,7 +546,7 @@ static zend_always_inline zval *_zend_hash_add_or_update_i(HashTable *ht, zend_s
Bucket *p;
IS_CONSISTENT(ht);
- HT_ASSERT(GC_REFCOUNT(ht) == 1);
+ HT_ASSERT_RC1(ht);
if (UNEXPECTED(!(ht->u.flags & HASH_FLAG_INITIALIZED))) {
CHECK_INIT(ht, 0);
@@ -707,7 +709,7 @@ static zend_always_inline zval *_zend_hash_index_add_or_update_i(HashTable *ht,
Bucket *p;
IS_CONSISTENT(ht);
- HT_ASSERT(GC_REFCOUNT(ht) == 1);
+ HT_ASSERT_RC1(ht);
if (UNEXPECTED(!(ht->u.flags & HASH_FLAG_INITIALIZED))) {
CHECK_INIT(ht, h < ht->nTableSize);
@@ -727,9 +729,6 @@ static zend_always_inline zval *_zend_hash_index_add_or_update_i(HashTable *ht,
ht->pDestructor(&p->val);
}
ZVAL_COPY_VALUE(&p->val, pData);
- if ((zend_long)h >= (zend_long)ht->nNextFreeElement) {
- ht->nNextFreeElement = h < ZEND_LONG_MAX ? h + 1 : ZEND_LONG_MAX;
- }
return &p->val;
} else { /* we have to keep the order :( */
goto convert_to_hash;
@@ -849,7 +848,7 @@ static void ZEND_FASTCALL zend_hash_do_resize(HashTable *ht)
{
IS_CONSISTENT(ht);
- HT_ASSERT(GC_REFCOUNT(ht) == 1);
+ HT_ASSERT_RC1(ht);
if (ht->nNumUsed > ht->nNumOfElements + (ht->nNumOfElements >> 5)) { /* additional term is there to amortize the cost of compaction */
zend_hash_rehash(ht);
@@ -1023,7 +1022,7 @@ static zend_always_inline void _zend_hash_del_el(HashTable *ht, uint32_t idx, Bu
ZEND_API void ZEND_FASTCALL zend_hash_del_bucket(HashTable *ht, Bucket *p)
{
IS_CONSISTENT(ht);
- HT_ASSERT(GC_REFCOUNT(ht) == 1);
+ HT_ASSERT_RC1(ht);
_zend_hash_del_el(ht, HT_IDX_TO_HASH(p - ht->arData), p);
}
@@ -1036,7 +1035,7 @@ ZEND_API int ZEND_FASTCALL zend_hash_del(HashTable *ht, zend_string *key)
Bucket *prev = NULL;
IS_CONSISTENT(ht);
- HT_ASSERT(GC_REFCOUNT(ht) == 1);
+ HT_ASSERT_RC1(ht);
h = zend_string_hash_val(key);
nIndex = h | ht->nTableMask;
@@ -1067,7 +1066,7 @@ ZEND_API int ZEND_FASTCALL zend_hash_del_ind(HashTable *ht, zend_string *key)
Bucket *prev = NULL;
IS_CONSISTENT(ht);
- HT_ASSERT(GC_REFCOUNT(ht) == 1);
+ HT_ASSERT_RC1(ht);
h = zend_string_hash_val(key);
nIndex = h | ht->nTableMask;
@@ -1116,7 +1115,7 @@ ZEND_API int ZEND_FASTCALL zend_hash_str_del_ind(HashTable *ht, const char *str,
Bucket *prev = NULL;
IS_CONSISTENT(ht);
- HT_ASSERT(GC_REFCOUNT(ht) == 1);
+ HT_ASSERT_RC1(ht);
h = zend_inline_hash_func(str, len);
nIndex = h | ht->nTableMask;
@@ -1160,7 +1159,7 @@ ZEND_API int ZEND_FASTCALL zend_hash_str_del(HashTable *ht, const char *str, siz
Bucket *prev = NULL;
IS_CONSISTENT(ht);
- HT_ASSERT(GC_REFCOUNT(ht) == 1);
+ HT_ASSERT_RC1(ht);
h = zend_inline_hash_func(str, len);
nIndex = h | ht->nTableMask;
@@ -1189,7 +1188,7 @@ ZEND_API int ZEND_FASTCALL zend_hash_index_del(HashTable *ht, zend_ulong h)
Bucket *prev = NULL;
IS_CONSISTENT(ht);
- HT_ASSERT(GC_REFCOUNT(ht) == 1);
+ HT_ASSERT_RC1(ht);
if (ht->u.flags & HASH_FLAG_PACKED) {
if (h < ht->nNumUsed) {
@@ -1221,7 +1220,7 @@ ZEND_API void ZEND_FASTCALL zend_hash_destroy(HashTable *ht)
Bucket *p, *end;
IS_CONSISTENT(ht);
- HT_ASSERT(GC_REFCOUNT(ht) <= 1);
+ HT_ASSERT(ht, GC_REFCOUNT(ht) <= 1);
if (ht->nNumUsed) {
p = ht->arData;
@@ -1283,7 +1282,7 @@ ZEND_API void ZEND_FASTCALL zend_array_destroy(HashTable *ht)
Bucket *p, *end;
IS_CONSISTENT(ht);
- HT_ASSERT(GC_REFCOUNT(ht) <= 1);
+ HT_ASSERT(ht, GC_REFCOUNT(ht) <= 1);
/* break possible cycles */
GC_REMOVE_FROM_BUFFER(ht);
@@ -1336,7 +1335,7 @@ ZEND_API void ZEND_FASTCALL zend_hash_clean(HashTable *ht)
Bucket *p, *end;
IS_CONSISTENT(ht);
- HT_ASSERT(GC_REFCOUNT(ht) == 1);
+ HT_ASSERT_RC1(ht);
if (ht->nNumUsed) {
p = ht->arData;
@@ -1405,7 +1404,7 @@ ZEND_API void ZEND_FASTCALL zend_symtable_clean(HashTable *ht)
Bucket *p, *end;
IS_CONSISTENT(ht);
- HT_ASSERT(GC_REFCOUNT(ht) == 1);
+ HT_ASSERT_RC1(ht);
if (ht->nNumUsed) {
p = ht->arData;
@@ -1445,7 +1444,7 @@ ZEND_API void ZEND_FASTCALL zend_hash_graceful_destroy(HashTable *ht)
Bucket *p;
IS_CONSISTENT(ht);
- HT_ASSERT(GC_REFCOUNT(ht) == 1);
+ HT_ASSERT_RC1(ht);
p = ht->arData;
for (idx = 0; idx < ht->nNumUsed; idx++, p++) {
@@ -1465,7 +1464,7 @@ ZEND_API void ZEND_FASTCALL zend_hash_graceful_reverse_destroy(HashTable *ht)
Bucket *p;
IS_CONSISTENT(ht);
- HT_ASSERT(GC_REFCOUNT(ht) == 1);
+ HT_ASSERT_RC1(ht);
idx = ht->nNumUsed;
p = ht->arData + ht->nNumUsed;
@@ -1507,7 +1506,7 @@ ZEND_API void ZEND_FASTCALL zend_hash_apply(HashTable *ht, apply_func_t apply_fu
result = apply_func(&p->val);
if (result & ZEND_HASH_APPLY_REMOVE) {
- HT_ASSERT(GC_REFCOUNT(ht) == 1);
+ HT_ASSERT_RC1(ht);
_zend_hash_del_el(ht, HT_IDX_TO_HASH(idx), p);
}
if (result & ZEND_HASH_APPLY_STOP) {
@@ -1533,7 +1532,7 @@ ZEND_API void ZEND_FASTCALL zend_hash_apply_with_argument(HashTable *ht, apply_f
result = apply_func(&p->val, argument);
if (result & ZEND_HASH_APPLY_REMOVE) {
- HT_ASSERT(GC_REFCOUNT(ht) == 1);
+ HT_ASSERT_RC1(ht);
_zend_hash_del_el(ht, HT_IDX_TO_HASH(idx), p);
}
if (result & ZEND_HASH_APPLY_STOP) {
@@ -1566,7 +1565,7 @@ ZEND_API void ZEND_FASTCALL zend_hash_apply_with_arguments(HashTable *ht, apply_
result = apply_func(&p->val, num_args, args, &hash_key);
if (result & ZEND_HASH_APPLY_REMOVE) {
- HT_ASSERT(GC_REFCOUNT(ht) == 1);
+ HT_ASSERT_RC1(ht);
_zend_hash_del_el(ht, HT_IDX_TO_HASH(idx), p);
}
if (result & ZEND_HASH_APPLY_STOP) {
@@ -1598,7 +1597,7 @@ ZEND_API void ZEND_FASTCALL zend_hash_reverse_apply(HashTable *ht, apply_func_t
result = apply_func(&p->val);
if (result & ZEND_HASH_APPLY_REMOVE) {
- HT_ASSERT(GC_REFCOUNT(ht) == 1);
+ HT_ASSERT_RC1(ht);
_zend_hash_del_el(ht, HT_IDX_TO_HASH(idx), p);
}
if (result & ZEND_HASH_APPLY_STOP) {
@@ -1618,7 +1617,7 @@ ZEND_API void ZEND_FASTCALL zend_hash_copy(HashTable *target, HashTable *source,
IS_CONSISTENT(source);
IS_CONSISTENT(target);
- HT_ASSERT(GC_REFCOUNT(target) == 1);
+ HT_ASSERT_RC1(target);
setTargetPointer = (target->nInternalPointer == HT_INVALID_IDX);
for (idx = 0; idx < source->nNumUsed; idx++) {
@@ -1762,7 +1761,7 @@ ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source)
ALLOC_HASHTABLE(target);
GC_REFCOUNT(target) = 1;
- GC_TYPE_INFO(target) = IS_ARRAY;
+ GC_TYPE_INFO(target) = IS_ARRAY | (GC_COLLECTABLE << GC_FLAGS_SHIFT);
target->nTableSize = source->nTableSize;
target->pDestructor = ZVAL_PTR_DTOR;
@@ -1855,7 +1854,7 @@ ZEND_API void ZEND_FASTCALL _zend_hash_merge(HashTable *target, HashTable *sourc
IS_CONSISTENT(source);
IS_CONSISTENT(target);
- HT_ASSERT(GC_REFCOUNT(target) == 1);
+ HT_ASSERT_RC1(target);
if (overwrite) {
for (idx = 0; idx < source->nNumUsed; idx++) {
@@ -1926,7 +1925,7 @@ ZEND_API void ZEND_FASTCALL zend_hash_merge_ex(HashTable *target, HashTable *sou
IS_CONSISTENT(source);
IS_CONSISTENT(target);
- HT_ASSERT(GC_REFCOUNT(target) == 1);
+ HT_ASSERT_RC1(target);
for (idx = 0; idx < source->nNumUsed; idx++) {
p = source->arData + idx;
@@ -2048,7 +2047,7 @@ ZEND_API void ZEND_FASTCALL zend_hash_internal_pointer_reset_ex(HashTable *ht, H
uint32_t idx;
IS_CONSISTENT(ht);
- HT_ASSERT(&ht->nInternalPointer != pos || GC_REFCOUNT(ht) == 1);
+ HT_ASSERT(ht, &ht->nInternalPointer != pos || GC_REFCOUNT(ht) == 1);
for (idx = 0; idx < ht->nNumUsed; idx++) {
if (Z_TYPE(ht->arData[idx].val) != IS_UNDEF) {
@@ -2068,7 +2067,7 @@ ZEND_API void ZEND_FASTCALL zend_hash_internal_pointer_end_ex(HashTable *ht, Has
uint32_t idx;
IS_CONSISTENT(ht);
- HT_ASSERT(&ht->nInternalPointer != pos || GC_REFCOUNT(ht) == 1);
+ HT_ASSERT(ht, &ht->nInternalPointer != pos || GC_REFCOUNT(ht) == 1);
idx = ht->nNumUsed;
while (idx > 0) {
@@ -2087,7 +2086,7 @@ ZEND_API int ZEND_FASTCALL zend_hash_move_forward_ex(HashTable *ht, HashPosition
uint32_t idx = *pos;
IS_CONSISTENT(ht);
- HT_ASSERT(&ht->nInternalPointer != pos || GC_REFCOUNT(ht) == 1);
+ HT_ASSERT(ht, &ht->nInternalPointer != pos || GC_REFCOUNT(ht) == 1);
if (idx != HT_INVALID_IDX) {
while (1) {
@@ -2111,7 +2110,7 @@ ZEND_API int ZEND_FASTCALL zend_hash_move_backwards_ex(HashTable *ht, HashPositi
uint32_t idx = *pos;
IS_CONSISTENT(ht);
- HT_ASSERT(&ht->nInternalPointer != pos || GC_REFCOUNT(ht) == 1);
+ HT_ASSERT(ht, &ht->nInternalPointer != pos || GC_REFCOUNT(ht) == 1);
if (idx != HT_INVALID_IDX) {
while (idx > 0) {
@@ -2248,7 +2247,7 @@ ZEND_API int ZEND_FASTCALL zend_hash_sort_ex(HashTable *ht, sort_func_t sort, co
uint32_t i, j;
IS_CONSISTENT(ht);
- HT_ASSERT(GC_REFCOUNT(ht) == 1);
+ HT_ASSERT_RC1(ht);
if (!(ht->nNumOfElements>1) && !(renumber && ht->nNumOfElements>0)) { /* Doesn't require sorting */
return SUCCESS;
@@ -2480,10 +2479,128 @@ ZEND_API int ZEND_FASTCALL _zend_handle_numeric_str_ex(const char *key, size_t l
}
}
+/* Takes a "symtable" hashtable (contains integer and non-numeric string keys)
+ * and converts it to a "proptable" (contains only string keys).
+ * If the symtable didn't need duplicating, its refcount is incremented.
+ */
+ZEND_API HashTable* ZEND_FASTCALL zend_symtable_to_proptable(HashTable *ht)
+{
+ zend_ulong num_key;
+ zend_string *str_key;
+ zval *zv;
+
+ if (UNEXPECTED(HT_IS_PACKED(ht))) {
+ goto convert;
+ }
+
+ ZEND_HASH_FOREACH_KEY_VAL(ht, num_key, str_key, zv) {
+ if (!str_key) {
+ goto convert;
+ }
+ } ZEND_HASH_FOREACH_END();
+
+ if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
+ GC_REFCOUNT(ht)++;
+ }
+
+ return ht;
+
+convert:
+ {
+ HashTable *new_ht = emalloc(sizeof(HashTable));
+
+ zend_hash_init(new_ht, zend_hash_num_elements(ht), NULL, ZVAL_PTR_DTOR, 0);
+
+ ZEND_HASH_FOREACH_KEY_VAL(ht, num_key, str_key, zv) {
+ if (!str_key) {
+ str_key = zend_long_to_str(num_key);
+ zend_string_delref(str_key);
+ }
+ do {
+ if (Z_OPT_REFCOUNTED_P(zv)) {
+ if (Z_ISREF_P(zv) && Z_REFCOUNT_P(zv) == 1) {
+ zv = Z_REFVAL_P(zv);
+ if (!Z_OPT_REFCOUNTED_P(zv)) {
+ break;
+ }
+ }
+ Z_ADDREF_P(zv);
+ }
+ } while (0);
+ zend_hash_update(new_ht, str_key, zv);
+ } ZEND_HASH_FOREACH_END();
+
+ return new_ht;
+ }
+}
+
+/* Takes a "proptable" hashtable (contains only string keys) and converts it to
+ * a "symtable" (contains integer and non-numeric string keys).
+ * If the proptable didn't need duplicating, its refcount is incremented.
+ */
+ZEND_API HashTable* ZEND_FASTCALL zend_proptable_to_symtable(HashTable *ht, zend_bool always_duplicate)
+{
+ zend_ulong num_key;
+ zend_string *str_key;
+ zval *zv;
+
+ ZEND_HASH_FOREACH_KEY_VAL(ht, num_key, str_key, zv) {
+ /* The `str_key &&` here might seem redundant: property tables should
+ * only have string keys. Unfortunately, this isn't true, at the very
+ * least because of ArrayObject, which stores a symtable where the
+ * property table should be.
+ */
+ if (str_key && ZEND_HANDLE_NUMERIC(str_key, num_key)) {
+ goto convert;
+ }
+ } ZEND_HASH_FOREACH_END();
+
+ if (always_duplicate) {
+ return zend_array_dup(ht);
+ }
+
+ if (EXPECTED(!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE))) {
+ GC_REFCOUNT(ht)++;
+ }
+
+ return ht;
+
+convert:
+ {
+ HashTable *new_ht = emalloc(sizeof(HashTable));
+
+ zend_hash_init(new_ht, zend_hash_num_elements(ht), NULL, ZVAL_PTR_DTOR, 0);
+
+ ZEND_HASH_FOREACH_KEY_VAL(ht, num_key, str_key, zv) {
+ do {
+ if (Z_OPT_REFCOUNTED_P(zv)) {
+ if (Z_ISREF_P(zv) && Z_REFCOUNT_P(zv) == 1) {
+ zv = Z_REFVAL_P(zv);
+ if (!Z_OPT_REFCOUNTED_P(zv)) {
+ break;
+ }
+ }
+ Z_ADDREF_P(zv);
+ }
+ } while (0);
+ /* Again, thank ArrayObject for `!str_key ||`. */
+ if (!str_key || ZEND_HANDLE_NUMERIC(str_key, num_key)) {
+ zend_hash_index_update(new_ht, num_key, zv);
+ } else {
+ zend_hash_update(new_ht, str_key, zv);
+ }
+ } ZEND_HASH_FOREACH_END();
+
+ return new_ht;
+ }
+}
+
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h
index f699fead09..64f28ea221 100644
--- a/Zend/zend_hash.h
+++ b/Zend/zend_hash.h
@@ -41,6 +41,7 @@
#define HASH_FLAG_INITIALIZED (1<<3)
#define HASH_FLAG_STATIC_KEYS (1<<4) /* long and interned strings */
#define HASH_FLAG_HAS_EMPTY_IND (1<<5)
+#define HASH_FLAG_ALLOW_COW_VIOLATION (1<<6)
#define HT_IS_PACKED(ht) \
(((ht)->u.flags & HASH_FLAG_PACKED) != 0)
@@ -51,6 +52,12 @@
#define HT_HAS_STATIC_KEYS_ONLY(ht) \
(((ht)->u.flags & (HASH_FLAG_PACKED|HASH_FLAG_STATIC_KEYS)) != 0)
+#if ZEND_DEBUG
+# define HT_ALLOW_COW_VIOLATION(ht) (ht)->u.flags |= HASH_FLAG_ALLOW_COW_VIOLATION
+#else
+# define HT_ALLOW_COW_VIOLATION(ht)
+#endif
+
typedef struct _zend_hash_key {
zend_ulong h;
zend_string *key;
@@ -247,6 +254,8 @@ ZEND_API uint32_t zend_array_count(HashTable *ht);
ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source);
ZEND_API void ZEND_FASTCALL zend_array_destroy(HashTable *ht);
ZEND_API void ZEND_FASTCALL zend_symtable_clean(HashTable *ht);
+ZEND_API HashTable* ZEND_FASTCALL zend_symtable_to_proptable(HashTable *ht);
+ZEND_API HashTable* ZEND_FASTCALL zend_proptable_to_symtable(HashTable *ht, zend_bool always_duplicate);
ZEND_API int ZEND_FASTCALL _zend_handle_numeric_str_ex(const char *key, size_t length, zend_ulong *idx);
@@ -348,10 +357,6 @@ static zend_always_inline zval *zend_symtable_add_new(HashTable *ht, zend_string
}
}
-/* This typo snuck into 7.0.17 and 7.1.3, this define exists for BC */
-#define zend_symbtable_add_new(ht, key, pData) \
- zend_symtable_add_new(ht, key, pData)
-
static zend_always_inline zval *zend_symtable_update(HashTable *ht, zend_string *key, zval *pData)
{
zend_ulong idx;
@@ -767,6 +772,33 @@ static zend_always_inline void *zend_hash_index_find_ptr(const HashTable *ht, ze
}
}
+static zend_always_inline zval *zend_hash_index_find_deref(HashTable *ht, zend_ulong h)
+{
+ zval *zv = zend_hash_index_find(ht, h);
+ if (zv) {
+ ZVAL_DEREF(zv);
+ }
+ return zv;
+}
+
+static zend_always_inline zval *zend_hash_find_deref(HashTable *ht, zend_string *str)
+{
+ zval *zv = zend_hash_find(ht, str);
+ if (zv) {
+ ZVAL_DEREF(zv);
+ }
+ return zv;
+}
+
+static zend_always_inline zval *zend_hash_str_find_deref(HashTable *ht, const char *str, size_t len)
+{
+ zval *zv = zend_hash_str_find(ht, str, len);
+ if (zv) {
+ ZVAL_DEREF(zv);
+ }
+ return zv;
+}
+
static zend_always_inline void *zend_symtable_str_find_ptr(HashTable *ht, const char *str, size_t len)
{
zend_ulong idx;
@@ -795,8 +827,9 @@ static zend_always_inline void *zend_hash_get_current_data_ptr_ex(HashTable *ht,
zend_hash_get_current_data_ptr_ex(ht, &(ht)->nInternalPointer)
#define ZEND_HASH_FOREACH(_ht, indirect) do { \
- Bucket *_p = (_ht)->arData; \
- Bucket *_end = _p + (_ht)->nNumUsed; \
+ HashTable *__ht = (_ht); \
+ Bucket *_p = __ht->arData; \
+ Bucket *_end = _p + __ht->nNumUsed; \
for (; _p != _end; _p++) { \
zval *_z = &_p->val; \
if (indirect && Z_TYPE_P(_z) == IS_INDIRECT) { \
@@ -805,9 +838,10 @@ static zend_always_inline void *zend_hash_get_current_data_ptr_ex(HashTable *ht,
if (UNEXPECTED(Z_TYPE_P(_z) == IS_UNDEF)) continue;
#define ZEND_HASH_REVERSE_FOREACH(_ht, indirect) do { \
- uint _idx; \
- for (_idx = (_ht)->nNumUsed; _idx > 0; _idx--) { \
- Bucket *_p = (_ht)->arData + _idx - 1; \
+ HashTable *__ht = (_ht); \
+ uint32_t _idx; \
+ for (_idx = __ht->nNumUsed; _idx > 0; _idx--) { \
+ Bucket *_p = __ht->arData + (_idx - 1); \
zval *_z = &_p->val; \
if (indirect && Z_TYPE_P(_z) == IS_INDIRECT) { \
_z = Z_INDIRECT_P(_z); \
@@ -818,6 +852,27 @@ static zend_always_inline void *zend_hash_get_current_data_ptr_ex(HashTable *ht,
} \
} while (0)
+#define ZEND_HASH_FOREACH_END_DEL() \
+ __ht->nNumOfElements--; \
+ do { \
+ uint32_t j = HT_IDX_TO_HASH(_idx - 1); \
+ uint32_t nIndex = _p->h | __ht->nTableMask; \
+ uint32_t i = HT_HASH(__ht, nIndex); \
+ if (j != i) { \
+ Bucket *prev = HT_HASH_TO_BUCKET(__ht, i); \
+ while (Z_NEXT(prev->val) != j) { \
+ i = Z_NEXT(prev->val); \
+ prev = HT_HASH_TO_BUCKET(__ht, i); \
+ } \
+ Z_NEXT(prev->val) = Z_NEXT(_p->val); \
+ } else { \
+ HT_HASH(__ht, nIndex) = Z_NEXT(_p->val); \
+ } \
+ } while (0); \
+ } \
+ __ht->nNumUsed = _idx; \
+ } while (0)
+
#define ZEND_HASH_FOREACH_BUCKET(ht, _bucket) \
ZEND_HASH_FOREACH(ht, 0); \
_bucket = _p;
@@ -906,6 +961,11 @@ static zend_always_inline void *zend_hash_get_current_data_ptr_ex(HashTable *ht,
ZEND_HASH_REVERSE_FOREACH(ht, 1); \
_val = _z;
+#define ZEND_HASH_REVERSE_FOREACH_STR_KEY_VAL(ht, _key, _val) \
+ ZEND_HASH_REVERSE_FOREACH(ht, 0); \
+ _key = _p->key; \
+ _val = _z;
+
#define ZEND_HASH_REVERSE_FOREACH_KEY_VAL(ht, _h, _key, _val) \
ZEND_HASH_REVERSE_FOREACH(ht, 0); \
_h = _p->h; \
@@ -1027,4 +1087,6 @@ static zend_always_inline void _zend_hash_append_ind(HashTable *ht, zend_string
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_highlight.c b/Zend/zend_highlight.c
index 6e3d1657d2..49fe8e49a0 100644
--- a/Zend/zend_highlight.c
+++ b/Zend/zend_highlight.c
@@ -239,5 +239,7 @@ ZEND_API void zend_strip(void)
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_highlight.h b/Zend/zend_highlight.h
index 91d448706c..c1ef4be780 100644
--- a/Zend/zend_highlight.h
+++ b/Zend/zend_highlight.h
@@ -57,4 +57,6 @@ extern zend_syntax_highlighter_ini syntax_highlighter_ini;
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c
index 16c8f9d659..8d11513090 100644
--- a/Zend/zend_inheritance.c
+++ b/Zend/zend_inheritance.c
@@ -23,7 +23,7 @@
#include "zend_execute.h"
#include "zend_inheritance.h"
#include "zend_smart_str.h"
-#include "zend_inheritance.h"
+#include "zend_operators.h"
static void overriden_ptr_dtor(zval *zv) /* {{{ */
{
@@ -169,64 +169,50 @@ char *zend_visibility_string(uint32_t fn_flags) /* {{{ */
static zend_always_inline zend_bool zend_iterable_compatibility_check(zend_arg_info *arg_info) /* {{{ */
{
- if (arg_info->type_hint == IS_ARRAY) {
+ if (ZEND_TYPE_CODE(arg_info->type) == IS_ARRAY) {
return 1;
}
-
- if (arg_info->class_name && zend_string_equals_literal_ci(arg_info->class_name, "Traversable")) {
+
+ if (ZEND_TYPE_IS_CLASS(arg_info->type) && zend_string_equals_literal_ci(ZEND_TYPE_NAME(arg_info->type), "Traversable")) {
return 1;
}
-
+
return 0;
}
/* }}} */
static int zend_do_perform_type_hint_check(const zend_function *fe, zend_arg_info *fe_arg_info, const zend_function *proto, zend_arg_info *proto_arg_info) /* {{{ */
{
- if (ZEND_LOG_XOR(fe_arg_info->class_name, proto_arg_info->class_name)) {
- /* Only one has a type declaration and the other one doesn't */
- return 0;
- }
+ ZEND_ASSERT(ZEND_TYPE_IS_SET(fe_arg_info->type) && ZEND_TYPE_IS_SET(proto_arg_info->type));
- if (fe_arg_info->class_name) {
+ if (ZEND_TYPE_IS_CLASS(fe_arg_info->type) && ZEND_TYPE_IS_CLASS(proto_arg_info->type)) {
zend_string *fe_class_name, *proto_class_name;
const char *class_name;
+ size_t class_name_len;
- if (fe->type == ZEND_INTERNAL_FUNCTION) {
- fe_class_name = NULL;
- class_name = ((zend_internal_arg_info*)fe_arg_info)->class_name;
- } else {
- fe_class_name = fe_arg_info->class_name;
- class_name = ZSTR_VAL(fe_arg_info->class_name);
- }
- if (!strcasecmp(class_name, "parent") && proto->common.scope) {
+ fe_class_name = ZEND_TYPE_NAME(fe_arg_info->type);
+ class_name = ZSTR_VAL(fe_class_name);
+ class_name_len = ZSTR_LEN(fe_class_name);
+ if (class_name_len == sizeof("parent")-1 && !strcasecmp(class_name, "parent") && proto->common.scope) {
fe_class_name = zend_string_copy(proto->common.scope->name);
- } else if (!strcasecmp(class_name, "self") && fe->common.scope) {
+ } else if (class_name_len == sizeof("self")-1 && !strcasecmp(class_name, "self") && fe->common.scope) {
fe_class_name = zend_string_copy(fe->common.scope->name);
- } else if (fe_class_name) {
- zend_string_addref(fe_class_name);
} else {
- fe_class_name = zend_string_init(class_name, strlen(class_name), 0);
+ zend_string_addref(fe_class_name);
}
- if (proto->type == ZEND_INTERNAL_FUNCTION) {
- proto_class_name = NULL;
- class_name = ((zend_internal_arg_info*)proto_arg_info)->class_name;
- } else {
- proto_class_name = proto_arg_info->class_name;
- class_name = ZSTR_VAL(proto_arg_info->class_name);
- }
- if (!strcasecmp(class_name, "parent") && proto->common.scope && proto->common.scope->parent) {
+ proto_class_name = ZEND_TYPE_NAME(proto_arg_info->type);
+ class_name = ZSTR_VAL(proto_class_name);
+ class_name_len = ZSTR_LEN(proto_class_name);
+ if (class_name_len == sizeof("parent")-1 && !strcasecmp(class_name, "parent") && proto->common.scope && proto->common.scope->parent) {
proto_class_name = zend_string_copy(proto->common.scope->parent->name);
- } else if (!strcasecmp(class_name, "self") && proto->common.scope) {
+ } else if (class_name_len == sizeof("self")-1 && !strcasecmp(class_name, "self") && proto->common.scope) {
proto_class_name = zend_string_copy(proto->common.scope->name);
- } else if (proto_class_name) {
- zend_string_addref(proto_class_name);
} else {
- proto_class_name = zend_string_init(class_name, strlen(class_name), 0);
+ zend_string_addref(proto_class_name);
}
- if (strcasecmp(ZSTR_VAL(fe_class_name), ZSTR_VAL(proto_class_name)) != 0) {
+ if (fe_class_name != proto_class_name && strcasecmp(ZSTR_VAL(fe_class_name), ZSTR_VAL(proto_class_name)) != 0) {
if (fe->common.type != ZEND_USER_FUNCTION) {
zend_string_release(proto_class_name);
zend_string_release(fe_class_name);
@@ -250,14 +236,28 @@ static int zend_do_perform_type_hint_check(const zend_function *fe, zend_arg_inf
}
zend_string_release(proto_class_name);
zend_string_release(fe_class_name);
+ } else if (ZEND_TYPE_CODE(fe_arg_info->type) != ZEND_TYPE_CODE(proto_arg_info->type)) {
+ /* Incompatible built-in types */
+ return 0;
}
- if (fe_arg_info->type_hint != proto_arg_info->type_hint) {
- /* Incompatible type */
+ return 1;
+}
+/* }}} */
+
+static int zend_do_perform_arg_type_hint_check(const zend_function *fe, zend_arg_info *fe_arg_info, const zend_function *proto, zend_arg_info *proto_arg_info) /* {{{ */
+{
+ if (!ZEND_TYPE_IS_SET(fe_arg_info->type)) {
+ /* Child with no type is always compatible */
+ return 1;
+ }
+
+ if (!ZEND_TYPE_IS_SET(proto_arg_info->type)) {
+ /* Child defines a type, but parent doesn't, violates LSP */
return 0;
}
- return 1;
+ return zend_do_perform_type_hint_check(fe, fe_arg_info, proto, proto_arg_info);
}
/* }}} */
@@ -328,22 +328,22 @@ static zend_bool zend_do_perform_implementation_check(const zend_function *fe, c
} else {
proto_arg_info = &proto->common.arg_info[proto->common.num_args];
}
-
- if (!zend_do_perform_type_hint_check(fe, fe_arg_info, proto, proto_arg_info)) {
- switch (fe_arg_info->type_hint) {
+
+ if (!zend_do_perform_arg_type_hint_check(fe, fe_arg_info, proto, proto_arg_info)) {
+ switch (ZEND_TYPE_CODE(fe_arg_info->type)) {
case IS_ITERABLE:
if (!zend_iterable_compatibility_check(proto_arg_info)) {
return 0;
}
break;
-
+
default:
return 0;
}
}
// This introduces BC break described at https://bugs.php.net/bug.php?id=72119
- if (proto_arg_info->type_hint && proto_arg_info->allow_null && !fe_arg_info->allow_null) {
+ if (ZEND_TYPE_IS_SET(proto_arg_info->type) && ZEND_TYPE_ALLOW_NULL(proto_arg_info->type) && !ZEND_TYPE_ALLOW_NULL(fe_arg_info->type)) {
/* incompatible nullability */
return 0;
}
@@ -361,21 +361,21 @@ static zend_bool zend_do_perform_implementation_check(const zend_function *fe, c
if (!(fe->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE)) {
return 0;
}
-
+
if (!zend_do_perform_type_hint_check(fe, fe->common.arg_info - 1, proto, proto->common.arg_info - 1)) {
- switch (proto->common.arg_info[-1].type_hint) {
+ switch (ZEND_TYPE_CODE(proto->common.arg_info[-1].type)) {
case IS_ITERABLE:
if (!zend_iterable_compatibility_check(fe->common.arg_info - 1)) {
return 0;
}
break;
-
+
default:
return 0;
}
}
- if (fe->common.arg_info[-1].allow_null && !proto->common.arg_info[-1].allow_null) {
+ if (ZEND_TYPE_ALLOW_NULL(fe->common.arg_info[-1].type) && !ZEND_TYPE_ALLOW_NULL(proto->common.arg_info[-1].type)) {
return 0;
}
}
@@ -386,21 +386,16 @@ static zend_bool zend_do_perform_implementation_check(const zend_function *fe, c
static ZEND_COLD void zend_append_type_hint(smart_str *str, const zend_function *fptr, zend_arg_info *arg_info, int return_hint) /* {{{ */
{
- if (arg_info->type_hint != IS_UNDEF && arg_info->allow_null) {
+ if (ZEND_TYPE_IS_SET(arg_info->type) && ZEND_TYPE_ALLOW_NULL(arg_info->type)) {
smart_str_appendc(str, '?');
}
- if (arg_info->class_name) {
+ if (ZEND_TYPE_IS_CLASS(arg_info->type)) {
const char *class_name;
size_t class_name_len;
- if (fptr->type == ZEND_INTERNAL_FUNCTION) {
- class_name = ((zend_internal_arg_info*)arg_info)->class_name;
- class_name_len = strlen(class_name);
- } else {
- class_name = ZSTR_VAL(arg_info->class_name);
- class_name_len = ZSTR_LEN(arg_info->class_name);
- }
+ class_name = ZSTR_VAL(ZEND_TYPE_NAME(arg_info->type));
+ class_name_len = ZSTR_LEN(ZEND_TYPE_NAME(arg_info->type));
if (!strcasecmp(class_name, "self") && fptr->common.scope) {
class_name = ZSTR_VAL(fptr->common.scope->name);
@@ -414,13 +409,13 @@ static ZEND_COLD void zend_append_type_hint(smart_str *str, const zend_function
if (!return_hint) {
smart_str_appendc(str, ' ');
}
- } else if (arg_info->type_hint) {
- if (arg_info->type_hint == IS_LONG) {
+ } else if (ZEND_TYPE_IS_CODE(arg_info->type)) {
+ if (ZEND_TYPE_CODE(arg_info->type) == IS_LONG) {
smart_str_appendl(str, "int", 3);
- } else if (arg_info->type_hint == _IS_BOOL) {
+ } else if (ZEND_TYPE_CODE(arg_info->type) == _IS_BOOL) {
smart_str_appendl(str, "bool", 4);
} else {
- const char *type_name = zend_get_type_by_const(arg_info->type_hint);
+ const char *type_name = zend_get_type_by_const(ZEND_TYPE_CODE(arg_info->type));
smart_str_appends(str, type_name);
}
if (!return_hint) {
@@ -556,16 +551,6 @@ static void do_inheritance_check_on_method(zend_function *child, zend_function *
uint32_t child_flags;
uint32_t parent_flags = parent->common.fn_flags;
- if ((parent->common.scope->ce_flags & ZEND_ACC_INTERFACE) == 0
- && parent->common.fn_flags & ZEND_ACC_ABSTRACT
- && parent->common.scope != (child->common.prototype ? child->common.prototype->common.scope : child->common.scope)
- && child->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_IMPLEMENTED_ABSTRACT)) {
- zend_error_noreturn(E_COMPILE_ERROR, "Can't inherit abstract function %s::%s() (previously declared abstract in %s)",
- ZSTR_VAL(parent->common.scope->name),
- ZSTR_VAL(child->common.function_name),
- child->common.prototype ? ZSTR_VAL(child->common.prototype->common.scope->name) : ZSTR_VAL(child->common.scope->name));
- }
-
if (UNEXPECTED(parent_flags & ZEND_ACC_FINAL)) {
zend_error_noreturn(E_COMPILE_ERROR, "Cannot override final method %s::%s()", ZEND_FN_SCOPE_NAME(parent), ZSTR_VAL(child->common.function_name));
}
@@ -586,8 +571,9 @@ static void do_inheritance_check_on_method(zend_function *child, zend_function *
zend_error_noreturn(E_COMPILE_ERROR, "Cannot make non abstract method %s::%s() abstract in class %s", ZEND_FN_SCOPE_NAME(parent), ZSTR_VAL(child->common.function_name), ZEND_FN_SCOPE_NAME(child));
}
- /* Prevent derived classes from restricting access that was available in parent classes */
- if (UNEXPECTED((child_flags & ZEND_ACC_PPP_MASK) > (parent_flags & ZEND_ACC_PPP_MASK))) {
+ /* Prevent derived classes from restricting access that was available in parent classes (except deriving from non-abstract ctors) */
+ if (UNEXPECTED((!(child_flags & ZEND_ACC_CTOR) || (parent_flags & (ZEND_ACC_ABSTRACT | ZEND_ACC_IMPLEMENTED_ABSTRACT))) &&
+ (child_flags & ZEND_ACC_PPP_MASK) > (parent_flags & ZEND_ACC_PPP_MASK))) {
zend_error_noreturn(E_COMPILE_ERROR, "Access level to %s::%s() must be %s (as in class %s)%s", ZEND_FN_SCOPE_NAME(child), ZSTR_VAL(child->common.function_name), zend_visibility_string(parent_flags), ZEND_FN_SCOPE_NAME(parent), (parent_flags&ZEND_ACC_PUBLIC) ? "" : " or weaker");
}
@@ -607,13 +593,12 @@ static void do_inheritance_check_on_method(zend_function *child, zend_function *
} else if (!(parent->common.fn_flags & ZEND_ACC_CTOR) || (parent->common.prototype && (parent->common.prototype->common.scope->ce_flags & ZEND_ACC_INTERFACE))) {
/* ctors only have a prototype if it comes from an interface */
child->common.prototype = parent->common.prototype ? parent->common.prototype : parent;
+ /* and if that is the case, we want to check inheritance against it */
+ if (parent->common.fn_flags & ZEND_ACC_CTOR) {
+ parent = child->common.prototype;
+ }
}
- if (child->common.prototype && (
- child->common.prototype->common.fn_flags & ZEND_ACC_ABSTRACT
- )) {
- parent = child->common.prototype;
- }
if (UNEXPECTED(!zend_do_perform_implementation_check(child, parent))) {
int error_level;
const char *error_verb;
@@ -628,7 +613,7 @@ static void do_inheritance_check_on_method(zend_function *child, zend_function *
} else if ((parent->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) &&
(!(child->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
!zend_do_perform_type_hint_check(child, child->common.arg_info - 1, parent, parent->common.arg_info - 1) ||
- (child->common.arg_info[-1].allow_null && !parent->common.arg_info[-1].allow_null))) {
+ (ZEND_TYPE_ALLOW_NULL(child->common.arg_info[-1].type) && !ZEND_TYPE_ALLOW_NULL(parent->common.arg_info[-1].type)))) {
error_level = E_COMPILE_ERROR;
error_verb = "must";
} else {
@@ -1103,7 +1088,6 @@ static zend_bool zend_traits_method_compatibility_check(zend_function *fn, zend_
uint32_t other_flags = other_fn->common.scope->ce_flags;
return zend_do_perform_implementation_check(fn, other_fn)
- && ((other_fn->common.scope->ce_flags & ZEND_ACC_INTERFACE) || zend_do_perform_implementation_check(other_fn, fn))
&& ((fn_flags & (ZEND_ACC_FINAL|ZEND_ACC_STATIC)) ==
(other_flags & (ZEND_ACC_FINAL|ZEND_ACC_STATIC))); /* equal final and static qualifier */
}
@@ -1112,7 +1096,7 @@ static zend_bool zend_traits_method_compatibility_check(zend_function *fn, zend_
static void zend_add_magic_methods(zend_class_entry* ce, zend_string* mname, zend_function* fe) /* {{{ */
{
if (zend_string_equals_literal(mname, ZEND_CLONE_FUNC_NAME)) {
- ce->clone = fe; fe->common.fn_flags |= ZEND_ACC_CLONE;
+ ce->clone = fe;
} else if (zend_string_equals_literal(mname, ZEND_CONSTRUCTOR_FUNC_NAME)) {
if (ce->constructor && (!ce->parent || ce->constructor != ce->parent->constructor)) {
zend_error_noreturn(E_COMPILE_ERROR, "%s has colliding constructor definitions coming from traits", ZSTR_VAL(ce->name));
@@ -1173,12 +1157,13 @@ static void zend_add_trait_method(zend_class_entry *ce, const char *name, zend_s
ZSTR_VAL(zend_get_function_declaration(fn)),
ZSTR_VAL(zend_get_function_declaration(existing_fn)));
}
- } else if (fn->common.fn_flags & ZEND_ACC_ABSTRACT) {
+ }
+ if (fn->common.fn_flags & ZEND_ACC_ABSTRACT) {
/* Make sure the abstract declaration is compatible with previous declaration */
if (UNEXPECTED(!zend_traits_method_compatibility_check(existing_fn, fn))) {
zend_error_noreturn(E_COMPILE_ERROR, "Declaration of %s must be compatible with %s",
- ZSTR_VAL(zend_get_function_declaration(fn)),
- ZSTR_VAL(zend_get_function_declaration(existing_fn)));
+ ZSTR_VAL(zend_get_function_declaration(existing_fn)),
+ ZSTR_VAL(zend_get_function_declaration(fn)));
}
return;
}
@@ -1201,8 +1186,8 @@ static void zend_add_trait_method(zend_class_entry *ce, const char *name, zend_s
/* Make sure the abstract declaration is compatible with previous declaration */
if (UNEXPECTED(!zend_traits_method_compatibility_check(existing_fn, fn))) {
zend_error_noreturn(E_COMPILE_ERROR, "Declaration of %s must be compatible with %s",
- ZSTR_VAL(zend_get_function_declaration(fn)),
- ZSTR_VAL(zend_get_function_declaration(existing_fn)));
+ ZSTR_VAL(zend_get_function_declaration(existing_fn)),
+ ZSTR_VAL(zend_get_function_declaration(fn)));
}
return;
} else if (UNEXPECTED(existing_fn->common.scope->ce_flags & ZEND_ACC_TRAIT)) {
@@ -1540,7 +1525,6 @@ static void zend_do_traits_property_binding(zend_class_entry *ce) /* {{{ */
size_t i;
zend_property_info *property_info;
zend_property_info *coliding_prop;
- zval compare_result;
zend_string* prop_name;
const char* class_name_unused;
zend_bool not_compatible;
@@ -1584,17 +1568,17 @@ static void zend_do_traits_property_binding(zend_class_entry *ce) /* {{{ */
if ((coliding_prop->flags & (ZEND_ACC_PPP_MASK | ZEND_ACC_STATIC))
== (flags & (ZEND_ACC_PPP_MASK | ZEND_ACC_STATIC))) {
/* flags are identical, now the value needs to be checked */
+ zval *op1, *op2;
if (flags & ZEND_ACC_STATIC) {
- not_compatible = (FAILURE == compare_function(&compare_result,
- &ce->default_static_members_table[coliding_prop->offset],
- &ce->traits[i]->default_static_members_table[property_info->offset]))
- || (Z_LVAL(compare_result) != 0);
+ op1 = &ce->default_static_members_table[coliding_prop->offset];
+ op2 = &ce->traits[i]->default_static_members_table[property_info->offset];
+ ZVAL_DEREF(op1);
+ ZVAL_DEREF(op2);
} else {
- not_compatible = (FAILURE == compare_function(&compare_result,
- &ce->default_properties_table[OBJ_PROP_TO_NUM(coliding_prop->offset)],
- &ce->traits[i]->default_properties_table[OBJ_PROP_TO_NUM(property_info->offset)]))
- || (Z_LVAL(compare_result) != 0);
+ op1 = &ce->default_properties_table[OBJ_PROP_TO_NUM(coliding_prop->offset)];
+ op2 = &ce->traits[i]->default_properties_table[OBJ_PROP_TO_NUM(property_info->offset)];
}
+ not_compatible = fast_is_not_identical_function(op1, op2);
} else {
/* the flags are not identical, thus, we assume properties are not compatible */
not_compatible = 1;
@@ -1743,4 +1727,6 @@ void zend_check_deprecated_constructor(const zend_class_entry *ce) /* {{{ */
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_inheritance.h b/Zend/zend_inheritance.h
index ce75b7410c..cf25516efc 100644
--- a/Zend/zend_inheritance.h
+++ b/Zend/zend_inheritance.h
@@ -45,4 +45,6 @@ END_EXTERN_C()
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_ini.c b/Zend/zend_ini.c
index 97c95b12c6..5e932840bc 100644
--- a/Zend/zend_ini.c
+++ b/Zend/zend_ini.c
@@ -359,7 +359,7 @@ ZEND_API int zend_alter_ini_entry_ex(zend_string *name, zend_string *new_value,
ini_entry->orig_value = ini_entry->value;
ini_entry->orig_modifiable = modifiable;
ini_entry->modified = 1;
- zend_hash_add_ptr(EG(modified_ini_directives), name, ini_entry);
+ zend_hash_add_ptr(EG(modified_ini_directives), ini_entry->name, ini_entry);
}
duplicate = zend_string_copy(new_value);
@@ -400,7 +400,7 @@ ZEND_API int zend_restore_ini_entry(zend_string *name, int stage) /* {{{ */
}
/* }}} */
-ZEND_API int zend_ini_register_displayer(char *name, uint name_length, void (*displayer)(zend_ini_entry *ini_entry, int type)) /* {{{ */
+ZEND_API int zend_ini_register_displayer(char *name, uint32_t name_length, void (*displayer)(zend_ini_entry *ini_entry, int type)) /* {{{ */
{
zend_ini_entry *ini_entry;
@@ -418,7 +418,7 @@ ZEND_API int zend_ini_register_displayer(char *name, uint name_length, void (*di
* Data retrieval
*/
-ZEND_API zend_long zend_ini_long(char *name, uint name_length, int orig) /* {{{ */
+ZEND_API zend_long zend_ini_long(char *name, uint32_t name_length, int orig) /* {{{ */
{
zend_ini_entry *ini_entry;
@@ -435,7 +435,7 @@ ZEND_API zend_long zend_ini_long(char *name, uint name_length, int orig) /* {{{
}
/* }}} */
-ZEND_API double zend_ini_double(char *name, uint name_length, int orig) /* {{{ */
+ZEND_API double zend_ini_double(char *name, uint32_t name_length, int orig) /* {{{ */
{
zend_ini_entry *ini_entry;
@@ -452,7 +452,7 @@ ZEND_API double zend_ini_double(char *name, uint name_length, int orig) /* {{{ *
}
/* }}} */
-ZEND_API char *zend_ini_string_ex(char *name, uint name_length, int orig, zend_bool *exists) /* {{{ */
+ZEND_API char *zend_ini_string_ex(char *name, uint32_t name_length, int orig, zend_bool *exists) /* {{{ */
{
zend_ini_entry *ini_entry;
@@ -476,7 +476,7 @@ ZEND_API char *zend_ini_string_ex(char *name, uint name_length, int orig, zend_b
}
/* }}} */
-ZEND_API char *zend_ini_string(char *name, uint name_length, int orig) /* {{{ */
+ZEND_API char *zend_ini_string(char *name, uint32_t name_length, int orig) /* {{{ */
{
zend_bool exists = 1;
char *return_value;
@@ -498,7 +498,7 @@ static void zend_ini_displayer_cb(zend_ini_entry *ini_entry, int type) /* {{{ */
ini_entry->displayer(ini_entry, type);
} else {
char *display_string;
- uint display_string_length;
+ uint32_t display_string_length;
if (type == ZEND_INI_DISPLAY_ORIG && ini_entry->modified) {
if (ini_entry->orig_value) {
@@ -750,4 +750,6 @@ ZEND_API ZEND_INI_MH(OnUpdateStringUnempty) /* {{{ */
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_ini.h b/Zend/zend_ini.h
index f4983f91d1..886997a97b 100644
--- a/Zend/zend_ini.h
+++ b/Zend/zend_ini.h
@@ -40,8 +40,8 @@ typedef struct _zend_ini_entry_def {
void (*displayer)(zend_ini_entry *ini_entry, int type);
int modifiable;
- uint name_length;
- uint value_length;
+ uint32_t name_length;
+ uint32_t value_length;
} zend_ini_entry_def;
struct _zend_ini_entry {
@@ -81,12 +81,12 @@ ZEND_API int zend_alter_ini_entry_chars_ex(zend_string *name, const char *value,
ZEND_API int zend_restore_ini_entry(zend_string *name, int stage);
ZEND_API void display_ini_entries(zend_module_entry *module);
-ZEND_API zend_long zend_ini_long(char *name, uint name_length, int orig);
-ZEND_API double zend_ini_double(char *name, uint name_length, int orig);
-ZEND_API char *zend_ini_string(char *name, uint name_length, int orig);
-ZEND_API char *zend_ini_string_ex(char *name, uint name_length, int orig, zend_bool *exists);
+ZEND_API zend_long zend_ini_long(char *name, uint32_t name_length, int orig);
+ZEND_API double zend_ini_double(char *name, uint32_t name_length, int orig);
+ZEND_API char *zend_ini_string(char *name, uint32_t name_length, int orig);
+ZEND_API char *zend_ini_string_ex(char *name, uint32_t name_length, int orig, zend_bool *exists);
-ZEND_API int zend_ini_register_displayer(char *name, uint name_length, void (*displayer)(zend_ini_entry *ini_entry, int type));
+ZEND_API int zend_ini_register_displayer(char *name, uint32_t name_length, void (*displayer)(zend_ini_entry *ini_entry, int type));
ZEND_API ZEND_INI_DISP(zend_ini_boolean_displayer_cb);
ZEND_API ZEND_INI_DISP(zend_ini_color_displayer_cb);
@@ -198,4 +198,6 @@ typedef struct _zend_ini_parser_param {
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_ini_parser.y b/Zend/zend_ini_parser.y
index e39d93d294..b224994214 100644
--- a/Zend/zend_ini_parser.y
+++ b/Zend/zend_ini_parser.y
@@ -419,4 +419,6 @@ constant_string:
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_ini_scanner.h b/Zend/zend_ini_scanner.h
index 1fe4b205a9..a21598c41d 100644
--- a/Zend/zend_ini_scanner.h
+++ b/Zend/zend_ini_scanner.h
@@ -44,4 +44,6 @@ END_EXTERN_C()
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_interfaces.c b/Zend/zend_interfaces.c
index 2710432d89..c857f8954b 100644
--- a/Zend/zend_interfaces.c
+++ b/Zend/zend_interfaces.c
@@ -28,6 +28,7 @@ ZEND_API zend_class_entry *zend_ce_aggregate;
ZEND_API zend_class_entry *zend_ce_iterator;
ZEND_API zend_class_entry *zend_ce_arrayaccess;
ZEND_API zend_class_entry *zend_ce_serializable;
+ZEND_API zend_class_entry *zend_ce_countable;
/* {{{ zend_call_method
Only returns the returned zval if retval_ptr != NULL */
@@ -107,13 +108,6 @@ ZEND_API zval* zend_call_method(zval *object, zend_class_entry *obj_ce, zend_fun
zend_error_noreturn(E_CORE_ERROR, "Couldn't execute method %s%s%s", obj_ce ? ZSTR_VAL(obj_ce->name) : "", obj_ce ? "::" : "", function_name);
}
}
- /* copy arguments back, they might be changed by references */
- if (param_count > 0 && Z_ISREF(params[0]) && !Z_ISREF_P(arg1)) {
- ZVAL_COPY_VALUE(arg1, &params[0]);
- }
- if (param_count > 1 && Z_ISREF(params[1]) && !Z_ISREF_P(arg2)) {
- ZVAL_COPY_VALUE(arg2, &params[1]);
- }
if (!retval_ptr) {
zval_ptr_dtor(&retval);
return NULL;
@@ -187,16 +181,6 @@ ZEND_API zval *zend_user_it_get_current_data(zend_object_iterator *_iter)
}
/* }}} */
-/* {{{ zend_user_it_get_current_key_default */
-#if 0
-static int zend_user_it_get_current_key_default(zend_object_iterator *_iter, char **str_key, uint *str_key_len, ulong *int_key)
-{
- *int_key = _iter->index;
- return HASH_KEY_IS_LONG;
-}
-#endif
-/* }}} */
-
/* {{{ zend_user_it_get_current_key */
ZEND_API void zend_user_it_get_current_key(zend_object_iterator *_iter, zval *key)
{
@@ -390,15 +374,6 @@ static int zend_implement_iterator(zend_class_entry *interface, zend_class_entry
/* {{{ zend_implement_arrayaccess */
static int zend_implement_arrayaccess(zend_class_entry *interface, zend_class_entry *class_type)
{
-#if 0
- /* get ht from ce */
- if (ht->read_dimension != zend_std_read_dimension
- || ht->write_dimension != zend_std_write_dimension
- || ht->has_dimension != zend_std_has_dimension
- || ht->unset_dimension != zend_std_unset_dimension) {
- return FAILURE;
- }
-#endif
return SUCCESS;
}
/* }}}*/
@@ -496,6 +471,13 @@ static int zend_implement_serializable(zend_class_entry *interface, zend_class_e
}
/* }}}*/
+/* {{{ zend_implement_countable */
+static int zend_implement_countable(zend_class_entry *interface, zend_class_entry *class_type)
+{
+ return SUCCESS;
+}
+/* }}}*/
+
/* {{{ function tables */
const zend_function_entry zend_funcs_aggregate[] = {
ZEND_ABSTRACT_ME(iterator, getIterator, NULL)
@@ -543,6 +525,14 @@ const zend_function_entry zend_funcs_serializable[] = {
ZEND_FENTRY(unserialize, NULL, arginfo_serializable_serialize, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT|ZEND_ACC_CTOR)
ZEND_FE_END
};
+
+ZEND_BEGIN_ARG_INFO(arginfo_countable_count, 0)
+ZEND_END_ARG_INFO()
+
+const zend_function_entry zend_funcs_countable[] = {
+ ZEND_ABSTRACT_ME(Countable, count, arginfo_countable_count)
+ ZEND_FE_END
+};
/* }}} */
/* {{{ zend_register_interfaces */
@@ -559,6 +549,8 @@ ZEND_API void zend_register_interfaces(void)
REGISTER_MAGIC_INTERFACE(arrayaccess, ArrayAccess);
REGISTER_MAGIC_INTERFACE(serializable, Serializable);
+
+ REGISTER_MAGIC_INTERFACE(countable, Countable);
}
/* }}} */
@@ -568,4 +560,6 @@ ZEND_API void zend_register_interfaces(void)
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_interfaces.h b/Zend/zend_interfaces.h
index 4221de6f6f..2784e1d813 100644
--- a/Zend/zend_interfaces.h
+++ b/Zend/zend_interfaces.h
@@ -31,6 +31,7 @@ extern ZEND_API zend_class_entry *zend_ce_aggregate;
extern ZEND_API zend_class_entry *zend_ce_iterator;
extern ZEND_API zend_class_entry *zend_ce_arrayaccess;
extern ZEND_API zend_class_entry *zend_ce_serializable;
+extern ZEND_API zend_class_entry *zend_ce_countable;
typedef struct _zend_user_iterator {
zend_object_iterator it;
@@ -88,4 +89,6 @@ END_EXTERN_C()
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_istdiostream.h b/Zend/zend_istdiostream.h
index 05217b3f0b..c7e025c274 100644
--- a/Zend/zend_istdiostream.h
+++ b/Zend/zend_istdiostream.h
@@ -41,4 +41,6 @@ public:
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_iterators.c b/Zend/zend_iterators.c
index dec59f18a1..e79764fb9e 100644
--- a/Zend/zend_iterators.c
+++ b/Zend/zend_iterators.c
@@ -103,4 +103,6 @@ ZEND_API zend_object_iterator* zend_iterator_unwrap(zval *array_ptr)
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_iterators.h b/Zend/zend_iterators.h
index 1e91d8de36..f740666b34 100644
--- a/Zend/zend_iterators.h
+++ b/Zend/zend_iterators.h
@@ -88,4 +88,6 @@ END_EXTERN_C()
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y
index 2ff53f8d34..091d7f61e2 100644
--- a/Zend/zend_language_parser.y
+++ b/Zend/zend_language_parser.y
@@ -327,30 +327,35 @@ top_statement:
{ $$ = zend_ast_create(ZEND_AST_NAMESPACE, NULL, $4); }
| T_USE mixed_group_use_declaration ';' { $$ = $2; }
| T_USE use_type group_use_declaration ';' { $$ = $3; $$->attr = $2; }
- | T_USE use_declarations ';' { $$ = $2; $$->attr = T_CLASS; }
+ | T_USE use_declarations ';' { $$ = $2; $$->attr = ZEND_SYMBOL_CLASS; }
| T_USE use_type use_declarations ';' { $$ = $3; $$->attr = $2; }
| T_CONST const_list ';' { $$ = $2; }
;
use_type:
- T_FUNCTION { $$ = T_FUNCTION; }
- | T_CONST { $$ = T_CONST; }
+ T_FUNCTION { $$ = ZEND_SYMBOL_FUNCTION; }
+ | T_CONST { $$ = ZEND_SYMBOL_CONST; }
;
group_use_declaration:
- namespace_name T_NS_SEPARATOR '{' unprefixed_use_declarations '}'
+ namespace_name T_NS_SEPARATOR '{' unprefixed_use_declarations possible_comma '}'
{ $$ = zend_ast_create(ZEND_AST_GROUP_USE, $1, $4); }
- | T_NS_SEPARATOR namespace_name T_NS_SEPARATOR '{' unprefixed_use_declarations '}'
+ | T_NS_SEPARATOR namespace_name T_NS_SEPARATOR '{' unprefixed_use_declarations possible_comma '}'
{ $$ = zend_ast_create(ZEND_AST_GROUP_USE, $2, $5); }
;
mixed_group_use_declaration:
- namespace_name T_NS_SEPARATOR '{' inline_use_declarations '}'
+ namespace_name T_NS_SEPARATOR '{' inline_use_declarations possible_comma '}'
{ $$ = zend_ast_create(ZEND_AST_GROUP_USE, $1, $4);}
- | T_NS_SEPARATOR namespace_name T_NS_SEPARATOR '{' inline_use_declarations '}'
+ | T_NS_SEPARATOR namespace_name T_NS_SEPARATOR '{' inline_use_declarations possible_comma '}'
{ $$ = zend_ast_create(ZEND_AST_GROUP_USE, $2, $5); }
;
+possible_comma:
+ /* empty */
+ | ','
+;
+
inline_use_declarations:
inline_use_declarations ',' inline_use_declaration
{ $$ = zend_ast_list_add($1, $3); }
@@ -373,7 +378,7 @@ use_declarations:
;
inline_use_declaration:
- unprefixed_use_declaration { $$ = $1; $$->attr = T_CLASS; }
+ unprefixed_use_declaration { $$ = $1; $$->attr = ZEND_SYMBOL_CLASS; }
| use_type unprefixed_use_declaration { $$ = $2; $$->attr = $1; }
;
@@ -1030,7 +1035,7 @@ function_call:
class_name:
T_STATIC
- { zval zv; ZVAL_INTERNED_STR(&zv, CG(known_strings)[ZEND_STR_STATIC]);
+ { zval zv; ZVAL_INTERNED_STR(&zv, ZSTR_KNOWN(ZEND_STR_STATIC));
$$ = zend_ast_create_zval_ex(&zv, ZEND_NAME_NOT_FQ); }
| name { $$ = $1; }
;
@@ -1370,4 +1375,6 @@ static YYSIZE_T zend_yytnamerr(char *yyres, const char *yystr)
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_language_scanner.c b/Zend/zend_language_scanner.c
index aa37e2060f..7d73fd1c18 100644
--- a/Zend/zend_language_scanner.c
+++ b/Zend/zend_language_scanner.c
@@ -1335,7 +1335,7 @@ yyc_ST_BACKQUOTE:
yy20:
YYDEBUG(20, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2213 "Zend/zend_language_scanner.l"
+#line 2216 "Zend/zend_language_scanner.l"
{
if (YYCURSOR > YYLIMIT) {
RETURN_TOKEN(END);
@@ -1400,7 +1400,7 @@ yy22:
++YYCURSOR;
YYDEBUG(23, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2157 "Zend/zend_language_scanner.l"
+#line 2160 "Zend/zend_language_scanner.l"
{
BEGIN(ST_IN_SCRIPTING);
RETURN_TOKEN('`');
@@ -1448,7 +1448,7 @@ yy30:
++YYCURSOR;
YYDEBUG(31, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2144 "Zend/zend_language_scanner.l"
+#line 2147 "Zend/zend_language_scanner.l"
{
Z_LVAL_P(zendlval) = (zend_long) '{';
yy_push_state(ST_IN_SCRIPTING);
@@ -1554,7 +1554,7 @@ yyc_ST_DOUBLE_QUOTES:
yy42:
YYDEBUG(42, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2163 "Zend/zend_language_scanner.l"
+#line 2166 "Zend/zend_language_scanner.l"
{
if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) {
YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1;
@@ -1609,7 +1609,7 @@ yy43:
++YYCURSOR;
YYDEBUG(44, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2152 "Zend/zend_language_scanner.l"
+#line 2155 "Zend/zend_language_scanner.l"
{
BEGIN(ST_IN_SCRIPTING);
RETURN_TOKEN('"');
@@ -1675,7 +1675,7 @@ yy52:
++YYCURSOR;
YYDEBUG(53, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2144 "Zend/zend_language_scanner.l"
+#line 2147 "Zend/zend_language_scanner.l"
{
Z_LVAL_P(zendlval) = (zend_long) '{';
yy_push_state(ST_IN_SCRIPTING);
@@ -1739,7 +1739,7 @@ yyc_ST_END_HEREDOC:
++YYCURSOR;
YYDEBUG(64, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2130 "Zend/zend_language_scanner.l"
+#line 2133 "Zend/zend_language_scanner.l"
{
zend_heredoc_label *heredoc_label = zend_ptr_stack_pop(&SCNG(heredoc_label_stack));
@@ -1800,7 +1800,7 @@ yyc_ST_HEREDOC:
yy68:
YYDEBUG(68, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2255 "Zend/zend_language_scanner.l"
+#line 2258 "Zend/zend_language_scanner.l"
{
int newline = 0;
@@ -1934,7 +1934,7 @@ yy76:
++YYCURSOR;
YYDEBUG(77, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2144 "Zend/zend_language_scanner.l"
+#line 2147 "Zend/zend_language_scanner.l"
{
Z_LVAL_P(zendlval) = (zend_long) '{';
yy_push_state(ST_IN_SCRIPTING);
@@ -2156,7 +2156,7 @@ yy87:
++YYCURSOR;
YYDEBUG(88, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2386 "Zend/zend_language_scanner.l"
+#line 2389 "Zend/zend_language_scanner.l"
{
if (YYCURSOR > YYLIMIT) {
RETURN_TOKEN(END);
@@ -2200,7 +2200,7 @@ yy94:
++YYCURSOR;
YYDEBUG(95, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2034 "Zend/zend_language_scanner.l"
+#line 2037 "Zend/zend_language_scanner.l"
{
int bprefix = (yytext[0] != '"') ? 1 : 0;
@@ -2307,7 +2307,7 @@ yy101:
++YYCURSOR;
YYDEBUG(102, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1965 "Zend/zend_language_scanner.l"
+#line 1968 "Zend/zend_language_scanner.l"
{
register char *s, *t;
char *end;
@@ -2939,7 +2939,7 @@ yy146:
++YYCURSOR;
YYDEBUG(147, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2124 "Zend/zend_language_scanner.l"
+#line 2127 "Zend/zend_language_scanner.l"
{
BEGIN(ST_BACKQUOTE);
RETURN_TOKEN('`');
@@ -3456,9 +3456,12 @@ yy219:
#line 1959 "Zend/zend_language_scanner.l"
{
BEGIN(INITIAL);
+ if (yytext[yyleng-1] != '>') {
+ CG(increment_lineno) = 1;
+ }
RETURN_TOKEN(T_CLOSE_TAG); /* implicit ';' at php-end tag */
}
-#line 3462 "Zend/zend_language_scanner.c"
+#line 3465 "Zend/zend_language_scanner.c"
yy220:
YYDEBUG(220, *YYCURSOR);
++YYCURSOR;
@@ -3468,7 +3471,7 @@ yy220:
{
RETURN_TOKEN(T_COALESCE);
}
-#line 3472 "Zend/zend_language_scanner.c"
+#line 3475 "Zend/zend_language_scanner.c"
yy222:
YYDEBUG(222, *YYCURSOR);
yych = *++YYCURSOR;
@@ -3499,7 +3502,7 @@ yy225:
{
RETURN_TOKEN(T_AS);
}
-#line 3503 "Zend/zend_language_scanner.c"
+#line 3506 "Zend/zend_language_scanner.c"
yy227:
YYDEBUG(227, *YYCURSOR);
yych = *++YYCURSOR;
@@ -3589,7 +3592,7 @@ yy234:
{
RETURN_TOKEN(T_DO);
}
-#line 3593 "Zend/zend_language_scanner.c"
+#line 3596 "Zend/zend_language_scanner.c"
yy236:
YYDEBUG(236, *YYCURSOR);
yych = *++YYCURSOR;
@@ -3678,7 +3681,7 @@ yy247:
{
RETURN_TOKEN(T_IF);
}
-#line 3682 "Zend/zend_language_scanner.c"
+#line 3685 "Zend/zend_language_scanner.c"
yy249:
YYDEBUG(249, *YYCURSOR);
yych = *++YYCURSOR;
@@ -3743,7 +3746,7 @@ yy255:
{
RETURN_TOKEN(T_LOGICAL_OR);
}
-#line 3747 "Zend/zend_language_scanner.c"
+#line 3750 "Zend/zend_language_scanner.c"
yy257:
YYDEBUG(257, *YYCURSOR);
yych = *++YYCURSOR;
@@ -3861,7 +3864,7 @@ yy270:
{
RETURN_TOKEN(T_XOR_EQUAL);
}
-#line 3865 "Zend/zend_language_scanner.c"
+#line 3868 "Zend/zend_language_scanner.c"
yy272:
YYDEBUG(272, *YYCURSOR);
yych = *++YYCURSOR;
@@ -3893,7 +3896,7 @@ yy273:
{
RETURN_TOKEN(T_OR_EQUAL);
}
-#line 3897 "Zend/zend_language_scanner.c"
+#line 3900 "Zend/zend_language_scanner.c"
yy275:
YYDEBUG(275, *YYCURSOR);
++YYCURSOR;
@@ -3903,7 +3906,7 @@ yy275:
{
RETURN_TOKEN(T_BOOLEAN_OR);
}
-#line 3907 "Zend/zend_language_scanner.c"
+#line 3910 "Zend/zend_language_scanner.c"
yy277:
YYDEBUG(277, *YYCURSOR);
++YYCURSOR;
@@ -3913,7 +3916,7 @@ yy277:
{
RETURN_TOKEN(T_IS_NOT_IDENTICAL);
}
-#line 3917 "Zend/zend_language_scanner.c"
+#line 3920 "Zend/zend_language_scanner.c"
yy279:
YYDEBUG(279, *YYCURSOR);
yych = *++YYCURSOR;
@@ -3983,7 +3986,7 @@ yy289:
{
RETURN_TOKEN(T_POW_EQUAL);
}
-#line 3987 "Zend/zend_language_scanner.c"
+#line 3990 "Zend/zend_language_scanner.c"
yy291:
YYDEBUG(291, *YYCURSOR);
++YYCURSOR;
@@ -3993,7 +3996,7 @@ yy291:
{
RETURN_TOKEN(T_ELLIPSIS);
}
-#line 3997 "Zend/zend_language_scanner.c"
+#line 4000 "Zend/zend_language_scanner.c"
yy293:
YYDEBUG(293, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4045,7 +4048,7 @@ yy294:
RETURN_TOKEN(T_DNUMBER);
}
}
-#line 4049 "Zend/zend_language_scanner.c"
+#line 4052 "Zend/zend_language_scanner.c"
yy297:
YYDEBUG(297, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4099,7 +4102,7 @@ yy300:
RETURN_TOKEN(T_DNUMBER);
}
}
-#line 4103 "Zend/zend_language_scanner.c"
+#line 4106 "Zend/zend_language_scanner.c"
yy303:
YYDEBUG(303, *YYCURSOR);
++YYCURSOR;
@@ -4138,7 +4141,7 @@ yy305:
{
RETURN_TOKEN(T_SL_EQUAL);
}
-#line 4142 "Zend/zend_language_scanner.c"
+#line 4145 "Zend/zend_language_scanner.c"
yy307:
YYDEBUG(307, *YYCURSOR);
++YYCURSOR;
@@ -4148,7 +4151,7 @@ yy307:
{
RETURN_TOKEN(T_SPACESHIP);
}
-#line 4152 "Zend/zend_language_scanner.c"
+#line 4155 "Zend/zend_language_scanner.c"
yy309:
YYDEBUG(309, *YYCURSOR);
++YYCURSOR;
@@ -4158,7 +4161,7 @@ yy309:
{
RETURN_TOKEN(T_IS_IDENTICAL);
}
-#line 4162 "Zend/zend_language_scanner.c"
+#line 4165 "Zend/zend_language_scanner.c"
yy311:
YYDEBUG(311, *YYCURSOR);
++YYCURSOR;
@@ -4168,7 +4171,7 @@ yy311:
{
RETURN_TOKEN(T_SR_EQUAL);
}
-#line 4172 "Zend/zend_language_scanner.c"
+#line 4175 "Zend/zend_language_scanner.c"
yy313:
YYDEBUG(313, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4196,7 +4199,7 @@ yy316:
{
RETURN_TOKEN(T_LOGICAL_AND);
}
-#line 4200 "Zend/zend_language_scanner.c"
+#line 4203 "Zend/zend_language_scanner.c"
yy318:
YYDEBUG(318, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4281,7 +4284,7 @@ yy329:
{
RETURN_TOKEN(T_EXIT);
}
-#line 4285 "Zend/zend_language_scanner.c"
+#line 4288 "Zend/zend_language_scanner.c"
yy331:
YYDEBUG(331, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4367,7 +4370,7 @@ yy340:
{
RETURN_TOKEN(T_FOR);
}
-#line 4371 "Zend/zend_language_scanner.c"
+#line 4374 "Zend/zend_language_scanner.c"
yy341:
YYDEBUG(341, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4440,7 +4443,7 @@ yy351:
{
RETURN_TOKEN(T_NEW);
}
-#line 4444 "Zend/zend_language_scanner.c"
+#line 4447 "Zend/zend_language_scanner.c"
yy353:
YYDEBUG(353, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4517,7 +4520,7 @@ yy362:
{
RETURN_TOKEN(T_TRY);
}
-#line 4521 "Zend/zend_language_scanner.c"
+#line 4524 "Zend/zend_language_scanner.c"
yy364:
YYDEBUG(364, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4536,7 +4539,7 @@ yy365:
{
RETURN_TOKEN(T_USE);
}
-#line 4540 "Zend/zend_language_scanner.c"
+#line 4543 "Zend/zend_language_scanner.c"
yy367:
YYDEBUG(367, *YYCURSOR);
++YYCURSOR;
@@ -4549,7 +4552,7 @@ yy367:
{
RETURN_TOKEN(T_VAR);
}
-#line 4553 "Zend/zend_language_scanner.c"
+#line 4556 "Zend/zend_language_scanner.c"
yy369:
YYDEBUG(369, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4568,7 +4571,7 @@ yy370:
{
RETURN_TOKEN(T_LOGICAL_XOR);
}
-#line 4572 "Zend/zend_language_scanner.c"
+#line 4575 "Zend/zend_language_scanner.c"
yy372:
YYDEBUG(372, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4786,7 +4789,7 @@ yy401:
{
RETURN_TOKEN(T_CASE);
}
-#line 4790 "Zend/zend_language_scanner.c"
+#line 4793 "Zend/zend_language_scanner.c"
yy403:
YYDEBUG(403, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4841,7 +4844,7 @@ yy410:
{
RETURN_TOKEN(T_ECHO);
}
-#line 4845 "Zend/zend_language_scanner.c"
+#line 4848 "Zend/zend_language_scanner.c"
yy412:
YYDEBUG(412, *YYCURSOR);
++YYCURSOR;
@@ -4869,7 +4872,7 @@ yy413:
{
RETURN_TOKEN(T_ELSE);
}
-#line 4873 "Zend/zend_language_scanner.c"
+#line 4876 "Zend/zend_language_scanner.c"
yy414:
YYDEBUG(414, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4918,7 +4921,7 @@ yy420:
{
RETURN_TOKEN(T_EVAL);
}
-#line 4922 "Zend/zend_language_scanner.c"
+#line 4925 "Zend/zend_language_scanner.c"
yy422:
YYDEBUG(422, *YYCURSOR);
++YYCURSOR;
@@ -4931,7 +4934,7 @@ yy422:
{
RETURN_TOKEN(T_EXIT);
}
-#line 4935 "Zend/zend_language_scanner.c"
+#line 4938 "Zend/zend_language_scanner.c"
yy424:
YYDEBUG(424, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4974,7 +4977,7 @@ yy429:
{
RETURN_TOKEN(T_GOTO);
}
-#line 4978 "Zend/zend_language_scanner.c"
+#line 4981 "Zend/zend_language_scanner.c"
yy431:
YYDEBUG(431, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5027,7 +5030,7 @@ yy436:
{
RETURN_TOKEN(T_LIST);
}
-#line 5031 "Zend/zend_language_scanner.c"
+#line 5034 "Zend/zend_language_scanner.c"
yy438:
YYDEBUG(438, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5218,7 +5221,7 @@ yy467:
{
RETURN_TOKEN(T_INT_CAST);
}
-#line 5222 "Zend/zend_language_scanner.c"
+#line 5225 "Zend/zend_language_scanner.c"
yy470:
YYDEBUG(470, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5315,7 +5318,7 @@ yy480:
yy481:
YYDEBUG(481, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2076 "Zend/zend_language_scanner.l"
+#line 2079 "Zend/zend_language_scanner.l"
{
char *s;
int bprefix = (yytext[0] != '<') ? 1 : 0;
@@ -5362,7 +5365,7 @@ yy481:
RETURN_TOKEN(T_START_HEREDOC);
}
-#line 5366 "Zend/zend_language_scanner.c"
+#line 5369 "Zend/zend_language_scanner.c"
yy482:
YYDEBUG(482, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5386,7 +5389,7 @@ yy484:
{
RETURN_TOKEN(T_ARRAY);
}
-#line 5390 "Zend/zend_language_scanner.c"
+#line 5393 "Zend/zend_language_scanner.c"
yy486:
YYDEBUG(486, *YYCURSOR);
++YYCURSOR;
@@ -5399,7 +5402,7 @@ yy486:
{
RETURN_TOKEN(T_BREAK);
}
-#line 5403 "Zend/zend_language_scanner.c"
+#line 5406 "Zend/zend_language_scanner.c"
yy488:
YYDEBUG(488, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5418,7 +5421,7 @@ yy489:
{
RETURN_TOKEN(T_CATCH);
}
-#line 5422 "Zend/zend_language_scanner.c"
+#line 5425 "Zend/zend_language_scanner.c"
yy491:
YYDEBUG(491, *YYCURSOR);
++YYCURSOR;
@@ -5431,7 +5434,7 @@ yy491:
{
RETURN_TOKEN(T_CLASS);
}
-#line 5435 "Zend/zend_language_scanner.c"
+#line 5438 "Zend/zend_language_scanner.c"
yy493:
YYDEBUG(493, *YYCURSOR);
++YYCURSOR;
@@ -5444,7 +5447,7 @@ yy493:
{
RETURN_TOKEN(T_CLONE);
}
-#line 5448 "Zend/zend_language_scanner.c"
+#line 5451 "Zend/zend_language_scanner.c"
yy495:
YYDEBUG(495, *YYCURSOR);
++YYCURSOR;
@@ -5457,7 +5460,7 @@ yy495:
{
RETURN_TOKEN(T_CONST);
}
-#line 5461 "Zend/zend_language_scanner.c"
+#line 5464 "Zend/zend_language_scanner.c"
yy497:
YYDEBUG(497, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5494,7 +5497,7 @@ yy501:
{
RETURN_TOKEN(T_EMPTY);
}
-#line 5498 "Zend/zend_language_scanner.c"
+#line 5501 "Zend/zend_language_scanner.c"
yy503:
YYDEBUG(503, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5519,7 +5522,7 @@ yy505:
{
RETURN_TOKEN(T_ENDIF);
}
-#line 5523 "Zend/zend_language_scanner.c"
+#line 5526 "Zend/zend_language_scanner.c"
yy507:
YYDEBUG(507, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5565,7 +5568,7 @@ yy511:
{
RETURN_TOKEN(T_FINAL);
}
-#line 5569 "Zend/zend_language_scanner.c"
+#line 5572 "Zend/zend_language_scanner.c"
yy512:
YYDEBUG(512, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5626,7 +5629,7 @@ yy520:
{
RETURN_TOKEN(T_ISSET);
}
-#line 5630 "Zend/zend_language_scanner.c"
+#line 5633 "Zend/zend_language_scanner.c"
yy522:
YYDEBUG(522, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5645,7 +5648,7 @@ yy523:
{
RETURN_TOKEN(T_PRINT);
}
-#line 5649 "Zend/zend_language_scanner.c"
+#line 5652 "Zend/zend_language_scanner.c"
yy525:
YYDEBUG(525, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5700,7 +5703,7 @@ yy532:
{
RETURN_TOKEN(T_THROW);
}
-#line 5704 "Zend/zend_language_scanner.c"
+#line 5707 "Zend/zend_language_scanner.c"
yy534:
YYDEBUG(534, *YYCURSOR);
++YYCURSOR;
@@ -5713,7 +5716,7 @@ yy534:
{
RETURN_TOKEN(T_TRAIT);
}
-#line 5717 "Zend/zend_language_scanner.c"
+#line 5720 "Zend/zend_language_scanner.c"
yy536:
YYDEBUG(536, *YYCURSOR);
++YYCURSOR;
@@ -5726,7 +5729,7 @@ yy536:
{
RETURN_TOKEN(T_UNSET);
}
-#line 5730 "Zend/zend_language_scanner.c"
+#line 5733 "Zend/zend_language_scanner.c"
yy538:
YYDEBUG(538, *YYCURSOR);
++YYCURSOR;
@@ -5739,7 +5742,7 @@ yy538:
{
RETURN_TOKEN(T_WHILE);
}
-#line 5743 "Zend/zend_language_scanner.c"
+#line 5746 "Zend/zend_language_scanner.c"
yy540:
YYDEBUG(540, *YYCURSOR);
yyaccept = 6;
@@ -5761,7 +5764,7 @@ yy541:
{
RETURN_TOKEN(T_YIELD);
}
-#line 5765 "Zend/zend_language_scanner.c"
+#line 5768 "Zend/zend_language_scanner.c"
yy542:
YYDEBUG(542, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5857,7 +5860,7 @@ yy555:
{
RETURN_TOKEN(T_BOOL_CAST);
}
-#line 5861 "Zend/zend_language_scanner.c"
+#line 5864 "Zend/zend_language_scanner.c"
yy558:
YYDEBUG(558, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5891,7 +5894,7 @@ yy562:
{
RETURN_TOKEN(T_DOUBLE_CAST);
}
-#line 5895 "Zend/zend_language_scanner.c"
+#line 5898 "Zend/zend_language_scanner.c"
yy564:
YYDEBUG(564, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5960,7 +5963,7 @@ yy573:
{
RETURN_TOKEN(T_ELSEIF);
}
-#line 5964 "Zend/zend_language_scanner.c"
+#line 5967 "Zend/zend_language_scanner.c"
yy575:
YYDEBUG(575, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5994,7 +5997,7 @@ yy577:
{
RETURN_TOKEN(T_ENDFOR);
}
-#line 5998 "Zend/zend_language_scanner.c"
+#line 6001 "Zend/zend_language_scanner.c"
yy578:
YYDEBUG(578, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6043,7 +6046,7 @@ yy584:
{
RETURN_TOKEN(T_GLOBAL);
}
-#line 6047 "Zend/zend_language_scanner.c"
+#line 6050 "Zend/zend_language_scanner.c"
yy586:
YYDEBUG(586, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6104,7 +6107,7 @@ yy594:
{
RETURN_TOKEN(T_PUBLIC);
}
-#line 6108 "Zend/zend_language_scanner.c"
+#line 6111 "Zend/zend_language_scanner.c"
yy596:
YYDEBUG(596, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6123,7 +6126,7 @@ yy597:
{
RETURN_TOKEN(T_RETURN);
}
-#line 6127 "Zend/zend_language_scanner.c"
+#line 6130 "Zend/zend_language_scanner.c"
yy599:
YYDEBUG(599, *YYCURSOR);
++YYCURSOR;
@@ -6136,7 +6139,7 @@ yy599:
{
RETURN_TOKEN(T_STATIC);
}
-#line 6140 "Zend/zend_language_scanner.c"
+#line 6143 "Zend/zend_language_scanner.c"
yy601:
YYDEBUG(601, *YYCURSOR);
++YYCURSOR;
@@ -6149,7 +6152,7 @@ yy601:
{
RETURN_TOKEN(T_SWITCH);
}
-#line 6153 "Zend/zend_language_scanner.c"
+#line 6156 "Zend/zend_language_scanner.c"
yy603:
YYDEBUG(603, *YYCURSOR);
++YYCURSOR;
@@ -6233,7 +6236,7 @@ yy614:
{
RETURN_TOKEN(T_ARRAY_CAST);
}
-#line 6237 "Zend/zend_language_scanner.c"
+#line 6240 "Zend/zend_language_scanner.c"
yy616:
YYDEBUG(616, *YYCURSOR);
++YYCURSOR;
@@ -6283,7 +6286,7 @@ yy622:
{
RETURN_TOKEN(T_UNSET_CAST);
}
-#line 6287 "Zend/zend_language_scanner.c"
+#line 6290 "Zend/zend_language_scanner.c"
yy624:
YYDEBUG(624, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6314,7 +6317,7 @@ yy627:
{
RETURN_TOKEN(T_DECLARE);
}
-#line 6318 "Zend/zend_language_scanner.c"
+#line 6321 "Zend/zend_language_scanner.c"
yy629:
YYDEBUG(629, *YYCURSOR);
++YYCURSOR;
@@ -6327,7 +6330,7 @@ yy629:
{
RETURN_TOKEN(T_DEFAULT);
}
-#line 6331 "Zend/zend_language_scanner.c"
+#line 6334 "Zend/zend_language_scanner.c"
yy631:
YYDEBUG(631, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6364,7 +6367,7 @@ yy635:
{
RETURN_TOKEN(T_EXTENDS);
}
-#line 6368 "Zend/zend_language_scanner.c"
+#line 6371 "Zend/zend_language_scanner.c"
yy637:
YYDEBUG(637, *YYCURSOR);
++YYCURSOR;
@@ -6377,7 +6380,7 @@ yy637:
{
RETURN_TOKEN(T_FINALLY);
}
-#line 6381 "Zend/zend_language_scanner.c"
+#line 6384 "Zend/zend_language_scanner.c"
yy639:
YYDEBUG(639, *YYCURSOR);
++YYCURSOR;
@@ -6390,7 +6393,7 @@ yy639:
{
RETURN_TOKEN(T_FOREACH);
}
-#line 6394 "Zend/zend_language_scanner.c"
+#line 6397 "Zend/zend_language_scanner.c"
yy641:
YYDEBUG(641, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6428,7 +6431,7 @@ yy644:
{
RETURN_TOKEN(T_INCLUDE);
}
-#line 6432 "Zend/zend_language_scanner.c"
+#line 6435 "Zend/zend_language_scanner.c"
yy645:
YYDEBUG(645, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6465,7 +6468,7 @@ yy649:
{
RETURN_TOKEN(T_PRIVATE);
}
-#line 6469 "Zend/zend_language_scanner.c"
+#line 6472 "Zend/zend_language_scanner.c"
yy651:
YYDEBUG(651, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6497,7 +6500,7 @@ yy653:
{
RETURN_TOKEN(T_REQUIRE);
}
-#line 6501 "Zend/zend_language_scanner.c"
+#line 6504 "Zend/zend_language_scanner.c"
yy654:
YYDEBUG(654, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6521,7 +6524,7 @@ yy656:
{
RETURN_TOKEN(T_DIR);
}
-#line 6525 "Zend/zend_language_scanner.c"
+#line 6528 "Zend/zend_language_scanner.c"
yy658:
YYDEBUG(658, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6570,7 +6573,7 @@ yy665:
{
RETURN_TOKEN(T_STRING_CAST);
}
-#line 6574 "Zend/zend_language_scanner.c"
+#line 6577 "Zend/zend_language_scanner.c"
yy667:
YYDEBUG(667, *YYCURSOR);
++YYCURSOR;
@@ -6580,7 +6583,7 @@ yy667:
{
RETURN_TOKEN(T_OBJECT_CAST);
}
-#line 6584 "Zend/zend_language_scanner.c"
+#line 6587 "Zend/zend_language_scanner.c"
yy669:
YYDEBUG(669, *YYCURSOR);
++YYCURSOR;
@@ -6593,7 +6596,7 @@ yy669:
{
RETURN_TOKEN(T_ABSTRACT);
}
-#line 6597 "Zend/zend_language_scanner.c"
+#line 6600 "Zend/zend_language_scanner.c"
yy671:
YYDEBUG(671, *YYCURSOR);
++YYCURSOR;
@@ -6606,7 +6609,7 @@ yy671:
{
RETURN_TOKEN(T_CALLABLE);
}
-#line 6610 "Zend/zend_language_scanner.c"
+#line 6613 "Zend/zend_language_scanner.c"
yy673:
YYDEBUG(673, *YYCURSOR);
++YYCURSOR;
@@ -6619,7 +6622,7 @@ yy673:
{
RETURN_TOKEN(T_CONTINUE);
}
-#line 6623 "Zend/zend_language_scanner.c"
+#line 6626 "Zend/zend_language_scanner.c"
yy675:
YYDEBUG(675, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6650,7 +6653,7 @@ yy678:
{
RETURN_TOKEN(T_ENDWHILE);
}
-#line 6654 "Zend/zend_language_scanner.c"
+#line 6657 "Zend/zend_language_scanner.c"
yy680:
YYDEBUG(680, *YYCURSOR);
++YYCURSOR;
@@ -6663,7 +6666,7 @@ yy680:
{
RETURN_TOKEN(T_FUNCTION);
}
-#line 6667 "Zend/zend_language_scanner.c"
+#line 6670 "Zend/zend_language_scanner.c"
yy682:
YYDEBUG(682, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6735,7 +6738,7 @@ yy692:
{
RETURN_TOKEN(T_FILE);
}
-#line 6739 "Zend/zend_language_scanner.c"
+#line 6742 "Zend/zend_language_scanner.c"
yy694:
YYDEBUG(694, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6760,7 +6763,7 @@ yy696:
{
RETURN_TOKEN(T_LINE);
}
-#line 6764 "Zend/zend_language_scanner.c"
+#line 6767 "Zend/zend_language_scanner.c"
yy698:
YYDEBUG(698, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6801,7 +6804,7 @@ yy703:
{
RETURN_TOKEN(T_ENDSWITCH);
}
-#line 6805 "Zend/zend_language_scanner.c"
+#line 6808 "Zend/zend_language_scanner.c"
yy705:
YYDEBUG(705, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6832,7 +6835,7 @@ yy708:
{
RETURN_TOKEN(T_INSTEADOF);
}
-#line 6836 "Zend/zend_language_scanner.c"
+#line 6839 "Zend/zend_language_scanner.c"
yy710:
YYDEBUG(710, *YYCURSOR);
++YYCURSOR;
@@ -6845,7 +6848,7 @@ yy710:
{
RETURN_TOKEN(T_INTERFACE);
}
-#line 6849 "Zend/zend_language_scanner.c"
+#line 6852 "Zend/zend_language_scanner.c"
yy712:
YYDEBUG(712, *YYCURSOR);
++YYCURSOR;
@@ -6858,7 +6861,7 @@ yy712:
{
RETURN_TOKEN(T_NAMESPACE);
}
-#line 6862 "Zend/zend_language_scanner.c"
+#line 6865 "Zend/zend_language_scanner.c"
yy714:
YYDEBUG(714, *YYCURSOR);
++YYCURSOR;
@@ -6871,7 +6874,7 @@ yy714:
{
RETURN_TOKEN(T_PROTECTED);
}
-#line 6875 "Zend/zend_language_scanner.c"
+#line 6878 "Zend/zend_language_scanner.c"
yy716:
YYDEBUG(716, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6896,7 +6899,7 @@ yy718:
{
RETURN_TOKEN(T_CLASS_C);
}
-#line 6900 "Zend/zend_language_scanner.c"
+#line 6903 "Zend/zend_language_scanner.c"
yy720:
YYDEBUG(720, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6932,7 +6935,7 @@ yy724:
{
RETURN_TOKEN(T_TRAIT_C);
}
-#line 6936 "Zend/zend_language_scanner.c"
+#line 6939 "Zend/zend_language_scanner.c"
yy726:
YYDEBUG(726, *YYCURSOR);
++YYCURSOR;
@@ -6945,7 +6948,7 @@ yy726:
{
RETURN_TOKEN(T_ENDDECLARE);
}
-#line 6949 "Zend/zend_language_scanner.c"
+#line 6952 "Zend/zend_language_scanner.c"
yy728:
YYDEBUG(728, *YYCURSOR);
++YYCURSOR;
@@ -6958,7 +6961,7 @@ yy728:
{
RETURN_TOKEN(T_ENDFOREACH);
}
-#line 6962 "Zend/zend_language_scanner.c"
+#line 6965 "Zend/zend_language_scanner.c"
yy730:
YYDEBUG(730, *YYCURSOR);
++YYCURSOR;
@@ -6971,7 +6974,7 @@ yy730:
{
RETURN_TOKEN(T_IMPLEMENTS);
}
-#line 6975 "Zend/zend_language_scanner.c"
+#line 6978 "Zend/zend_language_scanner.c"
yy732:
YYDEBUG(732, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6990,7 +6993,7 @@ yy733:
{
RETURN_TOKEN(T_INSTANCEOF);
}
-#line 6994 "Zend/zend_language_scanner.c"
+#line 6997 "Zend/zend_language_scanner.c"
yy735:
YYDEBUG(735, *YYCURSOR);
yych = *++YYCURSOR;
@@ -7042,7 +7045,7 @@ yy739:
{
RETURN_TOKEN(T_METHOD_C);
}
-#line 7046 "Zend/zend_language_scanner.c"
+#line 7049 "Zend/zend_language_scanner.c"
yy741:
YYDEBUG(741, *YYCURSOR);
yych = *++YYCURSOR;
@@ -7072,7 +7075,7 @@ yy744:
HANDLE_NEWLINES(yytext, yyleng);
RETURN_TOKEN(T_YIELD_FROM);
}
-#line 7076 "Zend/zend_language_scanner.c"
+#line 7079 "Zend/zend_language_scanner.c"
yy746:
YYDEBUG(746, *YYCURSOR);
yych = *++YYCURSOR;
@@ -7101,7 +7104,7 @@ yy749:
{
RETURN_TOKEN(T_INCLUDE_ONCE);
}
-#line 7105 "Zend/zend_language_scanner.c"
+#line 7108 "Zend/zend_language_scanner.c"
yy751:
YYDEBUG(751, *YYCURSOR);
++YYCURSOR;
@@ -7114,7 +7117,7 @@ yy751:
{
RETURN_TOKEN(T_REQUIRE_ONCE);
}
-#line 7118 "Zend/zend_language_scanner.c"
+#line 7121 "Zend/zend_language_scanner.c"
yy753:
YYDEBUG(753, *YYCURSOR);
++YYCURSOR;
@@ -7127,7 +7130,7 @@ yy753:
{
RETURN_TOKEN(T_FUNC_C);
}
-#line 7131 "Zend/zend_language_scanner.c"
+#line 7134 "Zend/zend_language_scanner.c"
yy755:
YYDEBUG(755, *YYCURSOR);
yych = *++YYCURSOR;
@@ -7157,7 +7160,7 @@ yy758:
{
RETURN_TOKEN(T_NS_C);
}
-#line 7161 "Zend/zend_language_scanner.c"
+#line 7164 "Zend/zend_language_scanner.c"
yy760:
YYDEBUG(760, *YYCURSOR);
yych = *++YYCURSOR;
@@ -7175,7 +7178,7 @@ yy761:
{
RETURN_TOKEN(T_HALT_COMPILER);
}
-#line 7179 "Zend/zend_language_scanner.c"
+#line 7182 "Zend/zend_language_scanner.c"
}
/* *********************************** */
yyc_ST_LOOKING_FOR_PROPERTY:
@@ -7247,7 +7250,7 @@ yy766:
yy_pop_state();
goto restart;
}
-#line 7251 "Zend/zend_language_scanner.c"
+#line 7254 "Zend/zend_language_scanner.c"
yy767:
YYDEBUG(767, *YYCURSOR);
++YYCURSOR;
@@ -7264,7 +7267,7 @@ yy767:
HANDLE_NEWLINES(yytext, yyleng);
RETURN_TOKEN(T_WHITESPACE);
}
-#line 7268 "Zend/zend_language_scanner.c"
+#line 7271 "Zend/zend_language_scanner.c"
yy770:
YYDEBUG(770, *YYCURSOR);
yych = *++YYCURSOR;
@@ -7287,7 +7290,7 @@ yy771:
zend_copy_value(zendlval, yytext, yyleng);
RETURN_TOKEN(T_STRING);
}
-#line 7291 "Zend/zend_language_scanner.c"
+#line 7294 "Zend/zend_language_scanner.c"
yy774:
YYDEBUG(774, *YYCURSOR);
++YYCURSOR;
@@ -7297,7 +7300,7 @@ yy774:
{
RETURN_TOKEN(T_OBJECT_OPERATOR);
}
-#line 7301 "Zend/zend_language_scanner.c"
+#line 7304 "Zend/zend_language_scanner.c"
}
/* *********************************** */
yyc_ST_LOOKING_FOR_VARNAME:
@@ -7361,7 +7364,7 @@ yy779:
yy_push_state(ST_IN_SCRIPTING);
goto restart;
}
-#line 7365 "Zend/zend_language_scanner.c"
+#line 7368 "Zend/zend_language_scanner.c"
yy780:
YYDEBUG(780, *YYCURSOR);
yych = *(YYMARKER = ++YYCURSOR);
@@ -7416,7 +7419,7 @@ yy784:
yy_push_state(ST_IN_SCRIPTING);
RETURN_TOKEN(T_STRING_VARNAME);
}
-#line 7420 "Zend/zend_language_scanner.c"
+#line 7423 "Zend/zend_language_scanner.c"
}
/* *********************************** */
yyc_ST_NOWDOC:
@@ -7427,7 +7430,7 @@ yyc_ST_NOWDOC:
++YYCURSOR;
YYDEBUG(789, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2329 "Zend/zend_language_scanner.l"
+#line 2332 "Zend/zend_language_scanner.l"
{
int newline = 0;
@@ -7483,7 +7486,7 @@ nowdoc_scan_done:
HANDLE_NEWLINES(yytext, yyleng - newline);
RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE);
}
-#line 7487 "Zend/zend_language_scanner.c"
+#line 7490 "Zend/zend_language_scanner.c"
/* *********************************** */
yyc_ST_VAR_OFFSET:
{
@@ -7571,7 +7574,7 @@ yy792:
++YYCURSOR;
YYDEBUG(793, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2386 "Zend/zend_language_scanner.l"
+#line 2389 "Zend/zend_language_scanner.l"
{
if (YYCURSOR > YYLIMIT) {
RETURN_TOKEN(END);
@@ -7580,7 +7583,7 @@ yy792:
zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);
goto restart;
}
-#line 7584 "Zend/zend_language_scanner.c"
+#line 7587 "Zend/zend_language_scanner.c"
yy794:
YYDEBUG(794, *YYCURSOR);
++YYCURSOR;
@@ -7594,7 +7597,7 @@ yy794:
ZVAL_NULL(zendlval);
RETURN_TOKEN(T_ENCAPSED_AND_WHITESPACE);
}
-#line 7598 "Zend/zend_language_scanner.c"
+#line 7601 "Zend/zend_language_scanner.c"
yy796:
YYDEBUG(796, *YYCURSOR);
++YYCURSOR;
@@ -7606,7 +7609,7 @@ yy797:
/* Only '[' or '-' can be valid, but returning other tokens will allow a more explicit parse error */
RETURN_TOKEN(yytext[0]);
}
-#line 7610 "Zend/zend_language_scanner.c"
+#line 7613 "Zend/zend_language_scanner.c"
yy798:
YYDEBUG(798, *YYCURSOR);
yych = *++YYCURSOR;
@@ -7657,7 +7660,7 @@ string:
}
RETURN_TOKEN(T_NUM_STRING);
}
-#line 7661 "Zend/zend_language_scanner.c"
+#line 7664 "Zend/zend_language_scanner.c"
yy801:
YYDEBUG(801, *YYCURSOR);
++YYCURSOR;
@@ -7684,7 +7687,7 @@ yy803:
zend_copy_value(zendlval, yytext, yyleng);
RETURN_TOKEN(T_STRING);
}
-#line 7688 "Zend/zend_language_scanner.c"
+#line 7691 "Zend/zend_language_scanner.c"
yy806:
YYDEBUG(806, *YYCURSOR);
++YYCURSOR;
@@ -7695,7 +7698,7 @@ yy806:
yy_pop_state();
RETURN_TOKEN(']');
}
-#line 7699 "Zend/zend_language_scanner.c"
+#line 7702 "Zend/zend_language_scanner.c"
yy808:
YYDEBUG(808, *YYCURSOR);
++YYCURSOR;
@@ -7725,7 +7728,7 @@ yy810:
zend_copy_value(zendlval, (yytext+1), (yyleng-1));
RETURN_TOKEN(T_VARIABLE);
}
-#line 7729 "Zend/zend_language_scanner.c"
+#line 7732 "Zend/zend_language_scanner.c"
yy811:
YYDEBUG(811, *YYCURSOR);
++YYCURSOR;
@@ -7742,7 +7745,7 @@ yy813:
ZVAL_STRINGL(zendlval, yytext, yyleng);
RETURN_TOKEN(T_NUM_STRING);
}
-#line 7746 "Zend/zend_language_scanner.c"
+#line 7749 "Zend/zend_language_scanner.c"
yy814:
YYDEBUG(814, *YYCURSOR);
yych = *++YYCURSOR;
@@ -7782,6 +7785,6 @@ yy819:
goto yy813;
}
}
-#line 2395 "Zend/zend_language_scanner.l"
+#line 2398 "Zend/zend_language_scanner.l"
}
diff --git a/Zend/zend_language_scanner.h b/Zend/zend_language_scanner.h
index 4da14c6828..2064d6d17a 100644
--- a/Zend/zend_language_scanner.h
+++ b/Zend/zend_language_scanner.h
@@ -34,7 +34,7 @@ typedef struct _zend_lex_state {
zend_ptr_stack heredoc_label_stack;
zend_file_handle *in;
- uint lineno;
+ uint32_t lineno;
zend_string *filename;
/* original (unfiltered) script */
@@ -81,4 +81,6 @@ END_EXTERN_C()
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l
index d74660145f..837df416e2 100644
--- a/Zend/zend_language_scanner.l
+++ b/Zend/zend_language_scanner.l
@@ -1958,6 +1958,9 @@ inline_char_handler:
<ST_IN_SCRIPTING>"?>"{NEWLINE}? {
BEGIN(INITIAL);
+ if (yytext[yyleng-1] != '>') {
+ CG(increment_lineno) = 1;
+ }
RETURN_TOKEN(T_CLOSE_TAG); /* implicit ';' at php-end tag */
}
diff --git a/Zend/zend_list.c b/Zend/zend_list.c
index d1fddac397..8da745ff95 100644
--- a/Zend/zend_list.c
+++ b/Zend/zend_list.c
@@ -343,4 +343,6 @@ const char *zend_rsrc_list_get_rsrc_type(zend_resource *res)
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_list.h b/Zend/zend_list.h
index e21350c940..33fa3a396f 100644
--- a/Zend/zend_list.h
+++ b/Zend/zend_list.h
@@ -80,4 +80,6 @@ END_EXTERN_C()
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_llist.c b/Zend/zend_llist.c
index f771bd297b..de93f295e4 100644
--- a/Zend/zend_llist.c
+++ b/Zend/zend_llist.c
@@ -316,4 +316,6 @@ ZEND_API void *zend_llist_get_prev_ex(zend_llist *l, zend_llist_position *pos)
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_llist.h b/Zend/zend_llist.h
index 7f92e6a186..a197a03ebe 100644
--- a/Zend/zend_llist.h
+++ b/Zend/zend_llist.h
@@ -83,4 +83,6 @@ END_EXTERN_C()
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_long.h b/Zend/zend_long.h
index a471e5f808..6d495427d5 100644
--- a/Zend/zend_long.h
+++ b/Zend/zend_long.h
@@ -137,4 +137,6 @@ static const char long_min_digits[] = LONG_MIN_DIGITS;
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_modules.h b/Zend/zend_modules.h
index c210c91659..487ebf51c7 100644
--- a/Zend/zend_modules.h
+++ b/Zend/zend_modules.h
@@ -33,7 +33,7 @@
#define ZEND_MODULE_INFO_FUNC_ARGS zend_module_entry *zend_module
#define ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU zend_module
-#define ZEND_MODULE_API_NO 20160303
+#define ZEND_MODULE_API_NO 20170718
#ifdef ZTS
#define USING_ZTS 1
#else
@@ -138,4 +138,6 @@ END_EXTERN_C()
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_multibyte.c b/Zend/zend_multibyte.c
index 4d8ff969e8..2b2d59b67c 100644
--- a/Zend/zend_multibyte.c
+++ b/Zend/zend_multibyte.c
@@ -218,6 +218,6 @@ ZEND_API int zend_multibyte_set_script_encoding_by_string(const char *new_value,
* tab-width: 4
* c-basic-offset: 4
* End:
- * vim600: sw=4 ts=4 tw=78
- * vim<600: sw=4 ts=4 tw=78
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_multibyte.h b/Zend/zend_multibyte.h
index 3fefe2dfda..1ccb8c9a07 100644
--- a/Zend/zend_multibyte.h
+++ b/Zend/zend_multibyte.h
@@ -85,6 +85,6 @@ END_EXTERN_C()
* tab-width: 4
* c-basic-offset: 4
* End:
- * vim600: sw=4 ts=4 tw=78
- * vim<600: sw=4 ts=4 tw=78
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_multiply.h b/Zend/zend_multiply.h
index 8bece84708..26853a3cbf 100644
--- a/Zend/zend_multiply.h
+++ b/Zend/zend_multiply.h
@@ -19,10 +19,32 @@
/* $Id$ */
+#include "zend_portability.h"
+
#ifndef ZEND_MULTIPLY_H
#define ZEND_MULTIPLY_H
-#if (defined(__i386__) || defined(__x86_64__)) && defined(__GNUC__)
+#if PHP_HAVE_BUILTIN_SMULL_OVERFLOW && SIZEOF_LONG == SIZEOF_ZEND_LONG
+
+#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \
+ long __tmpvar; \
+ if (((usedval) = __builtin_smull_overflow((a), (b), &__tmpvar))) { \
+ (dval) = (double) (a) * (double) (b); \
+ } \
+ else (lval) = __tmpvar; \
+} while (0)
+
+#elif PHP_HAVE_BUILTIN_SMULLL_OVERFLOW && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG
+
+#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \
+ long long __tmpvar; \
+ if (((usedval) = __builtin_smulll_overflow((a), (b), &__tmpvar))) { \
+ (dval) = (double) (a) * (double) (b); \
+ } \
+ else (lval) = __tmpvar; \
+} while (0)
+
+#elif (defined(__i386__) || defined(__x86_64__)) && defined(__GNUC__)
#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \
zend_long __tmpvar; \
@@ -61,7 +83,21 @@
#elif defined(ZEND_WIN32)
-#define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \
+# ifdef _M_X64
+# pragma intrinsic(_mul128)
+# define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \
+ __int64 __high; \
+ __int64 __low = _mul128((a), (b), &__high); \
+ if ((__low >> 63I64) == __high) { \
+ (usedval) = 0; \
+ (lval) = __low; \
+ } else { \
+ (usedval) = 1; \
+ (dval) = (double)(a) * (double)(b); \
+ } \
+} while (0)
+# else
+# define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \
zend_long __lres = (a) * (b); \
long double __dres = (long double)(a) * (long double)(b); \
long double __delta = (long double) __lres - __dres; \
@@ -71,6 +107,7 @@
(lval) = __lres; \
} \
} while (0)
+# endif
#elif defined(__powerpc64__) && defined(__GNUC__)
@@ -299,4 +336,6 @@ static zend_always_inline size_t zend_safe_addmult(size_t nmemb, size_t size, si
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c
index f3d2be2a54..86e75c3ffe 100644
--- a/Zend/zend_object_handlers.c
+++ b/Zend/zend_object_handlers.c
@@ -163,7 +163,7 @@ ZEND_API HashTable *zend_std_get_debug_info(zval *object, int *is_temp) /* {{{ *
zend_call_method_with_0_params(object, ce, &ce->__debugInfo, ZEND_DEBUGINFO_FUNC_NAME, &retval);
if (Z_TYPE(retval) == IS_ARRAY) {
- if (Z_IMMUTABLE(retval)) {
+ if (!Z_REFCOUNTED(retval)) {
*is_temp = 1;
return zend_array_dup(Z_ARRVAL(retval));
} else if (Z_REFCOUNT(retval) <= 1) {
@@ -206,10 +206,8 @@ static void zend_std_call_getter(zval *object, zval *member, zval *retval) /* {{
}
/* }}} */
-static int zend_std_call_setter(zval *object, zval *member, zval *value) /* {{{ */
+static void zend_std_call_setter(zval *object, zval *member, zval *value) /* {{{ */
{
- zval retval;
- int result;
zend_class_entry *ce = Z_OBJCE_P(object);
zend_class_entry *orig_fake_scope = EG(fake_scope);
@@ -218,20 +216,10 @@ static int zend_std_call_setter(zval *object, zval *member, zval *value) /* {{{
/* __set handler is called with two arguments:
property name
value to be set
-
- it should return whether the call was successful or not
*/
- zend_call_method_with_2_params(object, ce, &ce->__set, ZEND_SET_FUNC_NAME, &retval, member, value);
+ zend_call_method_with_2_params(object, ce, &ce->__set, ZEND_SET_FUNC_NAME, NULL, member, value);
- if (Z_TYPE(retval) != IS_UNDEF) {
- result = i_zend_is_true(&retval) ? SUCCESS : FAILURE;
- zval_ptr_dtor(&retval);
- EG(fake_scope) = orig_fake_scope;
- return result;
- } else {
- EG(fake_scope) = orig_fake_scope;
- return FAILURE;
- }
+ EG(fake_scope) = orig_fake_scope;
}
/* }}} */
@@ -742,9 +730,7 @@ found:
ZVAL_COPY(&tmp_object, object);
(*guard) |= IN_SET; /* prevent circular setting */
- if (zend_std_call_setter(&tmp_object, member, value) != SUCCESS) {
- /* for now, just ignore it - __set should take care of warnings, etc. */
- }
+ zend_std_call_setter(&tmp_object, member, value);
(*guard) &= ~IN_SET;
zval_ptr_dtor(&tmp_object);
} else if (EXPECTED(property_offset != ZEND_WRONG_PROPERTY_OFFSET)) {
@@ -1283,7 +1269,6 @@ static zend_always_inline zend_function *zend_get_user_callstatic_function(zend_
ZEND_API zend_function *zend_std_get_static_method(zend_class_entry *ce, zend_string *function_name, const zval *key) /* {{{ */
{
zend_function *fbc = NULL;
- char *lc_class_name;
zend_string *lc_function_name;
zend_object *object;
zend_class_entry *scope;
@@ -1294,21 +1279,19 @@ ZEND_API zend_function *zend_std_get_static_method(zend_class_entry *ce, zend_st
lc_function_name = zend_string_tolower(function_name);
}
- if (ZSTR_LEN(function_name) == ZSTR_LEN(ce->name) && ce->constructor) {
- lc_class_name = zend_str_tolower_dup(ZSTR_VAL(ce->name), ZSTR_LEN(ce->name));
- /* Only change the method to the constructor if the constructor isn't called __construct
- * we check for __ so we can be binary safe for lowering, we should use ZEND_CONSTRUCTOR_FUNC_NAME
- */
- if (!memcmp(lc_class_name, ZSTR_VAL(lc_function_name), ZSTR_LEN(function_name)) && memcmp(ZSTR_VAL(ce->constructor->common.function_name), "__", sizeof("__") - 1)) {
- fbc = ce->constructor;
- }
- efree(lc_class_name);
- }
-
- if (EXPECTED(!fbc)) {
+ do {
zval *func = zend_hash_find(&ce->function_table, lc_function_name);
if (EXPECTED(func != NULL)) {
fbc = Z_FUNC_P(func);
+ } else if (ce->constructor
+ && ZSTR_LEN(lc_function_name) == ZSTR_LEN(ce->name)
+ && zend_binary_strncasecmp(ZSTR_VAL(lc_function_name), ZSTR_LEN(lc_function_name), ZSTR_VAL(ce->name), ZSTR_LEN(lc_function_name), ZSTR_LEN(lc_function_name)) == 0
+ /* Only change the method to the constructor if the constructor isn't called __construct
+ * we check for __ so we can be binary safe for lowering, we should use ZEND_CONSTRUCTOR_FUNC_NAME
+ */
+ && (ZSTR_VAL(ce->constructor->common.function_name)[0] != '_'
+ || ZSTR_VAL(ce->constructor->common.function_name)[1] != '_')) {
+ fbc = ce->constructor;
} else {
if (UNEXPECTED(!key)) {
zend_string_release(lc_function_name);
@@ -1331,7 +1314,7 @@ ZEND_API zend_function *zend_std_get_static_method(zend_class_entry *ce, zend_st
return NULL;
}
}
- }
+ } while (0);
#if MBO_0
/* right now this function is used for non static method lookup too */
@@ -1726,7 +1709,7 @@ int zend_std_get_closure(zval *obj, zend_class_entry **ce_ptr, zend_function **f
ce = Z_OBJCE_P(obj);
- if ((func = zend_hash_find(&ce->function_table, CG(known_strings)[ZEND_STR_MAGIC_INVOKE])) == NULL) {
+ if ((func = zend_hash_find(&ce->function_table, ZSTR_KNOWN(ZEND_STR_MAGIC_INVOKE))) == NULL) {
return FAILURE;
}
*fptr_ptr = Z_FUNC_P(func);
@@ -1784,4 +1767,6 @@ ZEND_API zend_object_handlers std_object_handlers = {
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_object_handlers.h b/Zend/zend_object_handlers.h
index 40998338c3..527aa70a1c 100644
--- a/Zend/zend_object_handlers.h
+++ b/Zend/zend_object_handlers.h
@@ -200,4 +200,6 @@ END_EXTERN_C()
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_objects.c b/Zend/zend_objects.c
index b8626c99e1..11daa0646a 100644
--- a/Zend/zend_objects.c
+++ b/Zend/zend_objects.c
@@ -29,24 +29,14 @@
ZEND_API void zend_object_std_init(zend_object *object, zend_class_entry *ce)
{
- zval *p, *end;
-
GC_REFCOUNT(object) = 1;
- GC_TYPE_INFO(object) = IS_OBJECT;
+ GC_TYPE_INFO(object) = IS_OBJECT | (GC_COLLECTABLE << GC_FLAGS_SHIFT);
object->ce = ce;
object->properties = NULL;
zend_objects_store_put(object);
- p = object->properties_table;
- if (EXPECTED(ce->default_properties_count != 0)) {
- end = p + ce->default_properties_count;
- do {
- ZVAL_UNDEF(p);
- p++;
- } while (p != end);
- }
if (UNEXPECTED(ce->ce_flags & ZEND_ACC_USE_GUARDS)) {
GC_FLAGS(object) |= IS_OBJ_USE_GUARDS;
- ZVAL_UNDEF(p);
+ ZVAL_UNDEF(object->properties_table + object->ce->default_properties_count);
}
}
@@ -86,7 +76,7 @@ ZEND_API void zend_object_std_dtor(zend_object *object)
ZEND_API void zend_objects_destroy_object(zend_object *object)
{
- zend_function *destructor = object ? object->ce->destructor : NULL;
+ zend_function *destructor = object->ce->destructor;
if (destructor) {
zend_object *old_exception;
@@ -252,6 +242,16 @@ ZEND_API zend_object *zend_objects_clone_obj(zval *zobject)
old_object = Z_OBJ_P(zobject);
new_object = zend_objects_new(old_object->ce);
+ /* zend_objects_clone_members() expect the properties to be initialized. */
+ if (new_object->ce->default_properties_count) {
+ zval *p = new_object->properties_table;
+ zval *end = p + new_object->ce->default_properties_count;
+ do {
+ ZVAL_UNDEF(p);
+ p++;
+ } while (p != end);
+ }
+
zend_objects_clone_members(new_object, old_object);
return new_object;
@@ -263,4 +263,6 @@ ZEND_API zend_object *zend_objects_clone_obj(zval *zobject)
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_objects.h b/Zend/zend_objects.h
index 7bd2236885..9aee205bd5 100644
--- a/Zend/zend_objects.h
+++ b/Zend/zend_objects.h
@@ -41,4 +41,6 @@ END_EXTERN_C()
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_objects_API.c b/Zend/zend_objects_API.c
index 54d8d51456..d3d47af545 100644
--- a/Zend/zend_objects_API.c
+++ b/Zend/zend_objects_API.c
@@ -50,9 +50,14 @@ ZEND_API void zend_objects_store_call_destructors(zend_objects_store *objects)
if (IS_OBJ_VALID(obj)) {
if (!(GC_FLAGS(obj) & IS_OBJ_DESTRUCTOR_CALLED)) {
GC_FLAGS(obj) |= IS_OBJ_DESTRUCTOR_CALLED;
- GC_REFCOUNT(obj)++;
- obj->handlers->dtor_obj(obj);
- GC_REFCOUNT(obj)--;
+
+ if (obj->handlers->dtor_obj
+ && (obj->handlers->dtor_obj != zend_objects_destroy_object
+ || obj->ce->destructor)) {
+ GC_REFCOUNT(obj)++;
+ obj->handlers->dtor_obj(obj);
+ GC_REFCOUNT(obj)--;
+ }
}
}
}
@@ -76,7 +81,7 @@ ZEND_API void zend_objects_store_mark_destructed(zend_objects_store *objects)
}
}
-ZEND_API void zend_objects_store_free_object_storage(zend_objects_store *objects)
+ZEND_API void zend_objects_store_free_object_storage(zend_objects_store *objects, zend_bool fast_shutdown)
{
zend_object **obj_ptr, **end, *obj;
@@ -88,20 +93,37 @@ ZEND_API void zend_objects_store_free_object_storage(zend_objects_store *objects
end = objects->object_buckets + 1;
obj_ptr = objects->object_buckets + objects->top;
- do {
- obj_ptr--;
- obj = *obj_ptr;
- if (IS_OBJ_VALID(obj)) {
- if (!(GC_FLAGS(obj) & IS_OBJ_FREE_CALLED)) {
- GC_FLAGS(obj) |= IS_OBJ_FREE_CALLED;
- if (obj->handlers->free_obj) {
- GC_REFCOUNT(obj)++;
- obj->handlers->free_obj(obj);
- GC_REFCOUNT(obj)--;
+ if (fast_shutdown) {
+ do {
+ obj_ptr--;
+ obj = *obj_ptr;
+ if (IS_OBJ_VALID(obj)) {
+ if (!(GC_FLAGS(obj) & IS_OBJ_FREE_CALLED)) {
+ GC_FLAGS(obj) |= IS_OBJ_FREE_CALLED;
+ if (obj->handlers->free_obj && obj->handlers->free_obj != zend_object_std_dtor) {
+ GC_REFCOUNT(obj)++;
+ obj->handlers->free_obj(obj);
+ GC_REFCOUNT(obj)--;
+ }
}
}
- }
- } while (obj_ptr != end);
+ } while (obj_ptr != end);
+ } else {
+ do {
+ obj_ptr--;
+ obj = *obj_ptr;
+ if (IS_OBJ_VALID(obj)) {
+ if (!(GC_FLAGS(obj) & IS_OBJ_FREE_CALLED)) {
+ GC_FLAGS(obj) |= IS_OBJ_FREE_CALLED;
+ if (obj->handlers->free_obj) {
+ GC_REFCOUNT(obj)++;
+ obj->handlers->free_obj(obj);
+ GC_REFCOUNT(obj)--;
+ }
+ }
+ }
+ } while (obj_ptr != end);
+ }
}
@@ -111,7 +133,10 @@ ZEND_API void zend_objects_store_put(zend_object *object)
{
int handle;
- if (EG(objects_store).free_list_head != -1) {
+ /* When in shutdown sequesnce - do not reuse previously freed handles, to make sure
+ * the dtors for newly created objects are called in zend_objects_store_call_destructors() loop
+ */
+ if (!(EG(flags) & EG_FLAGS_IN_SHUTDOWN) && EG(objects_store).free_list_head != -1) {
handle = EG(objects_store).free_list_head;
EG(objects_store).free_list_head = GET_OBJ_BUCKET_NUMBER(EG(objects_store).object_buckets[handle]);
} else {
@@ -129,17 +154,6 @@ ZEND_API void zend_objects_store_put(zend_object *object)
SET_OBJ_BUCKET_NUMBER(EG(objects_store).object_buckets[handle], EG(objects_store).free_list_head); \
EG(objects_store).free_list_head = handle;
-ZEND_API void zend_objects_store_free(zend_object *object) /* {{{ */
-{
- uint32_t handle = object->handle;
- void *ptr = ((char*)object) - object->handlers->offset;
-
- GC_REMOVE_FROM_BUFFER(object);
- efree(ptr);
- ZEND_OBJECTS_STORE_ADD_TO_FREE_LIST(handle);
-}
-/* }}} */
-
ZEND_API void zend_objects_store_del(zend_object *object) /* {{{ */
{
/* Make sure we hold a reference count during the destructor call
@@ -149,18 +163,14 @@ ZEND_API void zend_objects_store_del(zend_object *object) /* {{{ */
if (EG(objects_store).object_buckets &&
IS_OBJ_VALID(EG(objects_store).object_buckets[object->handle])) {
if (GC_REFCOUNT(object) == 0) {
- int failure = 0;
-
if (!(GC_FLAGS(object) & IS_OBJ_DESTRUCTOR_CALLED)) {
GC_FLAGS(object) |= IS_OBJ_DESTRUCTOR_CALLED;
- if (object->handlers->dtor_obj) {
+ if (object->handlers->dtor_obj
+ && (object->handlers->dtor_obj != zend_objects_destroy_object
+ || object->ce->destructor)) {
GC_REFCOUNT(object)++;
- zend_try {
- object->handlers->dtor_obj(object);
- } zend_catch {
- failure = 1;
- } zend_end_try();
+ object->handlers->dtor_obj(object);
GC_REFCOUNT(object)--;
}
}
@@ -173,13 +183,9 @@ ZEND_API void zend_objects_store_del(zend_object *object) /* {{{ */
if (!(GC_FLAGS(object) & IS_OBJ_FREE_CALLED)) {
GC_FLAGS(object) |= IS_OBJ_FREE_CALLED;
if (object->handlers->free_obj) {
- zend_try {
- GC_REFCOUNT(object)++;
- object->handlers->free_obj(object);
- GC_REFCOUNT(object)--;
- } zend_catch {
- failure = 1;
- } zend_end_try();
+ GC_REFCOUNT(object)++;
+ object->handlers->free_obj(object);
+ GC_REFCOUNT(object)--;
}
}
ptr = ((char*)object) - object->handlers->offset;
@@ -187,10 +193,6 @@ ZEND_API void zend_objects_store_del(zend_object *object) /* {{{ */
efree(ptr);
ZEND_OBJECTS_STORE_ADD_TO_FREE_LIST(handle);
}
-
- if (failure) {
- zend_bailout();
- }
} else {
GC_REFCOUNT(object)--;
}
@@ -198,24 +200,6 @@ ZEND_API void zend_objects_store_del(zend_object *object) /* {{{ */
}
/* }}} */
-/* zend_object_store_set_object:
- * It is ONLY valid to call this function from within the constructor of an
- * overloaded object. Its purpose is to set the object pointer for the object
- * when you can't possibly know its value until you have parsed the arguments
- * from the constructor function. You MUST NOT use this function for any other
- * weird games, or call it at any other time after the object is constructed.
- * */
-ZEND_API void zend_object_store_set_object(zval *zobject, zend_object *object)
-{
- EG(objects_store).object_buckets[Z_OBJ_HANDLE_P(zobject)] = object;
-}
-
-/* Called when the ctor was terminated by an exception */
-ZEND_API void zend_object_store_ctor_failed(zend_object *obj)
-{
- GC_FLAGS(obj) |= IS_OBJ_DESTRUCTOR_CALLED;
-}
-
ZEND_API zend_object_handlers *zend_get_std_object_handlers(void)
{
return &std_object_handlers;
@@ -227,4 +211,6 @@ ZEND_API zend_object_handlers *zend_get_std_object_handlers(void)
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_objects_API.h b/Zend/zend_objects_API.h
index c27ac339dc..0bb51c162d 100644
--- a/Zend/zend_objects_API.h
+++ b/Zend/zend_objects_API.h
@@ -52,23 +52,21 @@ BEGIN_EXTERN_C()
ZEND_API void zend_objects_store_init(zend_objects_store *objects, uint32_t init_size);
ZEND_API void zend_objects_store_call_destructors(zend_objects_store *objects);
ZEND_API void zend_objects_store_mark_destructed(zend_objects_store *objects);
+ZEND_API void zend_objects_store_free_object_storage(zend_objects_store *objects, zend_bool fast_shutdown);
ZEND_API void zend_objects_store_destroy(zend_objects_store *objects);
/* Store API functions */
ZEND_API void zend_objects_store_put(zend_object *object);
ZEND_API void zend_objects_store_del(zend_object *object);
-ZEND_API void zend_objects_store_free(zend_object *object);
-/* See comment in zend_objects_API.c before you use this */
-ZEND_API void zend_object_store_set_object(zval *zobject, zend_object *object);
-ZEND_API void zend_object_store_ctor_failed(zend_object *object);
-
-ZEND_API void zend_objects_store_free_object_storage(zend_objects_store *objects);
+/* Called when the ctor was terminated by an exception */
+static zend_always_inline void zend_object_store_ctor_failed(zend_object *obj)
+{
+ GC_FLAGS(obj) |= IS_OBJ_DESTRUCTOR_CALLED;
+}
#define ZEND_OBJECTS_STORE_HANDLERS 0, zend_object_std_dtor, zend_objects_destroy_object, zend_objects_clone_obj
-ZEND_API zend_object *zend_object_create_proxy(zval *object, zval *member);
-
ZEND_API zend_object_handlers *zend_get_std_object_handlers(void);
END_EXTERN_C()
@@ -76,7 +74,7 @@ static zend_always_inline void zend_object_release(zend_object *obj)
{
if (--GC_REFCOUNT(obj) == 0) {
zend_objects_store_del(obj);
- } else if (UNEXPECTED(!GC_INFO(obj))) {
+ } else if (UNEXPECTED(GC_MAY_LEAK((zend_refcounted*)obj))) {
gc_possible_root((zend_refcounted*)obj);
}
}
@@ -96,4 +94,6 @@ static zend_always_inline size_t zend_object_properties_size(zend_class_entry *c
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_opcode.c b/Zend/zend_opcode.c
index fe1d95737a..1566ee34cf 100644
--- a/Zend/zend_opcode.c
+++ b/Zend/zend_opcode.c
@@ -110,6 +110,23 @@ ZEND_API void destroy_zend_function(zend_function *function)
ZEND_ASSERT(function->type == ZEND_INTERNAL_FUNCTION);
ZEND_ASSERT(function->common.function_name);
zend_string_release(function->common.function_name);
+
+ if (function->common.arg_info &&
+ (function->common.fn_flags & (ZEND_ACC_HAS_RETURN_TYPE|ZEND_ACC_HAS_TYPE_HINTS))) {
+ uint32_t i;
+ uint32_t num_args = function->common.num_args + 1;
+ zend_arg_info *arg_info = function->common.arg_info - 1;
+
+ if (function->common.fn_flags & ZEND_ACC_VARIADIC) {
+ num_args++;
+ }
+ for (i = 0 ; i < num_args; i++) {
+ if (ZEND_TYPE_IS_CLASS(arg_info[i].type)) {
+ zend_string_release(ZEND_TYPE_NAME(arg_info[i].type));
+ }
+ }
+ free(arg_info);
+ }
}
}
@@ -125,47 +142,28 @@ ZEND_API void zend_function_dtor(zval *zv)
ZEND_ASSERT(function->type == ZEND_INTERNAL_FUNCTION);
ZEND_ASSERT(function->common.function_name);
zend_string_release(function->common.function_name);
- if (!(function->common.fn_flags & ZEND_ACC_ARENA_ALLOCATED)) {
- pefree(function, 1);
- }
- }
-}
+#ifndef ZTS
+ if ((function->common.fn_flags & (ZEND_ACC_HAS_RETURN_TYPE|ZEND_ACC_HAS_TYPE_HINTS)) &&
+ !function->common.scope && function->common.arg_info) {
-ZEND_API void zend_cleanup_op_array_data(zend_op_array *op_array)
-{
- if (op_array->static_variables &&
- !(GC_FLAGS(op_array->static_variables) & IS_ARRAY_IMMUTABLE)) {
- zend_hash_clean(op_array->static_variables);
- }
-}
+ uint32_t i;
+ uint32_t num_args = function->common.num_args + 1;
+ zend_arg_info *arg_info = function->common.arg_info - 1;
-ZEND_API void zend_cleanup_user_class_data(zend_class_entry *ce)
-{
- /* Clean all parts that can contain run-time data */
- /* Note that only run-time accessed data need to be cleaned up, pre-defined data can
- not contain objects and thus are not probelmatic */
- if (ce->ce_flags & ZEND_HAS_STATIC_IN_METHODS) {
- zend_function *func;
-
- ZEND_HASH_FOREACH_PTR(&ce->function_table, func) {
- if (func->type == ZEND_USER_FUNCTION) {
- zend_cleanup_op_array_data((zend_op_array *) func);
+ if (function->common.fn_flags & ZEND_ACC_VARIADIC) {
+ num_args++;
}
- } ZEND_HASH_FOREACH_END();
- }
- if (ce->static_members_table) {
- zval *static_members = ce->static_members_table;
- zval *p = static_members;
- zval *end = p + ce->default_static_members_count;
-
-
- ce->default_static_members_count = 0;
- ce->default_static_members_table = ce->static_members_table = NULL;
- while (p != end) {
- i_zval_ptr_dtor(p ZEND_FILE_LINE_CC);
- p++;
+ for (i = 0 ; i < num_args; i++) {
+ if (ZEND_TYPE_IS_CLASS(arg_info[i].type)) {
+ zend_string_release(ZEND_TYPE_NAME(arg_info[i].type));
+ }
+ }
+ free(arg_info);
+ }
+#endif
+ if (!(function->common.fn_flags & ZEND_ACC_ARENA_ALLOCATED)) {
+ pefree(function, 1);
}
- efree(static_members);
}
}
@@ -248,6 +246,9 @@ ZEND_API void destroy_zend_class(zval *zv)
{
zend_property_info *prop_info;
zend_class_entry *ce = Z_PTR_P(zv);
+#ifndef ZTS
+ zend_function *fn;
+#endif
if (--ce->refcount > 0) {
return;
@@ -331,6 +332,15 @@ ZEND_API void destroy_zend_class(zval *zv)
}
zend_hash_destroy(&ce->properties_info);
zend_string_release(ce->name);
+#ifndef ZTS
+ ZEND_HASH_FOREACH_PTR(&ce->function_table, fn) {
+ if ((fn->common.fn_flags & (ZEND_ACC_HAS_RETURN_TYPE|ZEND_ACC_HAS_TYPE_HINTS)) &&
+ fn->common.scope == ce) {
+ /* reset function scope to allow arg_info removing */
+ fn->common.scope = NULL;
+ }
+ } ZEND_HASH_FOREACH_END();
+#endif
zend_hash_destroy(&ce->function_table);
if (zend_hash_num_elements(&ce->constants_table)) {
zend_class_constant *c;
@@ -433,8 +443,8 @@ ZEND_API void destroy_op_array(zend_op_array *op_array)
if (arg_info[i].name) {
zend_string_release(arg_info[i].name);
}
- if (arg_info[i].class_name) {
- zend_string_release(arg_info[i].class_name);
+ if (ZEND_TYPE_IS_CLASS(arg_info[i].type)) {
+ zend_string_release(ZEND_TYPE_NAME(arg_info[i].type));
}
}
efree(arg_info);
@@ -646,6 +656,19 @@ ZEND_API int pass_two(zend_op_array *op_array)
opline->opcode = ZEND_GENERATOR_RETURN;
}
break;
+ case ZEND_SWITCH_LONG:
+ case ZEND_SWITCH_STRING:
+ {
+ /* absolute indexes to relative offsets */
+ HashTable *jumptable = Z_ARRVAL_P(CT_CONSTANT(opline->op2));
+ zval *zv;
+ ZEND_HASH_FOREACH_VAL(jumptable, zv) {
+ Z_LVAL_P(zv) = ZEND_OPLINE_NUM_TO_OFFSET(op_array, opline, Z_LVAL_P(zv));
+ } ZEND_HASH_FOREACH_END();
+
+ opline->extended_value = ZEND_OPLINE_NUM_TO_OFFSET(op_array, opline, opline->extended_value);
+ break;
+ }
}
if (opline->op1_type == IS_CONST) {
ZEND_PASS_TWO_UPDATE_CONSTANT(op_array, opline->op1);
@@ -703,6 +726,7 @@ ZEND_API binary_op_type get_binary_op(int opcode)
case ZEND_ASSIGN_MUL:
return (binary_op_type) mul_function;
case ZEND_POW:
+ case ZEND_ASSIGN_POW:
return (binary_op_type) pow_function;
case ZEND_DIV:
case ZEND_ASSIGN_DIV:
@@ -725,6 +749,7 @@ ZEND_API binary_op_type get_binary_op(int opcode)
case ZEND_IS_NOT_IDENTICAL:
return (binary_op_type) is_not_identical_function;
case ZEND_IS_EQUAL:
+ case ZEND_CASE:
return (binary_op_type) is_equal_function;
case ZEND_IS_NOT_EQUAL:
return (binary_op_type) is_not_equal_function;
@@ -756,4 +781,6 @@ ZEND_API binary_op_type get_binary_op(int opcode)
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c
index cafb14d4cc..3ee98e13e3 100644
--- a/Zend/zend_operators.c
+++ b/Zend/zend_operators.c
@@ -217,6 +217,9 @@ ZEND_API void ZEND_FASTCALL convert_scalar_to_number(zval *op) /* {{{ */
ZVAL_COPY(&(holder), op); \
convert_to_long_base(&(holder), 10); \
if (UNEXPECTED(EG(exception))) { \
+ if (result != op1) { \
+ ZVAL_UNDEF(result); \
+ } \
return FAILURE; \
} \
if (Z_TYPE(holder) == IS_LONG) { \
@@ -254,7 +257,7 @@ ZEND_API void ZEND_FASTCALL convert_scalar_to_number(zval *op) /* {{{ */
/* }}} */
-#define convert_op1_op2_long(op1, op1_lval, op2, op2_lval, op, op_func) \
+#define convert_op1_op2_long(op1, op1_lval, op2, op2_lval, result, op, op_func) \
do { \
if (UNEXPECTED(Z_TYPE_P(op1) != IS_LONG)) { \
if (Z_ISREF_P(op1)) { \
@@ -267,6 +270,9 @@ ZEND_API void ZEND_FASTCALL convert_scalar_to_number(zval *op) /* {{{ */
ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(op, op_func); \
op1_lval = _zval_get_long_func_noisy(op1); \
if (UNEXPECTED(EG(exception))) { \
+ if (result != op1) { \
+ ZVAL_UNDEF(result); \
+ } \
return FAILURE; \
} \
} else { \
@@ -285,6 +291,9 @@ ZEND_API void ZEND_FASTCALL convert_scalar_to_number(zval *op) /* {{{ */
ZEND_TRY_BINARY_OP2_OBJECT_OPERATION(op); \
op2_lval = _zval_get_long_func_noisy(op2); \
if (UNEXPECTED(EG(exception))) { \
+ if (result != op1) { \
+ ZVAL_UNDEF(result); \
+ } \
return FAILURE; \
} \
} else { \
@@ -423,19 +432,6 @@ try_again:
ZEND_API void ZEND_FASTCALL convert_to_null(zval *op) /* {{{ */
{
- if (Z_TYPE_P(op) == IS_OBJECT) {
- if (Z_OBJ_HT_P(op)->cast_object) {
- zval org;
-
- ZVAL_COPY_VALUE(&org, op);
- if (Z_OBJ_HT_P(op)->cast_object(&org, op, IS_NULL) == SUCCESS) {
- zval_dtor(&org);
- return;
- }
- ZVAL_COPY_VALUE(op, &org);
- }
- }
-
zval_ptr_dtor(op);
ZVAL_NULL(op);
}
@@ -531,11 +527,7 @@ try_again:
break;
}
case IS_TRUE:
- if (CG(one_char_string)['1']) {
- ZVAL_INTERNED_STR(op, CG(one_char_string)['1']);
- } else {
- ZVAL_NEW_STR(op, zend_string_init("1", 1, 0));
- }
+ ZVAL_INTERNED_STR(op, ZSTR_CHAR('1'));
break;
case IS_STRING:
break;
@@ -547,7 +539,7 @@ try_again:
break;
}
case IS_LONG: {
- ZVAL_NEW_STR(op, zend_long_to_str(Z_LVAL_P(op)));
+ ZVAL_STR(op, zend_long_to_str(Z_LVAL_P(op)));
break;
}
case IS_DOUBLE: {
@@ -613,25 +605,17 @@ try_again:
if (obj_ht) {
zend_array *arr;
+ /* fast copy */
if (!Z_OBJCE_P(op)->default_properties_count &&
obj_ht == Z_OBJ_P(op)->properties &&
- !ZEND_HASH_GET_APPLY_COUNT(Z_OBJ_P(op)->properties)) {
- /* fast copy */
- if (EXPECTED(Z_OBJ_P(op)->handlers == &std_object_handlers)) {
- arr = obj_ht;
- if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(op)->properties) & IS_ARRAY_IMMUTABLE))) {
- GC_REFCOUNT(Z_OBJ_P(op)->properties)++;
- }
- } else {
- arr = zend_array_dup(obj_ht);
- }
- zval_dtor(op);
- ZVAL_ARR(op, arr);
+ !ZEND_HASH_GET_APPLY_COUNT(Z_OBJ_P(op)->properties) &&
+ EXPECTED(Z_OBJ_P(op)->handlers == &std_object_handlers)) {
+ arr = zend_proptable_to_symtable(obj_ht, 0);
} else {
- arr = zend_array_dup(obj_ht);
- zval_dtor(op);
- ZVAL_ARR(op, arr);
+ arr = zend_proptable_to_symtable(obj_ht, 1);
}
+ zval_dtor(op);
+ ZVAL_ARR(op, arr);
return;
}
} else {
@@ -670,10 +654,12 @@ try_again:
case IS_ARRAY:
{
HashTable *ht = Z_ARR_P(op);
- if (Z_IMMUTABLE_P(op)) {
+ ht = zend_symtable_to_proptable(ht);
+ if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
/* TODO: try not to duplicate immutable arrays as well ??? */
ht = zend_array_dup(ht);
}
+ zval_dtor(op);
object_and_properties_init(op, zend_standard_class_def, ht);
break;
}
@@ -689,7 +675,7 @@ try_again:
zval tmp;
ZVAL_COPY_VALUE(&tmp, op);
object_init(op);
- zend_hash_add_new(Z_OBJPROP_P(op), CG(known_strings)[ZEND_STR_SCALAR], &tmp);
+ zend_hash_add_new(Z_OBJPROP_P(op), ZSTR_KNOWN(ZEND_STR_SCALAR), &tmp);
break;
}
}
@@ -862,11 +848,7 @@ try_again:
case IS_FALSE:
return ZSTR_EMPTY_ALLOC();
case IS_TRUE:
- if (CG(one_char_string)['1']) {
- return CG(one_char_string)['1'];
- } else {
- return zend_string_init("1", 1, 0);
- }
+ return ZSTR_CHAR('1');
case IS_RESOURCE: {
char buf[sizeof("Resource id #") + MAX_LENGTH_OF_LONG];
int len;
@@ -962,6 +944,9 @@ ZEND_API int ZEND_FASTCALL add_function(zval *result, zval *op1, zval *op2) /* {
}
converted = 1;
} else {
+ if (result != op1) {
+ ZVAL_UNDEF(result);
+ }
zend_throw_error(NULL, "Unsupported operand types");
return FAILURE; /* unknown datatype */
}
@@ -1009,6 +994,9 @@ ZEND_API int ZEND_FASTCALL sub_function(zval *result, zval *op1, zval *op2) /* {
}
converted = 1;
} else {
+ if (result != op1) {
+ ZVAL_UNDEF(result);
+ }
zend_throw_error(NULL, "Unsupported operand types");
return FAILURE; /* unknown datatype */
}
@@ -1061,6 +1049,9 @@ ZEND_API int ZEND_FASTCALL mul_function(zval *result, zval *op1, zval *op2) /* {
}
converted = 1;
} else {
+ if (result != op1) {
+ ZVAL_UNDEF(result);
+ }
zend_throw_error(NULL, "Unsupported operand types");
return FAILURE; /* unknown datatype */
}
@@ -1159,6 +1150,9 @@ ZEND_API int ZEND_FASTCALL pow_function(zval *result, zval *op1, zval *op2) /* {
}
converted = 1;
} else {
+ if (result != op1) {
+ ZVAL_UNDEF(result);
+ }
zend_throw_error(NULL, "Unsupported operand types");
return FAILURE;
}
@@ -1229,6 +1223,9 @@ ZEND_API int ZEND_FASTCALL div_function(zval *result, zval *op1, zval *op2) /* {
}
converted = 1;
} else {
+ if (result != op1) {
+ ZVAL_UNDEF(result);
+ }
zend_throw_error(NULL, "Unsupported operand types");
return FAILURE; /* unknown datatype */
}
@@ -1241,7 +1238,7 @@ ZEND_API int ZEND_FASTCALL mod_function(zval *result, zval *op1, zval *op2) /* {
{
zend_long op1_lval, op2_lval;
- convert_op1_op2_long(op1, op1_lval, op2, op2_lval, ZEND_MOD, mod_function);
+ convert_op1_op2_long(op1, op1_lval, op2, op2_lval, result, ZEND_MOD, mod_function);
if (op2_lval == 0) {
/* modulus by zero */
@@ -1361,11 +1358,7 @@ try_again:
if (Z_STRLEN_P(op1) == 1) {
zend_uchar not = (zend_uchar) ~*Z_STRVAL_P(op1);
- if (CG(one_char_string)[not]) {
- ZVAL_INTERNED_STR(result, CG(one_char_string)[not]);
- } else {
- ZVAL_NEW_STR(result, zend_string_init((char *) &not, 1, 0));
- }
+ ZVAL_INTERNED_STR(result, ZSTR_CHAR(not));
} else {
ZVAL_NEW_STR(result, zend_string_alloc(Z_STRLEN_P(op1), 0));
for (i = 0; i < Z_STRLEN_P(op1); i++) {
@@ -1381,6 +1374,9 @@ try_again:
default:
ZEND_TRY_UNARY_OBJECT_OPERATION(ZEND_BW_NOT);
+ if (result != op1) {
+ ZVAL_UNDEF(result);
+ }
zend_throw_error(NULL, "Unsupported operand types");
return FAILURE;
}
@@ -1410,11 +1406,7 @@ ZEND_API int ZEND_FASTCALL bitwise_or_function(zval *result, zval *op1, zval *op
if (result==op1) {
zend_string_release(Z_STR_P(result));
}
- if (CG(one_char_string)[or]) {
- ZVAL_INTERNED_STR(result, CG(one_char_string)[or]);
- } else {
- ZVAL_NEW_STR(result, zend_string_init((char *) &or, 1, 0));
- }
+ ZVAL_INTERNED_STR(result, ZSTR_CHAR(or));
return SUCCESS;
}
longer = op1;
@@ -1440,6 +1432,9 @@ ZEND_API int ZEND_FASTCALL bitwise_or_function(zval *result, zval *op1, zval *op
ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(ZEND_BW_OR, bitwise_or_function);
op1_lval = _zval_get_long_func_noisy(op1);
if (UNEXPECTED(EG(exception))) {
+ if (result != op1) {
+ ZVAL_UNDEF(result);
+ }
return FAILURE;
}
} else {
@@ -1449,6 +1444,9 @@ ZEND_API int ZEND_FASTCALL bitwise_or_function(zval *result, zval *op1, zval *op
ZEND_TRY_BINARY_OP2_OBJECT_OPERATION(ZEND_BW_OR);
op2_lval = _zval_get_long_func_noisy(op2);
if (UNEXPECTED(EG(exception))) {
+ if (result != op1) {
+ ZVAL_UNDEF(result);
+ }
return FAILURE;
}
} else {
@@ -1486,11 +1484,7 @@ ZEND_API int ZEND_FASTCALL bitwise_and_function(zval *result, zval *op1, zval *o
if (result==op1) {
zend_string_release(Z_STR_P(result));
}
- if (CG(one_char_string)[and]) {
- ZVAL_INTERNED_STR(result, CG(one_char_string)[and]);
- } else {
- ZVAL_NEW_STR(result, zend_string_init((char *) &and, 1, 0));
- }
+ ZVAL_INTERNED_STR(result, ZSTR_CHAR(and));
return SUCCESS;
}
longer = op1;
@@ -1516,6 +1510,9 @@ ZEND_API int ZEND_FASTCALL bitwise_and_function(zval *result, zval *op1, zval *o
ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(ZEND_BW_AND, bitwise_and_function);
op1_lval = _zval_get_long_func_noisy(op1);
if (UNEXPECTED(EG(exception))) {
+ if (result != op1) {
+ ZVAL_UNDEF(result);
+ }
return FAILURE;
}
} else {
@@ -1525,6 +1522,9 @@ ZEND_API int ZEND_FASTCALL bitwise_and_function(zval *result, zval *op1, zval *o
ZEND_TRY_BINARY_OP2_OBJECT_OPERATION(ZEND_BW_AND);
op2_lval = _zval_get_long_func_noisy(op2);
if (UNEXPECTED(EG(exception))) {
+ if (result != op1) {
+ ZVAL_UNDEF(result);
+ }
return FAILURE;
}
} else {
@@ -1562,11 +1562,7 @@ ZEND_API int ZEND_FASTCALL bitwise_xor_function(zval *result, zval *op1, zval *o
if (result==op1) {
zend_string_release(Z_STR_P(result));
}
- if (CG(one_char_string)[xor]) {
- ZVAL_INTERNED_STR(result, CG(one_char_string)[xor]);
- } else {
- ZVAL_NEW_STR(result, zend_string_init((char *) &xor, 1, 0));
- }
+ ZVAL_INTERNED_STR(result, ZSTR_CHAR(xor));
return SUCCESS;
}
longer = op1;
@@ -1592,6 +1588,9 @@ ZEND_API int ZEND_FASTCALL bitwise_xor_function(zval *result, zval *op1, zval *o
ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(ZEND_BW_XOR, bitwise_xor_function);
op1_lval = _zval_get_long_func_noisy(op1);
if (UNEXPECTED(EG(exception))) {
+ if (result != op1) {
+ ZVAL_UNDEF(result);
+ }
return FAILURE;
}
} else {
@@ -1601,6 +1600,9 @@ ZEND_API int ZEND_FASTCALL bitwise_xor_function(zval *result, zval *op1, zval *o
ZEND_TRY_BINARY_OP2_OBJECT_OPERATION(ZEND_BW_XOR);
op2_lval = _zval_get_long_func_noisy(op2);
if (UNEXPECTED(EG(exception))) {
+ if (result != op1) {
+ ZVAL_UNDEF(result);
+ }
return FAILURE;
}
} else {
@@ -1619,7 +1621,7 @@ ZEND_API int ZEND_FASTCALL shift_left_function(zval *result, zval *op1, zval *op
{
zend_long op1_lval, op2_lval;
- convert_op1_op2_long(op1, op1_lval, op2, op2_lval, ZEND_SL, shift_left_function);
+ convert_op1_op2_long(op1, op1_lval, op2, op2_lval, result, ZEND_SL, shift_left_function);
/* prevent wrapping quirkiness on some processors where << 64 + x == << x */
if (UNEXPECTED((zend_ulong)op2_lval >= SIZEOF_ZEND_LONG * 8)) {
@@ -1655,7 +1657,7 @@ ZEND_API int ZEND_FASTCALL shift_right_function(zval *result, zval *op1, zval *o
{
zend_long op1_lval, op2_lval;
- convert_op1_op2_long(op1, op1_lval, op2, op2_lval, ZEND_SR, shift_right_function);
+ convert_op1_op2_long(op1, op1_lval, op2, op2_lval, result, ZEND_SR, shift_right_function);
/* prevent wrapping quirkiness on some processors where >> 64 + x == >> x */
if (UNEXPECTED((zend_ulong)op2_lval >= SIZEOF_ZEND_LONG * 8)) {
@@ -1704,6 +1706,9 @@ ZEND_API int ZEND_FASTCALL concat_function(zval *result, zval *op1, zval *op2) /
if (use_copy1) {
if (UNEXPECTED(EG(exception))) {
zval_dtor(&op1_copy);
+ if (orig_op1 != result) {
+ ZVAL_UNDEF(result);
+ }
return FAILURE;
}
if (result == op1) {
@@ -1729,6 +1734,9 @@ ZEND_API int ZEND_FASTCALL concat_function(zval *result, zval *op1, zval *op2) /
zval_dtor(op1);
}
zval_dtor(&op2_copy);
+ if (orig_op1 != result) {
+ ZVAL_UNDEF(result);
+ }
return FAILURE;
}
op2 = &op2_copy;
@@ -2267,12 +2275,7 @@ static void ZEND_FASTCALL increment_string(zval *str) /* {{{ */
if (Z_STRLEN_P(str) == 0) {
zend_string_release(Z_STR_P(str));
- if (CG(one_char_string)['1']) {
- ZVAL_INTERNED_STR(str, CG(one_char_string)['1']);
- } else {
- Z_STR_P(str) = zend_string_init("1", sizeof("1")-1, 0);
- Z_TYPE_INFO_P(str) = IS_STRING_EX;
- }
+ ZVAL_INTERNED_STR(str, ZSTR_CHAR('1'));
return;
}
@@ -2855,9 +2858,13 @@ ZEND_API void ZEND_FASTCALL zend_locale_sprintf_double(zval *op ZEND_FILE_LINE_D
ZEND_API zend_string* ZEND_FASTCALL zend_long_to_str(zend_long num) /* {{{ */
{
- char buf[MAX_LENGTH_OF_LONG + 1];
- char *res = zend_print_long_to_buf(buf + sizeof(buf) - 1, num);
- return zend_string_init(res, buf + sizeof(buf) - 1 - res, 0);
+ if ((zend_ulong)num <= 9) {
+ return ZSTR_CHAR((zend_uchar)'0' + (zend_uchar)num);
+ } else {
+ char buf[MAX_LENGTH_OF_LONG + 1];
+ char *res = zend_print_long_to_buf(buf + sizeof(buf) - 1, num);
+ return zend_string_init(res, buf + sizeof(buf) - 1 - res, 0);
+ }
}
/* }}} */
@@ -3128,4 +3135,6 @@ ZEND_API zend_long ZEND_FASTCALL zend_dval_to_lval_slow(double d)
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_operators.h b/Zend/zend_operators.h
index 9fc0a8a01d..b7d9800abb 100644
--- a/Zend/zend_operators.h
+++ b/Zend/zend_operators.h
@@ -35,13 +35,10 @@
#include <ieeefp.h>
#endif
+#include "zend_portability.h"
#include "zend_strtod.h"
#include "zend_multiply.h"
-#if 0&&HAVE_BCMATH
-#include "ext/bcmath/libbcmath/src/bcmath.h"
-#endif
-
#define LONG_SIGN_MASK (((zend_long)1) << (8*sizeof(zend_long)-1))
BEGIN_EXTERN_C()
@@ -444,7 +441,23 @@ ZEND_API void zend_update_current_locale(void);
static zend_always_inline void fast_long_increment_function(zval *op1)
{
-#if defined(__GNUC__) && defined(__i386__)
+#if PHP_HAVE_BUILTIN_SADDL_OVERFLOW && SIZEOF_LONG == SIZEOF_ZEND_LONG
+ long lresult;
+ if (UNEXPECTED(__builtin_saddl_overflow(Z_LVAL_P(op1), 1, &lresult))) {
+ /* switch to double */
+ ZVAL_DOUBLE(op1, (double)ZEND_LONG_MAX + 1.0);
+ } else {
+ Z_LVAL_P(op1) = lresult;
+ }
+#elif PHP_HAVE_BUILTIN_SADDLL_OVERFLOW && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG
+ long long llresult;
+ if (UNEXPECTED(__builtin_saddll_overflow(Z_LVAL_P(op1), 1, &llresult))) {
+ /* switch to double */
+ ZVAL_DOUBLE(op1, (double)ZEND_LONG_MAX + 1.0);
+ } else {
+ Z_LVAL_P(op1) = llresult;
+ }
+#elif defined(__GNUC__) && defined(__i386__)
__asm__(
"incl (%0)\n\t"
"jno 0f\n\t"
@@ -482,7 +495,23 @@ static zend_always_inline void fast_long_increment_function(zval *op1)
static zend_always_inline void fast_long_decrement_function(zval *op1)
{
-#if defined(__GNUC__) && defined(__i386__)
+#if PHP_HAVE_BUILTIN_SSUBL_OVERFLOW && SIZEOF_LONG == SIZEOF_ZEND_LONG
+ long lresult;
+ if (UNEXPECTED(__builtin_ssubl_overflow(Z_LVAL_P(op1), 1, &lresult))) {
+ /* switch to double */
+ ZVAL_DOUBLE(op1, (double)ZEND_LONG_MIN - 1.0);
+ } else {
+ Z_LVAL_P(op1) = lresult;
+ }
+#elif PHP_HAVE_BUILTIN_SSUBLL_OVERFLOW && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG
+ long long llresult;
+ if (UNEXPECTED(__builtin_ssubll_overflow(Z_LVAL_P(op1), 1, &llresult))) {
+ /* switch to double */
+ ZVAL_DOUBLE(op1, (double)ZEND_LONG_MIN - 1.0);
+ } else {
+ Z_LVAL_P(op1) = llresult;
+ }
+#elif defined(__GNUC__) && defined(__i386__)
__asm__(
"decl (%0)\n\t"
"jno 0f\n\t"
@@ -520,7 +549,21 @@ static zend_always_inline void fast_long_decrement_function(zval *op1)
static zend_always_inline void fast_long_add_function(zval *result, zval *op1, zval *op2)
{
-#if defined(__GNUC__) && defined(__i386__) \
+#if PHP_HAVE_BUILTIN_SADDL_OVERFLOW && SIZEOF_LONG == SIZEOF_ZEND_LONG
+ long lresult;
+ if (UNEXPECTED(__builtin_saddl_overflow(Z_LVAL_P(op1), Z_LVAL_P(op2), &lresult))) {
+ ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) + (double) Z_LVAL_P(op2));
+ } else {
+ ZVAL_LONG(result, lresult);
+ }
+#elif PHP_HAVE_BUILTIN_SADDLL_OVERFLOW && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG
+ long long llresult;
+ if (UNEXPECTED(__builtin_saddll_overflow(Z_LVAL_P(op1), Z_LVAL_P(op2), &llresult))) {
+ ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) + (double) Z_LVAL_P(op2));
+ } else {
+ ZVAL_LONG(result, llresult);
+ }
+#elif defined(__GNUC__) && defined(__i386__) \
&& !(4 == __GNUC__ && 8 == __GNUC_MINOR__) \
&& !(4 == __GNUC__ && 9 == __GNUC_MINOR__ && (defined(__PIC__) || defined(__PIE__)))
/* Position-independent builds fail with gcc-4.9.x */
@@ -609,7 +652,21 @@ static zend_always_inline int fast_add_function(zval *result, zval *op1, zval *o
static zend_always_inline void fast_long_sub_function(zval *result, zval *op1, zval *op2)
{
-#if defined(__GNUC__) && defined(__i386__) && \
+#if PHP_HAVE_BUILTIN_SSUBL_OVERFLOW && SIZEOF_LONG == SIZEOF_ZEND_LONG
+ long lresult;
+ if (UNEXPECTED(__builtin_ssubl_overflow(Z_LVAL_P(op1), Z_LVAL_P(op2), &lresult))) {
+ ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) - (double) Z_LVAL_P(op2));
+ } else {
+ ZVAL_LONG(result, lresult);
+ }
+#elif PHP_HAVE_BUILTIN_SSUBLL_OVERFLOW && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG
+ long long llresult;
+ if (UNEXPECTED(__builtin_ssubll_overflow(Z_LVAL_P(op1), Z_LVAL_P(op2), &llresult))) {
+ ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) - (double) Z_LVAL_P(op2));
+ } else {
+ ZVAL_LONG(result, llresult);
+ }
+#elif defined(__GNUC__) && defined(__i386__) && \
!(4 == __GNUC__ && 8 == __GNUC_MINOR__) && \
!(4 == __GNUC__ && 9 == __GNUC_MINOR__ && (defined(__PIC__) || defined(__PIE__)))
/* Position-independent builds fail with gcc-4.9.x */
@@ -849,4 +906,6 @@ END_EXTERN_C()
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_portability.h b/Zend/zend_portability.h
index 6ffe56d2c9..79632f656b 100644
--- a/Zend/zend_portability.h
+++ b/Zend/zend_portability.h
@@ -38,9 +38,6 @@
#ifdef ZEND_WIN32
# include "zend_config.w32.h"
# define ZEND_PATHS_SEPARATOR ';'
-#elif defined(NETWARE)
-# include <zend_config.h>
-# define ZEND_PATHS_SEPARATOR ';'
#elif defined(__riscos__)
# include <zend_config.h>
# define ZEND_PATHS_SEPARATOR ';'
@@ -53,6 +50,7 @@
#include <stdio.h>
#include <assert.h>
+#include <math.h>
#ifdef HAVE_UNIX_H
# include <unix.h>
@@ -347,7 +345,7 @@ char *alloca();
#endif
-#if (HAVE_ALLOCA || (defined (__GNUC__) && __GNUC__ >= 2)) && !(defined(ZTS) && defined(NETWARE)) && !(defined(ZTS) && defined(HPUX)) && !defined(DARWIN)
+#if (HAVE_ALLOCA || (defined (__GNUC__) && __GNUC__ >= 2)) && !(defined(ZTS)) && !(defined(ZTS) && defined(HPUX)) && !defined(DARWIN)
# define ZEND_ALLOCA_MAX_SIZE (32 * 1024)
# define ALLOCA_FLAG(name) \
zend_bool name;
@@ -377,9 +375,9 @@ char *alloca();
#endif
#if ZEND_DEBUG
-# define ZEND_FILE_LINE_D const char *__zend_filename, const uint __zend_lineno
+# define ZEND_FILE_LINE_D const char *__zend_filename, const uint32_t __zend_lineno
# define ZEND_FILE_LINE_DC , ZEND_FILE_LINE_D
-# define ZEND_FILE_LINE_ORIG_D const char *__zend_orig_filename, const uint __zend_orig_lineno
+# define ZEND_FILE_LINE_ORIG_D const char *__zend_orig_filename, const uint32_t __zend_orig_lineno
# define ZEND_FILE_LINE_ORIG_DC , ZEND_FILE_LINE_ORIG_D
# define ZEND_FILE_LINE_RELAY_C __zend_filename, __zend_lineno
# define ZEND_FILE_LINE_RELAY_CC , ZEND_FILE_LINE_RELAY_C
@@ -430,6 +428,51 @@ char *alloca();
#undef MAX
#define MAX(a, b) (((a)>(b))?(a):(b))
#define MIN(a, b) (((a)<(b))?(a):(b))
+
+/* We always define a function, even if there's a macro or expression we could
+ * alias, so that using it in contexts where we can't make function calls
+ * won't fail to compile on some machines and not others.
+ */
+static zend_always_inline double _zend_get_inf(void) /* {{{ */
+{
+#ifdef INFINITY
+ return INFINITY;
+#elif HAVE_HUGE_VAL_INF
+ return HUGE_VAL;
+#elif defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || defined(__alpha)
+# define _zend_DOUBLE_INFINITY_HIGH 0x7ff00000
+ double val = 0.0;
+ ((uint32_t*)&val)[1] = _zend_DOUBLE_INFINITY_HIGH;
+ ((uint32_t*)&val)[0] = 0;
+ return val;
+#elif HAVE_ATOF_ACCEPTS_INF
+ return atof("INF");
+#else
+ return 1.0/0.0;
+#endif
+} /* }}} */
+#define ZEND_INFINITY (_zend_get_inf())
+
+static zend_always_inline double _zend_get_nan(void) /* {{{ */
+{
+#ifdef NAN
+ return NAN;
+#elif HAVE_HUGE_VAL_NAN
+ return HUGE_VAL + -HUGE_VAL;
+#elif defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || defined(__alpha)
+# define _zend_DOUBLE_QUIET_NAN_HIGH 0xfff80000
+ double val = 0.0;
+ ((uint32_t*)&val)[1] = _zend_DOUBLE_QUIET_NAN_HIGH;
+ ((uint32_t*)&val)[0] = 0;
+ return val;
+#elif HAVE_ATOF_ACCEPTS_NAN
+ return atof("NAN");
+#else
+ return 0.0/0.0;
+#endif
+} /* }}} */
+#define ZEND_NAN (_zend_get_nan())
+
#define ZEND_STRL(str) (str), (sizeof(str)-1)
#define ZEND_STRS(str) (str), (sizeof(str))
#define ZEND_NORMALIZE_BOOL(n) \
@@ -437,7 +480,7 @@ char *alloca();
#define ZEND_TRUTH(x) ((x) ? 1 : 0)
#define ZEND_LOG_XOR(a, b) (ZEND_TRUTH(a) ^ ZEND_TRUTH(b))
-#define ZEND_MAX_RESERVED_RESOURCES 4
+#define ZEND_MAX_RESERVED_RESOURCES 6
/* excpt.h on Digital Unix 4.0 defines function_table */
#undef function_table
@@ -445,7 +488,7 @@ char *alloca();
#ifdef ZEND_WIN32
#define ZEND_SECURE_ZERO(var, size) RtlSecureZeroMemory((var), (size))
#else
-#define ZEND_SECURE_ZERO(var, size) memset((var), 0, (size))
+#define ZEND_SECURE_ZERO(var, size) explicit_bzero((var), (size))
#endif
/* This check should only be used on network socket, not file descriptors */
@@ -455,6 +498,18 @@ char *alloca();
#define ZEND_VALID_SOCKET(sock) ((sock) >= 0)
#endif
+/* va_copy() is __va_copy() in old gcc versions.
+ * According to the autoconf manual, using
+ * memcpy(&dst, &src, sizeof(va_list))
+ * gives maximum portability. */
+#ifndef va_copy
+# ifdef __va_copy
+# define va_copy(dest, src) __va_copy((dest), (src))
+# else
+# define va_copy(dest, src) memcpy(&(dest), &(src), sizeof(va_list))
+# endif
+#endif
+
#endif /* ZEND_PORTABILITY_H */
/*
@@ -463,4 +518,6 @@ char *alloca();
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_ptr_stack.c b/Zend/zend_ptr_stack.c
index 993962a814..97643dc47d 100644
--- a/Zend/zend_ptr_stack.c
+++ b/Zend/zend_ptr_stack.c
@@ -116,4 +116,6 @@ ZEND_API int zend_ptr_stack_num_elements(zend_ptr_stack *stack)
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_ptr_stack.h b/Zend/zend_ptr_stack.h
index 35b590d1d7..80aa8bb252 100644
--- a/Zend/zend_ptr_stack.h
+++ b/Zend/zend_ptr_stack.h
@@ -124,4 +124,6 @@ static zend_always_inline void *zend_ptr_stack_top(zend_ptr_stack *stack)
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_range_check.h b/Zend/zend_range_check.h
index 7fa93988fe..2b1a256e2f 100644
--- a/Zend/zend_range_check.h
+++ b/Zend/zend_range_check.h
@@ -72,4 +72,6 @@
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_signal.c b/Zend/zend_signal.c
index a48cf318df..646cc50f81 100644
--- a/Zend/zend_signal.c
+++ b/Zend/zend_signal.c
@@ -443,6 +443,6 @@ void zend_signal_startup(void)
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_signal.h b/Zend/zend_signal.h
index e8ee7d6db0..45d51060e3 100644
--- a/Zend/zend_signal.h
+++ b/Zend/zend_signal.h
@@ -119,4 +119,6 @@ ZEND_API int zend_sigaction(int signo, const struct sigaction *act, struct sigac
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_smart_str.c b/Zend/zend_smart_str.c
index 563912c8fd..e9d43854b3 100644
--- a/Zend/zend_smart_str.c
+++ b/Zend/zend_smart_str.c
@@ -117,3 +117,20 @@ ZEND_API void ZEND_FASTCALL smart_str_append_escaped(smart_str *str, const char
}
}
}
+
+ZEND_API void ZEND_FASTCALL smart_str_append_printf(smart_str *dest, const char *format, ...) {
+ va_list arg;
+ va_start(arg, format);
+ zend_printf_to_smart_str(dest, format, arg);
+ va_end(arg);
+}
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
+ */
diff --git a/Zend/zend_smart_str.h b/Zend/zend_smart_str.h
index 203760ae5d..411371ab10 100644
--- a/Zend/zend_smart_str.h
+++ b/Zend/zend_smart_str.h
@@ -20,6 +20,7 @@
#define ZEND_SMART_STR_H
#include <zend.h>
+#include "zend_globals.h"
#include "zend_smart_str_public.h"
#define smart_str_appends_ex(dest, src, what) \
@@ -46,6 +47,8 @@ BEGIN_EXTERN_C()
ZEND_API void ZEND_FASTCALL smart_str_erealloc(smart_str *str, size_t len);
ZEND_API void ZEND_FASTCALL smart_str_realloc(smart_str *str, size_t len);
ZEND_API void ZEND_FASTCALL smart_str_append_escaped(smart_str *str, const char *s, size_t l);
+ZEND_API void ZEND_FASTCALL smart_str_append_printf(smart_str *dest, const char *format, ...)
+ ZEND_ATTRIBUTE_FORMAT(printf, 2, 3);
END_EXTERN_C()
@@ -80,6 +83,22 @@ static zend_always_inline void smart_str_0(smart_str *str) {
}
}
+static zend_always_inline size_t smart_str_get_len(smart_str *str) {
+ return str->s ? ZSTR_LEN(str->s) : 0;
+}
+
+static zend_always_inline zend_string *smart_str_extract(smart_str *str) {
+ if (str->s) {
+ zend_string *res;
+ smart_str_0(str);
+ res = str->s;
+ str->s = NULL;
+ return res;
+ } else {
+ return ZSTR_EMPTY_ALLOC();
+ }
+}
+
static zend_always_inline void smart_str_appendc_ex(smart_str *dest, char ch, zend_bool persistent) {
size_t new_len = smart_str_alloc(dest, 1, persistent);
ZSTR_VAL(dest->s)[new_len - 1] = ch;
@@ -121,3 +140,12 @@ static zend_always_inline void smart_str_setl(smart_str *dest, const char *src,
#endif
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
+ */
diff --git a/Zend/zend_smart_str_public.h b/Zend/zend_smart_str_public.h
index 9c39108565..7fa47c7ca8 100644
--- a/Zend/zend_smart_str_public.h
+++ b/Zend/zend_smart_str_public.h
@@ -25,3 +25,13 @@ typedef struct {
} smart_str;
#endif
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
+ */
diff --git a/Zend/zend_smart_string.h b/Zend/zend_smart_string.h
new file mode 100644
index 0000000000..0ad7c18a51
--- /dev/null
+++ b/Zend/zend_smart_string.h
@@ -0,0 +1,149 @@
+/*
+ +----------------------------------------------------------------------+
+ | PHP Version 7 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997-2018 The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 3.01 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | http://www.php.net/license/3_01.txt |
+ | If you did not receive a copy of the PHP license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@php.net so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Author: Sascha Schumann <sascha@schumann.cx> |
+ | Xinchen Hui <laruence@php.net> |
+ +----------------------------------------------------------------------+
+ */
+
+/* $Id$ */
+
+#ifndef PHP_SMART_STRING_H
+#define PHP_SMART_STRING_H
+
+#include "zend_smart_string_public.h"
+
+#include <stdlib.h>
+#ifndef SMART_STR_USE_REALLOC
+#include <zend.h>
+#endif
+
+#ifndef SMART_STRING_PREALLOC
+#define SMART_STRING_PREALLOC 128
+#endif
+
+#ifndef SMART_STRING_START_SIZE
+#define SMART_STRING_START_SIZE 78
+#endif
+
+#ifdef SMART_STRING_USE_REALLOC
+#define SMART_STRING_REALLOC(a,b,c) realloc((a),(b))
+#else
+#define SMART_STRING_REALLOC(a,b,c) perealloc((a),(b),(c))
+#endif
+
+#define SMART_STRING_DO_REALLOC(d, what) \
+ (d)->c = (char *) SMART_STRING_REALLOC((d)->c, (d)->a + 1, (what))
+
+/* wrapper */
+
+#define smart_string_appends_ex(str, src, what) \
+ smart_string_appendl_ex((str), (src), strlen(src), (what))
+#define smart_string_appends(str, src) \
+ smart_string_appendl((str), (src), strlen(src))
+#define smart_string_append_ex(str, src, what) \
+ smart_string_appendl_ex((str), ((smart_string *)(src))->c, \
+ ((smart_string *)(src))->len, (what));
+#define smart_string_sets(str, src) \
+ smart_string_setl((str), (src), strlen(src));
+
+#define smart_string_appendc(str, c) \
+ smart_string_appendc_ex((str), (c), 0)
+#define smart_string_free(s) \
+ smart_string_free_ex((s), 0)
+#define smart_string_appendl(str, src, len) \
+ smart_string_appendl_ex((str), (src), (len), 0)
+#define smart_string_append(str, src) \
+ smart_string_append_ex((str), (src), 0)
+#define smart_string_append_long(str, val) \
+ smart_string_append_long_ex((str), (val), 0)
+#define smart_string_append_unsigned(str, val) \
+ smart_string_append_unsigned_ex((str), (val), 0)
+
+static zend_always_inline size_t smart_string_alloc(smart_string *str, size_t len, zend_bool persistent) {
+ if (!str->c) {
+ str->len = 0;
+ str->a = len < SMART_STRING_START_SIZE
+ ? SMART_STRING_START_SIZE
+ : len + SMART_STRING_PREALLOC;
+ SMART_STRING_DO_REALLOC(str, persistent);
+ return len;
+ } else {
+ if (UNEXPECTED((size_t) len > SIZE_MAX - str->len)) {
+ zend_error(E_ERROR, "String size overflow");
+ }
+ len += str->len;
+ if (UNEXPECTED(len >= str->a)) {
+ str->a = len + SMART_STRING_PREALLOC;
+ SMART_STRING_DO_REALLOC(str, persistent);
+ }
+ }
+ return len;
+}
+
+static zend_always_inline void smart_string_free_ex(smart_string *str, zend_bool persistent) {
+ if (str->c) {
+ pefree(str->c, persistent);
+ str->c = NULL;
+ }
+ str->a = str->len = 0;
+}
+
+static zend_always_inline void smart_string_0(smart_string *str) {
+ if (str->c) {
+ str->c[str->len] = '\0';
+ }
+}
+
+static zend_always_inline void smart_string_appendc_ex(smart_string *dest, char ch, zend_bool persistent) {
+ dest->len = smart_string_alloc(dest, 1, persistent);
+ dest->c[dest->len - 1] = ch;
+}
+
+static zend_always_inline void smart_string_appendl_ex(smart_string *dest, const char *str, size_t len, zend_bool persistent) {
+ size_t new_len = smart_string_alloc(dest, len, persistent);
+ memcpy(dest->c + dest->len, str, len);
+ dest->len = new_len;
+
+}
+
+static zend_always_inline void smart_string_append_long_ex(smart_string *dest, zend_long num, zend_bool persistent) {
+ char buf[32];
+ char *result = zend_print_long_to_buf(buf + sizeof(buf) - 1, num);
+ smart_string_appendl_ex(dest, result, buf + sizeof(buf) - 1 - result, persistent);
+}
+
+static zend_always_inline void smart_string_append_unsigned_ex(smart_string *dest, zend_ulong num, zend_bool persistent) {
+ char buf[32];
+ char *result = zend_print_ulong_to_buf(buf + sizeof(buf) - 1, num);
+ smart_string_appendl_ex(dest, result, buf + sizeof(buf) - 1 - result, persistent);
+}
+
+static zend_always_inline void smart_string_setl(smart_string *dest, char *src, size_t len) {
+ dest->len = len;
+ dest->a = len + 1;
+ dest->c = src;
+}
+
+#endif
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
+ */
diff --git a/Zend/zend_smart_string_public.h b/Zend/zend_smart_string_public.h
new file mode 100644
index 0000000000..8a0d81837f
--- /dev/null
+++ b/Zend/zend_smart_string_public.h
@@ -0,0 +1,43 @@
+/*
+ +----------------------------------------------------------------------+
+ | PHP Version 7 |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1997-2018 The PHP Group |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 3.01 of the PHP license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | http://www.php.net/license/3_01.txt |
+ | If you did not receive a copy of the PHP license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@php.net so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Author: Sascha Schumann <sascha@schumann.cx> |
+ | Xinchen Hui <laruence@php.net> |
+ +----------------------------------------------------------------------+
+ */
+
+/* $Id$ */
+
+#ifndef PHP_SMART_STRING_PUBLIC_H
+#define PHP_SMART_STRING_PUBLIC_H
+
+#include <sys/types.h>
+
+typedef struct {
+ char *c;
+ size_t len;
+ size_t a;
+} smart_string;
+
+#endif
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
+ */
diff --git a/Zend/zend_sort.c b/Zend/zend_sort.c
index 8105d9ec25..16295febbd 100644
--- a/Zend/zend_sort.c
+++ b/Zend/zend_sort.c
@@ -380,6 +380,6 @@ done:
* c-basic-offset: 4
* tab-width: 4
* End:
- * vim600: fdm=marker
- * vim: noet sw=4 ts=4
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_sort.h b/Zend/zend_sort.h
index 002d27880b..58d906321c 100644
--- a/Zend/zend_sort.h
+++ b/Zend/zend_sort.h
@@ -36,4 +36,6 @@ END_EXTERN_C()
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_sprintf.c b/Zend/zend_sprintf.c
index c9b14a682b..bfb90da687 100644
--- a/Zend/zend_sprintf.c
+++ b/Zend/zend_sprintf.c
@@ -47,4 +47,6 @@ int zend_sprintf(char *buffer, const char *format, ...)
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_stack.c b/Zend/zend_stack.c
index 6d65638e8c..77df7e4423 100644
--- a/Zend/zend_stack.c
+++ b/Zend/zend_stack.c
@@ -171,4 +171,6 @@ ZEND_API void zend_stack_clean(zend_stack *stack, void (*func)(void *), zend_boo
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_stack.h b/Zend/zend_stack.h
index 5f394aad5c..371a068bba 100644
--- a/Zend/zend_stack.h
+++ b/Zend/zend_stack.h
@@ -56,4 +56,6 @@ END_EXTERN_C()
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_stream.c b/Zend/zend_stream.c
index fa152436cd..e14dc68edd 100644
--- a/Zend/zend_stream.c
+++ b/Zend/zend_stream.c
@@ -156,16 +156,7 @@ static size_t zend_stream_read(zend_file_handle *file_handle, char *buf, size_t
int c = '*';
size_t n;
-#ifdef NETWARE
- /*
- c != 4 check is there as fread of a character in NetWare LibC gives 4 upon ^D character.
- Ascii value 4 is actually EOT character which is not defined anywhere in the LibC
- or else we can use instead of hardcoded 4.
- */
- for (n = 0; n < len && (c = zend_stream_getc(file_handle)) != EOF && c != 4 && c != '\n'; ++n) {
-#else
for (n = 0; n < len && (c = zend_stream_getc(file_handle)) != EOF && c != '\n'; ++n) {
-#endif
buf[n] = (char)c;
}
if (c == '\n') {
@@ -354,3 +345,13 @@ ZEND_API int zend_compare_file_handles(zend_file_handle *fh1, zend_file_handle *
}
return 0;
} /* }}} */
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
+ */
diff --git a/Zend/zend_stream.h b/Zend/zend_stream.h
index 8f4fa2e128..109d7a1263 100644
--- a/Zend/zend_stream.h
+++ b/Zend/zend_stream.h
@@ -98,3 +98,13 @@ typedef struct stat zend_stat_t;
#endif
#endif
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
+ */
diff --git a/Zend/zend_string.c b/Zend/zend_string.c
index 1e18ab40e8..e4edc92e47 100644
--- a/Zend/zend_string.c
+++ b/Zend/zend_string.c
@@ -22,48 +22,33 @@
#include "zend_globals.h"
ZEND_API zend_string *(*zend_new_interned_string)(zend_string *str);
-ZEND_API void (*zend_interned_strings_snapshot)(void);
-ZEND_API void (*zend_interned_strings_restore)(void);
-static zend_string *zend_new_interned_string_int(zend_string *str);
-static void zend_interned_strings_snapshot_int(void);
-static void zend_interned_strings_restore_int(void);
+static zend_string *zend_new_interned_string_permanent(zend_string *str);
+static zend_string *zend_new_interned_string_request(zend_string *str);
+
+/* Any strings interned in the startup phase. Common to all the threads,
+ won't be free'd until process exit. If we want an ability to
+ add permanent strings even after startup, it would be still
+ possible on costs of locking in the thread safe builds. */
+static HashTable interned_strings_permanent;
+
+static zend_new_interned_string_func_t interned_string_request_handler = zend_new_interned_string_request;
+static zend_string_copy_storage_func_t interned_string_copy_storage = NULL;
+
+ZEND_API zend_string *zend_empty_string = NULL;
+ZEND_API zend_string *zend_one_char_string[256];
+ZEND_API zend_string **zend_known_strings = NULL;
ZEND_API zend_ulong zend_hash_func(const char *str, size_t len)
{
return zend_inline_hash_func(str, len);
}
-#ifndef ZTS
static void _str_dtor(zval *zv)
{
zend_string *str = Z_STR_P(zv);
pefree(str, GC_FLAGS(str) & IS_STR_PERSISTENT);
}
-#endif
-
-/* Readonly, so assigned also per thread. */
-static const zend_string **known_interned_strings = NULL;
-static uint32_t known_interned_strings_count = 0;
-
-ZEND_API uint32_t zend_intern_known_strings(const char **strings, uint32_t count)
-{
- uint32_t i, old_count = known_interned_strings_count;
-
- known_interned_strings = perealloc(known_interned_strings, sizeof(char*) * (old_count + count), 1);
- for (i = 0; i < count; i++) {
-#ifndef ZTS
- zend_string *str = zend_string_init(strings[i], strlen(strings[i]), 1);
- known_interned_strings[known_interned_strings_count + i] =
- zend_new_interned_string_int(str);
-#else
- known_interned_strings[known_interned_strings_count + i] =
- zend_zts_interned_string_init(strings[i], strlen(strings[i]));
-#endif
- }
- known_interned_strings_count = old_count + count;
- return old_count;
-}
static const char *known_strings[] = {
#define _ZEND_STR_DSC(id, str) str,
@@ -72,175 +57,170 @@ ZEND_KNOWN_STRINGS(_ZEND_STR_DSC)
NULL
};
-void zend_known_interned_strings_init(zend_string ***strings, uint32_t *count)
+static void zend_init_interned_strings_ht(HashTable *interned_strings, int permanent)
{
- *strings = (zend_string **)known_interned_strings;
- *count = known_interned_strings_count;
+ zend_hash_init(interned_strings, 1024, NULL, _str_dtor, permanent);
+ zend_hash_real_init(interned_strings, 0);
}
-void zend_interned_strings_init(void)
+ZEND_API void zend_interned_strings_init(void)
{
-#ifndef ZTS
+ char s[2];
+ int i;
zend_string *str;
- zend_hash_init(&CG(interned_strings), 1024, NULL, _str_dtor, 1);
+ interned_string_request_handler = zend_new_interned_string_request;
+ interned_string_copy_storage = NULL;
+
+ zend_empty_string = NULL;
+ zend_known_strings = NULL;
- CG(interned_strings).nTableMask = -CG(interned_strings).nTableSize;
- HT_SET_DATA_ADDR(&CG(interned_strings), pemalloc(HT_SIZE(&CG(interned_strings)), 1));
- HT_HASH_RESET(&CG(interned_strings));
- CG(interned_strings).u.flags |= HASH_FLAG_INITIALIZED;
+ zend_init_interned_strings_ht(&interned_strings_permanent, 1);
+
+ zend_new_interned_string = zend_new_interned_string_permanent;
/* interned empty string */
str = zend_string_alloc(sizeof("")-1, 1);
ZSTR_VAL(str)[0] = '\000';
- CG(empty_string) = zend_new_interned_string_int(str);
-#endif
+ zend_empty_string = zend_new_interned_string_permanent(str);
- /* one char strings (the actual interned strings are going to be created by ext/opcache) */
- memset(CG(one_char_string), 0, sizeof(CG(one_char_string)));
+ s[1] = 0;
+ for (i = 0; i < 256; i++) {
+ s[0] = i;
+ zend_one_char_string[i] = zend_new_interned_string_permanent(zend_string_init(s, 1, 1));
+ }
/* known strings */
- zend_intern_known_strings(known_strings, (sizeof(known_strings) / sizeof(known_strings[0])) - 1);
- zend_known_interned_strings_init(&CG(known_strings), &CG(known_strings_count));
-
- zend_new_interned_string = zend_new_interned_string_int;
- zend_interned_strings_snapshot = zend_interned_strings_snapshot_int;
- zend_interned_strings_restore = zend_interned_strings_restore_int;
+ zend_known_strings = pemalloc(sizeof(zend_string*) * ((sizeof(known_strings) / sizeof(known_strings[0]) - 1)), 1);
+ for (i = 0; i < (sizeof(known_strings) / sizeof(known_strings[0])) - 1; i++) {
+ str = zend_string_init(known_strings[i], strlen(known_strings[i]), 1);
+ zend_known_strings[i] = zend_new_interned_string_permanent(str);
+ }
}
-void zend_interned_strings_dtor(void)
+ZEND_API void zend_interned_strings_dtor(void)
{
-#ifndef ZTS
- zend_hash_destroy(&CG(interned_strings));
-#else
- uint32_t i;
+ zend_hash_destroy(&interned_strings_permanent);
- for (i = 0; i < CG(known_strings_count); i++) {
- zend_zts_interned_string_free(&CG(known_strings)[i]);
- }
-#endif
- free(CG(known_strings));
- CG(known_strings) = NULL;
- CG(known_strings_count) = 0;
- known_interned_strings = NULL;
- known_interned_strings_count = 0;
+ free(zend_known_strings);
+ zend_known_strings = NULL;
}
-static zend_string *zend_new_interned_string_int(zend_string *str)
+static zend_always_inline zend_string *zend_interned_string_ht_lookup(zend_string *str, HashTable *interned_strings)
{
-#ifndef ZTS
zend_ulong h;
- uint nIndex;
- uint idx;
+ uint32_t nIndex;
+ uint32_t idx;
Bucket *p;
- if (ZSTR_IS_INTERNED(str)) {
- return str;
- }
-
h = zend_string_hash_val(str);
- nIndex = h | CG(interned_strings).nTableMask;
- idx = HT_HASH(&CG(interned_strings), nIndex);
+ nIndex = h | interned_strings->nTableMask;
+ idx = HT_HASH(interned_strings, nIndex);
while (idx != HT_INVALID_IDX) {
- p = HT_HASH_TO_BUCKET(&CG(interned_strings), idx);
+ p = HT_HASH_TO_BUCKET(interned_strings, idx);
if ((p->h == h) && (ZSTR_LEN(p->key) == ZSTR_LEN(str))) {
if (!memcmp(ZSTR_VAL(p->key), ZSTR_VAL(str), ZSTR_LEN(str))) {
- zend_string_release(str);
return p->key;
}
}
idx = Z_NEXT(p->val);
}
+ return NULL;
+}
+
+/* This function might be not thread safe at least because it would update the
+ hash val in the passed string. Be sure it is called in the appropriate context. */
+static zend_always_inline zend_string *zend_add_interned_string(zend_string *str, HashTable *interned_strings, uint32_t flags)
+{
+ zval val;
+
GC_REFCOUNT(str) = 1;
- GC_FLAGS(str) |= IS_STR_INTERNED;
-
- if (CG(interned_strings).nNumUsed >= CG(interned_strings).nTableSize) {
- if (CG(interned_strings).nTableSize < HT_MAX_SIZE) { /* Let's double the table size */
- void *new_data;
- void *old_data = HT_GET_DATA_ADDR(&CG(interned_strings));
- Bucket *old_buckets = CG(interned_strings).arData;
-
- CG(interned_strings).nTableSize += CG(interned_strings).nTableSize;
- CG(interned_strings).nTableMask = -CG(interned_strings).nTableSize;
- new_data = malloc(HT_SIZE(&CG(interned_strings)));
-
- if (new_data) {
- HT_SET_DATA_ADDR(&CG(interned_strings), new_data);
- memcpy(CG(interned_strings).arData, old_buckets, sizeof(Bucket) * CG(interned_strings).nNumUsed);
- free(old_data);
- zend_hash_rehash(&CG(interned_strings));
- } else {
- CG(interned_strings).nTableSize = CG(interned_strings).nTableSize >> 1;
- CG(interned_strings).nTableMask = -CG(interned_strings).nTableSize;
- }
- }
- }
+ GC_FLAGS(str) |= IS_STR_INTERNED | flags;
- idx = CG(interned_strings).nNumUsed++;
- CG(interned_strings).nNumOfElements++;
- p = CG(interned_strings).arData + idx;
- p->h = h;
- p->key = str;
- Z_STR(p->val) = str;
- Z_TYPE_INFO(p->val) = IS_INTERNED_STRING_EX;
- nIndex = h | CG(interned_strings).nTableMask;
- Z_NEXT(p->val) = HT_HASH(&CG(interned_strings), nIndex);
- HT_HASH(&CG(interned_strings), nIndex) = HT_IDX_TO_HASH(idx);
+ ZVAL_INTERNED_STR(&val, str);
+
+ zend_hash_add_new(interned_strings, str, &val);
return str;
-#else
- return str;
-#endif
}
-static void zend_interned_strings_snapshot_int(void)
+ZEND_API zend_string *zend_interned_string_find_permanent(zend_string *str)
{
-#ifndef ZTS
- uint idx;
- Bucket *p;
+ return zend_interned_string_ht_lookup(str, &interned_strings_permanent);
+}
+
+
+static zend_string *zend_new_interned_string_permanent(zend_string *str)
+{
+ zend_string *ret;
- idx = CG(interned_strings).nNumUsed;
- while (idx > 0) {
- idx--;
- p = CG(interned_strings).arData + idx;
- ZEND_ASSERT(GC_FLAGS(p->key) & IS_STR_PERSISTENT);
- GC_FLAGS(p->key) |= IS_STR_PERMANENT;
+ if (ZSTR_IS_INTERNED(str)) {
+ return str;
+ }
+
+ ret = zend_interned_string_ht_lookup(str, &interned_strings_permanent);
+ if (ret) {
+ zend_string_release(str);
+ return ret;
}
-#endif
+
+ return zend_add_interned_string(str, &interned_strings_permanent, IS_STR_PERMANENT);
}
-static void zend_interned_strings_restore_int(void)
+static zend_string *zend_new_interned_string_request(zend_string *str)
{
-#ifndef ZTS
- uint nIndex;
- uint idx;
- Bucket *p;
+ zend_string *ret;
+
+ if (ZSTR_IS_INTERNED(str)) {
+ return str;
+ }
+
+ /* Check for permanent strings, the table is readonly at this point. */
+ ret = zend_interned_string_ht_lookup(str, &interned_strings_permanent);
+ if (ret) {
+ zend_string_release(str);
+ return ret;
+ }
+
+ ret = zend_interned_string_ht_lookup(str, &CG(interned_strings));
+ if (ret) {
+ zend_string_release(str);
+ return ret;
+ }
+
+ /* Create a short living interned, freed after the request. */
+ ret = zend_add_interned_string(str, &CG(interned_strings), 0);
+
+ return ret;
+}
+
+ZEND_API void zend_interned_strings_activate(void)
+{
+ zend_init_interned_strings_ht(&CG(interned_strings), 0);
+}
+
+ZEND_API void zend_interned_strings_deactivate(void)
+{
+ zend_hash_destroy(&CG(interned_strings));
+}
- idx = CG(interned_strings).nNumUsed;
- while (idx > 0) {
- idx--;
- p = CG(interned_strings).arData + idx;
- if (GC_FLAGS(p->key) & IS_STR_PERMANENT) break;
- CG(interned_strings).nNumUsed--;
- CG(interned_strings).nNumOfElements--;
-
- GC_FLAGS(p->key) &= ~IS_STR_INTERNED;
- GC_REFCOUNT(p->key) = 1;
- zend_string_free(p->key);
-
- nIndex = p->h | CG(interned_strings).nTableMask;
- if (HT_HASH(&CG(interned_strings), nIndex) == HT_IDX_TO_HASH(idx)) {
- HT_HASH(&CG(interned_strings), nIndex) = Z_NEXT(p->val);
- } else {
- uint32_t prev = HT_HASH(&CG(interned_strings), nIndex);
- while (Z_NEXT(HT_HASH_TO_BUCKET(&CG(interned_strings), prev)->val) != idx) {
- prev = Z_NEXT(HT_HASH_TO_BUCKET(&CG(interned_strings), prev)->val);
- }
- Z_NEXT(HT_HASH_TO_BUCKET(&CG(interned_strings), prev)->val) = Z_NEXT(p->val);
- }
- }
-#endif
+ZEND_API void zend_interned_strings_set_request_storage_handler(zend_new_interned_string_func_t handler)
+{
+ interned_string_request_handler = handler;
+}
+
+ZEND_API void zend_interned_strings_set_permanent_storage_copy_handler(zend_string_copy_storage_func_t handler)
+{
+ interned_string_copy_storage = handler;
+}
+
+ZEND_API void zend_interned_strings_switch_storage(void)
+{
+ if (interned_string_copy_storage) {
+ interned_string_copy_storage();
+ }
+ zend_new_interned_string = interned_string_request_handler;
}
/*
@@ -249,4 +229,6 @@ static void zend_interned_strings_restore_int(void)
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_string.h b/Zend/zend_string.h
index dbc3f3be78..784b88ea6a 100644
--- a/Zend/zend_string.h
+++ b/Zend/zend_string.h
@@ -25,14 +25,24 @@
BEGIN_EXTERN_C()
-ZEND_API extern zend_string *(*zend_new_interned_string)(zend_string *str);
-ZEND_API extern void (*zend_interned_strings_snapshot)(void);
-ZEND_API extern void (*zend_interned_strings_restore)(void);
+typedef void (*zend_string_copy_storage_func_t)(void);
+typedef zend_string *(*zend_new_interned_string_func_t)(zend_string *str);
+
+ZEND_API extern zend_new_interned_string_func_t zend_new_interned_string;
ZEND_API zend_ulong zend_hash_func(const char *str, size_t len);
-void zend_interned_strings_init(void);
-void zend_interned_strings_dtor(void);
-void zend_known_interned_strings_init(zend_string ***, uint32_t *);
+ZEND_API void zend_interned_strings_init(void);
+ZEND_API void zend_interned_strings_dtor(void);
+ZEND_API void zend_interned_strings_activate(void);
+ZEND_API void zend_interned_strings_deactivate(void);
+ZEND_API zend_string *zend_interned_string_find_permanent(zend_string *str);
+ZEND_API void zend_interned_strings_set_request_storage_handler(zend_new_interned_string_func_t handler);
+ZEND_API void zend_interned_strings_set_permanent_storage_copy_handler(zend_string_copy_storage_func_t handler);
+ZEND_API void zend_interned_strings_switch_storage(void);
+
+ZEND_API extern zend_string *zend_empty_string;
+ZEND_API extern zend_string *zend_one_char_string[256];
+ZEND_API extern zend_string **zend_known_strings;
END_EXTERN_C()
@@ -56,7 +66,9 @@ END_EXTERN_C()
#define ZSTR_IS_INTERNED(s) (GC_FLAGS(s) & IS_STR_INTERNED)
-#define ZSTR_EMPTY_ALLOC() CG(empty_string)
+#define ZSTR_EMPTY_ALLOC() zend_empty_string
+#define ZSTR_CHAR(c) zend_one_char_string[c]
+#define ZSTR_KNOWN(idx) zend_known_strings[idx]
#define _ZSTR_HEADER_SIZE XtOffsetOf(zend_string, val)
@@ -162,6 +174,13 @@ static zend_always_inline zend_string *zend_string_init(const char *str, size_t
return ret;
}
+static zend_always_inline zend_string *zend_string_init_interned(const char *str, size_t len, int persistent)
+{
+ zend_string *ret = zend_string_init(str, len, persistent);
+
+ return zend_new_interned_string(ret);
+}
+
static zend_always_inline zend_string *zend_string_copy(zend_string *s)
{
if (!ZSTR_IS_INTERNED(s)) {
@@ -359,27 +378,6 @@ EMPTY_SWITCH_DEFAULT_CASE()
#endif
}
-#ifdef ZTS
-static zend_always_inline zend_string* zend_zts_interned_string_init(const char *val, size_t len)
-{
- zend_string *str;
-
- str = zend_string_init(val, len, 1);
-
- zend_string_hash_val(str);
- GC_FLAGS(str) |= IS_STR_INTERNED;
- return str;
-}
-
-static zend_always_inline void zend_zts_interned_string_free(zend_string **s)
-{
- if (NULL != *s) {
- free(*s);
- *s = NULL;
- }
-}
-#endif
-
#define ZEND_KNOWN_STRINGS(_) \
_(ZEND_STR_FILE, "file") \
_(ZEND_STR_LINE, "line") \
@@ -410,6 +408,21 @@ static zend_always_inline void zend_zts_interned_string_free(zend_string **s)
_(ZEND_STR_SEVERITY, "severity") \
_(ZEND_STR_STRING, "string") \
_(ZEND_STR_TRACE, "trace") \
+ _(ZEND_STR_SCHEME, "scheme") \
+ _(ZEND_STR_HOST, "host") \
+ _(ZEND_STR_PORT, "port") \
+ _(ZEND_STR_USER, "user") \
+ _(ZEND_STR_PASS, "pass") \
+ _(ZEND_STR_PATH, "path") \
+ _(ZEND_STR_QUERY, "query") \
+ _(ZEND_STR_FRAGMENT, "fragment") \
+ _(ZEND_STR_NULL, "NULL") \
+ _(ZEND_STR_BOOLEAN, "boolean") \
+ _(ZEND_STR_INTEGER, "integer") \
+ _(ZEND_STR_DOUBLE, "double") \
+ _(ZEND_STR_ARRAY, "array") \
+ _(ZEND_STR_RESOURCE, "resource") \
+ _(ZEND_STR_CLOSED_RESOURCE, "resource (closed)") \
typedef enum _zend_known_string_id {
@@ -419,8 +432,6 @@ ZEND_KNOWN_STRINGS(_ZEND_STR_ID)
ZEND_STR_LAST_KNOWN
} zend_known_string_id;
-ZEND_API uint32_t zend_intern_known_strings(const char **strings, uint32_t count);
-
#endif /* ZEND_STRING_H */
/*
@@ -429,4 +440,6 @@ ZEND_API uint32_t zend_intern_known_strings(const char **strings, uint32_t count
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_strtod.h b/Zend/zend_strtod.h
index 64e4e8eae3..3c5cc03cec 100644
--- a/Zend/zend_strtod.h
+++ b/Zend/zend_strtod.h
@@ -36,3 +36,13 @@ ZEND_API int zend_shutdown_strtod(void);
END_EXTERN_C()
#endif
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
+ */
diff --git a/Zend/zend_strtod_int.h b/Zend/zend_strtod_int.h
index 310023802a..ca4049ee33 100644
--- a/Zend/zend_strtod_int.h
+++ b/Zend/zend_strtod_int.h
@@ -146,3 +146,12 @@ typedef unsigned long int uint32_t;
#endif /* ZEND_STRTOD_INT_H */
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
+ */
diff --git a/Zend/zend_ts_hash.c b/Zend/zend_ts_hash.c
index afcc25f5b7..e0971d18d1 100644
--- a/Zend/zend_ts_hash.c
+++ b/Zend/zend_ts_hash.c
@@ -59,7 +59,7 @@ static void end_write(TsHashTable *ht)
}
/* delegates */
-ZEND_API void _zend_ts_hash_init(TsHashTable *ht, uint nSize, dtor_func_t pDestructor, zend_bool persistent ZEND_FILE_LINE_DC)
+ZEND_API void _zend_ts_hash_init(TsHashTable *ht, uint32_t nSize, dtor_func_t pDestructor, zend_bool persistent ZEND_FILE_LINE_DC)
{
#ifdef ZTS
ht->mx_reader = tsrm_mutex_alloc();
@@ -69,7 +69,7 @@ ZEND_API void _zend_ts_hash_init(TsHashTable *ht, uint nSize, dtor_func_t pDestr
_zend_hash_init(TS_HASH(ht), nSize, pDestructor, persistent ZEND_FILE_LINE_RELAY_CC);
}
-ZEND_API void _zend_ts_hash_init_ex(TsHashTable *ht, uint nSize, dtor_func_t pDestructor, zend_bool persistent, zend_bool bApplyProtection ZEND_FILE_LINE_DC)
+ZEND_API void _zend_ts_hash_init_ex(TsHashTable *ht, uint32_t nSize, dtor_func_t pDestructor, zend_bool persistent, zend_bool bApplyProtection ZEND_FILE_LINE_DC)
{
#ifdef ZTS
ht->mx_reader = tsrm_mutex_alloc();
diff --git a/Zend/zend_ts_hash.h b/Zend/zend_ts_hash.h
index 62235909a2..bf06e1c561 100644
--- a/Zend/zend_ts_hash.h
+++ b/Zend/zend_ts_hash.h
@@ -37,8 +37,8 @@ BEGIN_EXTERN_C()
#define TS_HASH(table) (&(table->hash))
/* startup/shutdown */
-ZEND_API void _zend_ts_hash_init(TsHashTable *ht, uint nSize, dtor_func_t pDestructor, zend_bool persistent ZEND_FILE_LINE_DC);
-ZEND_API void _zend_ts_hash_init_ex(TsHashTable *ht, uint nSize, dtor_func_t pDestructor, zend_bool persistent, zend_bool bApplyProtection ZEND_FILE_LINE_DC);
+ZEND_API void _zend_ts_hash_init(TsHashTable *ht, uint32_t nSize, dtor_func_t pDestructor, zend_bool persistent ZEND_FILE_LINE_DC);
+ZEND_API void _zend_ts_hash_init_ex(TsHashTable *ht, uint32_t nSize, dtor_func_t pDestructor, zend_bool persistent, zend_bool bApplyProtection ZEND_FILE_LINE_DC);
ZEND_API void zend_ts_hash_destroy(TsHashTable *ht);
ZEND_API void zend_ts_hash_clean(TsHashTable *ht);
@@ -153,4 +153,6 @@ END_EXTERN_C()
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_type_info.h b/Zend/zend_type_info.h
index b8ac39ec08..9bdbc98260 100644
--- a/Zend/zend_type_info.h
+++ b/Zend/zend_type_info.h
@@ -65,4 +65,6 @@
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_types.h b/Zend/zend_types.h
index f4c22ccdd5..fd4b71e9a8 100644
--- a/Zend/zend_types.h
+++ b/Zend/zend_types.h
@@ -98,6 +98,64 @@ typedef void (*sort_func_t)(void *, size_t, size_t, compare_func_t, swap_func_t)
typedef void (*dtor_func_t)(zval *pDest);
typedef void (*copy_ctor_func_t)(zval *pElement);
+/*
+ * zend_type - is an abstraction layer to represent information about type hint.
+ * It shouldn't be used directly. Only through ZEND_TYPE_* macros.
+ *
+ * ZEND_TYPE_IS_SET() - checks if type-hint exists
+ * ZEND_TYPE_IS_CODE() - checks if type-hint refer to standard type
+ * ZEND_TYPE_IS_CLASS() - checks if type-hint refer to some class
+ *
+ * ZEND_TYPE_NAME() - returns referenced class name
+ * ZEND_TYPE_CE() - returns referenced class entry
+ * ZEND_TYPE_CODE() - returns standard type code (e.g. IS_LONG, _IS_BOOL)
+ *
+ * ZEND_TYPE_ALLOW_NULL() - checks if NULL is allowed
+ *
+ * ZEND_TYPE_ENCODE() and ZEND_TYPE_ENCODE_CLASS() should be used for
+ * construction.
+ */
+
+typedef uintptr_t zend_type;
+
+#define ZEND_TYPE_IS_SET(t) \
+ ((t) > Z_L(1))
+
+#define ZEND_TYPE_IS_CODE(t) \
+ (((t) > Z_L(1)) && ((t) <= Z_L(0x1ff)))
+
+#define ZEND_TYPE_IS_CLASS(t) \
+ ((t) > Z_L(0x1ff))
+
+#define ZEND_TYPE_NAME(t) \
+ ((zend_string*)((t) & ~Z_L(0x3)))
+
+#define ZEND_TYPE_CE(t) \
+ ((zend_class_entry*)((t) & ~Z_L(0x3)))
+
+#define ZEND_TYPE_CODE(t) \
+ ((t) >> Z_L(1))
+
+#define ZEND_TYPE_ALLOW_NULL(t) \
+ (((t) & Z_L(0x1)) != 0)
+
+#define ZEND_TYPE_ENCODE(code, allow_null) \
+ (((code) << Z_L(1)) | ((allow_null) ? Z_L(0x1) : Z_L(0x0)))
+
+#define ZEND_TYPE_ENCODE_CLASS(class_name, allow_null) \
+ (((uintptr_t)(class_name)) | ((allow_null) ? Z_L(0x1) : Z_L(0)))
+
+#define ZEND_TYPE_ENCODE_CLASS_CONST_0(class_name) \
+ ((zend_type) class_name)
+#define ZEND_TYPE_ENCODE_CLASS_CONST_1(class_name) \
+ ((zend_type) "?" class_name)
+#define ZEND_TYPE_ENCODE_CLASS_CONST_Q2(macro, class_name) \
+ macro(class_name)
+#define ZEND_TYPE_ENCODE_CLASS_CONST_Q1(allow_null, class_name) \
+ ZEND_TYPE_ENCODE_CLASS_CONST_Q2(ZEND_TYPE_ENCODE_CLASS_CONST_ ##allow_null, class_name)
+#define ZEND_TYPE_ENCODE_CLASS_CONST(class_name, allow_null) \
+ ZEND_TYPE_ENCODE_CLASS_CONST_Q1(allow_null, class_name)
+
typedef union _zend_value {
zend_long lval; /* long value */
double dval; /* double value */
@@ -390,28 +448,35 @@ static zend_always_inline zend_uchar zval_get_type(const zval* pz) {
#define Z_GC_INFO(zval) GC_INFO(Z_COUNTED(zval))
#define Z_GC_INFO_P(zval_p) Z_GC_INFO(*(zval_p))
-
#define Z_GC_TYPE_INFO(zval) GC_TYPE_INFO(Z_COUNTED(zval))
#define Z_GC_TYPE_INFO_P(zval_p) Z_GC_TYPE_INFO(*(zval_p))
+#define GC_FLAGS_SHIFT 8
+#define GC_INFO_SHIFT 16
+#define GC_INFO_MASK 0xffff0000
+
+/* zval.value->gc.u.v.flags */
+#define GC_COLLECTABLE (1<<7)
+
+#define GC_ARRAY (IS_ARRAY | (GC_COLLECTABLE << GC_FLAGS_SHIFT))
+#define GC_OBJECT (IS_OBJECT | (GC_COLLECTABLE << GC_FLAGS_SHIFT))
+
/* zval.u1.v.type_flags */
#define IS_TYPE_CONSTANT (1<<0)
-#define IS_TYPE_IMMUTABLE (1<<1)
#define IS_TYPE_REFCOUNTED (1<<2)
-#define IS_TYPE_COLLECTABLE (1<<3)
#define IS_TYPE_COPYABLE (1<<4)
/* extended types */
#define IS_INTERNED_STRING_EX IS_STRING
-#define IS_STRING_EX (IS_STRING | (( IS_TYPE_REFCOUNTED | IS_TYPE_COPYABLE) << Z_TYPE_FLAGS_SHIFT))
-#define IS_ARRAY_EX (IS_ARRAY | (( IS_TYPE_REFCOUNTED | IS_TYPE_COLLECTABLE | IS_TYPE_COPYABLE) << Z_TYPE_FLAGS_SHIFT))
-#define IS_OBJECT_EX (IS_OBJECT | (( IS_TYPE_REFCOUNTED | IS_TYPE_COLLECTABLE ) << Z_TYPE_FLAGS_SHIFT))
-#define IS_RESOURCE_EX (IS_RESOURCE | (( IS_TYPE_REFCOUNTED ) << Z_TYPE_FLAGS_SHIFT))
-#define IS_REFERENCE_EX (IS_REFERENCE | (( IS_TYPE_REFCOUNTED ) << Z_TYPE_FLAGS_SHIFT))
+#define IS_STRING_EX (IS_STRING | (( IS_TYPE_REFCOUNTED | IS_TYPE_COPYABLE) << Z_TYPE_FLAGS_SHIFT))
+#define IS_ARRAY_EX (IS_ARRAY | (( IS_TYPE_REFCOUNTED | IS_TYPE_COPYABLE) << Z_TYPE_FLAGS_SHIFT))
+#define IS_OBJECT_EX (IS_OBJECT | (( IS_TYPE_REFCOUNTED ) << Z_TYPE_FLAGS_SHIFT))
+#define IS_RESOURCE_EX (IS_RESOURCE | (( IS_TYPE_REFCOUNTED ) << Z_TYPE_FLAGS_SHIFT))
+#define IS_REFERENCE_EX (IS_REFERENCE | (( IS_TYPE_REFCOUNTED ) << Z_TYPE_FLAGS_SHIFT))
-#define IS_CONSTANT_EX (IS_CONSTANT | ((IS_TYPE_CONSTANT | IS_TYPE_REFCOUNTED | IS_TYPE_COPYABLE) << Z_TYPE_FLAGS_SHIFT))
-#define IS_CONSTANT_AST_EX (IS_CONSTANT_AST | ((IS_TYPE_CONSTANT | IS_TYPE_REFCOUNTED | IS_TYPE_COPYABLE) << Z_TYPE_FLAGS_SHIFT))
+#define IS_CONSTANT_EX (IS_CONSTANT | ((IS_TYPE_CONSTANT | IS_TYPE_REFCOUNTED | IS_TYPE_COPYABLE) << Z_TYPE_FLAGS_SHIFT))
+#define IS_CONSTANT_AST_EX (IS_CONSTANT_AST | ((IS_TYPE_CONSTANT | IS_TYPE_REFCOUNTED | IS_TYPE_COPYABLE) << Z_TYPE_FLAGS_SHIFT))
/* zval.u1.v.const_flags */
#define IS_CONSTANT_UNQUALIFIED 0x010
@@ -432,7 +497,7 @@ static zend_always_inline zend_uchar zval_get_type(const zval* pz) {
#define IS_STR_CONSTANT_UNQUALIFIED (1<<4) /* the same as IS_CONSTANT_UNQUALIFIED */
/* array flags */
-#define IS_ARRAY_IMMUTABLE (1<<1) /* the same as IS_TYPE_IMMUTABLE */
+#define IS_ARRAY_IMMUTABLE (1<<1)
/* object flags (zval.value->gc.u.flags) */
#define IS_OBJ_APPLY_COUNT 0x07
@@ -467,14 +532,14 @@ static zend_always_inline zend_uchar zval_get_type(const zval* pz) {
#define Z_REFCOUNTED(zval) ((Z_TYPE_FLAGS(zval) & IS_TYPE_REFCOUNTED) != 0)
#define Z_REFCOUNTED_P(zval_p) Z_REFCOUNTED(*(zval_p))
-#define Z_COLLECTABLE(zval) ((Z_TYPE_FLAGS(zval) & IS_TYPE_COLLECTABLE) != 0)
-#define Z_COLLECTABLE_P(zval_p) Z_COLLECTABLE(*(zval_p))
-
#define Z_COPYABLE(zval) ((Z_TYPE_FLAGS(zval) & IS_TYPE_COPYABLE) != 0)
#define Z_COPYABLE_P(zval_p) Z_COPYABLE(*(zval_p))
-#define Z_IMMUTABLE(zval) ((Z_TYPE_FLAGS(zval) & IS_TYPE_IMMUTABLE) != 0)
+/* deprecated: (IMMUTABLE is the same as COPYABLE && !REFCOUED) */
+#define Z_IMMUTABLE(zval) ((Z_TYPE_FLAGS(zval) & (IS_TYPE_REFCOUNTED|IS_TYPE_COPYABLE)) == IS_TYPE_COPYABLE)
#define Z_IMMUTABLE_P(zval_p) Z_IMMUTABLE(*(zval_p))
+#define Z_OPT_IMMUTABLE(zval) Z_IMMUTABLE(zval_p)
+#define Z_OPT_IMMUTABLE_P(zval_p) Z_IMMUTABLE(*(zval_p))
/* the following Z_OPT_* macros make better code when Z_TYPE_INFO accessed before */
#define Z_OPT_TYPE(zval) (Z_TYPE_INFO(zval) & Z_TYPE_MASK)
@@ -486,15 +551,9 @@ static zend_always_inline zend_uchar zval_get_type(const zval* pz) {
#define Z_OPT_REFCOUNTED(zval) ((Z_TYPE_INFO(zval) & (IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT)) != 0)
#define Z_OPT_REFCOUNTED_P(zval_p) Z_OPT_REFCOUNTED(*(zval_p))
-#define Z_OPT_COLLECTABLE(zval) ((Z_TYPE_INFO(zval) & (IS_TYPE_COLLECTABLE << Z_TYPE_FLAGS_SHIFT)) != 0)
-#define Z_OPT_COLLECTABLE_P(zval_p) Z_OPT_COLLECTABLE(*(zval_p))
-
#define Z_OPT_COPYABLE(zval) ((Z_TYPE_INFO(zval) & (IS_TYPE_COPYABLE << Z_TYPE_FLAGS_SHIFT)) != 0)
#define Z_OPT_COPYABLE_P(zval_p) Z_OPT_COPYABLE(*(zval_p))
-#define Z_OPT_IMMUTABLE(zval) ((Z_TYPE_INFO(zval) & (IS_TYPE_IMMUTABLE << Z_TYPE_FLAGS_SHIFT)) != 0)
-#define Z_OPT_IMMUTABLE_P(zval_p) Z_OPT_IMMUTABLE(*(zval_p))
-
#define Z_OPT_ISREF(zval) (Z_OPT_TYPE(zval) == IS_REFERENCE)
#define Z_OPT_ISREF_P(zval_p) Z_OPT_ISREF(*(zval_p))
@@ -819,7 +878,7 @@ static zend_always_inline zend_uchar zval_get_type(const zval* pz) {
#define Z_TRY_DELREF(z) Z_TRY_DELREF_P(&(z))
static zend_always_inline uint32_t zval_refcount_p(zval* pz) {
- ZEND_ASSERT(Z_REFCOUNTED_P(pz) || Z_IMMUTABLE_P(pz));
+ ZEND_ASSERT(Z_REFCOUNTED_P(pz) || Z_COPYABLE_P(pz));
return GC_REFCOUNT(Z_COUNTED_P(pz));
}
@@ -884,8 +943,8 @@ static zend_always_inline uint32_t zval_delref_p(zval* pz) {
zend_refcounted *_gc = Z_COUNTED_P(_z2); \
uint32_t _t = Z_TYPE_INFO_P(_z2); \
ZVAL_COPY_VALUE_EX(_z1, _z2, _gc, _t); \
- if ((_t & ((IS_TYPE_REFCOUNTED|IS_TYPE_IMMUTABLE) << Z_TYPE_FLAGS_SHIFT)) != 0) { \
- if ((_t & ((IS_TYPE_COPYABLE|IS_TYPE_IMMUTABLE) << Z_TYPE_FLAGS_SHIFT)) != 0) { \
+ if ((_t & ((IS_TYPE_REFCOUNTED|IS_TYPE_COPYABLE) << Z_TYPE_FLAGS_SHIFT)) != 0) { \
+ if ((_t & (IS_TYPE_COPYABLE << Z_TYPE_FLAGS_SHIFT)) != 0) { \
_zval_copy_ctor_func(_z1 ZEND_FILE_LINE_CC); \
} else { \
GC_REFCOUNT(_gc)++; \
@@ -923,11 +982,11 @@ static zend_always_inline uint32_t zval_delref_p(zval* pz) {
#define ZVAL_COPY_UNREF(z, v) do { \
zval *_z3 = (v); \
- if (Z_REFCOUNTED_P(_z3)) { \
- if (UNEXPECTED(Z_ISREF_P(_z3)) \
+ if (Z_OPT_REFCOUNTED_P(_z3)) { \
+ if (UNEXPECTED(Z_OPT_ISREF_P(_z3)) \
&& UNEXPECTED(Z_REFCOUNT_P(_z3) == 1)) { \
ZVAL_UNREF(_z3); \
- if (Z_REFCOUNTED_P(_z3)) { \
+ if (Z_OPT_REFCOUNTED_P(_z3)) { \
Z_ADDREF_P(_z3); \
} \
} else { \
@@ -952,7 +1011,7 @@ static zend_always_inline uint32_t zval_delref_p(zval* pz) {
zval *_zv = (zv); \
zend_array *_arr = Z_ARR_P(_zv); \
if (UNEXPECTED(GC_REFCOUNT(_arr) > 1)) { \
- if (!Z_IMMUTABLE_P(_zv)) { \
+ if (Z_REFCOUNTED_P(_zv)) { \
GC_REFCOUNT(_arr)--; \
} \
ZVAL_ARR(_zv, zend_array_dup(_arr)); \
@@ -962,10 +1021,9 @@ static zend_always_inline uint32_t zval_delref_p(zval* pz) {
#define SEPARATE_ZVAL_NOREF(zv) do { \
zval *_zv = (zv); \
ZEND_ASSERT(Z_TYPE_P(_zv) != IS_REFERENCE); \
- if (Z_COPYABLE_P(_zv) || \
- Z_IMMUTABLE_P(_zv)) { \
+ if (Z_COPYABLE_P(_zv)) { \
if (Z_REFCOUNT_P(_zv) > 1) { \
- if (!Z_IMMUTABLE_P(_zv)) { \
+ if (Z_REFCOUNTED_P(_zv)) { \
Z_DELREF_P(_zv); \
} \
zval_copy_ctor_func(_zv); \
@@ -976,11 +1034,10 @@ static zend_always_inline uint32_t zval_delref_p(zval* pz) {
#define SEPARATE_ZVAL(zv) do { \
zval *_zv = (zv); \
if (Z_REFCOUNTED_P(_zv) || \
- Z_IMMUTABLE_P(_zv)) { \
+ Z_COPYABLE_P(_zv)) { \
if (Z_REFCOUNT_P(_zv) > 1) { \
- if (Z_COPYABLE_P(_zv) || \
- Z_IMMUTABLE_P(_zv)) { \
- if (!Z_IMMUTABLE_P(_zv)) { \
+ if (Z_COPYABLE_P(_zv)) { \
+ if (Z_REFCOUNTED_P(_zv)) { \
Z_DELREF_P(_zv); \
} \
zval_copy_ctor_func(_zv); \
@@ -994,10 +1051,9 @@ static zend_always_inline uint32_t zval_delref_p(zval* pz) {
#define SEPARATE_ZVAL_IF_NOT_REF(zv) do { \
zval *_zv = (zv); \
- if (Z_COPYABLE_P(_zv) || \
- Z_IMMUTABLE_P(_zv)) { \
+ if (Z_COPYABLE_P(_zv)) { \
if (Z_REFCOUNT_P(_zv) > 1) { \
- if (!Z_IMMUTABLE_P(_zv)) { \
+ if (Z_REFCOUNTED_P(_zv)) { \
Z_DELREF_P(_zv); \
} \
zval_copy_ctor_func(_zv); \
@@ -1020,4 +1076,6 @@ static zend_always_inline uint32_t zval_delref_p(zval* pz) {
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_variables.h b/Zend/zend_variables.h
index 0272389fcc..3cecb3a6b3 100644
--- a/Zend/zend_variables.h
+++ b/Zend/zend_variables.h
@@ -44,39 +44,18 @@ static zend_always_inline void _zval_ptr_dtor_nogc(zval *zval_ptr ZEND_FILE_LINE
static zend_always_inline void i_zval_ptr_dtor(zval *zval_ptr ZEND_FILE_LINE_DC)
{
if (Z_REFCOUNTED_P(zval_ptr)) {
- if (!Z_DELREF_P(zval_ptr)) {
- _zval_dtor_func(Z_COUNTED_P(zval_ptr) ZEND_FILE_LINE_RELAY_CC);
+ zend_refcounted *ref = Z_COUNTED_P(zval_ptr);
+ if (!--GC_REFCOUNT(ref)) {
+ _zval_dtor_func(ref ZEND_FILE_LINE_RELAY_CC);
} else {
- GC_ZVAL_CHECK_POSSIBLE_ROOT(zval_ptr);
+ gc_check_possible_root(ref);
}
}
}
static zend_always_inline void _zval_copy_ctor(zval *zvalue ZEND_FILE_LINE_DC)
{
- if (Z_REFCOUNTED_P(zvalue) || Z_IMMUTABLE_P(zvalue)) {
- if (Z_COPYABLE_P(zvalue) || Z_IMMUTABLE_P(zvalue)) {
- _zval_copy_ctor_func(zvalue ZEND_FILE_LINE_RELAY_CC);
- } else {
- Z_ADDREF_P(zvalue);
- }
- }
-}
-
-static zend_always_inline void _zval_opt_copy_ctor(zval *zvalue ZEND_FILE_LINE_DC)
-{
- if (Z_OPT_REFCOUNTED_P(zvalue) || Z_OPT_IMMUTABLE_P(zvalue)) {
- if (Z_OPT_COPYABLE_P(zvalue) || Z_OPT_IMMUTABLE_P(zvalue)) {
- _zval_copy_ctor_func(zvalue ZEND_FILE_LINE_RELAY_CC);
- } else {
- Z_ADDREF_P(zvalue);
- }
- }
-}
-
-static zend_always_inline void _zval_copy_ctor_no_imm(zval *zvalue ZEND_FILE_LINE_DC)
-{
- if (Z_REFCOUNTED_P(zvalue)) {
+ if (Z_REFCOUNTED_P(zvalue) || Z_COPYABLE_P(zvalue)) {
if (Z_COPYABLE_P(zvalue)) {
_zval_copy_ctor_func(zvalue ZEND_FILE_LINE_RELAY_CC);
} else {
@@ -85,9 +64,9 @@ static zend_always_inline void _zval_copy_ctor_no_imm(zval *zvalue ZEND_FILE_LIN
}
}
-static zend_always_inline void _zval_opt_copy_ctor_no_imm(zval *zvalue ZEND_FILE_LINE_DC)
+static zend_always_inline void _zval_opt_copy_ctor(zval *zvalue ZEND_FILE_LINE_DC)
{
- if (Z_OPT_REFCOUNTED_P(zvalue)) {
+ if (Z_OPT_REFCOUNTED_P(zvalue) || Z_OPT_COPYABLE_P(zvalue)) {
if (Z_OPT_COPYABLE_P(zvalue)) {
_zval_copy_ctor_func(zvalue ZEND_FILE_LINE_RELAY_CC);
} else {
@@ -104,8 +83,6 @@ ZEND_API void _zval_internal_ptr_dtor(zval *zvalue ZEND_FILE_LINE_DC);
ZEND_API void _zval_dtor_wrapper(zval *zvalue);
#define zval_copy_ctor(zvalue) _zval_copy_ctor((zvalue) ZEND_FILE_LINE_CC)
#define zval_opt_copy_ctor(zvalue) _zval_opt_copy_ctor((zvalue) ZEND_FILE_LINE_CC)
-#define zval_copy_ctor_no_imm(zvalue) _zval_copy_ctor_no_imm((zvalue) ZEND_FILE_LINE_CC)
-#define zval_opt_copy_ctor_no_imm(zvalue) _zval_opt_copy_ctor_no_imm((zvalue) ZEND_FILE_LINE_CC)
#define zval_dtor(zvalue) zval_ptr_dtor_nogc(zvalue)
#define zval_ptr_dtor(zval_ptr) _zval_ptr_dtor((zval_ptr) ZEND_FILE_LINE_CC)
#define zval_ptr_dtor_nogc(zval_ptr) _zval_ptr_dtor_nogc((zval_ptr) ZEND_FILE_LINE_CC)
@@ -144,4 +121,6 @@ END_EXTERN_C()
* c-basic-offset: 4
* indent-tabs-mode: t
* End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
*/
diff --git a/Zend/zend_virtual_cwd.c b/Zend/zend_virtual_cwd.c
index ae1a867460..f9395f32a4 100644
--- a/Zend/zend_virtual_cwd.c
+++ b/Zend/zend_virtual_cwd.c
@@ -32,7 +32,6 @@
#include "zend.h"
#include "zend_virtual_cwd.h"
-#include "tsrm_strtok_r.h"
#ifdef ZEND_WIN32
#include <io.h>
@@ -67,10 +66,6 @@
# endif
#endif
-#ifdef NETWARE
-#include <fsio.h>
-#endif
-
#ifndef HAVE_REALPATH
#define realpath(x,y) strcpy(y,x)
#endif
@@ -79,8 +74,8 @@
#include "TSRM.h"
-/* Only need mutex for popen() in Windows and NetWare because it doesn't chdir() on UNIX */
-#if (defined(ZEND_WIN32) || defined(NETWARE)) && defined(ZTS)
+/* Only need mutex for popen() in Windows because it doesn't chdir() on UNIX */
+#if defined(ZEND_WIN32) && defined(ZTS)
MUTEX_T cwd_mutex;
#endif
@@ -98,63 +93,14 @@ cwd_state main_cwd_state; /* True global */
#include <direct.h>
#endif
-#ifdef ZEND_WIN32
-#include <tchar.h>
-#define tsrm_strtok_r(a,b,c) _tcstok((a),(b))
-#define TOKENIZER_STRING "/\\"
-
-static int php_check_dots(const char *element, int n)
-{
- while (n-- > 0) if (element[n] != '.') break;
-
- return (n != -1);
-}
-
-#define IS_DIRECTORY_UP(element, len) \
- (len >= 2 && !php_check_dots(element, len))
-
-#define IS_DIRECTORY_CURRENT(element, len) \
- (len == 1 && element[0] == '.')
-
-#elif defined(NETWARE)
-/* NetWare has strtok() (in LibC) and allows both slashes in paths, like Windows --
- but rest of the stuff is like Unix */
-/* strtok() call in LibC is abending when used in a different address space -- hence using
- PHP's version itself for now */
-/*#define tsrm_strtok_r(a,b,c) strtok((a),(b))*/
-#define TOKENIZER_STRING "/\\"
-
-#else
-#define TOKENIZER_STRING "/"
-#endif
-
-/* default macros */
-
-#ifndef IS_DIRECTORY_UP
-#define IS_DIRECTORY_UP(element, len) \
- (len == 2 && element[0] == '.' && element[1] == '.')
-#endif
-
-#ifndef IS_DIRECTORY_CURRENT
-#define IS_DIRECTORY_CURRENT(element, len) \
- (len == 1 && element[0] == '.')
-#endif
-
-/* define this to check semantics */
-#define IS_DIR_OK(s) (1)
-
-#ifndef IS_DIR_OK
-#define IS_DIR_OK(state) (php_is_dir_ok(state) == 0)
-#endif
-
-
#define CWD_STATE_COPY(d, s) \
(d)->cwd_length = (s)->cwd_length; \
(d)->cwd = (char *) emalloc((s)->cwd_length+1); \
memcpy((d)->cwd, (s)->cwd, (s)->cwd_length+1);
#define CWD_STATE_FREE(s) \
- efree((s)->cwd);
+ efree((s)->cwd); \
+ (s)->cwd_length = 0;
#ifdef ZEND_WIN32
# define CWD_STATE_FREE_ERR(state) do { \
@@ -304,9 +250,9 @@ CWD_API int php_sys_stat_ex(const char *path, zend_stat_t *buf, int lstat) /* {{
{
WIN32_FILE_ATTRIBUTE_DATA data;
LARGE_INTEGER t;
- const size_t path_len = strlen(path);
- wchar_t *pathw = php_win32_ioutil_any_to_w(path);
+ size_t pathw_len = 0;
ALLOCA_FLAG(use_heap_large)
+ wchar_t *pathw = php_win32_ioutil_conv_any_to_w(path, PHP_WIN32_CP_IGNORE_LEN, &pathw_len);
if (!pathw) {
return -1;
@@ -324,13 +270,13 @@ CWD_API int php_sys_stat_ex(const char *path, zend_stat_t *buf, int lstat) /* {{
return ret;
}
- if (path_len >= 1 && path[1] == ':') {
- if (path[0] >= 'A' && path[0] <= 'Z') {
- buf->st_dev = buf->st_rdev = path[0] - 'A';
+ if (pathw_len >= 1 && pathw[1] == L':') {
+ if (pathw[0] >= L'A' && pathw[0] <= L'Z') {
+ buf->st_dev = buf->st_rdev = pathw[0] - L'A';
} else {
- buf->st_dev = buf->st_rdev = path[0] - 'a';
+ buf->st_dev = buf->st_rdev = pathw[0] - L'a';
}
- } else if (IS_UNC_PATH(path, path_len)) {
+ } else if (PHP_WIN32_IOUTIL_IS_UNC(pathw, pathw_len)) {
buf->st_dev = buf->st_rdev = 0;
} else {
wchar_t cur_path[MAXPATHLEN+1];
@@ -391,13 +337,11 @@ CWD_API int php_sys_stat_ex(const char *path, zend_stat_t *buf, int lstat) /* {{
}
if ((data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) {
- size_t len = strlen(path);
-
- if (len >= 4 && path[len-4] == '.') {
- if (_memicmp(path+len-3, "exe", 3) == 0 ||
- _memicmp(path+len-3, "com", 3) == 0 ||
- _memicmp(path+len-3, "bat", 3) == 0 ||
- _memicmp(path+len-3, "cmd", 3) == 0) {
+ if (pathw_len >= 4 && pathw[pathw_len-4] == L'.') {
+ if (_wcsnicmp(pathw+pathw_len-3, L"exe", 3) == 0 ||
+ _wcsnicmp(pathw+pathw_len-3, L"com", 3) == 0 ||
+ _wcsnicmp(pathw+pathw_len-3, L"bat", 3) == 0 ||
+ _wcsnicmp(pathw+pathw_len-3, L"cmd", 3) == 0) {
buf->st_mode |= (S_IEXEC|(S_IEXEC>>3)|(S_IEXEC>>6));
}
}
@@ -467,23 +411,13 @@ void virtual_cwd_main_cwd_init(uint8_t reinit) /* {{{ */
free(main_cwd_state.cwd);
}
-#ifdef NETWARE
- result = getcwdpath(cwd, NULL, 1);
- if(result)
- {
- char *c=cwd;
- while(c = strchr(c, '\\'))
- {
- *c='/';
- ++c;
- }
- }
-#elif defined(ZEND_WIN32)
+#ifdef ZEND_WIN32
ZeroMemory(&cwd, sizeof(cwd));
result = php_win32_ioutil_getcwd(cwd, sizeof(cwd));
#else
result = getcwd(cwd, sizeof(cwd));
#endif
+
if (!result) {
cwd[0] = '\0';
}
@@ -507,7 +441,7 @@ CWD_API void virtual_cwd_startup(void) /* {{{ */
cwd_globals_ctor(&cwd_globals);
#endif
-#if (defined(ZEND_WIN32) || defined(NETWARE)) && defined(ZTS)
+#if (defined(ZEND_WIN32)) && defined(ZTS)
cwd_mutex = tsrm_mutex_alloc();
#endif
}
@@ -518,7 +452,7 @@ CWD_API void virtual_cwd_shutdown(void) /* {{{ */
#ifndef ZTS
cwd_globals_dtor(&cwd_globals);
#endif
-#if (defined(ZEND_WIN32) || defined(NETWARE)) && defined(ZTS)
+#if (defined(ZEND_WIN32)) && defined(ZTS)
tsrm_mutex_free(cwd_mutex);
#endif
@@ -556,9 +490,6 @@ CWD_API char *virtual_getcwd_ex(size_t *length) /* {{{ */
*length = 1;
retval = (char *) emalloc(2);
- if (retval == NULL) {
- return NULL;
- }
retval[0] = DEFAULT_SLASH;
retval[1] = '\0';
return retval;
@@ -571,9 +502,6 @@ CWD_API char *virtual_getcwd_ex(size_t *length) /* {{{ */
*length = state->cwd_length+1;
retval = (char *) emalloc(*length+1);
- if (retval == NULL) {
- return NULL;
- }
memcpy(retval, state->cwd, *length);
retval[0] = toupper(retval[0]);
retval[*length-1] = DEFAULT_SLASH;
@@ -617,10 +545,11 @@ CWD_API char *virtual_getcwd(char *buf, size_t size) /* {{{ */
/* }}} */
#ifdef ZEND_WIN32
-static inline zend_ulong realpath_cache_key(const char *path, int path_len) /* {{{ */
+static inline zend_ulong realpath_cache_key(const char *path, size_t path_len) /* {{{ */
{
register zend_ulong h;
- char *bucket_key_start = tsrm_win32_get_path_sid_key(path);
+ size_t bucket_key_len;
+ char *bucket_key_start = tsrm_win32_get_path_sid_key(path, path_len, &bucket_key_len);
char *bucket_key = (char *)bucket_key_start;
const char *e;
@@ -628,17 +557,19 @@ static inline zend_ulong realpath_cache_key(const char *path, int path_len) /* {
return 0;
}
- e = bucket_key + strlen(bucket_key);
+ e = bucket_key + bucket_key_len;
for (h = Z_UL(2166136261); bucket_key < e;) {
h *= Z_UL(16777619);
h ^= *bucket_key++;
}
- HeapFree(GetProcessHeap(), 0, (LPVOID)bucket_key_start);
+ if (bucket_key_start != path) {
+ HeapFree(GetProcessHeap(), 0, (LPVOID)bucket_key_start);
+ }
return h;
}
/* }}} */
#else
-static inline zend_ulong realpath_cache_key(const char *path, int path_len) /* {{{ */
+static inline zend_ulong realpath_cache_key(const char *path, size_t path_len) /* {{{ */
{
register zend_ulong h;
const char *e = path + path_len;
@@ -670,7 +601,7 @@ CWD_API void realpath_cache_clean(void) /* {{{ */
}
/* }}} */
-CWD_API void realpath_cache_del(const char *path, int path_len) /* {{{ */
+CWD_API void realpath_cache_del(const char *path, size_t path_len) /* {{{ */
{
zend_ulong key = realpath_cache_key(path, path_len);
zend_ulong n = key % (sizeof(CWDG(realpath_cache)) / sizeof(CWDG(realpath_cache)[0]));
@@ -698,7 +629,7 @@ CWD_API void realpath_cache_del(const char *path, int path_len) /* {{{ */
}
/* }}} */
-static inline void realpath_cache_add(const char *path, int path_len, const char *realpath, int realpath_len, int is_dir, time_t t) /* {{{ */
+static inline void realpath_cache_add(const char *path, size_t path_len, const char *realpath, size_t realpath_len, int is_dir, time_t t) /* {{{ */
{
zend_long size = sizeof(realpath_cache_bucket) + path_len + 1;
int same = 1;
@@ -728,7 +659,7 @@ static inline void realpath_cache_add(const char *path, int path_len, const char
memcpy(bucket->realpath, realpath, realpath_len+1);
}
bucket->realpath_len = realpath_len;
- bucket->is_dir = is_dir;
+ bucket->is_dir = is_dir > 0;
#ifdef ZEND_WIN32
bucket->is_rvalid = 0;
bucket->is_readable = 0;
@@ -744,7 +675,7 @@ static inline void realpath_cache_add(const char *path, int path_len, const char
}
/* }}} */
-static inline realpath_cache_bucket* realpath_cache_find(const char *path, int path_len, time_t t) /* {{{ */
+static inline realpath_cache_bucket* realpath_cache_find(const char *path, size_t path_len, time_t t) /* {{{ */
{
zend_ulong key = realpath_cache_key(path, path_len);
zend_ulong n = key % (sizeof(CWDG(realpath_cache)) / sizeof(CWDG(realpath_cache)[0]));
@@ -773,7 +704,7 @@ static inline realpath_cache_bucket* realpath_cache_find(const char *path, int p
}
/* }}} */
-CWD_API realpath_cache_bucket* realpath_cache_lookup(const char *path, int path_len, time_t t) /* {{{ */
+CWD_API realpath_cache_bucket* realpath_cache_lookup(const char *path, size_t path_len, time_t t) /* {{{ */
{
return realpath_cache_find(path, path_len, t);
}
@@ -907,7 +838,7 @@ static int tsrm_realpath_r(char *path, int start, int len, int *ll, time_t *t, i
if (!pathw) {
return -1;
}
- hFind = FindFirstFileW(pathw, &dataw);
+ hFind = FindFirstFileExW(pathw, FindExInfoBasic, &dataw, FindExSearchNameMatch, NULL, 0);
if (INVALID_HANDLE_VALUE == hFind) {
if (use_realpath == CWD_REALPATH) {
/* file not found */
@@ -1153,11 +1084,6 @@ static int tsrm_realpath_r(char *path, int start, int len, int *ll, time_t *t, i
return -1;
}
}
-
-#elif defined(NETWARE)
- save = 0;
- tmp = do_alloca(len+1, use_heap);
- memcpy(tmp, path, len+1);
#else
if (save && php_sys_lstat(path, &st) < 0) {
if (use_realpath == CWD_REALPATH) {
@@ -1395,18 +1321,6 @@ CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func
resolved_path[2] = DEFAULT_SLASH;
start = 3;
}
-#elif defined(NETWARE)
- if (IS_ABSOLUTE_PATH(resolved_path, path_length)) {
- /* skip VOLUME name */
- start = 0;
- while (start != ':') {
- if (resolved_path[start] == 0) return -1;
- start++;
- }
- start++;
- if (!IS_SLASH(resolved_path[start])) return -1;
- resolved_path[start++] = DEFAULT_SLASH;
- }
#endif
add_slash = (use_realpath != CWD_REALPATH) && path_length > 0 && IS_SLASH(resolved_path[path_length-1]);
@@ -1439,13 +1353,6 @@ verify:
state->cwd_length = path_length;
tmp = erealloc(state->cwd, state->cwd_length+1);
- if (tmp == NULL) {
- CWD_STATE_FREE(&old_state);
-#if VIRTUAL_CWD_DEBUG
- fprintf (stderr, "Out of memory\n");
-#endif
- return 1;
- }
state->cwd = (char *) tmp;
memcpy(state->cwd, resolved_path, state->cwd_length+1);
@@ -1460,12 +1367,6 @@ verify:
} else {
state->cwd_length = path_length;
tmp = erealloc(state->cwd, state->cwd_length+1);
- if (tmp == NULL) {
-#if VIRTUAL_CWD_DEBUG
- fprintf (stderr, "Out of memory\n");
-#endif
- return 1;
- }
state->cwd = (char *) tmp;
memcpy(state->cwd, resolved_path, state->cwd_length+1);
@@ -1528,10 +1429,6 @@ CWD_API char *virtual_realpath(const char *path, char *real_path) /* {{{ */
/* realpath("") returns CWD */
if (!*path) {
new_state.cwd = (char*)emalloc(1);
- if (new_state.cwd == NULL) {
- retval = NULL;
- goto end;
- }
new_state.cwd[0] = '\0';
new_state.cwd_length = 0;
if (VCWD_GETCWD(cwd, MAXPATHLEN)) {
@@ -1541,10 +1438,6 @@ CWD_API char *virtual_realpath(const char *path, char *real_path) /* {{{ */
CWD_STATE_COPY(&new_state, &CWDG(cwd));
} else {
new_state.cwd = (char*)emalloc(1);
- if (new_state.cwd == NULL) {
- retval = NULL;
- goto end;
- }
new_state.cwd[0] = '\0';
new_state.cwd_length = 0;
}
@@ -1560,7 +1453,6 @@ CWD_API char *virtual_realpath(const char *path, char *real_path) /* {{{ */
}
CWD_STATE_FREE(&new_state);
-end:
return retval;
}
/* }}} */
@@ -1694,7 +1586,7 @@ CWD_API int virtual_chmod(const char *filename, mode_t mode) /* {{{ */
}
/* }}} */
-#if !defined(ZEND_WIN32) && !defined(NETWARE)
+#if !defined(ZEND_WIN32)
CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group, int link) /* {{{ */
{
cwd_state new_state;
@@ -1941,36 +1833,6 @@ CWD_API FILE *virtual_popen(const char *command, const char *type) /* {{{ */
return popen_ex(command, type, CWDG(cwd).cwd, NULL);
}
/* }}} */
-#elif defined(NETWARE)
-/* On NetWare, the trick of prepending "cd cwd; " doesn't work so we need to perform
- a VCWD_CHDIR() and mutex it
- */
-CWD_API FILE *virtual_popen(const char *command, const char *type) /* {{{ */
-{
- char prev_cwd[MAXPATHLEN];
- char *getcwd_result;
- FILE *retval;
-
- getcwd_result = VCWD_GETCWD(prev_cwd, MAXPATHLEN);
- if (!getcwd_result) {
- return NULL;
- }
-
-#ifdef ZTS
- tsrm_mutex_lock(cwd_mutex);
-#endif
-
- VCWD_CHDIR(CWDG(cwd).cwd);
- retval = popen(command, type);
- VCWD_CHDIR(prev_cwd);
-
-#ifdef ZTS
- tsrm_mutex_unlock(cwd_mutex);
-#endif
-
- return retval;
-}
-/* }}} */
#else /* Unix */
CWD_API FILE *virtual_popen(const char *command, const char *type) /* {{{ */
{
@@ -1993,9 +1855,6 @@ CWD_API FILE *virtual_popen(const char *command, const char *type) /* {{{ */
dir = CWDG(cwd).cwd;
ptr = command_line = (char *) emalloc(command_length + sizeof("cd '' ; ") + dir_length + extra+1+1);
- if (!command_line) {
- return NULL;
- }
memcpy(ptr, "cd ", sizeof("cd ")-1);
ptr += sizeof("cd ")-1;
@@ -2040,9 +1899,6 @@ CWD_API char *tsrm_realpath(const char *path, char *real_path) /* {{{ */
/* realpath("") returns CWD */
if (!*path) {
new_state.cwd = (char*)emalloc(1);
- if (new_state.cwd == NULL) {
- return NULL;
- }
new_state.cwd[0] = '\0';
new_state.cwd_length = 0;
if (VCWD_GETCWD(cwd, MAXPATHLEN)) {
@@ -2054,9 +1910,6 @@ CWD_API char *tsrm_realpath(const char *path, char *real_path) /* {{{ */
new_state.cwd_length = (int)strlen(cwd);
} else {
new_state.cwd = (char*)emalloc(1);
- if (new_state.cwd == NULL) {
- return NULL;
- }
new_state.cwd[0] = '\0';
new_state.cwd_length = 0;
}
diff --git a/Zend/zend_virtual_cwd.h b/Zend/zend_virtual_cwd.h
index aa4ebdde9d..6a3d78bb3e 100644
--- a/Zend/zend_virtual_cwd.h
+++ b/Zend/zend_virtual_cwd.h
@@ -73,19 +73,6 @@ typedef unsigned short mode_t;
#define IS_ABSOLUTE_PATH(path, len) \
(len >= 2 && (/* is local */isalpha(path[0]) && path[1] == ':' || /* is UNC */IS_SLASH(path[0]) && IS_SLASH(path[1])))
-#elif defined(NETWARE)
-#ifdef HAVE_DIRENT_H
-#include <dirent.h>
-#endif
-
-#define DEFAULT_SLASH '/'
-#define DEFAULT_DIR_SEPARATOR ';'
-#define IS_SLASH(c) ((c) == '/' || (c) == '\\')
-#define IS_SLASH_P(c) IS_SLASH(*(c))
-/* Colon indicates volume name, either first character should be forward slash or backward slash */
-#define IS_ABSOLUTE_PATH(path, len) \
- ((strchr(path, ':') != NULL) || ((len >= 1) && ((path[0] == '/') || (path[0] == '\\'))))
-
#else
#ifdef HAVE_DIRENT_H
#include <dirent.h>
@@ -193,7 +180,7 @@ CWD_API int virtual_access(const char *pathname, int mode);
CWD_API int virtual_utime(const char *filename, struct utimbuf *buf);
#endif
CWD_API int virtual_chmod(const char *filename, mode_t mode);
-#if !defined(ZEND_WIN32) && !defined(NETWARE)
+#if !defined(ZEND_WIN32)
CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group, int link);
#endif
@@ -217,14 +204,14 @@ typedef struct _realpath_cache_bucket {
char *realpath;
struct _realpath_cache_bucket *next;
time_t expires;
- int path_len;
- int realpath_len;
- int is_dir;
+ uint16_t path_len;
+ uint16_t realpath_len;
+ uint8_t is_dir:1;
#ifdef ZEND_WIN32
- unsigned char is_rvalid;
- unsigned char is_readable;
- unsigned char is_wvalid;
- unsigned char is_writable;
+ uint8_t is_rvalid:1;
+ uint8_t is_readable:1;
+ uint8_t is_wvalid:1;
+ uint8_t is_writable:1;
#endif
} realpath_cache_bucket;
@@ -245,8 +232,8 @@ extern virtual_cwd_globals cwd_globals;
#endif
CWD_API void realpath_cache_clean(void);
-CWD_API void realpath_cache_del(const char *path, int path_len);
-CWD_API realpath_cache_bucket* realpath_cache_lookup(const char *path, int path_len, time_t t);
+CWD_API void realpath_cache_del(const char *path, size_t path_len);
+CWD_API realpath_cache_bucket* realpath_cache_lookup(const char *path, size_t path_len, time_t t);
CWD_API zend_long realpath_cache_size(void);
CWD_API zend_long realpath_cache_max_buckets(void);
CWD_API realpath_cache_bucket** realpath_cache_get_buckets(void);
@@ -285,7 +272,7 @@ extern void virtual_cwd_main_cwd_init(uint8_t);
#define VCWD_UTIME(path, time) virtual_utime(path, time)
#endif
#define VCWD_CHMOD(path, mode) virtual_chmod(path, mode)
-#if !defined(ZEND_WIN32) && !defined(NETWARE)
+#if !defined(ZEND_WIN32)
#define VCWD_CHOWN(path, owner, group) virtual_chown(path, owner, group, 0)
#if HAVE_LCHOWN
#define VCWD_LCHOWN(path, owner, group) virtual_chown(path, owner, group, 1)
@@ -340,7 +327,7 @@ extern void virtual_cwd_main_cwd_init(uint8_t);
# endif
#endif
-#if !defined(ZEND_WIN32) && !defined(NETWARE)
+#if !defined(ZEND_WIN32)
#define VCWD_CHOWN(path, owner, group) chown(path, owner, group)
#if HAVE_LCHOWN
#define VCWD_LCHOWN(path, owner, group) lchown(path, owner, group)
@@ -359,7 +346,8 @@ extern void virtual_cwd_main_cwd_init(uint8_t);
#endif
#ifndef S_IFLNK
-# define S_IFLNK 0120000
+#define _IFLNK 0120000 /* symbolic link */
+#define S_IFLNK _IFLNK
#endif
#ifndef S_ISDIR
@@ -378,4 +366,25 @@ extern void virtual_cwd_main_cwd_init(uint8_t);
#define S_IXROOT ( S_IXUSR | S_IXGRP | S_IXOTH )
#endif
+/* XXX should be _S_IFIFO? */
+#ifndef S_IFIFO
+#define _IFIFO 0010000 /* fifo */
+#define S_IFIFO _IFIFO
+#endif
+
+#ifndef S_IFBLK
+#define _IFBLK 0060000 /* block special */
+#define S_IFBLK _IFBLK
+#endif
+
#endif /* VIRTUAL_CWD_H */
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
+ */
diff --git a/Zend/zend_vm.h b/Zend/zend_vm.h
index 313e2635f6..eed06a653c 100644
--- a/Zend/zend_vm.h
+++ b/Zend/zend_vm.h
@@ -28,10 +28,23 @@ ZEND_API void zend_vm_set_opcode_handler(zend_op* opcode);
ZEND_API void zend_vm_set_opcode_handler_ex(zend_op* opcode, uint32_t op1_info, uint32_t op2_info, uint32_t res_info);
ZEND_API void zend_serialize_opcode_handler(zend_op *op);
ZEND_API void zend_deserialize_opcode_handler(zend_op *op);
+ZEND_API const void *zend_get_opcode_handler_func(const zend_op *op);
+ZEND_API const zend_op *zend_get_halt_op(void);
ZEND_API int zend_vm_call_opcode_handler(zend_execute_data *ex);
+ZEND_API int zend_vm_kind(void);
END_EXTERN_C()
#define ZEND_VM_SET_OPCODE_HANDLER(opline) zend_vm_set_opcode_handler(opline)
#endif
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
+ */
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 7dd70fa709..7eb91efe8b 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -186,6 +186,7 @@ ZEND_VM_HANDLER(5, ZEND_MOD, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
SAVE_OPLINE();
zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
@@ -287,17 +288,16 @@ ZEND_VM_HANDLER(8, ZEND_CONCAT, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
zend_free_op free_op1, free_op2;
zval *op1, *op2;
- SAVE_OPLINE();
op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
- do {
- if ((OP1_TYPE == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
- (OP2_TYPE == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
- zend_string *op1_str = Z_STR_P(op1);
- zend_string *op2_str = Z_STR_P(op2);
- zend_string *str;
+ if ((OP1_TYPE == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
+ (OP2_TYPE == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
+ zend_string *op1_str = Z_STR_P(op1);
+ zend_string *op2_str = Z_STR_P(op2);
+ zend_string *str;
+ do {
if (OP1_TYPE != IS_CONST) {
if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
@@ -326,19 +326,24 @@ ZEND_VM_HANDLER(8, ZEND_CONCAT, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
}
- } else {
- if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
- op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
- }
- if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
- op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
- }
- concat_function(EX_VAR(opline->result.var), op1, op2);
+ FREE_OP1();
+ } while (0);
+ FREE_OP2();
+ ZEND_VM_NEXT_OPCODE();
+ } else {
+ SAVE_OPLINE();
+
+ if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
+ concat_function(EX_VAR(opline->result.var), op1, op2);
FREE_OP1();
- } while (0);
- FREE_OP2();
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ FREE_OP2();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ }
}
ZEND_VM_HANDLER(15, ZEND_IS_IDENTICAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
@@ -728,6 +733,13 @@ ZEND_VM_HANDLER(12, ZEND_BW_NOT, CONST|TMPVAR|CV, ANY)
{
USE_OPLINE
zend_free_op free_op1;
+ zval *op1;
+
+ op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1));
+ ZEND_VM_NEXT_OPCODE();
+ }
SAVE_OPLINE();
bitwise_not_function(EX_VAR(opline->result.var),
@@ -761,6 +773,20 @@ ZEND_VM_HANDLER(13, ZEND_BOOL_NOT, CONST|TMPVAR|CV, ANY)
ZEND_VM_NEXT_OPCODE();
}
+ZEND_VM_HELPER(zend_this_not_in_object_context_helper, ANY, ANY)
+{
+ USE_OPLINE
+
+ SAVE_OPLINE();
+ zend_throw_error(NULL, "Using $this when not in object context");
+ if ((opline+1)->opcode == ZEND_OP_DATA) {
+ FREE_UNFETCHED_OP_DATA();
+ }
+ FREE_UNFETCHED_OP2();
+ UNDEF_RESULT();
+ HANDLE_EXCEPTION();
+}
+
ZEND_VM_HELPER(zend_binary_assign_op_obj_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV, binary_op_type binary_op)
{
USE_OPLINE
@@ -774,21 +800,20 @@ ZEND_VM_HELPER(zend_binary_assign_op_obj_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV,
object = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_RW);
if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
- FREE_UNFETCHED_OP2();
- HANDLE_EXCEPTION();
+ ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
}
property = GET_OP2_ZVAL_PTR(BP_VAR_R);
do {
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
if (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -848,9 +873,9 @@ ZEND_VM_C_LABEL(assign_dim_op_new_array):
dim = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
if (OP2_TYPE == IS_CONST) {
- var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim);
+ var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
} else {
- var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim);
+ var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(!var_ptr)) {
ZEND_VM_C_GOTO(assign_dim_op_ret_null);
@@ -859,7 +884,7 @@ ZEND_VM_C_LABEL(assign_dim_op_new_array):
SEPARATE_ZVAL_NOREF(var_ptr);
}
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
binary_op(var_ptr, var_ptr, value);
@@ -883,16 +908,17 @@ ZEND_VM_C_LABEL(assign_dim_op_convert_to_array):
dim = GET_OP2_ZVAL_PTR(BP_VAR_R);
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
- zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
+ zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op EXECUTE_DATA_CC);
} else {
if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
if (OP2_TYPE == IS_UNUSED) {
zend_throw_error(NULL, "[] operator not supported for strings");
} else {
- zend_check_string_offset(dim, BP_VAR_RW);
- zend_wrong_string_offset();
+ zend_check_string_offset(dim, BP_VAR_RW EXECUTE_DATA_CC);
+ zend_wrong_string_offset(EXECUTE_DATA_C);
}
+ UNDEF_RESULT();
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
ZEND_VM_C_GOTO(assign_dim_op_convert_to_array);
} else {
@@ -904,7 +930,7 @@ ZEND_VM_C_LABEL(assign_dim_op_ret_null):
ZVAL_NULL(EX_VAR(opline->result.var));
}
}
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
}
}
@@ -914,7 +940,7 @@ ZEND_VM_C_LABEL(assign_dim_op_ret_null):
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
-ZEND_VM_HELPER(zend_binary_assign_op_helper, VAR|CV, CONST|TMPVAR|CV, binary_op_type binary_op)
+ZEND_VM_HELPER(zend_binary_assign_op_simple_helper, VAR|CV, CONST|TMPVAR|CV, binary_op_type binary_op)
{
USE_OPLINE
zend_free_op free_op1, free_op2;
@@ -945,232 +971,84 @@ ZEND_VM_HELPER(zend_binary_assign_op_helper, VAR|CV, CONST|TMPVAR|CV, binary_op_
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-ZEND_VM_HANDLER(23, ZEND_ASSIGN_ADD, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, DIM_OBJ, SPEC(DIM_OBJ))
+ZEND_VM_INLINE_HELPER(zend_binary_assign_op_helper, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, SPEC(DIM_OBJ), binary_op_type binary_op)
{
-#if !defined(ZEND_VM_SPEC) || (OP2_TYPE != IS_UNUSED)
+#if defined(ZEND_VM_SPEC) && OP2_TYPE == IS_UNUSED
+ ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, binary_op);
+#else
+# if !defined(ZEND_VM_SPEC) || OP1_TYPE != IS_UNUSED
USE_OPLINE
-# if !defined(ZEND_VM_SPEC) || (OP1_TYPE != IS_UNUSED)
if (EXPECTED(opline->extended_value == 0)) {
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, add_function);
+ ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_simple_helper, binary_op, binary_op);
}
if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, add_function);
+ ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, binary_op);
}
# endif
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_obj_helper, binary_op, add_function);
-#else
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, add_function);
+
+ ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_obj_helper, binary_op, binary_op);
#endif
}
-ZEND_VM_HANDLER(24, ZEND_ASSIGN_SUB, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, DIM_OBJ, SPEC(DIM_OBJ))
+ZEND_VM_HANDLER(23, ZEND_ASSIGN_ADD, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, DIM_OBJ, SPEC(DIM_OBJ))
{
-#if !defined(ZEND_VM_SPEC) || (OP2_TYPE != IS_UNUSED)
- USE_OPLINE
+ ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, add_function);
+}
-# if !defined(ZEND_VM_SPEC) || (OP1_TYPE != IS_UNUSED)
- if (EXPECTED(opline->extended_value == 0)) {
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, sub_function);
- }
- if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, sub_function);
- }
-# endif
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_obj_helper, binary_op, sub_function);
-#else
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, sub_function);
-#endif
+ZEND_VM_HANDLER(24, ZEND_ASSIGN_SUB, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, DIM_OBJ, SPEC(DIM_OBJ))
+{
+ ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, sub_function);
}
ZEND_VM_HANDLER(25, ZEND_ASSIGN_MUL, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, DIM_OBJ, SPEC(DIM_OBJ))
{
-#if !defined(ZEND_VM_SPEC) || (OP2_TYPE != IS_UNUSED)
- USE_OPLINE
-
-# if !defined(ZEND_VM_SPEC) || (OP1_TYPE != IS_UNUSED)
- if (EXPECTED(opline->extended_value == 0)) {
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, mul_function);
- }
- if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, mul_function);
- }
-# endif
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_obj_helper, binary_op, mul_function);
-#else
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, mul_function);
-#endif
+ ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, mul_function);
}
ZEND_VM_HANDLER(26, ZEND_ASSIGN_DIV, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, DIM_OBJ, SPEC(DIM_OBJ))
{
-#if !defined(ZEND_VM_SPEC) || (OP2_TYPE != IS_UNUSED)
- USE_OPLINE
-
-# if !defined(ZEND_VM_SPEC) || (OP1_TYPE != IS_UNUSED)
- if (EXPECTED(opline->extended_value == 0)) {
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, div_function);
- }
- if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, div_function);
- }
-# endif
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_obj_helper, binary_op, div_function);
-#else
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, div_function);
-#endif
+ ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, div_function);
}
ZEND_VM_HANDLER(27, ZEND_ASSIGN_MOD, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, DIM_OBJ, SPEC(DIM_OBJ))
{
-#if !defined(ZEND_VM_SPEC) || (OP2_TYPE != IS_UNUSED)
- USE_OPLINE
-
-# if !defined(ZEND_VM_SPEC) || (OP1_TYPE != IS_UNUSED)
- if (EXPECTED(opline->extended_value == 0)) {
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, mod_function);
- }
- if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, mod_function);
- }
-# endif
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_obj_helper, binary_op, mod_function);
-#else
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, mod_function);
-#endif
+ ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, mod_function);
}
ZEND_VM_HANDLER(28, ZEND_ASSIGN_SL, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, DIM_OBJ, SPEC(DIM_OBJ))
{
-#if !defined(ZEND_VM_SPEC) || (OP2_TYPE != IS_UNUSED)
- USE_OPLINE
-
-# if !defined(ZEND_VM_SPEC) || (OP1_TYPE != IS_UNUSED)
- if (EXPECTED(opline->extended_value == 0)) {
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, shift_left_function);
- }
- if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, shift_left_function);
- }
-# endif
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_obj_helper, binary_op, shift_left_function);
-#else
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, shift_left_function);
-#endif
+ ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, shift_left_function);
}
ZEND_VM_HANDLER(29, ZEND_ASSIGN_SR, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, DIM_OBJ, SPEC(DIM_OBJ))
{
-#if !defined(ZEND_VM_SPEC) || (OP2_TYPE != IS_UNUSED)
- USE_OPLINE
-
-# if !defined(ZEND_VM_SPEC) || (OP1_TYPE != IS_UNUSED)
- if (EXPECTED(opline->extended_value == 0)) {
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, shift_right_function);
- }
- if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, shift_right_function);
- }
-# endif
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_obj_helper, binary_op, shift_right_function);
-#else
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, shift_right_function);
-#endif
+ ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, shift_right_function);
}
ZEND_VM_HANDLER(30, ZEND_ASSIGN_CONCAT, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, DIM_OBJ, SPEC(DIM_OBJ))
{
-#if !defined(ZEND_VM_SPEC) || (OP2_TYPE != IS_UNUSED)
- USE_OPLINE
-
-# if !defined(ZEND_VM_SPEC) || (OP1_TYPE != IS_UNUSED)
- if (EXPECTED(opline->extended_value == 0)) {
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, concat_function);
- }
- if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, concat_function);
- }
-# endif
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_obj_helper, binary_op, concat_function);
-#else
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, concat_function);
-#endif
+ ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, concat_function);
}
ZEND_VM_HANDLER(31, ZEND_ASSIGN_BW_OR, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, DIM_OBJ, SPEC(DIM_OBJ))
{
-#if !defined(ZEND_VM_SPEC) || (OP2_TYPE != IS_UNUSED)
- USE_OPLINE
-
-# if !defined(ZEND_VM_SPEC) || (OP1_TYPE != IS_UNUSED)
- if (EXPECTED(opline->extended_value == 0)) {
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, bitwise_or_function);
- }
- if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, bitwise_or_function);
- }
-# endif
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_obj_helper, binary_op, bitwise_or_function);
-#else
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, bitwise_or_function);
-#endif
+ ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, bitwise_or_function);
}
ZEND_VM_HANDLER(32, ZEND_ASSIGN_BW_AND, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, DIM_OBJ, SPEC(DIM_OBJ))
{
-#if !defined(ZEND_VM_SPEC) || (OP2_TYPE != IS_UNUSED)
- USE_OPLINE
-
-# if !defined(ZEND_VM_SPEC) || (OP1_TYPE != IS_UNUSED)
- if (EXPECTED(opline->extended_value == 0)) {
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, bitwise_and_function);
- }
- if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, bitwise_and_function);
- }
-# endif
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_obj_helper, binary_op, bitwise_and_function);
-#else
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, bitwise_and_function);
-#endif
+ ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, bitwise_and_function);
}
ZEND_VM_HANDLER(33, ZEND_ASSIGN_BW_XOR, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, DIM_OBJ, SPEC(DIM_OBJ))
{
-#if !defined(ZEND_VM_SPEC) || (OP2_TYPE != IS_UNUSED)
- USE_OPLINE
-
-# if !defined(ZEND_VM_SPEC) || (OP1_TYPE != IS_UNUSED)
- if (EXPECTED(opline->extended_value == 0)) {
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, bitwise_xor_function);
- }
- if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, bitwise_xor_function);
- }
-# endif
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_obj_helper, binary_op, bitwise_xor_function);
-#else
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, bitwise_xor_function);
-#endif
+ ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, bitwise_xor_function);
}
ZEND_VM_HANDLER(167, ZEND_ASSIGN_POW, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, DIM_OBJ, SPEC(DIM_OBJ))
{
-#if !defined(ZEND_VM_SPEC) || (OP2_TYPE != IS_UNUSED)
- USE_OPLINE
-
-# if !defined(ZEND_VM_SPEC) || (OP1_TYPE != IS_UNUSED)
- if (EXPECTED(opline->extended_value == 0)) {
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, pow_function);
- }
- if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) {
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, pow_function);
- }
-# endif
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_obj_helper, binary_op, pow_function);
-#else
- ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, pow_function);
-#endif
+ ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, pow_function);
}
ZEND_VM_HELPER(zend_pre_incdec_property_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV, int inc)
@@ -1185,9 +1063,7 @@ ZEND_VM_HELPER(zend_pre_incdec_property_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV,
object = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_RW);
if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- FREE_UNFETCHED_OP2();
- HANDLE_EXCEPTION();
+ ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
}
property = GET_OP2_ZVAL_PTR(BP_VAR_R);
@@ -1196,7 +1072,9 @@ ZEND_VM_HELPER(zend_pre_incdec_property_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV,
if (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -1264,9 +1142,7 @@ ZEND_VM_HELPER(zend_post_incdec_property_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV,
object = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_RW);
if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- FREE_UNFETCHED_OP2();
- HANDLE_EXCEPTION();
+ ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
}
property = GET_OP2_ZVAL_PTR(BP_VAR_R);
@@ -1275,7 +1151,9 @@ ZEND_VM_HELPER(zend_post_incdec_property_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV,
if (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
ZVAL_NULL(EX_VAR(opline->result.var));
break;
}
@@ -1526,10 +1404,10 @@ ZEND_VM_HELPER(zend_fetch_var_address_helper, CONST|TMPVAR|CV, UNUSED, int type)
name = zval_get_string(varname);
}
- target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
+ target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK EXECUTE_DATA_CC);
retval = zend_hash_find(target_symbol_table, name);
if (retval == NULL) {
- if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) {
+ if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
zval *result;
ZEND_VM_C_LABEL(fetch_this):
@@ -1554,9 +1432,11 @@ ZEND_VM_C_LABEL(fetch_this):
break;
case BP_VAR_RW:
case BP_VAR_W:
+ ZVAL_UNDEF(result);
zend_throw_error(NULL, "Cannot re-assign $this");
break;
case BP_VAR_UNSET:
+ ZVAL_UNDEF(result);
zend_throw_error(NULL, "Cannot unset $this");
break;
EMPTY_SWITCH_DEFAULT_CASE()
@@ -1587,7 +1467,7 @@ ZEND_VM_C_LABEL(fetch_this):
} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
retval = Z_INDIRECT_P(retval);
if (Z_TYPE_P(retval) == IS_UNDEF) {
- if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) {
+ if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
ZEND_VM_C_GOTO(fetch_this);
}
switch (type) {
@@ -1668,106 +1548,25 @@ ZEND_VM_HELPER(zend_fetch_static_prop_helper, CONST|TMPVAR|CV, UNUSED|CONST|VAR,
zend_free_op free_op1;
zval *varname;
zval *retval;
- zend_string *name;
- zend_class_entry *ce;
SAVE_OPLINE();
varname = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
- if (OP1_TYPE == IS_CONST) {
- name = Z_STR_P(varname);
- } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
- name = Z_STR_P(varname);
- zend_string_addref(name);
- } else {
- if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
- GET_OP1_UNDEF_CV(varname, BP_VAR_R);
- }
- name = zval_get_string(varname);
- }
-
- if (OP2_TYPE == IS_CONST) {
- if (OP1_TYPE == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
- retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
-
- /* check if static properties were destoyed */
- if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- FREE_OP1();
- HANDLE_EXCEPTION();
- }
- }
-
- ZEND_VM_C_GOTO(fetch_static_prop_return);
- } else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
- ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
- if (UNEXPECTED(ce == NULL)) {
- ZEND_ASSERT(EG(exception));
- if (OP1_TYPE != IS_CONST) {
- zend_string_release(name);
- }
- FREE_OP1();
- HANDLE_EXCEPTION();
- }
- CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
- }
- } else {
- if (OP2_TYPE == IS_UNUSED) {
- ce = zend_fetch_class(NULL, opline->op2.num);
- if (UNEXPECTED(ce == NULL)) {
- ZEND_ASSERT(EG(exception));
- if (OP1_TYPE != IS_CONST) {
- zend_string_release(name);
- }
- FREE_OP1();
- HANDLE_EXCEPTION();
- }
- } else {
- ce = Z_CE_P(EX_VAR(opline->op2.var));
- }
- if (OP1_TYPE == IS_CONST &&
- (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
-
- /* check if static properties were destoyed */
- if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- FREE_OP1();
- HANDLE_EXCEPTION();
- }
- }
-
- ZEND_VM_C_GOTO(fetch_static_prop_return);
- }
- }
- retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
+ retval = zend_fetch_static_property_address(varname, OP1_TYPE, opline->op2, OP2_TYPE, type EXECUTE_DATA_CC);
+
if (UNEXPECTED(retval == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- ZEND_ASSERT(EG(exception));
- if (OP1_TYPE != IS_CONST) {
- zend_string_release(name);
- }
+ if (EG(exception)) {
FREE_OP1();
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
+ } else {
+ ZEND_ASSERT(type == BP_VAR_IS);
+ retval = &EG(uninitialized_zval);
}
- } else if (OP1_TYPE == IS_CONST) {
- CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
}
FREE_OP1();
- if (OP1_TYPE != IS_CONST) {
- zend_string_release(name);
- }
-
-ZEND_VM_C_LABEL(fetch_static_prop_return):
if (type == BP_VAR_R || type == BP_VAR_IS) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
} else {
@@ -1824,7 +1623,7 @@ ZEND_VM_HANDLER(81, ZEND_FETCH_DIM_R, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
if (OP1_TYPE != IS_CONST) {
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
ZEND_VM_C_LABEL(fetch_dim_r_array):
- value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, OP2_TYPE, BP_VAR_R);
+ value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, OP2_TYPE, BP_VAR_R EXECUTE_DATA_CC);
result = EX_VAR(opline->result.var);
ZVAL_COPY_UNREF(result, value);
} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
@@ -1837,11 +1636,11 @@ ZEND_VM_C_LABEL(fetch_dim_r_array):
} else {
ZEND_VM_C_LABEL(fetch_dim_r_slow):
result = EX_VAR(opline->result.var);
- zend_fetch_dimension_address_read_R_slow(result, container, dim);
+ zend_fetch_dimension_address_read_R_slow(result, container, dim EXECUTE_DATA_CC);
}
} else {
result = EX_VAR(opline->result.var);
- zend_fetch_dimension_address_read_R(result, container, dim, OP2_TYPE);
+ zend_fetch_dimension_address_read_R(result, container, dim, OP2_TYPE EXECUTE_DATA_CC);
}
FREE_OP2();
FREE_OP1();
@@ -1857,7 +1656,7 @@ ZEND_VM_HANDLER(84, ZEND_FETCH_DIM_W, VAR|CV, CONST|TMPVAR|UNUSED|NEXT|CV)
SAVE_OPLINE();
container = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
- zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE);
+ zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE EXECUTE_DATA_CC);
FREE_OP2();
if (OP1_TYPE == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
@@ -1875,7 +1674,7 @@ ZEND_VM_HANDLER(87, ZEND_FETCH_DIM_RW, VAR|CV, CONST|TMPVAR|UNUSED|NEXT|CV)
SAVE_OPLINE();
container = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
- zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE);
+ zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE EXECUTE_DATA_CC);
FREE_OP2();
if (OP1_TYPE == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
@@ -1892,7 +1691,7 @@ ZEND_VM_HANDLER(90, ZEND_FETCH_DIM_IS, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
SAVE_OPLINE();
container = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_IS);
- zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE);
+ zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE EXECUTE_DATA_CC);
FREE_OP2();
FREE_OP1();
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -1911,10 +1710,11 @@ ZEND_VM_HANDLER(93, ZEND_FETCH_DIM_FUNC_ARG, CONST|TMP|VAR|CV, CONST|TMPVAR|UNUS
zend_throw_error(NULL, "Cannot use temporary expression in write context");
FREE_UNFETCHED_OP2();
FREE_UNFETCHED_OP1();
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
container = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
- zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE);
+ zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE EXECUTE_DATA_CC);
if (OP1_TYPE == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
}
@@ -1925,10 +1725,11 @@ ZEND_VM_HANDLER(93, ZEND_FETCH_DIM_FUNC_ARG, CONST|TMP|VAR|CV, CONST|TMPVAR|UNUS
zend_throw_error(NULL, "Cannot use [] for reading");
FREE_UNFETCHED_OP2();
FREE_UNFETCHED_OP1();
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
container = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
- zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE);
+ zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE EXECUTE_DATA_CC);
FREE_OP2();
FREE_OP1();
}
@@ -1944,7 +1745,7 @@ ZEND_VM_HANDLER(96, ZEND_FETCH_DIM_UNSET, VAR|CV, CONST|TMPVAR|CV)
SAVE_OPLINE();
container = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_UNSET);
- zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE);
+ zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE EXECUTE_DATA_CC);
FREE_OP2();
if (OP1_TYPE == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
@@ -1965,9 +1766,7 @@ ZEND_VM_HANDLER(82, ZEND_FETCH_OBJ_R, CONST|TMP|VAR|UNUSED|THIS|CV, CONST|TMPVAR
container = GET_OP1_OBJ_ZVAL_PTR(BP_VAR_R);
if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- FREE_UNFETCHED_OP2();
- HANDLE_EXCEPTION();
+ ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
}
offset = GET_OP2_ZVAL_PTR(BP_VAR_R);
@@ -1995,7 +1794,7 @@ ZEND_VM_HANDLER(82, ZEND_FETCH_OBJ_R, CONST|TMP|VAR|UNUSED|THIS|CV, CONST|TMPVAR
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
retval = OBJ_PROP(zobj, prop_offset);
- if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
+ if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
break;
}
@@ -2009,8 +1808,11 @@ ZEND_VM_HANDLER(82, ZEND_FETCH_OBJ_R, CONST|TMP|VAR|UNUSED|THIS|CV, CONST|TMPVAR
}
if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
+ zend_string *property_name;
ZEND_VM_C_LABEL(fetch_obj_r_no_object):
- zend_error(E_NOTICE, "Trying to get property of non-object");
+ property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
ZVAL_NULL(EX_VAR(opline->result.var));
} else {
retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
@@ -2034,15 +1836,13 @@ ZEND_VM_HANDLER(85, ZEND_FETCH_OBJ_W, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV)
zval *container;
SAVE_OPLINE();
- property = GET_OP2_ZVAL_PTR(BP_VAR_R);
container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- FREE_OP2();
- HANDLE_EXCEPTION();
+ ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
}
+ property = GET_OP2_ZVAL_PTR(BP_VAR_R);
zend_fetch_property_address(EX_VAR(opline->result.var), container, OP1_TYPE, property, OP2_TYPE, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
FREE_OP2();
if (OP1_TYPE == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -2060,14 +1860,12 @@ ZEND_VM_HANDLER(88, ZEND_FETCH_OBJ_RW, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV)
zval *container;
SAVE_OPLINE();
- property = GET_OP2_ZVAL_PTR(BP_VAR_R);
container = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_RW);
if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- FREE_OP2();
- HANDLE_EXCEPTION();
+ ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
}
+ property = GET_OP2_ZVAL_PTR(BP_VAR_R);
zend_fetch_property_address(EX_VAR(opline->result.var), container, OP1_TYPE, property, OP2_TYPE, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
FREE_OP2();
if (OP1_TYPE == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -2089,9 +1887,7 @@ ZEND_VM_HANDLER(91, ZEND_FETCH_OBJ_IS, CONST|TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR
container = GET_OP1_OBJ_ZVAL_PTR(BP_VAR_IS);
if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- FREE_UNFETCHED_OP2();
- HANDLE_EXCEPTION();
+ ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
}
offset = GET_OP2_ZVAL_PTR(BP_VAR_R);
@@ -2161,20 +1957,19 @@ ZEND_VM_HANDLER(94, ZEND_FETCH_OBJ_FUNC_ARG, CONST|TMP|VAR|UNUSED|THIS|CV, CONST
zval *property;
SAVE_OPLINE();
- property = GET_OP2_ZVAL_PTR(BP_VAR_R);
container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- FREE_OP2();
- HANDLE_EXCEPTION();
+ ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
}
if ((OP1_TYPE & (IS_CONST|IS_TMP_VAR))) {
zend_throw_error(NULL, "Cannot use temporary expression in write context");
- FREE_OP2();
+ FREE_UNFETCHED_OP2();
FREE_OP1_VAR_PTR();
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
+ property = GET_OP2_ZVAL_PTR(BP_VAR_R);
zend_fetch_property_address(EX_VAR(opline->result.var), container, OP1_TYPE, property, OP2_TYPE, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
FREE_OP2();
if (OP1_TYPE == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -2197,9 +1992,7 @@ ZEND_VM_HANDLER(97, ZEND_FETCH_OBJ_UNSET, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV)
container = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_UNSET);
if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- FREE_UNFETCHED_OP2();
- HANDLE_EXCEPTION();
+ ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
}
property = GET_OP2_ZVAL_PTR(BP_VAR_R);
@@ -2221,7 +2014,7 @@ ZEND_VM_HANDLER(98, ZEND_FETCH_LIST, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
SAVE_OPLINE();
container = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
- zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R));
+ zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R) EXECUTE_DATA_CC);
FREE_OP2();
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -2230,19 +2023,16 @@ ZEND_VM_HANDLER(136, ZEND_ASSIGN_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, SPEC(
{
USE_OPLINE
zend_free_op free_op1, free_op2, free_op_data;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
object = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- FREE_UNFETCHED_OP2();
- FREE_UNFETCHED_OP_DATA();
- HANDLE_EXCEPTION();
+ ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
}
- property_name = GET_OP2_ZVAL_PTR(BP_VAR_R);
+ property = GET_OP2_ZVAL_PTR(BP_VAR_R);
value = GET_OP_DATA_ZVAL_PTR(BP_VAR_R);
if (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -2274,7 +2064,9 @@ ZEND_VM_HANDLER(136, ZEND_ASSIGN_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, SPEC(
Z_DELREF_P(object);
} else {
if (OP1_TYPE != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -2286,16 +2078,16 @@ ZEND_VM_HANDLER(136, ZEND_ASSIGN_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, SPEC(
}
if (OP2_TYPE == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
ZEND_VM_C_LABEL(fast_assign_obj):
- value = zend_assign_to_variable(property, value, OP_DATA_TYPE);
+ value = zend_assign_to_variable(property_val, value, OP_DATA_TYPE);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -2309,8 +2101,8 @@ ZEND_VM_C_LABEL(fast_assign_obj):
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
ZEND_VM_C_GOTO(fast_assign_obj);
}
}
@@ -2348,7 +2140,7 @@ ZEND_VM_C_LABEL(fast_assign_obj):
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -2358,7 +2150,9 @@ ZEND_VM_C_LABEL(fast_assign_obj):
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -2370,9 +2164,9 @@ ZEND_VM_C_LABEL(fast_assign_obj):
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, (OP2_TYPE == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, (OP2_TYPE == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
FREE_OP_DATA();
@@ -2408,9 +2202,9 @@ ZEND_VM_C_LABEL(try_assign_dim_array):
} else {
dim = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
if (OP2_TYPE == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
ZEND_VM_C_GOTO(assign_dim_error);
@@ -2434,7 +2228,7 @@ ZEND_VM_C_LABEL(try_assign_dim_array):
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -2444,11 +2238,12 @@ ZEND_VM_C_LABEL(try_assign_dim_array):
zend_throw_error(NULL, "[] operator not supported for strings");
FREE_UNFETCHED_OP_DATA();
FREE_OP1_VAR_PTR();
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
dim = GET_OP2_ZVAL_PTR(BP_VAR_R);
value = GET_OP_DATA_ZVAL_PTR_DEREF(BP_VAR_R);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
FREE_OP_DATA();
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -2522,6 +2317,7 @@ ZEND_VM_HANDLER(39, ZEND_ASSIGN_REF, VAR|CV, VAR|CV, SRC)
zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
FREE_OP1_VAR_PTR();
FREE_OP2_VAR_PTR();
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else if (OP2_TYPE == IS_VAR &&
@@ -2530,6 +2326,7 @@ ZEND_VM_HANDLER(39, ZEND_ASSIGN_REF, VAR|CV, VAR|CV, SRC)
zend_error(E_NOTICE, "Only variables should be assigned by reference");
if (UNEXPECTED(EG(exception) != NULL)) {
FREE_OP2_VAR_PTR();
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -2586,11 +2383,7 @@ ZEND_VM_HELPER(zend_leave_helper, ANY, ANY)
execute_data = EX(prev_execute_data);
if (UNEXPECTED(EG(exception) != NULL)) {
- const zend_op *old_opline = EX(opline);
- zend_throw_exception_internal(NULL);
- if (RETURN_VALUE_USED(old_opline)) {
- zval_ptr_dtor(EX_VAR(old_opline->result.var));
- }
+ zend_rethrow_exception(execute_data);
HANDLE_EXCEPTION_LEAVE();
}
@@ -2624,11 +2417,7 @@ ZEND_VM_HELPER(zend_leave_helper, ANY, ANY)
zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
if (UNEXPECTED(EG(exception) != NULL)) {
- const zend_op *old_opline = EX(opline);
- zend_throw_exception_internal(NULL);
- if (RETURN_VALUE_USED(old_opline)) {
- zval_ptr_dtor(EX_VAR(old_opline->result.var));
- }
+ zend_rethrow_exception(execute_data);
HANDLE_EXCEPTION_LEAVE();
}
@@ -2644,7 +2433,7 @@ ZEND_VM_HELPER(zend_leave_helper, ANY, ANY)
zend_attach_symbol_table(execute_data);
if (UNEXPECTED(EG(exception) != NULL)) {
- zend_throw_exception_internal(NULL);
+ zend_rethrow_exception(execute_data);
HANDLE_EXCEPTION_LEAVE();
}
@@ -2684,7 +2473,7 @@ ZEND_VM_HELPER(zend_leave_helper, ANY, ANY)
}
}
-ZEND_VM_HANDLER(42, ZEND_JMP, JMP_ADDR, ANY)
+ZEND_VM_HOT_HANDLER(42, ZEND_JMP, JMP_ADDR, ANY)
{
USE_OPLINE
@@ -2692,7 +2481,7 @@ ZEND_VM_HANDLER(42, ZEND_JMP, JMP_ADDR, ANY)
ZEND_VM_CONTINUE();
}
-ZEND_VM_HANDLER(43, ZEND_JMPZ, CONST|TMPVAR|CV, JMP_ADDR)
+ZEND_VM_HOT_HANDLER(43, ZEND_JMPZ, CONST|TMPVAR|CV, JMP_ADDR)
{
USE_OPLINE
zend_free_op free_op1;
@@ -2724,7 +2513,7 @@ ZEND_VM_HANDLER(43, ZEND_JMPZ, CONST|TMPVAR|CV, JMP_ADDR)
ZEND_VM_JMP(opline);
}
-ZEND_VM_HANDLER(44, ZEND_JMPNZ, CONST|TMPVAR|CV, JMP_ADDR)
+ZEND_VM_HOT_HANDLER(44, ZEND_JMPNZ, CONST|TMPVAR|CV, JMP_ADDR)
{
USE_OPLINE
zend_free_op free_op1;
@@ -2755,7 +2544,7 @@ ZEND_VM_HANDLER(44, ZEND_JMPNZ, CONST|TMPVAR|CV, JMP_ADDR)
ZEND_VM_JMP(opline);
}
-ZEND_VM_HANDLER(45, ZEND_JMPZNZ, CONST|TMPVAR|CV, JMP_ADDR, JMP_ADDR)
+ZEND_VM_HOT_HANDLER(45, ZEND_JMPZNZ, CONST|TMPVAR|CV, JMP_ADDR, JMP_ADDR)
{
USE_OPLINE
zend_free_op free_op1;
@@ -2891,8 +2680,51 @@ ZEND_VM_HANDLER(53, ZEND_FAST_CONCAT, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
zval *op1, *op2;
zend_string *op1_str, *op2_str, *str;
- SAVE_OPLINE();
+
op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
+ op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
+ if ((OP1_TYPE == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
+ (OP2_TYPE == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
+ zend_string *op1_str = Z_STR_P(op1);
+ zend_string *op2_str = Z_STR_P(op2);
+ zend_string *str;
+
+ do {
+ if (OP1_TYPE != IS_CONST) {
+ if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
+ FREE_OP1();
+ break;
+ }
+ }
+ if (OP2_TYPE != IS_CONST) {
+ if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
+ FREE_OP1();
+ break;
+ }
+ }
+ if (OP1_TYPE != IS_CONST && OP1_TYPE != IS_CV &&
+ !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
+ size_t len = ZSTR_LEN(op1_str);
+
+ str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
+ memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
+ ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
+ break;
+ } else {
+ str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
+ memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
+ memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
+ ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
+ }
+ FREE_OP1();
+ } while (0);
+ FREE_OP2();
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
if (OP1_TYPE == IS_CONST) {
op1_str = Z_STR_P(op1);
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
@@ -2903,7 +2735,6 @@ ZEND_VM_HANDLER(53, ZEND_FAST_CONCAT, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
}
op1_str = _zval_get_string_func(op1);
}
- op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
if (OP2_TYPE == IS_CONST) {
op2_str = Z_STR_P(op2);
} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
@@ -3050,6 +2881,7 @@ ZEND_VM_HANDLER(56, ZEND_ROPE_END, TMP, CONST|TMPVAR|CV, NUM)
for (i = 0; i <= opline->extended_value; i++) {
zend_string_release(rope[i]);
}
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
}
@@ -3127,6 +2959,12 @@ ZEND_VM_HANDLER(112, ZEND_INIT_METHOD_CALL, CONST|TMPVAR|UNUSED|THIS|CV, CONST|T
SAVE_OPLINE();
+ object = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_R);
+
+ if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
+ }
+
function_name = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
if (OP2_TYPE != IS_CONST &&
@@ -3140,24 +2978,17 @@ ZEND_VM_HANDLER(112, ZEND_INIT_METHOD_CALL, CONST|TMPVAR|UNUSED|THIS|CV, CONST|T
} else if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
if (UNEXPECTED(EG(exception) != NULL)) {
+ FREE_OP1();
HANDLE_EXCEPTION();
}
}
zend_throw_error(NULL, "Method name must be a string");
FREE_OP2();
- FREE_UNFETCHED_OP1();
+ FREE_OP1();
HANDLE_EXCEPTION();
} while (0);
}
- object = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_R);
-
- if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- FREE_OP2();
- HANDLE_EXCEPTION();
- }
-
if (OP1_TYPE != IS_UNUSED) {
do {
if (OP1_TYPE == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -3185,8 +3016,10 @@ ZEND_VM_HANDLER(112, ZEND_INIT_METHOD_CALL, CONST|TMPVAR|UNUSED|THIS|CV, CONST|T
obj = Z_OBJ_P(object);
called_scope = obj->ce;
- if (OP2_TYPE != IS_CONST ||
- UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
+ if (OP2_TYPE == IS_CONST &&
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(function_name)) == called_scope)) {
+ fbc = CACHED_PTR(Z_CACHE_SLOT_P(function_name) + sizeof(void*));
+ } else {
zend_object *orig_obj = obj;
if (UNEXPECTED(obj->handlers->get_method == NULL)) {
@@ -3280,8 +3113,8 @@ ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, UNUSED|CLASS_FETCH|CONST|VAR,
/* nothing to do */
} else if (OP1_TYPE != IS_CONST &&
OP2_TYPE == IS_CONST &&
- (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
- /* do nothing */
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))) == ce)) {
+ fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)) + sizeof(void*));
} else if (OP2_TYPE != IS_UNUSED) {
zend_free_op free_op2;
@@ -3396,7 +3229,7 @@ ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, UNUSED|CLASS_FETCH|CONST|VAR,
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_HANDLER(59, ZEND_INIT_FCALL_BY_NAME, ANY, CONST, NUM)
+ZEND_VM_HOT_HANDLER(59, ZEND_INIT_FCALL_BY_NAME, ANY, CONST, NUM)
{
USE_OPLINE
zend_function *fbc;
@@ -3515,12 +3348,12 @@ ZEND_VM_HANDLER(118, ZEND_INIT_USER_CALL, CONST, CONST|TMPVAR|CV, NUM)
}
if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
/* Delay closure destruction until its invocation */
- if (OP2_TYPE & (IS_VAR|IS_CV)) {
- ZVAL_DEREF(function_name);
- }
ZEND_ASSERT(GC_TYPE((zend_object*)func->common.prototype) == IS_OBJECT);
GC_REFCOUNT((zend_object*)func->common.prototype)++;
call_info |= ZEND_CALL_CLOSURE;
+ if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
+ call_info |= ZEND_CALL_FAKE_CLOSURE;
+ }
} else if (object) {
call_info |= ZEND_CALL_RELEASE_THIS;
GC_REFCOUNT(object)++; /* For $this pointer */
@@ -3596,7 +3429,7 @@ ZEND_VM_HANDLER(69, ZEND_INIT_NS_FCALL_BY_NAME, ANY, CONST, NUM)
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_HANDLER(61, ZEND_INIT_FCALL, NUM, CONST, NUM)
+ZEND_VM_HOT_HANDLER(61, ZEND_INIT_FCALL, NUM, CONST, NUM)
{
USE_OPLINE
zend_free_op free_op2;
@@ -3629,7 +3462,7 @@ ZEND_VM_HANDLER(61, ZEND_INIT_FCALL, NUM, CONST, NUM)
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_HANDLER(129, ZEND_DO_ICALL, ANY, ANY, SPEC(RETVAL))
+ZEND_VM_HOT_HANDLER(129, ZEND_DO_ICALL, ANY, ANY, SPEC(RETVAL))
{
USE_OPLINE
zend_execute_data *call = EX(call);
@@ -3656,7 +3489,7 @@ ZEND_VM_HANDLER(129, ZEND_DO_ICALL, ANY, ANY, SPEC(RETVAL))
ZEND_ASSERT(!Z_ISREF_P(ret));
#endif
- EG(current_execute_data) = call->prev_execute_data;
+ EG(current_execute_data) = execute_data;
zend_vm_stack_free_args(call);
zend_vm_stack_free_call_frame(call);
@@ -3665,10 +3498,7 @@ ZEND_VM_HANDLER(129, ZEND_DO_ICALL, ANY, ANY, SPEC(RETVAL))
}
if (UNEXPECTED(EG(exception) != NULL)) {
- zend_throw_exception_internal(NULL);
- if (RETURN_VALUE_USED(opline)) {
- zval_ptr_dtor(EX_VAR(opline->result.var));
- }
+ zend_rethrow_exception(execute_data);
HANDLE_EXCEPTION();
}
@@ -3676,7 +3506,7 @@ ZEND_VM_HANDLER(129, ZEND_DO_ICALL, ANY, ANY, SPEC(RETVAL))
ZEND_VM_CONTINUE();
}
-ZEND_VM_HANDLER(130, ZEND_DO_UCALL, ANY, ANY, SPEC(RETVAL))
+ZEND_VM_HOT_HANDLER(130, ZEND_DO_UCALL, ANY, ANY, SPEC(RETVAL))
{
USE_OPLINE
zend_execute_data *call = EX(call);
@@ -3698,7 +3528,7 @@ ZEND_VM_HANDLER(130, ZEND_DO_UCALL, ANY, ANY, SPEC(RETVAL))
ZEND_VM_ENTER();
}
-ZEND_VM_HANDLER(131, ZEND_DO_FCALL_BY_NAME, ANY, ANY, SPEC(RETVAL))
+ZEND_VM_HOT_HANDLER(131, ZEND_DO_FCALL_BY_NAME, ANY, ANY, SPEC(RETVAL))
{
USE_OPLINE
zend_execute_data *call = EX(call);
@@ -3729,6 +3559,7 @@ ZEND_VM_HANDLER(131, ZEND_DO_FCALL_BY_NAME, ANY, ANY, SPEC(RETVAL))
fbc->common.scope ? "::" : "",
ZSTR_VAL(fbc->common.function_name));
if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
}
@@ -3739,7 +3570,8 @@ ZEND_VM_HANDLER(131, ZEND_DO_FCALL_BY_NAME, ANY, ANY, SPEC(RETVAL))
if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS)
&& UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) {
zend_vm_stack_free_call_frame(call);
- zend_throw_exception_internal(NULL);
+ zend_rethrow_exception(execute_data);
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -3757,7 +3589,7 @@ ZEND_VM_HANDLER(131, ZEND_DO_FCALL_BY_NAME, ANY, ANY, SPEC(RETVAL))
}
#endif
- EG(current_execute_data) = call->prev_execute_data;
+ EG(current_execute_data) = execute_data;
zend_vm_stack_free_args(call);
zend_vm_stack_free_call_frame(call);
@@ -3767,17 +3599,14 @@ ZEND_VM_HANDLER(131, ZEND_DO_FCALL_BY_NAME, ANY, ANY, SPEC(RETVAL))
}
if (UNEXPECTED(EG(exception) != NULL)) {
- zend_throw_exception_internal(NULL);
- if (RETURN_VALUE_USED(opline)) {
- zval_ptr_dtor(EX_VAR(opline->result.var));
- }
+ zend_rethrow_exception(execute_data);
HANDLE_EXCEPTION();
}
ZEND_VM_SET_OPCODE(opline + 1);
ZEND_VM_CONTINUE();
}
-ZEND_VM_HANDLER(60, ZEND_DO_FCALL, ANY, ANY, SPEC(RETVAL))
+ZEND_VM_HOT_HANDLER(60, ZEND_DO_FCALL, ANY, ANY, SPEC(RETVAL))
{
USE_OPLINE
zend_execute_data *call = EX(call);
@@ -3790,6 +3619,7 @@ ZEND_VM_HANDLER(60, ZEND_DO_FCALL, ANY, ANY, SPEC(RETVAL))
if (UNEXPECTED((fbc->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED)) != 0)) {
if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_ABSTRACT) != 0)) {
zend_throw_error(NULL, "Cannot call abstract method %s::%s()", ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
@@ -3798,6 +3628,7 @@ ZEND_VM_HANDLER(60, ZEND_DO_FCALL, ANY, ANY, SPEC(RETVAL))
fbc->common.scope ? "::" : "",
ZSTR_VAL(fbc->common.function_name));
if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
}
@@ -3829,9 +3660,7 @@ ZEND_VM_HANDLER(60, ZEND_DO_FCALL, ANY, ANY, SPEC(RETVAL))
if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS)
&& UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) {
- if (RETURN_VALUE_USED(opline)) {
- ZVAL_UNDEF(EX_VAR(opline->result.var));
- }
+ UNDEF_RESULT();
ZEND_VM_C_GOTO(fcall_end);
}
@@ -3854,7 +3683,7 @@ ZEND_VM_HANDLER(60, ZEND_DO_FCALL, ANY, ANY, SPEC(RETVAL))
}
#endif
- EG(current_execute_data) = call->prev_execute_data;
+ EG(current_execute_data) = execute_data;
zend_vm_stack_free_args(call);
if (!RETURN_VALUE_USED(opline)) {
@@ -3868,7 +3697,8 @@ ZEND_VM_HANDLER(60, ZEND_DO_FCALL, ANY, ANY, SPEC(RETVAL))
call->prev_execute_data = execute_data;
- if (UNEXPECTED(!zend_do_fcall_overloaded(fbc, call, ret))) {
+ if (UNEXPECTED(!zend_do_fcall_overloaded(call, ret))) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -3893,10 +3723,7 @@ ZEND_VM_C_LABEL(fcall_end):
zend_vm_stack_free_call_frame(call);
if (UNEXPECTED(EG(exception) != NULL)) {
- zend_throw_exception_internal(NULL);
- if (RETURN_VALUE_USED(opline)) {
- zval_ptr_dtor(EX_VAR(opline->result.var));
- }
+ zend_rethrow_exception(execute_data);
HANDLE_EXCEPTION();
}
@@ -3932,10 +3759,10 @@ ZEND_VM_HANDLER(124, ZEND_VERIFY_RETURN_TYPE, CONST|TMP|VAR|UNUSED|CV, UNUSED)
ZVAL_DEREF(retval_ptr);
}
- if (UNEXPECTED(!ret_info->class_name
- && ret_info->type_hint != IS_CALLABLE
- && ret_info->type_hint != IS_ITERABLE
- && !ZEND_SAME_FAKE_TYPE(ret_info->type_hint, Z_TYPE_P(retval_ptr))
+ if (UNEXPECTED(!ZEND_TYPE_IS_CLASS(ret_info->type)
+ && ZEND_TYPE_CODE(ret_info->type) != IS_CALLABLE
+ && ZEND_TYPE_CODE(ret_info->type) != IS_ITERABLE
+ && !ZEND_SAME_FAKE_TYPE(ZEND_TYPE_CODE(ret_info->type), Z_TYPE_P(retval_ptr))
&& !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)
&& retval_ref != retval_ptr)
) {
@@ -3949,18 +3776,12 @@ ZEND_VM_HANDLER(124, ZEND_VERIFY_RETURN_TYPE, CONST|TMP|VAR|UNUSED|CV, UNUSED)
retval_ptr = retval_ref;
}
zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
-
- if (UNEXPECTED(EG(exception) != NULL)) {
- if (OP1_TYPE == IS_CONST) {
- zval_ptr_dtor_nogc(retval_ptr);
- }
- }
#endif
}
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-ZEND_VM_HANDLER(62, ZEND_RETURN, CONST|TMP|VAR|CV, ANY)
+ZEND_VM_HOT_HANDLER(62, ZEND_RETURN, CONST|TMP|VAR|CV, ANY)
{
USE_OPLINE
zval *retval_ptr;
@@ -4165,7 +3986,7 @@ ZEND_VM_HANDLER(161, ZEND_GENERATOR_RETURN, CONST|TMP|VAR|CV, ANY)
zval *retval;
zend_free_op free_op1;
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
retval = GET_OP1_ZVAL_PTR(BP_VAR_R);
@@ -4275,7 +4096,7 @@ ZEND_VM_HANDLER(107, ZEND_CATCH, CONST, CV, JMP_ADDR)
if (ce != catch_ce) {
if (!catch_ce || !instanceof_function(ce, catch_ce)) {
if (opline->result.num) {
- zend_throw_exception_internal(NULL);
+ zend_rethrow_exception(execute_data);
HANDLE_EXCEPTION();
}
ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
@@ -4299,7 +4120,7 @@ ZEND_VM_HANDLER(107, ZEND_CATCH, CONST, CV, JMP_ADDR)
}
}
-ZEND_VM_HANDLER(65, ZEND_SEND_VAL, CONST|TMPVAR, NUM)
+ZEND_VM_HOT_HANDLER(65, ZEND_SEND_VAL, CONST|TMPVAR, NUM)
{
USE_OPLINE
zval *value, *arg;
@@ -4316,7 +4137,7 @@ ZEND_VM_HANDLER(65, ZEND_SEND_VAL, CONST|TMPVAR, NUM)
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_HANDLER(116, ZEND_SEND_VAL_EX, CONST|TMP, NUM, SPEC(QUICK_ARG))
+ZEND_VM_HOT_HANDLER(116, ZEND_SEND_VAL_EX, CONST|TMP, NUM, SPEC(QUICK_ARG))
{
USE_OPLINE
zval *value, *arg;
@@ -4347,7 +4168,7 @@ ZEND_VM_C_LABEL(send_val_by_ref):
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_HANDLER(117, ZEND_SEND_VAR, VAR|CV, NUM)
+ZEND_VM_HOT_HANDLER(117, ZEND_SEND_VAR, VAR|CV, NUM)
{
USE_OPLINE
zval *varptr, *arg;
@@ -4474,7 +4295,7 @@ ZEND_VM_HANDLER(67, ZEND_SEND_REF, VAR|CV, NUM)
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_HANDLER(66, ZEND_SEND_VAR_EX, VAR|CV, NUM, SPEC(QUICK_ARG))
+ZEND_VM_HOT_HANDLER(66, ZEND_SEND_VAR_EX, VAR|CV, NUM, SPEC(QUICK_ARG))
{
USE_OPLINE
zval *varptr, *arg;
@@ -4674,7 +4495,7 @@ ZEND_VM_C_LABEL(send_again):
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-ZEND_VM_HANDLER(119, ZEND_SEND_ARRAY, ANY, ANY)
+ZEND_VM_HANDLER(119, ZEND_SEND_ARRAY, ANY, ANY, NUM)
{
USE_OPLINE
zend_free_op free_op1;
@@ -4700,44 +4521,98 @@ ZEND_VM_HANDLER(119, ZEND_SEND_ARRAY, ANY, ANY)
EX(call)->func = (zend_function*)&zend_pass_function;
Z_OBJ(EX(call)->This) = NULL;
ZEND_SET_CALL_INFO(EX(call), 0, ZEND_CALL_INFO(EX(call)) & ~ZEND_CALL_RELEASE_THIS);
+ FREE_UNFETCHED_OP2();
} else {
uint32_t arg_num;
HashTable *ht;
zval *arg, *param;
+
ZEND_VM_C_LABEL(send_array):
ht = Z_ARRVAL_P(args);
- zend_vm_stack_extend_call_frame(&EX(call), 0, zend_hash_num_elements(ht));
+ if (OP2_TYPE != IS_UNUSED) {
+ zend_free_op free_op2;
+ zval *op2 = GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R);
+ uint32_t skip = opline->extended_value;
+ uint32_t count = zend_hash_num_elements(ht);
+ zend_long len = zval_get_long(op2);
+
+ if (len < 0) {
+ len += (zend_long)(count - skip);
+ }
+ if (skip < count && len > 0) {
+ if (len > (zend_long)(count - skip)) {
+ len = (zend_long)(count - skip);
+ }
+ zend_vm_stack_extend_call_frame(&EX(call), 0, len);
+ arg_num = 1;
+ param = ZEND_CALL_ARG(EX(call), 1);
+ ZEND_HASH_FOREACH_VAL(ht, arg) {
+ if (skip > 0) {
+ skip--;
+ continue;
+ } else if ((zend_long)(arg_num - 1) >= len) {
+ break;
+ } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
+ if (UNEXPECTED(!Z_ISREF_P(arg))) {
+ if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
+ /* By-value send is not allowed -- emit a warning,
+ * but still perform the call. */
+ zend_error(E_WARNING,
+ "Parameter %d to %s%s%s() expected to be a reference, value given",
+ arg_num,
+ EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
+ EX(call)->func->common.scope ? "::" : "",
+ ZSTR_VAL(EX(call)->func->common.function_name));
- arg_num = 1;
- param = ZEND_CALL_ARG(EX(call), 1);
- ZEND_HASH_FOREACH_VAL(ht, arg) {
- if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
- if (UNEXPECTED(!Z_ISREF_P(arg))) {
- if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
- /* By-value send is not allowed -- emit a warning,
- * but still perform the call. */
- zend_error(E_WARNING,
- "Parameter %d to %s%s%s() expected to be a reference, value given",
- arg_num,
- EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
- EX(call)->func->common.scope ? "::" : "",
- ZSTR_VAL(EX(call)->func->common.function_name));
+ }
+ }
+ } else {
+ if (Z_ISREF_P(arg) &&
+ !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
+ /* don't separate references for __call */
+ arg = Z_REFVAL_P(arg);
+ }
+ }
+ ZVAL_COPY(param, arg);
+ ZEND_CALL_NUM_ARGS(EX(call))++;
+ arg_num++;
+ param++;
+ } ZEND_HASH_FOREACH_END();
+ }
+ FREE_OP2();
+ } else {
+ zend_vm_stack_extend_call_frame(&EX(call), 0, zend_hash_num_elements(ht));
+ arg_num = 1;
+ param = ZEND_CALL_ARG(EX(call), 1);
+ ZEND_HASH_FOREACH_VAL(ht, arg) {
+ if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
+ if (UNEXPECTED(!Z_ISREF_P(arg))) {
+ if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
+ /* By-value send is not allowed -- emit a warning,
+ * but still perform the call. */
+ zend_error(E_WARNING,
+ "Parameter %d to %s%s%s() expected to be a reference, value given",
+ arg_num,
+ EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
+ EX(call)->func->common.scope ? "::" : "",
+ ZSTR_VAL(EX(call)->func->common.function_name));
+ }
+ }
+ } else {
+ if (Z_ISREF_P(arg) &&
+ !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
+ /* don't separate references for __call */
+ arg = Z_REFVAL_P(arg);
}
}
- } else {
- if (Z_ISREF_P(arg) &&
- !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
- /* don't separate references for __call */
- arg = Z_REFVAL_P(arg);
- }
- }
- ZVAL_COPY(param, arg);
- ZEND_CALL_NUM_ARGS(EX(call))++;
- arg_num++;
- param++;
- } ZEND_HASH_FOREACH_END();
+ ZVAL_COPY(param, arg);
+ ZEND_CALL_NUM_ARGS(EX(call))++;
+ arg_num++;
+ param++;
+ } ZEND_HASH_FOREACH_END();
+ }
}
FREE_OP1();
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -4777,7 +4652,7 @@ ZEND_VM_HANDLER(63, ZEND_RECV, NUM, ANY)
zend_missing_arg_error(execute_data);
HANDLE_EXCEPTION();
} else if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
- zval *param = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->result.var);
+ zval *param = _get_zval_ptr_cv_undef_BP_VAR_W(opline->result.var EXECUTE_DATA_CC);
SAVE_OPLINE();
if (UNEXPECTED(!zend_verify_arg_type(EX(func), arg_num, param, NULL, CACHE_ADDR(opline->op2.num)) || EG(exception))) {
@@ -4788,7 +4663,7 @@ ZEND_VM_HANDLER(63, ZEND_RECV, NUM, ANY)
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_HANDLER(64, ZEND_RECV_INIT, NUM, CONST)
+ZEND_VM_HOT_HANDLER(64, ZEND_RECV_INIT, NUM, CONST)
{
USE_OPLINE
uint32_t arg_num;
@@ -4797,7 +4672,7 @@ ZEND_VM_HANDLER(64, ZEND_RECV_INIT, NUM, CONST)
ZEND_VM_REPEATABLE_OPCODE
arg_num = opline->op1.num;
- param = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->result.var);
+ param = _get_zval_ptr_cv_undef_BP_VAR_W(opline->result.var EXECUTE_DATA_CC);
if (arg_num > EX_NUM_ARGS()) {
ZVAL_COPY(param, EX_CONSTANT(opline->op2));
if (Z_OPT_CONSTANT_P(param)) {
@@ -4832,7 +4707,7 @@ ZEND_VM_HANDLER(164, ZEND_RECV_VARIADIC, NUM, ANY)
SAVE_OPLINE();
- params = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->result.var);
+ params = _get_zval_ptr_cv_undef_BP_VAR_W(opline->result.var EXECUTE_DATA_CC);
if (arg_num <= arg_count) {
zval *param;
@@ -4969,6 +4844,7 @@ ZEND_VM_HANDLER(68, ZEND_NEW, UNUSED|CLASS_FETCH|CONST|VAR, ANY, NUM)
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
@@ -4977,6 +4853,7 @@ ZEND_VM_HANDLER(68, ZEND_NEW, UNUSED|CLASS_FETCH|CONST|VAR, ANY, NUM)
ce = zend_fetch_class(NULL, opline->op1.num);
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else {
@@ -4985,13 +4862,13 @@ ZEND_VM_HANDLER(68, ZEND_NEW, UNUSED|CLASS_FETCH|CONST|VAR, ANY, NUM)
result = EX_VAR(opline->result.var);
if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
+ ZVAL_UNDEF(result);
HANDLE_EXCEPTION();
}
constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
if (constructor == NULL) {
if (UNEXPECTED(EG(exception))) {
- zval_ptr_dtor(result);
HANDLE_EXCEPTION();
}
@@ -5029,7 +4906,6 @@ ZEND_VM_HANDLER(110, ZEND_CLONE, CONST|TMPVAR|UNUSED|THIS|CV, ANY)
USE_OPLINE
zend_free_op free_op1;
zval *obj;
- zend_object *clone_obj;
zend_class_entry *ce, *scope;
zend_function *clone;
zend_object_clone_obj_t clone_call;
@@ -5038,8 +4914,7 @@ ZEND_VM_HANDLER(110, ZEND_CLONE, CONST|TMPVAR|UNUSED|THIS|CV, ANY)
obj = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_R);
if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- HANDLE_EXCEPTION();
+ ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
}
do {
@@ -5051,6 +4926,7 @@ ZEND_VM_HANDLER(110, ZEND_CLONE, CONST|TMPVAR|UNUSED|THIS|CV, ANY)
break;
}
}
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
GET_OP1_UNDEF_CV(obj, BP_VAR_R);
if (UNEXPECTED(EG(exception) != NULL)) {
@@ -5069,6 +4945,7 @@ ZEND_VM_HANDLER(110, ZEND_CLONE, CONST|TMPVAR|UNUSED|THIS|CV, ANY)
if (UNEXPECTED(clone_call == NULL)) {
zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
FREE_OP1();
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
@@ -5080,6 +4957,7 @@ ZEND_VM_HANDLER(110, ZEND_CLONE, CONST|TMPVAR|UNUSED|THIS|CV, ANY)
if (!zend_check_private(clone, scope, clone->common.function_name)) {
zend_throw_error(NULL, "Call to private %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : "");
FREE_OP1();
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) {
@@ -5089,17 +4967,13 @@ ZEND_VM_HANDLER(110, ZEND_CLONE, CONST|TMPVAR|UNUSED|THIS|CV, ANY)
if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
zend_throw_error(NULL, "Call to protected %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : "");
FREE_OP1();
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
}
}
- clone_obj = clone_call(obj);
- if (EXPECTED(EG(exception) == NULL)) {
- ZVAL_OBJ(EX_VAR(opline->result.var), clone_obj);
- } else {
- OBJ_RELEASE(clone_obj);
- }
+ ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj));
FREE_OP1();
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -5110,11 +4984,11 @@ ZEND_VM_HANDLER(99, ZEND_FETCH_CONSTANT, UNUSED, CONST, CONST_FETCH)
USE_OPLINE
zend_constant *c;
- SAVE_OPLINE();
-
if (EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))))) {
c = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
} else if ((c = zend_quick_get_constant(EX_CONSTANT(opline->op2) + 1, opline->extended_value)) == NULL) {
+ SAVE_OPLINE();
+
if ((opline->extended_value & IS_CONSTANT_UNQUALIFIED) != 0) {
char *actual = (char *)zend_memrchr(Z_STRVAL_P(EX_CONSTANT(opline->op2)), '\\', Z_STRLEN_P(EX_CONSTANT(opline->op2)));
if (!actual) {
@@ -5125,11 +4999,12 @@ ZEND_VM_HANDLER(99, ZEND_FETCH_CONSTANT, UNUSED, CONST, CONST_FETCH)
actual, Z_STRLEN_P(EX_CONSTANT(opline->op2)) - (actual - Z_STRVAL_P(EX_CONSTANT(opline->op2))));
}
/* non-qualified constant - allow text substitution */
- zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'",
+ zend_error(E_WARNING, "Use of undefined constant %s - assumed '%s' (this will throw an Error in a future version of PHP)",
Z_STRVAL_P(EX_VAR(opline->result.var)), Z_STRVAL_P(EX_VAR(opline->result.var)));
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
zend_throw_error(NULL, "Undefined constant '%s'", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else {
@@ -5172,6 +5047,7 @@ ZEND_VM_HANDLER(181, ZEND_FETCH_CLASS_CONSTANT, VAR|CONST|UNUSED|CLASS_FETCH, CO
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
@@ -5181,12 +5057,14 @@ ZEND_VM_HANDLER(181, ZEND_FETCH_CLASS_CONSTANT, VAR|CONST|UNUSED|CLASS_FETCH, CO
ce = zend_fetch_class(NULL, opline->op1.num);
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else {
ce = Z_CE_P(EX_VAR(opline->op1.var));
}
- if ((value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce)) != NULL) {
+ if (EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))) == ce)) {
+ value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)) + sizeof(void*));
break;
}
}
@@ -5195,12 +5073,14 @@ ZEND_VM_HANDLER(181, ZEND_FETCH_CLASS_CONSTANT, VAR|CONST|UNUSED|CLASS_FETCH, CO
scope = EX(func)->op_array.scope;
if (!zend_verify_const_access(c, scope)) {
zend_throw_error(NULL, "Cannot access %s const %s::%s", zend_visibility_string(Z_ACCESS_FLAGS(c->value)), ZSTR_VAL(ce->name), Z_STRVAL_P(EX_CONSTANT(opline->op2)));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
value = &c->value;
if (Z_CONSTANT_P(value)) {
zval_update_constant_ex(value, c->ce);
if (UNEXPECTED(EG(exception) != NULL)) {
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
}
@@ -5211,6 +5091,7 @@ ZEND_VM_HANDLER(181, ZEND_FETCH_CLASS_CONSTANT, VAR|CONST|UNUSED|CLASS_FETCH, CO
}
} else {
zend_throw_error(NULL, "Undefined class constant '%s'", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} while (0);
@@ -5323,7 +5204,7 @@ ZEND_VM_C_LABEL(num_index):
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-ZEND_VM_HANDLER(71, ZEND_INIT_ARRAY, CONST|TMP|VAR|UNUSED|CV, CONST|TMPVAR|UNUSED|NEXT|CV, ARRAY_INIT|REF)
+ZEND_VM_HANDLER(71, ZEND_INIT_ARRAY, CONST|TMP|VAR|CV, CONST|TMPVAR|UNUSED|NEXT|CV, ARRAY_INIT|REF)
{
zval *array;
uint32_t size;
@@ -5345,13 +5226,7 @@ ZEND_VM_HANDLER(71, ZEND_INIT_ARRAY, CONST|TMP|VAR|UNUSED|CV, CONST|TMPVAR|UNUSE
}
}
- if (OP1_TYPE == IS_UNUSED) {
- ZEND_VM_NEXT_OPCODE();
-#if !defined(ZEND_VM_SPEC) || (OP1_TYPE != IS_UNUSED)
- } else {
- ZEND_VM_DISPATCH_TO_HANDLER(ZEND_ADD_ARRAY_ELEMENT);
-#endif
- }
+ ZEND_VM_DISPATCH_TO_HANDLER(ZEND_ADD_ARRAY_ELEMENT);
}
ZEND_VM_HANDLER(21, ZEND_CAST, CONST|TMP|VAR|CV, ANY, TYPE)
@@ -5366,20 +5241,6 @@ ZEND_VM_HANDLER(21, ZEND_CAST, CONST|TMP|VAR|CV, ANY, TYPE)
switch (opline->extended_value) {
case IS_NULL:
- /* This code is taken from convert_to_null. However, it does not seems very useful,
- * because a conversion to null always results in the same value. This could only
- * be relevant if a cast_object handler for IS_NULL has some kind of side-effect. */
-#if 0
- if (OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV) {
- ZVAL_DEREF(expr);
- }
- if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->cast_object) {
- if (Z_OBJ_HT_P(expr)->cast_object(expr, result, IS_NULL) == SUCCESS) {
- break;
- }
- }
-#endif
-
ZVAL_NULL(result);
break;
case _IS_BOOL:
@@ -5432,7 +5293,7 @@ ZEND_VM_HANDLER(21, ZEND_CAST, CONST|TMP|VAR|CV, ANY, TYPE)
if (Z_TYPE_P(expr) != IS_ARRAY) {
object_init(result);
if (Z_TYPE_P(expr) != IS_NULL) {
- expr = zend_hash_add_new(Z_OBJPROP_P(result), CG(known_strings)[ZEND_STR_SCALAR], expr);
+ expr = zend_hash_add_new(Z_OBJPROP_P(result), ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
if (OP1_TYPE == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
} else {
@@ -5466,6 +5327,7 @@ ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMPVAR|CV, ANY, EVAL)
destroy_op_array(new_op_array);
efree_size(new_op_array, sizeof(zend_op_array));
}
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
if (RETURN_VALUE_USED(opline)) {
@@ -5477,6 +5339,7 @@ ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMPVAR|CV, ANY, EVAL)
if (RETURN_VALUE_USED(opline)) {
return_value = EX_VAR(opline->result.var);
+ ZVAL_NULL(return_value);
}
new_op_array->scope = EX(func)->op_array.scope;
@@ -5505,7 +5368,8 @@ ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMPVAR|CV, ANY, EVAL)
destroy_op_array(new_op_array);
efree_size(new_op_array, sizeof(zend_op_array));
if (UNEXPECTED(EG(exception) != NULL)) {
- zend_throw_exception_internal(NULL);
+ zend_rethrow_exception(execute_data);
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
} else if (RETURN_VALUE_USED(opline)) {
@@ -5515,39 +5379,36 @@ ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMPVAR|CV, ANY, EVAL)
ZEND_VM_CONTINUE();
}
-ZEND_VM_HANDLER(74, ZEND_UNSET_VAR, CONST|TMPVAR|CV, UNUSED, VAR_FETCH|ISSET)
+ZEND_VM_HANDLER(196, ZEND_UNSET_CV, CV, UNUSED)
{
USE_OPLINE
- zval tmp, *varname;
- HashTable *target_symbol_table;
- zend_free_op free_op1;
-
- SAVE_OPLINE();
- if (OP1_TYPE == IS_CV &&
- (opline->extended_value & ZEND_QUICK_SET)) {
- zval *var = EX_VAR(opline->op1.var);
+ zval *var = EX_VAR(opline->op1.var);
- if (Z_REFCOUNTED_P(var)) {
- zend_refcounted *garbage = Z_COUNTED_P(var);
+ if (Z_REFCOUNTED_P(var)) {
+ zend_refcounted *garbage = Z_COUNTED_P(var);
- if (!--GC_REFCOUNT(garbage)) {
- ZVAL_UNDEF(var);
- zval_dtor_func(garbage);
- } else {
- zval *z = var;
- ZVAL_DEREF(z);
- if (Z_COLLECTABLE_P(z) && UNEXPECTED(!Z_GC_INFO_P(z))) {
- ZVAL_UNDEF(var);
- gc_possible_root(Z_COUNTED_P(z));
- } else {
- ZVAL_UNDEF(var);
- }
- }
+ ZVAL_UNDEF(var);
+ SAVE_OPLINE();
+ if (!--GC_REFCOUNT(garbage)) {
+ zval_dtor_func(garbage);
} else {
- ZVAL_UNDEF(var);
+ gc_check_possible_root(garbage);
}
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ } else {
+ ZVAL_UNDEF(var);
}
+ ZEND_VM_NEXT_OPCODE();
+}
+
+ZEND_VM_HANDLER(74, ZEND_UNSET_VAR, CONST|TMPVAR|CV, UNUSED, VAR_FETCH)
+{
+ USE_OPLINE
+ zval tmp, *varname;
+ HashTable *target_symbol_table;
+ zend_free_op free_op1;
+
+ SAVE_OPLINE();
varname = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
@@ -5560,7 +5421,7 @@ ZEND_VM_HANDLER(74, ZEND_UNSET_VAR, CONST|TMPVAR|CV, UNUSED, VAR_FETCH|ISSET)
varname = &tmp;
}
- target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
+ target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK EXECUTE_DATA_CC);
zend_hash_del_ind(target_symbol_table, Z_STR_P(varname));
if (OP1_TYPE != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
@@ -5728,9 +5589,7 @@ ZEND_VM_HANDLER(76, ZEND_UNSET_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV)
SAVE_OPLINE();
container = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_UNSET);
if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- FREE_UNFETCHED_OP2();
- HANDLE_EXCEPTION();
+ ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
}
offset = GET_OP2_ZVAL_PTR(BP_VAR_R);
@@ -5748,7 +5607,9 @@ ZEND_VM_HANDLER(76, ZEND_UNSET_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV)
if (Z_OBJ_HT_P(container)->unset_property) {
Z_OBJ_HT_P(container)->unset_property(container, offset, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
} else {
- zend_error(E_NOTICE, "Trying to unset property of non-object");
+ zend_string *property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to unset property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
} while (0);
@@ -5762,7 +5623,6 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET_R, CONST|TMP|VAR|CV, JMP_ADDR)
USE_OPLINE
zend_free_op free_op1;
zval *array_ptr, *result;
- HashTable *fe_ht;
SAVE_OPLINE();
@@ -5776,12 +5636,9 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET_R, CONST|TMP|VAR|CV, JMP_ADDR)
Z_FE_POS_P(result) = 0;
FREE_OP1_IF_VAR();
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
} else if (OP1_TYPE != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
- HashPosition pos = 0;
- Bucket *p;
-
result = EX_VAR(opline->result.var);
ZVAL_COPY_VALUE(result, array_ptr);
if (OP1_TYPE != IS_TMP_VAR) {
@@ -5794,26 +5651,7 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET_R, CONST|TMP|VAR|CV, JMP_ADDR)
}
Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
}
- fe_ht = Z_OBJPROP_P(array_ptr);
- pos = 0;
- p = fe_ht->arData;
- while (1) {
- if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
- FREE_OP1_IF_VAR();
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
- }
- if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
- EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
- (UNEXPECTED(!p->key) ||
- EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) {
- break;
- }
- pos++;
- p++;
- }
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
+ Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0);
FREE_OP1_IF_VAR();
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -5830,7 +5668,7 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET_R, CONST|TMP|VAR|CV, JMP_ADDR)
if (!EG(exception)) {
zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
}
- zend_throw_exception_internal(NULL);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
@@ -5840,6 +5678,7 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET_R, CONST|TMP|VAR|CV, JMP_ADDR)
if (UNEXPECTED(EG(exception) != NULL)) {
OBJ_RELEASE(&iter->std);
FREE_OP1();
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
}
@@ -5849,6 +5688,7 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET_R, CONST|TMP|VAR|CV, JMP_ADDR)
if (UNEXPECTED(EG(exception) != NULL)) {
OBJ_RELEASE(&iter->std);
FREE_OP1();
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
iter->index = -1; /* will be set to 0 before using next handler */
@@ -5857,10 +5697,13 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET_R, CONST|TMP|VAR|CV, JMP_ADDR)
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
FREE_OP1();
- if (is_empty) {
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
+ if (UNEXPECTED(EG(exception))) {
+ HANDLE_EXCEPTION();
+ } else if (is_empty) {
+ ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_CONTINUE();
} else {
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
}
}
} else {
@@ -5877,9 +5720,6 @@ ZEND_VM_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR)
USE_OPLINE
zend_free_op free_op1;
zval *array_ptr, *array_ref;
- HashTable *fe_ht;
- HashPosition pos = 0;
- Bucket *p;
SAVE_OPLINE();
@@ -5910,26 +5750,10 @@ ZEND_VM_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR)
} else {
SEPARATE_ARRAY(array_ptr);
}
- fe_ht = Z_ARRVAL_P(array_ptr);
- p = fe_ht->arData;
- while (1) {
- if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
- FREE_OP1_VAR_PTR();
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
- }
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
- EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) {
- break;
- }
- pos++;
- p++;
- }
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
+ Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
FREE_OP1_VAR_PTR();
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
} else if (OP1_TYPE != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
if (OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV) {
@@ -5950,25 +5774,7 @@ ZEND_VM_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR)
}
Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
}
- fe_ht = Z_OBJPROP_P(array_ptr);
- p = fe_ht->arData;
- while (1) {
- if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
- FREE_OP1_VAR_PTR();
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
- }
- if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
- EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
- (UNEXPECTED(!p->key) ||
- EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) {
- break;
- }
- pos++;
- p++;
- }
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
+ Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0);
FREE_OP1_VAR_PTR();
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -5986,7 +5792,7 @@ ZEND_VM_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR)
if (!EG(exception)) {
zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
}
- zend_throw_exception_internal(NULL);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
@@ -6000,6 +5806,7 @@ ZEND_VM_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR)
} else {
FREE_OP1();
}
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
}
@@ -6013,6 +5820,7 @@ ZEND_VM_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR)
} else {
FREE_OP1();
}
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
iter->index = -1; /* will be set to 0 before using next handler */
@@ -6025,10 +5833,13 @@ ZEND_VM_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR)
} else {
FREE_OP1();
}
- if (is_empty) {
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
+ if (UNEXPECTED(EG(exception))) {
+ HANDLE_EXCEPTION();
+ } else if (is_empty) {
+ ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_CONTINUE();
} else {
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
}
}
} else {
@@ -6067,20 +5878,19 @@ ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY, JMP_ADDR)
}
value = &p->val;
value_type = Z_TYPE_INFO_P(value);
- if (value_type == IS_UNDEF) {
- pos++;
- p++;
- continue;
- } else if (UNEXPECTED(value_type == IS_INDIRECT)) {
- value = Z_INDIRECT_P(value);
- value_type = Z_TYPE_INFO_P(value);
- if (UNEXPECTED(value_type == IS_UNDEF)) {
- pos++;
- p++;
- continue;
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ if (UNEXPECTED(value_type == IS_INDIRECT)) {
+ value = Z_INDIRECT_P(value);
+ value_type = Z_TYPE_INFO_P(value);
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ break;
+ }
+ } else {
+ break;
}
}
- break;
+ pos++;
+ p++;
}
Z_FE_POS_P(array) = pos + 1;
if (opline->result_type & (IS_TMP_VAR|IS_CV)) {
@@ -6107,23 +5917,18 @@ ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY, JMP_ADDR)
value = &p->val;
value_type = Z_TYPE_INFO_P(value);
- if (UNEXPECTED(value_type == IS_UNDEF)) {
- pos++;
- p++;
- continue;
- } else if (UNEXPECTED(value_type == IS_INDIRECT)) {
- value = Z_INDIRECT_P(value);
- value_type = Z_TYPE_INFO_P(value);
- if (UNEXPECTED(value_type == IS_UNDEF)) {
- pos++;
- p++;
- continue;
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ if (UNEXPECTED(value_type == IS_INDIRECT)) {
+ value = Z_INDIRECT_P(value);
+ value_type = Z_TYPE_INFO_P(value);
+ if (EXPECTED(value_type != IS_UNDEF)
+ && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS)) {
+ break;
+ }
+ } else {
+ break;
}
}
- if (UNEXPECTED(!p->key) ||
- EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS)) {
- break;
- }
pos++;
p++;
}
@@ -6140,20 +5945,8 @@ ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY, JMP_ADDR)
ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
}
}
- while (1) {
- pos++;
- if (pos >= fe_ht->nNumUsed) {
- pos = HT_INVALID_IDX;
- break;
- }
- p++;
- if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
- EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
- (UNEXPECTED(!p->key) ||
- EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS))) {
- break;
- }
+ if (++pos >= fe_ht->nNumUsed) {
+ pos = HT_INVALID_IDX;
}
EG(ht_iterators)[Z_FE_ITER_P(array)].pos = pos;
} else {
@@ -6162,11 +5955,13 @@ ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY, JMP_ADDR)
* In case that ever happens we need an additional flag. */
iter->funcs->move_forward(iter);
if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
if (UNEXPECTED(iter->funcs->valid(iter) == FAILURE)) {
/* reached end of iteration */
if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
ZEND_VM_C_GOTO(fe_fetch_r_exit);
@@ -6174,6 +5969,7 @@ ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY, JMP_ADDR)
}
value = iter->funcs->get_current_data(iter);
if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
if (!value) {
@@ -6184,6 +5980,7 @@ ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY, JMP_ADDR)
if (iter->funcs->get_current_key) {
iter->funcs->get_current_key(iter, EX_VAR(opline->result.var));
if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
} else {
@@ -6195,6 +5992,7 @@ ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY, JMP_ADDR)
} else {
zend_error(E_WARNING, "Invalid argument supplied for foreach()");
if (UNEXPECTED(EG(exception))) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
ZEND_VM_C_LABEL(fe_fetch_r_exit):
@@ -6203,7 +6001,7 @@ ZEND_VM_C_LABEL(fe_fetch_r_exit):
}
if (EXPECTED(OP2_TYPE == IS_CV)) {
- zval *variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op2.var);
+ zval *variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
zend_assign_to_variable(variable_ptr, value, IS_CV);
} else {
zval *res = EX_VAR(opline->op2.var);
@@ -6214,7 +6012,7 @@ ZEND_VM_C_LABEL(fe_fetch_r_exit):
GC_REFCOUNT(gc)++;
}
}
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
@@ -6242,20 +6040,19 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
}
value = &p->val;
value_type = Z_TYPE_INFO_P(value);
- if (UNEXPECTED(value_type == IS_UNDEF)) {
- pos++;
- p++;
- continue;
- } else if (UNEXPECTED(value_type == IS_INDIRECT)) {
- value = Z_INDIRECT_P(value);
- value_type = Z_TYPE_INFO_P(value);
- if (UNEXPECTED(value_type == IS_UNDEF)) {
- pos++;
- p++;
- continue;
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ if (UNEXPECTED(value_type == IS_INDIRECT)) {
+ value = Z_INDIRECT_P(value);
+ value_type = Z_TYPE_INFO_P(value);
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ break;
+ }
+ } else {
+ break;
}
}
- break;
+ pos++;
+ p++;
}
if (opline->result_type & (IS_TMP_VAR|IS_CV)) {
if (!p->key) {
@@ -6264,18 +6061,8 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
}
}
- while (1) {
- pos++;
- if (pos >= fe_ht->nNumUsed) {
- pos = HT_INVALID_IDX;
- break;
- }
- p++;
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
- EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) {
- break;
- }
+ if (++pos >= fe_ht->nNumUsed) {
+ pos = HT_INVALID_IDX;
}
EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
} else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) {
@@ -6295,23 +6082,18 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
value = &p->val;
value_type = Z_TYPE_INFO_P(value);
- if (UNEXPECTED(value_type == IS_UNDEF)) {
- pos++;
- p++;
- continue;
- } else if (UNEXPECTED(value_type == IS_INDIRECT)) {
- value = Z_INDIRECT_P(value);
- value_type = Z_TYPE_INFO_P(value);
- if (UNEXPECTED(value_type == IS_UNDEF)) {
- pos++;
- p++;
- continue;
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ if (UNEXPECTED(value_type == IS_INDIRECT)) {
+ value = Z_INDIRECT_P(value);
+ value_type = Z_TYPE_INFO_P(value);
+ if (EXPECTED(value_type != IS_UNDEF)
+ && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS)) {
+ break;
+ }
+ } else {
+ break;
}
}
- if (UNEXPECTED(!p->key) ||
- EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS)) {
- break;
- }
pos++;
p++;
}
@@ -6328,20 +6110,8 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
}
}
- while (1) {
- pos++;
- if (pos >= fe_ht->nNumUsed) {
- pos = HT_INVALID_IDX;
- break;
- }
- p++;
- if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
- EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
- (UNEXPECTED(!p->key) ||
- EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS))) {
- break;
- }
+ if (++pos >= fe_ht->nNumUsed) {
+ pos = HT_INVALID_IDX;
}
EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
} else {
@@ -6350,11 +6120,13 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
* In case that ever happens we need an additional flag. */
iter->funcs->move_forward(iter);
if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
if (UNEXPECTED(iter->funcs->valid(iter) == FAILURE)) {
/* reached end of iteration */
if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
ZEND_VM_C_GOTO(fe_fetch_w_exit);
@@ -6362,6 +6134,7 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
}
value = iter->funcs->get_current_data(iter);
if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
if (!value) {
@@ -6372,6 +6145,7 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
if (iter->funcs->get_current_key) {
iter->funcs->get_current_key(iter, EX_VAR(opline->result.var));
if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
} else {
@@ -6383,6 +6157,7 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
} else {
zend_error(E_WARNING, "Invalid argument supplied for foreach()");
if (UNEXPECTED(EG(exception))) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
ZEND_VM_C_LABEL(fe_fetch_w_exit):
@@ -6398,7 +6173,7 @@ ZEND_VM_C_LABEL(fe_fetch_w_exit):
ZVAL_COPY_VALUE_EX(ref, value, gc, value_type);
}
if (EXPECTED(OP2_TYPE == IS_CV)) {
- zval *variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op2.var);
+ zval *variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(variable_ptr != value)) {
zend_reference *ref;
@@ -6411,65 +6186,69 @@ ZEND_VM_C_LABEL(fe_fetch_w_exit):
Z_ADDREF_P(value);
ZVAL_REF(EX_VAR(opline->op2.var), Z_REF_P(value));
}
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-ZEND_VM_HANDLER(114, ZEND_ISSET_ISEMPTY_VAR, CONST|TMPVAR|CV, UNUSED, VAR_FETCH|ISSET)
+ZEND_VM_HANDLER(197, ZEND_ISSET_ISEMPTY_CV, CV, UNUSED, ISSET)
{
USE_OPLINE
zval *value;
int result;
- if (OP1_TYPE == IS_CV &&
- (opline->extended_value & ZEND_QUICK_SET)) {
- value = EX_VAR(opline->op1.var);
- if (opline->extended_value & ZEND_ISSET) {
- result =
- Z_TYPE_P(value) > IS_NULL &&
- (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
- } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
- SAVE_OPLINE();
- result = !i_zend_is_true(value);
- if (UNEXPECTED(EG(exception))) {
- HANDLE_EXCEPTION();
- }
- }
- ZEND_VM_SMART_BRANCH(result, 0);
- ZVAL_BOOL(EX_VAR(opline->result.var), result);
- ZEND_VM_SET_NEXT_OPCODE(opline + 1);
- ZEND_VM_CONTINUE();
- } else {
- zend_free_op free_op1;
- zval tmp, *varname;
- HashTable *target_symbol_table;
-
+ value = EX_VAR(opline->op1.var);
+ if (opline->extended_value & ZEND_ISSET) {
+ result =
+ Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
SAVE_OPLINE();
- varname = GET_OP1_ZVAL_PTR(BP_VAR_IS);
- ZVAL_UNDEF(&tmp);
- if (OP1_TYPE != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
- ZVAL_STR(&tmp, zval_get_string(varname));
- varname = &tmp;
+ result = !i_zend_is_true(value);
+ if (UNEXPECTED(EG(exception))) {
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
+ HANDLE_EXCEPTION();
}
+ }
+ ZEND_VM_SMART_BRANCH(result, 0);
+ ZVAL_BOOL(EX_VAR(opline->result.var), result);
+ ZEND_VM_SET_NEXT_OPCODE(opline + 1);
+ ZEND_VM_CONTINUE();
+}
- target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
- value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
+ZEND_VM_HANDLER(114, ZEND_ISSET_ISEMPTY_VAR, CONST|TMPVAR|CV, UNUSED, VAR_FETCH|ISSET)
+{
+ USE_OPLINE
+ zval *value;
+ int result;
+ zend_free_op free_op1;
+ zval tmp, *varname;
+ HashTable *target_symbol_table;
- if (OP1_TYPE != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
- zend_string_release(Z_STR(tmp));
- }
- FREE_OP1();
+ SAVE_OPLINE();
+ varname = GET_OP1_ZVAL_PTR(BP_VAR_IS);
+ ZVAL_UNDEF(&tmp);
+ if (OP1_TYPE != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
+ ZVAL_STR(&tmp, zval_get_string(varname));
+ varname = &tmp;
+ }
- if (opline->extended_value & ZEND_ISSET) {
- result = value && Z_TYPE_P(value) > IS_NULL &&
- (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
- } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
- result = !value || !i_zend_is_true(value);
- }
+ target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK EXECUTE_DATA_CC);
+ value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
- ZEND_VM_SMART_BRANCH(result, 1);
- ZVAL_BOOL(EX_VAR(opline->result.var), result);
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ if (OP1_TYPE != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
+ zend_string_release(Z_STR(tmp));
+ }
+ FREE_OP1();
+
+ if (opline->extended_value & ZEND_ISSET) {
+ result = value && Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ result = !value || !i_zend_is_true(value);
}
+
+ ZEND_VM_SMART_BRANCH(result, 1);
+ ZVAL_BOOL(EX_VAR(opline->result.var), result);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
ZEND_VM_HANDLER(180, ZEND_ISSET_ISEMPTY_STATIC_PROP, CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR, ISSET)
@@ -6503,6 +6282,7 @@ ZEND_VM_HANDLER(180, ZEND_ISSET_ISEMPTY_STATIC_PROP, CONST|TMPVAR|CV, UNUSED|CLA
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
@@ -6516,13 +6296,16 @@ ZEND_VM_HANDLER(180, ZEND_ISSET_ISEMPTY_STATIC_PROP, CONST|TMPVAR|CV, UNUSED|CLA
zend_string_release(Z_STR(tmp));
}
FREE_OP1();
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else {
ce = Z_CE_P(EX_VAR(opline->op2.var));
}
if (OP1_TYPE == IS_CONST &&
- (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))) == ce)) {
+
+ value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
@@ -6701,9 +6484,7 @@ ZEND_VM_HANDLER(148, ZEND_ISSET_ISEMPTY_PROP_OBJ, CONST|TMPVAR|UNUSED|THIS|CV, C
container = GET_OP1_OBJ_ZVAL_PTR(BP_VAR_IS);
if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- FREE_UNFETCHED_OP2();
- HANDLE_EXCEPTION();
+ ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
}
offset = GET_OP2_ZVAL_PTR(BP_VAR_R);
@@ -6720,7 +6501,9 @@ ZEND_VM_HANDLER(148, ZEND_ISSET_ISEMPTY_PROP_OBJ, CONST|TMPVAR|UNUSED|THIS|CV, C
}
}
if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
- zend_error(E_NOTICE, "Trying to check property of non-object");
+ zend_string *property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to check property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
ZEND_VM_C_LABEL(isset_no_object):
result = ((opline->extended_value & ZEND_ISSET) == 0);
} else {
@@ -6775,7 +6558,7 @@ ZEND_VM_HANDLER(57, ZEND_BEGIN_SILENCE, ANY, ANY)
do {
EG(error_reporting) = 0;
if (!EG(error_reporting_ini_entry)) {
- zend_ini_entry *p = zend_hash_find_ptr(EG(ini_directives), CG(known_strings)[ZEND_STR_ERROR_REPORTING]);
+ zend_ini_entry *p = zend_hash_find_ptr(EG(ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING));
if (p) {
EG(error_reporting_ini_entry) = p;
} else {
@@ -6787,7 +6570,7 @@ ZEND_VM_HANDLER(57, ZEND_BEGIN_SILENCE, ANY, ANY)
ALLOC_HASHTABLE(EG(modified_ini_directives));
zend_hash_init(EG(modified_ini_directives), 8, NULL, NULL, 0);
}
- if (EXPECTED(zend_hash_add_ptr(EG(modified_ini_directives), CG(known_strings)[ZEND_STR_ERROR_REPORTING], EG(error_reporting_ini_entry)) != NULL)) {
+ if (EXPECTED(zend_hash_add_ptr(EG(modified_ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING), EG(error_reporting_ini_entry)) != NULL)) {
EG(error_reporting_ini_entry)->orig_value = EG(error_reporting_ini_entry)->value;
EG(error_reporting_ini_entry)->orig_modifiable = EG(error_reporting_ini_entry)->modifiable;
EG(error_reporting_ini_entry)->modified = 1;
@@ -6814,6 +6597,7 @@ ZEND_VM_HANDLER(152, ZEND_JMP_SET, CONST|TMP|VAR|CV, JMP_ADDR)
zend_free_op free_op1;
zval *value;
zval *ref = NULL;
+ int ret;
SAVE_OPLINE();
value = GET_OP1_ZVAL_PTR(BP_VAR_R);
@@ -6824,7 +6608,16 @@ ZEND_VM_HANDLER(152, ZEND_JMP_SET, CONST|TMP|VAR|CV, JMP_ADDR)
}
value = Z_REFVAL_P(value);
}
- if (i_zend_is_true(value)) {
+
+ ret = i_zend_is_true(value);
+
+ if (UNEXPECTED(EG(exception))) {
+ FREE_OP1();
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
+ HANDLE_EXCEPTION();
+ }
+
+ if (ret) {
zval *result = EX_VAR(opline->result.var);
ZVAL_COPY_VALUE(result, value);
@@ -6841,11 +6634,12 @@ ZEND_VM_HANDLER(152, ZEND_JMP_SET, CONST|TMP|VAR|CV, JMP_ADDR)
Z_ADDREF_P(result);
}
}
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_CONTINUE();
}
FREE_OP1();
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
}
ZEND_VM_HANDLER(169, ZEND_COALESCE, CONST|TMP|VAR|CV, JMP_ADDR)
@@ -6881,14 +6675,15 @@ ZEND_VM_HANDLER(169, ZEND_COALESCE, CONST|TMP|VAR|CV, JMP_ADDR)
Z_ADDREF_P(result);
}
}
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_CONTINUE();
}
FREE_OP1();
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_HANDLER(22, ZEND_QM_ASSIGN, CONST|TMP|VAR|CV, ANY)
+ZEND_VM_HOT_HANDLER(22, ZEND_QM_ASSIGN, CONST|TMP|VAR|CV, ANY)
{
USE_OPLINE
zend_free_op free_op1;
@@ -7089,6 +6884,7 @@ ZEND_VM_C_LABEL(try_instanceof):
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
FREE_OP1();
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else {
@@ -7238,7 +7034,7 @@ ZEND_VM_HELPER(zend_dispatch_try_catch_finally_helper, ANY, ANY, uint32_t try_ca
/* Uncaught exception */
cleanup_live_vars(execute_data, op_num, 0);
if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
zend_generator_close(generator, 1);
ZEND_VM_RETURN();
} else {
@@ -7248,7 +7044,8 @@ ZEND_VM_HELPER(zend_dispatch_try_catch_finally_helper, ANY, ANY, uint32_t try_ca
ZEND_VM_HANDLER(149, ZEND_HANDLE_EXCEPTION, ANY, ANY)
{
- uint32_t throw_op_num = EG(opline_before_exception) - EX(func)->op_array.opcodes;
+ const zend_op *throw_op = EG(opline_before_exception);
+ uint32_t throw_op_num = throw_op - EX(func)->op_array.opcodes;
int i, current_try_catch_offset = -1;
{
@@ -7277,6 +7074,25 @@ ZEND_VM_HANDLER(149, ZEND_HANDLE_EXCEPTION, ANY, ANY)
cleanup_unfinished_calls(execute_data, throw_op_num);
+ if (throw_op->result_type & (IS_VAR | IS_TMP_VAR)) {
+ switch (throw_op->opcode) {
+ case ZEND_ADD_ARRAY_ELEMENT:
+ case ZEND_ROPE_INIT:
+ case ZEND_ROPE_ADD:
+ break; /* exception while building structures, live range handling will free those */
+
+ case ZEND_FETCH_CLASS:
+ case ZEND_DECLARE_CLASS:
+ case ZEND_DECLARE_INHERITED_CLASS:
+ case ZEND_DECLARE_ANON_CLASS:
+ case ZEND_DECLARE_ANON_INHERITED_CLASS:
+ break; /* return value is zend_class_entry pointer */
+
+ default:
+ zval_ptr_dtor_nogc(EX_VAR(throw_op->result.var));
+ }
+ }
+
ZEND_VM_DISPATCH_TO_HELPER(zend_dispatch_try_catch_finally_helper, try_catch_offset, current_try_catch_offset, op_num, throw_op_num);
}
@@ -7303,7 +7119,7 @@ ZEND_VM_HANDLER(150, ZEND_USER_OPCODE, ANY, ANY)
ZEND_VM_CONTINUE();
case ZEND_USER_OPCODE_RETURN:
if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
zend_generator_close(generator, 1);
ZEND_VM_RETURN();
} else {
@@ -7360,8 +7176,6 @@ ZEND_VM_HANDLER(153, ZEND_DECLARE_LAMBDA_FUNCTION, CONST, UNUSED)
zval *object;
zend_class_entry *called_scope;
- SAVE_OPLINE();
-
zfunc = zend_hash_find(EG(function_table), Z_STR_P(EX_CONSTANT(opline->op1)));
ZEND_ASSERT(zfunc != NULL && Z_FUNC_P(zfunc)->type == ZEND_USER_FUNCTION);
@@ -7380,7 +7194,7 @@ ZEND_VM_HANDLER(153, ZEND_DECLARE_LAMBDA_FUNCTION, CONST, UNUSED)
zend_create_closure(EX_VAR(opline->result.var), Z_FUNC_P(zfunc),
EX(func)->op_array.scope, called_scope, object);
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
}
ZEND_VM_HANDLER(156, ZEND_SEPARATE, VAR, UNUSED)
@@ -7402,13 +7216,14 @@ ZEND_VM_HANDLER(160, ZEND_YIELD, CONST|TMP|VAR|CV|UNUSED, CONST|TMP|VAR|CV|UNUSE
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
FREE_UNFETCHED_OP2();
FREE_UNFETCHED_OP1();
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -7538,7 +7353,7 @@ ZEND_VM_HANDLER(142, ZEND_YIELD_FROM, CONST|TMP|VAR|CV, ANY)
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
zval *val;
zend_free_op free_op1;
@@ -7549,6 +7364,7 @@ ZEND_VM_HANDLER(142, ZEND_YIELD_FROM, CONST|TMP|VAR|CV, ANY)
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
FREE_OP1();
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -7574,6 +7390,7 @@ ZEND_VM_HANDLER(142, ZEND_YIELD_FROM, CONST|TMP|VAR|CV, ANY)
if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
zval_ptr_dtor(val);
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
zend_generator_yield_from(generator, new_gen);
@@ -7581,6 +7398,7 @@ ZEND_VM_HANDLER(142, ZEND_YIELD_FROM, CONST|TMP|VAR|CV, ANY)
} else if (UNEXPECTED(new_gen->execute_data == NULL)) {
zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
zval_ptr_dtor(val);
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
if (RETURN_VALUE_USED(opline)) {
@@ -7596,6 +7414,7 @@ ZEND_VM_HANDLER(142, ZEND_YIELD_FROM, CONST|TMP|VAR|CV, ANY)
if (!EG(exception)) {
zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
}
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -7604,6 +7423,7 @@ ZEND_VM_HANDLER(142, ZEND_YIELD_FROM, CONST|TMP|VAR|CV, ANY)
iter->funcs->rewind(iter);
if (UNEXPECTED(EG(exception) != NULL)) {
OBJ_RELEASE(&iter->std);
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
}
@@ -7612,6 +7432,7 @@ ZEND_VM_HANDLER(142, ZEND_YIELD_FROM, CONST|TMP|VAR|CV, ANY)
}
} else {
zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -7692,7 +7513,7 @@ ZEND_VM_HANDLER(163, ZEND_FAST_RET, ANY, TRY_CATCH)
ZEND_VM_DISPATCH_TO_HELPER(zend_dispatch_try_catch_finally_helper, try_catch_offset, current_try_catch_offset, op_num, current_op_num);
}
-ZEND_VM_HANDLER(168, ZEND_BIND_GLOBAL, CV, CONST)
+ZEND_VM_HOT_HANDLER(168, ZEND_BIND_GLOBAL, CV, CONST)
{
USE_OPLINE
zend_free_op free_op1, free_op2;
@@ -7758,18 +7579,19 @@ ZEND_VM_C_LABEL(check_indirect):
variable_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) {
- uint32_t refcnt = Z_DELREF_P(variable_ptr);
+ zend_refcounted *ref = Z_COUNTED_P(variable_ptr);
+ uint32_t refcnt = --GC_REFCOUNT(ref);
if (EXPECTED(variable_ptr != value)) {
if (refcnt == 0) {
SAVE_OPLINE();
- zval_dtor_func(Z_COUNTED_P(variable_ptr));
+ zval_dtor_func(ref);
if (UNEXPECTED(EG(exception))) {
ZVAL_NULL(variable_ptr);
HANDLE_EXCEPTION();
}
} else {
- GC_ZVAL_CHECK_POSSIBLE_ROOT(variable_ptr);
+ gc_check_possible_root(ref);
}
}
}
@@ -7785,20 +7607,26 @@ ZEND_VM_HANDLER(121, ZEND_STRLEN, CONST|TMPVAR|CV, ANY)
zval *value;
zend_free_op free_op1;
- SAVE_OPLINE();
value = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
-ZEND_VM_C_LABEL(try_strlen):
if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
+ FREE_OP1();
+ ZEND_VM_NEXT_OPCODE();
} else {
zend_bool strict;
- if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
- value = GET_OP1_UNDEF_CV(value, BP_VAR_R);
- }
if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
value = Z_REFVAL_P(value);
- ZEND_VM_C_GOTO(try_strlen);
+ if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
+ FREE_OP1();
+ ZEND_VM_NEXT_OPCODE();
+ }
+ }
+
+ SAVE_OPLINE();
+ if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
+ value = GET_OP1_UNDEF_CV(value, BP_VAR_R);
}
strict = EX_USES_STRICT_TYPES();
do {
@@ -7832,14 +7660,7 @@ ZEND_VM_HANDLER(123, ZEND_TYPE_CHECK, CONST|TMP|VAR|CV, ANY, TYPE)
SAVE_OPLINE();
value = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R);
if (EXPECTED(Z_TYPE_P(value) == opline->extended_value)) {
- if (OP1_TYPE != IS_CONST && UNEXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
- zend_class_entry *ce = Z_OBJCE_P(value);
-
- if (EXPECTED(ZSTR_LEN(ce->name) != sizeof("__PHP_Incomplete_Class") - 1) ||
- EXPECTED(memcmp(ZSTR_VAL(ce->name), "__PHP_Incomplete_Class", sizeof("__PHP_Incomplete_Class") - 1) != 0)) {
- result = 1;
- }
- } else if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) {
+ if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) {
const char *type_name = zend_rsrc_list_get_rsrc_type(Z_RES_P(value));
if (EXPECTED(type_name != NULL)) {
@@ -7899,14 +7720,15 @@ ZEND_VM_HANDLER(157, ZEND_FETCH_CLASS_NAME, ANY, ANY, CLASS_FETCH)
zend_class_entry *called_scope, *scope;
USE_OPLINE
- SAVE_OPLINE();
fetch_type = opline->extended_value;
scope = EX(func)->op_array.scope;
if (UNEXPECTED(scope == NULL)) {
+ SAVE_OPLINE();
zend_throw_error(NULL, "Cannot use \"%s\" when no class scope is active",
fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
@@ -7916,8 +7738,10 @@ ZEND_VM_HANDLER(157, ZEND_FETCH_CLASS_NAME, ANY, ANY, CLASS_FETCH)
break;
case ZEND_FETCH_CLASS_PARENT:
if (UNEXPECTED(scope->parent == NULL)) {
+ SAVE_OPLINE();
zend_throw_error(NULL,
"Cannot use \"parent\" when current class scope has no parent");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
@@ -7945,6 +7769,8 @@ ZEND_VM_HANDLER(158, ZEND_CALL_TRAMPOLINE, ANY, ANY)
zend_execute_data *call;
USE_OPLINE
+ SAVE_OPLINE();
+
args = emalloc(sizeof(zend_array));
zend_hash_init(args, num_args, NULL, ZVAL_PTR_DTOR, 0);
if (num_args) {
@@ -7960,7 +7786,6 @@ ZEND_VM_HANDLER(158, ZEND_CALL_TRAMPOLINE, ANY, ANY)
} ZEND_HASH_FILL_END();
}
- SAVE_OPLINE();
call = execute_data;
execute_data = EG(current_execute_data) = EX(prev_execute_data);
@@ -8045,10 +7870,7 @@ ZEND_VM_C_LABEL(call_trampoline_end):
zend_vm_stack_free_call_frame(call);
if (UNEXPECTED(EG(exception) != NULL)) {
- zend_throw_exception_internal(NULL);
- if (RETURN_VALUE_USED(opline)) {
- zval_ptr_dtor(EX_VAR(opline->result.var));
- }
+ zend_rethrow_exception(execute_data);
HANDLE_EXCEPTION_LEAVE();
}
@@ -8096,7 +7918,6 @@ ZEND_VM_HANDLER(183, ZEND_BIND_STATIC, CV, CONST, REF)
zval *value;
zval *variable_ptr;
- SAVE_OPLINE();
variable_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
zval_ptr_dtor(variable_ptr);
@@ -8114,6 +7935,7 @@ ZEND_VM_HANDLER(183, ZEND_BIND_STATIC, CV, CONST, REF)
if (opline->extended_value) {
if (Z_CONSTANT_P(value)) {
+ SAVE_OPLINE();
if (UNEXPECTED(zval_update_constant_ex(value, EX(func)->op_array.scope) != SUCCESS)) {
ZVAL_NULL(variable_ptr);
HANDLE_EXCEPTION();
@@ -8135,7 +7957,7 @@ ZEND_VM_HANDLER(183, ZEND_BIND_STATIC, CV, CONST, REF)
ZVAL_COPY(variable_ptr, value);
}
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
}
ZEND_VM_HANDLER(184, ZEND_FETCH_THIS, UNUSED, UNUSED)
@@ -8149,9 +7971,7 @@ ZEND_VM_HANDLER(184, ZEND_FETCH_THIS, UNUSED, UNUSED)
Z_ADDREF_P(result);
ZEND_VM_NEXT_OPCODE();
} else {
- SAVE_OPLINE();
- zend_throw_error(NULL, "Using $this when not in object context");
- HANDLE_EXCEPTION();
+ ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper);
}
}
@@ -8207,7 +8027,300 @@ ZEND_VM_HANDLER(51, ZEND_MAKE_REF, VAR|CV, UNUSED)
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_ADD, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_ADD_LONG_NO_OVERFLOW, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST,COMMUTATIVE))
+ZEND_VM_HANDLER(187, ZEND_SWITCH_LONG, CONST|TMPVAR|CV, CONST, JMP_ADDR)
+{
+ USE_OPLINE
+ zend_free_op free_op1, free_op2;
+ zval *op, *jump_zv;
+ HashTable *jumptable;
+
+ op = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
+ jumptable = Z_ARRVAL_P(GET_OP2_ZVAL_PTR(BP_VAR_R));
+
+ if (Z_TYPE_P(op) != IS_LONG) {
+ ZVAL_DEREF(op);
+ if (Z_TYPE_P(op) != IS_LONG) {
+ /* Wrong type, fall back to ZEND_CASE chain */
+ ZEND_VM_NEXT_OPCODE();
+ }
+ }
+
+ jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
+ if (jump_zv != NULL) {
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
+ ZEND_VM_CONTINUE();
+ } else {
+ /* default */
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
+ ZEND_VM_CONTINUE();
+ }
+}
+
+ZEND_VM_HANDLER(188, ZEND_SWITCH_STRING, CONST|TMPVAR|CV, CONST, JMP_ADDR)
+{
+ USE_OPLINE
+ zend_free_op free_op1, free_op2;
+ zval *op, *jump_zv;
+ HashTable *jumptable;
+
+ op = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
+ jumptable = Z_ARRVAL_P(GET_OP2_ZVAL_PTR(BP_VAR_R));
+
+ if (Z_TYPE_P(op) != IS_STRING) {
+ ZVAL_DEREF(op);
+ if (Z_TYPE_P(op) != IS_STRING) {
+ /* Wrong type, fall back to ZEND_CASE chain */
+ ZEND_VM_NEXT_OPCODE();
+ }
+ }
+
+ jump_zv = zend_hash_find(jumptable, Z_STR_P(op));
+ if (jump_zv != NULL) {
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
+ ZEND_VM_CONTINUE();
+ } else {
+ /* default */
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
+ ZEND_VM_CONTINUE();
+ }
+}
+
+ZEND_VM_HANDLER(189, ZEND_IN_ARRAY, CONST|TMP|VAR|CV, CONST, NUM)
+{
+ USE_OPLINE
+ zend_free_op free_op1;
+ zval *op1;
+ HashTable *ht = Z_ARRVAL_P(EX_CONSTANT(opline->op2));
+ int result;
+
+ SAVE_OPLINE();
+ op1 = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R);
+ if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
+ result = zend_hash_exists(ht, Z_STR_P(op1));
+ } else if (opline->extended_value) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ result = zend_hash_index_exists(ht, Z_LVAL_P(op1));
+ } else {
+ result = 0;
+ }
+ } else if (Z_TYPE_P(op1) <= IS_FALSE) {
+ result = zend_hash_exists(ht, ZSTR_EMPTY_ALLOC());
+ } else {
+ zend_string *key;
+ zval key_tmp, result_tmp;
+
+ result = 0;
+ ZEND_HASH_FOREACH_STR_KEY(ht, key) {
+ ZVAL_STR(&key_tmp, key);
+ compare_function(&result_tmp, op1, &key_tmp);
+ if (Z_LVAL(result_tmp) == 0) {
+ result = 1;
+ break;
+ }
+ } ZEND_HASH_FOREACH_END();
+ }
+ FREE_OP1();
+ ZEND_VM_SMART_BRANCH(result, 1);
+ ZVAL_BOOL(EX_VAR(opline->result.var), result);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+}
+
+ZEND_VM_HANDLER(190, ZEND_COUNT, CONST|TMP|VAR|CV, UNUSED)
+{
+ USE_OPLINE
+ zend_free_op free_op1;
+ zval *op1;
+ zend_long count;
+
+ SAVE_OPLINE();
+ op1 = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R);
+ do {
+ if (Z_TYPE_P(op1) == IS_ARRAY) {
+ count = zend_array_count(Z_ARRVAL_P(op1));
+ break;
+ } else if (Z_TYPE_P(op1) == IS_OBJECT) {
+ /* first, we check if the handler is defined */
+ if (Z_OBJ_HT_P(op1)->count_elements) {
+ if (SUCCESS == Z_OBJ_HT_P(op1)->count_elements(op1, &count)) {
+ break;
+ }
+ }
+
+ /* if not and the object implements Countable we call its count() method */
+ if (instanceof_function(Z_OBJCE_P(op1), zend_ce_countable)) {
+ zval retval;
+
+ zend_call_method_with_0_params(op1, NULL, NULL, "count", &retval);
+ count = zval_get_long(&retval);
+ zval_ptr_dtor(&retval);
+ break;
+ }
+
+ /* If There's no handler and it doesn't implement Countable then add a warning */
+ count = 1;
+ } else if (Z_TYPE_P(op1) == IS_NULL) {
+ count = 0;
+ } else {
+ count = 1;
+ }
+ zend_error(E_WARNING, "count(): Parameter must be an array or an object that implements Countable");
+ } while (0);
+
+ ZVAL_LONG(EX_VAR(opline->result.var), count);
+ FREE_OP1();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+}
+
+ZEND_VM_HANDLER(191, ZEND_GET_CLASS, UNUSED|CONST|TMP|VAR|CV, UNUSED)
+{
+ USE_OPLINE
+
+ if (OP1_TYPE == IS_UNUSED) {
+ if (UNEXPECTED(!EX(func)->common.scope)) {
+ SAVE_OPLINE();
+ zend_error(E_WARNING, "get_class() called without object from outside a class");
+ ZVAL_FALSE(EX_VAR(opline->result.var));
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ } else {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
+ ZEND_VM_NEXT_OPCODE();
+ }
+ } else {
+ zend_free_op free_op1;
+ zval *op1;
+
+ SAVE_OPLINE();
+ op1 = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R);
+ if (Z_TYPE_P(op1) == IS_OBJECT) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
+ } else {
+ zend_error(E_WARNING, "get_class() expects parameter 1 to be object, %s given", zend_get_type_by_const(Z_TYPE_P(op1)));
+ ZVAL_FALSE(EX_VAR(opline->result.var));
+ }
+ FREE_OP1();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ }
+}
+
+ZEND_VM_HANDLER(192, ZEND_GET_CALLED_CLASS, UNUSED, UNUSED)
+{
+ USE_OPLINE
+
+ if (Z_TYPE(EX(This)) == IS_OBJECT) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE(EX(This))->name);
+ } else if (Z_CE(EX(This))) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_CE(EX(This))->name);
+ } else {
+ ZVAL_FALSE(EX_VAR(opline->result.var));
+ if (UNEXPECTED(!EX(func)->common.scope)) {
+ SAVE_OPLINE();
+ zend_error(E_WARNING, "get_called_class() called from outside a class");
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ }
+ }
+ ZEND_VM_NEXT_OPCODE();
+}
+
+ZEND_VM_HANDLER(193, ZEND_GET_TYPE, CONST|TMP|VAR|CV, UNUSED)
+{
+ USE_OPLINE
+ zend_free_op free_op1;
+ zval *op1;
+ zend_string *type;
+
+ SAVE_OPLINE();
+ op1 = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R);
+ type = zend_zval_get_type(op1);
+ if (EXPECTED(type)) {
+ ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
+ } else {
+ ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
+ }
+ FREE_OP1();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+}
+
+ZEND_VM_HANDLER(194, ZEND_FUNC_NUM_ARGS, UNUSED, UNUSED)
+{
+ USE_OPLINE
+
+ ZVAL_LONG(EX_VAR(opline->result.var), EX_NUM_ARGS());
+ ZEND_VM_NEXT_OPCODE();
+}
+
+ZEND_VM_HANDLER(195, ZEND_FUNC_GET_ARGS, UNUSED|CONST, UNUSED)
+{
+ USE_OPLINE
+ zend_array *ht;
+ uint32_t arg_count, result_size, skip;
+
+ arg_count = EX_NUM_ARGS();
+ if (OP1_TYPE == IS_CONST) {
+ skip = Z_LVAL_P(EX_CONSTANT(opline->op1));
+ if (arg_count < skip) {
+ result_size = 0;
+ } else {
+ result_size = arg_count - skip;
+ }
+ } else {
+ skip = 0;
+ result_size = arg_count;
+ }
+
+ ht = (zend_array *) emalloc(sizeof(zend_array));
+ zend_hash_init(ht, result_size, NULL, ZVAL_PTR_DTOR, 0);
+ ZVAL_ARR(EX_VAR(opline->result.var), ht);
+
+ if (result_size) {
+ uint32_t first_extra_arg = EX(func)->op_array.num_args;
+ zend_hash_real_init(ht, 1);
+ ZEND_HASH_FILL_PACKED(ht) {
+ zval *p, *q;
+ uint32_t i = skip;
+ p = EX_VAR_NUM(i);
+ if (arg_count > first_extra_arg) {
+ while (i < first_extra_arg) {
+ q = p;
+ if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
+ ZVAL_DEREF(q);
+ if (Z_OPT_REFCOUNTED_P(q)) {
+ Z_ADDREF_P(q);
+ }
+ } else {
+ q = &EG(uninitialized_zval);
+ }
+ ZEND_HASH_FILL_ADD(q);
+ p++;
+ i++;
+ }
+ if (skip < first_extra_arg) {
+ skip = 0;
+ } else {
+ skip -= first_extra_arg;
+ }
+ p = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T + skip);
+ }
+ while (i < arg_count) {
+ q = p;
+ if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
+ ZVAL_DEREF(q);
+ if (Z_OPT_REFCOUNTED_P(q)) {
+ Z_ADDREF_P(q);
+ }
+ } else {
+ q = &EG(uninitialized_zval);
+ }
+ ZEND_HASH_FILL_ADD(q);
+ p++;
+ i++;
+ }
+ } ZEND_HASH_FILL_END();
+ ht->nNumOfElements = result_size;
+ }
+ ZEND_VM_NEXT_OPCODE();
+}
+
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_ADD, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_ADD_LONG_NO_OVERFLOW, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST,COMMUTATIVE))
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -8219,7 +8332,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_ADD, (res_info == MAY_BE_LONG && op1_info == MAY_
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_ADD, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_ADD_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST,COMMUTATIVE))
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_ADD, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_ADD_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST,COMMUTATIVE))
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -8231,7 +8344,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_ADD, (op1_info == MAY_BE_LONG && op2_info == MAY_
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_ADD, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_ADD_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST,COMMUTATIVE))
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_ADD, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_ADD_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST,COMMUTATIVE))
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -8243,7 +8356,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_ADD, (op1_info == MAY_BE_DOUBLE && op2_info == MA
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_SUB, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_SUB_LONG_NO_OVERFLOW, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST))
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_SUB, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_SUB_LONG_NO_OVERFLOW, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST))
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -8255,7 +8368,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_SUB, (res_info == MAY_BE_LONG && op1_info == MAY_
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_SUB, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_SUB_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST))
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_SUB, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_SUB_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST))
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -8267,7 +8380,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_SUB, (op1_info == MAY_BE_LONG && op2_info == MAY_
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_SUB, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_SUB_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST))
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_SUB, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_SUB_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST))
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -8279,7 +8392,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_SUB, (op1_info == MAY_BE_DOUBLE && op2_info == MA
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_MUL, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_MUL_LONG_NO_OVERFLOW, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST,COMMUTATIVE))
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_MUL, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_MUL_LONG_NO_OVERFLOW, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST,COMMUTATIVE))
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -8291,7 +8404,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_MUL, (res_info == MAY_BE_LONG && op1_info == MAY_
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_MUL, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_MUL_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST,COMMUTATIVE))
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_MUL, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_MUL_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST,COMMUTATIVE))
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -8305,7 +8418,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_MUL, (op1_info == MAY_BE_LONG && op2_info == MAY_
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_MUL, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_MUL_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST,COMMUTATIVE))
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_MUL, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_MUL_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST,COMMUTATIVE))
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -8317,7 +8430,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_MUL, (op1_info == MAY_BE_DOUBLE && op2_info == MA
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_IS_EQUAL, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_IS_EQUAL_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST,COMMUTATIVE))
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_IS_EQUAL, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_IS_EQUAL_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST,COMMUTATIVE))
{
USE_OPLINE
zval *op1, *op2;
@@ -8331,7 +8444,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_IS_EQUAL, (op1_info == MAY_BE_LONG && op2_info ==
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_IS_EQUAL, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_IS_EQUAL_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST,COMMUTATIVE))
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_IS_EQUAL, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_IS_EQUAL_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST,COMMUTATIVE))
{
USE_OPLINE
zval *op1, *op2;
@@ -8345,7 +8458,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_IS_EQUAL, (op1_info == MAY_BE_DOUBLE && op2_info
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_IS_NOT_EQUAL, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_IS_NOT_EQUAL_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST,COMMUTATIVE))
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_IS_NOT_EQUAL, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_IS_NOT_EQUAL_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST,COMMUTATIVE))
{
USE_OPLINE
zval *op1, *op2;
@@ -8359,7 +8472,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_IS_NOT_EQUAL, (op1_info == MAY_BE_LONG && op2_inf
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_IS_NOT_EQUAL, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_IS_NOT_EQUAL_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST,COMMUTATIVE))
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_IS_NOT_EQUAL, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_IS_NOT_EQUAL_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST,COMMUTATIVE))
{
USE_OPLINE
zval *op1, *op2;
@@ -8373,7 +8486,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_IS_NOT_EQUAL, (op1_info == MAY_BE_DOUBLE && op2_i
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_IS_SMALLER, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_IS_SMALLER_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST))
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_IS_SMALLER, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_IS_SMALLER_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST))
{
USE_OPLINE
zval *op1, *op2;
@@ -8387,7 +8500,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_IS_SMALLER, (op1_info == MAY_BE_LONG && op2_info
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_IS_SMALLER, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_IS_SMALLER_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST))
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_IS_SMALLER, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_IS_SMALLER_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST))
{
USE_OPLINE
zval *op1, *op2;
@@ -8401,7 +8514,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_IS_SMALLER, (op1_info == MAY_BE_DOUBLE && op2_inf
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_IS_SMALLER_OR_EQUAL, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_IS_SMALLER_OR_EQUAL_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST))
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_IS_SMALLER_OR_EQUAL, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_IS_SMALLER_OR_EQUAL_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST))
{
USE_OPLINE
zval *op1, *op2;
@@ -8415,7 +8528,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_IS_SMALLER_OR_EQUAL, (op1_info == MAY_BE_LONG &&
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_IS_SMALLER_OR_EQUAL, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_IS_SMALLER_OR_EQUAL_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST))
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_IS_SMALLER_OR_EQUAL, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_IS_SMALLER_OR_EQUAL_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST))
{
USE_OPLINE
zval *op1, *op2;
@@ -8429,7 +8542,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_IS_SMALLER_OR_EQUAL, (op1_info == MAY_BE_DOUBLE &
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_PRE_INC, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG), ZEND_PRE_INC_LONG_NO_OVERFLOW, TMPVARCV, ANY, SPEC(RETVAL))
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_PRE_INC, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG), ZEND_PRE_INC_LONG_NO_OVERFLOW, TMPVARCV, ANY, SPEC(RETVAL))
{
USE_OPLINE
zval *var_ptr;
@@ -8442,7 +8555,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_PRE_INC, (res_info == MAY_BE_LONG && op1_info ==
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_PRE_INC, (op1_info == MAY_BE_LONG), ZEND_PRE_INC_LONG, TMPVARCV, ANY, SPEC(RETVAL))
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_PRE_INC, (op1_info == MAY_BE_LONG), ZEND_PRE_INC_LONG, TMPVARCV, ANY, SPEC(RETVAL))
{
USE_OPLINE
zval *var_ptr;
@@ -8455,7 +8568,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_PRE_INC, (op1_info == MAY_BE_LONG), ZEND_PRE_INC_
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_PRE_INC, (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)), ZEND_PRE_INC_LONG_OR_DOUBLE, TMPVARCV, ANY, SPEC(RETVAL))
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_PRE_INC, (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)), ZEND_PRE_INC_LONG_OR_DOUBLE, TMPVARCV, ANY, SPEC(RETVAL))
{
USE_OPLINE
zval *var_ptr;
@@ -8472,7 +8585,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_PRE_INC, (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_PRE_DEC, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG), ZEND_PRE_DEC_LONG_NO_OVERFLOW, TMPVARCV, ANY, SPEC(RETVAL))
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_PRE_DEC, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG), ZEND_PRE_DEC_LONG_NO_OVERFLOW, TMPVARCV, ANY, SPEC(RETVAL))
{
USE_OPLINE
zval *var_ptr;
@@ -8485,7 +8598,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_PRE_DEC, (res_info == MAY_BE_LONG && op1_info ==
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_PRE_DEC, (op1_info == MAY_BE_LONG), ZEND_PRE_DEC_LONG, TMPVARCV, ANY, SPEC(RETVAL))
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_PRE_DEC, (op1_info == MAY_BE_LONG), ZEND_PRE_DEC_LONG, TMPVARCV, ANY, SPEC(RETVAL))
{
USE_OPLINE
zval *var_ptr;
@@ -8498,7 +8611,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_PRE_DEC, (op1_info == MAY_BE_LONG), ZEND_PRE_DEC_
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_PRE_DEC, (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)), ZEND_PRE_DEC_LONG_OR_DOUBLE, TMPVARCV, ANY, SPEC(RETVAL))
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_PRE_DEC, (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)), ZEND_PRE_DEC_LONG_OR_DOUBLE, TMPVARCV, ANY, SPEC(RETVAL))
{
USE_OPLINE
zval *var_ptr;
@@ -8515,7 +8628,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_PRE_DEC, (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_POST_INC, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG), ZEND_POST_INC_LONG_NO_OVERFLOW, TMPVARCV, ANY)
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_POST_INC, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG), ZEND_POST_INC_LONG_NO_OVERFLOW, TMPVARCV, ANY)
{
USE_OPLINE
zval *var_ptr;
@@ -8526,7 +8639,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_POST_INC, (res_info == MAY_BE_LONG && op1_info ==
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_POST_INC, (op1_info == MAY_BE_LONG), ZEND_POST_INC_LONG, TMPVARCV, ANY)
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_POST_INC, (op1_info == MAY_BE_LONG), ZEND_POST_INC_LONG, TMPVARCV, ANY)
{
USE_OPLINE
zval *var_ptr;
@@ -8537,7 +8650,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_POST_INC, (op1_info == MAY_BE_LONG), ZEND_POST_IN
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_POST_INC, (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)), ZEND_POST_INC_LONG_OR_DOUBLE, TMPVARCV, ANY)
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_POST_INC, (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)), ZEND_POST_INC_LONG_OR_DOUBLE, TMPVARCV, ANY)
{
USE_OPLINE
zval *var_ptr;
@@ -8552,7 +8665,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_POST_INC, (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_POST_DEC, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG), ZEND_POST_DEC_LONG_NO_OVERFLOW, TMPVARCV, ANY)
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_POST_DEC, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG), ZEND_POST_DEC_LONG_NO_OVERFLOW, TMPVARCV, ANY)
{
USE_OPLINE
zval *var_ptr;
@@ -8563,7 +8676,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_POST_DEC, (res_info == MAY_BE_LONG && op1_info ==
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_POST_DEC, (op1_info == MAY_BE_LONG), ZEND_POST_DEC_LONG, TMPVARCV, ANY)
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_POST_DEC, (op1_info == MAY_BE_LONG), ZEND_POST_DEC_LONG, TMPVARCV, ANY)
{
USE_OPLINE
zval *var_ptr;
@@ -8574,7 +8687,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_POST_DEC, (op1_info == MAY_BE_LONG), ZEND_POST_DE
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_POST_DEC, (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)), ZEND_POST_DEC_LONG_OR_DOUBLE, TMPVARCV, ANY)
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_POST_DEC, (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)), ZEND_POST_DEC_LONG_OR_DOUBLE, TMPVARCV, ANY)
{
USE_OPLINE
zval *var_ptr;
@@ -8589,7 +8702,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_POST_DEC, (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_QM_ASSIGN, (op1_info == MAY_BE_DOUBLE), ZEND_QM_ASSIGN_DOUBLE, CONST|TMPVARCV, ANY)
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_QM_ASSIGN, (op1_info == MAY_BE_DOUBLE), ZEND_QM_ASSIGN_DOUBLE, CONST|TMPVARCV, ANY)
{
USE_OPLINE
zend_free_op free_op1;
@@ -8600,7 +8713,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_QM_ASSIGN, (op1_info == MAY_BE_DOUBLE), ZEND_QM_A
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_QM_ASSIGN, (!(op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)))), ZEND_QM_ASSIGN_NOREF, CONST|TMPVARCV, ANY)
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_QM_ASSIGN, (!(op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)))), ZEND_QM_ASSIGN_NOREF, CONST|TMPVARCV, ANY)
{
USE_OPLINE
zend_free_op free_op1;
@@ -8611,7 +8724,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_QM_ASSIGN, (!(op1_info & ((MAY_BE_ANY|MAY_BE_UNDE
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_FETCH_DIM_R, (!(op2_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))), ZEND_FETCH_DIM_R_INDEX, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_FETCH_DIM_R, (!(op2_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))), ZEND_FETCH_DIM_R_INDEX, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
{
USE_OPLINE
zend_free_op free_op1, free_op2;
@@ -8646,7 +8759,7 @@ ZEND_VM_C_LABEL(fetch_dim_r_index_array):
} else {
ZEND_VM_C_LABEL(fetch_dim_r_index_slow):
SAVE_OPLINE();
- zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim);
+ zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim EXECUTE_DATA_CC);
FREE_OP1();
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -8659,7 +8772,7 @@ ZEND_VM_C_LABEL(fetch_dim_r_index_undef):
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_SEND_VAR, (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0, ZEND_SEND_VAR_SIMPLE, CV|VAR, NUM)
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_SEND_VAR, (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0, ZEND_SEND_VAR_SIMPLE, CV|VAR, NUM)
{
USE_OPLINE
zval *varptr, *arg;
@@ -8677,7 +8790,7 @@ ZEND_VM_TYPE_SPEC_HANDLER(ZEND_SEND_VAR, (op1_info & (MAY_BE_UNDEF|MAY_BE_REF))
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_TYPE_SPEC_HANDLER(ZEND_SEND_VAR_EX, (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0, ZEND_SEND_VAR_EX_SIMPLE, CV|VAR, NUM, SPEC(QUICK_ARG))
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_SEND_VAR_EX, (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0, ZEND_SEND_VAR_EX_SIMPLE, CV|VAR, NUM, SPEC(QUICK_ARG))
{
USE_OPLINE
zval *varptr, *arg;
@@ -8705,6 +8818,57 @@ ZEND_VM_C_LABEL(send_var_by_ref_simple):
ZEND_VM_NEXT_OPCODE();
}
+ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_FE_FETCH_R, op->op2_type == IS_CV && (op1_info & (MAY_BE_UNDEF|MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_ARRAY, ZEND_FE_FETCH_R_SIMPLE, VAR, CV, JMP_ADDR, SPEC(RETVAL))
+{
+ USE_OPLINE
+ zval *array;
+ zval *value, *variable_ptr;
+ uint32_t value_type;
+ HashTable *fe_ht;
+ HashPosition pos;
+ Bucket *p;
+
+ array = EX_VAR(opline->op1.var);
+ SAVE_OPLINE();
+ fe_ht = Z_ARRVAL_P(array);
+ pos = Z_FE_POS_P(array);
+ p = fe_ht->arData + pos;
+ while (1) {
+ if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
+ /* reached end of iteration */
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
+ ZEND_VM_CONTINUE();
+ }
+ value = &p->val;
+ value_type = Z_TYPE_INFO_P(value);
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ if (UNEXPECTED(value_type == IS_INDIRECT)) {
+ value = Z_INDIRECT_P(value);
+ value_type = Z_TYPE_INFO_P(value);
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ break;
+ }
+ } else {
+ break;
+ }
+ }
+ pos++;
+ p++;
+ }
+ Z_FE_POS_P(array) = pos + 1;
+ if (RETURN_VALUE_USED(opline)) {
+ if (!p->key) {
+ ZVAL_LONG(EX_VAR(opline->result.var), p->h);
+ } else {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
+ }
+ }
+
+ variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
+ zend_assign_to_variable(variable_ptr, value, IS_CV);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+}
+
ZEND_VM_DEFINE_OP(137, ZEND_OP_DATA);
ZEND_VM_HELPER(zend_interrupt_helper, ANY, ANY)
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index cb20546da9..82f8c4ef68 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -19,7 +19,7 @@
*/
#ifdef ZEND_WIN32
-# pragma warning(once : 4101)
+# pragma warning(disable : 4101)
# pragma warning(once : 6235)
# pragma warning(once : 6237)
# pragma warning(once : 6239)
@@ -318,19 +318,24 @@ static zend_uchar zend_user_opcodes[256] = {0,
static const uint32_t *zend_spec_handlers;
static const void **zend_opcode_handlers;
static int zend_handlers_count;
+#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
+static const void **zend_opcode_handler_funcs;
+static zend_op hybrid_halt_op;
+#endif
static const void *zend_vm_get_opcode_handler(zend_uchar opcode, const zend_op* op);
-
-#ifdef ZEND_VM_FP_GLOBAL_REG
-#pragma GCC diagnostic ignored "-Wvolatile-register-var"
-register zend_execute_data* volatile execute_data __asm__(ZEND_VM_FP_GLOBAL_REG);
-#pragma GCC diagnostic warning "-Wvolatile-register-var"
+#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
+static const void *zend_vm_get_opcode_handler_func(zend_uchar opcode, const zend_op* op);
+#else
+# define zend_vm_get_opcode_handler_func zend_vm_get_opcode_handler
#endif
-#ifdef ZEND_VM_IP_GLOBAL_REG
-#pragma GCC diagnostic ignored "-Wvolatile-register-var"
-register const zend_op* volatile opline __asm__(ZEND_VM_IP_GLOBAL_REG);
-#pragma GCC diagnostic warning "-Wvolatile-register-var"
+#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
+#define HYBRID_NEXT() goto *(void**)(OPLINE->handler)
+#define HYBRID_SWITCH() HYBRID_NEXT();
+#define HYBRID_CASE(op) op ## _LABEL
+#define HYBRID_BREAK() HYBRID_NEXT()
+#define HYBRID_DEFAULT ZEND_NULL_LABEL
#endif
#ifdef ZEND_VM_FP_GLOBAL_REG
@@ -353,12 +358,19 @@ register const zend_op* volatile opline __asm__(ZEND_VM_IP_GLOBAL_REG);
# else
# define ZEND_VM_CONTINUE() return
# endif
-# define ZEND_VM_RETURN() opline = NULL; return
+# if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
+# define ZEND_VM_RETURN() opline = &hybrid_halt_op; return
+# define ZEND_VM_HOT zend_always_inline
+# else
+# define ZEND_VM_RETURN() opline = NULL; return
+# define ZEND_VM_HOT
+# endif
#else
# define ZEND_OPCODE_HANDLER_RET int
# define ZEND_VM_TAIL_CALL(call) return call
# define ZEND_VM_CONTINUE() return 0
# define ZEND_VM_RETURN() return -1
+# define ZEND_VM_HOT
#endif
typedef ZEND_OPCODE_HANDLER_RET (ZEND_FASTCALL *opcode_handler_t) (ZEND_OPCODE_HANDLER_ARGS);
@@ -399,80 +411,21 @@ typedef ZEND_OPCODE_HANDLER_RET (ZEND_FASTCALL *opcode_handler_t) (ZEND_OPCODE_H
#endif
#define ZEND_VM_INTERRUPT() ZEND_VM_TAIL_CALL(zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
#define ZEND_VM_LOOP_INTERRUPT() zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
-#define ZEND_VM_DISPATCH(opcode, opline) ZEND_VM_TAIL_CALL(((opcode_handler_t)zend_vm_get_opcode_handler(opcode, opline))(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+#define ZEND_VM_DISPATCH(opcode, opline) ZEND_VM_TAIL_CALL(((opcode_handler_t)zend_vm_get_opcode_handler_func(opcode, opline))(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS);
-
-ZEND_API void execute_ex(zend_execute_data *ex)
-{
- DCL_OPLINE
-
-#ifdef ZEND_VM_IP_GLOBAL_REG
- const zend_op *orig_opline = opline;
-#endif
-#ifdef ZEND_VM_FP_GLOBAL_REG
- zend_execute_data *orig_execute_data = execute_data;
- execute_data = ex;
-#else
- zend_execute_data *execute_data = ex;
-#endif
-
-
- LOAD_OPLINE();
- ZEND_VM_LOOP_INTERRUPT_CHECK();
-
- while (1) {
-#if !defined(ZEND_VM_FP_GLOBAL_REG) || !defined(ZEND_VM_IP_GLOBAL_REG)
- int ret;
-#endif
-#if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
- ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- if (UNEXPECTED(!OPLINE)) {
-#else
- if (UNEXPECTED((ret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)) != 0)) {
-#endif
-#ifdef ZEND_VM_FP_GLOBAL_REG
- execute_data = orig_execute_data;
-# ifdef ZEND_VM_IP_GLOBAL_REG
- opline = orig_opline;
-# endif
- return;
-#else
- if (EXPECTED(ret > 0)) {
- execute_data = EG(current_execute_data);
- ZEND_VM_LOOP_INTERRUPT_CHECK();
- } else {
-# ifdef ZEND_VM_IP_GLOBAL_REG
- opline = orig_opline;
-# endif
- return;
- }
-#endif
- }
-
- }
- zend_error_noreturn(E_CORE_ERROR, "Arrived at end of main loop which shouldn't happen");
-}
-
-ZEND_API void zend_execute(zend_op_array *op_array, zval *return_value)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
{
- zend_execute_data *execute_data;
-
- if (EG(exception) != NULL) {
- return;
- }
+ USE_OPLINE
- execute_data = zend_vm_stack_push_call_frame(ZEND_CALL_TOP_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
- (zend_function*)op_array, 0, zend_get_called_scope(EG(current_execute_data)), zend_get_this_object(EG(current_execute_data)));
- if (EG(current_execute_data)) {
- execute_data->symbol_table = zend_rebuild_symbol_table();
- } else {
- execute_data->symbol_table = &EG(symbol_table);
+ SAVE_OPLINE();
+ zend_throw_error(NULL, "Using $this when not in object context");
+ if ((opline+1)->opcode == ZEND_OP_DATA) {
+ FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
}
- EX(prev_execute_data) = EG(current_execute_data);
- i_init_execute_data(execute_data, op_array, return_value);
- zend_execute_ex(execute_data);
- zend_vm_stack_free_call_frame(execute_data);
+ FREE_UNFETCHED_OP(opline->op2_type, opline->op2.var);
+ UNDEF_RESULT();
+ HANDLE_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
@@ -502,11 +455,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_
execute_data = EX(prev_execute_data);
if (UNEXPECTED(EG(exception) != NULL)) {
- const zend_op *old_opline = EX(opline);
- zend_throw_exception_internal(NULL);
- if (RETURN_VALUE_USED(old_opline)) {
- zval_ptr_dtor(EX_VAR(old_opline->result.var));
- }
+ zend_rethrow_exception(execute_data);
HANDLE_EXCEPTION_LEAVE();
}
@@ -540,11 +489,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_
zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
if (UNEXPECTED(EG(exception) != NULL)) {
- const zend_op *old_opline = EX(opline);
- zend_throw_exception_internal(NULL);
- if (RETURN_VALUE_USED(old_opline)) {
- zval_ptr_dtor(EX_VAR(old_opline->result.var));
- }
+ zend_rethrow_exception(execute_data);
HANDLE_EXCEPTION_LEAVE();
}
@@ -560,7 +505,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_
zend_attach_symbol_table(execute_data);
if (UNEXPECTED(EG(exception) != NULL)) {
- zend_throw_exception_internal(NULL);
+ zend_rethrow_exception(execute_data);
HANDLE_EXCEPTION_LEAVE();
}
@@ -600,7 +545,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_
}
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -608,7 +553,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_H
ZEND_VM_CONTINUE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zend_execute_data *call = EX(call);
@@ -635,7 +580,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HA
ZEND_ASSERT(!Z_ISREF_P(ret));
#endif
- EG(current_execute_data) = call->prev_execute_data;
+ EG(current_execute_data) = execute_data;
zend_vm_stack_free_args(call);
zend_vm_stack_free_call_frame(call);
@@ -644,10 +589,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HA
}
if (UNEXPECTED(EG(exception) != NULL)) {
- zend_throw_exception_internal(NULL);
- if (0) {
- zval_ptr_dtor(EX_VAR(opline->result.var));
- }
+ zend_rethrow_exception(execute_data);
HANDLE_EXCEPTION();
}
@@ -655,7 +597,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HA
ZEND_VM_CONTINUE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zend_execute_data *call = EX(call);
@@ -682,7 +624,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_USED_HAND
ZEND_ASSERT(!Z_ISREF_P(ret));
#endif
- EG(current_execute_data) = call->prev_execute_data;
+ EG(current_execute_data) = execute_data;
zend_vm_stack_free_args(call);
zend_vm_stack_free_call_frame(call);
@@ -691,10 +633,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_USED_HAND
}
if (UNEXPECTED(EG(exception) != NULL)) {
- zend_throw_exception_internal(NULL);
- if (1) {
- zval_ptr_dtor(EX_VAR(opline->result.var));
- }
+ zend_rethrow_exception(execute_data);
HANDLE_EXCEPTION();
}
@@ -702,7 +641,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_USED_HAND
ZEND_VM_CONTINUE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zend_execute_data *call = EX(call);
@@ -724,7 +663,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HA
ZEND_VM_ENTER();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zend_execute_data *call = EX(call);
@@ -746,7 +685,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_USED_HAND
ZEND_VM_ENTER();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zend_execute_data *call = EX(call);
@@ -777,6 +716,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_U
fbc->common.scope ? "::" : "",
ZSTR_VAL(fbc->common.function_name));
if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
}
@@ -787,7 +727,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_U
if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS)
&& UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) {
zend_vm_stack_free_call_frame(call);
- zend_throw_exception_internal(NULL);
+ zend_rethrow_exception(execute_data);
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -805,7 +746,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_U
}
#endif
- EG(current_execute_data) = call->prev_execute_data;
+ EG(current_execute_data) = execute_data;
zend_vm_stack_free_args(call);
zend_vm_stack_free_call_frame(call);
@@ -815,17 +756,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_U
}
if (UNEXPECTED(EG(exception) != NULL)) {
- zend_throw_exception_internal(NULL);
- if (0) {
- zval_ptr_dtor(EX_VAR(opline->result.var));
- }
+ zend_rethrow_exception(execute_data);
HANDLE_EXCEPTION();
}
ZEND_VM_SET_OPCODE(opline + 1);
ZEND_VM_CONTINUE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zend_execute_data *call = EX(call);
@@ -856,6 +794,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_U
fbc->common.scope ? "::" : "",
ZSTR_VAL(fbc->common.function_name));
if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
}
@@ -866,7 +805,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_U
if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS)
&& UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) {
zend_vm_stack_free_call_frame(call);
- zend_throw_exception_internal(NULL);
+ zend_rethrow_exception(execute_data);
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -884,7 +824,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_U
}
#endif
- EG(current_execute_data) = call->prev_execute_data;
+ EG(current_execute_data) = execute_data;
zend_vm_stack_free_args(call);
zend_vm_stack_free_call_frame(call);
@@ -894,17 +834,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_U
}
if (UNEXPECTED(EG(exception) != NULL)) {
- zend_throw_exception_internal(NULL);
- if (1) {
- zval_ptr_dtor(EX_VAR(opline->result.var));
- }
+ zend_rethrow_exception(execute_data);
HANDLE_EXCEPTION();
}
ZEND_VM_SET_OPCODE(opline + 1);
ZEND_VM_CONTINUE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zend_execute_data *call = EX(call);
@@ -917,6 +854,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HA
if (UNEXPECTED((fbc->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED)) != 0)) {
if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_ABSTRACT) != 0)) {
zend_throw_error(NULL, "Cannot call abstract method %s::%s()", ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
@@ -925,6 +863,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HA
fbc->common.scope ? "::" : "",
ZSTR_VAL(fbc->common.function_name));
if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
}
@@ -956,9 +895,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HA
if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS)
&& UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) {
- if (0) {
- ZVAL_UNDEF(EX_VAR(opline->result.var));
- }
+ UNDEF_RESULT();
goto fcall_end;
}
@@ -981,7 +918,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HA
}
#endif
- EG(current_execute_data) = call->prev_execute_data;
+ EG(current_execute_data) = execute_data;
zend_vm_stack_free_args(call);
if (!0) {
@@ -995,7 +932,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HA
call->prev_execute_data = execute_data;
- if (UNEXPECTED(!zend_do_fcall_overloaded(fbc, call, ret))) {
+ if (UNEXPECTED(!zend_do_fcall_overloaded(call, ret))) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -1020,10 +958,7 @@ fcall_end:
zend_vm_stack_free_call_frame(call);
if (UNEXPECTED(EG(exception) != NULL)) {
- zend_throw_exception_internal(NULL);
- if (0) {
- zval_ptr_dtor(EX_VAR(opline->result.var));
- }
+ zend_rethrow_exception(execute_data);
HANDLE_EXCEPTION();
}
@@ -1031,7 +966,7 @@ fcall_end:
ZEND_VM_CONTINUE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zend_execute_data *call = EX(call);
@@ -1044,6 +979,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_USED_HAND
if (UNEXPECTED((fbc->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED)) != 0)) {
if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_ABSTRACT) != 0)) {
zend_throw_error(NULL, "Cannot call abstract method %s::%s()", ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
@@ -1052,6 +988,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_USED_HAND
fbc->common.scope ? "::" : "",
ZSTR_VAL(fbc->common.function_name));
if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
}
@@ -1083,9 +1020,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_USED_HAND
if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS)
&& UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) {
- if (1) {
- ZVAL_UNDEF(EX_VAR(opline->result.var));
- }
+ UNDEF_RESULT();
goto fcall_end;
}
@@ -1108,7 +1043,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_USED_HAND
}
#endif
- EG(current_execute_data) = call->prev_execute_data;
+ EG(current_execute_data) = execute_data;
zend_vm_stack_free_args(call);
if (!1) {
@@ -1122,7 +1057,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_USED_HAND
call->prev_execute_data = execute_data;
- if (UNEXPECTED(!zend_do_fcall_overloaded(fbc, call, ret))) {
+ if (UNEXPECTED(!zend_do_fcall_overloaded(call, ret))) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -1147,10 +1083,7 @@ fcall_end:
zend_vm_stack_free_call_frame(call);
if (UNEXPECTED(EG(exception) != NULL)) {
- zend_throw_exception_internal(NULL);
- if (1) {
- zval_ptr_dtor(EX_VAR(opline->result.var));
- }
+ zend_rethrow_exception(execute_data);
HANDLE_EXCEPTION();
}
@@ -1242,7 +1175,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_
int arg_num;
SAVE_OPLINE();
- args = get_zval_ptr_undef(opline->op1_type, opline->op1, execute_data, &free_op1, BP_VAR_R);
+ args = get_zval_ptr_undef(opline->op1_type, opline->op1, &free_op1, BP_VAR_R);
arg_num = ZEND_CALL_NUM_ARGS(EX(call)) + 1;
send_again:
@@ -1392,7 +1325,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_O
zval *args;
SAVE_OPLINE();
- args = get_zval_ptr(opline->op1_type, opline->op1, execute_data, &free_op1, BP_VAR_R);
+ args = get_zval_ptr(opline->op1_type, opline->op1, &free_op1, BP_VAR_R);
if (UNEXPECTED(Z_TYPE_P(args) != IS_ARRAY)) {
if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_ISREF_P(args)) {
@@ -1411,44 +1344,98 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_O
EX(call)->func = (zend_function*)&zend_pass_function;
Z_OBJ(EX(call)->This) = NULL;
ZEND_SET_CALL_INFO(EX(call), 0, ZEND_CALL_INFO(EX(call)) & ~ZEND_CALL_RELEASE_THIS);
+ FREE_UNFETCHED_OP(opline->op2_type, opline->op2.var);
} else {
uint32_t arg_num;
HashTable *ht;
zval *arg, *param;
+
send_array:
ht = Z_ARRVAL_P(args);
- zend_vm_stack_extend_call_frame(&EX(call), 0, zend_hash_num_elements(ht));
+ if (opline->op2_type != IS_UNUSED) {
+ zend_free_op free_op2;
+ zval *op2 = get_zval_ptr_deref(opline->op2_type, opline->op2, &free_op2, BP_VAR_R);
+ uint32_t skip = opline->extended_value;
+ uint32_t count = zend_hash_num_elements(ht);
+ zend_long len = zval_get_long(op2);
+
+ if (len < 0) {
+ len += (zend_long)(count - skip);
+ }
+ if (skip < count && len > 0) {
+ if (len > (zend_long)(count - skip)) {
+ len = (zend_long)(count - skip);
+ }
+ zend_vm_stack_extend_call_frame(&EX(call), 0, len);
+ arg_num = 1;
+ param = ZEND_CALL_ARG(EX(call), 1);
+ ZEND_HASH_FOREACH_VAL(ht, arg) {
+ if (skip > 0) {
+ skip--;
+ continue;
+ } else if ((zend_long)(arg_num - 1) >= len) {
+ break;
+ } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
+ if (UNEXPECTED(!Z_ISREF_P(arg))) {
+ if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
+ /* By-value send is not allowed -- emit a warning,
+ * but still perform the call. */
+ zend_error(E_WARNING,
+ "Parameter %d to %s%s%s() expected to be a reference, value given",
+ arg_num,
+ EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
+ EX(call)->func->common.scope ? "::" : "",
+ ZSTR_VAL(EX(call)->func->common.function_name));
- arg_num = 1;
- param = ZEND_CALL_ARG(EX(call), 1);
- ZEND_HASH_FOREACH_VAL(ht, arg) {
- if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
- if (UNEXPECTED(!Z_ISREF_P(arg))) {
- if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
- /* By-value send is not allowed -- emit a warning,
- * but still perform the call. */
- zend_error(E_WARNING,
- "Parameter %d to %s%s%s() expected to be a reference, value given",
- arg_num,
- EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
- EX(call)->func->common.scope ? "::" : "",
- ZSTR_VAL(EX(call)->func->common.function_name));
+ }
+ }
+ } else {
+ if (Z_ISREF_P(arg) &&
+ !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
+ /* don't separate references for __call */
+ arg = Z_REFVAL_P(arg);
+ }
+ }
+ ZVAL_COPY(param, arg);
+ ZEND_CALL_NUM_ARGS(EX(call))++;
+ arg_num++;
+ param++;
+ } ZEND_HASH_FOREACH_END();
+ }
+ FREE_OP(free_op2);
+ } else {
+ zend_vm_stack_extend_call_frame(&EX(call), 0, zend_hash_num_elements(ht));
+ arg_num = 1;
+ param = ZEND_CALL_ARG(EX(call), 1);
+ ZEND_HASH_FOREACH_VAL(ht, arg) {
+ if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
+ if (UNEXPECTED(!Z_ISREF_P(arg))) {
+ if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
+ /* By-value send is not allowed -- emit a warning,
+ * but still perform the call. */
+ zend_error(E_WARNING,
+ "Parameter %d to %s%s%s() expected to be a reference, value given",
+ arg_num,
+ EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
+ EX(call)->func->common.scope ? "::" : "",
+ ZSTR_VAL(EX(call)->func->common.function_name));
+ }
+ }
+ } else {
+ if (Z_ISREF_P(arg) &&
+ !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
+ /* don't separate references for __call */
+ arg = Z_REFVAL_P(arg);
}
}
- } else {
- if (Z_ISREF_P(arg) &&
- !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
- /* don't separate references for __call */
- arg = Z_REFVAL_P(arg);
- }
- }
- ZVAL_COPY(param, arg);
- ZEND_CALL_NUM_ARGS(EX(call))++;
- arg_num++;
- param++;
- } ZEND_HASH_FOREACH_END();
+ ZVAL_COPY(param, arg);
+ ZEND_CALL_NUM_ARGS(EX(call))++;
+ arg_num++;
+ param++;
+ } ZEND_HASH_FOREACH_END();
+ }
}
FREE_OP(free_op1);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -1464,7 +1451,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_SPEC_HANDLER(ZEND_OPCODE_
zend_missing_arg_error(execute_data);
HANDLE_EXCEPTION();
} else if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
- zval *param = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->result.var);
+ zval *param = _get_zval_ptr_cv_undef_BP_VAR_W(opline->result.var EXECUTE_DATA_CC);
SAVE_OPLINE();
if (UNEXPECTED(!zend_verify_arg_type(EX(func), arg_num, param, NULL, CACHE_ADDR(opline->op2.num)) || EG(exception))) {
@@ -1484,7 +1471,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_VARIADIC_SPEC_HANDLER(ZEN
SAVE_OPLINE();
- params = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->result.var);
+ params = _get_zval_ptr_cv_undef_BP_VAR_W(opline->result.var EXECUTE_DATA_CC);
if (arg_num <= arg_count) {
zval *param;
@@ -1525,7 +1512,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEN
do {
EG(error_reporting) = 0;
if (!EG(error_reporting_ini_entry)) {
- zend_ini_entry *p = zend_hash_find_ptr(EG(ini_directives), CG(known_strings)[ZEND_STR_ERROR_REPORTING]);
+ zend_ini_entry *p = zend_hash_find_ptr(EG(ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING));
if (p) {
EG(error_reporting_ini_entry) = p;
} else {
@@ -1537,7 +1524,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEN
ALLOC_HASHTABLE(EG(modified_ini_directives));
zend_hash_init(EG(modified_ini_directives), 8, NULL, NULL, 0);
}
- if (EXPECTED(zend_hash_add_ptr(EG(modified_ini_directives), CG(known_strings)[ZEND_STR_ERROR_REPORTING], EG(error_reporting_ini_entry)) != NULL)) {
+ if (EXPECTED(zend_hash_add_ptr(EG(modified_ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING), EG(error_reporting_ini_entry)) != NULL)) {
EG(error_reporting_ini_entry)->orig_value = EG(error_reporting_ini_entry)->value;
EG(error_reporting_ini_entry)->orig_modifiable = EG(error_reporting_ini_entry)->modifiable;
EG(error_reporting_ini_entry)->modified = 1;
@@ -1743,7 +1730,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_dispatch_try_catch_finally_hel
/* Uncaught exception */
cleanup_live_vars(execute_data, op_num, 0);
if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
zend_generator_close(generator, 1);
ZEND_VM_RETURN();
} else {
@@ -1753,7 +1740,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_dispatch_try_catch_finally_hel
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
- uint32_t throw_op_num = EG(opline_before_exception) - EX(func)->op_array.opcodes;
+ const zend_op *throw_op = EG(opline_before_exception);
+ uint32_t throw_op_num = throw_op - EX(func)->op_array.opcodes;
int i, current_try_catch_offset = -1;
{
@@ -1782,6 +1770,25 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(
cleanup_unfinished_calls(execute_data, throw_op_num);
+ if (throw_op->result_type & (IS_VAR | IS_TMP_VAR)) {
+ switch (throw_op->opcode) {
+ case ZEND_ADD_ARRAY_ELEMENT:
+ case ZEND_ROPE_INIT:
+ case ZEND_ROPE_ADD:
+ break; /* exception while building structures, live range handling will free those */
+
+ case ZEND_FETCH_CLASS:
+ case ZEND_DECLARE_CLASS:
+ case ZEND_DECLARE_INHERITED_CLASS:
+ case ZEND_DECLARE_ANON_CLASS:
+ case ZEND_DECLARE_ANON_INHERITED_CLASS:
+ break; /* return value is zend_class_entry pointer */
+
+ default:
+ zval_ptr_dtor_nogc(EX_VAR(throw_op->result.var));
+ }
+ }
+
ZEND_VM_TAIL_CALL(zend_dispatch_try_catch_finally_helper_SPEC(current_try_catch_offset, throw_op_num ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
@@ -1808,7 +1815,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_
ZEND_VM_CONTINUE();
case ZEND_USER_OPCODE_RETURN:
if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
zend_generator_close(generator, 1);
ZEND_VM_RETURN();
} else {
@@ -1904,14 +1911,15 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_HANDLER(
zend_class_entry *called_scope, *scope;
USE_OPLINE
- SAVE_OPLINE();
fetch_type = opline->extended_value;
scope = EX(func)->op_array.scope;
if (UNEXPECTED(scope == NULL)) {
+ SAVE_OPLINE();
zend_throw_error(NULL, "Cannot use \"%s\" when no class scope is active",
fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
@@ -1921,8 +1929,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_HANDLER(
break;
case ZEND_FETCH_CLASS_PARENT:
if (UNEXPECTED(scope->parent == NULL)) {
+ SAVE_OPLINE();
zend_throw_error(NULL,
"Cannot use \"parent\" when current class scope has no parent");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
@@ -1950,6 +1960,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(Z
zend_execute_data *call;
USE_OPLINE
+ SAVE_OPLINE();
+
args = emalloc(sizeof(zend_array));
zend_hash_init(args, num_args, NULL, ZVAL_PTR_DTOR, 0);
if (num_args) {
@@ -1965,7 +1977,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(Z
} ZEND_HASH_FILL_END();
}
- SAVE_OPLINE();
call = execute_data;
execute_data = EG(current_execute_data) = EX(prev_execute_data);
@@ -2050,10 +2061,7 @@ call_trampoline_end:
zend_vm_stack_free_call_frame(call);
if (UNEXPECTED(EG(exception) != NULL)) {
- zend_throw_exception_internal(NULL);
- if (RETURN_VALUE_USED(opline)) {
- zval_ptr_dtor(EX_VAR(opline->result.var));
- }
+ zend_rethrow_exception(execute_data);
HANDLE_EXCEPTION_LEAVE();
}
@@ -2115,7 +2123,7 @@ try_class_name:
}
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zend_function *fbc;
@@ -2237,7 +2245,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CON
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -2270,7 +2278,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_SPEC_CONST_HANDLER(
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
uint32_t arg_num;
@@ -2279,7 +2287,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_INIT_SPEC_CONST_HANDLER(Z
ZEND_VM_REPEATABLE_OPCODE
arg_num = opline->op1.num;
- param = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->result.var);
+ param = _get_zval_ptr_cv_undef_BP_VAR_W(opline->result.var EXECUTE_DATA_CC);
if (arg_num > EX_NUM_ARGS()) {
ZVAL_COPY(param, EX_CONSTANT(opline->op2));
if (Z_OPT_CONSTANT_P(param)) {
@@ -2424,7 +2432,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_CV_HANDLER(ZE
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
- zval *class_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ zval *class_name = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
try_class_name:
if (IS_CV == IS_CONST) {
@@ -2464,7 +2472,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HAND
zend_execute_data *call;
SAVE_OPLINE();
- function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ function_name = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
try_function_name:
if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
@@ -2522,7 +2530,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_TMPVAR_HANDLE
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
zend_free_op free_op2;
- zval *class_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ zval *class_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
try_class_name:
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
@@ -2563,7 +2571,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_
zend_execute_data *call;
SAVE_OPLINE();
- function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
try_function_name:
if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
@@ -2616,6 +2624,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND
{
USE_OPLINE
+ zval *op1;
+
+ op1 = EX_CONSTANT(opline->op1);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1));
+ ZEND_VM_NEXT_OPCODE();
+ }
SAVE_OPLINE();
bitwise_not_function(EX_VAR(opline->result.var),
@@ -2678,7 +2693,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_O
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -2710,7 +2725,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_O
ZEND_VM_JMP(opline);
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -2741,7 +2756,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_
ZEND_VM_JMP(opline);
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -2847,7 +2862,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZE
ZEND_VM_JMP(opline);
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *retval_ptr;
@@ -2975,7 +2990,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CONST_HA
zval *retval;
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
retval = EX_CONSTANT(opline->op1);
@@ -3054,7 +3069,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CONST_HANDLER(ZEND_
HANDLE_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *value, *arg;
@@ -3071,7 +3086,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_CONST_HANDLER(ZE
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *value, *arg;
@@ -3102,7 +3117,7 @@ send_val_by_ref:
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *value, *arg;
@@ -3196,6 +3211,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_CONST_HANDLER(ZEND_OP
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
@@ -3204,6 +3220,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_CONST_HANDLER(ZEND_OP
ce = zend_fetch_class(NULL, opline->op1.num);
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else {
@@ -3212,13 +3229,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_CONST_HANDLER(ZEND_OP
result = EX_VAR(opline->result.var);
if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
+ ZVAL_UNDEF(result);
HANDLE_EXCEPTION();
}
constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
if (constructor == NULL) {
if (UNEXPECTED(EG(exception))) {
- zval_ptr_dtor(result);
HANDLE_EXCEPTION();
}
@@ -3256,7 +3273,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_
USE_OPLINE
zval *obj;
- zend_object *clone_obj;
zend_class_entry *ce, *scope;
zend_function *clone;
zend_object_clone_obj_t clone_call;
@@ -3265,8 +3281,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_
obj = EX_CONSTANT(opline->op1);
if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
do {
@@ -3278,6 +3293,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_
break;
}
}
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
GET_OP1_UNDEF_CV(obj, BP_VAR_R);
if (UNEXPECTED(EG(exception) != NULL)) {
@@ -3296,6 +3312,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_
if (UNEXPECTED(clone_call == NULL)) {
zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
@@ -3307,6 +3324,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_
if (!zend_check_private(clone, scope, clone->common.function_name)) {
zend_throw_error(NULL, "Call to private %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : "");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) {
@@ -3316,17 +3334,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_
if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
zend_throw_error(NULL, "Call to protected %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : "");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
}
}
- clone_obj = clone_call(obj);
- if (EXPECTED(EG(exception) == NULL)) {
- ZVAL_OBJ(EX_VAR(opline->result.var), clone_obj);
- } else {
- OBJ_RELEASE(clone_obj);
- }
+ ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj));
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -3343,20 +3357,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CONST_HANDLER(ZEND_O
switch (opline->extended_value) {
case IS_NULL:
- /* This code is taken from convert_to_null. However, it does not seems very useful,
- * because a conversion to null always results in the same value. This could only
- * be relevant if a cast_object handler for IS_NULL has some kind of side-effect. */
-#if 0
- if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
- ZVAL_DEREF(expr);
- }
- if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->cast_object) {
- if (Z_OBJ_HT_P(expr)->cast_object(expr, result, IS_NULL) == SUCCESS) {
- break;
- }
- }
-#endif
-
ZVAL_NULL(result);
break;
case _IS_BOOL:
@@ -3408,7 +3408,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CONST_HANDLER(ZEND_O
if (Z_TYPE_P(expr) != IS_ARRAY) {
object_init(result);
if (Z_TYPE_P(expr) != IS_NULL) {
- expr = zend_hash_add_new(Z_OBJPROP_P(result), CG(known_strings)[ZEND_STR_SCALAR], expr);
+ expr = zend_hash_add_new(Z_OBJPROP_P(result), ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
if (IS_CONST == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
} else {
@@ -3441,6 +3441,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HAN
destroy_op_array(new_op_array);
efree_size(new_op_array, sizeof(zend_op_array));
}
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
if (RETURN_VALUE_USED(opline)) {
@@ -3452,6 +3453,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HAN
if (RETURN_VALUE_USED(opline)) {
return_value = EX_VAR(opline->result.var);
+ ZVAL_NULL(return_value);
}
new_op_array->scope = EX(func)->op_array.scope;
@@ -3480,7 +3482,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HAN
destroy_op_array(new_op_array);
efree_size(new_op_array, sizeof(zend_op_array));
if (UNEXPECTED(EG(exception) != NULL)) {
- zend_throw_exception_internal(NULL);
+ zend_rethrow_exception(execute_data);
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
} else if (RETURN_VALUE_USED(opline)) {
@@ -3495,7 +3498,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER(
USE_OPLINE
zval *array_ptr, *result;
- HashTable *fe_ht;
SAVE_OPLINE();
@@ -3508,12 +3510,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER(
}
Z_FE_POS_P(result) = 0;
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
- HashPosition pos = 0;
- Bucket *p;
-
result = EX_VAR(opline->result.var);
ZVAL_COPY_VALUE(result, array_ptr);
if (IS_CONST != IS_TMP_VAR) {
@@ -3526,26 +3525,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER(
}
Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
}
- fe_ht = Z_OBJPROP_P(array_ptr);
- pos = 0;
- p = fe_ht->arData;
- while (1) {
- if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
-
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
- }
- if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
- EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
- (UNEXPECTED(!p->key) ||
- EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) {
- break;
- }
- pos++;
- p++;
- }
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
+ Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
@@ -3561,7 +3541,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER(
if (!EG(exception)) {
zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
}
- zend_throw_exception_internal(NULL);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
@@ -3571,6 +3551,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER(
if (UNEXPECTED(EG(exception) != NULL)) {
OBJ_RELEASE(&iter->std);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
}
@@ -3580,6 +3561,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER(
if (UNEXPECTED(EG(exception) != NULL)) {
OBJ_RELEASE(&iter->std);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
iter->index = -1; /* will be set to 0 before using next handler */
@@ -3587,10 +3569,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER(
ZVAL_OBJ(EX_VAR(opline->result.var), &iter->std);
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
- if (is_empty) {
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
+ if (UNEXPECTED(EG(exception))) {
+ HANDLE_EXCEPTION();
+ } else if (is_empty) {
+ ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_CONTINUE();
} else {
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
}
}
} else {
@@ -3607,9 +3592,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER
USE_OPLINE
zval *array_ptr, *array_ref;
- HashTable *fe_ht;
- HashPosition pos = 0;
- Bucket *p;
SAVE_OPLINE();
@@ -3640,25 +3622,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER
} else {
SEPARATE_ARRAY(array_ptr);
}
- fe_ht = Z_ARRVAL_P(array_ptr);
- p = fe_ht->arData;
- while (1) {
- if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
+ Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
- }
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
- EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) {
- break;
- }
- pos++;
- p++;
- }
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
-
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
@@ -3679,25 +3645,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER
}
Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
}
- fe_ht = Z_OBJPROP_P(array_ptr);
- p = fe_ht->arData;
- while (1) {
- if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
-
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
- }
- if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
- EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
- (UNEXPECTED(!p->key) ||
- EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) {
- break;
- }
- pos++;
- p++;
- }
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
+ Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
@@ -3714,7 +3662,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER
if (!EG(exception)) {
zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
}
- zend_throw_exception_internal(NULL);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
@@ -3728,6 +3676,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER
} else {
}
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
}
@@ -3741,6 +3690,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER
} else {
}
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
iter->index = -1; /* will be set to 0 before using next handler */
@@ -3753,10 +3703,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER
} else {
}
- if (is_empty) {
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
+ if (UNEXPECTED(EG(exception))) {
+ HANDLE_EXCEPTION();
+ } else if (is_empty) {
+ ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_CONTINUE();
} else {
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
}
}
} else {
@@ -3807,6 +3760,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEN
zval *value;
zval *ref = NULL;
+ int ret;
SAVE_OPLINE();
value = EX_CONSTANT(opline->op1);
@@ -3817,7 +3771,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEN
}
value = Z_REFVAL_P(value);
}
- if (i_zend_is_true(value)) {
+
+ ret = i_zend_is_true(value);
+
+ if (UNEXPECTED(EG(exception))) {
+
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
+ HANDLE_EXCEPTION();
+ }
+
+ if (ret) {
zval *result = EX_VAR(opline->result.var);
ZVAL_COPY_VALUE(result, value);
@@ -3834,10 +3797,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEN
Z_ADDREF_P(result);
}
}
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_CONTINUE();
}
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -3873,13 +3837,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CONST_HANDLER(ZE
Z_ADDREF_P(result);
}
}
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_CONTINUE();
}
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -3923,7 +3888,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CONST_HANDLER(
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
zval *val;
@@ -3934,6 +3899,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CONST_HANDLER(
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -3957,6 +3923,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CONST_HANDLER(
if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
zval_ptr_dtor(val);
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
zend_generator_yield_from(generator, new_gen);
@@ -3964,6 +3931,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CONST_HANDLER(
} else if (UNEXPECTED(new_gen->execute_data == NULL)) {
zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
zval_ptr_dtor(val);
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
if (RETURN_VALUE_USED(opline)) {
@@ -3978,6 +3946,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CONST_HANDLER(
if (!EG(exception)) {
zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
}
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -3986,6 +3955,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CONST_HANDLER(
iter->funcs->rewind(iter);
if (UNEXPECTED(EG(exception) != NULL)) {
OBJ_RELEASE(&iter->std);
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
}
@@ -3994,6 +3964,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CONST_HANDLER(
}
} else {
zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -4023,20 +3994,26 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND
zval *value;
- SAVE_OPLINE();
value = EX_CONSTANT(opline->op1);
-try_strlen:
if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
+
+ ZEND_VM_NEXT_OPCODE();
} else {
zend_bool strict;
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
- value = GET_OP1_UNDEF_CV(value, BP_VAR_R);
- }
if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
value = Z_REFVAL_P(value);
- goto try_strlen;
+ if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
+
+ ZEND_VM_NEXT_OPCODE();
+ }
+ }
+
+ SAVE_OPLINE();
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
+ value = GET_OP1_UNDEF_CV(value, BP_VAR_R);
}
strict = EX_USES_STRICT_TYPES();
do {
@@ -4070,14 +4047,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(
SAVE_OPLINE();
value = EX_CONSTANT(opline->op1);
if (EXPECTED(Z_TYPE_P(value) == opline->extended_value)) {
- if (IS_CONST != IS_CONST && UNEXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
- zend_class_entry *ce = Z_OBJCE_P(value);
-
- if (EXPECTED(ZSTR_LEN(ce->name) != sizeof("__PHP_Incomplete_Class") - 1) ||
- EXPECTED(memcmp(ZSTR_VAL(ce->name), "__PHP_Incomplete_Class", sizeof("__PHP_Incomplete_Class") - 1) != 0)) {
- result = 1;
- }
- } else if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) {
+ if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) {
const char *type_name = zend_rsrc_list_get_rsrc_type(Z_RES_P(value));
if (EXPECTED(type_name != NULL)) {
@@ -4115,7 +4085,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DEFINED_SPEC_CONST_HANDLER(ZEN
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -4126,7 +4096,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HA
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -4298,6 +4268,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_CONST_HANDLER(Z
if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
SAVE_OPLINE();
zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
@@ -4399,17 +4370,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_CONST_HANDLE
zval *op1, *op2;
- SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
op2 = EX_CONSTANT(opline->op2);
- do {
- if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
- (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
- zend_string *op1_str = Z_STR_P(op1);
- zend_string *op2_str = Z_STR_P(op2);
- zend_string *str;
+ if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
+ (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
+ zend_string *op1_str = Z_STR_P(op1);
+ zend_string *op2_str = Z_STR_P(op2);
+ zend_string *str;
+ do {
if (IS_CONST != IS_CONST) {
if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
@@ -4438,19 +4408,24 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_CONST_HANDLE
memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
}
- } else {
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
- op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
- }
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
- op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
- }
- concat_function(EX_VAR(opline->result.var), op1, op2);
+
+ } while (0);
+
+ ZEND_VM_NEXT_OPCODE();
+ } else {
+ SAVE_OPLINE();
+
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
+ concat_function(EX_VAR(opline->result.var), op1, op2);
- } while (0);
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ }
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -4842,104 +4817,23 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_
zval *varname;
zval *retval;
- zend_string *name;
- zend_class_entry *ce;
SAVE_OPLINE();
varname = EX_CONSTANT(opline->op1);
- if (IS_CONST == IS_CONST) {
- name = Z_STR_P(varname);
- } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
- name = Z_STR_P(varname);
- zend_string_addref(name);
- } else {
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
- GET_OP1_UNDEF_CV(varname, BP_VAR_R);
- }
- name = zval_get_string(varname);
- }
-
- if (IS_CONST == IS_CONST) {
- if (IS_CONST == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
- retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
-
- /* check if static properties were destoyed */
- if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
-
- HANDLE_EXCEPTION();
- }
- }
-
- goto fetch_static_prop_return;
- } else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
- ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
- if (UNEXPECTED(ce == NULL)) {
- ZEND_ASSERT(EG(exception));
- if (IS_CONST != IS_CONST) {
- zend_string_release(name);
- }
-
- HANDLE_EXCEPTION();
- }
- CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
- }
- } else {
- if (IS_CONST == IS_UNUSED) {
- ce = zend_fetch_class(NULL, opline->op2.num);
- if (UNEXPECTED(ce == NULL)) {
- ZEND_ASSERT(EG(exception));
- if (IS_CONST != IS_CONST) {
- zend_string_release(name);
- }
+ retval = zend_fetch_static_property_address(varname, IS_CONST, opline->op2, IS_CONST, type EXECUTE_DATA_CC);
- HANDLE_EXCEPTION();
- }
- } else {
- ce = Z_CE_P(EX_VAR(opline->op2.var));
- }
- if (IS_CONST == IS_CONST &&
- (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
-
- /* check if static properties were destoyed */
- if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
-
- HANDLE_EXCEPTION();
- }
- }
-
- goto fetch_static_prop_return;
- }
- }
- retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
if (UNEXPECTED(retval == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- ZEND_ASSERT(EG(exception));
- if (IS_CONST != IS_CONST) {
- zend_string_release(name);
- }
+ if (EG(exception)) {
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
+ } else {
+ ZEND_ASSERT(type == BP_VAR_IS);
+ retval = &EG(uninitialized_zval);
}
- } else if (IS_CONST == IS_CONST) {
- CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
- }
-
- if (IS_CONST != IS_CONST) {
- zend_string_release(name);
}
-fetch_static_prop_return:
if (type == BP_VAR_R || type == BP_VAR_IS) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
} else {
@@ -4996,7 +4890,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CONST_H
if (IS_CONST != IS_CONST) {
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_array:
- value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R);
+ value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
result = EX_VAR(opline->result.var);
ZVAL_COPY_UNREF(result, value);
} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
@@ -5009,11 +4903,11 @@ fetch_dim_r_array:
} else {
fetch_dim_r_slow:
result = EX_VAR(opline->result.var);
- zend_fetch_dimension_address_read_R_slow(result, container, dim);
+ zend_fetch_dimension_address_read_R_slow(result, container, dim EXECUTE_DATA_CC);
}
} else {
result = EX_VAR(opline->result.var);
- zend_fetch_dimension_address_read_R(result, container, dim, IS_CONST);
+ zend_fetch_dimension_address_read_R(result, container, dim, IS_CONST EXECUTE_DATA_CC);
}
@@ -5028,7 +4922,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_
SAVE_OPLINE();
container = EX_CONSTANT(opline->op1);
- zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
+ zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST EXECUTE_DATA_CC);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -5047,10 +4941,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_
zend_throw_error(NULL, "Cannot use temporary expression in write context");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
container = NULL;
- zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
+ zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST EXECUTE_DATA_CC);
if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
}
@@ -5061,10 +4956,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_
zend_throw_error(NULL, "Cannot use [] for reading");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
container = EX_CONSTANT(opline->op1);
- zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
+ zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST EXECUTE_DATA_CC);
}
@@ -5083,9 +4979,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_H
container = EX_CONSTANT(opline->op1);
if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
offset = EX_CONSTANT(opline->op2);
@@ -5113,7 +5007,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_H
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
retval = OBJ_PROP(zobj, prop_offset);
- if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
+ if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
break;
}
@@ -5127,8 +5021,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_H
}
if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
+ zend_string *property_name;
fetch_obj_r_no_object:
- zend_error(E_NOTICE, "Trying to get property of non-object");
+ property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
ZVAL_NULL(EX_VAR(opline->result.var));
} else {
retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
@@ -5155,9 +5052,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_
container = EX_CONSTANT(opline->op1);
if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
offset = EX_CONSTANT(opline->op2);
@@ -5226,20 +5121,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_
zval *property;
SAVE_OPLINE();
- property = EX_CONSTANT(opline->op2);
container = NULL;
if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
zend_throw_error(NULL, "Cannot use temporary expression in write context");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
+ property = EX_CONSTANT(opline->op2);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CONST, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -5260,7 +5154,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_SPEC_CONST_CONST_HA
SAVE_OPLINE();
container = EX_CONSTANT(opline->op1);
- zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2));
+ zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2) EXECUTE_DATA_CC);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -5272,8 +5166,51 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CONST_H
zval *op1, *op2;
zend_string *op1_str, *op2_str, *str;
- SAVE_OPLINE();
+
op1 = EX_CONSTANT(opline->op1);
+ op2 = EX_CONSTANT(opline->op2);
+ if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
+ (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
+ zend_string *op1_str = Z_STR_P(op1);
+ zend_string *op2_str = Z_STR_P(op2);
+ zend_string *str;
+
+ do {
+ if (IS_CONST != IS_CONST) {
+ if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
+
+ break;
+ }
+ }
+ if (IS_CONST != IS_CONST) {
+ if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
+
+ break;
+ }
+ }
+ if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
+ !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
+ size_t len = ZSTR_LEN(op1_str);
+
+ str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
+ memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
+ ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
+ break;
+ } else {
+ str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
+ memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
+ memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
+ ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
+ }
+
+ } while (0);
+
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
if (IS_CONST == IS_CONST) {
op1_str = Z_STR_P(op1);
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
@@ -5284,7 +5221,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CONST_H
}
op1_str = _zval_get_string_func(op1);
}
- op2 = EX_CONSTANT(opline->op2);
if (IS_CONST == IS_CONST) {
op2_str = Z_STR_P(op2);
} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
@@ -5346,6 +5282,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CO
SAVE_OPLINE();
+ object = EX_CONSTANT(opline->op1);
+
+ if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ }
+
function_name = EX_CONSTANT(opline->op2);
if (IS_CONST != IS_CONST &&
@@ -5359,6 +5301,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CO
} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
if (UNEXPECTED(EG(exception) != NULL)) {
+
HANDLE_EXCEPTION();
}
}
@@ -5369,14 +5312,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CO
} while (0);
}
- object = EX_CONSTANT(opline->op1);
-
- if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
- }
-
if (IS_CONST != IS_UNUSED) {
do {
if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -5404,8 +5339,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CO
obj = Z_OBJ_P(object);
called_scope = obj->ce;
- if (IS_CONST != IS_CONST ||
- UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
+ if (IS_CONST == IS_CONST &&
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(function_name)) == called_scope)) {
+ fbc = CACHED_PTR(Z_CACHE_SLOT_P(function_name) + sizeof(void*));
+ } else {
zend_object *orig_obj = obj;
if (UNEXPECTED(obj->handlers->get_method == NULL)) {
@@ -5497,8 +5434,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C
/* nothing to do */
} else if (IS_CONST != IS_CONST &&
IS_CONST == IS_CONST &&
- (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
- /* do nothing */
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))) == ce)) {
+ fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)) + sizeof(void*));
} else if (IS_CONST != IS_UNUSED) {
@@ -5645,12 +5582,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CONS
}
if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
/* Delay closure destruction until its invocation */
- if (IS_CONST & (IS_VAR|IS_CV)) {
- ZVAL_DEREF(function_name);
- }
ZEND_ASSERT(GC_TYPE((zend_object*)func->common.prototype) == IS_OBJECT);
GC_REFCOUNT((zend_object*)func->common.prototype)++;
call_info |= ZEND_CALL_CLOSURE;
+ if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
+ call_info |= ZEND_CALL_FAKE_CLOSURE;
+ }
} else if (object) {
call_info |= ZEND_CALL_RELEASE_THIS;
GC_REFCOUNT(object)++; /* For $this pointer */
@@ -5778,6 +5715,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_CONS
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
@@ -5787,12 +5725,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_CONS
ce = zend_fetch_class(NULL, opline->op1.num);
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else {
ce = Z_CE_P(EX_VAR(opline->op1.var));
}
- if ((value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce)) != NULL) {
+ if (EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))) == ce)) {
+ value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)) + sizeof(void*));
break;
}
}
@@ -5801,12 +5741,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_CONS
scope = EX(func)->op_array.scope;
if (!zend_verify_const_access(c, scope)) {
zend_throw_error(NULL, "Cannot access %s const %s::%s", zend_visibility_string(Z_ACCESS_FLAGS(c->value)), ZSTR_VAL(ce->name), Z_STRVAL_P(EX_CONSTANT(opline->op2)));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
value = &c->value;
if (Z_CONSTANT_P(value)) {
zval_update_constant_ex(value, c->ce);
if (UNEXPECTED(EG(exception) != NULL)) {
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
}
@@ -5817,6 +5759,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_CONS
}
} else {
zend_throw_error(NULL, "Undefined class constant '%s'", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} while (0);
@@ -5951,13 +5894,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CONST_HA
}
}
- if (IS_CONST == IS_UNUSED) {
- ZEND_VM_NEXT_OPCODE();
-#if 0 || (IS_CONST != IS_UNUSED)
- } else {
- ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-#endif
- }
+ ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -6047,6 +5984,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
@@ -6060,13 +5998,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC
zend_string_release(Z_STR(tmp));
}
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else {
ce = Z_CE_P(EX_VAR(opline->op2.var));
}
if (IS_CONST == IS_CONST &&
- (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))) == ce)) {
+
+ value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
@@ -6244,9 +6185,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CO
container = EX_CONSTANT(opline->op1);
if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
offset = EX_CONSTANT(opline->op2);
@@ -6263,7 +6202,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CO
}
}
if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
- zend_error(E_NOTICE, "Trying to check property of non-object");
+ zend_string *property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to check property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
isset_no_object:
result = ((opline->extended_value & ZEND_ISSET) == 0);
} else {
@@ -6314,13 +6255,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CONST_HANDLER
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -6445,7 +6387,105 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CONST_HANDLER
ZEND_VM_RETURN();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+
+ zval *op, *jump_zv;
+ HashTable *jumptable;
+
+ op = EX_CONSTANT(opline->op1);
+ jumptable = Z_ARRVAL_P(EX_CONSTANT(opline->op2));
+
+ if (Z_TYPE_P(op) != IS_LONG) {
+ ZVAL_DEREF(op);
+ if (Z_TYPE_P(op) != IS_LONG) {
+ /* Wrong type, fall back to ZEND_CASE chain */
+ ZEND_VM_NEXT_OPCODE();
+ }
+ }
+
+ jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
+ if (jump_zv != NULL) {
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
+ ZEND_VM_CONTINUE();
+ } else {
+ /* default */
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
+ ZEND_VM_CONTINUE();
+ }
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+
+ zval *op, *jump_zv;
+ HashTable *jumptable;
+
+ op = EX_CONSTANT(opline->op1);
+ jumptable = Z_ARRVAL_P(EX_CONSTANT(opline->op2));
+
+ if (Z_TYPE_P(op) != IS_STRING) {
+ ZVAL_DEREF(op);
+ if (Z_TYPE_P(op) != IS_STRING) {
+ /* Wrong type, fall back to ZEND_CASE chain */
+ ZEND_VM_NEXT_OPCODE();
+ }
+ }
+
+ jump_zv = zend_hash_find(jumptable, Z_STR_P(op));
+ if (jump_zv != NULL) {
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
+ ZEND_VM_CONTINUE();
+ } else {
+ /* default */
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
+ ZEND_VM_CONTINUE();
+ }
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+
+ zval *op1;
+ HashTable *ht = Z_ARRVAL_P(EX_CONSTANT(opline->op2));
+ int result;
+
+ SAVE_OPLINE();
+ op1 = EX_CONSTANT(opline->op1);
+ if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
+ result = zend_hash_exists(ht, Z_STR_P(op1));
+ } else if (opline->extended_value) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ result = zend_hash_index_exists(ht, Z_LVAL_P(op1));
+ } else {
+ result = 0;
+ }
+ } else if (Z_TYPE_P(op1) <= IS_FALSE) {
+ result = zend_hash_exists(ht, ZSTR_EMPTY_ALLOC());
+ } else {
+ zend_string *key;
+ zval key_tmp, result_tmp;
+
+ result = 0;
+ ZEND_HASH_FOREACH_STR_KEY(ht, key) {
+ ZVAL_STR(&key_tmp, key);
+ compare_function(&result_tmp, op1, &key_tmp);
+ if (Z_LVAL(result_tmp) == 0) {
+ result = 1;
+ break;
+ }
+ } ZEND_HASH_FOREACH_END();
+ }
+
+ ZEND_VM_SMART_BRANCH(result, 1);
+ ZVAL_BOOL(EX_VAR(opline->result.var), result);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+}
+
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -6480,7 +6520,7 @@ fetch_dim_r_index_array:
} else {
fetch_dim_r_index_slow:
SAVE_OPLINE();
- zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim);
+ zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim EXECUTE_DATA_CC);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -6502,7 +6542,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_TMP_HA
SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
+ op2 = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
result = fast_is_identical_function(op1, op2);
zval_ptr_dtor_nogc(free_op2);
@@ -6520,7 +6560,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_TM
SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
+ op2 = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
result = fast_is_not_identical_function(op1, op2);
zval_ptr_dtor_nogc(free_op2);
@@ -6533,13 +6573,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_TMP_HANDLER(Z
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -6613,7 +6654,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_TMP_HANDLER(Z
/* Set the new yielded key */
if (IS_TMP_VAR != IS_UNUSED) {
zend_free_op free_op2;
- zval *key = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
+ zval *key = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_TMP_VAR == IS_CONST) {
@@ -6673,7 +6714,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_VAR_HA
SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2);
+ op2 = _get_zval_ptr_var_deref(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
result = fast_is_identical_function(op1, op2);
zval_ptr_dtor_nogc(free_op2);
@@ -6691,7 +6732,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_VA
SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2);
+ op2 = _get_zval_ptr_var_deref(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
result = fast_is_not_identical_function(op1, op2);
zval_ptr_dtor_nogc(free_op2);
@@ -6706,104 +6747,23 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_
zval *varname;
zval *retval;
- zend_string *name;
- zend_class_entry *ce;
SAVE_OPLINE();
varname = EX_CONSTANT(opline->op1);
- if (IS_CONST == IS_CONST) {
- name = Z_STR_P(varname);
- } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
- name = Z_STR_P(varname);
- zend_string_addref(name);
- } else {
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
- GET_OP1_UNDEF_CV(varname, BP_VAR_R);
- }
- name = zval_get_string(varname);
- }
-
- if (IS_VAR == IS_CONST) {
- if (IS_CONST == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
- retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
-
- /* check if static properties were destoyed */
- if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
-
- HANDLE_EXCEPTION();
- }
- }
-
- goto fetch_static_prop_return;
- } else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
- ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
- if (UNEXPECTED(ce == NULL)) {
- ZEND_ASSERT(EG(exception));
- if (IS_CONST != IS_CONST) {
- zend_string_release(name);
- }
+ retval = zend_fetch_static_property_address(varname, IS_CONST, opline->op2, IS_VAR, type EXECUTE_DATA_CC);
- HANDLE_EXCEPTION();
- }
- CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
- }
- } else {
- if (IS_VAR == IS_UNUSED) {
- ce = zend_fetch_class(NULL, opline->op2.num);
- if (UNEXPECTED(ce == NULL)) {
- ZEND_ASSERT(EG(exception));
- if (IS_CONST != IS_CONST) {
- zend_string_release(name);
- }
-
- HANDLE_EXCEPTION();
- }
- } else {
- ce = Z_CE_P(EX_VAR(opline->op2.var));
- }
- if (IS_CONST == IS_CONST &&
- (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
-
- /* check if static properties were destoyed */
- if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
-
- HANDLE_EXCEPTION();
- }
- }
-
- goto fetch_static_prop_return;
- }
- }
- retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
if (UNEXPECTED(retval == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- ZEND_ASSERT(EG(exception));
- if (IS_CONST != IS_CONST) {
- zend_string_release(name);
- }
+ if (EG(exception)) {
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
+ } else {
+ ZEND_ASSERT(type == BP_VAR_IS);
+ retval = &EG(uninitialized_zval);
}
- } else if (IS_CONST == IS_CONST) {
- CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
}
- if (IS_CONST != IS_CONST) {
- zend_string_release(name);
- }
-
-fetch_static_prop_return:
if (type == BP_VAR_R || type == BP_VAR_IS) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
} else {
@@ -6935,6 +6895,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
@@ -6948,13 +6909,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC
zend_string_release(Z_STR(tmp));
}
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else {
ce = Z_CE_P(EX_VAR(opline->op2.var));
}
if (IS_CONST == IS_CONST &&
- (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))) == ce)) {
+
+ value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
@@ -6992,13 +6956,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_VAR_HANDLER(Z
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -7072,7 +7037,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_VAR_HANDLER(Z
/* Set the new yielded key */
if (IS_VAR != IS_UNUSED) {
zend_free_op free_op2;
- zval *key = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ zval *key = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_VAR == IS_CONST) {
@@ -7147,10 +7112,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_
name = zval_get_string(varname);
}
- target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
+ target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK EXECUTE_DATA_CC);
retval = zend_hash_find(target_symbol_table, name);
if (retval == NULL) {
- if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) {
+ if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
zval *result;
fetch_this:
@@ -7175,9 +7140,11 @@ fetch_this:
break;
case BP_VAR_RW:
case BP_VAR_W:
+ ZVAL_UNDEF(result);
zend_throw_error(NULL, "Cannot re-assign $this");
break;
case BP_VAR_UNSET:
+ ZVAL_UNDEF(result);
zend_throw_error(NULL, "Cannot unset $this");
break;
EMPTY_SWITCH_DEFAULT_CASE()
@@ -7208,7 +7175,7 @@ fetch_this:
} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
retval = Z_INDIRECT_P(retval);
if (Z_TYPE_P(retval) == IS_UNDEF) {
- if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) {
+ if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
goto fetch_this;
}
switch (type) {
@@ -7289,104 +7256,23 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_
zval *varname;
zval *retval;
- zend_string *name;
- zend_class_entry *ce;
SAVE_OPLINE();
varname = EX_CONSTANT(opline->op1);
- if (IS_CONST == IS_CONST) {
- name = Z_STR_P(varname);
- } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
- name = Z_STR_P(varname);
- zend_string_addref(name);
- } else {
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
- GET_OP1_UNDEF_CV(varname, BP_VAR_R);
- }
- name = zval_get_string(varname);
- }
-
- if (IS_UNUSED == IS_CONST) {
- if (IS_CONST == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
- retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
+ retval = zend_fetch_static_property_address(varname, IS_CONST, opline->op2, IS_UNUSED, type EXECUTE_DATA_CC);
- /* check if static properties were destoyed */
- if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
-
- HANDLE_EXCEPTION();
- }
- }
-
- goto fetch_static_prop_return;
- } else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
- ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
- if (UNEXPECTED(ce == NULL)) {
- ZEND_ASSERT(EG(exception));
- if (IS_CONST != IS_CONST) {
- zend_string_release(name);
- }
-
- HANDLE_EXCEPTION();
- }
- CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
- }
- } else {
- if (IS_UNUSED == IS_UNUSED) {
- ce = zend_fetch_class(NULL, opline->op2.num);
- if (UNEXPECTED(ce == NULL)) {
- ZEND_ASSERT(EG(exception));
- if (IS_CONST != IS_CONST) {
- zend_string_release(name);
- }
-
- HANDLE_EXCEPTION();
- }
- } else {
- ce = Z_CE_P(EX_VAR(opline->op2.var));
- }
- if (IS_CONST == IS_CONST &&
- (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
-
- /* check if static properties were destoyed */
- if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
-
- HANDLE_EXCEPTION();
- }
- }
-
- goto fetch_static_prop_return;
- }
- }
- retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
if (UNEXPECTED(retval == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- ZEND_ASSERT(EG(exception));
- if (IS_CONST != IS_CONST) {
- zend_string_release(name);
- }
+ if (EG(exception)) {
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
+ } else {
+ ZEND_ASSERT(type == BP_VAR_IS);
+ retval = &EG(uninitialized_zval);
}
- } else if (IS_CONST == IS_CONST) {
- CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
}
- if (IS_CONST != IS_CONST) {
- zend_string_release(name);
- }
-
-fetch_static_prop_return:
if (type == BP_VAR_R || type == BP_VAR_IS) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
} else {
@@ -7444,10 +7330,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_
zend_throw_error(NULL, "Cannot use temporary expression in write context");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
container = NULL;
- zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
+ zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED EXECUTE_DATA_CC);
if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
}
@@ -7458,10 +7345,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_
zend_throw_error(NULL, "Cannot use [] for reading");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
container = EX_CONSTANT(opline->op1);
- zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
+ zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, NULL, IS_UNUSED EXECUTE_DATA_CC);
}
@@ -7507,8 +7395,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C
/* nothing to do */
} else if (IS_CONST != IS_CONST &&
IS_UNUSED == IS_CONST &&
- (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
- /* do nothing */
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))) == ce)) {
+ fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)) + sizeof(void*));
} else if (IS_UNUSED != IS_UNUSED) {
@@ -7651,10 +7539,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_
ZVAL_DEREF(retval_ptr);
}
- if (UNEXPECTED(!ret_info->class_name
- && ret_info->type_hint != IS_CALLABLE
- && ret_info->type_hint != IS_ITERABLE
- && !ZEND_SAME_FAKE_TYPE(ret_info->type_hint, Z_TYPE_P(retval_ptr))
+ if (UNEXPECTED(!ZEND_TYPE_IS_CLASS(ret_info->type)
+ && ZEND_TYPE_CODE(ret_info->type) != IS_CALLABLE
+ && ZEND_TYPE_CODE(ret_info->type) != IS_ITERABLE
+ && !ZEND_SAME_FAKE_TYPE(ZEND_TYPE_CODE(ret_info->type), Z_TYPE_P(retval_ptr))
&& !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)
&& retval_ref != retval_ptr)
) {
@@ -7668,12 +7556,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_
retval_ptr = retval_ref;
}
zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
-
- if (UNEXPECTED(EG(exception) != NULL)) {
- if (IS_CONST == IS_CONST) {
- zval_ptr_dtor_nogc(retval_ptr);
- }
- }
#endif
}
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -7796,13 +7678,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_H
}
}
- if (IS_CONST == IS_UNUSED) {
- ZEND_VM_NEXT_OPCODE();
-#if 0 || (IS_CONST != IS_UNUSED)
- } else {
- ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-#endif
- }
+ ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -7813,31 +7689,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HA
SAVE_OPLINE();
- if (IS_CONST == IS_CV &&
- (opline->extended_value & ZEND_QUICK_SET)) {
- zval *var = EX_VAR(opline->op1.var);
-
- if (Z_REFCOUNTED_P(var)) {
- zend_refcounted *garbage = Z_COUNTED_P(var);
-
- if (!--GC_REFCOUNT(garbage)) {
- ZVAL_UNDEF(var);
- zval_dtor_func(garbage);
- } else {
- zval *z = var;
- ZVAL_DEREF(z);
- if (Z_COLLECTABLE_P(z) && UNEXPECTED(!Z_GC_INFO_P(z))) {
- ZVAL_UNDEF(var);
- gc_possible_root(Z_COUNTED_P(z));
- } else {
- ZVAL_UNDEF(var);
- }
- }
- } else {
- ZVAL_UNDEF(var);
- }
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
- }
varname = EX_CONSTANT(opline->op1);
@@ -7850,7 +7701,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HA
varname = &tmp;
}
- target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
+ target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK EXECUTE_DATA_CC);
zend_hash_del_ind(target_symbol_table, Z_STR_P(varname));
if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
@@ -7922,55 +7773,34 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_U
zval *value;
int result;
- if (IS_CONST == IS_CV &&
- (opline->extended_value & ZEND_QUICK_SET)) {
- value = EX_VAR(opline->op1.var);
- if (opline->extended_value & ZEND_ISSET) {
- result =
- Z_TYPE_P(value) > IS_NULL &&
- (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
- } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
- SAVE_OPLINE();
- result = !i_zend_is_true(value);
- if (UNEXPECTED(EG(exception))) {
- HANDLE_EXCEPTION();
- }
- }
- ZEND_VM_SMART_BRANCH(result, 0);
- ZVAL_BOOL(EX_VAR(opline->result.var), result);
- ZEND_VM_SET_NEXT_OPCODE(opline + 1);
- ZEND_VM_CONTINUE();
- } else {
-
- zval tmp, *varname;
- HashTable *target_symbol_table;
-
- SAVE_OPLINE();
- varname = EX_CONSTANT(opline->op1);
- ZVAL_UNDEF(&tmp);
- if (IS_CONST != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
- ZVAL_STR(&tmp, zval_get_string(varname));
- varname = &tmp;
- }
+ zval tmp, *varname;
+ HashTable *target_symbol_table;
- target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
- value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
+ SAVE_OPLINE();
+ varname = EX_CONSTANT(opline->op1);
+ ZVAL_UNDEF(&tmp);
+ if (IS_CONST != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
+ ZVAL_STR(&tmp, zval_get_string(varname));
+ varname = &tmp;
+ }
- if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
- zend_string_release(Z_STR(tmp));
- }
+ target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK EXECUTE_DATA_CC);
+ value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
- if (opline->extended_value & ZEND_ISSET) {
- result = value && Z_TYPE_P(value) > IS_NULL &&
- (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
- } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
- result = !value || !i_zend_is_true(value);
- }
+ if (IS_CONST != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
+ zend_string_release(Z_STR(tmp));
+ }
- ZEND_VM_SMART_BRANCH(result, 1);
- ZVAL_BOOL(EX_VAR(opline->result.var), result);
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ if (opline->extended_value & ZEND_ISSET) {
+ result = value && Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ result = !value || !i_zend_is_true(value);
}
+
+ ZEND_VM_SMART_BRANCH(result, 1);
+ ZVAL_BOOL(EX_VAR(opline->result.var), result);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -8004,6 +7834,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
@@ -8017,13 +7848,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC
zend_string_release(Z_STR(tmp));
}
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else {
ce = Z_CE_P(EX_VAR(opline->op2.var));
}
if (IS_CONST == IS_CONST &&
- (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))) == ce)) {
+
+ value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
@@ -8064,8 +7898,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_C
zval *object;
zend_class_entry *called_scope;
- SAVE_OPLINE();
-
zfunc = zend_hash_find(EG(function_table), Z_STR_P(EX_CONSTANT(opline->op1)));
ZEND_ASSERT(zfunc != NULL && Z_FUNC_P(zfunc)->type == ZEND_USER_FUNCTION);
@@ -8084,20 +7916,21 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_C
zend_create_closure(EX_VAR(opline->result.var), Z_FUNC_P(zfunc),
EX(func)->op_array.scope, called_scope, object);
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -8222,6 +8055,174 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_UNUSED_HANDLE
ZEND_VM_RETURN();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+
+ zval *op1;
+ zend_long count;
+
+ SAVE_OPLINE();
+ op1 = EX_CONSTANT(opline->op1);
+ do {
+ if (Z_TYPE_P(op1) == IS_ARRAY) {
+ count = zend_array_count(Z_ARRVAL_P(op1));
+ break;
+ } else if (Z_TYPE_P(op1) == IS_OBJECT) {
+ /* first, we check if the handler is defined */
+ if (Z_OBJ_HT_P(op1)->count_elements) {
+ if (SUCCESS == Z_OBJ_HT_P(op1)->count_elements(op1, &count)) {
+ break;
+ }
+ }
+
+ /* if not and the object implements Countable we call its count() method */
+ if (instanceof_function(Z_OBJCE_P(op1), zend_ce_countable)) {
+ zval retval;
+
+ zend_call_method_with_0_params(op1, NULL, NULL, "count", &retval);
+ count = zval_get_long(&retval);
+ zval_ptr_dtor(&retval);
+ break;
+ }
+
+ /* If There's no handler and it doesn't implement Countable then add a warning */
+ count = 1;
+ } else if (Z_TYPE_P(op1) == IS_NULL) {
+ count = 0;
+ } else {
+ count = 1;
+ }
+ zend_error(E_WARNING, "count(): Parameter must be an array or an object that implements Countable");
+ } while (0);
+
+ ZVAL_LONG(EX_VAR(opline->result.var), count);
+
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+
+ if (IS_CONST == IS_UNUSED) {
+ if (UNEXPECTED(!EX(func)->common.scope)) {
+ SAVE_OPLINE();
+ zend_error(E_WARNING, "get_class() called without object from outside a class");
+ ZVAL_FALSE(EX_VAR(opline->result.var));
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ } else {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
+ ZEND_VM_NEXT_OPCODE();
+ }
+ } else {
+
+ zval *op1;
+
+ SAVE_OPLINE();
+ op1 = EX_CONSTANT(opline->op1);
+ if (Z_TYPE_P(op1) == IS_OBJECT) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
+ } else {
+ zend_error(E_WARNING, "get_class() expects parameter 1 to be object, %s given", zend_get_type_by_const(Z_TYPE_P(op1)));
+ ZVAL_FALSE(EX_VAR(opline->result.var));
+ }
+
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ }
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+
+ zval *op1;
+ zend_string *type;
+
+ SAVE_OPLINE();
+ op1 = EX_CONSTANT(opline->op1);
+ type = zend_zval_get_type(op1);
+ if (EXPECTED(type)) {
+ ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
+ } else {
+ ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
+ }
+
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zend_array *ht;
+ uint32_t arg_count, result_size, skip;
+
+ arg_count = EX_NUM_ARGS();
+ if (IS_CONST == IS_CONST) {
+ skip = Z_LVAL_P(EX_CONSTANT(opline->op1));
+ if (arg_count < skip) {
+ result_size = 0;
+ } else {
+ result_size = arg_count - skip;
+ }
+ } else {
+ skip = 0;
+ result_size = arg_count;
+ }
+
+ ht = (zend_array *) emalloc(sizeof(zend_array));
+ zend_hash_init(ht, result_size, NULL, ZVAL_PTR_DTOR, 0);
+ ZVAL_ARR(EX_VAR(opline->result.var), ht);
+
+ if (result_size) {
+ uint32_t first_extra_arg = EX(func)->op_array.num_args;
+ zend_hash_real_init(ht, 1);
+ ZEND_HASH_FILL_PACKED(ht) {
+ zval *p, *q;
+ uint32_t i = skip;
+ p = EX_VAR_NUM(i);
+ if (arg_count > first_extra_arg) {
+ while (i < first_extra_arg) {
+ q = p;
+ if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
+ ZVAL_DEREF(q);
+ if (Z_OPT_REFCOUNTED_P(q)) {
+ Z_ADDREF_P(q);
+ }
+ } else {
+ q = &EG(uninitialized_zval);
+ }
+ ZEND_HASH_FILL_ADD(q);
+ p++;
+ i++;
+ }
+ if (skip < first_extra_arg) {
+ skip = 0;
+ } else {
+ skip -= first_extra_arg;
+ }
+ p = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T + skip);
+ }
+ while (i < arg_count) {
+ q = p;
+ if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
+ ZVAL_DEREF(q);
+ if (Z_OPT_REFCOUNTED_P(q)) {
+ Z_ADDREF_P(q);
+ }
+ } else {
+ q = &EG(uninitialized_zval);
+ }
+ ZEND_HASH_FILL_ADD(q);
+ p++;
+ i++;
+ }
+ } ZEND_HASH_FILL_END();
+ ht->nNumOfElements = result_size;
+ }
+ ZEND_VM_NEXT_OPCODE();
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -8229,7 +8230,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_CV_HANDLER(ZEND
zval *op1, *op2, *result;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
result = EX_VAR(opline->result.var);
@@ -8272,7 +8273,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_CV_HANDLER(ZEND
zval *op1, *op2, *result;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
result = EX_VAR(opline->result.var);
@@ -8315,7 +8316,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CONST_CV_HANDLER(ZEND
zval *op1, *op2, *result;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
zend_long overflow;
@@ -8362,7 +8363,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND
SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
fast_div_function(EX_VAR(opline->result.var), op1, op2);
@@ -8376,13 +8377,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_CV_HANDLER(ZEND
zval *op1, *op2, *result;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
result = EX_VAR(opline->result.var);
if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
SAVE_OPLINE();
zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
@@ -8414,7 +8416,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_CV_HANDLER(ZEND_
zval *op1, *op2;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
@@ -8442,7 +8444,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_CV_HANDLER(ZEND_
zval *op1, *op2;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
@@ -8471,7 +8473,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND
SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
pow_function(EX_VAR(opline->result.var), op1, op2);
@@ -8484,17 +8486,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_CV_HANDLER(Z
zval *op1, *op2;
- SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
- do {
- if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
- (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
- zend_string *op1_str = Z_STR_P(op1);
- zend_string *op2_str = Z_STR_P(op2);
- zend_string *str;
+ if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
+ (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
+ zend_string *op1_str = Z_STR_P(op1);
+ zend_string *op2_str = Z_STR_P(op2);
+ zend_string *str;
+ do {
if (IS_CONST != IS_CONST) {
if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
@@ -8523,19 +8524,24 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_CV_HANDLER(Z
memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
}
- } else {
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
- op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
- }
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
- op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
- }
- concat_function(EX_VAR(opline->result.var), op1, op2);
+
+ } while (0);
+
+ ZEND_VM_NEXT_OPCODE();
+ } else {
+ SAVE_OPLINE();
+
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
+ concat_function(EX_VAR(opline->result.var), op1, op2);
- } while (0);
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ }
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -8547,7 +8553,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_CV_HAN
SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
result = fast_is_identical_function(op1, op2);
@@ -8565,7 +8571,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CV
SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
result = fast_is_not_identical_function(op1, op2);
@@ -8581,7 +8587,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_CV_HANDLER
zval *op1, *op2, *result;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
do {
int result;
@@ -8649,7 +8655,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_CV_HAN
zval *op1, *op2, *result;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
do {
int result;
@@ -8717,7 +8723,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_CV_HANDL
zval *op1, *op2, *result;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
do {
int result;
@@ -8767,7 +8773,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST
zval *op1, *op2, *result;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
do {
int result;
@@ -8818,7 +8824,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_CV_HANDLE
SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
compare_function(EX_VAR(opline->result.var), op1, op2);
@@ -8832,7 +8838,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CONST_CV_HANDLER(ZE
zval *op1, *op2;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
@@ -8859,7 +8865,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CONST_CV_HANDLER(Z
zval *op1, *op2;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
@@ -8886,7 +8892,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CONST_CV_HANDLER(Z
zval *op1, *op2;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
@@ -8914,7 +8920,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CONST_CV_HANDLER
SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
@@ -8929,11 +8935,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CV_HAND
SAVE_OPLINE();
container = EX_CONSTANT(opline->op1);
- dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ dim = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (IS_CONST != IS_CONST) {
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_array:
- value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R);
+ value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
result = EX_VAR(opline->result.var);
ZVAL_COPY_UNREF(result, value);
} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
@@ -8946,11 +8952,11 @@ fetch_dim_r_array:
} else {
fetch_dim_r_slow:
result = EX_VAR(opline->result.var);
- zend_fetch_dimension_address_read_R_slow(result, container, dim);
+ zend_fetch_dimension_address_read_R_slow(result, container, dim EXECUTE_DATA_CC);
}
} else {
result = EX_VAR(opline->result.var);
- zend_fetch_dimension_address_read_R(result, container, dim, IS_CV);
+ zend_fetch_dimension_address_read_R(result, container, dim, IS_CV EXECUTE_DATA_CC);
}
@@ -8965,7 +8971,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HAN
SAVE_OPLINE();
container = EX_CONSTANT(opline->op1);
- zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
+ zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV EXECUTE_DATA_CC);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -8984,10 +8990,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_
zend_throw_error(NULL, "Cannot use temporary expression in write context");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
container = NULL;
- zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
+ zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV EXECUTE_DATA_CC);
if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
}
@@ -8998,10 +9005,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_
zend_throw_error(NULL, "Cannot use [] for reading");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
container = EX_CONSTANT(opline->op1);
- zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
+ zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV EXECUTE_DATA_CC);
}
@@ -9020,12 +9028,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HAND
container = EX_CONSTANT(opline->op1);
if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
if (IS_CONST == IS_CONST ||
(IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
@@ -9050,7 +9056,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HAND
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
retval = OBJ_PROP(zobj, prop_offset);
- if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
+ if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
break;
}
@@ -9064,8 +9070,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HAND
}
if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
+ zend_string *property_name;
fetch_obj_r_no_object:
- zend_error(E_NOTICE, "Trying to get property of non-object");
+ property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
ZVAL_NULL(EX_VAR(opline->result.var));
} else {
retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
@@ -9092,12 +9101,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HAN
container = EX_CONSTANT(opline->op1);
if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
if (IS_CONST == IS_CONST ||
(IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
@@ -9163,20 +9170,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_
zval *property;
SAVE_OPLINE();
- property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
container = NULL;
if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
zend_throw_error(NULL, "Cannot use temporary expression in write context");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CONST, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -9197,7 +9203,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_SPEC_CONST_CV_HANDL
SAVE_OPLINE();
container = EX_CONSTANT(opline->op1);
- zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var));
+ zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC) EXECUTE_DATA_CC);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -9209,8 +9215,51 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CV_HAND
zval *op1, *op2;
zend_string *op1_str, *op2_str, *str;
- SAVE_OPLINE();
+
op1 = EX_CONSTANT(opline->op1);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
+ if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
+ (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
+ zend_string *op1_str = Z_STR_P(op1);
+ zend_string *op2_str = Z_STR_P(op2);
+ zend_string *str;
+
+ do {
+ if (IS_CONST != IS_CONST) {
+ if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
+
+ break;
+ }
+ }
+ if (IS_CV != IS_CONST) {
+ if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
+
+ break;
+ }
+ }
+ if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
+ !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
+ size_t len = ZSTR_LEN(op1_str);
+
+ str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
+ memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
+ ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
+ break;
+ } else {
+ str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
+ memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
+ memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
+ ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
+ }
+
+ } while (0);
+
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
if (IS_CONST == IS_CONST) {
op1_str = Z_STR_P(op1);
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
@@ -9221,7 +9270,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CV_HAND
}
op1_str = _zval_get_string_func(op1);
}
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
if (IS_CV == IS_CONST) {
op2_str = Z_STR_P(op2);
} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
@@ -9283,7 +9331,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CV
SAVE_OPLINE();
- function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ object = EX_CONSTANT(opline->op1);
+
+ if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ }
+
+ function_name = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (IS_CV != IS_CONST &&
UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
@@ -9296,6 +9350,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CV
} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
if (UNEXPECTED(EG(exception) != NULL)) {
+
HANDLE_EXCEPTION();
}
}
@@ -9306,14 +9361,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CV
} while (0);
}
- object = EX_CONSTANT(opline->op1);
-
- if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
- }
-
if (IS_CONST != IS_UNUSED) {
do {
if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -9341,8 +9388,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CV
obj = Z_OBJ_P(object);
called_scope = obj->ce;
- if (IS_CV != IS_CONST ||
- UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
+ if (IS_CV == IS_CONST &&
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(function_name)) == called_scope)) {
+ fbc = CACHED_PTR(Z_CACHE_SLOT_P(function_name) + sizeof(void*));
+ } else {
zend_object *orig_obj = obj;
if (UNEXPECTED(obj->handlers->get_method == NULL)) {
@@ -9434,12 +9483,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C
/* nothing to do */
} else if (IS_CONST != IS_CONST &&
IS_CV == IS_CONST &&
- (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
- /* do nothing */
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))) == ce)) {
+ fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)) + sizeof(void*));
} else if (IS_CV != IS_UNUSED) {
- function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ function_name = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (IS_CV != IS_CONST) {
if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
do {
@@ -9564,7 +9613,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CV_H
uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
SAVE_OPLINE();
- function_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ function_name = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
func = fcc.function_handler;
called_scope = fcc.called_scope;
@@ -9582,12 +9631,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CV_H
}
if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
/* Delay closure destruction until its invocation */
- if (IS_CV & (IS_VAR|IS_CV)) {
- ZVAL_DEREF(function_name);
- }
ZEND_ASSERT(GC_TYPE((zend_object*)func->common.prototype) == IS_OBJECT);
GC_REFCOUNT((zend_object*)func->common.prototype)++;
call_info |= ZEND_CALL_CLOSURE;
+ if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
+ call_info |= ZEND_CALL_FAKE_CLOSURE;
+ }
} else if (object) {
call_info |= ZEND_CALL_RELEASE_THIS;
GC_REFCOUNT(object)++; /* For $this pointer */
@@ -9657,7 +9706,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CATCH_SPEC_CONST_CV_HANDLER(ZE
if (ce != catch_ce) {
if (!catch_ce || !instanceof_function(ce, catch_ce)) {
if (opline->result.num) {
- zend_throw_exception_internal(NULL);
+ zend_rethrow_exception(execute_data);
HANDLE_EXCEPTION();
}
ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
@@ -9688,7 +9737,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CONST_CV_HANDLER(ZEN
zval *op1, *op2, *result;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
do {
int result;
@@ -9791,7 +9840,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_C
if (IS_CV != IS_UNUSED) {
- zval *offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ zval *offset = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
zend_string *str;
zend_ulong hval;
@@ -9864,13 +9913,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDL
}
}
- if (IS_CONST == IS_UNUSED) {
- ZEND_VM_NEXT_OPCODE();
-#if 0 || (IS_CONST != IS_UNUSED)
- } else {
- ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-#endif
- }
+ ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -9884,7 +9927,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CON
SAVE_OPLINE();
container = EX_CONSTANT(opline->op1);
- offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ offset = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht;
@@ -10017,12 +10060,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CO
container = EX_CONSTANT(opline->op1);
if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
if (IS_CONST == IS_CONST ||
(IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
@@ -10036,7 +10077,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CO
}
}
if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
- zend_error(E_NOTICE, "Trying to check property of non-object");
+ zend_string *property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to check property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
isset_no_object:
result = ((opline->extended_value & ZEND_ISSET) == 0);
} else {
@@ -10055,13 +10098,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZE
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -10135,7 +10179,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZE
/* Set the new yielded key */
if (IS_CV != IS_UNUSED) {
- zval *key = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_CV == IS_CONST) {
@@ -10186,7 +10230,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZE
ZEND_VM_RETURN();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -10194,7 +10238,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_C
zend_long offset;
container = EX_CONSTANT(opline->op1);
- dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ dim = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_index_array:
if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
@@ -10221,7 +10265,7 @@ fetch_dim_r_index_array:
} else {
fetch_dim_r_index_slow:
SAVE_OPLINE();
- zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim);
+ zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim EXECUTE_DATA_CC);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -10241,7 +10285,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_TMPVAR_HANDLER(
zval *op1, *op2, *result;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
result = EX_VAR(opline->result.var);
@@ -10284,7 +10328,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_TMPVAR_HANDLER(
zval *op1, *op2, *result;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
result = EX_VAR(opline->result.var);
@@ -10327,7 +10371,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CONST_TMPVAR_HANDLER(
zval *op1, *op2, *result;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
zend_long overflow;
@@ -10374,7 +10418,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(
SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
fast_div_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
@@ -10388,13 +10432,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_TMPVAR_HANDLER(
zval *op1, *op2, *result;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
result = EX_VAR(opline->result.var);
if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
SAVE_OPLINE();
zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
@@ -10426,7 +10471,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_TMPVAR_HANDLER(Z
zval *op1, *op2;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
@@ -10454,7 +10499,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_TMPVAR_HANDLER(Z
zval *op1, *op2;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
@@ -10483,7 +10528,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(
SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
pow_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
@@ -10496,17 +10541,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDL
zend_free_op free_op2;
zval *op1, *op2;
- SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
- do {
- if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
- ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
- zend_string *op1_str = Z_STR_P(op1);
- zend_string *op2_str = Z_STR_P(op2);
- zend_string *str;
+ if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
+ ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
+ zend_string *op1_str = Z_STR_P(op1);
+ zend_string *op2_str = Z_STR_P(op2);
+ zend_string *str;
+ do {
if (IS_CONST != IS_CONST) {
if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
@@ -10535,19 +10579,24 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDL
memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
}
- } else {
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
- op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
- }
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
- op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
- }
- concat_function(EX_VAR(opline->result.var), op1, op2);
+
+ } while (0);
+ zval_ptr_dtor_nogc(free_op2);
+ ZEND_VM_NEXT_OPCODE();
+ } else {
+ SAVE_OPLINE();
+
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
+ concat_function(EX_VAR(opline->result.var), op1, op2);
- } while (0);
- zval_ptr_dtor_nogc(free_op2);
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ zval_ptr_dtor_nogc(free_op2);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ }
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -10557,7 +10606,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_TMPVAR_HAN
zval *op1, *op2, *result;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
int result;
@@ -10625,7 +10674,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_TMPVAR
zval *op1, *op2, *result;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
int result;
@@ -10693,7 +10742,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVAR_H
zval *op1, *op2, *result;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
int result;
@@ -10743,7 +10792,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST
zval *op1, *op2, *result;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
int result;
@@ -10794,7 +10843,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HA
SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
compare_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
@@ -10808,7 +10857,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CONST_TMPVAR_HANDLE
zval *op1, *op2;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
@@ -10835,7 +10884,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CONST_TMPVAR_HANDL
zval *op1, *op2;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
@@ -10862,7 +10911,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CONST_TMPVAR_HANDL
zval *op1, *op2;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
@@ -10890,7 +10939,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CONST_TMPVAR_HAN
SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
@@ -10905,11 +10954,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_
SAVE_OPLINE();
container = EX_CONSTANT(opline->op1);
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (IS_CONST != IS_CONST) {
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_array:
- value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R);
+ value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
result = EX_VAR(opline->result.var);
ZVAL_COPY_UNREF(result, value);
} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
@@ -10922,11 +10971,11 @@ fetch_dim_r_array:
} else {
fetch_dim_r_slow:
result = EX_VAR(opline->result.var);
- zend_fetch_dimension_address_read_R_slow(result, container, dim);
+ zend_fetch_dimension_address_read_R_slow(result, container, dim EXECUTE_DATA_CC);
}
} else {
result = EX_VAR(opline->result.var);
- zend_fetch_dimension_address_read_R(result, container, dim, (IS_TMP_VAR|IS_VAR));
+ zend_fetch_dimension_address_read_R(result, container, dim, (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
}
zval_ptr_dtor_nogc(free_op2);
@@ -10941,7 +10990,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR
SAVE_OPLINE();
container = EX_CONSTANT(opline->op1);
- zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
+ zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op2);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -10960,10 +11009,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_
zend_throw_error(NULL, "Cannot use temporary expression in write context");
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
container = NULL;
- zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
+ zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
}
@@ -10974,10 +11024,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_
zend_throw_error(NULL, "Cannot use [] for reading");
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
container = EX_CONSTANT(opline->op1);
- zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
+ zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op2);
}
@@ -10996,12 +11047,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_
container = EX_CONSTANT(opline->op1);
if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (IS_CONST == IS_CONST ||
(IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
@@ -11026,7 +11075,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
retval = OBJ_PROP(zobj, prop_offset);
- if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
+ if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
break;
}
@@ -11040,8 +11089,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_
}
if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
+ zend_string *property_name;
fetch_obj_r_no_object:
- zend_error(E_NOTICE, "Trying to get property of non-object");
+ property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
ZVAL_NULL(EX_VAR(opline->result.var));
} else {
retval = zobj->handlers->read_property(container, offset, BP_VAR_R, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
@@ -11069,12 +11121,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR
container = EX_CONSTANT(opline->op1);
if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (IS_CONST == IS_CONST ||
(IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
@@ -11141,20 +11191,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_
zval *property;
SAVE_OPLINE();
- property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
container = NULL;
if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(free_op2);
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
zend_throw_error(NULL, "Cannot use temporary expression in write context");
- zval_ptr_dtor_nogc(free_op2);
+ zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CONST, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
zval_ptr_dtor_nogc(free_op2);
if (IS_CONST == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -11175,7 +11224,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_SPEC_CONST_TMPVAR_H
SAVE_OPLINE();
container = EX_CONSTANT(opline->op1);
- zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2));
+ zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op2);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -11187,8 +11236,51 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_
zval *op1, *op2;
zend_string *op1_str, *op2_str, *str;
- SAVE_OPLINE();
+
op1 = EX_CONSTANT(opline->op1);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
+ ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
+ zend_string *op1_str = Z_STR_P(op1);
+ zend_string *op2_str = Z_STR_P(op2);
+ zend_string *str;
+
+ do {
+ if (IS_CONST != IS_CONST) {
+ if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
+
+ break;
+ }
+ }
+ if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
+ if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
+
+ break;
+ }
+ }
+ if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
+ !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
+ size_t len = ZSTR_LEN(op1_str);
+
+ str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
+ memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
+ ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
+ break;
+ } else {
+ str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
+ memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
+ memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
+ ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
+ }
+
+ } while (0);
+ zval_ptr_dtor_nogc(free_op2);
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
if (IS_CONST == IS_CONST) {
op1_str = Z_STR_P(op1);
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
@@ -11199,7 +11291,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_
}
op1_str = _zval_get_string_func(op1);
}
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
op2_str = Z_STR_P(op2);
} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
@@ -11261,7 +11352,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_TM
SAVE_OPLINE();
- function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ object = EX_CONSTANT(opline->op1);
+
+ if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ }
+
+ function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
@@ -11274,6 +11371,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_TM
} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
if (UNEXPECTED(EG(exception) != NULL)) {
+
HANDLE_EXCEPTION();
}
}
@@ -11284,14 +11382,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_TM
} while (0);
}
- object = EX_CONSTANT(opline->op1);
-
- if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(free_op2);
- HANDLE_EXCEPTION();
- }
-
if (IS_CONST != IS_UNUSED) {
do {
if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -11319,8 +11409,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_TM
obj = Z_OBJ_P(object);
called_scope = obj->ce;
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST ||
- UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(function_name)) == called_scope)) {
+ fbc = CACHED_PTR(Z_CACHE_SLOT_P(function_name) + sizeof(void*));
+ } else {
zend_object *orig_obj = obj;
if (UNEXPECTED(obj->handlers->get_method == NULL)) {
@@ -11413,12 +11505,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C
/* nothing to do */
} else if (IS_CONST != IS_CONST &&
(IS_TMP_VAR|IS_VAR) == IS_CONST &&
- (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
- /* do nothing */
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))) == ce)) {
+ fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)) + sizeof(void*));
} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
zend_free_op free_op2;
- function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
do {
@@ -11543,7 +11635,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPV
uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
SAVE_OPLINE();
- function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
func = fcc.function_handler;
called_scope = fcc.called_scope;
@@ -11561,12 +11653,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPV
}
if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
/* Delay closure destruction until its invocation */
- if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) {
- ZVAL_DEREF(function_name);
- }
ZEND_ASSERT(GC_TYPE((zend_object*)func->common.prototype) == IS_OBJECT);
GC_REFCOUNT((zend_object*)func->common.prototype)++;
call_info |= ZEND_CALL_CLOSURE;
+ if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
+ call_info |= ZEND_CALL_FAKE_CLOSURE;
+ }
} else if (object) {
call_info |= ZEND_CALL_RELEASE_THIS;
GC_REFCOUNT(object)++; /* For $this pointer */
@@ -11613,7 +11705,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CONST_TMPVAR_HANDLER
zval *op1, *op2, *result;
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
int result;
@@ -11716,7 +11808,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_T
if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
zend_free_op free_op2;
- zval *offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ zval *offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
zend_string *str;
zend_ulong hval;
@@ -11789,13 +11881,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_H
}
}
- if (IS_CONST == IS_UNUSED) {
- ZEND_VM_NEXT_OPCODE();
-#if 0 || (IS_CONST != IS_UNUSED)
- } else {
- ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-#endif
- }
+ ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -11809,7 +11895,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CON
SAVE_OPLINE();
container = EX_CONSTANT(opline->op1);
- offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht;
@@ -11942,12 +12028,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CO
container = EX_CONSTANT(opline->op1);
if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (IS_CONST == IS_CONST ||
(IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
@@ -11961,7 +12045,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CO
}
}
if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
- zend_error(E_NOTICE, "Trying to check property of non-object");
+ zend_string *property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to check property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
isset_no_object:
result = ((opline->extended_value & ZEND_ISSET) == 0);
} else {
@@ -11977,7 +12063,7 @@ isset_no_object:
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zend_free_op free_op2;
@@ -11985,7 +12071,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_T
zend_long offset;
container = EX_CONSTANT(opline->op1);
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_index_array:
if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
@@ -12012,7 +12098,7 @@ fetch_dim_r_index_array:
} else {
fetch_dim_r_index_slow:
SAVE_OPLINE();
- zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim);
+ zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim EXECUTE_DATA_CC);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -12025,7 +12111,7 @@ fetch_dim_r_index_undef:
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -12037,7 +12123,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_NO_OVERFLOW_SPEC_CONS
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -12049,7 +12135,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_SPEC_CONST_TMPVARCV_H
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -12061,7 +12147,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_DOUBLE_SPEC_CONST_TMPVARCV
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -12073,7 +12159,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONS
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -12085,7 +12171,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_H
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -12097,7 +12183,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -12109,7 +12195,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_NO_OVERFLOW_SPEC_CONS
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -12123,7 +12209,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_SPEC_CONST_TMPVARCV_H
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -12135,7 +12221,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_DOUBLE_SPEC_CONST_TMPVARCV
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -12149,7 +12235,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVA
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -12163,7 +12249,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVA
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -12177,7 +12263,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVA
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -12191,7 +12277,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMP
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -12205,7 +12291,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMP
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -12219,7 +12305,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMP
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -12233,7 +12319,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_T
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -12247,7 +12333,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_T
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -12261,7 +12347,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_T
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -12275,7 +12361,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -12289,7 +12375,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -12303,7 +12389,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -12317,7 +12403,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMP
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -12331,7 +12417,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMP
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -12345,7 +12431,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMP
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -12359,7 +12445,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_T
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -12373,7 +12459,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_T
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -12387,7 +12473,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_T
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -12401,7 +12487,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -12415,7 +12501,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -12429,7 +12515,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -12443,7 +12529,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPE
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -12457,7 +12543,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPE
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -12471,14 +12557,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPE
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *retval_ptr;
zval *return_value;
zend_free_op free_op1;
- retval_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ retval_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
return_value = EX(return_value);
if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
SAVE_OPLINE();
@@ -12550,7 +12636,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER
/* Not supposed to happen, but we'll allow it */
zend_error(E_NOTICE, "Only variable references should be returned by reference");
- retval_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ retval_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (!EX(return_value)) {
zval_ptr_dtor_nogc(free_op1);
} else {
@@ -12599,10 +12685,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_TMP_HAND
zval *retval;
zend_free_op free_op1;
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
- retval = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ retval = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
/* Copy return value into generator->retval */
if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
@@ -12645,7 +12731,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_TMP_HANDLER(ZEND_OP
zend_free_op free_op1;
SAVE_OPLINE();
- value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
do {
if (IS_TMP_VAR == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
@@ -12678,7 +12764,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_TMP_HANDLER(ZEND_OP
HANDLE_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *value, *arg;
@@ -12698,7 +12784,7 @@ send_val_by_ref:
ZVAL_UNDEF(arg);
HANDLE_EXCEPTION();
}
- value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
ZVAL_COPY_VALUE(arg, value);
if (IS_TMP_VAR == IS_CONST) {
@@ -12709,7 +12795,7 @@ send_val_by_ref:
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *value, *arg;
@@ -12729,7 +12815,7 @@ send_val_by_ref:
ZVAL_UNDEF(arg);
HANDLE_EXCEPTION();
}
- value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
ZVAL_COPY_VALUE(arg, value);
if (IS_TMP_VAR == IS_CONST) {
@@ -12747,7 +12833,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEN
zend_free_op free_op1;
SAVE_OPLINE();
- arg = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ arg = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
param = ZEND_CALL_VAR(EX(call), opline->result.var);
if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
@@ -12772,24 +12858,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPC
zval *result = EX_VAR(opline->result.var);
SAVE_OPLINE();
- expr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ expr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
switch (opline->extended_value) {
case IS_NULL:
- /* This code is taken from convert_to_null. However, it does not seems very useful,
- * because a conversion to null always results in the same value. This could only
- * be relevant if a cast_object handler for IS_NULL has some kind of side-effect. */
-#if 0
- if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
- ZVAL_DEREF(expr);
- }
- if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->cast_object) {
- if (Z_OBJ_HT_P(expr)->cast_object(expr, result, IS_NULL) == SUCCESS) {
- break;
- }
- }
-#endif
-
ZVAL_NULL(result);
break;
case _IS_BOOL:
@@ -12841,7 +12913,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPC
if (Z_TYPE_P(expr) != IS_ARRAY) {
object_init(result);
if (Z_TYPE_P(expr) != IS_NULL) {
- expr = zend_hash_add_new(Z_OBJPROP_P(result), CG(known_strings)[ZEND_STR_SCALAR], expr);
+ expr = zend_hash_add_new(Z_OBJPROP_P(result), ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
if (IS_TMP_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
} else {
@@ -12864,11 +12936,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZE
USE_OPLINE
zend_free_op free_op1;
zval *array_ptr, *result;
- HashTable *fe_ht;
SAVE_OPLINE();
- array_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ array_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
result = EX_VAR(opline->result.var);
ZVAL_COPY_VALUE(result, array_ptr);
@@ -12877,12 +12948,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZE
}
Z_FE_POS_P(result) = 0;
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
} else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
- HashPosition pos = 0;
- Bucket *p;
-
result = EX_VAR(opline->result.var);
ZVAL_COPY_VALUE(result, array_ptr);
if (IS_TMP_VAR != IS_TMP_VAR) {
@@ -12895,26 +12963,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZE
}
Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
}
- fe_ht = Z_OBJPROP_P(array_ptr);
- pos = 0;
- p = fe_ht->arData;
- while (1) {
- if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
-
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
- }
- if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
- EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
- (UNEXPECTED(!p->key) ||
- EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) {
- break;
- }
- pos++;
- p++;
- }
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
+ Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
@@ -12930,7 +12979,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZE
if (!EG(exception)) {
zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
}
- zend_throw_exception_internal(NULL);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
@@ -12940,6 +12989,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZE
if (UNEXPECTED(EG(exception) != NULL)) {
OBJ_RELEASE(&iter->std);
zval_ptr_dtor_nogc(free_op1);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
}
@@ -12949,6 +12999,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZE
if (UNEXPECTED(EG(exception) != NULL)) {
OBJ_RELEASE(&iter->std);
zval_ptr_dtor_nogc(free_op1);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
iter->index = -1; /* will be set to 0 before using next handler */
@@ -12957,10 +13008,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZE
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
zval_ptr_dtor_nogc(free_op1);
- if (is_empty) {
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
+ if (UNEXPECTED(EG(exception))) {
+ HANDLE_EXCEPTION();
+ } else if (is_empty) {
+ ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_CONTINUE();
} else {
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
}
}
} else {
@@ -12977,9 +13031,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(Z
USE_OPLINE
zend_free_op free_op1;
zval *array_ptr, *array_ref;
- HashTable *fe_ht;
- HashPosition pos = 0;
- Bucket *p;
SAVE_OPLINE();
@@ -12989,7 +13040,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(Z
array_ptr = Z_REFVAL_P(array_ref);
}
} else {
- array_ref = array_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ array_ref = array_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
}
if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
@@ -13010,25 +13061,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(Z
} else {
SEPARATE_ARRAY(array_ptr);
}
- fe_ht = Z_ARRVAL_P(array_ptr);
- p = fe_ht->arData;
- while (1) {
- if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
+ Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
- }
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
- EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) {
- break;
- }
- pos++;
- p++;
- }
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
-
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
} else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
@@ -13049,25 +13084,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(Z
}
Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
}
- fe_ht = Z_OBJPROP_P(array_ptr);
- p = fe_ht->arData;
- while (1) {
- if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
-
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
- }
- if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
- EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
- (UNEXPECTED(!p->key) ||
- EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) {
- break;
- }
- pos++;
- p++;
- }
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
+ Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
@@ -13084,7 +13101,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(Z
if (!EG(exception)) {
zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
}
- zend_throw_exception_internal(NULL);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
@@ -13098,6 +13115,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(Z
} else {
zval_ptr_dtor_nogc(free_op1);
}
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
}
@@ -13111,6 +13129,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(Z
} else {
zval_ptr_dtor_nogc(free_op1);
}
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
iter->index = -1; /* will be set to 0 before using next handler */
@@ -13123,10 +13142,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(Z
} else {
zval_ptr_dtor_nogc(free_op1);
}
- if (is_empty) {
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
+ if (UNEXPECTED(EG(exception))) {
+ HANDLE_EXCEPTION();
+ } else if (is_empty) {
+ ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_CONTINUE();
} else {
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
}
}
} else {
@@ -13158,9 +13180,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_
zend_free_op free_op1;
zval *value;
zval *ref = NULL;
+ int ret;
SAVE_OPLINE();
- value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && Z_ISREF_P(value)) {
if (IS_TMP_VAR == IS_VAR) {
@@ -13168,7 +13191,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_
}
value = Z_REFVAL_P(value);
}
- if (i_zend_is_true(value)) {
+
+ ret = i_zend_is_true(value);
+
+ if (UNEXPECTED(EG(exception))) {
+ zval_ptr_dtor_nogc(free_op1);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
+ HANDLE_EXCEPTION();
+ }
+
+ if (ret) {
zval *result = EX_VAR(opline->result.var);
ZVAL_COPY_VALUE(result, value);
@@ -13185,11 +13217,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_
Z_ADDREF_P(result);
}
}
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_CONTINUE();
}
zval_ptr_dtor_nogc(free_op1);
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -13200,7 +13233,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND
zval *ref = NULL;
SAVE_OPLINE();
- value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && Z_ISREF_P(value)) {
if (IS_TMP_VAR == IS_VAR) {
@@ -13225,21 +13258,22 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND
Z_ADDREF_P(result);
}
}
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_CONTINUE();
}
zval_ptr_dtor_nogc(free_op1);
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zend_free_op free_op1;
zval *value;
zval *result = EX_VAR(opline->result.var);
- value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
SAVE_OPLINE();
GET_OP1_UNDEF_CV(value, BP_VAR_R);
@@ -13276,17 +13310,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_TMP_HANDLER(ZE
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
zval *val;
zend_free_op free_op1;
SAVE_OPLINE();
- val = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ val = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
zval_ptr_dtor_nogc(free_op1);
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -13310,6 +13345,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_TMP_HANDLER(ZE
if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
zval_ptr_dtor(val);
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
zend_generator_yield_from(generator, new_gen);
@@ -13317,6 +13353,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_TMP_HANDLER(ZE
} else if (UNEXPECTED(new_gen->execute_data == NULL)) {
zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
zval_ptr_dtor(val);
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
if (RETURN_VALUE_USED(opline)) {
@@ -13332,6 +13369,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_TMP_HANDLER(ZE
if (!EG(exception)) {
zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
}
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -13340,6 +13378,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_TMP_HANDLER(ZE
iter->funcs->rewind(iter);
if (UNEXPECTED(EG(exception) != NULL)) {
OBJ_RELEASE(&iter->std);
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
}
@@ -13348,6 +13387,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_TMP_HANDLER(ZE
}
} else {
zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -13379,16 +13419,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_TMP_HANDLER(ZE
zend_free_op free_op1;
SAVE_OPLINE();
- value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(value) == opline->extended_value)) {
- if (IS_TMP_VAR != IS_CONST && UNEXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
- zend_class_entry *ce = Z_OBJCE_P(value);
-
- if (EXPECTED(ZSTR_LEN(ce->name) != sizeof("__PHP_Incomplete_Class") - 1) ||
- EXPECTED(memcmp(ZSTR_VAL(ce->name), "__PHP_Incomplete_Class", sizeof("__PHP_Incomplete_Class") - 1) != 0)) {
- result = 1;
- }
- } else if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) {
+ if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) {
const char *type_name = zend_rsrc_list_get_rsrc_type(Z_RES_P(value));
if (EXPECTED(type_name != NULL)) {
@@ -13415,7 +13448,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HA
int result;
SAVE_OPLINE();
- op1 = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
result = fast_is_identical_function(op1, op2);
zval_ptr_dtor_nogc(free_op1);
@@ -13433,7 +13466,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONS
int result;
SAVE_OPLINE();
- op1 = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
result = fast_is_not_identical_function(op1, op2);
zval_ptr_dtor_nogc(free_op1);
@@ -13456,10 +13489,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CO
zend_throw_error(NULL, "Cannot use temporary expression in write context");
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
container = NULL;
- zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
+ zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST EXECUTE_DATA_CC);
if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
}
@@ -13470,10 +13504,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CO
zend_throw_error(NULL, "Cannot use [] for reading");
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
- container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
- zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
+ container = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op1);
}
@@ -13489,12 +13524,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMP_CONST_HAN
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_TMP_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
offset = EX_CONSTANT(opline->op2);
@@ -13522,7 +13555,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMP_CONST_HAN
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
retval = OBJ_PROP(zobj, prop_offset);
- if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
+ if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
break;
}
@@ -13536,8 +13569,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMP_CONST_HAN
}
if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
+ zend_string *property_name;
fetch_obj_r_no_object:
- zend_error(E_NOTICE, "Trying to get property of non-object");
+ property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
ZVAL_NULL(EX_VAR(opline->result.var));
} else {
retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
@@ -13563,20 +13599,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CO
zval *property;
SAVE_OPLINE();
- property = EX_CONSTANT(opline->op2);
container = NULL;
if (IS_TMP_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
zend_throw_error(NULL, "Cannot use temporary expression in write context");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
+ property = EX_CONSTANT(opline->op2);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_TMP_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -13655,6 +13690,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CONST_HANDLE
for (i = 0; i <= opline->extended_value; i++) {
zend_string_release(rope[i]);
}
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
}
@@ -13689,7 +13725,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CON
Z_ADDREF_P(expr_ptr);
} else {
- expr_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ expr_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_TMP_VAR == IS_TMP_VAR) {
/* pass */
} else if (IS_TMP_VAR == IS_CONST) {
@@ -13792,26 +13828,21 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CONST_HAND
}
}
- if (IS_TMP_VAR == IS_UNUSED) {
- ZEND_VM_NEXT_OPCODE();
-#if 0 || (IS_TMP_VAR != IS_UNUSED)
- } else {
- ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-#endif
- }
+ ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -13833,7 +13864,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CONST_HANDLER(Z
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
- value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
ZVAL_COPY_VALUE(&generator->value, value);
if (IS_TMP_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
@@ -13857,7 +13888,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CONST_HANDLER(Z
}
} else {
- zval *value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ zval *value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_TMP_VAR == IS_CONST) {
@@ -13936,6 +13967,46 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CONST_HANDLER(Z
ZEND_VM_RETURN();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zend_free_op free_op1;
+ zval *op1;
+ HashTable *ht = Z_ARRVAL_P(EX_CONSTANT(opline->op2));
+ int result;
+
+ SAVE_OPLINE();
+ op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
+ result = zend_hash_exists(ht, Z_STR_P(op1));
+ } else if (opline->extended_value) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ result = zend_hash_index_exists(ht, Z_LVAL_P(op1));
+ } else {
+ result = 0;
+ }
+ } else if (Z_TYPE_P(op1) <= IS_FALSE) {
+ result = zend_hash_exists(ht, ZSTR_EMPTY_ALLOC());
+ } else {
+ zend_string *key;
+ zval key_tmp, result_tmp;
+
+ result = 0;
+ ZEND_HASH_FOREACH_STR_KEY(ht, key) {
+ ZVAL_STR(&key_tmp, key);
+ compare_function(&result_tmp, op1, &key_tmp);
+ if (Z_LVAL(result_tmp) == 0) {
+ result = 1;
+ break;
+ }
+ } ZEND_HASH_FOREACH_END();
+ }
+ zval_ptr_dtor_nogc(free_op1);
+ ZEND_VM_SMART_BRANCH(result, 1);
+ ZVAL_BOOL(EX_VAR(opline->result.var), result);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -13944,8 +14015,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HAND
int result;
SAVE_OPLINE();
- op1 = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
result = fast_is_identical_function(op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
@@ -13962,8 +14033,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_
int result;
SAVE_OPLINE();
- op1 = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
result = fast_is_not_identical_function(op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
@@ -13976,13 +14047,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_TMP_HANDLER(ZEN
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -14004,7 +14076,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_TMP_HANDLER(ZEN
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
- value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
ZVAL_COPY_VALUE(&generator->value, value);
if (IS_TMP_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
@@ -14028,7 +14100,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_TMP_HANDLER(ZEN
}
} else {
- zval *value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ zval *value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_TMP_VAR == IS_CONST) {
@@ -14056,7 +14128,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_TMP_HANDLER(ZEN
/* Set the new yielded key */
if (IS_TMP_VAR != IS_UNUSED) {
zend_free_op free_op2;
- zval *key = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
+ zval *key = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_TMP_VAR == IS_CONST) {
@@ -14115,8 +14187,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_VAR_HAND
int result;
SAVE_OPLINE();
- op1 = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var_deref(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
result = fast_is_identical_function(op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
@@ -14133,8 +14205,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_VAR_
int result;
SAVE_OPLINE();
- op1 = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var_deref(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
result = fast_is_not_identical_function(op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
@@ -14147,13 +14219,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_VAR_HANDLER(ZEN
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -14175,7 +14248,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_VAR_HANDLER(ZEN
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
- value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
ZVAL_COPY_VALUE(&generator->value, value);
if (IS_TMP_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
@@ -14199,7 +14272,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_VAR_HANDLER(ZEN
}
} else {
- zval *value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ zval *value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_TMP_VAR == IS_CONST) {
@@ -14227,7 +14300,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_VAR_HANDLER(ZEN
/* Set the new yielded key */
if (IS_VAR != IS_UNUSED) {
zend_free_op free_op2;
- zval *key = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ zval *key = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_VAR == IS_CONST) {
@@ -14291,10 +14364,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UN
zend_throw_error(NULL, "Cannot use temporary expression in write context");
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
container = NULL;
- zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
+ zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED EXECUTE_DATA_CC);
if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
}
@@ -14305,10 +14379,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UN
zend_throw_error(NULL, "Cannot use [] for reading");
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
- container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
- zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
+ container = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, NULL, IS_UNUSED EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op1);
}
@@ -14329,7 +14404,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UN
zend_free_op free_op1;
zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
- retval_ref = retval_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ retval_ref = retval_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_TMP_VAR == IS_CONST) {
ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
@@ -14343,10 +14418,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UN
ZVAL_DEREF(retval_ptr);
}
- if (UNEXPECTED(!ret_info->class_name
- && ret_info->type_hint != IS_CALLABLE
- && ret_info->type_hint != IS_ITERABLE
- && !ZEND_SAME_FAKE_TYPE(ret_info->type_hint, Z_TYPE_P(retval_ptr))
+ if (UNEXPECTED(!ZEND_TYPE_IS_CLASS(ret_info->type)
+ && ZEND_TYPE_CODE(ret_info->type) != IS_CALLABLE
+ && ZEND_TYPE_CODE(ret_info->type) != IS_ITERABLE
+ && !ZEND_SAME_FAKE_TYPE(ZEND_TYPE_CODE(ret_info->type), Z_TYPE_P(retval_ptr))
&& !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)
&& retval_ref != retval_ptr)
) {
@@ -14360,12 +14435,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UN
retval_ptr = retval_ref;
}
zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
-
- if (UNEXPECTED(EG(exception) != NULL)) {
- if (IS_TMP_VAR == IS_CONST) {
- zval_ptr_dtor_nogc(retval_ptr);
- }
- }
#endif
}
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -14385,7 +14454,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNU
Z_ADDREF_P(expr_ptr);
} else {
- expr_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ expr_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_TMP_VAR == IS_TMP_VAR) {
/* pass */
} else if (IS_TMP_VAR == IS_CONST) {
@@ -14488,26 +14557,21 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HAN
}
}
- if (IS_TMP_VAR == IS_UNUSED) {
- ZEND_VM_NEXT_OPCODE();
-#if 0 || (IS_TMP_VAR != IS_UNUSED)
- } else {
- ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-#endif
- }
+ ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -14529,7 +14593,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
- value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
ZVAL_COPY_VALUE(&generator->value, value);
if (IS_TMP_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
@@ -14553,7 +14617,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(
}
} else {
- zval *value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ zval *value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_TMP_VAR == IS_CONST) {
@@ -14632,6 +14696,102 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(
ZEND_VM_RETURN();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zend_free_op free_op1;
+ zval *op1;
+ zend_long count;
+
+ SAVE_OPLINE();
+ op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ do {
+ if (Z_TYPE_P(op1) == IS_ARRAY) {
+ count = zend_array_count(Z_ARRVAL_P(op1));
+ break;
+ } else if (Z_TYPE_P(op1) == IS_OBJECT) {
+ /* first, we check if the handler is defined */
+ if (Z_OBJ_HT_P(op1)->count_elements) {
+ if (SUCCESS == Z_OBJ_HT_P(op1)->count_elements(op1, &count)) {
+ break;
+ }
+ }
+
+ /* if not and the object implements Countable we call its count() method */
+ if (instanceof_function(Z_OBJCE_P(op1), zend_ce_countable)) {
+ zval retval;
+
+ zend_call_method_with_0_params(op1, NULL, NULL, "count", &retval);
+ count = zval_get_long(&retval);
+ zval_ptr_dtor(&retval);
+ break;
+ }
+
+ /* If There's no handler and it doesn't implement Countable then add a warning */
+ count = 1;
+ } else if (Z_TYPE_P(op1) == IS_NULL) {
+ count = 0;
+ } else {
+ count = 1;
+ }
+ zend_error(E_WARNING, "count(): Parameter must be an array or an object that implements Countable");
+ } while (0);
+
+ ZVAL_LONG(EX_VAR(opline->result.var), count);
+ zval_ptr_dtor_nogc(free_op1);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+
+ if (IS_TMP_VAR == IS_UNUSED) {
+ if (UNEXPECTED(!EX(func)->common.scope)) {
+ SAVE_OPLINE();
+ zend_error(E_WARNING, "get_class() called without object from outside a class");
+ ZVAL_FALSE(EX_VAR(opline->result.var));
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ } else {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
+ ZEND_VM_NEXT_OPCODE();
+ }
+ } else {
+ zend_free_op free_op1;
+ zval *op1;
+
+ SAVE_OPLINE();
+ op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ if (Z_TYPE_P(op1) == IS_OBJECT) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
+ } else {
+ zend_error(E_WARNING, "get_class() expects parameter 1 to be object, %s given", zend_get_type_by_const(Z_TYPE_P(op1)));
+ ZVAL_FALSE(EX_VAR(opline->result.var));
+ }
+ zval_ptr_dtor_nogc(free_op1);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ }
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zend_free_op free_op1;
+ zval *op1;
+ zend_string *type;
+
+ SAVE_OPLINE();
+ op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ type = zend_zval_get_type(op1);
+ if (EXPECTED(type)) {
+ ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
+ } else {
+ ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
+ }
+ zval_ptr_dtor_nogc(free_op1);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -14640,8 +14800,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_CV_HANDL
int result;
SAVE_OPLINE();
- op1 = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
result = fast_is_identical_function(op1, op2);
zval_ptr_dtor_nogc(free_op1);
@@ -14658,8 +14818,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CV_H
int result;
SAVE_OPLINE();
- op1 = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
result = fast_is_not_identical_function(op1, op2);
zval_ptr_dtor_nogc(free_op1);
@@ -14681,10 +14841,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV
zend_throw_error(NULL, "Cannot use temporary expression in write context");
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
container = NULL;
- zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
+ zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV EXECUTE_DATA_CC);
if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
}
@@ -14695,10 +14856,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV
zend_throw_error(NULL, "Cannot use [] for reading");
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
- container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
- zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
+ container = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op1);
}
@@ -14714,15 +14876,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMP_CV_HANDLE
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_TMP_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
if (IS_TMP_VAR == IS_CONST ||
(IS_TMP_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
@@ -14747,7 +14907,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMP_CV_HANDLE
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
retval = OBJ_PROP(zobj, prop_offset);
- if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
+ if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
break;
}
@@ -14761,8 +14921,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMP_CV_HANDLE
}
if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
+ zend_string *property_name;
fetch_obj_r_no_object:
- zend_error(E_NOTICE, "Trying to get property of non-object");
+ property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
ZVAL_NULL(EX_VAR(opline->result.var));
} else {
retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
@@ -14788,20 +14951,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV
zval *property;
SAVE_OPLINE();
- property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
container = NULL;
if (IS_TMP_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
zend_throw_error(NULL, "Cannot use temporary expression in write context");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_TMP_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -14824,10 +14986,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(Z
/* op1 and result are the same */
rope = (zend_string**)EX_VAR(opline->op1.var);
if (IS_CV == IS_CONST) {
- var = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
} else {
- var = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ var = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
if (IS_CV == IS_CV) {
rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
@@ -14859,10 +15021,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(Z
rope = (zend_string**)EX_VAR(opline->op1.var);
if (IS_CV == IS_CONST) {
- var = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
} else {
- var = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ var = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
if (IS_CV == IS_CV) {
rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
@@ -14880,6 +15042,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(Z
for (i = 0; i <= opline->extended_value; i++) {
zend_string_release(rope[i]);
}
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
}
@@ -14914,7 +15077,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_
Z_ADDREF_P(expr_ptr);
} else {
- expr_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ expr_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_TMP_VAR == IS_TMP_VAR) {
/* pass */
} else if (IS_TMP_VAR == IS_CONST) {
@@ -14944,7 +15107,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_
if (IS_CV != IS_UNUSED) {
- zval *offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ zval *offset = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
zend_string *str;
zend_ulong hval;
@@ -15017,26 +15180,21 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER
}
}
- if (IS_TMP_VAR == IS_UNUSED) {
- ZEND_VM_NEXT_OPCODE();
-#if 0 || (IS_TMP_VAR != IS_UNUSED)
- } else {
- ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-#endif
- }
+ ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -15058,7 +15216,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
- value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
ZVAL_COPY_VALUE(&generator->value, value);
if (IS_TMP_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
@@ -15082,7 +15240,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND
}
} else {
- zval *value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ zval *value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_TMP_VAR == IS_CONST) {
@@ -15110,7 +15268,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND
/* Set the new yielded key */
if (IS_CV != IS_UNUSED) {
- zval *key = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_CV == IS_CONST) {
@@ -15168,14 +15326,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDL
zval *closure, *var;
zend_string *var_name;
- closure = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ closure = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (opline->extended_value) {
/* By-ref binding */
- var = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op2.var);
+ var = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
ZVAL_MAKE_REF(var);
Z_ADDREF_P(var);
} else {
- var = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ var = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (UNEXPECTED(Z_ISUNDEF_P(var))) {
SAVE_OPLINE();
var = GET_OP2_UNDEF_CV(var, BP_VAR_R);
@@ -15205,10 +15363,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TM
zend_throw_error(NULL, "Cannot use temporary expression in write context");
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
container = NULL;
- zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
+ zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
}
@@ -15219,10 +15378,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TM
zend_throw_error(NULL, "Cannot use [] for reading");
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
- container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
- zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
+ container = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op2);
zval_ptr_dtor_nogc(free_op1);
}
@@ -15238,15 +15398,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMP_TMPVAR_HA
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_TMP_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (IS_TMP_VAR == IS_CONST ||
(IS_TMP_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
@@ -15271,7 +15429,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMP_TMPVAR_HA
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
retval = OBJ_PROP(zobj, prop_offset);
- if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
+ if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
break;
}
@@ -15285,8 +15443,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMP_TMPVAR_HA
}
if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
+ zend_string *property_name;
fetch_obj_r_no_object:
- zend_error(E_NOTICE, "Trying to get property of non-object");
+ property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
ZVAL_NULL(EX_VAR(opline->result.var));
} else {
retval = zobj->handlers->read_property(container, offset, BP_VAR_R, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
@@ -15313,20 +15474,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TM
zval *property;
SAVE_OPLINE();
- property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
container = NULL;
if (IS_TMP_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(free_op2);
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
zend_throw_error(NULL, "Cannot use temporary expression in write context");
- zval_ptr_dtor_nogc(free_op2);
+ zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_TMP_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
zval_ptr_dtor_nogc(free_op2);
if (IS_TMP_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -15349,10 +15509,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDL
/* op1 and result are the same */
rope = (zend_string**)EX_VAR(opline->op1.var);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- var = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ var = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
} else {
- var = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ var = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
@@ -15384,10 +15544,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDL
rope = (zend_string**)EX_VAR(opline->op1.var);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- var = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ var = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
} else {
- var = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ var = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
@@ -15405,6 +15565,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDL
for (i = 0; i <= opline->extended_value; i++) {
zend_string_release(rope[i]);
}
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
}
@@ -15439,7 +15600,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMP
Z_ADDREF_P(expr_ptr);
} else {
- expr_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1);
+ expr_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_TMP_VAR == IS_TMP_VAR) {
/* pass */
} else if (IS_TMP_VAR == IS_CONST) {
@@ -15469,7 +15630,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMP
if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
zend_free_op free_op2;
- zval *offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ zval *offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
zend_string *str;
zend_ulong hval;
@@ -15542,13 +15703,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HAN
}
}
- if (IS_TMP_VAR == IS_UNUSED) {
- ZEND_VM_NEXT_OPCODE();
-#if 0 || (IS_TMP_VAR != IS_UNUSED)
- } else {
- ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-#endif
- }
+ ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -15557,7 +15712,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED
zend_free_op free_op1;
zval *var_ptr;
- var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
fast_long_increment_function(var_ptr);
@@ -15597,7 +15752,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_H
zend_free_op free_op1;
zval *var_ptr;
- var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
fast_long_increment_function(var_ptr);
@@ -15637,7 +15792,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED
zend_free_op free_op1;
zval *var_ptr;
- var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
fast_long_decrement_function(var_ptr);
@@ -15677,7 +15832,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_H
zend_free_op free_op1;
zval *var_ptr;
- var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
fast_long_decrement_function(var_ptr);
@@ -15717,7 +15872,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND
zend_free_op free_op1;
zval *var_ptr;
- var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
@@ -15750,7 +15905,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND
zend_free_op free_op1;
zval *var_ptr;
- var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
@@ -15777,14 +15932,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *retval_ptr;
zval *return_value;
zend_free_op free_op1;
- retval_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ retval_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
return_value = EX(return_value);
if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
SAVE_OPLINE();
@@ -15856,7 +16011,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER
/* Not supposed to happen, but we'll allow it */
zend_error(E_NOTICE, "Only variable references should be returned by reference");
- retval_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ retval_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (!EX(return_value)) {
zval_ptr_dtor_nogc(free_op1);
} else {
@@ -15873,7 +16028,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER
break;
}
- retval_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ retval_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR) {
if (retval_ptr == &EG(uninitialized_zval) ||
@@ -15906,10 +16061,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_VAR_HAND
zval *retval;
zend_free_op free_op1;
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
- retval = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ retval = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
/* Copy return value into generator->retval */
if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
@@ -15952,7 +16107,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_VAR_HANDLER(ZEND_OP
zend_free_op free_op1;
SAVE_OPLINE();
- value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
do {
if (IS_VAR == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
@@ -15985,13 +16140,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_VAR_HANDLER(ZEND_OP
HANDLE_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *varptr, *arg;
zend_free_op free_op1;
- varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
SAVE_OPLINE();
GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
@@ -16030,7 +16185,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDL
zend_free_op free_op1;
zval *varptr, *arg;
- varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
ZVAL_COPY_VALUE(arg, varptr);
@@ -16055,7 +16210,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_HA
ZEND_VM_TAIL_CALL(ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
ZVAL_COPY_VALUE(arg, varptr);
@@ -16068,7 +16223,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_HA
ZEND_VM_TAIL_CALL(ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
ZVAL_COPY_VALUE(arg, varptr);
@@ -16095,7 +16250,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_QU
ZEND_VM_TAIL_CALL(ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
ZVAL_COPY_VALUE(arg, varptr);
@@ -16108,7 +16263,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_QU
ZEND_VM_TAIL_CALL(ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
ZVAL_COPY_VALUE(arg, varptr);
@@ -16130,7 +16285,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND
zval *varptr, *arg;
SAVE_OPLINE();
- varptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ varptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(varptr))) {
@@ -16152,7 +16307,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *varptr, *arg;
@@ -16168,7 +16323,7 @@ send_var_by_ref:
ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
SAVE_OPLINE();
GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
@@ -16201,7 +16356,7 @@ send_var_by_ref:
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *varptr, *arg;
@@ -16217,7 +16372,7 @@ send_var_by_ref:
ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
SAVE_OPLINE();
GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
@@ -16257,7 +16412,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEN
zend_free_op free_op1;
SAVE_OPLINE();
- arg = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
+ arg = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
param = ZEND_CALL_VAR(EX(call), opline->result.var);
if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
@@ -16289,6 +16444,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_VAR_HANDLER(ZEND_OPCO
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
@@ -16297,6 +16453,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_VAR_HANDLER(ZEND_OPCO
ce = zend_fetch_class(NULL, opline->op1.num);
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else {
@@ -16305,13 +16462,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_VAR_HANDLER(ZEND_OPCO
result = EX_VAR(opline->result.var);
if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
+ ZVAL_UNDEF(result);
HANDLE_EXCEPTION();
}
constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
if (constructor == NULL) {
if (UNEXPECTED(EG(exception))) {
- zval_ptr_dtor(result);
HANDLE_EXCEPTION();
}
@@ -16352,24 +16509,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPC
zval *result = EX_VAR(opline->result.var);
SAVE_OPLINE();
- expr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ expr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
switch (opline->extended_value) {
case IS_NULL:
- /* This code is taken from convert_to_null. However, it does not seems very useful,
- * because a conversion to null always results in the same value. This could only
- * be relevant if a cast_object handler for IS_NULL has some kind of side-effect. */
-#if 0
- if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
- ZVAL_DEREF(expr);
- }
- if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->cast_object) {
- if (Z_OBJ_HT_P(expr)->cast_object(expr, result, IS_NULL) == SUCCESS) {
- break;
- }
- }
-#endif
-
ZVAL_NULL(result);
break;
case _IS_BOOL:
@@ -16422,7 +16565,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPC
if (Z_TYPE_P(expr) != IS_ARRAY) {
object_init(result);
if (Z_TYPE_P(expr) != IS_NULL) {
- expr = zend_hash_add_new(Z_OBJPROP_P(result), CG(known_strings)[ZEND_STR_SCALAR], expr);
+ expr = zend_hash_add_new(Z_OBJPROP_P(result), ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
if (IS_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
} else {
@@ -16445,11 +16588,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZE
USE_OPLINE
zend_free_op free_op1;
zval *array_ptr, *result;
- HashTable *fe_ht;
SAVE_OPLINE();
- array_ptr = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
+ array_ptr = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
result = EX_VAR(opline->result.var);
ZVAL_COPY_VALUE(result, array_ptr);
@@ -16459,12 +16601,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZE
Z_FE_POS_P(result) = 0;
zval_ptr_dtor_nogc(free_op1);
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
} else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
- HashPosition pos = 0;
- Bucket *p;
-
result = EX_VAR(opline->result.var);
ZVAL_COPY_VALUE(result, array_ptr);
if (IS_VAR != IS_TMP_VAR) {
@@ -16477,26 +16616,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZE
}
Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
}
- fe_ht = Z_OBJPROP_P(array_ptr);
- pos = 0;
- p = fe_ht->arData;
- while (1) {
- if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
- zval_ptr_dtor_nogc(free_op1);
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
- }
- if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
- EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
- (UNEXPECTED(!p->key) ||
- EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) {
- break;
- }
- pos++;
- p++;
- }
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
+ Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0);
zval_ptr_dtor_nogc(free_op1);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -16513,7 +16633,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZE
if (!EG(exception)) {
zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
}
- zend_throw_exception_internal(NULL);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
@@ -16523,6 +16643,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZE
if (UNEXPECTED(EG(exception) != NULL)) {
OBJ_RELEASE(&iter->std);
zval_ptr_dtor_nogc(free_op1);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
}
@@ -16532,6 +16653,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZE
if (UNEXPECTED(EG(exception) != NULL)) {
OBJ_RELEASE(&iter->std);
zval_ptr_dtor_nogc(free_op1);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
iter->index = -1; /* will be set to 0 before using next handler */
@@ -16540,10 +16662,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZE
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
zval_ptr_dtor_nogc(free_op1);
- if (is_empty) {
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
+ if (UNEXPECTED(EG(exception))) {
+ HANDLE_EXCEPTION();
+ } else if (is_empty) {
+ ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_CONTINUE();
} else {
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
}
}
} else {
@@ -16560,19 +16685,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(Z
USE_OPLINE
zend_free_op free_op1;
zval *array_ptr, *array_ref;
- HashTable *fe_ht;
- HashPosition pos = 0;
- Bucket *p;
SAVE_OPLINE();
if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
- array_ref = array_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ array_ref = array_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (Z_ISREF_P(array_ref)) {
array_ptr = Z_REFVAL_P(array_ref);
}
} else {
- array_ref = array_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ array_ref = array_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
}
if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
@@ -16593,26 +16715,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(Z
} else {
SEPARATE_ARRAY(array_ptr);
}
- fe_ht = Z_ARRVAL_P(array_ptr);
- p = fe_ht->arData;
- while (1) {
- if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
- if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
- }
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
- EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) {
- break;
- }
- pos++;
- p++;
- }
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
+ Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
} else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
@@ -16633,25 +16739,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(Z
}
Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
}
- fe_ht = Z_OBJPROP_P(array_ptr);
- p = fe_ht->arData;
- while (1) {
- if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
- if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
- }
- if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
- EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
- (UNEXPECTED(!p->key) ||
- EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) {
- break;
- }
- pos++;
- p++;
- }
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
+ Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0);
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -16669,7 +16757,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(Z
if (!EG(exception)) {
zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
}
- zend_throw_exception_internal(NULL);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
@@ -16683,6 +16771,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(Z
} else {
zval_ptr_dtor_nogc(free_op1);
}
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
}
@@ -16696,6 +16785,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(Z
} else {
zval_ptr_dtor_nogc(free_op1);
}
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
iter->index = -1; /* will be set to 0 before using next handler */
@@ -16708,10 +16798,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(Z
} else {
zval_ptr_dtor_nogc(free_op1);
}
- if (is_empty) {
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
+ if (UNEXPECTED(EG(exception))) {
+ HANDLE_EXCEPTION();
+ } else if (is_empty) {
+ ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_CONTINUE();
} else {
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
}
}
} else {
@@ -16750,20 +16843,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZE
}
value = &p->val;
value_type = Z_TYPE_INFO_P(value);
- if (value_type == IS_UNDEF) {
- pos++;
- p++;
- continue;
- } else if (UNEXPECTED(value_type == IS_INDIRECT)) {
- value = Z_INDIRECT_P(value);
- value_type = Z_TYPE_INFO_P(value);
- if (UNEXPECTED(value_type == IS_UNDEF)) {
- pos++;
- p++;
- continue;
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ if (UNEXPECTED(value_type == IS_INDIRECT)) {
+ value = Z_INDIRECT_P(value);
+ value_type = Z_TYPE_INFO_P(value);
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ break;
+ }
+ } else {
+ break;
}
}
- break;
+ pos++;
+ p++;
}
Z_FE_POS_P(array) = pos + 1;
if (opline->result_type & (IS_TMP_VAR|IS_CV)) {
@@ -16790,23 +16882,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZE
value = &p->val;
value_type = Z_TYPE_INFO_P(value);
- if (UNEXPECTED(value_type == IS_UNDEF)) {
- pos++;
- p++;
- continue;
- } else if (UNEXPECTED(value_type == IS_INDIRECT)) {
- value = Z_INDIRECT_P(value);
- value_type = Z_TYPE_INFO_P(value);
- if (UNEXPECTED(value_type == IS_UNDEF)) {
- pos++;
- p++;
- continue;
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ if (UNEXPECTED(value_type == IS_INDIRECT)) {
+ value = Z_INDIRECT_P(value);
+ value_type = Z_TYPE_INFO_P(value);
+ if (EXPECTED(value_type != IS_UNDEF)
+ && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS)) {
+ break;
+ }
+ } else {
+ break;
}
}
- if (UNEXPECTED(!p->key) ||
- EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS)) {
- break;
- }
pos++;
p++;
}
@@ -16823,20 +16910,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZE
ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
}
}
- while (1) {
- pos++;
- if (pos >= fe_ht->nNumUsed) {
- pos = HT_INVALID_IDX;
- break;
- }
- p++;
- if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
- EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
- (UNEXPECTED(!p->key) ||
- EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS))) {
- break;
- }
+ if (++pos >= fe_ht->nNumUsed) {
+ pos = HT_INVALID_IDX;
}
EG(ht_iterators)[Z_FE_ITER_P(array)].pos = pos;
} else {
@@ -16845,11 +16920,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZE
* In case that ever happens we need an additional flag. */
iter->funcs->move_forward(iter);
if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
if (UNEXPECTED(iter->funcs->valid(iter) == FAILURE)) {
/* reached end of iteration */
if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
goto fe_fetch_r_exit;
@@ -16857,6 +16934,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZE
}
value = iter->funcs->get_current_data(iter);
if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
if (!value) {
@@ -16867,6 +16945,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZE
if (iter->funcs->get_current_key) {
iter->funcs->get_current_key(iter, EX_VAR(opline->result.var));
if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
} else {
@@ -16878,6 +16957,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZE
} else {
zend_error(E_WARNING, "Invalid argument supplied for foreach()");
if (UNEXPECTED(EG(exception))) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
fe_fetch_r_exit:
@@ -16886,7 +16966,7 @@ fe_fetch_r_exit:
}
if (EXPECTED(opline->op2_type == IS_CV)) {
- zval *variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op2.var);
+ zval *variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
zend_assign_to_variable(variable_ptr, value, IS_CV);
} else {
zval *res = EX_VAR(opline->op2.var);
@@ -16897,7 +16977,7 @@ fe_fetch_r_exit:
GC_REFCOUNT(gc)++;
}
}
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -16925,20 +17005,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z
}
value = &p->val;
value_type = Z_TYPE_INFO_P(value);
- if (UNEXPECTED(value_type == IS_UNDEF)) {
- pos++;
- p++;
- continue;
- } else if (UNEXPECTED(value_type == IS_INDIRECT)) {
- value = Z_INDIRECT_P(value);
- value_type = Z_TYPE_INFO_P(value);
- if (UNEXPECTED(value_type == IS_UNDEF)) {
- pos++;
- p++;
- continue;
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ if (UNEXPECTED(value_type == IS_INDIRECT)) {
+ value = Z_INDIRECT_P(value);
+ value_type = Z_TYPE_INFO_P(value);
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ break;
+ }
+ } else {
+ break;
}
}
- break;
+ pos++;
+ p++;
}
if (opline->result_type & (IS_TMP_VAR|IS_CV)) {
if (!p->key) {
@@ -16947,18 +17026,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z
ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
}
}
- while (1) {
- pos++;
- if (pos >= fe_ht->nNumUsed) {
- pos = HT_INVALID_IDX;
- break;
- }
- p++;
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
- EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) {
- break;
- }
+ if (++pos >= fe_ht->nNumUsed) {
+ pos = HT_INVALID_IDX;
}
EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
} else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) {
@@ -16978,23 +17047,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z
value = &p->val;
value_type = Z_TYPE_INFO_P(value);
- if (UNEXPECTED(value_type == IS_UNDEF)) {
- pos++;
- p++;
- continue;
- } else if (UNEXPECTED(value_type == IS_INDIRECT)) {
- value = Z_INDIRECT_P(value);
- value_type = Z_TYPE_INFO_P(value);
- if (UNEXPECTED(value_type == IS_UNDEF)) {
- pos++;
- p++;
- continue;
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ if (UNEXPECTED(value_type == IS_INDIRECT)) {
+ value = Z_INDIRECT_P(value);
+ value_type = Z_TYPE_INFO_P(value);
+ if (EXPECTED(value_type != IS_UNDEF)
+ && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS)) {
+ break;
+ }
+ } else {
+ break;
}
}
- if (UNEXPECTED(!p->key) ||
- EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS)) {
- break;
- }
pos++;
p++;
}
@@ -17011,20 +17075,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z
ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
}
}
- while (1) {
- pos++;
- if (pos >= fe_ht->nNumUsed) {
- pos = HT_INVALID_IDX;
- break;
- }
- p++;
- if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
- EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
- (UNEXPECTED(!p->key) ||
- EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS))) {
- break;
- }
+ if (++pos >= fe_ht->nNumUsed) {
+ pos = HT_INVALID_IDX;
}
EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
} else {
@@ -17033,11 +17085,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z
* In case that ever happens we need an additional flag. */
iter->funcs->move_forward(iter);
if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
if (UNEXPECTED(iter->funcs->valid(iter) == FAILURE)) {
/* reached end of iteration */
if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
goto fe_fetch_w_exit;
@@ -17045,6 +17099,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z
}
value = iter->funcs->get_current_data(iter);
if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
if (!value) {
@@ -17055,6 +17110,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z
if (iter->funcs->get_current_key) {
iter->funcs->get_current_key(iter, EX_VAR(opline->result.var));
if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
} else {
@@ -17066,6 +17122,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z
} else {
zend_error(E_WARNING, "Invalid argument supplied for foreach()");
if (UNEXPECTED(EG(exception))) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
fe_fetch_w_exit:
@@ -17081,7 +17138,7 @@ fe_fetch_w_exit:
ZVAL_COPY_VALUE_EX(ref, value, gc, value_type);
}
if (EXPECTED(opline->op2_type == IS_CV)) {
- zval *variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op2.var);
+ zval *variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(variable_ptr != value)) {
zend_reference *ref;
@@ -17094,7 +17151,7 @@ fe_fetch_w_exit:
Z_ADDREF_P(value);
ZVAL_REF(EX_VAR(opline->op2.var), Z_REF_P(value));
}
- ZEND_VM_NEXT_OPCODE();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -17103,9 +17160,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_
zend_free_op free_op1;
zval *value;
zval *ref = NULL;
+ int ret;
SAVE_OPLINE();
- value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && Z_ISREF_P(value)) {
if (IS_VAR == IS_VAR) {
@@ -17113,7 +17171,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_
}
value = Z_REFVAL_P(value);
}
- if (i_zend_is_true(value)) {
+
+ ret = i_zend_is_true(value);
+
+ if (UNEXPECTED(EG(exception))) {
+ zval_ptr_dtor_nogc(free_op1);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
+ HANDLE_EXCEPTION();
+ }
+
+ if (ret) {
zval *result = EX_VAR(opline->result.var);
ZVAL_COPY_VALUE(result, value);
@@ -17130,11 +17197,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_
Z_ADDREF_P(result);
}
}
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_CONTINUE();
}
zval_ptr_dtor_nogc(free_op1);
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -17145,7 +17213,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND
zval *ref = NULL;
SAVE_OPLINE();
- value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && Z_ISREF_P(value)) {
if (IS_VAR == IS_VAR) {
@@ -17170,21 +17238,22 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND
Z_ADDREF_P(result);
}
}
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_CONTINUE();
}
zval_ptr_dtor_nogc(free_op1);
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zend_free_op free_op1;
zval *value;
zval *result = EX_VAR(opline->result.var);
- value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
SAVE_OPLINE();
GET_OP1_UNDEF_CV(value, BP_VAR_R);
@@ -17221,17 +17290,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_VAR_HANDLER(ZE
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
zval *val;
zend_free_op free_op1;
SAVE_OPLINE();
- val = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
+ val = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
zval_ptr_dtor_nogc(free_op1);
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -17257,6 +17327,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_VAR_HANDLER(ZE
if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
zval_ptr_dtor(val);
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
zend_generator_yield_from(generator, new_gen);
@@ -17264,6 +17335,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_VAR_HANDLER(ZE
} else if (UNEXPECTED(new_gen->execute_data == NULL)) {
zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
zval_ptr_dtor(val);
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
if (RETURN_VALUE_USED(opline)) {
@@ -17279,6 +17351,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_VAR_HANDLER(ZE
if (!EG(exception)) {
zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
}
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -17287,6 +17360,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_VAR_HANDLER(ZE
iter->funcs->rewind(iter);
if (UNEXPECTED(EG(exception) != NULL)) {
OBJ_RELEASE(&iter->std);
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
}
@@ -17295,6 +17369,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_VAR_HANDLER(ZE
}
} else {
zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -17326,16 +17401,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_VAR_HANDLER(ZE
zend_free_op free_op1;
SAVE_OPLINE();
- value = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(value) == opline->extended_value)) {
- if (IS_VAR != IS_CONST && UNEXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
- zend_class_entry *ce = Z_OBJCE_P(value);
-
- if (EXPECTED(ZSTR_LEN(ce->name) != sizeof("__PHP_Incomplete_Class") - 1) ||
- EXPECTED(memcmp(ZSTR_VAL(ce->name), "__PHP_Incomplete_Class", sizeof("__PHP_Incomplete_Class") - 1) != 0)) {
- result = 1;
- }
- } else if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) {
+ if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) {
const char *type_name = zend_rsrc_list_get_rsrc_type(Z_RES_P(value));
if (EXPECTED(type_name != NULL)) {
@@ -17354,13 +17422,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_VAR_HANDLER(ZE
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *varptr, *arg;
zend_free_op free_op1;
- varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
if (IS_VAR == IS_CV) {
@@ -17372,7 +17440,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDL
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *varptr, *arg;
@@ -17388,7 +17456,7 @@ send_var_by_ref_simple:
ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
if (IS_VAR == IS_CV) {
@@ -17400,8 +17468,7 @@ send_var_by_ref_simple:
ZEND_VM_NEXT_OPCODE();
}
-
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *varptr, *arg;
@@ -17417,7 +17484,7 @@ send_var_by_ref_simple:
ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
if (IS_VAR == IS_CV) {
@@ -17429,7 +17496,6 @@ send_var_by_ref_simple:
ZEND_VM_NEXT_OPCODE();
}
-
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -17438,7 +17504,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HA
int result;
SAVE_OPLINE();
- op1 = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
+ op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
result = fast_is_identical_function(op1, op2);
zval_ptr_dtor_nogc(free_op1);
@@ -17456,7 +17522,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONS
int result;
SAVE_OPLINE();
- op1 = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
+ op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
result = fast_is_not_identical_function(op1, op2);
zval_ptr_dtor_nogc(free_op1);
@@ -17476,24 +17542,23 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
zval *zptr;
SAVE_OPLINE();
- object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
property = EX_CONSTANT(opline->op2);
do {
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -17537,7 +17602,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
zval *value, *container, *dim;
SAVE_OPLINE();
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
assign_dim_op_array:
@@ -17553,9 +17618,9 @@ assign_dim_op_new_array:
dim = EX_CONSTANT(opline->op2);
if (IS_CONST == IS_CONST) {
- var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim);
+ var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
} else {
- var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim);
+ var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(!var_ptr)) {
goto assign_dim_op_ret_null;
@@ -17564,7 +17629,7 @@ assign_dim_op_new_array:
SEPARATE_ZVAL_NOREF(var_ptr);
}
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
binary_op(var_ptr, var_ptr, value);
@@ -17588,16 +17653,17 @@ assign_dim_op_convert_to_array:
dim = EX_CONSTANT(opline->op2);
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
- zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
+ zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op EXECUTE_DATA_CC);
} else {
if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
if (IS_CONST == IS_UNUSED) {
zend_throw_error(NULL, "[] operator not supported for strings");
} else {
- zend_check_string_offset(dim, BP_VAR_RW);
- zend_wrong_string_offset();
+ zend_check_string_offset(dim, BP_VAR_RW EXECUTE_DATA_CC);
+ zend_wrong_string_offset(EXECUTE_DATA_C);
}
+ UNDEF_RESULT();
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
goto assign_dim_op_convert_to_array;
} else {
@@ -17609,7 +17675,7 @@ assign_dim_op_ret_null:
ZVAL_NULL(EX_VAR(opline->result.var));
}
}
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
}
}
@@ -17618,7 +17684,7 @@ assign_dim_op_ret_null:
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper_SPEC_VAR_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
USE_OPLINE
zend_free_op free_op1;
@@ -17627,7 +17693,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_V
SAVE_OPLINE();
value = EX_CONSTANT(opline->op2);
- var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -17648,688 +17714,244 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_V
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
-#if 0 || (IS_CONST != IS_UNUSED)
+#if 1 && IS_CONST == IS_UNUSED
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+#else
+# if 0 || IS_VAR != IS_UNUSED
USE_OPLINE
-# if 0 || (IS_VAR != IS_UNUSED)
if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
#endif
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
-#if 0 || (IS_CONST != IS_UNUSED)
+#if 1 && IS_CONST == IS_UNUSED
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+#else
+# if 0 || IS_VAR != IS_UNUSED
USE_OPLINE
-# if 0 || (IS_VAR != IS_UNUSED)
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
#endif
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
-#if 0 || (IS_CONST != IS_UNUSED)
+#if 1 && IS_CONST == IS_UNUSED
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+#else
+# if 0 || IS_VAR != IS_UNUSED
USE_OPLINE
-# if 0 || (IS_VAR != IS_UNUSED)
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
#endif
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+}
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+}
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+}
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_CONST(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -18341,12 +17963,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
zval *zptr;
SAVE_OPLINE();
- object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
property = EX_CONSTANT(opline->op2);
@@ -18355,7 +17975,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -18419,12 +18041,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
zval *zptr;
SAVE_OPLINE();
- object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
property = EX_CONSTANT(opline->op2);
@@ -18433,7 +18053,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
ZVAL_NULL(EX_VAR(opline->result.var));
break;
}
@@ -18490,9 +18112,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HAN
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
- zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
+ zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
@@ -18508,9 +18130,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HA
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
- zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
+ zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
@@ -18532,10 +18154,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CO
zend_throw_error(NULL, "Cannot use temporary expression in write context");
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
- zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
}
@@ -18546,10 +18169,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CO
zend_throw_error(NULL, "Cannot use [] for reading");
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op1);
}
@@ -18563,9 +18187,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
- zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
+ zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
@@ -18583,12 +18207,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_VAR_CONST_HAN
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
offset = EX_CONSTANT(opline->op2);
@@ -18616,7 +18238,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_VAR_CONST_HAN
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
retval = OBJ_PROP(zobj, prop_offset);
- if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
+ if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
break;
}
@@ -18630,8 +18252,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_VAR_CONST_HAN
}
if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
+ zend_string *property_name;
fetch_obj_r_no_object:
- zend_error(E_NOTICE, "Trying to get property of non-object");
+ property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
ZVAL_NULL(EX_VAR(opline->result.var));
} else {
retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
@@ -18654,15 +18279,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HAN
zval *container;
SAVE_OPLINE();
- property = EX_CONSTANT(opline->op2);
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
+ property = EX_CONSTANT(opline->op2);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -18680,14 +18303,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HA
zval *container;
SAVE_OPLINE();
- property = EX_CONSTANT(opline->op2);
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
+ property = EX_CONSTANT(opline->op2);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -18708,20 +18329,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CO
zval *property;
SAVE_OPLINE();
- property = EX_CONSTANT(opline->op2);
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
zend_throw_error(NULL, "Cannot use temporary expression in write context");
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
+ property = EX_CONSTANT(opline->op2);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -18741,12 +18361,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST
zval *container, *property;
SAVE_OPLINE();
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
property = EX_CONSTANT(opline->op2);
@@ -18764,19 +18382,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D
{
USE_OPLINE
zend_free_op free_op1;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = EX_CONSTANT(opline->op2);
+ property = EX_CONSTANT(opline->op2);
value = EX_CONSTANT((opline+1)->op1);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -18808,7 +18423,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D
Z_DELREF_P(object);
} else {
if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -18820,16 +18437,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D
}
if (IS_CONST == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_CONST);
+ value = zend_assign_to_variable(property_val, value, IS_CONST);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -18843,8 +18460,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -18882,7 +18499,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -18892,7 +18509,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -18904,9 +18523,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -18921,20 +18540,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D
{
USE_OPLINE
zend_free_op free_op1, free_op_data;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = EX_CONSTANT(opline->op2);
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
+ property = EX_CONSTANT(opline->op2);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
do {
@@ -18965,7 +18581,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D
Z_DELREF_P(object);
} else {
if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -18977,16 +18595,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D
}
if (IS_CONST == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_TMP_VAR);
+ value = zend_assign_to_variable(property_val, value, IS_TMP_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -19000,8 +18618,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -19039,7 +18657,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -19049,7 +18667,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -19061,9 +18681,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
zval_ptr_dtor_nogc(free_op_data);
@@ -19078,20 +18698,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D
{
USE_OPLINE
zend_free_op free_op1, free_op_data;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = EX_CONSTANT(opline->op2);
- value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
+ property = EX_CONSTANT(opline->op2);
+ value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
do {
@@ -19122,7 +18739,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D
Z_DELREF_P(object);
} else {
if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -19134,16 +18753,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D
}
if (IS_CONST == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_VAR);
+ value = zend_assign_to_variable(property_val, value, IS_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -19157,8 +18776,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -19196,7 +18815,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -19206,7 +18825,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -19218,9 +18839,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
zval_ptr_dtor_nogc(free_op_data);
@@ -19235,20 +18856,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D
{
USE_OPLINE
zend_free_op free_op1;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = EX_CONSTANT(opline->op2);
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
+ property = EX_CONSTANT(opline->op2);
+ value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
do {
@@ -19279,7 +18897,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D
Z_DELREF_P(object);
} else {
if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -19291,16 +18911,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_D
}
if (IS_CONST == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_CV);
+ value = zend_assign_to_variable(property_val, value, IS_CV);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -19314,8 +18934,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -19353,7 +18973,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -19363,7 +18983,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -19375,9 +18997,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -19399,7 +19021,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -19413,9 +19035,9 @@ try_assign_dim_array:
} else {
dim = EX_CONSTANT(opline->op2);
if (IS_CONST == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
@@ -19439,7 +19061,7 @@ try_assign_dim_array:
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -19448,11 +19070,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
dim = EX_CONSTANT(opline->op2);
value = EX_CONSTANT((opline+1)->op1);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -19490,7 +19113,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -19504,15 +19127,15 @@ try_assign_dim_array:
} else {
dim = EX_CONSTANT(opline->op2);
if (IS_CONST == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
}
}
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
@@ -19526,11 +19149,11 @@ try_assign_dim_array:
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
dim = EX_CONSTANT(opline->op2);
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -19540,11 +19163,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
dim = EX_CONSTANT(opline->op2);
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op_data);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -19582,7 +19206,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -19596,15 +19220,15 @@ try_assign_dim_array:
} else {
dim = EX_CONSTANT(opline->op2);
if (IS_CONST == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
}
}
- value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
+ value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
@@ -19618,11 +19242,11 @@ try_assign_dim_array:
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
dim = EX_CONSTANT(opline->op2);
- value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
+ value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -19632,11 +19256,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
dim = EX_CONSTANT(opline->op2);
- value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op_data);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -19674,7 +19299,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_D
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -19688,15 +19313,15 @@ try_assign_dim_array:
} else {
dim = EX_CONSTANT(opline->op2);
if (IS_CONST == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
}
}
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
+ value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
value = zend_assign_to_variable(variable_ptr, value, IS_CV);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
@@ -19710,11 +19335,11 @@ try_assign_dim_array:
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
dim = EX_CONSTANT(opline->op2);
- value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
+ value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -19723,11 +19348,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
dim = EX_CONSTANT(opline->op2);
- value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -19763,7 +19389,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_U
SAVE_OPLINE();
value = EX_CONSTANT(opline->op2);
- variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
@@ -19791,7 +19417,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_U
SAVE_OPLINE();
value = EX_CONSTANT(opline->op2);
- variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
@@ -19849,8 +19475,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V
/* nothing to do */
} else if (IS_VAR != IS_CONST &&
IS_CONST == IS_CONST &&
- (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
- /* do nothing */
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))) == ce)) {
+ fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)) + sizeof(void*));
} else if (IS_CONST != IS_UNUSED) {
@@ -19988,6 +19614,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
@@ -19997,12 +19624,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_
ce = zend_fetch_class(NULL, opline->op1.num);
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else {
ce = Z_CE_P(EX_VAR(opline->op1.var));
}
- if ((value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce)) != NULL) {
+ if (EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))) == ce)) {
+ value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)) + sizeof(void*));
break;
}
}
@@ -20011,12 +19640,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_
scope = EX(func)->op_array.scope;
if (!zend_verify_const_access(c, scope)) {
zend_throw_error(NULL, "Cannot access %s const %s::%s", zend_visibility_string(Z_ACCESS_FLAGS(c->value)), ZSTR_VAL(ce->name), Z_STRVAL_P(EX_CONSTANT(opline->op2)));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
value = &c->value;
if (Z_CONSTANT_P(value)) {
zval_update_constant_ex(value, c->ce);
if (UNEXPECTED(EG(exception) != NULL)) {
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
}
@@ -20027,6 +19658,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_
}
} else {
zend_throw_error(NULL, "Undefined class constant '%s'", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} while (0);
@@ -20053,12 +19685,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CON
SAVE_OPLINE();
if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
- expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
ZVAL_MAKE_REF(expr_ptr);
Z_ADDREF_P(expr_ptr);
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
} else {
- expr_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ expr_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_TMP_VAR) {
/* pass */
} else if (IS_VAR == IS_CONST) {
@@ -20161,13 +19793,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CONST_HAND
}
}
- if (IS_VAR == IS_UNUSED) {
- ZEND_VM_NEXT_OPCODE();
-#if 0 || (IS_VAR != IS_UNUSED)
- } else {
- ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-#endif
- }
+ ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -20180,7 +19806,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDL
zend_string *key;
SAVE_OPLINE();
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
offset = EX_CONSTANT(opline->op2);
do {
@@ -20269,11 +19895,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDL
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
offset = EX_CONSTANT(opline->op2);
@@ -20291,7 +19915,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDL
if (Z_OBJ_HT_P(container)->unset_property) {
Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
} else {
- zend_error(E_NOTICE, "Trying to unset property of non-object");
+ zend_string *property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to unset property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
} while (0);
@@ -20303,13 +19929,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CONST_HANDLER(Z
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -20331,7 +19958,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CONST_HANDLER(Z
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
- value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
ZVAL_COPY_VALUE(&generator->value, value);
if (IS_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
@@ -20339,7 +19966,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CONST_HANDLER(Z
}
}
} else {
- zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
/* If a function call result is yielded and the function did
* not return by reference we throw a notice. */
@@ -20356,7 +19983,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CONST_HANDLER(Z
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
}
} else {
- zval *value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ zval *value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_VAR == IS_CONST) {
@@ -20435,6 +20062,46 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CONST_HANDLER(Z
ZEND_VM_RETURN();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zend_free_op free_op1;
+ zval *op1;
+ HashTable *ht = Z_ARRVAL_P(EX_CONSTANT(opline->op2));
+ int result;
+
+ SAVE_OPLINE();
+ op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
+ result = zend_hash_exists(ht, Z_STR_P(op1));
+ } else if (opline->extended_value) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ result = zend_hash_index_exists(ht, Z_LVAL_P(op1));
+ } else {
+ result = 0;
+ }
+ } else if (Z_TYPE_P(op1) <= IS_FALSE) {
+ result = zend_hash_exists(ht, ZSTR_EMPTY_ALLOC());
+ } else {
+ zend_string *key;
+ zval key_tmp, result_tmp;
+
+ result = 0;
+ ZEND_HASH_FOREACH_STR_KEY(ht, key) {
+ ZVAL_STR(&key_tmp, key);
+ compare_function(&result_tmp, op1, &key_tmp);
+ if (Z_LVAL(result_tmp) == 0) {
+ result = 1;
+ break;
+ }
+ } ZEND_HASH_FOREACH_END();
+ }
+ zval_ptr_dtor_nogc(free_op1);
+ ZEND_VM_SMART_BRANCH(result, 1);
+ ZVAL_BOOL(EX_VAR(opline->result.var), result);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -20443,8 +20110,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HAND
int result;
SAVE_OPLINE();
- op1 = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
result = fast_is_identical_function(op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
@@ -20461,8 +20128,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_
int result;
SAVE_OPLINE();
- op1 = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
result = fast_is_not_identical_function(op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
@@ -20479,8 +20146,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNU
zval *variable_ptr;
SAVE_OPLINE();
- value = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
- variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
zval_ptr_dtor_nogc(free_op2);
@@ -20507,8 +20174,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USE
zval *variable_ptr;
SAVE_OPLINE();
- value = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
- variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
zval_ptr_dtor_nogc(free_op2);
@@ -20531,13 +20198,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_TMP_HANDLER(ZEN
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -20559,7 +20227,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_TMP_HANDLER(ZEN
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
- value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
ZVAL_COPY_VALUE(&generator->value, value);
if (IS_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
@@ -20567,7 +20235,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_TMP_HANDLER(ZEN
}
}
} else {
- zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
/* If a function call result is yielded and the function did
* not return by reference we throw a notice. */
@@ -20584,7 +20252,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_TMP_HANDLER(ZEN
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
}
} else {
- zval *value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ zval *value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_VAR == IS_CONST) {
@@ -20612,7 +20280,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_TMP_HANDLER(ZEN
/* Set the new yielded key */
if (IS_TMP_VAR != IS_UNUSED) {
zend_free_op free_op2;
- zval *key = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
+ zval *key = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_TMP_VAR == IS_CONST) {
@@ -20671,8 +20339,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HAND
int result;
SAVE_OPLINE();
- op1 = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var_deref(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
result = fast_is_identical_function(op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
@@ -20689,8 +20357,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_
int result;
SAVE_OPLINE();
- op1 = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var_deref(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
result = fast_is_not_identical_function(op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
@@ -20707,8 +20375,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNU
zval *variable_ptr;
SAVE_OPLINE();
- value = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
zval_ptr_dtor_nogc(free_op2);
@@ -20735,8 +20403,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USE
zval *variable_ptr;
SAVE_OPLINE();
- value = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
zval_ptr_dtor_nogc(free_op2);
@@ -20763,8 +20431,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLE
zval *value_ptr;
SAVE_OPLINE();
- value_ptr = _get_zval_ptr_ptr_var(opline->op2.var, execute_data, &free_op2);
- variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ value_ptr = _get_zval_ptr_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR &&
UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT) &&
@@ -20774,6 +20442,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLE
zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else if (IS_VAR == IS_VAR &&
@@ -20782,6 +20451,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLE
zend_error(E_NOTICE, "Only variables should be assigned by reference");
if (UNEXPECTED(EG(exception) != NULL)) {
if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -20815,13 +20485,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_VAR_HANDLER(ZEN
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -20843,7 +20514,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_VAR_HANDLER(ZEN
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
- value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
ZVAL_COPY_VALUE(&generator->value, value);
if (IS_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
@@ -20851,7 +20522,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_VAR_HANDLER(ZEN
}
}
} else {
- zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
/* If a function call result is yielded and the function did
* not return by reference we throw a notice. */
@@ -20868,7 +20539,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_VAR_HANDLER(ZEN
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
}
} else {
- zval *value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ zval *value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_VAR == IS_CONST) {
@@ -20896,7 +20567,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_VAR_HANDLER(ZEN
/* Set the new yielded key */
if (IS_VAR != IS_UNUSED) {
zend_free_op free_op2;
- zval *key = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ zval *key = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_VAR == IS_CONST) {
@@ -20955,7 +20626,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
zval *value, *container, *dim;
SAVE_OPLINE();
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
assign_dim_op_array:
@@ -20971,9 +20642,9 @@ assign_dim_op_new_array:
dim = NULL;
if (IS_UNUSED == IS_CONST) {
- var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim);
+ var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
} else {
- var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim);
+ var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(!var_ptr)) {
goto assign_dim_op_ret_null;
@@ -20982,7 +20653,7 @@ assign_dim_op_new_array:
SEPARATE_ZVAL_NOREF(var_ptr);
}
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
binary_op(var_ptr, var_ptr, value);
@@ -21006,16 +20677,17 @@ assign_dim_op_convert_to_array:
dim = NULL;
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
- zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
+ zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op EXECUTE_DATA_CC);
} else {
if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
if (IS_UNUSED == IS_UNUSED) {
zend_throw_error(NULL, "[] operator not supported for strings");
} else {
- zend_check_string_offset(dim, BP_VAR_RW);
- zend_wrong_string_offset();
+ zend_check_string_offset(dim, BP_VAR_RW EXECUTE_DATA_CC);
+ zend_wrong_string_offset(EXECUTE_DATA_C);
}
+ UNDEF_RESULT();
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
goto assign_dim_op_convert_to_array;
} else {
@@ -21027,7 +20699,7 @@ assign_dim_op_ret_null:
ZVAL_NULL(EX_VAR(opline->result.var));
}
}
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
}
}
@@ -21036,232 +20708,84 @@ assign_dim_op_ret_null:
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
-#if 0 || (IS_UNUSED != IS_UNUSED)
+#if 1 && IS_UNUSED == IS_UNUSED
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+#else
+# if 0 || IS_VAR != IS_UNUSED
USE_OPLINE
-# if 0 || (IS_VAR != IS_UNUSED)
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_UNUSED(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
#endif
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_UNUSED != IS_UNUSED)
- USE_OPLINE
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+}
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_UNUSED != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_UNUSED != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_UNUSED != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_UNUSED != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_UNUSED != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_UNUSED != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_UNUSED != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_UNUSED != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_UNUSED != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_UNUSED != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -21271,9 +20795,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HA
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
- zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
+ zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
@@ -21289,9 +20813,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_H
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
- zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
+ zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, NULL, IS_UNUSED EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
@@ -21313,10 +20837,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UN
zend_throw_error(NULL, "Cannot use temporary expression in write context");
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
- zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
}
@@ -21327,10 +20852,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UN
zend_throw_error(NULL, "Cannot use [] for reading");
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, NULL, IS_UNUSED EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op1);
}
@@ -21348,7 +20874,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -21362,9 +20888,9 @@ try_assign_dim_array:
} else {
dim = NULL;
if (IS_UNUSED == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
@@ -21388,7 +20914,7 @@ try_assign_dim_array:
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -21397,11 +20923,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
dim = NULL;
value = EX_CONSTANT((opline+1)->op1);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -21439,7 +20966,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -21453,15 +20980,15 @@ try_assign_dim_array:
} else {
dim = NULL;
if (IS_UNUSED == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
}
}
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
@@ -21475,11 +21002,11 @@ try_assign_dim_array:
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
dim = NULL;
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -21489,11 +21016,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
dim = NULL;
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op_data);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -21531,7 +21059,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -21545,15 +21073,15 @@ try_assign_dim_array:
} else {
dim = NULL;
if (IS_UNUSED == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
}
}
- value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
+ value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
@@ -21567,11 +21095,11 @@ try_assign_dim_array:
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
dim = NULL;
- value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
+ value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -21581,11 +21109,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
dim = NULL;
- value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op_data);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -21623,7 +21152,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -21637,15 +21166,15 @@ try_assign_dim_array:
} else {
dim = NULL;
if (IS_UNUSED == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
}
}
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
+ value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
value = zend_assign_to_variable(variable_ptr, value, IS_CV);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
@@ -21659,11 +21188,11 @@ try_assign_dim_array:
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
dim = NULL;
- value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
+ value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -21672,11 +21201,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
dim = NULL;
- value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -21742,8 +21272,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V
/* nothing to do */
} else if (IS_VAR != IS_CONST &&
IS_UNUSED == IS_CONST &&
- (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
- /* do nothing */
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))) == ce)) {
+ fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)) + sizeof(void*));
} else if (IS_UNUSED != IS_UNUSED) {
@@ -21872,7 +21402,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UN
zend_free_op free_op1;
zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
- retval_ref = retval_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ retval_ref = retval_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_CONST) {
ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
@@ -21886,10 +21416,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UN
ZVAL_DEREF(retval_ptr);
}
- if (UNEXPECTED(!ret_info->class_name
- && ret_info->type_hint != IS_CALLABLE
- && ret_info->type_hint != IS_ITERABLE
- && !ZEND_SAME_FAKE_TYPE(ret_info->type_hint, Z_TYPE_P(retval_ptr))
+ if (UNEXPECTED(!ZEND_TYPE_IS_CLASS(ret_info->type)
+ && ZEND_TYPE_CODE(ret_info->type) != IS_CALLABLE
+ && ZEND_TYPE_CODE(ret_info->type) != IS_ITERABLE
+ && !ZEND_SAME_FAKE_TYPE(ZEND_TYPE_CODE(ret_info->type), Z_TYPE_P(retval_ptr))
&& !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)
&& retval_ref != retval_ptr)
) {
@@ -21903,12 +21433,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UN
retval_ptr = retval_ref;
}
zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
-
- if (UNEXPECTED(EG(exception) != NULL)) {
- if (IS_VAR == IS_CONST) {
- zval_ptr_dtor_nogc(retval_ptr);
- }
- }
#endif
}
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -21923,12 +21447,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNU
SAVE_OPLINE();
if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
- expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
ZVAL_MAKE_REF(expr_ptr);
Z_ADDREF_P(expr_ptr);
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
} else {
- expr_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ expr_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_TMP_VAR) {
/* pass */
} else if (IS_VAR == IS_CONST) {
@@ -22031,13 +21555,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HAN
}
}
- if (IS_VAR == IS_UNUSED) {
- ZEND_VM_NEXT_OPCODE();
-#if 0 || (IS_VAR != IS_UNUSED)
- } else {
- ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-#endif
- }
+ ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -22059,13 +21577,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -22087,7 +21606,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
- value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
ZVAL_COPY_VALUE(&generator->value, value);
if (IS_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
@@ -22095,7 +21614,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(
}
}
} else {
- zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
/* If a function call result is yielded and the function did
* not return by reference we throw a notice. */
@@ -22112,7 +21631,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
}
} else {
- zval *value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ zval *value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_VAR == IS_CONST) {
@@ -22219,6 +21738,102 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDL
ZEND_VM_NEXT_OPCODE();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zend_free_op free_op1;
+ zval *op1;
+ zend_long count;
+
+ SAVE_OPLINE();
+ op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ do {
+ if (Z_TYPE_P(op1) == IS_ARRAY) {
+ count = zend_array_count(Z_ARRVAL_P(op1));
+ break;
+ } else if (Z_TYPE_P(op1) == IS_OBJECT) {
+ /* first, we check if the handler is defined */
+ if (Z_OBJ_HT_P(op1)->count_elements) {
+ if (SUCCESS == Z_OBJ_HT_P(op1)->count_elements(op1, &count)) {
+ break;
+ }
+ }
+
+ /* if not and the object implements Countable we call its count() method */
+ if (instanceof_function(Z_OBJCE_P(op1), zend_ce_countable)) {
+ zval retval;
+
+ zend_call_method_with_0_params(op1, NULL, NULL, "count", &retval);
+ count = zval_get_long(&retval);
+ zval_ptr_dtor(&retval);
+ break;
+ }
+
+ /* If There's no handler and it doesn't implement Countable then add a warning */
+ count = 1;
+ } else if (Z_TYPE_P(op1) == IS_NULL) {
+ count = 0;
+ } else {
+ count = 1;
+ }
+ zend_error(E_WARNING, "count(): Parameter must be an array or an object that implements Countable");
+ } while (0);
+
+ ZVAL_LONG(EX_VAR(opline->result.var), count);
+ zval_ptr_dtor_nogc(free_op1);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+
+ if (IS_VAR == IS_UNUSED) {
+ if (UNEXPECTED(!EX(func)->common.scope)) {
+ SAVE_OPLINE();
+ zend_error(E_WARNING, "get_class() called without object from outside a class");
+ ZVAL_FALSE(EX_VAR(opline->result.var));
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ } else {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
+ ZEND_VM_NEXT_OPCODE();
+ }
+ } else {
+ zend_free_op free_op1;
+ zval *op1;
+
+ SAVE_OPLINE();
+ op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ if (Z_TYPE_P(op1) == IS_OBJECT) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
+ } else {
+ zend_error(E_WARNING, "get_class() expects parameter 1 to be object, %s given", zend_get_type_by_const(Z_TYPE_P(op1)));
+ ZVAL_FALSE(EX_VAR(opline->result.var));
+ }
+ zval_ptr_dtor_nogc(free_op1);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ }
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zend_free_op free_op1;
+ zval *op1;
+ zend_string *type;
+
+ SAVE_OPLINE();
+ op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ type = zend_zval_get_type(op1);
+ if (EXPECTED(type)) {
+ ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
+ } else {
+ ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
+ }
+ zval_ptr_dtor_nogc(free_op1);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -22227,8 +21842,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_CV_HANDL
int result;
SAVE_OPLINE();
- op1 = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
result = fast_is_identical_function(op1, op2);
zval_ptr_dtor_nogc(free_op1);
@@ -22245,8 +21860,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CV_H
int result;
SAVE_OPLINE();
- op1 = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
result = fast_is_not_identical_function(op1, op2);
zval_ptr_dtor_nogc(free_op1);
@@ -22265,24 +21880,23 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
zval *zptr;
SAVE_OPLINE();
- object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
do {
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -22326,7 +21940,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
zval *value, *container, *dim;
SAVE_OPLINE();
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
assign_dim_op_array:
@@ -22339,12 +21953,12 @@ assign_dim_op_new_array:
goto assign_dim_op_ret_null;
}
} else {
- dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ dim = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (IS_CV == IS_CONST) {
- var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim);
+ var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
} else {
- var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim);
+ var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(!var_ptr)) {
goto assign_dim_op_ret_null;
@@ -22353,7 +21967,7 @@ assign_dim_op_new_array:
SEPARATE_ZVAL_NOREF(var_ptr);
}
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
binary_op(var_ptr, var_ptr, value);
@@ -22374,19 +21988,20 @@ assign_dim_op_convert_to_array:
goto assign_dim_op_new_array;
}
- dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
- zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
+ zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op EXECUTE_DATA_CC);
} else {
if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
if (IS_CV == IS_UNUSED) {
zend_throw_error(NULL, "[] operator not supported for strings");
} else {
- zend_check_string_offset(dim, BP_VAR_RW);
- zend_wrong_string_offset();
+ zend_check_string_offset(dim, BP_VAR_RW EXECUTE_DATA_CC);
+ zend_wrong_string_offset(EXECUTE_DATA_C);
}
+ UNDEF_RESULT();
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
goto assign_dim_op_convert_to_array;
} else {
@@ -22398,7 +22013,7 @@ assign_dim_op_ret_null:
ZVAL_NULL(EX_VAR(opline->result.var));
}
}
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
}
}
@@ -22407,7 +22022,7 @@ assign_dim_op_ret_null:
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper_SPEC_VAR_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
USE_OPLINE
zend_free_op free_op1;
@@ -22415,8 +22030,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_V
zval *value;
SAVE_OPLINE();
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -22437,688 +22052,244 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_V
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
-#if 0 || (IS_CV != IS_UNUSED)
+#if 1 && IS_CV == IS_UNUSED
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+#else
+# if 0 || IS_VAR != IS_UNUSED
USE_OPLINE
-# if 0 || (IS_VAR != IS_UNUSED)
if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
#endif
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
-#if 0 || (IS_CV != IS_UNUSED)
+#if 1 && IS_CV == IS_UNUSED
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+#else
+# if 0 || IS_VAR != IS_UNUSED
USE_OPLINE
-# if 0 || (IS_VAR != IS_UNUSED)
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
#endif
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
-#if 0 || (IS_CV != IS_UNUSED)
+#if 1 && IS_CV == IS_UNUSED
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+#else
+# if 0 || IS_VAR != IS_UNUSED
USE_OPLINE
-# if 0 || (IS_VAR != IS_UNUSED)
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
#endif
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+}
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+}
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+}
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_CV(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -23130,21 +22301,21 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
zval *zptr;
SAVE_OPLINE();
- object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
do {
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -23208,21 +22379,21 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
zval *zptr;
SAVE_OPLINE();
- object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
do {
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
ZVAL_NULL(EX_VAR(opline->result.var));
break;
}
@@ -23279,9 +22450,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLE
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
- zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
+ zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
@@ -23297,9 +22468,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDL
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
- zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
+ zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
@@ -23321,10 +22492,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV
zend_throw_error(NULL, "Cannot use temporary expression in write context");
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
- zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
}
@@ -23335,10 +22507,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV
zend_throw_error(NULL, "Cannot use [] for reading");
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op1);
}
@@ -23352,9 +22525,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HA
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
- zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
+ zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
@@ -23372,15 +22545,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_VAR_CV_HANDLE
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
if (IS_VAR == IS_CONST ||
(IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
@@ -23405,7 +22576,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_VAR_CV_HANDLE
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
retval = OBJ_PROP(zobj, prop_offset);
- if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
+ if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
break;
}
@@ -23419,8 +22590,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_VAR_CV_HANDLE
}
if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
+ zend_string *property_name;
fetch_obj_r_no_object:
- zend_error(E_NOTICE, "Trying to get property of non-object");
+ property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
ZVAL_NULL(EX_VAR(opline->result.var));
} else {
retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
@@ -23443,15 +22617,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLE
zval *container;
SAVE_OPLINE();
- property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -23469,14 +22641,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDL
zval *container;
SAVE_OPLINE();
- property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -23497,20 +22667,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV
zval *property;
SAVE_OPLINE();
- property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
zend_throw_error(NULL, "Cannot use temporary expression in write context");
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -23530,15 +22699,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HA
zval *container, *property;
SAVE_OPLINE();
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
@@ -23553,19 +22720,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
{
USE_OPLINE
zend_free_op free_op1;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
value = EX_CONSTANT((opline+1)->op1);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -23597,7 +22761,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
Z_DELREF_P(object);
} else {
if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -23609,16 +22775,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
}
if (IS_CV == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_CONST);
+ value = zend_assign_to_variable(property_val, value, IS_CONST);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -23632,8 +22798,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -23671,7 +22837,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -23681,7 +22847,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -23693,9 +22861,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -23710,20 +22878,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
{
USE_OPLINE
zend_free_op free_op1, free_op_data;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
do {
@@ -23754,7 +22919,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
Z_DELREF_P(object);
} else {
if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -23766,16 +22933,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
}
if (IS_CV == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_TMP_VAR);
+ value = zend_assign_to_variable(property_val, value, IS_TMP_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -23789,8 +22956,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -23828,7 +22995,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -23838,7 +23005,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -23850,9 +23019,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
zval_ptr_dtor_nogc(free_op_data);
@@ -23867,20 +23036,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
{
USE_OPLINE
zend_free_op free_op1, free_op_data;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
do {
@@ -23911,7 +23077,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
Z_DELREF_P(object);
} else {
if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -23923,16 +23091,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
}
if (IS_CV == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_VAR);
+ value = zend_assign_to_variable(property_val, value, IS_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -23946,8 +23114,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -23985,7 +23153,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -23995,7 +23163,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -24007,9 +23177,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
zval_ptr_dtor_nogc(free_op_data);
@@ -24024,20 +23194,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
{
USE_OPLINE
zend_free_op free_op1;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
do {
@@ -24068,7 +23235,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
Z_DELREF_P(object);
} else {
if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -24080,16 +23249,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA
}
if (IS_CV == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_CV);
+ value = zend_assign_to_variable(property_val, value, IS_CV);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -24103,8 +23272,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -24142,7 +23311,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -24152,7 +23321,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -24164,9 +23335,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -24188,7 +23359,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -24200,11 +23371,11 @@ try_assign_dim_array:
goto assign_dim_error;
}
} else {
- dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ dim = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (IS_CV == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
@@ -24223,12 +23394,12 @@ try_assign_dim_array:
}
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
- dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
value = EX_CONSTANT((opline+1)->op1);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -24237,11 +23408,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
- dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
value = EX_CONSTANT((opline+1)->op1);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -24252,7 +23424,7 @@ try_assign_dim_array:
if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
zend_error(E_WARNING, "Cannot use a scalar value as an array");
}
- dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -24279,7 +23451,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -24291,17 +23463,17 @@ try_assign_dim_array:
goto assign_dim_error;
}
} else {
- dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ dim = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (IS_CV == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
}
}
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
@@ -24314,12 +23486,12 @@ try_assign_dim_array:
}
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
- dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
+ dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -24329,11 +23501,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
- dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op_data);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -24344,7 +23517,7 @@ try_assign_dim_array:
if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
zend_error(E_WARNING, "Cannot use a scalar value as an array");
}
- dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -24371,7 +23544,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -24383,17 +23556,17 @@ try_assign_dim_array:
goto assign_dim_error;
}
} else {
- dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ dim = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (IS_CV == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
}
}
- value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
+ value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
@@ -24406,12 +23579,12 @@ try_assign_dim_array:
}
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
- dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
+ dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -24421,11 +23594,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
- dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op_data);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -24436,7 +23610,7 @@ try_assign_dim_array:
if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
zend_error(E_WARNING, "Cannot use a scalar value as an array");
}
- dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -24463,7 +23637,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -24475,17 +23649,17 @@ try_assign_dim_array:
goto assign_dim_error;
}
} else {
- dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ dim = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (IS_CV == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
}
}
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
+ value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
value = zend_assign_to_variable(variable_ptr, value, IS_CV);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
@@ -24498,12 +23672,12 @@ try_assign_dim_array:
}
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
- dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
+ dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -24512,11 +23686,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
- dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -24527,7 +23702,7 @@ try_assign_dim_array:
if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
zend_error(E_WARNING, "Cannot use a scalar value as an array");
}
- dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -24551,8 +23726,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUS
zval *variable_ptr;
SAVE_OPLINE();
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
@@ -24579,8 +23754,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED
zval *variable_ptr;
SAVE_OPLINE();
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
@@ -24607,8 +23782,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER
zval *value_ptr;
SAVE_OPLINE();
- value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op2.var);
- variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
+ variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR &&
UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT) &&
@@ -24618,6 +23793,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER
zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else if (IS_CV == IS_VAR &&
@@ -24626,6 +23802,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER
zend_error(E_NOTICE, "Only variables should be assigned by reference");
if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -24693,12 +23870,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V
/* nothing to do */
} else if (IS_VAR != IS_CONST &&
IS_CV == IS_CONST &&
- (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
- /* do nothing */
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))) == ce)) {
+ fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)) + sizeof(void*));
} else if (IS_CV != IS_UNUSED) {
- function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ function_name = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (IS_CV != IS_CONST) {
if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
do {
@@ -24818,12 +23995,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_
SAVE_OPLINE();
if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
- expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
ZVAL_MAKE_REF(expr_ptr);
Z_ADDREF_P(expr_ptr);
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
} else {
- expr_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ expr_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_TMP_VAR) {
/* pass */
} else if (IS_VAR == IS_CONST) {
@@ -24853,7 +24030,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_
if (IS_CV != IS_UNUSED) {
- zval *offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ zval *offset = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
zend_string *str;
zend_ulong hval;
@@ -24926,13 +24103,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER
}
}
- if (IS_VAR == IS_UNUSED) {
- ZEND_VM_NEXT_OPCODE();
-#if 0 || (IS_VAR != IS_UNUSED)
- } else {
- ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-#endif
- }
+ ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -24945,8 +24116,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(
zend_string *key;
SAVE_OPLINE();
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
- offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ offset = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
do {
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
@@ -25034,13 +24205,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
do {
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
@@ -25056,7 +24225,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(
if (Z_OBJ_HT_P(container)->unset_property) {
Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
} else {
- zend_error(E_NOTICE, "Trying to unset property of non-object");
+ zend_string *property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to unset property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
} while (0);
@@ -25068,13 +24239,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -25096,7 +24268,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
- value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
ZVAL_COPY_VALUE(&generator->value, value);
if (IS_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
@@ -25104,7 +24276,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND
}
}
} else {
- zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
/* If a function call result is yielded and the function did
* not return by reference we throw a notice. */
@@ -25121,7 +24293,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
}
} else {
- zval *value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ zval *value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_VAR == IS_CONST) {
@@ -25149,7 +24321,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND
/* Set the new yielded key */
if (IS_CV != IS_UNUSED) {
- zval *key = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_CV == IS_CONST) {
@@ -25200,6 +24372,110 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND
ZEND_VM_RETURN();
}
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *array;
+ zval *value, *variable_ptr;
+ uint32_t value_type;
+ HashTable *fe_ht;
+ HashPosition pos;
+ Bucket *p;
+
+ array = EX_VAR(opline->op1.var);
+ SAVE_OPLINE();
+ fe_ht = Z_ARRVAL_P(array);
+ pos = Z_FE_POS_P(array);
+ p = fe_ht->arData + pos;
+ while (1) {
+ if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
+ /* reached end of iteration */
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
+ ZEND_VM_CONTINUE();
+ }
+ value = &p->val;
+ value_type = Z_TYPE_INFO_P(value);
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ if (UNEXPECTED(value_type == IS_INDIRECT)) {
+ value = Z_INDIRECT_P(value);
+ value_type = Z_TYPE_INFO_P(value);
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ break;
+ }
+ } else {
+ break;
+ }
+ }
+ pos++;
+ p++;
+ }
+ Z_FE_POS_P(array) = pos + 1;
+ if (0) {
+ if (!p->key) {
+ ZVAL_LONG(EX_VAR(opline->result.var), p->h);
+ } else {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
+ }
+ }
+
+ variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
+ zend_assign_to_variable(variable_ptr, value, IS_CV);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+}
+
+
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *array;
+ zval *value, *variable_ptr;
+ uint32_t value_type;
+ HashTable *fe_ht;
+ HashPosition pos;
+ Bucket *p;
+
+ array = EX_VAR(opline->op1.var);
+ SAVE_OPLINE();
+ fe_ht = Z_ARRVAL_P(array);
+ pos = Z_FE_POS_P(array);
+ p = fe_ht->arData + pos;
+ while (1) {
+ if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
+ /* reached end of iteration */
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
+ ZEND_VM_CONTINUE();
+ }
+ value = &p->val;
+ value_type = Z_TYPE_INFO_P(value);
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ if (UNEXPECTED(value_type == IS_INDIRECT)) {
+ value = Z_INDIRECT_P(value);
+ value_type = Z_TYPE_INFO_P(value);
+ if (EXPECTED(value_type != IS_UNDEF)) {
+ break;
+ }
+ } else {
+ break;
+ }
+ }
+ pos++;
+ p++;
+ }
+ Z_FE_POS_P(array) = pos + 1;
+ if (1) {
+ if (!p->key) {
+ ZVAL_LONG(EX_VAR(opline->result.var), p->h);
+ } else {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
+ }
+ }
+
+ variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
+ zend_assign_to_variable(variable_ptr, value, IS_CV);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+}
+
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
USE_OPLINE
@@ -25210,24 +24486,23 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
zval *zptr;
SAVE_OPLINE();
- object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -25271,7 +24546,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
zval *value, *container, *dim;
SAVE_OPLINE();
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
assign_dim_op_array:
@@ -25284,12 +24559,12 @@ assign_dim_op_new_array:
goto assign_dim_op_ret_null;
}
} else {
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim);
+ var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
} else {
- var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim);
+ var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(!var_ptr)) {
goto assign_dim_op_ret_null;
@@ -25298,7 +24573,7 @@ assign_dim_op_new_array:
SEPARATE_ZVAL_NOREF(var_ptr);
}
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
binary_op(var_ptr, var_ptr, value);
@@ -25319,19 +24594,20 @@ assign_dim_op_convert_to_array:
goto assign_dim_op_new_array;
}
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
- zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
+ zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op EXECUTE_DATA_CC);
} else {
if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
zend_throw_error(NULL, "[] operator not supported for strings");
} else {
- zend_check_string_offset(dim, BP_VAR_RW);
- zend_wrong_string_offset();
+ zend_check_string_offset(dim, BP_VAR_RW EXECUTE_DATA_CC);
+ zend_wrong_string_offset(EXECUTE_DATA_C);
}
+ UNDEF_RESULT();
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
goto assign_dim_op_convert_to_array;
} else {
@@ -25343,7 +24619,7 @@ assign_dim_op_ret_null:
ZVAL_NULL(EX_VAR(opline->result.var));
}
}
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
}
}
@@ -25353,7 +24629,7 @@ assign_dim_op_ret_null:
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper_SPEC_VAR_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
USE_OPLINE
zend_free_op free_op1, free_op2;
@@ -25361,8 +24637,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_V
zval *value;
SAVE_OPLINE();
- value = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -25384,688 +24660,244 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_V
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
+#if 1 && (IS_TMP_VAR|IS_VAR) == IS_UNUSED
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+#else
+# if 0 || IS_VAR != IS_UNUSED
USE_OPLINE
-# if 0 || (IS_VAR != IS_UNUSED)
if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
#endif
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
+#if 1 && (IS_TMP_VAR|IS_VAR) == IS_UNUSED
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+#else
+# if 0 || IS_VAR != IS_UNUSED
USE_OPLINE
-# if 0 || (IS_VAR != IS_UNUSED)
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
#endif
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
+#if 1 && (IS_TMP_VAR|IS_VAR) == IS_UNUSED
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+#else
+# if 0 || IS_VAR != IS_UNUSED
USE_OPLINE
-# if 0 || (IS_VAR != IS_UNUSED)
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
#endif
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+}
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+}
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+}
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_VAR != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_TMPVAR(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -26077,21 +24909,21 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
zval *zptr;
SAVE_OPLINE();
- object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -26156,21 +24988,21 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
zval *zptr;
SAVE_OPLINE();
- object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
ZVAL_NULL(EX_VAR(opline->result.var));
break;
}
@@ -26228,9 +25060,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HA
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
- zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
+ zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op2);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
@@ -26246,9 +25078,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_H
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
- zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
+ zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op2);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
@@ -26270,10 +25102,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TM
zend_throw_error(NULL, "Cannot use temporary expression in write context");
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
- zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
}
@@ -26284,10 +25117,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TM
zend_throw_error(NULL, "Cannot use [] for reading");
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op2);
zval_ptr_dtor_nogc(free_op1);
}
@@ -26301,9 +25135,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVA
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
- zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
+ zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op2);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
@@ -26321,15 +25155,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_VAR_TMPVAR_HA
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (IS_VAR == IS_CONST ||
(IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
@@ -26354,7 +25186,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_VAR_TMPVAR_HA
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
retval = OBJ_PROP(zobj, prop_offset);
- if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
+ if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
break;
}
@@ -26368,8 +25200,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_VAR_TMPVAR_HA
}
if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
+ zend_string *property_name;
fetch_obj_r_no_object:
- zend_error(E_NOTICE, "Trying to get property of non-object");
+ property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
ZVAL_NULL(EX_VAR(opline->result.var));
} else {
retval = zobj->handlers->read_property(container, offset, BP_VAR_R, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
@@ -26393,15 +25228,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HA
zval *container;
SAVE_OPLINE();
- property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(free_op2);
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
zval_ptr_dtor_nogc(free_op2);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -26419,14 +25252,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_H
zval *container;
SAVE_OPLINE();
- property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(free_op2);
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
zval_ptr_dtor_nogc(free_op2);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -26447,20 +25278,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TM
zval *property;
SAVE_OPLINE();
- property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(free_op2);
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
zend_throw_error(NULL, "Cannot use temporary expression in write context");
- zval_ptr_dtor_nogc(free_op2);
+ zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
zval_ptr_dtor_nogc(free_op2);
if (IS_VAR == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -26480,15 +25310,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVA
zval *container, *property;
SAVE_OPLINE();
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
zval_ptr_dtor_nogc(free_op2);
@@ -26503,19 +25331,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
{
USE_OPLINE
zend_free_op free_op1, free_op2;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
value = EX_CONSTANT((opline+1)->op1);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -26547,7 +25372,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
Z_DELREF_P(object);
} else {
if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -26559,16 +25386,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
}
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_CONST);
+ value = zend_assign_to_variable(property_val, value, IS_CONST);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -26582,8 +25409,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -26621,7 +25448,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -26631,7 +25458,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -26643,9 +25472,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -26660,20 +25489,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
{
USE_OPLINE
zend_free_op free_op1, free_op2, free_op_data;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
do {
@@ -26704,7 +25530,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
Z_DELREF_P(object);
} else {
if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -26716,16 +25544,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
}
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_TMP_VAR);
+ value = zend_assign_to_variable(property_val, value, IS_TMP_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -26739,8 +25567,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -26778,7 +25606,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -26788,7 +25616,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -26800,9 +25630,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
zval_ptr_dtor_nogc(free_op_data);
@@ -26817,20 +25647,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
{
USE_OPLINE
zend_free_op free_op1, free_op2, free_op_data;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
do {
@@ -26861,7 +25688,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
Z_DELREF_P(object);
} else {
if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -26873,16 +25702,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
}
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_VAR);
+ value = zend_assign_to_variable(property_val, value, IS_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -26896,8 +25725,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -26935,7 +25764,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -26945,7 +25774,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -26957,9 +25788,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
zval_ptr_dtor_nogc(free_op_data);
@@ -26974,20 +25805,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
{
USE_OPLINE
zend_free_op free_op1, free_op2;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
do {
@@ -27018,7 +25846,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
Z_DELREF_P(object);
} else {
if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -27030,16 +25860,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_
}
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_CV);
+ value = zend_assign_to_variable(property_val, value, IS_CV);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -27053,8 +25883,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -27092,7 +25922,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -27102,7 +25932,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -27114,9 +25946,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -27138,7 +25970,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -27150,11 +25982,11 @@ try_assign_dim_array:
goto assign_dim_error;
}
} else {
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
@@ -27173,12 +26005,12 @@ try_assign_dim_array:
}
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
value = EX_CONSTANT((opline+1)->op1);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -27187,11 +26019,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
value = EX_CONSTANT((opline+1)->op1);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -27202,7 +26035,7 @@ try_assign_dim_array:
if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
zend_error(E_WARNING, "Cannot use a scalar value as an array");
}
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
assign_dim_error:
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -27229,7 +26062,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -27241,17 +26074,17 @@ try_assign_dim_array:
goto assign_dim_error;
}
} else {
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
}
}
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
@@ -27264,12 +26097,12 @@ try_assign_dim_array:
}
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -27279,11 +26112,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op_data);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -27294,7 +26128,7 @@ try_assign_dim_array:
if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
zend_error(E_WARNING, "Cannot use a scalar value as an array");
}
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
assign_dim_error:
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -27321,7 +26155,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -27333,17 +26167,17 @@ try_assign_dim_array:
goto assign_dim_error;
}
} else {
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
}
}
- value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
+ value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
@@ -27356,12 +26190,12 @@ try_assign_dim_array:
}
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -27371,11 +26205,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op_data);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -27386,7 +26221,7 @@ try_assign_dim_array:
if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
zend_error(E_WARNING, "Cannot use a scalar value as an array");
}
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
assign_dim_error:
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -27413,7 +26248,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -27425,17 +26260,17 @@ try_assign_dim_array:
goto assign_dim_error;
}
} else {
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
}
}
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
+ value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
value = zend_assign_to_variable(variable_ptr, value, IS_CV);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
@@ -27448,12 +26283,12 @@ try_assign_dim_array:
}
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -27462,11 +26297,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -27477,7 +26313,7 @@ try_assign_dim_array:
if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
zend_error(E_WARNING, "Cannot use a scalar value as an array");
}
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
assign_dim_error:
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -27532,12 +26368,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V
/* nothing to do */
} else if (IS_VAR != IS_CONST &&
(IS_TMP_VAR|IS_VAR) == IS_CONST &&
- (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
- /* do nothing */
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))) == ce)) {
+ fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)) + sizeof(void*));
} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
zend_free_op free_op2;
- function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
do {
@@ -27657,12 +26493,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMP
SAVE_OPLINE();
if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
- expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
ZVAL_MAKE_REF(expr_ptr);
Z_ADDREF_P(expr_ptr);
if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);};
} else {
- expr_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ expr_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_TMP_VAR) {
/* pass */
} else if (IS_VAR == IS_CONST) {
@@ -27692,7 +26528,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMP
if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
zend_free_op free_op2;
- zval *offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ zval *offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
zend_string *str;
zend_ulong hval;
@@ -27765,13 +26601,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HAN
}
}
- if (IS_VAR == IS_UNUSED) {
- ZEND_VM_NEXT_OPCODE();
-#if 0 || (IS_VAR != IS_UNUSED)
- } else {
- ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-#endif
- }
+ ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -27784,8 +26614,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HAND
zend_string *key;
SAVE_OPLINE();
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
- offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
@@ -27874,13 +26704,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HAND
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
@@ -27896,7 +26724,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HAND
if (Z_OBJ_HT_P(container)->unset_property) {
Z_OBJ_HT_P(container)->unset_property(container, offset, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
} else {
- zend_error(E_NOTICE, "Trying to unset property of non-object");
+ zend_string *property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to unset property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
} while (0);
@@ -27920,6 +26750,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_UNUSED_HANDLER(ZEND_O
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
@@ -27928,6 +26759,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_UNUSED_HANDLER(ZEND_O
ce = zend_fetch_class(NULL, opline->op1.num);
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else {
@@ -27936,13 +26768,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_UNUSED_HANDLER(ZEND_O
result = EX_VAR(opline->result.var);
if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
+ ZVAL_UNDEF(result);
HANDLE_EXCEPTION();
}
constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
if (constructor == NULL) {
if (UNEXPECTED(EG(exception))) {
- zval_ptr_dtor(result);
HANDLE_EXCEPTION();
}
@@ -27980,17 +26812,15 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND
USE_OPLINE
zval *obj;
- zend_object *clone_obj;
zend_class_entry *ce, *scope;
zend_function *clone;
zend_object_clone_obj_t clone_call;
SAVE_OPLINE();
- obj = _get_obj_zval_ptr_unused(execute_data);
+ obj = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
do {
@@ -28002,6 +26832,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND
break;
}
}
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
GET_OP1_UNDEF_CV(obj, BP_VAR_R);
if (UNEXPECTED(EG(exception) != NULL)) {
@@ -28020,6 +26851,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND
if (UNEXPECTED(clone_call == NULL)) {
zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
@@ -28031,6 +26863,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND
if (!zend_check_private(clone, scope, clone->common.function_name)) {
zend_throw_error(NULL, "Call to private %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : "");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) {
@@ -28040,17 +26873,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND
if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
zend_throw_error(NULL, "Call to protected %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : "");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
}
}
- clone_obj = clone_call(obj);
- if (EXPECTED(EG(exception) == NULL)) {
- ZVAL_OBJ(EX_VAR(opline->result.var), clone_obj);
- } else {
- OBJ_RELEASE(clone_obj);
- }
+ ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj));
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -28094,24 +26923,23 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
zval *zptr;
SAVE_OPLINE();
- object = _get_obj_zval_ptr_unused(execute_data);
+ object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
property = EX_CONSTANT(opline->op2);
do {
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -28147,232 +26975,84 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
-#if 0 || (IS_CONST != IS_UNUSED)
+#if 1 && IS_CONST == IS_UNUSED
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+#else
+# if 0 || IS_UNUSED != IS_UNUSED
USE_OPLINE
-# if 0 || (IS_UNUSED != IS_UNUSED)
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_UNUSED_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
#endif
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+}
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_UNUSED_CONST(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -28384,12 +27064,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
zval *zptr;
SAVE_OPLINE();
- object = _get_obj_zval_ptr_unused(execute_data);
+ object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
property = EX_CONSTANT(opline->op2);
@@ -28398,7 +27076,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -28462,12 +27142,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
zval *zptr;
SAVE_OPLINE();
- object = _get_obj_zval_ptr_unused(execute_data);
+ object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
property = EX_CONSTANT(opline->op2);
@@ -28476,7 +27154,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
ZVAL_NULL(EX_VAR(opline->result.var));
break;
}
@@ -28535,12 +27215,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_
zval *offset;
SAVE_OPLINE();
- container = _get_obj_zval_ptr_unused(execute_data);
+ container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
offset = EX_CONSTANT(opline->op2);
@@ -28568,7 +27246,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
retval = OBJ_PROP(zobj, prop_offset);
- if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
+ if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
break;
}
@@ -28582,8 +27260,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_
}
if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
+ zend_string *property_name;
fetch_obj_r_no_object:
- zend_error(E_NOTICE, "Trying to get property of non-object");
+ property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
ZVAL_NULL(EX_VAR(opline->result.var));
} else {
retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
@@ -28606,15 +27287,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_
zval *container;
SAVE_OPLINE();
- property = EX_CONSTANT(opline->op2);
- container = _get_obj_zval_ptr_unused(execute_data);
+ container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
+ property = EX_CONSTANT(opline->op2);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -28632,14 +27311,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST
zval *container;
SAVE_OPLINE();
- property = EX_CONSTANT(opline->op2);
- container = _get_obj_zval_ptr_unused(execute_data);
+ container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
+ property = EX_CONSTANT(opline->op2);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -28658,12 +27335,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST
zval *offset;
SAVE_OPLINE();
- container = _get_obj_zval_ptr_unused(execute_data);
+ container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
offset = EX_CONSTANT(opline->op2);
@@ -28732,20 +27407,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED
zval *property;
SAVE_OPLINE();
- property = EX_CONSTANT(opline->op2);
- container = _get_obj_zval_ptr_unused(execute_data);
+ container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
zend_throw_error(NULL, "Cannot use temporary expression in write context");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
+ property = EX_CONSTANT(opline->op2);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -28765,12 +27439,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CO
zval *container, *property;
SAVE_OPLINE();
- container = _get_obj_zval_ptr_unused(execute_data);
+ container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
property = EX_CONSTANT(opline->op2);
@@ -28788,19 +27460,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
{
USE_OPLINE
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_obj_zval_ptr_unused(execute_data);
+ object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = EX_CONSTANT(opline->op2);
+ property = EX_CONSTANT(opline->op2);
value = EX_CONSTANT((opline+1)->op1);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -28832,7 +27501,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
Z_DELREF_P(object);
} else {
if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -28844,16 +27515,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
}
if (IS_CONST == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_CONST);
+ value = zend_assign_to_variable(property_val, value, IS_CONST);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -28867,8 +27538,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -28906,7 +27577,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -28916,7 +27587,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -28928,9 +27601,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -28945,20 +27618,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
{
USE_OPLINE
zend_free_op free_op_data;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_obj_zval_ptr_unused(execute_data);
+ object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = EX_CONSTANT(opline->op2);
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
+ property = EX_CONSTANT(opline->op2);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
do {
@@ -28989,7 +27659,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
Z_DELREF_P(object);
} else {
if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -29001,16 +27673,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
}
if (IS_CONST == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_TMP_VAR);
+ value = zend_assign_to_variable(property_val, value, IS_TMP_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -29024,8 +27696,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -29063,7 +27735,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -29073,7 +27745,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -29085,9 +27759,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
zval_ptr_dtor_nogc(free_op_data);
@@ -29102,20 +27776,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
{
USE_OPLINE
zend_free_op free_op_data;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_obj_zval_ptr_unused(execute_data);
+ object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = EX_CONSTANT(opline->op2);
- value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
+ property = EX_CONSTANT(opline->op2);
+ value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
do {
@@ -29146,7 +27817,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
Z_DELREF_P(object);
} else {
if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -29158,16 +27831,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
}
if (IS_CONST == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_VAR);
+ value = zend_assign_to_variable(property_val, value, IS_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -29181,8 +27854,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -29220,7 +27893,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -29230,7 +27903,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -29242,9 +27917,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
zval_ptr_dtor_nogc(free_op_data);
@@ -29259,20 +27934,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
{
USE_OPLINE
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_obj_zval_ptr_unused(execute_data);
+ object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = EX_CONSTANT(opline->op2);
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
+ property = EX_CONSTANT(opline->op2);
+ value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
do {
@@ -29303,7 +27975,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
Z_DELREF_P(object);
} else {
if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -29315,16 +27989,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_O
}
if (IS_CONST == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_CV);
+ value = zend_assign_to_variable(property_val, value, IS_CV);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -29338,8 +28012,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -29377,7 +28051,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -29387,7 +28061,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -29399,9 +28075,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -29459,6 +28135,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_C
SAVE_OPLINE();
+ object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
+
+ if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ }
+
function_name = EX_CONSTANT(opline->op2);
if (IS_CONST != IS_CONST &&
@@ -29472,6 +28154,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_C
} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
if (UNEXPECTED(EG(exception) != NULL)) {
+
HANDLE_EXCEPTION();
}
}
@@ -29482,14 +28165,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_C
} while (0);
}
- object = _get_obj_zval_ptr_unused(execute_data);
-
- if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
- }
-
if (IS_UNUSED != IS_UNUSED) {
do {
if (IS_UNUSED == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -29517,8 +28192,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_C
obj = Z_OBJ_P(object);
called_scope = obj->ce;
- if (IS_CONST != IS_CONST ||
- UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
+ if (IS_CONST == IS_CONST &&
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(function_name)) == called_scope)) {
+ fbc = CACHED_PTR(Z_CACHE_SLOT_P(function_name) + sizeof(void*));
+ } else {
zend_object *orig_obj = obj;
if (UNEXPECTED(obj->handlers->get_method == NULL)) {
@@ -29610,8 +28287,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_U
/* nothing to do */
} else if (IS_UNUSED != IS_CONST &&
IS_CONST == IS_CONST &&
- (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
- /* do nothing */
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))) == ce)) {
+ fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)) + sizeof(void*));
} else if (IS_CONST != IS_UNUSED) {
@@ -29731,11 +28408,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_UNUSED_CON
USE_OPLINE
zend_constant *c;
- SAVE_OPLINE();
-
if (EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))))) {
c = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
} else if ((c = zend_quick_get_constant(EX_CONSTANT(opline->op2) + 1, opline->extended_value)) == NULL) {
+ SAVE_OPLINE();
+
if ((opline->extended_value & IS_CONSTANT_UNQUALIFIED) != 0) {
char *actual = (char *)zend_memrchr(Z_STRVAL_P(EX_CONSTANT(opline->op2)), '\\', Z_STRLEN_P(EX_CONSTANT(opline->op2)));
if (!actual) {
@@ -29746,11 +28423,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_UNUSED_CON
actual, Z_STRLEN_P(EX_CONSTANT(opline->op2)) - (actual - Z_STRVAL_P(EX_CONSTANT(opline->op2))));
}
/* non-qualified constant - allow text substitution */
- zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'",
+ zend_error(E_WARNING, "Use of undefined constant %s - assumed '%s' (this will throw an Error in a future version of PHP)",
Z_STRVAL_P(EX_VAR(opline->result.var)), Z_STRVAL_P(EX_VAR(opline->result.var)));
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
zend_throw_error(NULL, "Undefined constant '%s'", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else {
@@ -29793,6 +28471,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUS
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op1)), EX_CONSTANT(opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce);
@@ -29802,12 +28481,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUS
ce = zend_fetch_class(NULL, opline->op1.num);
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else {
ce = Z_CE_P(EX_VAR(opline->op1.var));
}
- if ((value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce)) != NULL) {
+ if (EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))) == ce)) {
+ value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)) + sizeof(void*));
break;
}
}
@@ -29816,12 +28497,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUS
scope = EX(func)->op_array.scope;
if (!zend_verify_const_access(c, scope)) {
zend_throw_error(NULL, "Cannot access %s const %s::%s", zend_visibility_string(Z_ACCESS_FLAGS(c->value)), ZSTR_VAL(ce->name), Z_STRVAL_P(EX_CONSTANT(opline->op2)));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
value = &c->value;
if (Z_CONSTANT_P(value)) {
zval_update_constant_ex(value, c->ce);
if (UNEXPECTED(EG(exception) != NULL)) {
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
}
@@ -29832,6 +28515,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUS
}
} else {
zend_throw_error(NULL, "Undefined class constant '%s'", Z_STRVAL_P(EX_CONSTANT(opline->op2)));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} while (0);
@@ -29849,37 +28533,6 @@ 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;
- } else {
- size = 0;
- }
- ZVAL_NEW_ARR(array);
- zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
-
- if (IS_UNUSED != IS_UNUSED) {
- /* Explicitly initialize array as not-packed if flag is set */
- if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
- zend_hash_real_init(Z_ARRVAL_P(array), 0);
- }
- }
-
- if (IS_UNUSED == IS_UNUSED) {
- ZEND_VM_NEXT_OPCODE();
-#if 0 || (IS_UNUSED != IS_UNUSED)
- } else {
- ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-#endif
- }
-}
-
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -29888,11 +28541,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HA
zval *offset;
SAVE_OPLINE();
- container = _get_obj_zval_ptr_unused(execute_data);
+ container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
offset = EX_CONSTANT(opline->op2);
@@ -29910,7 +28561,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HA
if (Z_OBJ_HT_P(container)->unset_property) {
Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
} else {
- zend_error(E_NOTICE, "Trying to unset property of non-object");
+ zend_string *property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to unset property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
} while (0);
@@ -29927,12 +28580,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UN
zval *offset;
SAVE_OPLINE();
- container = _get_obj_zval_ptr_unused(execute_data);
+ container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
offset = EX_CONSTANT(opline->op2);
@@ -29949,7 +28600,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UN
}
}
if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
- zend_error(E_NOTICE, "Trying to check property of non-object");
+ zend_string *property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to check property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
isset_no_object:
result = ((opline->extended_value & ZEND_ISSET) == 0);
} else {
@@ -29968,13 +28621,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CONST_HANDLE
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -30103,13 +28757,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_TMP_HANDLER(
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -30183,7 +28838,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_TMP_HANDLER(
/* Set the new yielded key */
if (IS_TMP_VAR != IS_UNUSED) {
zend_free_op free_op2;
- zval *key = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
+ zval *key = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_TMP_VAR == IS_CONST) {
@@ -30238,13 +28893,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_VAR_HANDLER(
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -30318,7 +28974,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_VAR_HANDLER(
/* Set the new yielded key */
if (IS_VAR != IS_UNUSED) {
zend_free_op free_op2;
- zval *key = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ zval *key = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_VAR == IS_CONST) {
@@ -30408,8 +29064,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_U
/* nothing to do */
} else if (IS_UNUSED != IS_CONST &&
IS_UNUSED == IS_CONST &&
- (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
- /* do nothing */
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))) == ce)) {
+ fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)) + sizeof(void*));
} else if (IS_UNUSED != IS_UNUSED) {
@@ -30552,10 +29208,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED
ZVAL_DEREF(retval_ptr);
}
- if (UNEXPECTED(!ret_info->class_name
- && ret_info->type_hint != IS_CALLABLE
- && ret_info->type_hint != IS_ITERABLE
- && !ZEND_SAME_FAKE_TYPE(ret_info->type_hint, Z_TYPE_P(retval_ptr))
+ if (UNEXPECTED(!ZEND_TYPE_IS_CLASS(ret_info->type)
+ && ZEND_TYPE_CODE(ret_info->type) != IS_CALLABLE
+ && ZEND_TYPE_CODE(ret_info->type) != IS_ITERABLE
+ && !ZEND_SAME_FAKE_TYPE(ZEND_TYPE_CODE(ret_info->type), Z_TYPE_P(retval_ptr))
&& !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)
&& retval_ref != retval_ptr)
) {
@@ -30569,59 +29225,23 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED
retval_ptr = retval_ref;
}
zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
-
- if (UNEXPECTED(EG(exception) != NULL)) {
- if (IS_UNUSED == IS_CONST) {
- zval_ptr_dtor_nogc(retval_ptr);
- }
- }
#endif
}
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-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;
- } else {
- size = 0;
- }
- ZVAL_NEW_ARR(array);
- zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
-
- if (IS_UNUSED != IS_UNUSED) {
- /* Explicitly initialize array as not-packed if flag is set */
- if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
- zend_hash_real_init(Z_ARRVAL_P(array), 0);
- }
- }
-
- if (IS_UNUSED == IS_UNUSED) {
- ZEND_VM_NEXT_OPCODE();
-#if 0 || (IS_UNUSED != IS_UNUSED)
- } else {
- ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-#endif
- }
-}
-
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -30757,9 +29377,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_
Z_ADDREF_P(result);
ZEND_VM_NEXT_OPCODE();
} else {
- SAVE_OPLINE();
- zend_throw_error(NULL, "Using $this when not in object context");
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
}
@@ -30774,6 +29392,136 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED
ZEND_VM_NEXT_OPCODE();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+
+ if (IS_UNUSED == IS_UNUSED) {
+ if (UNEXPECTED(!EX(func)->common.scope)) {
+ SAVE_OPLINE();
+ zend_error(E_WARNING, "get_class() called without object from outside a class");
+ ZVAL_FALSE(EX_VAR(opline->result.var));
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ } else {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
+ ZEND_VM_NEXT_OPCODE();
+ }
+ } else {
+
+ zval *op1;
+
+ SAVE_OPLINE();
+ op1 = NULL;
+ if (Z_TYPE_P(op1) == IS_OBJECT) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
+ } else {
+ zend_error(E_WARNING, "get_class() expects parameter 1 to be object, %s given", zend_get_type_by_const(Z_TYPE_P(op1)));
+ ZVAL_FALSE(EX_VAR(opline->result.var));
+ }
+
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ }
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+
+ if (Z_TYPE(EX(This)) == IS_OBJECT) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE(EX(This))->name);
+ } else if (Z_CE(EX(This))) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_CE(EX(This))->name);
+ } else {
+ ZVAL_FALSE(EX_VAR(opline->result.var));
+ if (UNEXPECTED(!EX(func)->common.scope)) {
+ SAVE_OPLINE();
+ zend_error(E_WARNING, "get_called_class() called from outside a class");
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ }
+ }
+ ZEND_VM_NEXT_OPCODE();
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+
+ ZVAL_LONG(EX_VAR(opline->result.var), EX_NUM_ARGS());
+ ZEND_VM_NEXT_OPCODE();
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zend_array *ht;
+ uint32_t arg_count, result_size, skip;
+
+ arg_count = EX_NUM_ARGS();
+ if (IS_UNUSED == IS_CONST) {
+ skip = Z_LVAL_P(EX_CONSTANT(opline->op1));
+ if (arg_count < skip) {
+ result_size = 0;
+ } else {
+ result_size = arg_count - skip;
+ }
+ } else {
+ skip = 0;
+ result_size = arg_count;
+ }
+
+ ht = (zend_array *) emalloc(sizeof(zend_array));
+ zend_hash_init(ht, result_size, NULL, ZVAL_PTR_DTOR, 0);
+ ZVAL_ARR(EX_VAR(opline->result.var), ht);
+
+ if (result_size) {
+ uint32_t first_extra_arg = EX(func)->op_array.num_args;
+ zend_hash_real_init(ht, 1);
+ ZEND_HASH_FILL_PACKED(ht) {
+ zval *p, *q;
+ uint32_t i = skip;
+ p = EX_VAR_NUM(i);
+ if (arg_count > first_extra_arg) {
+ while (i < first_extra_arg) {
+ q = p;
+ if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
+ ZVAL_DEREF(q);
+ if (Z_OPT_REFCOUNTED_P(q)) {
+ Z_ADDREF_P(q);
+ }
+ } else {
+ q = &EG(uninitialized_zval);
+ }
+ ZEND_HASH_FILL_ADD(q);
+ p++;
+ i++;
+ }
+ if (skip < first_extra_arg) {
+ skip = 0;
+ } else {
+ skip -= first_extra_arg;
+ }
+ p = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T + skip);
+ }
+ while (i < arg_count) {
+ q = p;
+ if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
+ ZVAL_DEREF(q);
+ if (Z_OPT_REFCOUNTED_P(q)) {
+ Z_ADDREF_P(q);
+ }
+ } else {
+ q = &EG(uninitialized_zval);
+ }
+ ZEND_HASH_FILL_ADD(q);
+ p++;
+ i++;
+ }
+ } ZEND_HASH_FILL_END();
+ ht->nNumOfElements = result_size;
+ }
+ ZEND_VM_NEXT_OPCODE();
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
USE_OPLINE
@@ -30784,24 +29532,23 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
zval *zptr;
SAVE_OPLINE();
- object = _get_obj_zval_ptr_unused(execute_data);
+ object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
do {
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -30837,232 +29584,84 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
-#if 0 || (IS_CV != IS_UNUSED)
+#if 1 && IS_CV == IS_UNUSED
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+#else
+# if 0 || IS_UNUSED != IS_UNUSED
USE_OPLINE
-# if 0 || (IS_UNUSED != IS_UNUSED)
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_UNUSED_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
#endif
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+}
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_UNUSED_CV(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -31074,21 +29673,21 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
zval *zptr;
SAVE_OPLINE();
- object = _get_obj_zval_ptr_unused(execute_data);
+ object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
do {
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -31152,21 +29751,21 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
zval *zptr;
SAVE_OPLINE();
- object = _get_obj_zval_ptr_unused(execute_data);
+ object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
do {
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
ZVAL_NULL(EX_VAR(opline->result.var));
break;
}
@@ -31225,15 +29824,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HAN
zval *offset;
SAVE_OPLINE();
- container = _get_obj_zval_ptr_unused(execute_data);
+ container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
if (IS_UNUSED == IS_CONST ||
(IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
@@ -31258,7 +29855,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HAN
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
retval = OBJ_PROP(zobj, prop_offset);
- if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
+ if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
break;
}
@@ -31272,8 +29869,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HAN
}
if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
+ zend_string *property_name;
fetch_obj_r_no_object:
- zend_error(E_NOTICE, "Trying to get property of non-object");
+ property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
ZVAL_NULL(EX_VAR(opline->result.var));
} else {
retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
@@ -31296,15 +29896,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HAN
zval *container;
SAVE_OPLINE();
- property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- container = _get_obj_zval_ptr_unused(execute_data);
+ container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -31322,14 +29920,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HA
zval *container;
SAVE_OPLINE();
- property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- container = _get_obj_zval_ptr_unused(execute_data);
+ container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -31348,15 +29944,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HA
zval *offset;
SAVE_OPLINE();
- container = _get_obj_zval_ptr_unused(execute_data);
+ container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
if (IS_UNUSED == IS_CONST ||
(IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
@@ -31422,20 +30016,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED
zval *property;
SAVE_OPLINE();
- property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- container = _get_obj_zval_ptr_unused(execute_data);
+ container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
zend_throw_error(NULL, "Cannot use temporary expression in write context");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -31455,15 +30048,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV
zval *container, *property;
SAVE_OPLINE();
- container = _get_obj_zval_ptr_unused(execute_data);
+ container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
@@ -31478,19 +30069,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
{
USE_OPLINE
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_obj_zval_ptr_unused(execute_data);
+ object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
value = EX_CONSTANT((opline+1)->op1);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -31522,7 +30110,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
Z_DELREF_P(object);
} else {
if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -31534,16 +30124,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
}
if (IS_CV == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_CONST);
+ value = zend_assign_to_variable(property_val, value, IS_CONST);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -31557,8 +30147,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -31596,7 +30186,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -31606,7 +30196,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -31618,9 +30210,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -31635,20 +30227,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
{
USE_OPLINE
zend_free_op free_op_data;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_obj_zval_ptr_unused(execute_data);
+ object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
do {
@@ -31679,7 +30268,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
Z_DELREF_P(object);
} else {
if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -31691,16 +30282,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
}
if (IS_CV == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_TMP_VAR);
+ value = zend_assign_to_variable(property_val, value, IS_TMP_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -31714,8 +30305,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -31753,7 +30344,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -31763,7 +30354,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -31775,9 +30368,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
zval_ptr_dtor_nogc(free_op_data);
@@ -31792,20 +30385,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
{
USE_OPLINE
zend_free_op free_op_data;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_obj_zval_ptr_unused(execute_data);
+ object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
do {
@@ -31836,7 +30426,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
Z_DELREF_P(object);
} else {
if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -31848,16 +30440,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
}
if (IS_CV == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_VAR);
+ value = zend_assign_to_variable(property_val, value, IS_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -31871,8 +30463,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -31910,7 +30502,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -31920,7 +30512,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -31932,9 +30526,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
zval_ptr_dtor_nogc(free_op_data);
@@ -31949,20 +30543,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
{
USE_OPLINE
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_obj_zval_ptr_unused(execute_data);
+ object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
do {
@@ -31993,7 +30584,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
Z_DELREF_P(object);
} else {
if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -32005,16 +30598,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_D
}
if (IS_CV == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_CV);
+ value = zend_assign_to_variable(property_val, value, IS_CV);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -32028,8 +30621,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -32067,7 +30660,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -32077,7 +30670,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -32089,9 +30684,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -32112,10 +30707,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDL
/* Compiler allocates the necessary number of zval slots to keep the rope */
rope = (zend_string**)EX_VAR(opline->result.var);
if (IS_CV == IS_CONST) {
- var = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
rope[0] = zend_string_copy(Z_STR_P(var));
} else {
- var = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ var = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
if (IS_CV == IS_CV) {
rope[0] = zend_string_copy(Z_STR_P(var));
@@ -32149,7 +30744,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_C
SAVE_OPLINE();
- function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
+
+ if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ }
+
+ function_name = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (IS_CV != IS_CONST &&
UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
@@ -32162,6 +30763,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_C
} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
if (UNEXPECTED(EG(exception) != NULL)) {
+
HANDLE_EXCEPTION();
}
}
@@ -32172,14 +30774,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_C
} while (0);
}
- object = _get_obj_zval_ptr_unused(execute_data);
-
- if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
- }
-
if (IS_UNUSED != IS_UNUSED) {
do {
if (IS_UNUSED == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -32207,8 +30801,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_C
obj = Z_OBJ_P(object);
called_scope = obj->ce;
- if (IS_CV != IS_CONST ||
- UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
+ if (IS_CV == IS_CONST &&
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(function_name)) == called_scope)) {
+ fbc = CACHED_PTR(Z_CACHE_SLOT_P(function_name) + sizeof(void*));
+ } else {
zend_object *orig_obj = obj;
if (UNEXPECTED(obj->handlers->get_method == NULL)) {
@@ -32300,12 +30896,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_U
/* nothing to do */
} else if (IS_UNUSED != IS_CONST &&
IS_CV == IS_CONST &&
- (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
- /* do nothing */
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))) == ce)) {
+ fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)) + sizeof(void*));
} else if (IS_CV != IS_UNUSED) {
- function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ function_name = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (IS_CV != IS_CONST) {
if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
do {
@@ -32416,37 +31012,6 @@ 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;
- } else {
- size = 0;
- }
- ZVAL_NEW_ARR(array);
- zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
-
- if (IS_UNUSED != IS_UNUSED) {
- /* Explicitly initialize array as not-packed if flag is set */
- if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
- zend_hash_real_init(Z_ARRVAL_P(array), 0);
- }
- }
-
- if (IS_UNUSED == IS_UNUSED) {
- ZEND_VM_NEXT_OPCODE();
-#if 0 || (IS_UNUSED != IS_UNUSED)
- } else {
- ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-#endif
- }
-}
-
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -32455,13 +31020,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDL
zval *offset;
SAVE_OPLINE();
- container = _get_obj_zval_ptr_unused(execute_data);
+ container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
do {
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
@@ -32477,7 +31040,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDL
if (Z_OBJ_HT_P(container)->unset_property) {
Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
} else {
- zend_error(E_NOTICE, "Trying to unset property of non-object");
+ zend_string *property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to unset property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
} while (0);
@@ -32494,15 +31059,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UN
zval *offset;
SAVE_OPLINE();
- container = _get_obj_zval_ptr_unused(execute_data);
+ container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
if (IS_UNUSED == IS_CONST ||
(IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
@@ -32516,7 +31079,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UN
}
}
if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
- zend_error(E_NOTICE, "Trying to check property of non-object");
+ zend_string *property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to check property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
isset_no_object:
result = ((opline->extended_value & ZEND_ISSET) == 0);
} else {
@@ -32535,13 +31100,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(Z
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -32615,7 +31181,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(Z
/* Set the new yielded key */
if (IS_CV != IS_UNUSED) {
- zval *key = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_CV == IS_CONST) {
@@ -32676,24 +31242,23 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
zval *zptr;
SAVE_OPLINE();
- object = _get_obj_zval_ptr_unused(execute_data);
+ object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -32729,232 +31294,84 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
+#if 1 && (IS_TMP_VAR|IS_VAR) == IS_UNUSED
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+#else
+# if 0 || IS_UNUSED != IS_UNUSED
USE_OPLINE
-# if 0 || (IS_UNUSED != IS_UNUSED)
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_UNUSED_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
#endif
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+}
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_UNUSED != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_UNUSED_TMPVAR(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -32966,21 +31383,21 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
zval *zptr;
SAVE_OPLINE();
- object = _get_obj_zval_ptr_unused(execute_data);
+ object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -33045,21 +31462,21 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
zval *zptr;
SAVE_OPLINE();
- object = _get_obj_zval_ptr_unused(execute_data);
+ object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
ZVAL_NULL(EX_VAR(opline->result.var));
break;
}
@@ -33119,15 +31536,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR
zval *offset;
SAVE_OPLINE();
- container = _get_obj_zval_ptr_unused(execute_data);
+ container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (IS_UNUSED == IS_CONST ||
(IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
@@ -33152,7 +31567,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
retval = OBJ_PROP(zobj, prop_offset);
- if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
+ if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
break;
}
@@ -33166,8 +31581,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR
}
if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
+ zend_string *property_name;
fetch_obj_r_no_object:
- zend_error(E_NOTICE, "Trying to get property of non-object");
+ property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
ZVAL_NULL(EX_VAR(opline->result.var));
} else {
retval = zobj->handlers->read_property(container, offset, BP_VAR_R, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
@@ -33191,15 +31609,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR
zval *container;
SAVE_OPLINE();
- property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- container = _get_obj_zval_ptr_unused(execute_data);
+ container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(free_op2);
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
zval_ptr_dtor_nogc(free_op2);
if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -33217,14 +31633,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVA
zval *container;
SAVE_OPLINE();
- property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- container = _get_obj_zval_ptr_unused(execute_data);
+ container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(free_op2);
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
zval_ptr_dtor_nogc(free_op2);
if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -33243,15 +31657,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVA
zval *offset;
SAVE_OPLINE();
- container = _get_obj_zval_ptr_unused(execute_data);
+ container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (IS_UNUSED == IS_CONST ||
(IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
@@ -33318,20 +31730,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED
zval *property;
SAVE_OPLINE();
- property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- container = _get_obj_zval_ptr_unused(execute_data);
+ container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(free_op2);
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
zend_throw_error(NULL, "Cannot use temporary expression in write context");
- zval_ptr_dtor_nogc(free_op2);
+ zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
zval_ptr_dtor_nogc(free_op2);
if (IS_UNUSED == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -33351,15 +31762,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TM
zval *container, *property;
SAVE_OPLINE();
- container = _get_obj_zval_ptr_unused(execute_data);
+ container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
zval_ptr_dtor_nogc(free_op2);
@@ -33374,19 +31783,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
{
USE_OPLINE
zend_free_op free_op2;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_obj_zval_ptr_unused(execute_data);
+ object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
value = EX_CONSTANT((opline+1)->op1);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -33418,7 +31824,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
Z_DELREF_P(object);
} else {
if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -33430,16 +31838,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
}
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_CONST);
+ value = zend_assign_to_variable(property_val, value, IS_CONST);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -33453,8 +31861,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -33492,7 +31900,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -33502,7 +31910,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -33514,9 +31924,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -33531,20 +31941,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
{
USE_OPLINE
zend_free_op free_op2, free_op_data;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_obj_zval_ptr_unused(execute_data);
+ object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
do {
@@ -33575,7 +31982,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
Z_DELREF_P(object);
} else {
if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -33587,16 +31996,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
}
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_TMP_VAR);
+ value = zend_assign_to_variable(property_val, value, IS_TMP_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -33610,8 +32019,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -33649,7 +32058,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -33659,7 +32068,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -33671,9 +32082,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
zval_ptr_dtor_nogc(free_op_data);
@@ -33688,20 +32099,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
{
USE_OPLINE
zend_free_op free_op2, free_op_data;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_obj_zval_ptr_unused(execute_data);
+ object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
do {
@@ -33732,7 +32140,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
Z_DELREF_P(object);
} else {
if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -33744,16 +32154,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
}
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_VAR);
+ value = zend_assign_to_variable(property_val, value, IS_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -33767,8 +32177,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -33806,7 +32216,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -33816,7 +32226,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -33828,9 +32240,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
zval_ptr_dtor_nogc(free_op_data);
@@ -33845,20 +32257,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
{
USE_OPLINE
zend_free_op free_op2;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_obj_zval_ptr_unused(execute_data);
+ object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
do {
@@ -33889,7 +32298,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
Z_DELREF_P(object);
} else {
if (IS_UNUSED != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -33901,16 +32312,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_
}
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_CV);
+ value = zend_assign_to_variable(property_val, value, IS_CV);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -33924,8 +32335,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -33963,7 +32374,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -33973,7 +32384,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -33985,9 +32398,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -34008,10 +32421,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_H
/* Compiler allocates the necessary number of zval slots to keep the rope */
rope = (zend_string**)EX_VAR(opline->result.var);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- var = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ var = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
rope[0] = zend_string_copy(Z_STR_P(var));
} else {
- var = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ var = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
rope[0] = zend_string_copy(Z_STR_P(var));
@@ -34045,7 +32458,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_T
SAVE_OPLINE();
- function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ object = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
+
+ if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ }
+
+ function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
@@ -34058,6 +32477,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_T
} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
if (UNEXPECTED(EG(exception) != NULL)) {
+
HANDLE_EXCEPTION();
}
}
@@ -34068,14 +32488,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_T
} while (0);
}
- object = _get_obj_zval_ptr_unused(execute_data);
-
- if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(free_op2);
- HANDLE_EXCEPTION();
- }
-
if (IS_UNUSED != IS_UNUSED) {
do {
if (IS_UNUSED == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -34103,8 +32515,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_T
obj = Z_OBJ_P(object);
called_scope = obj->ce;
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST ||
- UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(function_name)) == called_scope)) {
+ fbc = CACHED_PTR(Z_CACHE_SLOT_P(function_name) + sizeof(void*));
+ } else {
zend_object *orig_obj = obj;
if (UNEXPECTED(obj->handlers->get_method == NULL)) {
@@ -34197,12 +32611,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_U
/* nothing to do */
} else if (IS_UNUSED != IS_CONST &&
(IS_TMP_VAR|IS_VAR) == IS_CONST &&
- (fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce))) {
- /* do nothing */
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2))) == ce)) {
+ fbc = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)) + sizeof(void*));
} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
zend_free_op free_op2;
- function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
do {
@@ -34313,37 +32727,6 @@ 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;
- } else {
- size = 0;
- }
- ZVAL_NEW_ARR(array);
- zend_hash_init(Z_ARRVAL_P(array), size, NULL, ZVAL_PTR_DTOR, 0);
-
- if (IS_UNUSED != IS_UNUSED) {
- /* Explicitly initialize array as not-packed if flag is set */
- if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
- zend_hash_real_init(Z_ARRVAL_P(array), 0);
- }
- }
-
- if (IS_UNUSED == IS_UNUSED) {
- ZEND_VM_NEXT_OPCODE();
-#if 0 || (IS_UNUSED != IS_UNUSED)
- } else {
- ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-#endif
- }
-}
-
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -34352,13 +32735,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_H
zval *offset;
SAVE_OPLINE();
- container = _get_obj_zval_ptr_unused(execute_data);
+ container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
@@ -34374,7 +32755,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_H
if (Z_OBJ_HT_P(container)->unset_property) {
Z_OBJ_HT_P(container)->unset_property(container, offset, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
} else {
- zend_error(E_NOTICE, "Trying to unset property of non-object");
+ zend_string *property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to unset property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
} while (0);
@@ -34392,15 +32775,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UN
zval *offset;
SAVE_OPLINE();
- container = _get_obj_zval_ptr_unused(execute_data);
+ container = _get_obj_zval_ptr_unused(EXECUTE_DATA_C);
if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (IS_UNUSED == IS_CONST ||
(IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
@@ -34414,7 +32795,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UN
}
}
if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
- zend_error(E_NOTICE, "Trying to check property of non-object");
+ zend_string *property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to check property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
isset_no_object:
result = ((opline->extended_value & ZEND_ISSET) == 0);
} else {
@@ -34434,10 +32817,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_CV_HANDLER(ZEND_OP
{
USE_OPLINE
+ zval *op1;
+
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1));
+ ZEND_VM_NEXT_OPCODE();
+ }
SAVE_OPLINE();
bitwise_not_function(EX_VAR(opline->result.var),
- _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var));
+ _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC));
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -34448,7 +32838,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_
zval *val;
- val = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ val = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
if (Z_TYPE_INFO_P(val) == IS_TRUE) {
ZVAL_FALSE(EX_VAR(opline->result.var));
} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
@@ -34473,7 +32863,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_
zval *var_ptr;
- var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
+ var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
fast_long_increment_function(var_ptr);
@@ -34512,7 +32902,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HA
zval *var_ptr;
- var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
+ var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
fast_long_increment_function(var_ptr);
@@ -34551,7 +32941,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_
zval *var_ptr;
- var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
+ var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
fast_long_decrement_function(var_ptr);
@@ -34590,7 +32980,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HA
zval *var_ptr;
- var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
+ var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
fast_long_decrement_function(var_ptr);
@@ -34629,7 +33019,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_
zval *var_ptr;
- var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
+ var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
@@ -34661,7 +33051,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_
zval *var_ptr;
- var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
+ var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
@@ -34694,7 +33084,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCO
zval *z;
SAVE_OPLINE();
- z = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ z = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
if (Z_TYPE_P(z) == IS_STRING) {
zend_string *str = Z_STR_P(z);
@@ -34716,13 +33106,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCO
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *val;
- val = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ val = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
if (Z_TYPE_INFO_P(val) == IS_TRUE) {
ZEND_VM_SET_NEXT_OPCODE(opline + 1);
@@ -34748,13 +33138,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCO
ZEND_VM_JMP(opline);
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *val;
- val = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ val = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
if (Z_TYPE_INFO_P(val) == IS_TRUE) {
ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
@@ -34779,13 +33169,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPC
ZEND_VM_JMP(opline);
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *val;
- val = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ val = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
@@ -34818,7 +33208,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_O
zval *val;
int ret;
- val = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ val = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
if (Z_TYPE_INFO_P(val) == IS_TRUE) {
ZVAL_TRUE(EX_VAR(opline->result.var));
@@ -34855,7 +33245,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_
zval *val;
int ret;
- val = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ val = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
if (Z_TYPE_INFO_P(val) == IS_TRUE) {
ZVAL_TRUE(EX_VAR(opline->result.var));
@@ -34885,14 +33275,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_
ZEND_VM_JMP(opline);
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *retval_ptr;
zval *return_value;
zend_free_op free_op1;
- retval_ptr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ retval_ptr = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
return_value = EX(return_value);
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
SAVE_OPLINE();
@@ -34964,7 +33354,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(
/* Not supposed to happen, but we'll allow it */
zend_error(E_NOTICE, "Only variable references should be returned by reference");
- retval_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ retval_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
if (!EX(return_value)) {
} else {
@@ -34981,7 +33371,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(
break;
}
- retval_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
+ retval_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_VAR) {
if (retval_ptr == &EG(uninitialized_zval) ||
@@ -35013,10 +33403,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CV_HANDL
zval *retval;
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
- retval = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ retval = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
/* Copy return value into generator->retval */
if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
@@ -35059,7 +33449,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPC
SAVE_OPLINE();
- value = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ value = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
do {
if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
@@ -35092,13 +33482,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPC
HANDLE_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *varptr, *arg;
- varptr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ varptr = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
SAVE_OPLINE();
GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
@@ -35138,7 +33528,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_
zval *varptr, *arg;
SAVE_OPLINE();
- varptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
+ varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(varptr))) {
@@ -35159,7 +33549,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *varptr, *arg;
@@ -35175,7 +33565,7 @@ send_var_by_ref:
ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- varptr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ varptr = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
SAVE_OPLINE();
GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
@@ -35208,7 +33598,7 @@ send_var_by_ref:
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *varptr, *arg;
@@ -35224,7 +33614,7 @@ send_var_by_ref:
ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- varptr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ varptr = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
SAVE_OPLINE();
GET_OP1_UNDEF_CV(varptr, BP_VAR_R);
@@ -35264,7 +33654,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND
SAVE_OPLINE();
- arg = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
+ arg = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
param = ZEND_CALL_VAR(EX(call), opline->result.var);
if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
@@ -35286,7 +33676,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCO
zval *val;
- val = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ val = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
if (Z_TYPE_INFO_P(val) == IS_TRUE) {
ZVAL_TRUE(EX_VAR(opline->result.var));
} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
@@ -35310,17 +33700,15 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPC
USE_OPLINE
zval *obj;
- zend_object *clone_obj;
zend_class_entry *ce, *scope;
zend_function *clone;
zend_object_clone_obj_t clone_call;
SAVE_OPLINE();
- obj = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ obj = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
do {
@@ -35332,6 +33720,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPC
break;
}
}
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
GET_OP1_UNDEF_CV(obj, BP_VAR_R);
if (UNEXPECTED(EG(exception) != NULL)) {
@@ -35350,6 +33739,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPC
if (UNEXPECTED(clone_call == NULL)) {
zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
@@ -35361,6 +33751,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPC
if (!zend_check_private(clone, scope, clone->common.function_name)) {
zend_throw_error(NULL, "Call to private %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : "");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) {
@@ -35370,17 +33761,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPC
if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
zend_throw_error(NULL, "Call to protected %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : "");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
}
}
- clone_obj = clone_call(obj);
- if (EXPECTED(EG(exception) == NULL)) {
- ZVAL_OBJ(EX_VAR(opline->result.var), clone_obj);
- } else {
- OBJ_RELEASE(clone_obj);
- }
+ ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj));
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -35393,24 +33780,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCO
zval *result = EX_VAR(opline->result.var);
SAVE_OPLINE();
- expr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ expr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
switch (opline->extended_value) {
case IS_NULL:
- /* This code is taken from convert_to_null. However, it does not seems very useful,
- * because a conversion to null always results in the same value. This could only
- * be relevant if a cast_object handler for IS_NULL has some kind of side-effect. */
-#if 0
- if (IS_CV == IS_VAR || IS_CV == IS_CV) {
- ZVAL_DEREF(expr);
- }
- if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->cast_object) {
- if (Z_OBJ_HT_P(expr)->cast_object(expr, result, IS_NULL) == SUCCESS) {
- break;
- }
- }
-#endif
-
ZVAL_NULL(result);
break;
case _IS_BOOL:
@@ -35462,7 +33835,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCO
if (Z_TYPE_P(expr) != IS_ARRAY) {
object_init(result);
if (Z_TYPE_P(expr) != IS_NULL) {
- expr = zend_hash_add_new(Z_OBJPROP_P(result), CG(known_strings)[ZEND_STR_SCALAR], expr);
+ expr = zend_hash_add_new(Z_OBJPROP_P(result), ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
if (IS_CV == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
} else {
@@ -35487,7 +33860,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLE
zval *inc_filename;
SAVE_OPLINE();
- inc_filename = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ inc_filename = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
if (UNEXPECTED(EG(exception) != NULL)) {
@@ -35495,6 +33868,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLE
destroy_op_array(new_op_array);
efree_size(new_op_array, sizeof(zend_op_array));
}
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
if (RETURN_VALUE_USED(opline)) {
@@ -35506,6 +33880,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLE
if (RETURN_VALUE_USED(opline)) {
return_value = EX_VAR(opline->result.var);
+ ZVAL_NULL(return_value);
}
new_op_array->scope = EX(func)->op_array.scope;
@@ -35534,7 +33909,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLE
destroy_op_array(new_op_array);
efree_size(new_op_array, sizeof(zend_op_array));
if (UNEXPECTED(EG(exception) != NULL)) {
- zend_throw_exception_internal(NULL);
+ zend_rethrow_exception(execute_data);
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
} else if (RETURN_VALUE_USED(opline)) {
@@ -35549,11 +33925,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEN
USE_OPLINE
zval *array_ptr, *result;
- HashTable *fe_ht;
SAVE_OPLINE();
- array_ptr = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
+ array_ptr = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
result = EX_VAR(opline->result.var);
ZVAL_COPY_VALUE(result, array_ptr);
@@ -35562,12 +33937,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEN
}
Z_FE_POS_P(result) = 0;
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
- HashPosition pos = 0;
- Bucket *p;
-
result = EX_VAR(opline->result.var);
ZVAL_COPY_VALUE(result, array_ptr);
if (IS_CV != IS_TMP_VAR) {
@@ -35580,26 +33952,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEN
}
Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
}
- fe_ht = Z_OBJPROP_P(array_ptr);
- pos = 0;
- p = fe_ht->arData;
- while (1) {
- if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
-
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
- }
- if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
- EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
- (UNEXPECTED(!p->key) ||
- EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) {
- break;
- }
- pos++;
- p++;
- }
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
+ Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
@@ -35615,7 +33968,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEN
if (!EG(exception)) {
zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
}
- zend_throw_exception_internal(NULL);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
@@ -35625,6 +33978,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEN
if (UNEXPECTED(EG(exception) != NULL)) {
OBJ_RELEASE(&iter->std);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
}
@@ -35634,6 +33988,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEN
if (UNEXPECTED(EG(exception) != NULL)) {
OBJ_RELEASE(&iter->std);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
iter->index = -1; /* will be set to 0 before using next handler */
@@ -35641,10 +33996,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEN
ZVAL_OBJ(EX_VAR(opline->result.var), &iter->std);
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
- if (is_empty) {
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
+ if (UNEXPECTED(EG(exception))) {
+ HANDLE_EXCEPTION();
+ } else if (is_empty) {
+ ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_CONTINUE();
} else {
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
}
}
} else {
@@ -35661,19 +34019,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZE
USE_OPLINE
zval *array_ptr, *array_ref;
- HashTable *fe_ht;
- HashPosition pos = 0;
- Bucket *p;
SAVE_OPLINE();
if (IS_CV == IS_VAR || IS_CV == IS_CV) {
- array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
if (Z_ISREF_P(array_ref)) {
array_ptr = Z_REFVAL_P(array_ref);
}
} else {
- array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
}
if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
@@ -35694,25 +34049,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZE
} else {
SEPARATE_ARRAY(array_ptr);
}
- fe_ht = Z_ARRVAL_P(array_ptr);
- p = fe_ht->arData;
- while (1) {
- if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
-
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
- }
- if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
- EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) {
- break;
- }
- pos++;
- p++;
- }
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
+ Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
if (!Z_OBJCE_P(array_ptr)->get_iterator) {
if (IS_CV == IS_VAR || IS_CV == IS_CV) {
@@ -35733,25 +34072,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZE
}
Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
}
- fe_ht = Z_OBJPROP_P(array_ptr);
- p = fe_ht->arData;
- while (1) {
- if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
-
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
- }
- if ((EXPECTED(Z_TYPE(p->val) != IS_UNDEF) &&
- (EXPECTED(Z_TYPE(p->val) != IS_INDIRECT) ||
- EXPECTED(Z_TYPE_P(Z_INDIRECT(p->val)) != IS_UNDEF))) &&
- (UNEXPECTED(!p->key) ||
- EXPECTED(zend_check_property_access(Z_OBJ_P(array_ptr), p->key) == SUCCESS))) {
- break;
- }
- pos++;
- p++;
- }
- Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(fe_ht, pos);
+ Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
@@ -35768,7 +34089,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZE
if (!EG(exception)) {
zend_throw_exception_ex(NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
}
- zend_throw_exception_internal(NULL);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
@@ -35782,6 +34103,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZE
} else {
}
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
}
@@ -35795,6 +34117,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZE
} else {
}
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
iter->index = -1; /* will be set to 0 before using next handler */
@@ -35807,10 +34130,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZE
} else {
}
- if (is_empty) {
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
+ if (UNEXPECTED(EG(exception))) {
+ HANDLE_EXCEPTION();
+ } else if (is_empty) {
+ ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_CONTINUE();
} else {
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
}
}
} else {
@@ -35833,7 +34159,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_CV_HANDLER(ZEND_OPCO
SAVE_OPLINE();
if (IS_CV != IS_UNUSED) {
- zval *ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ zval *ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
do {
if (Z_TYPE_P(ptr) == IS_LONG) {
@@ -35861,9 +34187,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_O
zval *value;
zval *ref = NULL;
+ int ret;
SAVE_OPLINE();
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
if ((IS_CV == IS_VAR || IS_CV == IS_CV) && Z_ISREF_P(value)) {
if (IS_CV == IS_VAR) {
@@ -35871,7 +34198,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_O
}
value = Z_REFVAL_P(value);
}
- if (i_zend_is_true(value)) {
+
+ ret = i_zend_is_true(value);
+
+ if (UNEXPECTED(EG(exception))) {
+
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
+ HANDLE_EXCEPTION();
+ }
+
+ if (ret) {
zval *result = EX_VAR(opline->result.var);
ZVAL_COPY_VALUE(result, value);
@@ -35888,10 +34224,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_O
Z_ADDREF_P(result);
}
}
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_CONTINUE();
}
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -35902,7 +34239,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_
zval *ref = NULL;
SAVE_OPLINE();
- value = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
+ value = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
if ((IS_CV == IS_VAR || IS_CV == IS_CV) && Z_ISREF_P(value)) {
if (IS_CV == IS_VAR) {
@@ -35927,20 +34264,21 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_
Z_ADDREF_P(result);
}
}
- ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
+ ZEND_VM_CONTINUE();
}
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *value;
zval *result = EX_VAR(opline->result.var);
- value = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ value = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
SAVE_OPLINE();
GET_OP1_UNDEF_CV(value, BP_VAR_R);
@@ -35977,17 +34315,18 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEN
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
zval *val;
SAVE_OPLINE();
- val = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
+ val = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -36011,6 +34350,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEN
if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
zval_ptr_dtor(val);
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
zend_generator_yield_from(generator, new_gen);
@@ -36018,6 +34358,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEN
} else if (UNEXPECTED(new_gen->execute_data == NULL)) {
zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
zval_ptr_dtor(val);
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
if (RETURN_VALUE_USED(opline)) {
@@ -36032,6 +34373,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEN
if (!EG(exception)) {
zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
}
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -36040,6 +34382,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEN
iter->funcs->rewind(iter);
if (UNEXPECTED(EG(exception) != NULL)) {
OBJ_RELEASE(&iter->std);
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
}
@@ -36048,6 +34391,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEN
}
} else {
zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -36077,20 +34421,26 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OP
zval *value;
- SAVE_OPLINE();
- value = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
-try_strlen:
+ value = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
+
+ ZEND_VM_NEXT_OPCODE();
} else {
zend_bool strict;
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
- value = GET_OP1_UNDEF_CV(value, BP_VAR_R);
- }
if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
value = Z_REFVAL_P(value);
- goto try_strlen;
+ if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
+
+ ZEND_VM_NEXT_OPCODE();
+ }
+ }
+
+ SAVE_OPLINE();
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
+ value = GET_OP1_UNDEF_CV(value, BP_VAR_R);
}
strict = EX_USES_STRICT_TYPES();
do {
@@ -36122,16 +34472,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEN
SAVE_OPLINE();
- value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
+ value = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(value) == opline->extended_value)) {
- if (IS_CV != IS_CONST && UNEXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
- zend_class_entry *ce = Z_OBJCE_P(value);
-
- if (EXPECTED(ZSTR_LEN(ce->name) != sizeof("__PHP_Incomplete_Class") - 1) ||
- EXPECTED(memcmp(ZSTR_VAL(ce->name), "__PHP_Incomplete_Class", sizeof("__PHP_Incomplete_Class") - 1) != 0)) {
- result = 1;
- }
- } else if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) {
+ if (UNEXPECTED(Z_TYPE_P(value) == IS_RESOURCE)) {
const char *type_name = zend_rsrc_list_get_rsrc_type(Z_RES_P(value));
if (EXPECTED(type_name != NULL)) {
@@ -36150,13 +34493,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEN
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *varptr, *arg;
- varptr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ varptr = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
if (IS_CV == IS_CV) {
@@ -36168,7 +34511,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLE
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *varptr, *arg;
@@ -36184,7 +34527,7 @@ send_var_by_ref_simple:
ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- varptr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ varptr = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
if (IS_CV == IS_CV) {
@@ -36196,8 +34539,7 @@ send_var_by_ref_simple:
ZEND_VM_NEXT_OPCODE();
}
-
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *varptr, *arg;
@@ -36213,7 +34555,7 @@ send_var_by_ref_simple:
ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- varptr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ varptr = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
if (IS_CV == IS_CV) {
@@ -36225,14 +34567,13 @@ send_var_by_ref_simple:
ZEND_VM_NEXT_OPCODE();
}
-
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
@@ -36275,7 +34616,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CV_CONST_HANDLER(ZEND
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
@@ -36318,7 +34659,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CV_CONST_HANDLER(ZEND
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
@@ -36365,7 +34706,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND
zval *op1, *op2;
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
fast_div_function(EX_VAR(opline->result.var), op1, op2);
@@ -36379,7 +34720,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CV_CONST_HANDLER(ZEND
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
@@ -36387,6 +34728,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CV_CONST_HANDLER(ZEND
if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
SAVE_OPLINE();
zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
@@ -36417,7 +34759,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CV_CONST_HANDLER(ZEND_
zval *op1, *op2;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
@@ -36445,7 +34787,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CV_CONST_HANDLER(ZEND_
zval *op1, *op2;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
@@ -36474,7 +34816,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND
zval *op1, *op2;
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
pow_function(EX_VAR(opline->result.var), op1, op2);
@@ -36488,17 +34830,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CONST_HANDLER(Z
zval *op1, *op2;
- SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
- do {
- if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
- (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
- zend_string *op1_str = Z_STR_P(op1);
- zend_string *op2_str = Z_STR_P(op2);
- zend_string *str;
+ if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
+ (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
+ zend_string *op1_str = Z_STR_P(op1);
+ zend_string *op2_str = Z_STR_P(op2);
+ zend_string *str;
+ do {
if (IS_CV != IS_CONST) {
if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
@@ -36527,19 +34868,24 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CONST_HANDLER(Z
memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
}
- } else {
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
- op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
- }
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
- op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
- }
- concat_function(EX_VAR(opline->result.var), op1, op2);
+
+ } while (0);
+
+ ZEND_VM_NEXT_OPCODE();
+ } else {
+ SAVE_OPLINE();
+
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
+ concat_function(EX_VAR(opline->result.var), op1, op2);
- } while (0);
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ }
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -36550,7 +34896,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CONST_HAN
int result;
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
result = fast_is_identical_function(op1, op2);
@@ -36568,7 +34914,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST
int result;
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
result = fast_is_not_identical_function(op1, op2);
@@ -36584,7 +34930,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
do {
int result;
@@ -36652,7 +34998,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HAN
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
do {
int result;
@@ -36720,7 +35066,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CV_CONST_HANDL
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
do {
int result;
@@ -36770,7 +35116,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CO
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
do {
int result;
@@ -36821,7 +35167,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CONST_HANDLE
zval *op1, *op2;
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
compare_function(EX_VAR(opline->result.var), op1, op2);
@@ -36835,7 +35181,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CV_CONST_HANDLER(ZE
zval *op1, *op2;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
@@ -36862,7 +35208,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CV_CONST_HANDLER(Z
zval *op1, *op2;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
@@ -36889,7 +35235,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CV_CONST_HANDLER(Z
zval *op1, *op2;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
@@ -36917,7 +35263,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER
zval *op1, *op2;
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
@@ -36935,24 +35281,23 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
zval *zptr;
SAVE_OPLINE();
- object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
+ object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
property = EX_CONSTANT(opline->op2);
do {
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -36996,7 +35341,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
zval *value, *container, *dim;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_undef_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
assign_dim_op_array:
@@ -37012,9 +35357,9 @@ assign_dim_op_new_array:
dim = EX_CONSTANT(opline->op2);
if (IS_CONST == IS_CONST) {
- var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim);
+ var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
} else {
- var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim);
+ var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(!var_ptr)) {
goto assign_dim_op_ret_null;
@@ -37023,7 +35368,7 @@ assign_dim_op_new_array:
SEPARATE_ZVAL_NOREF(var_ptr);
}
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
binary_op(var_ptr, var_ptr, value);
@@ -37047,16 +35392,17 @@ assign_dim_op_convert_to_array:
dim = EX_CONSTANT(opline->op2);
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
- zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
+ zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op EXECUTE_DATA_CC);
} else {
if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
if (IS_CONST == IS_UNUSED) {
zend_throw_error(NULL, "[] operator not supported for strings");
} else {
- zend_check_string_offset(dim, BP_VAR_RW);
- zend_wrong_string_offset();
+ zend_check_string_offset(dim, BP_VAR_RW EXECUTE_DATA_CC);
+ zend_wrong_string_offset(EXECUTE_DATA_C);
}
+ UNDEF_RESULT();
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
goto assign_dim_op_convert_to_array;
} else {
@@ -37068,7 +35414,7 @@ assign_dim_op_ret_null:
ZVAL_NULL(EX_VAR(opline->result.var));
}
}
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
}
}
@@ -37077,7 +35423,7 @@ assign_dim_op_ret_null:
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper_SPEC_CV_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
USE_OPLINE
@@ -37086,7 +35432,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_C
SAVE_OPLINE();
value = EX_CONSTANT(opline->op2);
- var_ptr = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
+ var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -37107,688 +35453,244 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_C
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
-#if 0 || (IS_CONST != IS_UNUSED)
+#if 1 && IS_CONST == IS_UNUSED
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+#else
+# if 0 || IS_CV != IS_UNUSED
USE_OPLINE
-# if 0 || (IS_CV != IS_UNUSED)
if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
#endif
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
-#if 0 || (IS_CONST != IS_UNUSED)
+#if 1 && IS_CONST == IS_UNUSED
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+#else
+# if 0 || IS_CV != IS_UNUSED
USE_OPLINE
-# if 0 || (IS_CV != IS_UNUSED)
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
#endif
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
-#if 0 || (IS_CONST != IS_UNUSED)
+#if 1 && IS_CONST == IS_UNUSED
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+#else
+# if 0 || IS_CV != IS_UNUSED
USE_OPLINE
-# if 0 || (IS_CV != IS_UNUSED)
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
#endif
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+}
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+}
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+}
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CONST != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_CV_CONST(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -37800,12 +35702,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
zval *zptr;
SAVE_OPLINE();
- object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
+ object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
property = EX_CONSTANT(opline->op2);
@@ -37814,7 +35714,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -37878,12 +35780,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
zval *zptr;
SAVE_OPLINE();
- object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
+ object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
property = EX_CONSTANT(opline->op2);
@@ -37892,7 +35792,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
ZVAL_NULL(EX_VAR(opline->result.var));
break;
}
@@ -37948,104 +35850,23 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_
zval *varname;
zval *retval;
- zend_string *name;
- zend_class_entry *ce;
SAVE_OPLINE();
- varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
-
- if (IS_CV == IS_CONST) {
- name = Z_STR_P(varname);
- } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
- name = Z_STR_P(varname);
- zend_string_addref(name);
- } else {
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
- GET_OP1_UNDEF_CV(varname, BP_VAR_R);
- }
- name = zval_get_string(varname);
- }
-
- if (IS_CONST == IS_CONST) {
- if (IS_CV == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
- retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
-
- /* check if static properties were destoyed */
- if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
-
- HANDLE_EXCEPTION();
- }
- }
+ varname = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
- goto fetch_static_prop_return;
- } else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
- ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
- if (UNEXPECTED(ce == NULL)) {
- ZEND_ASSERT(EG(exception));
- if (IS_CV != IS_CONST) {
- zend_string_release(name);
- }
-
- HANDLE_EXCEPTION();
- }
- CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
- }
- } else {
- if (IS_CONST == IS_UNUSED) {
- ce = zend_fetch_class(NULL, opline->op2.num);
- if (UNEXPECTED(ce == NULL)) {
- ZEND_ASSERT(EG(exception));
- if (IS_CV != IS_CONST) {
- zend_string_release(name);
- }
+ retval = zend_fetch_static_property_address(varname, IS_CV, opline->op2, IS_CONST, type EXECUTE_DATA_CC);
- HANDLE_EXCEPTION();
- }
- } else {
- ce = Z_CE_P(EX_VAR(opline->op2.var));
- }
- if (IS_CV == IS_CONST &&
- (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
-
- /* check if static properties were destoyed */
- if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
-
- HANDLE_EXCEPTION();
- }
- }
-
- goto fetch_static_prop_return;
- }
- }
- retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
if (UNEXPECTED(retval == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- ZEND_ASSERT(EG(exception));
- if (IS_CV != IS_CONST) {
- zend_string_release(name);
- }
+ if (EG(exception)) {
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
+ } else {
+ ZEND_ASSERT(type == BP_VAR_IS);
+ retval = &EG(uninitialized_zval);
}
- } else if (IS_CV == IS_CONST) {
- CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
}
- if (IS_CV != IS_CONST) {
- zend_string_release(name);
- }
-
-fetch_static_prop_return:
if (type == BP_VAR_R || type == BP_VAR_IS) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
} else {
@@ -38097,12 +35918,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CONST_HAND
zval *container, *dim, *value, *result;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
dim = EX_CONSTANT(opline->op2);
if (IS_CV != IS_CONST) {
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_array:
- value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R);
+ value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
result = EX_VAR(opline->result.var);
ZVAL_COPY_UNREF(result, value);
} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
@@ -38115,11 +35936,11 @@ fetch_dim_r_array:
} else {
fetch_dim_r_slow:
result = EX_VAR(opline->result.var);
- zend_fetch_dimension_address_read_R_slow(result, container, dim);
+ zend_fetch_dimension_address_read_R_slow(result, container, dim EXECUTE_DATA_CC);
}
} else {
result = EX_VAR(opline->result.var);
- zend_fetch_dimension_address_read_R(result, container, dim, IS_CONST);
+ zend_fetch_dimension_address_read_R(result, container, dim, IS_CONST EXECUTE_DATA_CC);
}
@@ -38133,9 +35954,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CONST_HAND
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
- zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
+ zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST EXECUTE_DATA_CC);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
@@ -38151,9 +35972,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HAN
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_undef_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
- zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
+ zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST EXECUTE_DATA_CC);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
@@ -38169,8 +35990,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HAN
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
+ container = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST EXECUTE_DATA_CC);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -38189,10 +36010,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CON
zend_throw_error(NULL, "Cannot use temporary expression in write context");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
- container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
- zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
+ container = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST EXECUTE_DATA_CC);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
}
@@ -38203,10 +36025,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CON
zend_throw_error(NULL, "Cannot use [] for reading");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
- container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
+ container = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST EXECUTE_DATA_CC);
}
@@ -38220,9 +36043,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef_BP_VAR_UNSET(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_undef_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC);
- zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
+ zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST EXECUTE_DATA_CC);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
@@ -38240,12 +36063,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HAND
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
offset = EX_CONSTANT(opline->op2);
@@ -38273,7 +36094,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HAND
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
retval = OBJ_PROP(zobj, prop_offset);
- if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
+ if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
break;
}
@@ -38287,8 +36108,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HAND
}
if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
+ zend_string *property_name;
fetch_obj_r_no_object:
- zend_error(E_NOTICE, "Trying to get property of non-object");
+ property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
ZVAL_NULL(EX_VAR(opline->result.var));
} else {
retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
@@ -38311,15 +36135,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HAND
zval *container;
SAVE_OPLINE();
- property = EX_CONSTANT(opline->op2);
- container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
+ property = EX_CONSTANT(opline->op2);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -38337,14 +36159,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HAN
zval *container;
SAVE_OPLINE();
- property = EX_CONSTANT(opline->op2);
- container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
+ property = EX_CONSTANT(opline->op2);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -38363,12 +36183,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HAN
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
offset = EX_CONSTANT(opline->op2);
@@ -38437,20 +36255,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CON
zval *property;
SAVE_OPLINE();
- property = EX_CONSTANT(opline->op2);
- container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
zend_throw_error(NULL, "Cannot use temporary expression in write context");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
+ property = EX_CONSTANT(opline->op2);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -38470,12 +36287,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_
zval *container, *property;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
property = EX_CONSTANT(opline->op2);
@@ -38496,8 +36311,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_SPEC_CV_CONST_HANDL
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2));
+ container = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2) EXECUTE_DATA_CC);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -38506,19 +36321,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
{
USE_OPLINE
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = EX_CONSTANT(opline->op2);
+ property = EX_CONSTANT(opline->op2);
value = EX_CONSTANT((opline+1)->op1);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -38550,7 +36362,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
Z_DELREF_P(object);
} else {
if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -38562,16 +36376,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
}
if (IS_CONST == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_CONST);
+ value = zend_assign_to_variable(property_val, value, IS_CONST);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -38585,8 +36399,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -38624,7 +36438,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -38634,7 +36448,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -38646,9 +36462,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -38663,20 +36479,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
{
USE_OPLINE
zend_free_op free_op_data;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = EX_CONSTANT(opline->op2);
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
+ property = EX_CONSTANT(opline->op2);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
do {
@@ -38707,7 +36520,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
Z_DELREF_P(object);
} else {
if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -38719,16 +36534,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
}
if (IS_CONST == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_TMP_VAR);
+ value = zend_assign_to_variable(property_val, value, IS_TMP_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -38742,8 +36557,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -38781,7 +36596,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -38791,7 +36606,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -38803,9 +36620,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
zval_ptr_dtor_nogc(free_op_data);
@@ -38820,20 +36637,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
{
USE_OPLINE
zend_free_op free_op_data;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = EX_CONSTANT(opline->op2);
- value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
+ property = EX_CONSTANT(opline->op2);
+ value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
do {
@@ -38864,7 +36678,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
Z_DELREF_P(object);
} else {
if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -38876,16 +36692,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
}
if (IS_CONST == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_VAR);
+ value = zend_assign_to_variable(property_val, value, IS_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -38899,8 +36715,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -38938,7 +36754,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -38948,7 +36764,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -38960,9 +36778,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
zval_ptr_dtor_nogc(free_op_data);
@@ -38977,20 +36795,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
{
USE_OPLINE
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = EX_CONSTANT(opline->op2);
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
+ property = EX_CONSTANT(opline->op2);
+ value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
do {
@@ -39021,7 +36836,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
Z_DELREF_P(object);
} else {
if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -39033,16 +36850,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DA
}
if (IS_CONST == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_CV);
+ value = zend_assign_to_variable(property_val, value, IS_CV);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -39056,8 +36873,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -39095,7 +36912,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -39105,7 +36922,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -39117,9 +36936,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -39141,7 +36960,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -39155,9 +36974,9 @@ try_assign_dim_array:
} else {
dim = EX_CONSTANT(opline->op2);
if (IS_CONST == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
@@ -39181,7 +37000,7 @@ try_assign_dim_array:
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -39190,11 +37009,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
dim = EX_CONSTANT(opline->op2);
value = EX_CONSTANT((opline+1)->op1);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -39232,7 +37052,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -39246,15 +37066,15 @@ try_assign_dim_array:
} else {
dim = EX_CONSTANT(opline->op2);
if (IS_CONST == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
}
}
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
@@ -39268,11 +37088,11 @@ try_assign_dim_array:
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
dim = EX_CONSTANT(opline->op2);
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -39282,11 +37102,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
dim = EX_CONSTANT(opline->op2);
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op_data);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -39324,7 +37145,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -39338,15 +37159,15 @@ try_assign_dim_array:
} else {
dim = EX_CONSTANT(opline->op2);
if (IS_CONST == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
}
}
- value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
+ value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
@@ -39360,11 +37181,11 @@ try_assign_dim_array:
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
dim = EX_CONSTANT(opline->op2);
- value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
+ value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -39374,11 +37195,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
dim = EX_CONSTANT(opline->op2);
- value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op_data);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -39416,7 +37238,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DA
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -39430,15 +37252,15 @@ try_assign_dim_array:
} else {
dim = EX_CONSTANT(opline->op2);
if (IS_CONST == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
}
}
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
+ value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
value = zend_assign_to_variable(variable_ptr, value, IS_CV);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
@@ -39452,11 +37274,11 @@ try_assign_dim_array:
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
dim = EX_CONSTANT(opline->op2);
- value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
+ value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -39465,11 +37287,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
dim = EX_CONSTANT(opline->op2);
- value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -39505,7 +37328,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UN
SAVE_OPLINE();
value = EX_CONSTANT(opline->op2);
- variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
@@ -39533,7 +37356,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_US
SAVE_OPLINE();
value = EX_CONSTANT(opline->op2);
- variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
@@ -39559,8 +37382,51 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CONST_HAND
zval *op1, *op2;
zend_string *op1_str, *op2_str, *str;
+
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = EX_CONSTANT(opline->op2);
+ if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
+ (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
+ zend_string *op1_str = Z_STR_P(op1);
+ zend_string *op2_str = Z_STR_P(op2);
+ zend_string *str;
+
+ do {
+ if (IS_CV != IS_CONST) {
+ if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
+
+ break;
+ }
+ }
+ if (IS_CONST != IS_CONST) {
+ if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
+
+ break;
+ }
+ }
+ if (IS_CV != IS_CONST && IS_CV != IS_CV &&
+ !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
+ size_t len = ZSTR_LEN(op1_str);
+
+ str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
+ memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
+ ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
+ break;
+ } else {
+ str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
+ memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
+ memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
+ ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
+ }
+
+ } while (0);
+
+ ZEND_VM_NEXT_OPCODE();
+ }
+
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
if (IS_CV == IS_CONST) {
op1_str = Z_STR_P(op1);
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
@@ -39571,7 +37437,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CONST_HAND
}
op1_str = _zval_get_string_func(op1);
}
- op2 = EX_CONSTANT(opline->op2);
if (IS_CONST == IS_CONST) {
op2_str = Z_STR_P(op2);
} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
@@ -39633,6 +37498,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CONST
SAVE_OPLINE();
+ object = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+
+ if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ }
+
function_name = EX_CONSTANT(opline->op2);
if (IS_CONST != IS_CONST &&
@@ -39646,6 +37517,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CONST
} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
if (UNEXPECTED(EG(exception) != NULL)) {
+
HANDLE_EXCEPTION();
}
}
@@ -39656,14 +37528,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CONST
} while (0);
}
- object = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
-
- if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
- }
-
if (IS_CV != IS_UNUSED) {
do {
if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -39691,8 +37555,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CONST
obj = Z_OBJ_P(object);
called_scope = obj->ce;
- if (IS_CONST != IS_CONST ||
- UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
+ if (IS_CONST == IS_CONST &&
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(function_name)) == called_scope)) {
+ fbc = CACHED_PTR(Z_CACHE_SLOT_P(function_name) + sizeof(void*));
+ } else {
zend_object *orig_obj = obj;
if (UNEXPECTED(obj->handlers->get_method == NULL)) {
@@ -39751,7 +37617,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CV_CONST_HANDLER(ZEN
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
do {
int result;
@@ -39820,12 +37686,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONS
SAVE_OPLINE();
if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
- expr_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
+ expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
ZVAL_MAKE_REF(expr_ptr);
Z_ADDREF_P(expr_ptr);
} else {
- expr_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_TMP_VAR) {
/* pass */
} else if (IS_CV == IS_CONST) {
@@ -39928,13 +37794,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDL
}
}
- if (IS_CV == IS_UNUSED) {
- ZEND_VM_NEXT_OPCODE();
-#if 0 || (IS_CV != IS_UNUSED)
- } else {
- ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-#endif
- }
+ ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -39946,7 +37806,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_CV_CONS
SAVE_OPLINE();
- varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ varname = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
ZVAL_UNDEF(&tmp);
if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
@@ -40003,7 +37863,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLE
zend_string *key;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef_BP_VAR_UNSET(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_undef_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC);
offset = EX_CONSTANT(opline->op2);
do {
@@ -40092,11 +37952,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLE
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
offset = EX_CONSTANT(opline->op2);
@@ -40114,7 +37972,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLE
if (Z_OBJ_HT_P(container)->unset_property) {
Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CONST == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
} else {
- zend_error(E_NOTICE, "Trying to unset property of non-object");
+ zend_string *property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to unset property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
} while (0);
@@ -40132,7 +37992,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC
zend_class_entry *ce;
SAVE_OPLINE();
- varname = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
+ varname = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
ZVAL_UNDEF(&tmp);
if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
ZVAL_STR(&tmp, zval_get_string(varname));
@@ -40153,6 +38013,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
@@ -40166,13 +38027,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC
zend_string_release(Z_STR(tmp));
}
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else {
ce = Z_CE_P(EX_VAR(opline->op2.var));
}
if (IS_CV == IS_CONST &&
- (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))) == ce)) {
+
+ value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
@@ -40216,7 +38080,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
offset = EX_CONSTANT(opline->op2);
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
@@ -40347,12 +38211,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
offset = EX_CONSTANT(opline->op2);
@@ -40369,7 +38231,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV
}
}
if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
- zend_error(E_NOTICE, "Trying to check property of non-object");
+ zend_string *property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to check property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
isset_no_object:
result = ((opline->extended_value & ZEND_ISSET) == 0);
} else {
@@ -40392,7 +38256,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_CONST_HANDL
zend_bool result;
SAVE_OPLINE();
- expr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ expr = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
try_instanceof:
if (Z_TYPE_P(expr) == IS_OBJECT) {
@@ -40411,6 +38275,7 @@ try_instanceof:
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else {
@@ -40436,13 +38301,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZE
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -40464,7 +38330,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZE
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
ZVAL_COPY_VALUE(&generator->value, value);
if (IS_CV == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
@@ -40472,7 +38338,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZE
}
}
} else {
- zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
+ zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
/* If a function call result is yielded and the function did
* not return by reference we throw a notice. */
@@ -40488,7 +38354,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZE
}
} else {
- zval *value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_CV == IS_CONST) {
@@ -40567,7 +38433,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZE
ZEND_VM_RETURN();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -40630,21 +38496,22 @@ check_indirect:
GC_REFCOUNT(ref)++;
}
- variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) {
- uint32_t refcnt = Z_DELREF_P(variable_ptr);
+ zend_refcounted *ref = Z_COUNTED_P(variable_ptr);
+ uint32_t refcnt = --GC_REFCOUNT(ref);
if (EXPECTED(variable_ptr != value)) {
if (refcnt == 0) {
SAVE_OPLINE();
- zval_dtor_func(Z_COUNTED_P(variable_ptr));
+ zval_dtor_func(ref);
if (UNEXPECTED(EG(exception))) {
ZVAL_NULL(variable_ptr);
HANDLE_EXCEPTION();
}
} else {
- GC_ZVAL_CHECK_POSSIBLE_ROOT(variable_ptr);
+ gc_check_possible_root(ref);
}
}
}
@@ -40663,8 +38530,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_STATIC_SPEC_CV_CONST_HAND
zval *value;
zval *variable_ptr;
- SAVE_OPLINE();
- variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
zval_ptr_dtor(variable_ptr);
ht = EX(func)->op_array.static_variables;
@@ -40681,6 +38547,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_STATIC_SPEC_CV_CONST_HAND
if (opline->extended_value) {
if (Z_CONSTANT_P(value)) {
+ SAVE_OPLINE();
if (UNEXPECTED(zval_update_constant_ex(value, EX(func)->op_array.scope) != SUCCESS)) {
ZVAL_NULL(variable_ptr);
HANDLE_EXCEPTION();
@@ -40702,17 +38569,115 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_STATIC_SPEC_CV_CONST_HAND
ZVAL_COPY(variable_ptr, value);
}
+ ZEND_VM_NEXT_OPCODE();
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_LONG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+
+ zval *op, *jump_zv;
+ HashTable *jumptable;
+
+ op = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ jumptable = Z_ARRVAL_P(EX_CONSTANT(opline->op2));
+
+ if (Z_TYPE_P(op) != IS_LONG) {
+ ZVAL_DEREF(op);
+ if (Z_TYPE_P(op) != IS_LONG) {
+ /* Wrong type, fall back to ZEND_CASE chain */
+ ZEND_VM_NEXT_OPCODE();
+ }
+ }
+
+ jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
+ if (jump_zv != NULL) {
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
+ ZEND_VM_CONTINUE();
+ } else {
+ /* default */
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
+ ZEND_VM_CONTINUE();
+ }
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_STRING_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+
+ zval *op, *jump_zv;
+ HashTable *jumptable;
+
+ op = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ jumptable = Z_ARRVAL_P(EX_CONSTANT(opline->op2));
+
+ if (Z_TYPE_P(op) != IS_STRING) {
+ ZVAL_DEREF(op);
+ if (Z_TYPE_P(op) != IS_STRING) {
+ /* Wrong type, fall back to ZEND_CASE chain */
+ ZEND_VM_NEXT_OPCODE();
+ }
+ }
+
+ jump_zv = zend_hash_find(jumptable, Z_STR_P(op));
+ if (jump_zv != NULL) {
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
+ ZEND_VM_CONTINUE();
+ } else {
+ /* default */
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
+ ZEND_VM_CONTINUE();
+ }
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+
+ zval *op1;
+ HashTable *ht = Z_ARRVAL_P(EX_CONSTANT(opline->op2));
+ int result;
+
+ SAVE_OPLINE();
+ op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
+ if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
+ result = zend_hash_exists(ht, Z_STR_P(op1));
+ } else if (opline->extended_value) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ result = zend_hash_index_exists(ht, Z_LVAL_P(op1));
+ } else {
+ result = 0;
+ }
+ } else if (Z_TYPE_P(op1) <= IS_FALSE) {
+ result = zend_hash_exists(ht, ZSTR_EMPTY_ALLOC());
+ } else {
+ zend_string *key;
+ zval key_tmp, result_tmp;
+
+ result = 0;
+ ZEND_HASH_FOREACH_STR_KEY(ht, key) {
+ ZVAL_STR(&key_tmp, key);
+ compare_function(&result_tmp, op1, &key_tmp);
+ if (Z_LVAL(result_tmp) == 0) {
+ result = 1;
+ break;
+ }
+ } ZEND_HASH_FOREACH_END();
+ }
+
+ ZEND_VM_SMART_BRANCH(result, 1);
+ ZVAL_BOOL(EX_VAR(opline->result.var), result);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *container, *dim, *value;
zend_long offset;
- container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
dim = EX_CONSTANT(opline->op2);
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_index_array:
@@ -40740,7 +38705,7 @@ fetch_dim_r_index_array:
} else {
fetch_dim_r_index_slow:
SAVE_OPLINE();
- zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim);
+ zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim EXECUTE_DATA_CC);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -40761,8 +38726,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDL
int result;
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
result = fast_is_identical_function(op1, op2);
zval_ptr_dtor_nogc(free_op2);
@@ -40779,8 +38744,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_H
int result;
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
result = fast_is_not_identical_function(op1, op2);
zval_ptr_dtor_nogc(free_op2);
@@ -40797,8 +38762,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUS
zval *variable_ptr;
SAVE_OPLINE();
- value = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
- variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ value = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
zval_ptr_dtor_nogc(free_op2);
@@ -40825,8 +38790,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED
zval *variable_ptr;
SAVE_OPLINE();
- value = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
- variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ value = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
zval_ptr_dtor_nogc(free_op2);
@@ -40849,13 +38814,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_TMP_HANDLER(ZEND
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -40877,7 +38843,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_TMP_HANDLER(ZEND
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
ZVAL_COPY_VALUE(&generator->value, value);
if (IS_CV == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
@@ -40885,7 +38851,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_TMP_HANDLER(ZEND
}
}
} else {
- zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
+ zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
/* If a function call result is yielded and the function did
* not return by reference we throw a notice. */
@@ -40901,7 +38867,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_TMP_HANDLER(ZEND
}
} else {
- zval *value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_CV == IS_CONST) {
@@ -40929,7 +38895,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_TMP_HANDLER(ZEND
/* Set the new yielded key */
if (IS_TMP_VAR != IS_UNUSED) {
zend_free_op free_op2;
- zval *key = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2);
+ zval *key = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_TMP_VAR == IS_CONST) {
@@ -40988,8 +38954,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDL
int result;
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var_deref(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
result = fast_is_identical_function(op1, op2);
zval_ptr_dtor_nogc(free_op2);
@@ -41006,8 +38972,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_H
int result;
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var_deref(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
result = fast_is_not_identical_function(op1, op2);
zval_ptr_dtor_nogc(free_op2);
@@ -41022,104 +38988,23 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_
zval *varname;
zval *retval;
- zend_string *name;
- zend_class_entry *ce;
SAVE_OPLINE();
- varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
-
- if (IS_CV == IS_CONST) {
- name = Z_STR_P(varname);
- } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
- name = Z_STR_P(varname);
- zend_string_addref(name);
- } else {
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
- GET_OP1_UNDEF_CV(varname, BP_VAR_R);
- }
- name = zval_get_string(varname);
- }
+ varname = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
- if (IS_VAR == IS_CONST) {
- if (IS_CV == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
- retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
+ retval = zend_fetch_static_property_address(varname, IS_CV, opline->op2, IS_VAR, type EXECUTE_DATA_CC);
- /* check if static properties were destoyed */
- if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
-
- HANDLE_EXCEPTION();
- }
- }
-
- goto fetch_static_prop_return;
- } else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
- ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
- if (UNEXPECTED(ce == NULL)) {
- ZEND_ASSERT(EG(exception));
- if (IS_CV != IS_CONST) {
- zend_string_release(name);
- }
-
- HANDLE_EXCEPTION();
- }
- CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
- }
- } else {
- if (IS_VAR == IS_UNUSED) {
- ce = zend_fetch_class(NULL, opline->op2.num);
- if (UNEXPECTED(ce == NULL)) {
- ZEND_ASSERT(EG(exception));
- if (IS_CV != IS_CONST) {
- zend_string_release(name);
- }
-
- HANDLE_EXCEPTION();
- }
- } else {
- ce = Z_CE_P(EX_VAR(opline->op2.var));
- }
- if (IS_CV == IS_CONST &&
- (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
-
- /* check if static properties were destoyed */
- if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
-
- HANDLE_EXCEPTION();
- }
- }
-
- goto fetch_static_prop_return;
- }
- }
- retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
if (UNEXPECTED(retval == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- ZEND_ASSERT(EG(exception));
- if (IS_CV != IS_CONST) {
- zend_string_release(name);
- }
+ if (EG(exception)) {
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
+ } else {
+ ZEND_ASSERT(type == BP_VAR_IS);
+ retval = &EG(uninitialized_zval);
}
- } else if (IS_CV == IS_CONST) {
- CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
}
- if (IS_CV != IS_CONST) {
- zend_string_release(name);
- }
-
-fetch_static_prop_return:
if (type == BP_VAR_R || type == BP_VAR_IS) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
} else {
@@ -41172,8 +39057,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUS
zval *variable_ptr;
SAVE_OPLINE();
- value = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ value = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
zval_ptr_dtor_nogc(free_op2);
@@ -41200,8 +39085,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED
zval *variable_ptr;
SAVE_OPLINE();
- value = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ value = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
zval_ptr_dtor_nogc(free_op2);
@@ -41228,8 +39113,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER
zval *value_ptr;
SAVE_OPLINE();
- value_ptr = _get_zval_ptr_ptr_var(opline->op2.var, execute_data, &free_op2);
- variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ value_ptr = _get_zval_ptr_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_VAR &&
UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT) &&
@@ -41239,6 +39124,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER
zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else if (IS_VAR == IS_VAR &&
@@ -41247,6 +39133,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER
zend_error(E_NOTICE, "Only variables should be assigned by reference");
if (UNEXPECTED(EG(exception) != NULL)) {
if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);};
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -41284,7 +39171,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_CV_VAR_
SAVE_OPLINE();
- varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ varname = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
ZVAL_UNDEF(&tmp);
if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
@@ -41341,7 +39228,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC
zend_class_entry *ce;
SAVE_OPLINE();
- varname = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
+ varname = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
ZVAL_UNDEF(&tmp);
if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
ZVAL_STR(&tmp, zval_get_string(varname));
@@ -41362,6 +39249,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
@@ -41375,13 +39263,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC
zend_string_release(Z_STR(tmp));
}
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else {
ce = Z_CE_P(EX_VAR(opline->op2.var));
}
if (IS_CV == IS_CONST &&
- (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))) == ce)) {
+
+ value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
@@ -41423,7 +39314,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER
zend_bool result;
SAVE_OPLINE();
- expr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ expr = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
try_instanceof:
if (Z_TYPE_P(expr) == IS_OBJECT) {
@@ -41442,6 +39333,7 @@ try_instanceof:
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else {
@@ -41467,13 +39359,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_VAR_HANDLER(ZEND
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -41495,7 +39388,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_VAR_HANDLER(ZEND
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
ZVAL_COPY_VALUE(&generator->value, value);
if (IS_CV == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
@@ -41503,7 +39396,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_VAR_HANDLER(ZEND
}
}
} else {
- zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
+ zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
/* If a function call result is yielded and the function did
* not return by reference we throw a notice. */
@@ -41519,7 +39412,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_VAR_HANDLER(ZEND
}
} else {
- zval *value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_CV == IS_CONST) {
@@ -41547,7 +39440,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_VAR_HANDLER(ZEND
/* Set the new yielded key */
if (IS_VAR != IS_UNUSED) {
zend_free_op free_op2;
- zval *key = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ zval *key = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_VAR == IS_CONST) {
@@ -41606,7 +39499,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
zval *value, *container, *dim;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_undef_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
assign_dim_op_array:
@@ -41622,9 +39515,9 @@ assign_dim_op_new_array:
dim = NULL;
if (IS_UNUSED == IS_CONST) {
- var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim);
+ var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
} else {
- var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim);
+ var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(!var_ptr)) {
goto assign_dim_op_ret_null;
@@ -41633,7 +39526,7 @@ assign_dim_op_new_array:
SEPARATE_ZVAL_NOREF(var_ptr);
}
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
binary_op(var_ptr, var_ptr, value);
@@ -41657,16 +39550,17 @@ assign_dim_op_convert_to_array:
dim = NULL;
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
- zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
+ zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op EXECUTE_DATA_CC);
} else {
if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
if (IS_UNUSED == IS_UNUSED) {
zend_throw_error(NULL, "[] operator not supported for strings");
} else {
- zend_check_string_offset(dim, BP_VAR_RW);
- zend_wrong_string_offset();
+ zend_check_string_offset(dim, BP_VAR_RW EXECUTE_DATA_CC);
+ zend_wrong_string_offset(EXECUTE_DATA_C);
}
+ UNDEF_RESULT();
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
goto assign_dim_op_convert_to_array;
} else {
@@ -41678,7 +39572,7 @@ assign_dim_op_ret_null:
ZVAL_NULL(EX_VAR(opline->result.var));
}
}
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
}
}
@@ -41687,232 +39581,84 @@ assign_dim_op_ret_null:
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
-#if 0 || (IS_UNUSED != IS_UNUSED)
+#if 1 && IS_UNUSED == IS_UNUSED
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+#else
+# if 0 || IS_CV != IS_UNUSED
USE_OPLINE
-# if 0 || (IS_CV != IS_UNUSED)
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_UNUSED(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
#endif
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_UNUSED != IS_UNUSED)
- USE_OPLINE
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+}
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_UNUSED != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_UNUSED != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_UNUSED != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_UNUSED != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_UNUSED != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_UNUSED != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_UNUSED != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_UNUSED != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_UNUSED != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_UNUSED != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -41925,7 +39671,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_
HashTable *target_symbol_table;
SAVE_OPLINE();
- varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ varname = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_CONST) {
name = Z_STR_P(varname);
@@ -41939,10 +39685,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_
name = zval_get_string(varname);
}
- target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
+ target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK EXECUTE_DATA_CC);
retval = zend_hash_find(target_symbol_table, name);
if (retval == NULL) {
- if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) {
+ if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
zval *result;
fetch_this:
@@ -41967,9 +39713,11 @@ fetch_this:
break;
case BP_VAR_RW:
case BP_VAR_W:
+ ZVAL_UNDEF(result);
zend_throw_error(NULL, "Cannot re-assign $this");
break;
case BP_VAR_UNSET:
+ ZVAL_UNDEF(result);
zend_throw_error(NULL, "Cannot unset $this");
break;
EMPTY_SWITCH_DEFAULT_CASE()
@@ -42000,7 +39748,7 @@ fetch_this:
} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
retval = Z_INDIRECT_P(retval);
if (Z_TYPE_P(retval) == IS_UNDEF) {
- if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) {
+ if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
goto fetch_this;
}
switch (type) {
@@ -42081,104 +39829,23 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_
zval *varname;
zval *retval;
- zend_string *name;
- zend_class_entry *ce;
SAVE_OPLINE();
- varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
-
- if (IS_CV == IS_CONST) {
- name = Z_STR_P(varname);
- } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
- name = Z_STR_P(varname);
- zend_string_addref(name);
- } else {
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
- GET_OP1_UNDEF_CV(varname, BP_VAR_R);
- }
- name = zval_get_string(varname);
- }
+ varname = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
- if (IS_UNUSED == IS_CONST) {
- if (IS_CV == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
- retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
+ retval = zend_fetch_static_property_address(varname, IS_CV, opline->op2, IS_UNUSED, type EXECUTE_DATA_CC);
- /* check if static properties were destoyed */
- if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
-
- HANDLE_EXCEPTION();
- }
- }
-
- goto fetch_static_prop_return;
- } else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
- ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
- if (UNEXPECTED(ce == NULL)) {
- ZEND_ASSERT(EG(exception));
- if (IS_CV != IS_CONST) {
- zend_string_release(name);
- }
-
- HANDLE_EXCEPTION();
- }
- CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
- }
- } else {
- if (IS_UNUSED == IS_UNUSED) {
- ce = zend_fetch_class(NULL, opline->op2.num);
- if (UNEXPECTED(ce == NULL)) {
- ZEND_ASSERT(EG(exception));
- if (IS_CV != IS_CONST) {
- zend_string_release(name);
- }
-
- HANDLE_EXCEPTION();
- }
- } else {
- ce = Z_CE_P(EX_VAR(opline->op2.var));
- }
- if (IS_CV == IS_CONST &&
- (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
-
- /* check if static properties were destoyed */
- if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
-
- HANDLE_EXCEPTION();
- }
- }
-
- goto fetch_static_prop_return;
- }
- }
- retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
if (UNEXPECTED(retval == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- ZEND_ASSERT(EG(exception));
- if (IS_CV != IS_CONST) {
- zend_string_release(name);
- }
+ if (EG(exception)) {
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
+ } else {
+ ZEND_ASSERT(type == BP_VAR_IS);
+ retval = &EG(uninitialized_zval);
}
- } else if (IS_CV == IS_CONST) {
- CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
}
- if (IS_CV != IS_CONST) {
- zend_string_release(name);
- }
-
-fetch_static_prop_return:
if (type == BP_VAR_R || type == BP_VAR_IS) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
} else {
@@ -42230,9 +39897,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HAN
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
- zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
+ zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED EXECUTE_DATA_CC);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
@@ -42248,9 +39915,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HA
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_undef_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
- zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
+ zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, NULL, IS_UNUSED EXECUTE_DATA_CC);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
@@ -42272,10 +39939,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNU
zend_throw_error(NULL, "Cannot use temporary expression in write context");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
- container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
- zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
+ container = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, NULL, IS_UNUSED EXECUTE_DATA_CC);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
}
@@ -42286,10 +39954,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNU
zend_throw_error(NULL, "Cannot use [] for reading");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
- container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, NULL, IS_UNUSED);
+ container = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, NULL, IS_UNUSED EXECUTE_DATA_CC);
}
@@ -42307,7 +39976,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -42321,9 +39990,9 @@ try_assign_dim_array:
} else {
dim = NULL;
if (IS_UNUSED == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
@@ -42347,7 +40016,7 @@ try_assign_dim_array:
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -42356,11 +40025,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
dim = NULL;
value = EX_CONSTANT((opline+1)->op1);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -42398,7 +40068,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -42412,15 +40082,15 @@ try_assign_dim_array:
} else {
dim = NULL;
if (IS_UNUSED == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
}
}
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
@@ -42434,11 +40104,11 @@ try_assign_dim_array:
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
dim = NULL;
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -42448,11 +40118,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
dim = NULL;
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op_data);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -42490,7 +40161,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -42504,15 +40175,15 @@ try_assign_dim_array:
} else {
dim = NULL;
if (IS_UNUSED == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
}
}
- value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
+ value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
@@ -42526,11 +40197,11 @@ try_assign_dim_array:
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
dim = NULL;
- value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
+ value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -42540,11 +40211,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
dim = NULL;
- value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op_data);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -42582,7 +40254,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_D
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -42596,15 +40268,15 @@ try_assign_dim_array:
} else {
dim = NULL;
if (IS_UNUSED == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
}
}
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
+ value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
value = zend_assign_to_variable(variable_ptr, value, IS_CV);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
@@ -42618,11 +40290,11 @@ try_assign_dim_array:
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
dim = NULL;
- value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
+ value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -42631,11 +40303,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
dim = NULL;
- value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -42676,7 +40349,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNU
zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
- retval_ref = retval_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ retval_ref = retval_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_CONST) {
ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
@@ -42690,10 +40363,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNU
ZVAL_DEREF(retval_ptr);
}
- if (UNEXPECTED(!ret_info->class_name
- && ret_info->type_hint != IS_CALLABLE
- && ret_info->type_hint != IS_ITERABLE
- && !ZEND_SAME_FAKE_TYPE(ret_info->type_hint, Z_TYPE_P(retval_ptr))
+ if (UNEXPECTED(!ZEND_TYPE_IS_CLASS(ret_info->type)
+ && ZEND_TYPE_CODE(ret_info->type) != IS_CALLABLE
+ && ZEND_TYPE_CODE(ret_info->type) != IS_ITERABLE
+ && !ZEND_SAME_FAKE_TYPE(ZEND_TYPE_CODE(ret_info->type), Z_TYPE_P(retval_ptr))
&& !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)
&& retval_ref != retval_ptr)
) {
@@ -42707,12 +40380,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNU
retval_ptr = retval_ref;
}
zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num));
-
- if (UNEXPECTED(EG(exception) != NULL)) {
- if (IS_CV == IS_CONST) {
- zval_ptr_dtor_nogc(retval_ptr);
- }
- }
#endif
}
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -42727,12 +40394,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUS
SAVE_OPLINE();
if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
- expr_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
+ expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
ZVAL_MAKE_REF(expr_ptr);
Z_ADDREF_P(expr_ptr);
} else {
- expr_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_TMP_VAR) {
/* pass */
} else if (IS_CV == IS_CONST) {
@@ -42835,13 +40502,29 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HAND
}
}
- if (IS_CV == IS_UNUSED) {
- ZEND_VM_NEXT_OPCODE();
-#if 0 || (IS_CV != IS_UNUSED)
+ ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *var = EX_VAR(opline->op1.var);
+
+ if (Z_REFCOUNTED_P(var)) {
+ zend_refcounted *garbage = Z_COUNTED_P(var);
+
+ ZVAL_UNDEF(var);
+ SAVE_OPLINE();
+ if (!--GC_REFCOUNT(garbage)) {
+ zval_dtor_func(garbage);
+ } else {
+ gc_check_possible_root(garbage);
+ }
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
} else {
- ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-#endif
+ ZVAL_UNDEF(var);
}
+ ZEND_VM_NEXT_OPCODE();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -42852,33 +40535,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDL
SAVE_OPLINE();
- if (IS_CV == IS_CV &&
- (opline->extended_value & ZEND_QUICK_SET)) {
- zval *var = EX_VAR(opline->op1.var);
- if (Z_REFCOUNTED_P(var)) {
- zend_refcounted *garbage = Z_COUNTED_P(var);
-
- if (!--GC_REFCOUNT(garbage)) {
- ZVAL_UNDEF(var);
- zval_dtor_func(garbage);
- } else {
- zval *z = var;
- ZVAL_DEREF(z);
- if (Z_COLLECTABLE_P(z) && UNEXPECTED(!Z_GC_INFO_P(z))) {
- ZVAL_UNDEF(var);
- gc_possible_root(Z_COUNTED_P(z));
- } else {
- ZVAL_UNDEF(var);
- }
- }
- } else {
- ZVAL_UNDEF(var);
- }
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
- }
-
- varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ varname = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
ZVAL_UNDEF(&tmp);
if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
@@ -42889,7 +40547,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDL
varname = &tmp;
}
- target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
+ target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK EXECUTE_DATA_CC);
zend_hash_del_ind(target_symbol_table, Z_STR_P(varname));
if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
@@ -42908,7 +40566,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_CV_UNUS
SAVE_OPLINE();
- varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ varname = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
ZVAL_UNDEF(&tmp);
if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
@@ -42955,61 +40613,65 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_CV_UNUS
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *value;
int result;
- if (IS_CV == IS_CV &&
- (opline->extended_value & ZEND_QUICK_SET)) {
- value = EX_VAR(opline->op1.var);
- if (opline->extended_value & ZEND_ISSET) {
- result =
- Z_TYPE_P(value) > IS_NULL &&
- (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
- } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
- SAVE_OPLINE();
- result = !i_zend_is_true(value);
- if (UNEXPECTED(EG(exception))) {
- HANDLE_EXCEPTION();
- }
+ value = EX_VAR(opline->op1.var);
+ if (opline->extended_value & ZEND_ISSET) {
+ result =
+ Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ SAVE_OPLINE();
+ result = !i_zend_is_true(value);
+ if (UNEXPECTED(EG(exception))) {
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
+ HANDLE_EXCEPTION();
}
- ZEND_VM_SMART_BRANCH(result, 0);
- ZVAL_BOOL(EX_VAR(opline->result.var), result);
- ZEND_VM_SET_NEXT_OPCODE(opline + 1);
- ZEND_VM_CONTINUE();
- } else {
+ }
+ ZEND_VM_SMART_BRANCH(result, 0);
+ ZVAL_BOOL(EX_VAR(opline->result.var), result);
+ ZEND_VM_SET_NEXT_OPCODE(opline + 1);
+ ZEND_VM_CONTINUE();
+}
- zval tmp, *varname;
- HashTable *target_symbol_table;
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *value;
+ int result;
- SAVE_OPLINE();
- varname = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
- ZVAL_UNDEF(&tmp);
- if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
- ZVAL_STR(&tmp, zval_get_string(varname));
- varname = &tmp;
- }
+ zval tmp, *varname;
+ HashTable *target_symbol_table;
- target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
- value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
+ SAVE_OPLINE();
+ varname = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
+ ZVAL_UNDEF(&tmp);
+ if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
+ ZVAL_STR(&tmp, zval_get_string(varname));
+ varname = &tmp;
+ }
- if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
- zend_string_release(Z_STR(tmp));
- }
+ target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK EXECUTE_DATA_CC);
+ value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
- if (opline->extended_value & ZEND_ISSET) {
- result = value && Z_TYPE_P(value) > IS_NULL &&
- (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
- } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
- result = !value || !i_zend_is_true(value);
- }
+ if (IS_CV != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
+ zend_string_release(Z_STR(tmp));
+ }
- ZEND_VM_SMART_BRANCH(result, 1);
- ZVAL_BOOL(EX_VAR(opline->result.var), result);
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ if (opline->extended_value & ZEND_ISSET) {
+ result = value && Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ result = !value || !i_zend_is_true(value);
}
+
+ ZEND_VM_SMART_BRANCH(result, 1);
+ ZVAL_BOOL(EX_VAR(opline->result.var), result);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -43022,7 +40684,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC
zend_class_entry *ce;
SAVE_OPLINE();
- varname = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
+ varname = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
ZVAL_UNDEF(&tmp);
if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
ZVAL_STR(&tmp, zval_get_string(varname));
@@ -43043,6 +40705,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
@@ -43056,13 +40719,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC
zend_string_release(Z_STR(tmp));
}
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else {
ce = Z_CE_P(EX_VAR(opline->op2.var));
}
if (IS_CV == IS_CONST &&
- (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))) == ce)) {
+
+ value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
@@ -43104,7 +40770,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_UNUSED_HAND
zend_bool result;
SAVE_OPLINE();
- expr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ expr = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
try_instanceof:
if (Z_TYPE_P(expr) == IS_OBJECT) {
@@ -43123,6 +40789,7 @@ try_instanceof:
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else {
@@ -43148,13 +40815,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(Z
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -43176,7 +40844,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(Z
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
ZVAL_COPY_VALUE(&generator->value, value);
if (IS_CV == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
@@ -43184,7 +40852,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(Z
}
}
} else {
- zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
+ zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
/* If a function call result is yielded and the function did
* not return by reference we throw a notice. */
@@ -43200,7 +40868,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(Z
}
} else {
- zval *value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_CV == IS_CONST) {
@@ -43320,14 +40988,110 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLE
ZEND_VM_NEXT_OPCODE();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+
+ zval *op1;
+ zend_long count;
+
+ SAVE_OPLINE();
+ op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
+ do {
+ if (Z_TYPE_P(op1) == IS_ARRAY) {
+ count = zend_array_count(Z_ARRVAL_P(op1));
+ break;
+ } else if (Z_TYPE_P(op1) == IS_OBJECT) {
+ /* first, we check if the handler is defined */
+ if (Z_OBJ_HT_P(op1)->count_elements) {
+ if (SUCCESS == Z_OBJ_HT_P(op1)->count_elements(op1, &count)) {
+ break;
+ }
+ }
+
+ /* if not and the object implements Countable we call its count() method */
+ if (instanceof_function(Z_OBJCE_P(op1), zend_ce_countable)) {
+ zval retval;
+
+ zend_call_method_with_0_params(op1, NULL, NULL, "count", &retval);
+ count = zval_get_long(&retval);
+ zval_ptr_dtor(&retval);
+ break;
+ }
+
+ /* If There's no handler and it doesn't implement Countable then add a warning */
+ count = 1;
+ } else if (Z_TYPE_P(op1) == IS_NULL) {
+ count = 0;
+ } else {
+ count = 1;
+ }
+ zend_error(E_WARNING, "count(): Parameter must be an array or an object that implements Countable");
+ } while (0);
+
+ ZVAL_LONG(EX_VAR(opline->result.var), count);
+
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+
+ if (IS_CV == IS_UNUSED) {
+ if (UNEXPECTED(!EX(func)->common.scope)) {
+ SAVE_OPLINE();
+ zend_error(E_WARNING, "get_class() called without object from outside a class");
+ ZVAL_FALSE(EX_VAR(opline->result.var));
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ } else {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
+ ZEND_VM_NEXT_OPCODE();
+ }
+ } else {
+
+ zval *op1;
+
+ SAVE_OPLINE();
+ op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
+ if (Z_TYPE_P(op1) == IS_OBJECT) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
+ } else {
+ zend_error(E_WARNING, "get_class() expects parameter 1 to be object, %s given", zend_get_type_by_const(Z_TYPE_P(op1)));
+ ZVAL_FALSE(EX_VAR(opline->result.var));
+ }
+
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ }
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+
+ zval *op1;
+ zend_string *type;
+
+ SAVE_OPLINE();
+ op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
+ type = zend_zval_get_type(op1);
+ if (EXPECTED(type)) {
+ ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
+ } else {
+ ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
+ }
+
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
result = EX_VAR(opline->result.var);
@@ -43369,8 +41133,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CV_CV_HANDLER(ZEND_OP
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
result = EX_VAR(opline->result.var);
@@ -43412,8 +41176,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CV_CV_HANDLER(ZEND_OP
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
zend_long overflow;
@@ -43459,8 +41223,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OP
zval *op1, *op2;
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
fast_div_function(EX_VAR(opline->result.var), op1, op2);
@@ -43473,14 +41237,15 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CV_CV_HANDLER(ZEND_OP
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
result = EX_VAR(opline->result.var);
if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
SAVE_OPLINE();
zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
@@ -43511,8 +41276,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CV_CV_HANDLER(ZEND_OPC
zval *op1, *op2;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
@@ -43539,8 +41304,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CV_CV_HANDLER(ZEND_OPC
zval *op1, *op2;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
@@ -43568,8 +41333,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OP
zval *op1, *op2;
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
pow_function(EX_VAR(opline->result.var), op1, op2);
@@ -43582,17 +41347,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND
zval *op1, *op2;
- SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
- do {
- if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
- (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
- zend_string *op1_str = Z_STR_P(op1);
- zend_string *op2_str = Z_STR_P(op2);
- zend_string *str;
+ if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
+ (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
+ zend_string *op1_str = Z_STR_P(op1);
+ zend_string *op2_str = Z_STR_P(op2);
+ zend_string *str;
+ do {
if (IS_CV != IS_CONST) {
if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
@@ -43621,19 +41385,24 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND
memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
}
- } else {
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
- op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
- }
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
- op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
- }
- concat_function(EX_VAR(opline->result.var), op1, op2);
+
+ } while (0);
+
+ ZEND_VM_NEXT_OPCODE();
+ } else {
+ SAVE_OPLINE();
+
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
+ concat_function(EX_VAR(opline->result.var), op1, op2);
- } while (0);
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ }
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -43644,8 +41413,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLE
int result;
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
result = fast_is_identical_function(op1, op2);
@@ -43662,8 +41431,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HA
int result;
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
result = fast_is_not_identical_function(op1, op2);
@@ -43678,8 +41447,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZE
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
do {
int result;
@@ -43746,8 +41515,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLE
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
do {
int result;
@@ -43814,8 +41583,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CV_CV_HANDLER(
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
do {
int result;
@@ -43864,8 +41633,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
do {
int result;
@@ -43915,8 +41684,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(Z
zval *op1, *op2;
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
compare_function(EX_VAR(opline->result.var), op1, op2);
@@ -43929,8 +41698,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CV_CV_HANDLER(ZEND_
zval *op1, *op2;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
@@ -43956,8 +41725,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CV_CV_HANDLER(ZEND
zval *op1, *op2;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
@@ -43983,8 +41752,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CV_CV_HANDLER(ZEND
zval *op1, *op2;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
@@ -44011,8 +41780,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZE
zval *op1, *op2;
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
@@ -44029,24 +41798,23 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
zval *zptr;
SAVE_OPLINE();
- object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
+ object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
do {
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -44090,7 +41858,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
zval *value, *container, *dim;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_undef_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
assign_dim_op_array:
@@ -44103,12 +41871,12 @@ assign_dim_op_new_array:
goto assign_dim_op_ret_null;
}
} else {
- dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ dim = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (IS_CV == IS_CONST) {
- var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim);
+ var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
} else {
- var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim);
+ var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(!var_ptr)) {
goto assign_dim_op_ret_null;
@@ -44117,7 +41885,7 @@ assign_dim_op_new_array:
SEPARATE_ZVAL_NOREF(var_ptr);
}
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
binary_op(var_ptr, var_ptr, value);
@@ -44138,19 +41906,20 @@ assign_dim_op_convert_to_array:
goto assign_dim_op_new_array;
}
- dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
- zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
+ zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op EXECUTE_DATA_CC);
} else {
if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
if (IS_CV == IS_UNUSED) {
zend_throw_error(NULL, "[] operator not supported for strings");
} else {
- zend_check_string_offset(dim, BP_VAR_RW);
- zend_wrong_string_offset();
+ zend_check_string_offset(dim, BP_VAR_RW EXECUTE_DATA_CC);
+ zend_wrong_string_offset(EXECUTE_DATA_C);
}
+ UNDEF_RESULT();
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
goto assign_dim_op_convert_to_array;
} else {
@@ -44162,7 +41931,7 @@ assign_dim_op_ret_null:
ZVAL_NULL(EX_VAR(opline->result.var));
}
}
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
}
}
@@ -44171,7 +41940,7 @@ assign_dim_op_ret_null:
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper_SPEC_CV_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
USE_OPLINE
@@ -44179,8 +41948,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_C
zval *value;
SAVE_OPLINE();
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- var_ptr = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
+ value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -44201,688 +41970,244 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_C
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
-#if 0 || (IS_CV != IS_UNUSED)
+#if 1 && IS_CV == IS_UNUSED
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+#else
+# if 0 || IS_CV != IS_UNUSED
USE_OPLINE
-# if 0 || (IS_CV != IS_UNUSED)
if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
#endif
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_CV_DIM(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
-#if 0 || (IS_CV != IS_UNUSED)
+#if 1 && IS_CV == IS_UNUSED
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+#else
+# if 0 || IS_CV != IS_UNUSED
USE_OPLINE
-# if 0 || (IS_CV != IS_UNUSED)
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
#endif
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
-#if 0 || (IS_CV != IS_UNUSED)
+#if 1 && IS_CV == IS_UNUSED
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+#else
+# if 0 || IS_CV != IS_UNUSED
USE_OPLINE
-# if 0 || (IS_CV != IS_UNUSED)
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
#endif
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+}
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+}
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+}
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || (IS_CV != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_CV_CV(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -44894,21 +42219,21 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
zval *zptr;
SAVE_OPLINE();
- object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
+ object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
do {
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -44972,21 +42297,21 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
zval *zptr;
SAVE_OPLINE();
- object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
+ object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
do {
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
ZVAL_NULL(EX_VAR(opline->result.var));
break;
}
@@ -45043,12 +42368,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER
zval *container, *dim, *value, *result;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ container = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ dim = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (IS_CV != IS_CONST) {
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_array:
- value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R);
+ value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
result = EX_VAR(opline->result.var);
ZVAL_COPY_UNREF(result, value);
} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
@@ -45061,11 +42386,11 @@ fetch_dim_r_array:
} else {
fetch_dim_r_slow:
result = EX_VAR(opline->result.var);
- zend_fetch_dimension_address_read_R_slow(result, container, dim);
+ zend_fetch_dimension_address_read_R_slow(result, container, dim EXECUTE_DATA_CC);
}
} else {
result = EX_VAR(opline->result.var);
- zend_fetch_dimension_address_read_R(result, container, dim, IS_CV);
+ zend_fetch_dimension_address_read_R(result, container, dim, IS_CV EXECUTE_DATA_CC);
}
@@ -45079,9 +42404,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
- zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
+ zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV EXECUTE_DATA_CC);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
@@ -45097,9 +42422,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLE
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_undef_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
- zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
+ zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV EXECUTE_DATA_CC);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
@@ -45115,8 +42440,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLE
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
+ container = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV EXECUTE_DATA_CC);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -45135,10 +42460,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_
zend_throw_error(NULL, "Cannot use temporary expression in write context");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
- container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
- zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
+ container = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV EXECUTE_DATA_CC);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
}
@@ -45149,10 +42475,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_
zend_throw_error(NULL, "Cannot use [] for reading");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
- container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
+ container = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV EXECUTE_DATA_CC);
}
@@ -45166,9 +42493,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HAN
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef_BP_VAR_UNSET(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_undef_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC);
- zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
+ zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV EXECUTE_DATA_CC);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
@@ -45186,15 +42513,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
if (IS_CV == IS_CONST ||
(IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
@@ -45219,7 +42544,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
retval = OBJ_PROP(zobj, prop_offset);
- if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
+ if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
break;
}
@@ -45233,8 +42558,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER
}
if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
+ zend_string *property_name;
fetch_obj_r_no_object:
- zend_error(E_NOTICE, "Trying to get property of non-object");
+ property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
ZVAL_NULL(EX_VAR(opline->result.var));
} else {
retval = zobj->handlers->read_property(container, offset, BP_VAR_R, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
@@ -45257,15 +42585,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER
zval *container;
SAVE_OPLINE();
- property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -45283,14 +42609,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLE
zval *container;
SAVE_OPLINE();
- property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -45309,15 +42633,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLE
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
if (IS_CV == IS_CONST ||
(IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
@@ -45383,20 +42705,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_
zval *property;
SAVE_OPLINE();
- property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
zend_throw_error(NULL, "Cannot use temporary expression in write context");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -45416,15 +42737,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HAN
zval *container, *property;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
@@ -45442,8 +42761,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_SPEC_CV_CV_HANDLER(
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var));
+ container = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC) EXECUTE_DATA_CC);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -45452,19 +42771,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
{
USE_OPLINE
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
value = EX_CONSTANT((opline+1)->op1);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -45496,7 +42812,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
Z_DELREF_P(object);
} else {
if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -45508,16 +42826,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
}
if (IS_CV == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_CONST);
+ value = zend_assign_to_variable(property_val, value, IS_CONST);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -45531,8 +42849,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -45570,7 +42888,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -45580,7 +42898,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -45592,9 +42912,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -45609,20 +42929,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
{
USE_OPLINE
zend_free_op free_op_data;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
do {
@@ -45653,7 +42970,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
Z_DELREF_P(object);
} else {
if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -45665,16 +42984,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
}
if (IS_CV == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_TMP_VAR);
+ value = zend_assign_to_variable(property_val, value, IS_TMP_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -45688,8 +43007,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -45727,7 +43046,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -45737,7 +43056,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -45749,9 +43070,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
zval_ptr_dtor_nogc(free_op_data);
@@ -45766,20 +43087,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
{
USE_OPLINE
zend_free_op free_op_data;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
do {
@@ -45810,7 +43128,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
Z_DELREF_P(object);
} else {
if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -45822,16 +43142,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
}
if (IS_CV == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_VAR);
+ value = zend_assign_to_variable(property_val, value, IS_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -45845,8 +43165,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -45884,7 +43204,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -45894,7 +43214,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -45906,9 +43228,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
zval_ptr_dtor_nogc(free_op_data);
@@ -45923,20 +43245,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
{
USE_OPLINE
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
do {
@@ -45967,7 +43286,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
Z_DELREF_P(object);
} else {
if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -45979,16 +43300,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_
}
if (IS_CV == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_CV);
+ value = zend_assign_to_variable(property_val, value, IS_CV);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -46002,8 +43323,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -46041,7 +43362,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -46051,7 +43372,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -46063,9 +43386,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -46087,7 +43410,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -46099,11 +43422,11 @@ try_assign_dim_array:
goto assign_dim_error;
}
} else {
- dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ dim = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (IS_CV == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
@@ -46122,12 +43445,12 @@ try_assign_dim_array:
}
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
- dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
value = EX_CONSTANT((opline+1)->op1);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -46136,11 +43459,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
- dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
value = EX_CONSTANT((opline+1)->op1);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -46151,7 +43475,7 @@ try_assign_dim_array:
if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
zend_error(E_WARNING, "Cannot use a scalar value as an array");
}
- dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -46178,7 +43502,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -46190,17 +43514,17 @@ try_assign_dim_array:
goto assign_dim_error;
}
} else {
- dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ dim = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (IS_CV == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
}
}
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
@@ -46213,12 +43537,12 @@ try_assign_dim_array:
}
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
- dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
+ dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -46228,11 +43552,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
- dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op_data);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -46243,7 +43568,7 @@ try_assign_dim_array:
if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
zend_error(E_WARNING, "Cannot use a scalar value as an array");
}
- dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -46270,7 +43595,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -46282,17 +43607,17 @@ try_assign_dim_array:
goto assign_dim_error;
}
} else {
- dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ dim = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (IS_CV == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
}
}
- value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
+ value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
@@ -46305,12 +43630,12 @@ try_assign_dim_array:
}
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
- dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
+ dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -46320,11 +43645,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
- dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op_data);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -46335,7 +43661,7 @@ try_assign_dim_array:
if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
zend_error(E_WARNING, "Cannot use a scalar value as an array");
}
- dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -46362,7 +43688,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -46374,17 +43700,17 @@ try_assign_dim_array:
goto assign_dim_error;
}
} else {
- dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ dim = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (IS_CV == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
}
}
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
+ value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
value = zend_assign_to_variable(variable_ptr, value, IS_CV);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
@@ -46397,12 +43723,12 @@ try_assign_dim_array:
}
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
- dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
+ dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -46411,11 +43737,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
- dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -46426,7 +43753,7 @@ try_assign_dim_array:
if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
zend_error(E_WARNING, "Cannot use a scalar value as an array");
}
- dim = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
assign_dim_error:
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -46450,8 +43777,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSE
zval *variable_ptr;
SAVE_OPLINE();
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
@@ -46478,8 +43805,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_
zval *variable_ptr;
SAVE_OPLINE();
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) {
@@ -46506,8 +43833,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(
zval *value_ptr;
SAVE_OPLINE();
- value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op2.var);
- variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
+ variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_VAR &&
UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT) &&
@@ -46517,6 +43844,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(
zend_throw_error(NULL, "Cannot assign by reference to overloaded object");
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else if (IS_CV == IS_VAR &&
@@ -46525,6 +43853,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(
zend_error(E_NOTICE, "Only variables should be assigned by reference");
if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -46559,8 +43888,51 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER
zval *op1, *op2;
zend_string *op1_str, *op2_str, *str;
+
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
+ if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
+ (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
+ zend_string *op1_str = Z_STR_P(op1);
+ zend_string *op2_str = Z_STR_P(op2);
+ zend_string *str;
+
+ do {
+ if (IS_CV != IS_CONST) {
+ if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
+
+ break;
+ }
+ }
+ if (IS_CV != IS_CONST) {
+ if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
+
+ break;
+ }
+ }
+ if (IS_CV != IS_CONST && IS_CV != IS_CV &&
+ !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
+ size_t len = ZSTR_LEN(op1_str);
+
+ str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
+ memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
+ ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
+ break;
+ } else {
+ str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
+ memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
+ memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
+ ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
+ }
+
+ } while (0);
+
+ ZEND_VM_NEXT_OPCODE();
+ }
+
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
if (IS_CV == IS_CONST) {
op1_str = Z_STR_P(op1);
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
@@ -46571,7 +43943,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER
}
op1_str = _zval_get_string_func(op1);
}
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
if (IS_CV == IS_CONST) {
op2_str = Z_STR_P(op2);
} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
@@ -46633,7 +44004,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HA
SAVE_OPLINE();
- function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ object = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+
+ if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ }
+
+ function_name = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (IS_CV != IS_CONST &&
UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
@@ -46646,6 +44023,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HA
} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
if (UNEXPECTED(EG(exception) != NULL)) {
+
HANDLE_EXCEPTION();
}
}
@@ -46656,14 +44034,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HA
} while (0);
}
- object = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
-
- if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
- }
-
if (IS_CV != IS_UNUSED) {
do {
if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -46691,8 +44061,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HA
obj = Z_OBJ_P(object);
called_scope = obj->ce;
- if (IS_CV != IS_CONST ||
- UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
+ if (IS_CV == IS_CONST &&
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(function_name)) == called_scope)) {
+ fbc = CACHED_PTR(Z_CACHE_SLOT_P(function_name) + sizeof(void*));
+ } else {
zend_object *orig_obj = obj;
if (UNEXPECTED(obj->handlers->get_method == NULL)) {
@@ -46751,8 +44123,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CV_CV_HANDLER(ZEND_O
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
do {
int result;
@@ -46820,12 +44192,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_H
SAVE_OPLINE();
if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
- expr_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
+ expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
ZVAL_MAKE_REF(expr_ptr);
Z_ADDREF_P(expr_ptr);
} else {
- expr_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_TMP_VAR) {
/* pass */
} else if (IS_CV == IS_CONST) {
@@ -46855,7 +44227,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_H
if (IS_CV != IS_UNUSED) {
- zval *offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ zval *offset = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
zend_string *str;
zend_ulong hval;
@@ -46928,13 +44300,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(
}
}
- if (IS_CV == IS_UNUSED) {
- ZEND_VM_NEXT_OPCODE();
-#if 0 || (IS_CV != IS_UNUSED)
- } else {
- ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-#endif
- }
+ ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -46947,8 +44313,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(Z
zend_string *key;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef_BP_VAR_UNSET(execute_data, opline->op1.var);
- offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ container = _get_zval_ptr_cv_undef_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC);
+ offset = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
do {
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
@@ -47036,13 +44402,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(Z
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
do {
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
@@ -47058,7 +44422,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(Z
if (Z_OBJ_HT_P(container)->unset_property) {
Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CV == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
} else {
- zend_error(E_NOTICE, "Trying to unset property of non-object");
+ zend_string *property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to unset property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
} while (0);
@@ -47076,8 +44442,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ container = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ offset = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht;
@@ -47207,15 +44573,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
if (IS_CV == IS_CONST ||
(IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
@@ -47229,7 +44593,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV
}
}
if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
- zend_error(E_NOTICE, "Trying to check property of non-object");
+ zend_string *property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to check property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
isset_no_object:
result = ((opline->extended_value & ZEND_ISSET) == 0);
} else {
@@ -47248,13 +44614,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_
{
USE_OPLINE
- zend_generator *generator = zend_get_running_generator(execute_data);
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
SAVE_OPLINE();
if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
@@ -47276,7 +44643,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_
zend_error(E_NOTICE, "Only variable references should be yielded by reference");
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
ZVAL_COPY_VALUE(&generator->value, value);
if (IS_CV == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
@@ -47284,7 +44651,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_
}
}
} else {
- zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
+ zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
/* If a function call result is yielded and the function did
* not return by reference we throw a notice. */
@@ -47300,7 +44667,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_
}
} else {
- zval *value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_CV == IS_CONST) {
@@ -47328,7 +44695,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_
/* Set the new yielded key */
if (IS_CV != IS_UNUSED) {
- zval *key = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
/* Consts, temporary variables and references need copying */
if (IS_CV == IS_CONST) {
@@ -47379,15 +44746,15 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_
ZEND_VM_RETURN();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *container, *dim, *value;
zend_long offset;
- container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ container = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ dim = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_index_array:
if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
@@ -47414,7 +44781,7 @@ fetch_dim_r_index_array:
} else {
fetch_dim_r_index_slow:
SAVE_OPLINE();
- zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim);
+ zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim EXECUTE_DATA_CC);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -47433,8 +44800,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CV_TMPVAR_HANDLER(ZEN
zend_free_op free_op2;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
result = EX_VAR(opline->result.var);
@@ -47476,8 +44843,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CV_TMPVAR_HANDLER(ZEN
zend_free_op free_op2;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
result = EX_VAR(opline->result.var);
@@ -47519,8 +44886,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CV_TMPVAR_HANDLER(ZEN
zend_free_op free_op2;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
zend_long overflow;
@@ -47566,8 +44933,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEN
zval *op1, *op2;
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
fast_div_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
@@ -47580,14 +44947,15 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CV_TMPVAR_HANDLER(ZEN
zend_free_op free_op2;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
result = EX_VAR(opline->result.var);
if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
SAVE_OPLINE();
zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
@@ -47618,8 +44986,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CV_TMPVAR_HANDLER(ZEND
zend_free_op free_op2;
zval *op1, *op2;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
@@ -47646,8 +45014,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CV_TMPVAR_HANDLER(ZEND
zend_free_op free_op2;
zval *op1, *op2;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
@@ -47675,8 +45043,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEN
zval *op1, *op2;
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
pow_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
@@ -47689,17 +45057,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(
zend_free_op free_op2;
zval *op1, *op2;
- SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
- do {
- if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
- ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
- zend_string *op1_str = Z_STR_P(op1);
- zend_string *op2_str = Z_STR_P(op2);
- zend_string *str;
+ if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
+ ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
+ zend_string *op1_str = Z_STR_P(op1);
+ zend_string *op2_str = Z_STR_P(op2);
+ zend_string *str;
+ do {
if (IS_CV != IS_CONST) {
if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
@@ -47728,19 +45095,24 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(
memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
}
- } else {
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
- op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
- }
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
- op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
- }
- concat_function(EX_VAR(opline->result.var), op1, op2);
+
+ } while (0);
+ zval_ptr_dtor_nogc(free_op2);
+ ZEND_VM_NEXT_OPCODE();
+ } else {
+ SAVE_OPLINE();
+
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
+ concat_function(EX_VAR(opline->result.var), op1, op2);
- } while (0);
- zval_ptr_dtor_nogc(free_op2);
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ zval_ptr_dtor_nogc(free_op2);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ }
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -47749,8 +45121,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLE
zend_free_op free_op2;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
int result;
@@ -47817,8 +45189,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HA
zend_free_op free_op2;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
int result;
@@ -47885,8 +45257,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CV_TMPVAR_HAND
zend_free_op free_op2;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
int result;
@@ -47935,8 +45307,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TM
zend_free_op free_op2;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
int result;
@@ -47986,8 +45358,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDL
zval *op1, *op2;
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
compare_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
@@ -48000,8 +45372,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CV_TMPVAR_HANDLER(Z
zend_free_op free_op2;
zval *op1, *op2;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
@@ -48027,8 +45399,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CV_TMPVAR_HANDLER(
zend_free_op free_op2;
zval *op1, *op2;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
@@ -48054,8 +45426,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CV_TMPVAR_HANDLER(
zend_free_op free_op2;
zval *op1, *op2;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
@@ -48082,8 +45454,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLE
zval *op1, *op2;
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
@@ -48100,24 +45472,23 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP
zval *zptr;
SAVE_OPLINE();
- object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
+ object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var);
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -48161,7 +45532,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SP
zval *value, *container, *dim;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_undef_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
assign_dim_op_array:
@@ -48174,12 +45545,12 @@ assign_dim_op_new_array:
goto assign_dim_op_ret_null;
}
} else {
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim);
+ var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
} else {
- var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim);
+ var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(!var_ptr)) {
goto assign_dim_op_ret_null;
@@ -48188,7 +45559,7 @@ assign_dim_op_new_array:
SEPARATE_ZVAL_NOREF(var_ptr);
}
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
binary_op(var_ptr, var_ptr, value);
@@ -48209,19 +45580,20 @@ assign_dim_op_convert_to_array:
goto assign_dim_op_new_array;
}
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
- zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
+ zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op EXECUTE_DATA_CC);
} else {
if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
zend_throw_error(NULL, "[] operator not supported for strings");
} else {
- zend_check_string_offset(dim, BP_VAR_RW);
- zend_wrong_string_offset();
+ zend_check_string_offset(dim, BP_VAR_RW EXECUTE_DATA_CC);
+ zend_wrong_string_offset(EXECUTE_DATA_C);
}
+ UNDEF_RESULT();
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
goto assign_dim_op_convert_to_array;
} else {
@@ -48233,7 +45605,7 @@ assign_dim_op_ret_null:
ZVAL_NULL(EX_VAR(opline->result.var));
}
}
- value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data1);
+ value = get_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1);
}
}
@@ -48243,7 +45615,7 @@ assign_dim_op_ret_null:
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper_SPEC_CV_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
USE_OPLINE
zend_free_op free_op2;
@@ -48251,8 +45623,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_C
zval *value;
SAVE_OPLINE();
- value = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- var_ptr = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
+ value = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) {
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -48274,688 +45646,244 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_C
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
+#if 1 && (IS_TMP_VAR|IS_VAR) == IS_UNUSED
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+#else
+# if 0 || IS_CV != IS_UNUSED
USE_OPLINE
-# if 0 || (IS_CV != IS_UNUSED)
if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
#endif
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
+#if 1 && (IS_TMP_VAR|IS_VAR) == IS_UNUSED
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+#else
+# if 0 || IS_CV != IS_UNUSED
USE_OPLINE
-# if 0 || (IS_CV != IS_UNUSED)
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
#endif
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
+#if 1 && (IS_TMP_VAR|IS_VAR) == IS_UNUSED
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+#else
+# if 0 || IS_CV != IS_UNUSED
USE_OPLINE
-# if 0 || (IS_CV != IS_UNUSED)
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
#endif
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+}
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+}
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+}
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(1)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
-#if 0 || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED)
- USE_OPLINE
-
-# if 0 || (IS_CV != IS_UNUSED)
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
- if (EXPECTED(0)) {
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
- }
-# endif
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#else
- ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
-#endif
+ ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_CV_TMPVAR(int inc ZEND_OPCODE_HANDLER_ARGS_DC)
@@ -48967,21 +45895,21 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE
zval *zptr;
SAVE_OPLINE();
- object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
+ object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -49046,21 +45974,21 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP
zval *zptr;
SAVE_OPLINE();
- object = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
+ object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
ZVAL_DEREF(object);
if (UNEXPECTED(!make_real_object(object))) {
- zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to increment/decrement property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
ZVAL_NULL(EX_VAR(opline->result.var));
break;
}
@@ -49118,12 +46046,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HAN
zval *container, *dim, *value, *result;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ container = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (IS_CV != IS_CONST) {
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_array:
- value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R);
+ value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
result = EX_VAR(opline->result.var);
ZVAL_COPY_UNREF(result, value);
} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
@@ -49136,11 +46064,11 @@ fetch_dim_r_array:
} else {
fetch_dim_r_slow:
result = EX_VAR(opline->result.var);
- zend_fetch_dimension_address_read_R_slow(result, container, dim);
+ zend_fetch_dimension_address_read_R_slow(result, container, dim EXECUTE_DATA_CC);
}
} else {
result = EX_VAR(opline->result.var);
- zend_fetch_dimension_address_read_R(result, container, dim, (IS_TMP_VAR|IS_VAR));
+ zend_fetch_dimension_address_read_R(result, container, dim, (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
}
zval_ptr_dtor_nogc(free_op2);
@@ -49154,9 +46082,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HAN
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
- zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
+ zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op2);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
@@ -49172,9 +46100,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HA
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef_BP_VAR_RW(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_undef_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
- zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
+ zend_fetch_dimension_address_RW(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op2);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
@@ -49190,8 +46118,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HA
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
+ container = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op2);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -49210,10 +46138,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMP
zend_throw_error(NULL, "Cannot use temporary expression in write context");
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
- container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
- zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
+ container = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_W(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
}
@@ -49224,10 +46153,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMP
zend_throw_error(NULL, "Cannot use [] for reading");
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
- container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
+ container = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_read_R(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op2);
}
@@ -49241,9 +46171,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef_BP_VAR_UNSET(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_undef_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC);
- zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
+ zend_fetch_dimension_address_UNSET(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op2);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
@@ -49261,15 +46191,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HAN
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (IS_CV == IS_CONST ||
(IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
@@ -49294,7 +46222,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HAN
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
retval = OBJ_PROP(zobj, prop_offset);
- if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
+ if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
break;
}
@@ -49308,8 +46236,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HAN
}
if (UNEXPECTED(zobj->handlers->read_property == NULL)) {
+ zend_string *property_name;
fetch_obj_r_no_object:
- zend_error(E_NOTICE, "Trying to get property of non-object");
+ property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
ZVAL_NULL(EX_VAR(opline->result.var));
} else {
retval = zobj->handlers->read_property(container, offset, BP_VAR_R, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL), EX_VAR(opline->result.var));
@@ -49333,15 +46264,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HAN
zval *container;
SAVE_OPLINE();
- property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(free_op2);
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
zval_ptr_dtor_nogc(free_op2);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -49359,14 +46288,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HA
zval *container;
SAVE_OPLINE();
- property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(free_op2);
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_RW);
zval_ptr_dtor_nogc(free_op2);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -49385,15 +46312,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HA
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (IS_CV == IS_CONST ||
(IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
@@ -49460,20 +46385,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMP
zval *property;
SAVE_OPLINE();
- property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- container = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(free_op2);
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
zend_throw_error(NULL, "Cannot use temporary expression in write context");
- zval_ptr_dtor_nogc(free_op2);
+ zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_W);
zval_ptr_dtor_nogc(free_op2);
if (IS_CV == IS_VAR && READY_TO_DESTROY(free_op1)) {
@@ -49493,15 +46417,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR
zval *container, *property;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
zend_fetch_property_address(EX_VAR(opline->result.var), container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL), BP_VAR_UNSET);
zval_ptr_dtor_nogc(free_op2);
@@ -49519,8 +46441,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_SPEC_CV_TMPVAR_HAND
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2));
+ container = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op2);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -49529,19 +46451,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
{
USE_OPLINE
zend_free_op free_op2;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
value = EX_CONSTANT((opline+1)->op1);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -49573,7 +46492,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
Z_DELREF_P(object);
} else {
if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -49585,16 +46506,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
}
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_CONST);
+ value = zend_assign_to_variable(property_val, value, IS_CONST);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -49608,8 +46529,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -49647,7 +46568,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -49657,7 +46578,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -49669,9 +46592,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -49686,20 +46609,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
{
USE_OPLINE
zend_free_op free_op2, free_op_data;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
do {
@@ -49730,7 +46650,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
Z_DELREF_P(object);
} else {
if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -49742,16 +46664,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
}
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_TMP_VAR);
+ value = zend_assign_to_variable(property_val, value, IS_TMP_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -49765,8 +46687,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -49804,7 +46726,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -49814,7 +46736,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -49826,9 +46750,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
zval_ptr_dtor_nogc(free_op_data);
@@ -49843,20 +46767,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
{
USE_OPLINE
zend_free_op free_op2, free_op_data;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
do {
@@ -49887,7 +46808,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
Z_DELREF_P(object);
} else {
if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -49899,16 +46822,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
}
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_VAR);
+ value = zend_assign_to_variable(property_val, value, IS_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -49922,8 +46845,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -49961,7 +46884,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -49971,7 +46894,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -49983,9 +46908,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
zval_ptr_dtor_nogc(free_op_data);
@@ -50000,20 +46925,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
{
USE_OPLINE
zend_free_op free_op2;
- zval *object, *property_name, *value, tmp;
+ zval *object, *property, *value, tmp;
SAVE_OPLINE();
- object = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
+ property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
do {
@@ -50044,7 +46966,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
Z_DELREF_P(object);
} else {
if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object))) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
@@ -50056,16 +46980,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_D
}
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
- EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property_name)))) {
- uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property_name) + sizeof(void*));
+ EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(Z_CACHE_SLOT_P(property)))) {
+ uint32_t prop_offset = (uint32_t)(intptr_t)CACHED_PTR(Z_CACHE_SLOT_P(property) + sizeof(void*));
zend_object *zobj = Z_OBJ_P(object);
- zval *property;
+ zval *property_val;
if (EXPECTED(prop_offset != (uint32_t)ZEND_DYNAMIC_PROPERTY_OFFSET)) {
- property = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property) != IS_UNDEF) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
fast_assign_obj:
- value = zend_assign_to_variable(property, value, IS_CV);
+ value = zend_assign_to_variable(property_val, value, IS_CV);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -50079,8 +47003,8 @@ fast_assign_obj:
}
zobj->properties = zend_array_dup(zobj->properties);
}
- property = zend_hash_find(zobj->properties, Z_STR_P(property_name));
- if (property) {
+ property_val = zend_hash_find(zobj->properties, Z_STR_P(property));
+ if (property_val) {
goto fast_assign_obj;
}
}
@@ -50118,7 +47042,7 @@ fast_assign_obj:
Z_ADDREF_P(value);
}
}
- zend_hash_add_new(zobj->properties, Z_STR_P(property_name), value);
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -50128,7 +47052,9 @@ fast_assign_obj:
}
if (!Z_OBJ_HT_P(object)->write_property) {
- zend_error(E_WARNING, "Attempt to assign property of non-object");
+ zend_string *property_name = zval_get_string(property);
+ zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
@@ -50140,9 +47066,9 @@ fast_assign_obj:
ZVAL_DEREF(value);
}
- Z_OBJ_HT_P(object)->write_property(object, property_name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property_name)) : NULL);
+ Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(property)) : NULL);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -50164,7 +47090,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -50176,11 +47102,11 @@ try_assign_dim_array:
goto assign_dim_error;
}
} else {
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
@@ -50199,12 +47125,12 @@ try_assign_dim_array:
}
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
value = EX_CONSTANT((opline+1)->op1);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -50213,11 +47139,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
value = EX_CONSTANT((opline+1)->op1);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -50228,7 +47155,7 @@ try_assign_dim_array:
if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
zend_error(E_WARNING, "Cannot use a scalar value as an array");
}
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
assign_dim_error:
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -50255,7 +47182,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -50267,17 +47194,17 @@ try_assign_dim_array:
goto assign_dim_error;
}
} else {
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
}
}
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
@@ -50290,12 +47217,12 @@ try_assign_dim_array:
}
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -50305,11 +47232,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- value = _get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op_data);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -50320,7 +47248,7 @@ try_assign_dim_array:
if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
zend_error(E_WARNING, "Cannot use a scalar value as an array");
}
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
assign_dim_error:
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -50347,7 +47275,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -50359,17 +47287,17 @@ try_assign_dim_array:
goto assign_dim_error;
}
} else {
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
}
}
- value = _get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data);
+ value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
value = zend_assign_to_variable(variable_ptr, value, IS_VAR);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
@@ -50382,12 +47310,12 @@ try_assign_dim_array:
}
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -50397,11 +47325,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- value = _get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC);
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op_data);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -50412,7 +47341,7 @@ try_assign_dim_array:
if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
zend_error(E_WARNING, "Cannot use a scalar value as an array");
}
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
assign_dim_error:
zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -50439,7 +47368,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_D
zval *dim;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var);
+ object_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
try_assign_dim_array:
@@ -50451,17 +47380,17 @@ try_assign_dim_array:
goto assign_dim_error;
}
} else {
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
} else {
- variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim);
+ variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
}
if (UNEXPECTED(variable_ptr == NULL)) {
goto assign_dim_error;
}
}
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, (opline+1)->op1.var);
+ value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
value = zend_assign_to_variable(variable_ptr, value, IS_CV);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
@@ -50474,12 +47403,12 @@ try_assign_dim_array:
}
}
if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
zend_assign_to_object_dim(object_ptr, dim, value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline)) && EXPECTED(!EG(exception))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
@@ -50488,11 +47417,12 @@ try_assign_dim_array:
zend_throw_error(NULL, "[] operator not supported for strings");
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else {
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- value = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, (opline+1)->op1.var);
- zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL));
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
+ zend_assign_to_string_offset(object_ptr, dim, value, (UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL) EXECUTE_DATA_CC);
}
} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
@@ -50503,7 +47433,7 @@ try_assign_dim_array:
if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) {
zend_error(E_WARNING, "Cannot use a scalar value as an array");
}
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
assign_dim_error:
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
@@ -50526,8 +47456,51 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HAN
zval *op1, *op2;
zend_string *op1_str, *op2_str, *str;
+
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
+ ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
+ zend_string *op1_str = Z_STR_P(op1);
+ zend_string *op2_str = Z_STR_P(op2);
+ zend_string *str;
+
+ do {
+ if (IS_CV != IS_CONST) {
+ if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
+
+ break;
+ }
+ }
+ if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
+ if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
+
+ break;
+ }
+ }
+ if (IS_CV != IS_CONST && IS_CV != IS_CV &&
+ !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
+ size_t len = ZSTR_LEN(op1_str);
+
+ str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
+ memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
+ ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
+ break;
+ } else {
+ str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
+ memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
+ memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
+ ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
+ }
+
+ } while (0);
+ zval_ptr_dtor_nogc(free_op2);
+ ZEND_VM_NEXT_OPCODE();
+ }
+
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
if (IS_CV == IS_CONST) {
op1_str = Z_STR_P(op1);
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
@@ -50538,7 +47511,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HAN
}
op1_str = _zval_get_string_func(op1);
}
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
op2_str = Z_STR_P(op2);
} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
@@ -50600,7 +47572,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVA
SAVE_OPLINE();
- function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ object = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+
+ if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ }
+
+ function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
@@ -50613,6 +47591,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVA
} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
if (UNEXPECTED(EG(exception) != NULL)) {
+
HANDLE_EXCEPTION();
}
}
@@ -50623,14 +47602,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVA
} while (0);
}
- object = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
-
- if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(free_op2);
- HANDLE_EXCEPTION();
- }
-
if (IS_CV != IS_UNUSED) {
do {
if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -50658,8 +47629,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVA
obj = Z_OBJ_P(object);
called_scope = obj->ce;
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST ||
- UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(function_name)) == called_scope)) {
+ fbc = CACHED_PTR(Z_CACHE_SLOT_P(function_name) + sizeof(void*));
+ } else {
zend_object *orig_obj = obj;
if (UNEXPECTED(obj->handlers->get_method == NULL)) {
@@ -50719,8 +47692,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CV_TMPVAR_HANDLER(ZE
zend_free_op free_op2;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
int result;
@@ -50788,12 +47761,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPV
SAVE_OPLINE();
if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
- expr_ptr = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var);
+ expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
ZVAL_MAKE_REF(expr_ptr);
Z_ADDREF_P(expr_ptr);
} else {
- expr_ptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_TMP_VAR) {
/* pass */
} else if (IS_CV == IS_CONST) {
@@ -50823,7 +47796,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPV
if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
zend_free_op free_op2;
- zval *offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ zval *offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
zend_string *str;
zend_ulong hval;
@@ -50896,13 +47869,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HAND
}
}
- if (IS_CV == IS_UNUSED) {
- ZEND_VM_NEXT_OPCODE();
-#if 0 || (IS_CV != IS_UNUSED)
- } else {
- ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
-#endif
- }
+ ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -50915,8 +47882,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDL
zend_string *key;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef_BP_VAR_UNSET(execute_data, opline->op1.var);
- offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ container = _get_zval_ptr_cv_undef_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC);
+ offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
@@ -51005,13 +47972,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDL
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_BP_VAR_UNSET(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
@@ -51027,7 +47992,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDL
if (Z_OBJ_HT_P(container)->unset_property) {
Z_OBJ_HT_P(container)->unset_property(container, offset, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(Z_CACHE_SLOT_P(offset)) : NULL));
} else {
- zend_error(E_NOTICE, "Trying to unset property of non-object");
+ zend_string *property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to unset property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
}
} while (0);
@@ -51046,8 +48013,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ container = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht;
@@ -51177,15 +48144,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_BP_VAR_IS(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (IS_CV == IS_CONST ||
(IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
@@ -51199,7 +48164,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV
}
}
if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
- zend_error(E_NOTICE, "Trying to check property of non-object");
+ zend_string *property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to check property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
isset_no_object:
result = ((opline->extended_value & ZEND_ISSET) == 0);
} else {
@@ -51215,15 +48182,15 @@ isset_no_object:
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zend_free_op free_op2;
zval *container, *dim, *value;
zend_long offset;
- container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ container = _get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_index_array:
if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
@@ -51250,7 +48217,7 @@ fetch_dim_r_index_array:
} else {
fetch_dim_r_index_slow:
SAVE_OPLINE();
- zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim);
+ zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim EXECUTE_DATA_CC);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -51267,10 +48234,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_TMPVAR_HANDLER(ZEN
{
USE_OPLINE
zend_free_op free_op1;
+ zval *op1;
+
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1));
+ ZEND_VM_NEXT_OPCODE();
+ }
SAVE_OPLINE();
bitwise_not_function(EX_VAR(opline->result.var),
- _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1));
+ _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC));
zval_ptr_dtor_nogc(free_op1);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -51281,7 +48255,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(Z
zval *val;
zend_free_op free_op1;
- val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (Z_TYPE_INFO_P(val) == IS_TRUE) {
ZVAL_FALSE(EX_VAR(opline->result.var));
} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
@@ -51307,7 +48281,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_
zval *z;
SAVE_OPLINE();
- z = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ z = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (Z_TYPE_P(z) == IS_STRING) {
zend_string *str = Z_STR_P(z);
@@ -51330,13 +48304,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zend_free_op free_op1;
zval *val;
- val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (Z_TYPE_INFO_P(val) == IS_TRUE) {
ZEND_VM_SET_NEXT_OPCODE(opline + 1);
@@ -51362,13 +48336,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_
ZEND_VM_JMP(opline);
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zend_free_op free_op1;
zval *val;
- val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (Z_TYPE_INFO_P(val) == IS_TRUE) {
ZEND_VM_SET_OPCODE(OP_JMP_ADDR(opline, opline->op2));
@@ -51393,13 +48367,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND
ZEND_VM_JMP(opline);
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zend_free_op free_op1;
zval *val;
- val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) {
ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
@@ -51432,7 +48406,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZE
zval *val;
int ret;
- val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (Z_TYPE_INFO_P(val) == IS_TRUE) {
ZVAL_TRUE(EX_VAR(opline->result.var));
@@ -51469,7 +48443,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(Z
zval *val;
int ret;
- val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (Z_TYPE_INFO_P(val) == IS_TRUE) {
ZVAL_TRUE(EX_VAR(opline->result.var));
@@ -51522,13 +48496,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZE
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *value, *arg;
zend_free_op free_op1;
- value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
ZVAL_COPY_VALUE(arg, value);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
@@ -51545,7 +48519,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_
zval *val;
zend_free_op free_op1;
- val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (Z_TYPE_INFO_P(val) == IS_TRUE) {
ZVAL_TRUE(EX_VAR(opline->result.var));
} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
@@ -51569,17 +48543,15 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND
USE_OPLINE
zend_free_op free_op1;
zval *obj;
- zend_object *clone_obj;
zend_class_entry *ce, *scope;
zend_function *clone;
zend_object_clone_obj_t clone_call;
SAVE_OPLINE();
- obj = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ obj = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
do {
@@ -51591,6 +48563,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND
break;
}
}
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
GET_OP1_UNDEF_CV(obj, BP_VAR_R);
if (UNEXPECTED(EG(exception) != NULL)) {
@@ -51609,6 +48582,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND
if (UNEXPECTED(clone_call == NULL)) {
zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
zval_ptr_dtor_nogc(free_op1);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
@@ -51620,6 +48594,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND
if (!zend_check_private(clone, scope, clone->common.function_name)) {
zend_throw_error(NULL, "Call to private %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : "");
zval_ptr_dtor_nogc(free_op1);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) {
@@ -51629,17 +48604,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND
if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
zend_throw_error(NULL, "Call to protected %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : "");
zval_ptr_dtor_nogc(free_op1);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
}
}
- clone_obj = clone_call(obj);
- if (EXPECTED(EG(exception) == NULL)) {
- ZVAL_OBJ(EX_VAR(opline->result.var), clone_obj);
- } else {
- OBJ_RELEASE(clone_obj);
- }
+ ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj));
zval_ptr_dtor_nogc(free_op1);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -51653,7 +48624,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HA
zval *inc_filename;
SAVE_OPLINE();
- inc_filename = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ inc_filename = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
zval_ptr_dtor_nogc(free_op1);
if (UNEXPECTED(EG(exception) != NULL)) {
@@ -51661,6 +48632,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HA
destroy_op_array(new_op_array);
efree_size(new_op_array, sizeof(zend_op_array));
}
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
if (RETURN_VALUE_USED(opline)) {
@@ -51672,6 +48644,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HA
if (RETURN_VALUE_USED(opline)) {
return_value = EX_VAR(opline->result.var);
+ ZVAL_NULL(return_value);
}
new_op_array->scope = EX(func)->op_array.scope;
@@ -51700,7 +48673,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HA
destroy_op_array(new_op_array);
efree_size(new_op_array, sizeof(zend_op_array));
if (UNEXPECTED(EG(exception) != NULL)) {
- zend_throw_exception_internal(NULL);
+ zend_rethrow_exception(execute_data);
+ UNDEF_RESULT();
HANDLE_EXCEPTION();
}
} else if (RETURN_VALUE_USED(opline)) {
@@ -51717,7 +48691,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_TMPVAR_HANDLER(ZEND_
SAVE_OPLINE();
if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
zend_free_op free_op1;
- zval *ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ zval *ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
do {
if (Z_TYPE_P(ptr) == IS_LONG) {
@@ -51745,20 +48719,26 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEN
zval *value;
zend_free_op free_op1;
- SAVE_OPLINE();
- value = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
-try_strlen:
+ value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
+ zval_ptr_dtor_nogc(free_op1);
+ ZEND_VM_NEXT_OPCODE();
} else {
zend_bool strict;
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
- value = GET_OP1_UNDEF_CV(value, BP_VAR_R);
- }
if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
value = Z_REFVAL_P(value);
- goto try_strlen;
+ if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
+ zval_ptr_dtor_nogc(free_op1);
+ ZEND_VM_NEXT_OPCODE();
+ }
+ }
+
+ SAVE_OPLINE();
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
+ value = GET_OP1_UNDEF_CV(value, BP_VAR_R);
}
strict = EX_USES_STRICT_TYPES();
do {
@@ -51788,7 +48768,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVAR_CONST_HANDLER(
zend_free_op free_op1;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
@@ -51831,7 +48811,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVAR_CONST_HANDLER(
zend_free_op free_op1;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
@@ -51874,7 +48854,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVAR_CONST_HANDLER(
zend_free_op free_op1;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
@@ -51921,7 +48901,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(
zval *op1, *op2;
SAVE_OPLINE();
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
fast_div_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
@@ -51935,7 +48915,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVAR_CONST_HANDLER(
zend_free_op free_op1;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
@@ -51943,6 +48923,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVAR_CONST_HANDLER(
if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
SAVE_OPLINE();
zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
@@ -51973,7 +48954,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVAR_CONST_HANDLER(Z
zend_free_op free_op1;
zval *op1, *op2;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
@@ -52001,7 +48982,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVAR_CONST_HANDLER(Z
zend_free_op free_op1;
zval *op1, *op2;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
@@ -52030,7 +49011,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(
zval *op1, *op2;
SAVE_OPLINE();
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
pow_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
@@ -52044,17 +49025,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDL
zend_free_op free_op1;
zval *op1, *op2;
- SAVE_OPLINE();
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
- do {
- if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
- (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
- zend_string *op1_str = Z_STR_P(op1);
- zend_string *op2_str = Z_STR_P(op2);
- zend_string *str;
+ if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
+ (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
+ zend_string *op1_str = Z_STR_P(op1);
+ zend_string *op2_str = Z_STR_P(op2);
+ zend_string *str;
+ do {
if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
@@ -52083,19 +49063,24 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDL
memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
}
- } else {
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
- op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
- }
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
- op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
- }
- concat_function(EX_VAR(opline->result.var), op1, op2);
+ zval_ptr_dtor_nogc(free_op1);
+ } while (0);
+
+ ZEND_VM_NEXT_OPCODE();
+ } else {
+ SAVE_OPLINE();
+
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
+ concat_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- } while (0);
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ }
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -52104,7 +49089,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HAN
zend_free_op free_op1;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
do {
int result;
@@ -52172,7 +49157,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST
zend_free_op free_op1;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
do {
int result;
@@ -52240,7 +49225,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVAR_CONST_H
zend_free_op free_op1;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
do {
int result;
@@ -52290,7 +49275,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVA
zend_free_op free_op1;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
do {
int result;
@@ -52341,7 +49326,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HA
zval *op1, *op2;
SAVE_OPLINE();
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
compare_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
@@ -52355,7 +49340,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVAR_CONST_HANDLE
zend_free_op free_op1;
zval *op1, *op2;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
@@ -52382,7 +49367,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVAR_CONST_HANDL
zend_free_op free_op1;
zval *op1, *op2;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
@@ -52409,7 +49394,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVAR_CONST_HANDL
zend_free_op free_op1;
zval *op1, *op2;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
@@ -52437,7 +49422,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HAN
zval *op1, *op2;
SAVE_OPLINE();
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
@@ -52451,106 +49436,25 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_
zend_free_op free_op1;
zval *varname;
zval *retval;
- zend_string *name;
- zend_class_entry *ce;
SAVE_OPLINE();
- varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
-
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- name = Z_STR_P(varname);
- } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
- name = Z_STR_P(varname);
- zend_string_addref(name);
- } else {
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
- GET_OP1_UNDEF_CV(varname, BP_VAR_R);
- }
- name = zval_get_string(varname);
- }
-
- if (IS_CONST == IS_CONST) {
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
- retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
+ varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
- /* check if static properties were destoyed */
- if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- zval_ptr_dtor_nogc(free_op1);
- HANDLE_EXCEPTION();
- }
- }
-
- goto fetch_static_prop_return;
- } else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
- ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
- if (UNEXPECTED(ce == NULL)) {
- ZEND_ASSERT(EG(exception));
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
- zend_string_release(name);
- }
- zval_ptr_dtor_nogc(free_op1);
- HANDLE_EXCEPTION();
- }
- CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
- }
- } else {
- if (IS_CONST == IS_UNUSED) {
- ce = zend_fetch_class(NULL, opline->op2.num);
- if (UNEXPECTED(ce == NULL)) {
- ZEND_ASSERT(EG(exception));
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
- zend_string_release(name);
- }
- zval_ptr_dtor_nogc(free_op1);
- HANDLE_EXCEPTION();
- }
- } else {
- ce = Z_CE_P(EX_VAR(opline->op2.var));
- }
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
- (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
-
- /* check if static properties were destoyed */
- if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- zval_ptr_dtor_nogc(free_op1);
- HANDLE_EXCEPTION();
- }
- }
+ retval = zend_fetch_static_property_address(varname, (IS_TMP_VAR|IS_VAR), opline->op2, IS_CONST, type EXECUTE_DATA_CC);
- goto fetch_static_prop_return;
- }
- }
- retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
if (UNEXPECTED(retval == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- ZEND_ASSERT(EG(exception));
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
- zend_string_release(name);
- }
+ if (EG(exception)) {
zval_ptr_dtor_nogc(free_op1);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
+ } else {
+ ZEND_ASSERT(type == BP_VAR_IS);
+ retval = &EG(uninitialized_zval);
}
- } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
}
zval_ptr_dtor_nogc(free_op1);
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
- zend_string_release(name);
- }
-
-fetch_static_prop_return:
if (type == BP_VAR_R || type == BP_VAR_IS) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
} else {
@@ -52602,12 +49506,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_
zval *container, *dim, *value, *result;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
dim = EX_CONSTANT(opline->op2);
if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_array:
- value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R);
+ value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
result = EX_VAR(opline->result.var);
ZVAL_COPY_UNREF(result, value);
} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
@@ -52620,11 +49524,11 @@ fetch_dim_r_array:
} else {
fetch_dim_r_slow:
result = EX_VAR(opline->result.var);
- zend_fetch_dimension_address_read_R_slow(result, container, dim);
+ zend_fetch_dimension_address_read_R_slow(result, container, dim EXECUTE_DATA_CC);
}
} else {
result = EX_VAR(opline->result.var);
- zend_fetch_dimension_address_read_R(result, container, dim, IS_CONST);
+ zend_fetch_dimension_address_read_R(result, container, dim, IS_CONST EXECUTE_DATA_CC);
}
zval_ptr_dtor_nogc(free_op1);
@@ -52638,8 +49542,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST);
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2), IS_CONST EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op1);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -52654,12 +49558,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
offset = EX_CONSTANT(opline->op2);
@@ -52724,8 +49626,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_SPEC_TMPVAR_CONST_H
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2));
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, EX_CONSTANT(opline->op2) EXECUTE_DATA_CC);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -52737,8 +49639,51 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_
zval *op1, *op2;
zend_string *op1_str, *op2_str, *str;
+
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = EX_CONSTANT(opline->op2);
+ if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
+ (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
+ zend_string *op1_str = Z_STR_P(op1);
+ zend_string *op2_str = Z_STR_P(op2);
+ zend_string *str;
+
+ do {
+ if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
+ if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
+ zval_ptr_dtor_nogc(free_op1);
+ break;
+ }
+ }
+ if (IS_CONST != IS_CONST) {
+ if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
+ zval_ptr_dtor_nogc(free_op1);
+ break;
+ }
+ }
+ if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
+ !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
+ size_t len = ZSTR_LEN(op1_str);
+
+ str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
+ memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
+ ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
+ break;
+ } else {
+ str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
+ memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
+ memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
+ ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
+ }
+ zval_ptr_dtor_nogc(free_op1);
+ } while (0);
+
+ ZEND_VM_NEXT_OPCODE();
+ }
+
SAVE_OPLINE();
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
op1_str = Z_STR_P(op1);
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
@@ -52749,7 +49694,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_
}
op1_str = _zval_get_string_func(op1);
}
- op2 = EX_CONSTANT(opline->op2);
if (IS_CONST == IS_CONST) {
op2_str = Z_STR_P(op2);
} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
@@ -52811,6 +49755,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C
SAVE_OPLINE();
+ object = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+
+ if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ }
+
function_name = EX_CONSTANT(opline->op2);
if (IS_CONST != IS_CONST &&
@@ -52824,24 +49774,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C
} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
if (UNEXPECTED(EG(exception) != NULL)) {
+ zval_ptr_dtor_nogc(free_op1);
HANDLE_EXCEPTION();
}
}
zend_throw_error(NULL, "Method name must be a string");
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ zval_ptr_dtor_nogc(free_op1);
HANDLE_EXCEPTION();
} while (0);
}
- object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
-
- if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
- }
-
if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
do {
if ((IS_TMP_VAR|IS_VAR) == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -52869,8 +49812,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C
obj = Z_OBJ_P(object);
called_scope = obj->ce;
- if (IS_CONST != IS_CONST ||
- UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
+ if (IS_CONST == IS_CONST &&
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(function_name)) == called_scope)) {
+ fbc = CACHED_PTR(Z_CACHE_SLOT_P(function_name) + sizeof(void*));
+ } else {
zend_object *orig_obj = obj;
if (UNEXPECTED(obj->handlers->get_method == NULL)) {
@@ -52930,7 +49875,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER
zend_free_op free_op1;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
op2 = EX_CONSTANT(opline->op2);
do {
int result;
@@ -52999,7 +49944,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_
SAVE_OPLINE();
- varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
ZVAL_UNDEF(&tmp);
if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
@@ -53056,7 +50001,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC
zend_class_entry *ce;
SAVE_OPLINE();
- varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
ZVAL_UNDEF(&tmp);
if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
ZVAL_STR(&tmp, zval_get_string(varname));
@@ -53077,6 +50022,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
@@ -53090,13 +50036,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC
zend_string_release(Z_STR(tmp));
}
zval_ptr_dtor_nogc(free_op1);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else {
ce = Z_CE_P(EX_VAR(opline->op2.var));
}
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
- (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))) == ce)) {
+
+ value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
@@ -53141,7 +50090,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMP
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
offset = EX_CONSTANT(opline->op2);
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
@@ -53272,12 +50221,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TM
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
offset = EX_CONSTANT(opline->op2);
@@ -53294,7 +50241,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TM
}
}
if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
- zend_error(E_NOTICE, "Trying to check property of non-object");
+ zend_string *property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to check property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
isset_no_object:
result = ((opline->extended_value & ZEND_ISSET) == 0);
} else {
@@ -53317,7 +50266,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_H
zend_bool result;
SAVE_OPLINE();
- expr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ expr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
try_instanceof:
if (Z_TYPE_P(expr) == IS_OBJECT) {
@@ -53336,6 +50285,7 @@ try_instanceof:
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
zval_ptr_dtor_nogc(free_op1);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else {
@@ -53357,14 +50307,72 @@ try_instanceof:
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_LONG_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zend_free_op free_op1;
+ zval *op, *jump_zv;
+ HashTable *jumptable;
+
+ op = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ jumptable = Z_ARRVAL_P(EX_CONSTANT(opline->op2));
+
+ if (Z_TYPE_P(op) != IS_LONG) {
+ ZVAL_DEREF(op);
+ if (Z_TYPE_P(op) != IS_LONG) {
+ /* Wrong type, fall back to ZEND_CASE chain */
+ ZEND_VM_NEXT_OPCODE();
+ }
+ }
+
+ jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
+ if (jump_zv != NULL) {
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
+ ZEND_VM_CONTINUE();
+ } else {
+ /* default */
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
+ ZEND_VM_CONTINUE();
+ }
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_STRING_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zend_free_op free_op1;
+ zval *op, *jump_zv;
+ HashTable *jumptable;
+
+ op = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ jumptable = Z_ARRVAL_P(EX_CONSTANT(opline->op2));
+
+ if (Z_TYPE_P(op) != IS_STRING) {
+ ZVAL_DEREF(op);
+ if (Z_TYPE_P(op) != IS_STRING) {
+ /* Wrong type, fall back to ZEND_CASE chain */
+ ZEND_VM_NEXT_OPCODE();
+ }
+ }
+
+ jump_zv = zend_hash_find(jumptable, Z_STR_P(op));
+ if (jump_zv != NULL) {
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
+ ZEND_VM_CONTINUE();
+ } else {
+ /* default */
+ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
+ ZEND_VM_CONTINUE();
+ }
+}
+
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zend_free_op free_op1;
zval *container, *dim, *value;
zend_long offset;
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
dim = EX_CONSTANT(opline->op2);
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_index_array:
@@ -53392,7 +50400,7 @@ fetch_dim_r_index_array:
} else {
fetch_dim_r_index_slow:
SAVE_OPLINE();
- zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim);
+ zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op1);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -53411,106 +50419,25 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_
zend_free_op free_op1;
zval *varname;
zval *retval;
- zend_string *name;
- zend_class_entry *ce;
SAVE_OPLINE();
- varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- name = Z_STR_P(varname);
- } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
- name = Z_STR_P(varname);
- zend_string_addref(name);
- } else {
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
- GET_OP1_UNDEF_CV(varname, BP_VAR_R);
- }
- name = zval_get_string(varname);
- }
-
- if (IS_VAR == IS_CONST) {
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
- retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
-
- /* check if static properties were destoyed */
- if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- zval_ptr_dtor_nogc(free_op1);
- HANDLE_EXCEPTION();
- }
- }
-
- goto fetch_static_prop_return;
- } else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
- ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
- if (UNEXPECTED(ce == NULL)) {
- ZEND_ASSERT(EG(exception));
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
- zend_string_release(name);
- }
- zval_ptr_dtor_nogc(free_op1);
- HANDLE_EXCEPTION();
- }
- CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
- }
- } else {
- if (IS_VAR == IS_UNUSED) {
- ce = zend_fetch_class(NULL, opline->op2.num);
- if (UNEXPECTED(ce == NULL)) {
- ZEND_ASSERT(EG(exception));
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
- zend_string_release(name);
- }
- zval_ptr_dtor_nogc(free_op1);
- HANDLE_EXCEPTION();
- }
- } else {
- ce = Z_CE_P(EX_VAR(opline->op2.var));
- }
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
- (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
-
- /* check if static properties were destoyed */
- if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- zval_ptr_dtor_nogc(free_op1);
- HANDLE_EXCEPTION();
- }
- }
+ retval = zend_fetch_static_property_address(varname, (IS_TMP_VAR|IS_VAR), opline->op2, IS_VAR, type EXECUTE_DATA_CC);
- goto fetch_static_prop_return;
- }
- }
- retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
if (UNEXPECTED(retval == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- ZEND_ASSERT(EG(exception));
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
- zend_string_release(name);
- }
+ if (EG(exception)) {
zval_ptr_dtor_nogc(free_op1);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
+ } else {
+ ZEND_ASSERT(type == BP_VAR_IS);
+ retval = &EG(uninitialized_zval);
}
- } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
}
zval_ptr_dtor_nogc(free_op1);
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
- zend_string_release(name);
- }
-
-fetch_static_prop_return:
if (type == BP_VAR_R || type == BP_VAR_IS) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
} else {
@@ -53564,7 +50491,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_
SAVE_OPLINE();
- varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
ZVAL_UNDEF(&tmp);
if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
@@ -53621,7 +50548,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC
zend_class_entry *ce;
SAVE_OPLINE();
- varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
ZVAL_UNDEF(&tmp);
if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
ZVAL_STR(&tmp, zval_get_string(varname));
@@ -53642,6 +50569,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
@@ -53655,13 +50583,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC
zend_string_release(Z_STR(tmp));
}
zval_ptr_dtor_nogc(free_op1);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else {
ce = Z_CE_P(EX_VAR(opline->op2.var));
}
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
- (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))) == ce)) {
+
+ value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
@@ -53704,7 +50635,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HAN
zend_bool result;
SAVE_OPLINE();
- expr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ expr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
try_instanceof:
if (Z_TYPE_P(expr) == IS_OBJECT) {
@@ -53723,6 +50654,7 @@ try_instanceof:
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
zval_ptr_dtor_nogc(free_op1);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else {
@@ -53754,7 +50686,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_
HashTable *target_symbol_table;
SAVE_OPLINE();
- varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
name = Z_STR_P(varname);
@@ -53768,10 +50700,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_
name = zval_get_string(varname);
}
- target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
+ target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK EXECUTE_DATA_CC);
retval = zend_hash_find(target_symbol_table, name);
if (retval == NULL) {
- if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) {
+ if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
zval *result;
fetch_this:
@@ -53796,9 +50728,11 @@ fetch_this:
break;
case BP_VAR_RW:
case BP_VAR_W:
+ ZVAL_UNDEF(result);
zend_throw_error(NULL, "Cannot re-assign $this");
break;
case BP_VAR_UNSET:
+ ZVAL_UNDEF(result);
zend_throw_error(NULL, "Cannot unset $this");
break;
EMPTY_SWITCH_DEFAULT_CASE()
@@ -53829,7 +50763,7 @@ fetch_this:
} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
retval = Z_INDIRECT_P(retval);
if (Z_TYPE_P(retval) == IS_UNDEF) {
- if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) {
+ if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
goto fetch_this;
}
switch (type) {
@@ -53910,106 +50844,25 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_
zend_free_op free_op1;
zval *varname;
zval *retval;
- zend_string *name;
- zend_class_entry *ce;
SAVE_OPLINE();
- varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
-
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- name = Z_STR_P(varname);
- } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
- name = Z_STR_P(varname);
- zend_string_addref(name);
- } else {
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
- GET_OP1_UNDEF_CV(varname, BP_VAR_R);
- }
- name = zval_get_string(varname);
- }
+ varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
- if (IS_UNUSED == IS_CONST) {
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) != NULL)) {
- retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
+ retval = zend_fetch_static_property_address(varname, (IS_TMP_VAR|IS_VAR), opline->op2, IS_UNUSED, type EXECUTE_DATA_CC);
- /* check if static properties were destoyed */
- if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- zval_ptr_dtor_nogc(free_op1);
- HANDLE_EXCEPTION();
- }
- }
-
- goto fetch_static_prop_return;
- } else if (UNEXPECTED((ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) == NULL)) {
- ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
- if (UNEXPECTED(ce == NULL)) {
- ZEND_ASSERT(EG(exception));
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
- zend_string_release(name);
- }
- zval_ptr_dtor_nogc(free_op1);
- HANDLE_EXCEPTION();
- }
- CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
- }
- } else {
- if (IS_UNUSED == IS_UNUSED) {
- ce = zend_fetch_class(NULL, opline->op2.num);
- if (UNEXPECTED(ce == NULL)) {
- ZEND_ASSERT(EG(exception));
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
- zend_string_release(name);
- }
- zval_ptr_dtor_nogc(free_op1);
- HANDLE_EXCEPTION();
- }
- } else {
- ce = Z_CE_P(EX_VAR(opline->op2.var));
- }
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
- (retval = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
-
- /* check if static properties were destoyed */
- if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- zend_throw_error(NULL, "Access to undeclared static property: %s::$%s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
- zval_ptr_dtor_nogc(free_op1);
- HANDLE_EXCEPTION();
- }
- }
-
- goto fetch_static_prop_return;
- }
- }
- retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS);
if (UNEXPECTED(retval == NULL)) {
- if (type == BP_VAR_IS) {
- retval = &EG(uninitialized_zval);
- } else {
- ZEND_ASSERT(EG(exception));
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
- zend_string_release(name);
- }
+ if (EG(exception)) {
zval_ptr_dtor_nogc(free_op1);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
+ } else {
+ ZEND_ASSERT(type == BP_VAR_IS);
+ retval = &EG(uninitialized_zval);
}
- } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce, retval);
}
zval_ptr_dtor_nogc(free_op1);
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
- zend_string_release(name);
- }
-
-fetch_static_prop_return:
if (type == BP_VAR_R || type == BP_VAR_IS) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), retval);
} else {
@@ -54062,33 +50915,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_H
zend_free_op free_op1;
SAVE_OPLINE();
- if ((IS_TMP_VAR|IS_VAR) == IS_CV &&
- (opline->extended_value & ZEND_QUICK_SET)) {
- zval *var = EX_VAR(opline->op1.var);
- if (Z_REFCOUNTED_P(var)) {
- zend_refcounted *garbage = Z_COUNTED_P(var);
-
- if (!--GC_REFCOUNT(garbage)) {
- ZVAL_UNDEF(var);
- zval_dtor_func(garbage);
- } else {
- zval *z = var;
- ZVAL_DEREF(z);
- if (Z_COLLECTABLE_P(z) && UNEXPECTED(!Z_GC_INFO_P(z))) {
- ZVAL_UNDEF(var);
- gc_possible_root(Z_COUNTED_P(z));
- } else {
- ZVAL_UNDEF(var);
- }
- }
- } else {
- ZVAL_UNDEF(var);
- }
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
- }
-
- varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
ZVAL_UNDEF(&tmp);
if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
@@ -54099,7 +50927,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_H
varname = &tmp;
}
- target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
+ target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK EXECUTE_DATA_CC);
zend_hash_del_ind(target_symbol_table, Z_STR_P(varname));
if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
@@ -54118,7 +50946,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_
SAVE_OPLINE();
- varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
ZVAL_UNDEF(&tmp);
if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
@@ -54170,57 +50998,36 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_
USE_OPLINE
zval *value;
int result;
+ zend_free_op free_op1;
+ zval tmp, *varname;
+ HashTable *target_symbol_table;
- if ((IS_TMP_VAR|IS_VAR) == IS_CV &&
- (opline->extended_value & ZEND_QUICK_SET)) {
- value = EX_VAR(opline->op1.var);
- if (opline->extended_value & ZEND_ISSET) {
- result =
- Z_TYPE_P(value) > IS_NULL &&
- (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
- } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
- SAVE_OPLINE();
- result = !i_zend_is_true(value);
- if (UNEXPECTED(EG(exception))) {
- HANDLE_EXCEPTION();
- }
- }
- ZEND_VM_SMART_BRANCH(result, 0);
- ZVAL_BOOL(EX_VAR(opline->result.var), result);
- ZEND_VM_SET_NEXT_OPCODE(opline + 1);
- ZEND_VM_CONTINUE();
- } else {
- zend_free_op free_op1;
- zval tmp, *varname;
- HashTable *target_symbol_table;
-
- SAVE_OPLINE();
- varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- ZVAL_UNDEF(&tmp);
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
- ZVAL_STR(&tmp, zval_get_string(varname));
- varname = &tmp;
- }
-
- target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK);
- value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
+ SAVE_OPLINE();
+ varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ ZVAL_UNDEF(&tmp);
+ if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
+ ZVAL_STR(&tmp, zval_get_string(varname));
+ varname = &tmp;
+ }
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
- zend_string_release(Z_STR(tmp));
- }
- zval_ptr_dtor_nogc(free_op1);
+ target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK EXECUTE_DATA_CC);
+ value = zend_hash_find_ind(target_symbol_table, Z_STR_P(varname));
- if (opline->extended_value & ZEND_ISSET) {
- result = value && Z_TYPE_P(value) > IS_NULL &&
- (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
- } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
- result = !value || !i_zend_is_true(value);
- }
+ if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE(tmp) != IS_UNDEF) {
+ zend_string_release(Z_STR(tmp));
+ }
+ zval_ptr_dtor_nogc(free_op1);
- ZEND_VM_SMART_BRANCH(result, 1);
- ZVAL_BOOL(EX_VAR(opline->result.var), result);
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ if (opline->extended_value & ZEND_ISSET) {
+ result = value && Z_TYPE_P(value) > IS_NULL &&
+ (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
+ } else /* if (opline->extended_value & ZEND_ISEMPTY) */ {
+ result = !value || !i_zend_is_true(value);
}
+
+ ZEND_VM_SMART_BRANCH(result, 1);
+ ZVAL_BOOL(EX_VAR(opline->result.var), result);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -54233,7 +51040,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC
zend_class_entry *ce;
SAVE_OPLINE();
- varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
ZVAL_UNDEF(&tmp);
if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
ZVAL_STR(&tmp, zval_get_string(varname));
@@ -54254,6 +51061,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION);
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
CACHE_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)), ce);
@@ -54267,13 +51075,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC
zend_string_release(Z_STR(tmp));
}
zval_ptr_dtor_nogc(free_op1);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else {
ce = Z_CE_P(EX_VAR(opline->op2.var));
}
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
- (value = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)), ce)) != NULL) {
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1))) == ce)) {
+
+ value = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + sizeof(void*));
/* check if static properties were destoyed */
if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
@@ -54316,7 +51127,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_
zend_bool result;
SAVE_OPLINE();
- expr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ expr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
try_instanceof:
if (Z_TYPE_P(expr) == IS_OBJECT) {
@@ -54335,6 +51146,7 @@ try_instanceof:
if (UNEXPECTED(ce == NULL)) {
ZEND_ASSERT(EG(exception));
zval_ptr_dtor_nogc(free_op1);
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
}
} else {
@@ -54362,8 +51174,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVAR_CV_HANDLER(ZEN
zend_free_op free_op1;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
result = EX_VAR(opline->result.var);
@@ -54405,8 +51217,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVAR_CV_HANDLER(ZEN
zend_free_op free_op1;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
result = EX_VAR(opline->result.var);
@@ -54448,8 +51260,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVAR_CV_HANDLER(ZEN
zend_free_op free_op1;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
zend_long overflow;
@@ -54495,8 +51307,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEN
zval *op1, *op2;
SAVE_OPLINE();
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
fast_div_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
@@ -54509,14 +51321,15 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVAR_CV_HANDLER(ZEN
zend_free_op free_op1;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
result = EX_VAR(opline->result.var);
if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
SAVE_OPLINE();
zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
@@ -54547,8 +51360,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVAR_CV_HANDLER(ZEND
zend_free_op free_op1;
zval *op1, *op2;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
@@ -54575,8 +51388,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVAR_CV_HANDLER(ZEND
zend_free_op free_op1;
zval *op1, *op2;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
@@ -54604,8 +51417,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEN
zval *op1, *op2;
SAVE_OPLINE();
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
pow_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
@@ -54618,17 +51431,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(
zend_free_op free_op1;
zval *op1, *op2;
- SAVE_OPLINE();
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
- do {
- if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
- (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
- zend_string *op1_str = Z_STR_P(op1);
- zend_string *op2_str = Z_STR_P(op2);
- zend_string *str;
+ if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
+ (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
+ zend_string *op1_str = Z_STR_P(op1);
+ zend_string *op2_str = Z_STR_P(op2);
+ zend_string *str;
+ do {
if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
@@ -54657,19 +51469,24 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(
memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
}
- } else {
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
- op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
- }
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
- op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
- }
- concat_function(EX_VAR(opline->result.var), op1, op2);
+ zval_ptr_dtor_nogc(free_op1);
+ } while (0);
+
+ ZEND_VM_NEXT_OPCODE();
+ } else {
+ SAVE_OPLINE();
+
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
+ concat_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- } while (0);
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ }
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -54678,8 +51495,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CV_HANDLE
zend_free_op free_op1;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
do {
int result;
@@ -54746,8 +51563,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CV_HA
zend_free_op free_op1;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
do {
int result;
@@ -54814,8 +51631,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVAR_CV_HAND
zend_free_op free_op1;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
do {
int result;
@@ -54864,8 +51681,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVA
zend_free_op free_op1;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
do {
int result;
@@ -54915,8 +51732,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDL
zval *op1, *op2;
SAVE_OPLINE();
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
compare_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
@@ -54929,8 +51746,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVAR_CV_HANDLER(Z
zend_free_op free_op1;
zval *op1, *op2;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
@@ -54956,8 +51773,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVAR_CV_HANDLER(
zend_free_op free_op1;
zval *op1, *op2;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
@@ -54983,8 +51800,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVAR_CV_HANDLER(
zend_free_op free_op1;
zval *op1, *op2;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
@@ -55011,8 +51828,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_CV_HANDLE
zval *op1, *op2;
SAVE_OPLINE();
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
@@ -55026,12 +51843,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HAN
zval *container, *dim, *value, *result;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ dim = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_array:
- value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R);
+ value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
result = EX_VAR(opline->result.var);
ZVAL_COPY_UNREF(result, value);
} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
@@ -55044,11 +51861,11 @@ fetch_dim_r_array:
} else {
fetch_dim_r_slow:
result = EX_VAR(opline->result.var);
- zend_fetch_dimension_address_read_R_slow(result, container, dim);
+ zend_fetch_dimension_address_read_R_slow(result, container, dim EXECUTE_DATA_CC);
}
} else {
result = EX_VAR(opline->result.var);
- zend_fetch_dimension_address_read_R(result, container, dim, IS_CV);
+ zend_fetch_dimension_address_read_R(result, container, dim, IS_CV EXECUTE_DATA_CC);
}
zval_ptr_dtor_nogc(free_op1);
@@ -55062,8 +51879,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HA
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var), IS_CV);
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC), IS_CV EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op1);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -55078,15 +51895,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HA
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
@@ -55148,8 +51963,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_SPEC_TMPVAR_CV_HAND
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(execute_data, opline->op2.var));
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC) EXECUTE_DATA_CC);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -55161,8 +51976,51 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HAN
zval *op1, *op2;
zend_string *op1_str, *op2_str, *str;
+
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
+ if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
+ (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
+ zend_string *op1_str = Z_STR_P(op1);
+ zend_string *op2_str = Z_STR_P(op2);
+ zend_string *str;
+
+ do {
+ if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
+ if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
+ zval_ptr_dtor_nogc(free_op1);
+ break;
+ }
+ }
+ if (IS_CV != IS_CONST) {
+ if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
+ zval_ptr_dtor_nogc(free_op1);
+ break;
+ }
+ }
+ if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
+ !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
+ size_t len = ZSTR_LEN(op1_str);
+
+ str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
+ memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
+ ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
+ break;
+ } else {
+ str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
+ memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
+ memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
+ ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
+ }
+ zval_ptr_dtor_nogc(free_op1);
+ } while (0);
+
+ ZEND_VM_NEXT_OPCODE();
+ }
+
SAVE_OPLINE();
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
op1_str = Z_STR_P(op1);
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
@@ -55173,7 +52031,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HAN
}
op1_str = _zval_get_string_func(op1);
}
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
if (IS_CV == IS_CONST) {
op2_str = Z_STR_P(op2);
} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
@@ -55235,7 +52092,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C
SAVE_OPLINE();
- function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ object = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+
+ if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ }
+
+ function_name = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (IS_CV != IS_CONST &&
UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
@@ -55248,24 +52111,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C
} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
if (UNEXPECTED(EG(exception) != NULL)) {
+ zval_ptr_dtor_nogc(free_op1);
HANDLE_EXCEPTION();
}
}
zend_throw_error(NULL, "Method name must be a string");
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ zval_ptr_dtor_nogc(free_op1);
HANDLE_EXCEPTION();
} while (0);
}
- object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
-
- if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
- }
-
if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
do {
if ((IS_TMP_VAR|IS_VAR) == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -55293,8 +52149,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C
obj = Z_OBJ_P(object);
called_scope = obj->ce;
- if (IS_CV != IS_CONST ||
- UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
+ if (IS_CV == IS_CONST &&
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(function_name)) == called_scope)) {
+ fbc = CACHED_PTR(Z_CACHE_SLOT_P(function_name) + sizeof(void*));
+ } else {
zend_object *orig_obj = obj;
if (UNEXPECTED(obj->handlers->get_method == NULL)) {
@@ -55354,8 +52212,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZE
zend_free_op free_op1;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
do {
int result;
@@ -55424,8 +52282,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMP
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ offset = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht;
@@ -55555,15 +52413,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TM
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
-
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
@@ -55577,7 +52433,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TM
}
}
if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
- zend_error(E_NOTICE, "Trying to check property of non-object");
+ zend_string *property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to check property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
isset_no_object:
result = ((opline->extended_value & ZEND_ISSET) == 0);
} else {
@@ -55592,15 +52450,15 @@ isset_no_object:
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zend_free_op free_op1;
zval *container, *dim, *value;
zend_long offset;
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- dim = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ dim = _get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_index_array:
if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
@@ -55627,7 +52485,7 @@ fetch_dim_r_index_array:
} else {
fetch_dim_r_index_slow:
SAVE_OPLINE();
- zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim);
+ zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op1);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -55646,8 +52504,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVAR_TMPVAR_HANDLER
zend_free_op free_op1, free_op2;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
result = EX_VAR(opline->result.var);
@@ -55689,8 +52547,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVAR_TMPVAR_HANDLER
zend_free_op free_op1, free_op2;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
result = EX_VAR(opline->result.var);
@@ -55732,8 +52590,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVAR_TMPVAR_HANDLER
zend_free_op free_op1, free_op2;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
zend_long overflow;
@@ -55779,8 +52637,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER
zval *op1, *op2;
SAVE_OPLINE();
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
fast_div_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
@@ -55793,14 +52651,15 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVAR_TMPVAR_HANDLER
zend_free_op free_op1, free_op2;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
result = EX_VAR(opline->result.var);
if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
SAVE_OPLINE();
zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero");
+ ZVAL_UNDEF(EX_VAR(opline->result.var));
HANDLE_EXCEPTION();
} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
@@ -55831,8 +52690,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVAR_TMPVAR_HANDLER(
zend_free_op free_op1, free_op2;
zval *op1, *op2;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
@@ -55859,8 +52718,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVAR_TMPVAR_HANDLER(
zend_free_op free_op1, free_op2;
zval *op1, *op2;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
@@ -55888,8 +52747,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER
zval *op1, *op2;
SAVE_OPLINE();
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
pow_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
@@ -55902,17 +52761,16 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HAND
zend_free_op free_op1, free_op2;
zval *op1, *op2;
- SAVE_OPLINE();
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
- do {
- if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
- ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
- zend_string *op1_str = Z_STR_P(op1);
- zend_string *op2_str = Z_STR_P(op2);
- zend_string *str;
+ if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
+ ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
+ zend_string *op1_str = Z_STR_P(op1);
+ zend_string *op2_str = Z_STR_P(op2);
+ zend_string *str;
+ do {
if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
@@ -55941,19 +52799,24 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HAND
memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
}
- } else {
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
- op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
- }
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
- op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
- }
- concat_function(EX_VAR(opline->result.var), op1, op2);
+ zval_ptr_dtor_nogc(free_op1);
+ } while (0);
+ zval_ptr_dtor_nogc(free_op2);
+ ZEND_VM_NEXT_OPCODE();
+ } else {
+ SAVE_OPLINE();
+
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
+ concat_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
- } while (0);
- zval_ptr_dtor_nogc(free_op2);
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ zval_ptr_dtor_nogc(free_op2);
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ }
}
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -55962,8 +52825,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HA
zend_free_op free_op1, free_op2;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
int result;
@@ -56030,8 +52893,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVA
zend_free_op free_op1, free_op2;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
int result;
@@ -56098,8 +52961,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_
zend_free_op free_op1, free_op2;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
int result;
@@ -56148,8 +53011,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVA
zend_free_op free_op1, free_op2;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
int result;
@@ -56199,8 +53062,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_H
zval *op1, *op2;
SAVE_OPLINE();
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
compare_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
@@ -56213,8 +53076,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_HANDL
zend_free_op free_op1, free_op2;
zval *op1, *op2;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
@@ -56240,8 +53103,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_HAND
zend_free_op free_op1, free_op2;
zval *op1, *op2;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
@@ -56267,8 +53130,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_HAND
zend_free_op free_op1, free_op2;
zval *op1, *op2;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
@@ -56295,8 +53158,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HA
zval *op1, *op2;
SAVE_OPLINE();
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
@@ -56310,12 +53173,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR
zval *container, *dim, *value, *result;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_array:
- value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R);
+ value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
result = EX_VAR(opline->result.var);
ZVAL_COPY_UNREF(result, value);
} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
@@ -56328,11 +53191,11 @@ fetch_dim_r_array:
} else {
fetch_dim_r_slow:
result = EX_VAR(opline->result.var);
- zend_fetch_dimension_address_read_R_slow(result, container, dim);
+ zend_fetch_dimension_address_read_R_slow(result, container, dim EXECUTE_DATA_CC);
}
} else {
result = EX_VAR(opline->result.var);
- zend_fetch_dimension_address_read_R(result, container, dim, (IS_TMP_VAR|IS_VAR));
+ zend_fetch_dimension_address_read_R(result, container, dim, (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
}
zval_ptr_dtor_nogc(free_op2);
zval_ptr_dtor_nogc(free_op1);
@@ -56346,8 +53209,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVA
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2), (IS_TMP_VAR|IS_VAR));
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_read_IS(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op2);
zval_ptr_dtor_nogc(free_op1);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -56362,15 +53225,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVA
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
@@ -56433,8 +53294,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_SPEC_TMPVAR_TMPVAR_
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2));
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ zend_fetch_dimension_address_read_LIST(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC) EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op2);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -56446,8 +53307,51 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR
zval *op1, *op2;
zend_string *op1_str, *op2_str, *str;
+
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
+ if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
+ ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
+ zend_string *op1_str = Z_STR_P(op1);
+ zend_string *op2_str = Z_STR_P(op2);
+ zend_string *str;
+
+ do {
+ if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
+ if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
+ zval_ptr_dtor_nogc(free_op1);
+ break;
+ }
+ }
+ if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
+ if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
+ ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
+ zval_ptr_dtor_nogc(free_op1);
+ break;
+ }
+ }
+ if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
+ !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
+ size_t len = ZSTR_LEN(op1_str);
+
+ str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
+ memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
+ ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
+ break;
+ } else {
+ str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
+ memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
+ memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
+ ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
+ }
+ zval_ptr_dtor_nogc(free_op1);
+ } while (0);
+ zval_ptr_dtor_nogc(free_op2);
+ ZEND_VM_NEXT_OPCODE();
+ }
+
SAVE_OPLINE();
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
op1_str = Z_STR_P(op1);
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
@@ -56458,7 +53362,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR
}
op1_str = _zval_get_string_func(op1);
}
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
op2_str = Z_STR_P(op2);
} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
@@ -56520,7 +53423,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_T
SAVE_OPLINE();
- function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ object = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+
+ if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ }
+
+ function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
@@ -56533,24 +53442,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_T
} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
if (UNEXPECTED(EG(exception) != NULL)) {
+ zval_ptr_dtor_nogc(free_op1);
HANDLE_EXCEPTION();
}
}
zend_throw_error(NULL, "Method name must be a string");
zval_ptr_dtor_nogc(free_op2);
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ zval_ptr_dtor_nogc(free_op1);
HANDLE_EXCEPTION();
} while (0);
}
- object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
-
- if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(free_op2);
- HANDLE_EXCEPTION();
- }
-
if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
do {
if ((IS_TMP_VAR|IS_VAR) == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
@@ -56578,8 +53480,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_T
obj = Z_OBJ_P(object);
called_scope = obj->ce;
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST ||
- UNEXPECTED((fbc = CACHED_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope)) == NULL)) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
+ EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(function_name)) == called_scope)) {
+ fbc = CACHED_PTR(Z_CACHE_SLOT_P(function_name) + sizeof(void*));
+ } else {
zend_object *orig_obj = obj;
if (UNEXPECTED(obj->handlers->get_method == NULL)) {
@@ -56640,8 +53544,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLE
zend_free_op free_op1, free_op2;
zval *op1, *op2, *result;
- op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
do {
int result;
@@ -56710,8 +53614,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMP
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht;
@@ -56841,15 +53745,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TM
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
- zend_throw_error(NULL, "Using $this when not in object context");
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- HANDLE_EXCEPTION();
+ ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
- offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
@@ -56863,7 +53765,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TM
}
}
if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) {
- zend_error(E_NOTICE, "Trying to check property of non-object");
+ zend_string *property_name = zval_get_string(offset);
+ zend_error(E_NOTICE, "Trying to check property '%s' of non-object", ZSTR_VAL(property_name));
+ zend_string_release(property_name);
isset_no_object:
result = ((opline->extended_value & ZEND_ISSET) == 0);
} else {
@@ -56879,15 +53783,15 @@ isset_no_object:
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zend_free_op free_op1, free_op2;
zval *container, *dim, *value;
zend_long offset;
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- dim = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
+ dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC);
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
fetch_dim_r_index_array:
if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
@@ -56914,7 +53818,7 @@ fetch_dim_r_index_array:
} else {
fetch_dim_r_index_slow:
SAVE_OPLINE();
- zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim);
+ zend_fetch_dimension_address_read_R_slow(EX_VAR(opline->result.var), container, dim EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(free_op1);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -56927,7 +53831,7 @@ fetch_dim_r_index_undef:
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *var_ptr;
@@ -56940,7 +53844,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *var_ptr;
@@ -56953,7 +53857,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *var_ptr;
@@ -56966,7 +53870,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_SPEC_TMPVARCV_RET
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_SPEC_TMPVARCV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_SPEC_TMPVARCV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *var_ptr;
@@ -56979,7 +53883,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_SPEC_TMPVARCV_RET
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *var_ptr;
@@ -56996,7 +53900,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_TM
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *var_ptr;
@@ -57013,7 +53917,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_TM
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *var_ptr;
@@ -57026,7 +53930,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *var_ptr;
@@ -57039,7 +53943,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *var_ptr;
@@ -57052,7 +53956,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_SPEC_TMPVARCV_RET
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_SPEC_TMPVARCV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_SPEC_TMPVARCV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *var_ptr;
@@ -57065,7 +53969,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_SPEC_TMPVARCV_RET
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *var_ptr;
@@ -57082,7 +53986,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_TM
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *var_ptr;
@@ -57099,7 +54003,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_TM
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *var_ptr;
@@ -57110,7 +54014,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *var_ptr;
@@ -57121,7 +54025,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_SPEC_TMPVARCV_HA
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *var_ptr;
@@ -57136,7 +54040,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_OR_DOUBLE_SPEC_T
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *var_ptr;
@@ -57147,7 +54051,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *var_ptr;
@@ -57158,7 +54062,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_SPEC_TMPVARCV_HA
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *var_ptr;
@@ -57173,7 +54077,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_OR_DOUBLE_SPEC_T
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -57184,7 +54088,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -57195,7 +54099,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -57207,7 +54111,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPV
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -57219,7 +54123,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_H
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -57231,7 +54135,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57245,7 +54149,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57259,7 +54163,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57273,7 +54177,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57287,7 +54191,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARC
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57301,7 +54205,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARC
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57315,7 +54219,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARC
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57329,7 +54233,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57343,7 +54247,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57357,7 +54261,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57371,7 +54275,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPE
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57385,7 +54289,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPE
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57399,7 +54303,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPE
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -57411,7 +54315,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPV
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -57423,7 +54327,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARC
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -57435,7 +54339,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVA
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -57447,7 +54351,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPV
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -57459,7 +54363,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARC
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -57471,7 +54375,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVA
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -57483,7 +54387,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPV
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -57497,7 +54401,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARC
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2, *result;
@@ -57509,7 +54413,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVA
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57523,7 +54427,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TM
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57537,7 +54441,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TM
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57551,7 +54455,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TM
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57565,7 +54469,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57579,7 +54483,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57593,7 +54497,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57607,7 +54511,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARC
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57621,7 +54525,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARC
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57635,7 +54539,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARC
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57649,7 +54553,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVA
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57663,7 +54567,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVA
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57677,7 +54581,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVA
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57691,7 +54595,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57705,7 +54609,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57719,7 +54623,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57733,7 +54637,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARC
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57747,7 +54651,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARC
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57761,7 +54665,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARC
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57775,7 +54679,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57789,7 +54693,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57803,7 +54707,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57817,7 +54721,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPE
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57831,7 +54735,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPE
ZEND_VM_NEXT_OPCODE();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
zval *op1, *op2;
@@ -57854,6 +54758,9010 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NULL_HANDLER(ZEND_OPCODE_HANDL
}
+ZEND_API void execute_ex(zend_execute_data *ex)
+{
+ DCL_OPLINE
+
+#ifdef ZEND_VM_IP_GLOBAL_REG
+ const zend_op *orig_opline = opline;
+#endif
+#ifdef ZEND_VM_FP_GLOBAL_REG
+ zend_execute_data *orig_execute_data = execute_data;
+ execute_data = ex;
+#else
+ zend_execute_data *execute_data = ex;
+#endif
+
+#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
+ if (UNEXPECTED(execute_data == NULL)) {
+ static const void* labels[] = {
+ (void*)&&ZEND_NOP_SPEC_LABEL,
+ (void*)&&ZEND_ADD_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_ADD_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_ADD_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_ADD_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_ADD_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ADD_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_ADD_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_ADD_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ADD_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_ADD_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ADD_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_SUB_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_SUB_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_SUB_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SUB_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_SUB_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_SUB_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_SUB_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SUB_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_SUB_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_SUB_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_SUB_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SUB_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SUB_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_SUB_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_SUB_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SUB_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_MUL_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_MUL_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_MUL_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_MUL_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_MUL_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_MUL_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_MUL_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_MUL_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_MUL_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_MUL_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_MUL_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_DIV_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_DIV_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_DIV_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_DIV_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_DIV_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_DIV_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_DIV_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_DIV_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_DIV_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_DIV_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_DIV_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_DIV_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_MOD_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_MOD_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_MOD_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MOD_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_MOD_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_MOD_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_MOD_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MOD_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_MOD_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_MOD_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_MOD_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MOD_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MOD_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_MOD_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_MOD_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MOD_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_SL_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_SL_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_SL_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SL_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_SL_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_SL_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_SL_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SL_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_SL_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_SL_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_SL_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SL_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SL_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_SL_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_SL_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SL_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_SR_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_SR_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_SR_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SR_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_SR_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_SR_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_SR_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SR_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_SR_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_SR_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_SR_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SR_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SR_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_SR_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_SR_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SR_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_CONCAT_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_CONCAT_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_CONCAT_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_CONCAT_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_CONCAT_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_CONCAT_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_CONCAT_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_CONCAT_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_CONCAT_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_CONCAT_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_CONCAT_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_CONCAT_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_BW_OR_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_BW_OR_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_BW_OR_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BW_OR_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_BW_OR_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BW_OR_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_BW_OR_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BW_OR_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BW_OR_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_BW_OR_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_BW_OR_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BW_OR_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_BW_AND_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_BW_AND_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_BW_AND_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BW_AND_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_BW_AND_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BW_AND_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_BW_AND_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BW_AND_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BW_AND_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_BW_AND_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_BW_AND_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BW_AND_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_BW_XOR_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_BW_XOR_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_BW_XOR_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BW_XOR_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_BW_XOR_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BW_XOR_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_BW_XOR_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BW_XOR_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BW_XOR_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_BW_XOR_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_BW_XOR_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BW_XOR_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_BW_NOT_SPEC_CONST_LABEL,
+ (void*)&&ZEND_BW_NOT_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_BW_NOT_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BW_NOT_SPEC_CV_LABEL,
+ (void*)&&ZEND_BOOL_NOT_SPEC_CONST_LABEL,
+ (void*)&&ZEND_BOOL_NOT_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_BOOL_NOT_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BOOL_NOT_SPEC_CV_LABEL,
+ (void*)&&ZEND_BOOL_XOR_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_BOOL_XOR_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_BOOL_XOR_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BOOL_XOR_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BOOL_XOR_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_BOOL_XOR_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_BOOL_XOR_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BOOL_XOR_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_IS_IDENTICAL_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_IS_IDENTICAL_SPEC_CONST_TMP_LABEL,
+ (void*)&&ZEND_IS_IDENTICAL_SPEC_CONST_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_IDENTICAL_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_IS_IDENTICAL_SPEC_TMP_CONST_LABEL,
+ (void*)&&ZEND_IS_IDENTICAL_SPEC_TMP_TMP_LABEL,
+ (void*)&&ZEND_IS_IDENTICAL_SPEC_TMP_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_IDENTICAL_SPEC_TMP_CV_LABEL,
+ (void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_TMP_LABEL,
+ (void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_IDENTICAL_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_IS_IDENTICAL_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_IS_IDENTICAL_SPEC_CV_TMP_LABEL,
+ (void*)&&ZEND_IS_IDENTICAL_SPEC_CV_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_IDENTICAL_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CONST_TMP_LABEL,
+ (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CONST_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_LABEL,
+ (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_LABEL,
+ (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_TMP_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CV_LABEL,
+ (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_LABEL,
+ (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_NOT_IDENTICAL_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_IS_NOT_IDENTICAL_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_LABEL,
+ (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_IS_EQUAL_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_IS_EQUAL_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_IS_EQUAL_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_EQUAL_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_EQUAL_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_EQUAL_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_IS_SMALLER_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_IS_SMALLER_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_CAST_SPEC_CONST_LABEL,
+ (void*)&&ZEND_CAST_SPEC_TMP_LABEL,
+ (void*)&&ZEND_CAST_SPEC_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_CAST_SPEC_CV_LABEL,
+ (void*)&&ZEND_QM_ASSIGN_SPEC_CONST_LABEL,
+ (void*)&&ZEND_QM_ASSIGN_SPEC_TMP_LABEL,
+ (void*)&&ZEND_QM_ASSIGN_SPEC_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_QM_ASSIGN_SPEC_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_CONST_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_CONST_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_DIM_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_CV_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_CV_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_CONST_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_CONST_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_DIM_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_CV_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_CV_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_CONST_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_CONST_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_DIM_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_CV_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_CV_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_CONST_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_CONST_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_DIM_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_CV_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_CV_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_CONST_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_CONST_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_UNUSED_DIM_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_CV_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_CV_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_UNUSED_CONST_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_UNUSED_CV_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_CONST_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_CONST_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_UNUSED_DIM_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_CV_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_CV_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_CONST_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_CONST_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_UNUSED_DIM_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_CV_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_CV_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_UNUSED_CONST_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_UNUSED_CV_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_CONST_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_CONST_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_DIM_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_CV_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_CV_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_CONST_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_CONST_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_UNUSED_DIM_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_CV_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_CV_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_UNUSED_CONST_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_UNUSED_CV_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_CONST_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_CONST_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_UNUSED_DIM_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_CV_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_CV_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_CONST_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_CONST_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_UNUSED_DIM_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_CV_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_CV_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_UNUSED_CONST_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_UNUSED_CV_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_CV_CONST_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_CV_CONST_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_CV_UNUSED_DIM_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_CV_CV_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_SL_SPEC_CV_CV_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_CONST_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_CONST_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_UNUSED_DIM_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_CV_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_CV_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_UNUSED_CONST_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_UNUSED_CV_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_CV_CONST_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_CV_CONST_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_CV_UNUSED_DIM_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_CV_CV_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_SR_SPEC_CV_CV_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_UNUSED_DIM_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CONST_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CV_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_UNUSED_DIM_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_CV_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_CV_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_UNUSED_DIM_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CONST_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CV_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_UNUSED_DIM_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_CV_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_CV_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_UNUSED_DIM_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CONST_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CV_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_UNUSED_DIM_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_CV_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_CV_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_UNUSED_DIM_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CONST_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CV_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_DIM_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_PRE_INC_SPEC_CV_RETVAL_USED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POST_INC_SPEC_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POST_INC_SPEC_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POST_DEC_SPEC_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POST_DEC_SPEC_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_LABEL,
+ (void*)&&ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_LABEL,
+ (void*)&&ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_LABEL,
+ (void*)&&ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_LABEL,
+ (void*)&&ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_REF_SPEC_VAR_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_REF_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_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_REF_SPEC_CV_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_REF_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_ECHO_SPEC_CONST_LABEL,
+ (void*)&&ZEND_ECHO_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_ECHO_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ECHO_SPEC_CV_LABEL,
+ (void*)&&ZEND_GENERATOR_CREATE_SPEC_LABEL,
+ (void*)&&ZEND_JMP_SPEC_LABEL,
+ (void*)&&ZEND_JMPZ_SPEC_CONST_LABEL,
+ (void*)&&ZEND_JMPZ_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_JMPZ_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_JMPZ_SPEC_CV_LABEL,
+ (void*)&&ZEND_JMPNZ_SPEC_CONST_LABEL,
+ (void*)&&ZEND_JMPNZ_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_JMPNZ_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_JMPNZ_SPEC_CV_LABEL,
+ (void*)&&ZEND_JMPZNZ_SPEC_CONST_LABEL,
+ (void*)&&ZEND_JMPZNZ_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_JMPZNZ_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_JMPZNZ_SPEC_CV_LABEL,
+ (void*)&&ZEND_JMPZ_EX_SPEC_CONST_LABEL,
+ (void*)&&ZEND_JMPZ_EX_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_JMPZ_EX_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_JMPZ_EX_SPEC_CV_LABEL,
+ (void*)&&ZEND_JMPNZ_EX_SPEC_CONST_LABEL,
+ (void*)&&ZEND_JMPNZ_EX_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_JMPNZ_EX_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_JMPNZ_EX_SPEC_CV_LABEL,
+ (void*)&&ZEND_CASE_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_CASE_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_CASE_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_CASE_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_CASE_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_CASE_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_CASE_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_CASE_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_CASE_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_CASE_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_CASE_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_CASE_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_CASE_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_CASE_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_CASE_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_CASE_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_CHECK_VAR_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_LABEL,
+ (void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_QUICK_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MAKE_REF_SPEC_VAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MAKE_REF_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BOOL_SPEC_CONST_LABEL,
+ (void*)&&ZEND_BOOL_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_BOOL_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BOOL_SPEC_CV_LABEL,
+ (void*)&&ZEND_FAST_CONCAT_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FAST_CONCAT_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FAST_CONCAT_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FAST_CONCAT_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_CONST_LABEL,
+ (void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ROPE_ADD_SPEC_TMP_CONST_LABEL,
+ (void*)&&ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_LABEL,
+ (void*)&&ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ROPE_ADD_SPEC_TMP_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ROPE_END_SPEC_TMP_CONST_LABEL,
+ (void*)&&ZEND_ROPE_END_SPEC_TMP_TMPVAR_LABEL,
+ (void*)&&ZEND_ROPE_END_SPEC_TMP_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ROPE_END_SPEC_TMP_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BEGIN_SILENCE_SPEC_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_END_SILENCE_SPEC_TMP_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_DO_FCALL_SPEC_RETVAL_USED_LABEL,
+ (void*)&&ZEND_INIT_FCALL_SPEC_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_RETURN_SPEC_CONST_LABEL,
+ (void*)&&ZEND_RETURN_SPEC_TMP_LABEL,
+ (void*)&&ZEND_RETURN_SPEC_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_RETURN_SPEC_CV_LABEL,
+ (void*)&&ZEND_RECV_SPEC_LABEL,
+ (void*)&&ZEND_RECV_INIT_SPEC_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SEND_VAL_SPEC_CONST_LABEL,
+ (void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_LABEL,
+ (void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_QUICK_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SEND_VAR_EX_SPEC_CV_LABEL,
+ (void*)&&ZEND_SEND_VAR_EX_SPEC_CV_QUICK_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SEND_REF_SPEC_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SEND_REF_SPEC_CV_LABEL,
+ (void*)&&ZEND_NEW_SPEC_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NEW_SPEC_VAR_LABEL,
+ (void*)&&ZEND_NEW_SPEC_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FREE_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_FREE_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_INIT_ARRAY_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_LABEL,
+ (void*)&&ZEND_INIT_ARRAY_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_INIT_ARRAY_SPEC_TMP_CONST_LABEL,
+ (void*)&&ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_LABEL,
+ (void*)&&ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_LABEL,
+ (void*)&&ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_LABEL,
+ (void*)&&ZEND_INIT_ARRAY_SPEC_TMP_CV_LABEL,
+ (void*)&&ZEND_INIT_ARRAY_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_LABEL,
+ (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_CV_CONST_LABEL,
+ (void*)&&ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_INIT_ARRAY_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_INIT_ARRAY_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_LABEL,
+ (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_LABEL,
+ (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_LABEL,
+ (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_LABEL,
+ (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_LABEL,
+ (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_LABEL,
+ (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_LABEL,
+ (void*)&&ZEND_ADD_ARRAY_ELEMENT_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_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CONST_LABEL,
+ (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_UNSET_VAR_SPEC_CONST_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_UNSET_VAR_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_UNSET_DIM_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_UNSET_DIM_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_UNSET_DIM_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_UNSET_DIM_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_UNSET_DIM_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_UNSET_DIM_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_UNSET_OBJ_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_UNSET_OBJ_SPEC_VAR_CV_LABEL,
+ (void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_LABEL,
+ (void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_CV_LABEL,
+ (void*)&&ZEND_UNSET_OBJ_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_UNSET_OBJ_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_FE_RESET_R_SPEC_CONST_LABEL,
+ (void*)&&ZEND_FE_RESET_R_SPEC_TMP_LABEL,
+ (void*)&&ZEND_FE_RESET_R_SPEC_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FE_RESET_R_SPEC_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FE_FETCH_R_SPEC_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_EXIT_SPEC_CONST_LABEL,
+ (void*)&&ZEND_EXIT_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_EXIT_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_EXIT_SPEC_UNUSED_LABEL,
+ (void*)&&ZEND_EXIT_SPEC_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_R_SPEC_CONST_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_R_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMP_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMP_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMP_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMP_CV_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_R_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_R_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_R_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_R_SPEC_VAR_CV_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_W_SPEC_CONST_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_W_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_LABEL,
+ (void*)&&ZEND_FETCH_DIM_W_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_FETCH_DIM_W_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_FETCH_DIM_W_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_CV_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_RW_SPEC_CONST_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_RW_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_LABEL,
+ (void*)&&ZEND_FETCH_DIM_RW_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_FETCH_DIM_RW_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_IS_SPEC_CONST_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_IS_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_LABEL,
+ (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_LABEL,
+ (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_LABEL,
+ (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_LABEL,
+ (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_LABEL,
+ (void*)&&ZEND_FETCH_DIM_FUNC_ARG_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_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_UNSET_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_DIM_UNSET_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_FETCH_DIM_UNSET_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_FETCH_LIST_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_FETCH_LIST_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_LIST_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_LIST_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_FETCH_LIST_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_FETCH_LIST_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_LIST_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_LIST_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_FETCH_LIST_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_FETCH_LIST_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_LIST_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_LIST_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_LIST_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_FETCH_LIST_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_LIST_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_LIST_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_EXT_STMT_SPEC_LABEL,
+ (void*)&&ZEND_EXT_FCALL_BEGIN_SPEC_LABEL,
+ (void*)&&ZEND_EXT_FCALL_END_SPEC_LABEL,
+ (void*)&&ZEND_EXT_NOP_SPEC_LABEL,
+ (void*)&&ZEND_TICKS_SPEC_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SEND_VAR_NO_REF_SPEC_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_CATCH_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_THROW_SPEC_CONST_LABEL,
+ (void*)&&ZEND_THROW_SPEC_TMP_LABEL,
+ (void*)&&ZEND_THROW_SPEC_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_THROW_SPEC_CV_LABEL,
+ (void*)&&ZEND_FETCH_CLASS_SPEC_CONST_LABEL,
+ (void*)&&ZEND_FETCH_CLASS_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_CLASS_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_LABEL,
+ (void*)&&ZEND_FETCH_CLASS_SPEC_CV_LABEL,
+ (void*)&&ZEND_CLONE_SPEC_CONST_LABEL,
+ (void*)&&ZEND_CLONE_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_CLONE_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_CLONE_SPEC_UNUSED_LABEL,
+ (void*)&&ZEND_CLONE_SPEC_CV_LABEL,
+ (void*)&&ZEND_RETURN_BY_REF_SPEC_CONST_LABEL,
+ (void*)&&ZEND_RETURN_BY_REF_SPEC_TMP_LABEL,
+ (void*)&&ZEND_RETURN_BY_REF_SPEC_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_RETURN_BY_REF_SPEC_CV_LABEL,
+ (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_LABEL,
+ (void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_LABEL,
+ (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_LABEL,
+ (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_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_STATIC_METHOD_CALL_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_LABEL,
+ (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_LABEL,
+ (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_LABEL,
+ (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_LABEL,
+ (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_LABEL,
+ (void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_QUICK_LABEL,
+ (void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_LABEL,
+ (void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_QUICK_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SEND_VAR_SPEC_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SEND_VAR_SPEC_CV_LABEL,
+ (void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SEND_ARRAY_SPEC_LABEL,
+ (void*)&&ZEND_SEND_USER_SPEC_CONST_LABEL,
+ (void*)&&ZEND_SEND_USER_SPEC_TMP_LABEL,
+ (void*)&&ZEND_SEND_USER_SPEC_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SEND_USER_SPEC_CV_LABEL,
+ (void*)&&ZEND_STRLEN_SPEC_CONST_LABEL,
+ (void*)&&ZEND_STRLEN_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_STRLEN_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_STRLEN_SPEC_CV_LABEL,
+ (void*)&&ZEND_DEFINED_SPEC_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_TYPE_CHECK_SPEC_CONST_LABEL,
+ (void*)&&ZEND_TYPE_CHECK_SPEC_TMP_LABEL,
+ (void*)&&ZEND_TYPE_CHECK_SPEC_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_TYPE_CHECK_SPEC_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FE_RESET_RW_SPEC_CONST_LABEL,
+ (void*)&&ZEND_FE_RESET_RW_SPEC_TMP_LABEL,
+ (void*)&&ZEND_FE_RESET_RW_SPEC_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FE_RESET_RW_SPEC_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FE_FETCH_RW_SPEC_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FE_FREE_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_FE_FREE_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_LABEL,
+ (void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_CV_LABEL,
+ (void*)&&ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_DO_ICALL_SPEC_RETVAL_USED_LABEL,
+ (void*)&&ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_DO_UCALL_SPEC_RETVAL_USED_LABEL,
+ (void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_CV_LABEL,
+ (void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_LABEL,
+ (void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_LABEL,
+ (void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_PRE_DEC_OBJ_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_PRE_DEC_OBJ_SPEC_VAR_CV_LABEL,
+ (void*)&&ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CONST_LABEL,
+ (void*)&&ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CV_LABEL,
+ (void*)&&ZEND_PRE_DEC_OBJ_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_PRE_DEC_OBJ_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_CV_LABEL,
+ (void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_LABEL,
+ (void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_LABEL,
+ (void*)&&ZEND_POST_INC_OBJ_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POST_INC_OBJ_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POST_DEC_OBJ_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POST_DEC_OBJ_SPEC_VAR_CV_LABEL,
+ (void*)&&ZEND_POST_DEC_OBJ_SPEC_UNUSED_CONST_LABEL,
+ (void*)&&ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POST_DEC_OBJ_SPEC_UNUSED_CV_LABEL,
+ (void*)&&ZEND_POST_DEC_OBJ_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POST_DEC_OBJ_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_LABEL,
+ (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_LABEL,
+ (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_INSTANCEOF_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_INSTANCEOF_SPEC_CV_VAR_LABEL,
+ (void*)&&ZEND_INSTANCEOF_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_DECLARE_CLASS_SPEC_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_DECLARE_INHERITED_CLASS_SPEC_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_DECLARE_FUNCTION_SPEC_LABEL,
+ (void*)&&ZEND_YIELD_FROM_SPEC_CONST_LABEL,
+ (void*)&&ZEND_YIELD_FROM_SPEC_TMP_LABEL,
+ (void*)&&ZEND_YIELD_FROM_SPEC_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_YIELD_FROM_SPEC_CV_LABEL,
+ (void*)&&ZEND_DECLARE_CONST_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_INTERFACE_SPEC_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_VERIFY_ABSTRACT_CLASS_SPEC_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_HANDLE_EXCEPTION_SPEC_LABEL,
+ (void*)&&ZEND_USER_OPCODE_SPEC_LABEL,
+ (void*)&&ZEND_ASSERT_CHECK_SPEC_LABEL,
+ (void*)&&ZEND_JMP_SET_SPEC_CONST_LABEL,
+ (void*)&&ZEND_JMP_SET_SPEC_TMP_LABEL,
+ (void*)&&ZEND_JMP_SET_SPEC_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_JMP_SET_SPEC_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_TRAIT_SPEC_LABEL,
+ (void*)&&ZEND_BIND_TRAITS_SPEC_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SEPARATE_SPEC_VAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_CLASS_NAME_SPEC_LABEL,
+ (void*)&&ZEND_CALL_TRAMPOLINE_SPEC_LABEL,
+ (void*)&&ZEND_DISCARD_EXCEPTION_SPEC_LABEL,
+ (void*)&&ZEND_YIELD_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_YIELD_SPEC_CONST_TMP_LABEL,
+ (void*)&&ZEND_YIELD_SPEC_CONST_VAR_LABEL,
+ (void*)&&ZEND_YIELD_SPEC_CONST_UNUSED_LABEL,
+ (void*)&&ZEND_YIELD_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_YIELD_SPEC_TMP_CONST_LABEL,
+ (void*)&&ZEND_YIELD_SPEC_TMP_TMP_LABEL,
+ (void*)&&ZEND_YIELD_SPEC_TMP_VAR_LABEL,
+ (void*)&&ZEND_YIELD_SPEC_TMP_UNUSED_LABEL,
+ (void*)&&ZEND_YIELD_SPEC_TMP_CV_LABEL,
+ (void*)&&ZEND_YIELD_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_YIELD_SPEC_VAR_TMP_LABEL,
+ (void*)&&ZEND_YIELD_SPEC_VAR_VAR_LABEL,
+ (void*)&&ZEND_YIELD_SPEC_VAR_UNUSED_LABEL,
+ (void*)&&ZEND_YIELD_SPEC_VAR_CV_LABEL,
+ (void*)&&ZEND_YIELD_SPEC_UNUSED_CONST_LABEL,
+ (void*)&&ZEND_YIELD_SPEC_UNUSED_TMP_LABEL,
+ (void*)&&ZEND_YIELD_SPEC_UNUSED_VAR_LABEL,
+ (void*)&&ZEND_YIELD_SPEC_UNUSED_UNUSED_LABEL,
+ (void*)&&ZEND_YIELD_SPEC_UNUSED_CV_LABEL,
+ (void*)&&ZEND_YIELD_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_YIELD_SPEC_CV_TMP_LABEL,
+ (void*)&&ZEND_YIELD_SPEC_CV_VAR_LABEL,
+ (void*)&&ZEND_YIELD_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_YIELD_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_GENERATOR_RETURN_SPEC_CONST_LABEL,
+ (void*)&&ZEND_GENERATOR_RETURN_SPEC_TMP_LABEL,
+ (void*)&&ZEND_GENERATOR_RETURN_SPEC_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_GENERATOR_RETURN_SPEC_CV_LABEL,
+ (void*)&&ZEND_FAST_CALL_SPEC_LABEL,
+ (void*)&&ZEND_FAST_RET_SPEC_LABEL,
+ (void*)&&ZEND_RECV_VARIADIC_SPEC_LABEL,
+ (void*)&&ZEND_SEND_UNPACK_SPEC_LABEL,
+ (void*)&&ZEND_POW_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_POW_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_POW_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POW_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_POW_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POW_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_POW_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POW_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POW_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_POW_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_POW_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POW_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_CONST_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_CONST_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_UNUSED_DIM_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_CV_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_CV_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_UNUSED_CONST_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_UNUSED_CV_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_CV_CONST_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_CV_CONST_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_CV_UNUSED_DIM_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_CV_CV_DIM_LABEL,
+ (void*)&&ZEND_ASSIGN_POW_SPEC_CV_CV_OBJ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BIND_GLOBAL_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_COALESCE_SPEC_CONST_LABEL,
+ (void*)&&ZEND_COALESCE_SPEC_TMP_LABEL,
+ (void*)&&ZEND_COALESCE_SPEC_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_COALESCE_SPEC_CV_LABEL,
+ (void*)&&ZEND_SPACESHIP_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_SPACESHIP_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_SPACESHIP_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SPACESHIP_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SPACESHIP_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_SPACESHIP_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_SPACESHIP_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SPACESHIP_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_DECLARE_ANON_CLASS_SPEC_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_VAR_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_VAR_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_VAR_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_CV_VAR_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_VAR_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_VAR_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_VAR_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_CV_VAR_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_VAR_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_VAR_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_VAR_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_VAR_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_VAR_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_VAR_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_VAR_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_VAR_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_VAR_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_VAR_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_VAR_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_VAR_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_VAR_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_VAR_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_VAR_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_VAR_LABEL,
+ (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_CONST_VAR_LABEL,
+ (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_CONST_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_VAR_LABEL,
+ (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_VAR_LABEL,
+ (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_CV_VAR_LABEL,
+ (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_VAR_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_VAR_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_VAR_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_VAR_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BIND_LEXICAL_SPEC_TMP_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_BIND_STATIC_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SWITCH_LONG_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SWITCH_LONG_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SWITCH_LONG_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SWITCH_LONG_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SWITCH_STRING_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SWITCH_STRING_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SWITCH_STRING_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SWITCH_STRING_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IN_ARRAY_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IN_ARRAY_SPEC_TMP_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IN_ARRAY_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IN_ARRAY_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_COUNT_SPEC_CONST_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_COUNT_SPEC_TMP_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_COUNT_SPEC_VAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_COUNT_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_GET_CLASS_SPEC_CONST_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_GET_CLASS_SPEC_TMP_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_GET_CLASS_SPEC_VAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_GET_CLASS_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_GET_TYPE_SPEC_CONST_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_GET_TYPE_SPEC_TMP_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_GET_TYPE_SPEC_VAR_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_GET_TYPE_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_UNSET_CV_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_LONG_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_ADD_LONG_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_LONG_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_ADD_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
+ (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
+ (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
+ (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
+ (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
+ (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
+ (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
+ (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
+ (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
+ (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_LONG_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_MUL_LONG_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_LONG_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_MUL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
+ (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_USED_LABEL,
+ (void*)&&ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_USED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_USED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_PRE_INC_LONG_SPEC_TMPVARCV_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_PRE_INC_LONG_SPEC_TMPVARCV_RETVAL_USED_LABEL,
+ (void*)&&ZEND_PRE_INC_LONG_SPEC_TMPVARCV_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_PRE_INC_LONG_SPEC_TMPVARCV_RETVAL_USED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_PRE_INC_LONG_SPEC_TMPVARCV_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_PRE_INC_LONG_SPEC_TMPVARCV_RETVAL_USED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_USED_LABEL,
+ (void*)&&ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_USED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_USED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_USED_LABEL,
+ (void*)&&ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_USED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_USED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_PRE_DEC_LONG_SPEC_TMPVARCV_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_PRE_DEC_LONG_SPEC_TMPVARCV_RETVAL_USED_LABEL,
+ (void*)&&ZEND_PRE_DEC_LONG_SPEC_TMPVARCV_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_PRE_DEC_LONG_SPEC_TMPVARCV_RETVAL_USED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_PRE_DEC_LONG_SPEC_TMPVARCV_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_PRE_DEC_LONG_SPEC_TMPVARCV_RETVAL_USED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_USED_LABEL,
+ (void*)&&ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_USED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_USED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_LABEL,
+ (void*)&&ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POST_INC_LONG_SPEC_TMPVARCV_LABEL,
+ (void*)&&ZEND_POST_INC_LONG_SPEC_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POST_INC_LONG_SPEC_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POST_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_LABEL,
+ (void*)&&ZEND_POST_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POST_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_LABEL,
+ (void*)&&ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POST_DEC_LONG_SPEC_TMPVARCV_LABEL,
+ (void*)&&ZEND_POST_DEC_LONG_SPEC_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POST_DEC_LONG_SPEC_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POST_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_LABEL,
+ (void*)&&ZEND_POST_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_POST_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_LABEL,
+ (void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_LABEL,
+ (void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
+ (void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
+ (void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_CONST_LABEL,
+ (void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
+ (void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_CONST_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_CV_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SEND_VAR_SIMPLE_SPEC_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SEND_VAR_SIMPLE_SPEC_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_LABEL,
+ (void*)&&ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_QUICK_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_LABEL,
+ (void*)&&ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_QUICK_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_LABEL,
+ (void*)&&ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL
+ };
+ zend_opcode_handlers = (const void **) labels;
+ zend_handlers_count = sizeof(labels) / sizeof(void*);
+ memset(&hybrid_halt_op, 0, sizeof(hybrid_halt_op));
+ hybrid_halt_op.handler = (void*)&&HYBRID_HALT_LABEL;
+ goto HYBRID_HALT_LABEL;
+ }
+#endif
+
+ LOAD_OPLINE();
+ ZEND_VM_LOOP_INTERRUPT_CHECK();
+
+ while (1) {
+#if !defined(ZEND_VM_FP_GLOBAL_REG) || !defined(ZEND_VM_IP_GLOBAL_REG)
+ int ret;
+#endif
+#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
+ HYBRID_SWITCH() {
+#else
+#if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
+ ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ if (UNEXPECTED(!OPLINE)) {
+#else
+ if (UNEXPECTED((ret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)) != 0)) {
+#endif
+#endif
+#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
+ HYBRID_CASE(ZEND_JMP_SPEC):
+ ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DO_ICALL_SPEC_RETVAL_UNUSED):
+ ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DO_ICALL_SPEC_RETVAL_USED):
+ ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED):
+ ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DO_UCALL_SPEC_RETVAL_USED):
+ ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED):
+ ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED):
+ ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED):
+ ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_USED):
+ ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_GENERATOR_CREATE_SPEC):
+ ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_UNPACK_SPEC):
+ ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_ARRAY_SPEC):
+ ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_RECV_SPEC):
+ ZEND_RECV_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_RECV_VARIADIC_SPEC):
+ ZEND_RECV_VARIADIC_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BEGIN_SILENCE_SPEC):
+ ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_EXT_STMT_SPEC):
+ ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_EXT_FCALL_BEGIN_SPEC):
+ ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_EXT_FCALL_END_SPEC):
+ ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DECLARE_CLASS_SPEC):
+ ZEND_DECLARE_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DECLARE_ANON_CLASS_SPEC):
+ ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DECLARE_FUNCTION_SPEC):
+ ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_TICKS_SPEC):
+ ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_EXT_NOP_SPEC):
+ ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_NOP_SPEC):
+ ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_TRAIT_SPEC):
+ ZEND_ADD_TRAIT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BIND_TRAITS_SPEC):
+ ZEND_BIND_TRAITS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_HANDLE_EXCEPTION_SPEC):
+ ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_VERIFY_ABSTRACT_CLASS_SPEC):
+ ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_USER_OPCODE_SPEC):
+ ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DISCARD_EXCEPTION_SPEC):
+ ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FAST_CALL_SPEC):
+ ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FAST_RET_SPEC):
+ ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSERT_CHECK_SPEC):
+ ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_CLASS_NAME_SPEC):
+ ZEND_FETCH_CLASS_NAME_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CALL_TRAMPOLINE_SPEC):
+ ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_CONST):
+ ZEND_FETCH_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_FCALL_BY_NAME_SPEC_CONST):
+ ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_CONST):
+ ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST):
+ ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_FCALL_SPEC_CONST):
+ ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_RECV_INIT_SPEC_CONST):
+ ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_INTERFACE_SPEC_CONST):
+ ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DECLARE_INHERITED_CLASS_SPEC_VAR):
+ ZEND_DECLARE_INHERITED_CLASS_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_VAR):
+ ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_VAR):
+ ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED):
+ ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_CV):
+ ZEND_FETCH_CLASS_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_CV):
+ ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_TMPVAR):
+ ZEND_FETCH_CLASS_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR):
+ ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_NOT_SPEC_CONST):
+ ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BOOL_NOT_SPEC_CONST):
+ ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ECHO_SPEC_CONST):
+ ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_JMPZ_SPEC_CONST):
+ ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_JMPNZ_SPEC_CONST):
+ ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_JMPZNZ_SPEC_CONST):
+ ZEND_JMPZNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_JMPZ_EX_SPEC_CONST):
+ ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_CONST):
+ ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_RETURN_SPEC_CONST):
+ ZEND_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_CONST):
+ ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CONST):
+ ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_THROW_SPEC_CONST):
+ ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_VAL_SPEC_CONST):
+ ZEND_SEND_VAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST):
+ ZEND_SEND_VAL_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST_QUICK):
+ ZEND_SEND_VAL_EX_SPEC_CONST_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_USER_SPEC_CONST):
+ ZEND_SEND_USER_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BOOL_SPEC_CONST):
+ ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_NEW_SPEC_CONST):
+ ZEND_NEW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CLONE_SPEC_CONST):
+ ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CAST_SPEC_CONST):
+ ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_CONST):
+ ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FE_RESET_R_SPEC_CONST):
+ ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_CONST):
+ ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_EXIT_SPEC_CONST):
+ ZEND_EXIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_JMP_SET_SPEC_CONST):
+ ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_COALESCE_SPEC_CONST):
+ ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_CONST):
+ ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_FROM_SPEC_CONST):
+ ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_STRLEN_SPEC_CONST):
+ ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_CONST):
+ ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DEFINED_SPEC_CONST):
+ ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST):
+ ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_QM_ASSIGN_NOREF_SPEC_CONST):
+ ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_SPEC_CONST_CONST):
+ ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SUB_SPEC_CONST_CONST):
+ ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_MUL_SPEC_CONST_CONST):
+ ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DIV_SPEC_CONST_CONST):
+ ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_MOD_SPEC_CONST_CONST):
+ ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SL_SPEC_CONST_CONST):
+ ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SR_SPEC_CONST_CONST):
+ ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POW_SPEC_CONST_CONST):
+ ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CONCAT_SPEC_CONST_CONST):
+ ZEND_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CONST_CONST):
+ ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST):
+ ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CONST_CONST):
+ ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST):
+ ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_CONST):
+ ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST):
+ ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_CONST):
+ ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_OR_SPEC_CONST_CONST):
+ ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_AND_SPEC_CONST_CONST):
+ ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_XOR_SPEC_CONST_CONST):
+ ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CONST_CONST):
+ ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_CONST):
+ ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_CONST):
+ ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_CONST):
+ ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_CONST):
+ ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_CONST):
+ ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_CONST):
+ ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_CONST):
+ ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_CONST):
+ ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST):
+ ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST):
+ ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST):
+ ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST):
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_LIST_SPEC_CONST_CONST):
+ ZEND_FETCH_LIST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_CONST):
+ ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST):
+ ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST):
+ ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_CONST):
+ ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CASE_SPEC_CONST_CONST):
+ ZEND_CASE_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST):
+ ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST):
+ ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_CONST):
+ ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC_CONST_CONST):
+ ZEND_UNSET_STATIC_PROP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_CONST):
+ ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST):
+ ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST):
+ ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DECLARE_CONST_SPEC_CONST_CONST):
+ ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_SPEC_CONST_CONST):
+ ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SWITCH_LONG_SPEC_CONST_CONST):
+ ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SWITCH_STRING_SPEC_CONST_CONST):
+ ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IN_ARRAY_SPEC_CONST_CONST):
+ ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_CONST):
+ ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CONST_TMP):
+ ZEND_IS_IDENTICAL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CONST_TMP):
+ ZEND_IS_NOT_IDENTICAL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_SPEC_CONST_TMP):
+ ZEND_YIELD_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CONST_VAR):
+ ZEND_IS_IDENTICAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CONST_VAR):
+ ZEND_IS_NOT_IDENTICAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_VAR):
+ ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_VAR):
+ ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_VAR):
+ ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_VAR):
+ ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_VAR):
+ ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_VAR):
+ ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC_CONST_VAR):
+ ZEND_UNSET_STATIC_PROP_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_VAR):
+ ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_SPEC_CONST_VAR):
+ ZEND_YIELD_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_R_SPEC_CONST_UNUSED):
+ ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_W_SPEC_CONST_UNUSED):
+ ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_RW_SPEC_CONST_UNUSED):
+ ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED):
+ ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_CONST_UNUSED):
+ ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_IS_SPEC_CONST_UNUSED):
+ ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_UNUSED):
+ ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_UNUSED):
+ ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_UNUSED):
+ ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_UNUSED):
+ ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_UNUSED):
+ ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_UNUSED):
+ ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED):
+ ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED):
+ ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED):
+ ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED):
+ ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_UNUSED):
+ ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_UNSET_VAR_SPEC_CONST_UNUSED):
+ ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC_CONST_UNUSED):
+ ZEND_UNSET_STATIC_PROP_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED):
+ ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_UNUSED):
+ ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED):
+ ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_SPEC_CONST_UNUSED):
+ ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_COUNT_SPEC_CONST_UNUSED):
+ ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_GET_CLASS_SPEC_CONST_UNUSED):
+ ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_GET_TYPE_SPEC_CONST_UNUSED):
+ ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED):
+ ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_SPEC_CONST_CV):
+ ZEND_ADD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SUB_SPEC_CONST_CV):
+ ZEND_SUB_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_MUL_SPEC_CONST_CV):
+ ZEND_MUL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DIV_SPEC_CONST_CV):
+ ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_MOD_SPEC_CONST_CV):
+ ZEND_MOD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SL_SPEC_CONST_CV):
+ ZEND_SL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SR_SPEC_CONST_CV):
+ ZEND_SR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POW_SPEC_CONST_CV):
+ ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CONCAT_SPEC_CONST_CV):
+ ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CONST_CV):
+ ZEND_IS_IDENTICAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CV):
+ ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CONST_CV):
+ ZEND_IS_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CONST_CV):
+ ZEND_IS_NOT_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_CV):
+ ZEND_IS_SMALLER_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV):
+ ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_CV):
+ ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_OR_SPEC_CONST_CV):
+ ZEND_BW_OR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_AND_SPEC_CONST_CV):
+ ZEND_BW_AND_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_XOR_SPEC_CONST_CV):
+ ZEND_BW_XOR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CONST_CV):
+ ZEND_BOOL_XOR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_CV):
+ ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_CV):
+ ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV):
+ ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_CV):
+ ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CV):
+ ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV):
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_LIST_SPEC_CONST_CV):
+ ZEND_FETCH_LIST_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_CV):
+ ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CV):
+ ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV):
+ ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_CV):
+ ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CATCH_SPEC_CONST_CV):
+ ZEND_CATCH_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CASE_SPEC_CONST_CV):
+ ZEND_CASE_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV):
+ ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_CV):
+ ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV):
+ ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV):
+ ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_SPEC_CONST_CV):
+ ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_CV):
+ ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_SPEC_CONST_TMPVAR):
+ ZEND_ADD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SUB_SPEC_CONST_TMPVAR):
+ ZEND_SUB_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_MUL_SPEC_CONST_TMPVAR):
+ ZEND_MUL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DIV_SPEC_CONST_TMPVAR):
+ ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_MOD_SPEC_CONST_TMPVAR):
+ ZEND_MOD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SL_SPEC_CONST_TMPVAR):
+ ZEND_SL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SR_SPEC_CONST_TMPVAR):
+ ZEND_SR_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POW_SPEC_CONST_TMPVAR):
+ ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CONCAT_SPEC_CONST_TMPVAR):
+ ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CONST_TMPVAR):
+ ZEND_IS_EQUAL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CONST_TMPVAR):
+ ZEND_IS_NOT_EQUAL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_TMPVAR):
+ ZEND_IS_SMALLER_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR):
+ ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_TMPVAR):
+ ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_OR_SPEC_CONST_TMPVAR):
+ ZEND_BW_OR_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_AND_SPEC_CONST_TMPVAR):
+ ZEND_BW_AND_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_XOR_SPEC_CONST_TMPVAR):
+ ZEND_BW_XOR_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CONST_TMPVAR):
+ ZEND_BOOL_XOR_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR):
+ ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR):
+ ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR):
+ ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR):
+ ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR):
+ ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR):
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_LIST_SPEC_CONST_TMPVAR):
+ ZEND_FETCH_LIST_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR):
+ ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR):
+ ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR):
+ ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR):
+ ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CASE_SPEC_CONST_TMPVAR):
+ ZEND_CASE_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR):
+ ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR):
+ ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR):
+ ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR):
+ ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVAR):
+ ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV):
+ ZEND_ADD_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_LONG_SPEC_CONST_TMPVARCV):
+ ZEND_ADD_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_DOUBLE_SPEC_CONST_TMPVARCV):
+ ZEND_ADD_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV):
+ ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SUB_LONG_SPEC_CONST_TMPVARCV):
+ ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV):
+ ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV):
+ ZEND_MUL_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_MUL_LONG_SPEC_CONST_TMPVARCV):
+ ZEND_MUL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_MUL_DOUBLE_SPEC_CONST_TMPVARCV):
+ ZEND_MUL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV):
+ ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ):
+ ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ):
+ ZEND_IS_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV):
+ ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ):
+ ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ):
+ ZEND_IS_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV):
+ ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ):
+ ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ):
+ ZEND_IS_NOT_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV):
+ ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ):
+ ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ):
+ ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV):
+ ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ):
+ ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ):
+ ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV):
+ ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ):
+ ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ):
+ ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV):
+ ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ):
+ ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ):
+ ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV):
+ ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ):
+ ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ):
+ ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_RETURN_SPEC_TMP):
+ ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_TMP):
+ ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_TMP):
+ ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_THROW_SPEC_TMP):
+ ZEND_THROW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP):
+ ZEND_SEND_VAL_EX_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP_QUICK):
+ ZEND_SEND_VAL_EX_SPEC_TMP_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_USER_SPEC_TMP):
+ ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CAST_SPEC_TMP):
+ ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FE_RESET_R_SPEC_TMP):
+ ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_TMP):
+ ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_END_SILENCE_SPEC_TMP):
+ ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_JMP_SET_SPEC_TMP):
+ ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_COALESCE_SPEC_TMP):
+ ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_TMP):
+ ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_FROM_SPEC_TMP):
+ ZEND_YIELD_FROM_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_TMP):
+ ZEND_TYPE_CHECK_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_TMP_CONST):
+ ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST):
+ ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST):
+ ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMP_CONST):
+ ZEND_FETCH_OBJ_R_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST):
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_CONST):
+ ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_CONST):
+ ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST):
+ ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_CONST):
+ ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_SPEC_TMP_CONST):
+ ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IN_ARRAY_SPEC_TMP_CONST):
+ ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_TMP_TMP):
+ ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP):
+ ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_SPEC_TMP_TMP):
+ ZEND_YIELD_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_TMP_VAR):
+ ZEND_IS_IDENTICAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_VAR):
+ ZEND_IS_NOT_IDENTICAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_SPEC_TMP_VAR):
+ ZEND_YIELD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED):
+ ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED):
+ ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED):
+ ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_UNUSED):
+ ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_SPEC_TMP_UNUSED):
+ ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_COUNT_SPEC_TMP_UNUSED):
+ ZEND_COUNT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_GET_CLASS_SPEC_TMP_UNUSED):
+ ZEND_GET_CLASS_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_GET_TYPE_SPEC_TMP_UNUSED):
+ ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_TMP_CV):
+ ZEND_IS_IDENTICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CV):
+ ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV):
+ ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMP_CV):
+ ZEND_FETCH_OBJ_R_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV):
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_CV):
+ ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_CV):
+ ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV):
+ ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_CV):
+ ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_SPEC_TMP_CV):
+ ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BIND_LEXICAL_SPEC_TMP_CV):
+ ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR):
+ ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMP_TMPVAR):
+ ZEND_FETCH_OBJ_R_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR):
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_TMPVAR):
+ ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_TMPVAR):
+ ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR):
+ ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR):
+ ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED):
+ ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_INC_SPEC_VAR_RETVAL_USED):
+ ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED):
+ ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED):
+ ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_INC_SPEC_VAR):
+ ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_DEC_SPEC_VAR):
+ ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_RETURN_SPEC_VAR):
+ ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_VAR):
+ ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_VAR):
+ ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_THROW_SPEC_VAR):
+ ZEND_THROW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_VAR_SPEC_VAR):
+ ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_VAR_NO_REF_SPEC_VAR):
+ ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR):
+ ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_QUICK):
+ ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_REF_SPEC_VAR):
+ ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR):
+ ZEND_SEND_VAR_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR_QUICK):
+ ZEND_SEND_VAR_EX_SPEC_VAR_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_USER_SPEC_VAR):
+ ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_NEW_SPEC_VAR):
+ ZEND_NEW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CAST_SPEC_VAR):
+ ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FE_RESET_R_SPEC_VAR):
+ ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_VAR):
+ ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FE_FETCH_R_SPEC_VAR):
+ ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FE_FETCH_RW_SPEC_VAR):
+ ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_JMP_SET_SPEC_VAR):
+ ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_COALESCE_SPEC_VAR):
+ ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_VAR):
+ ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_FROM_SPEC_VAR):
+ ZEND_YIELD_FROM_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_VAR):
+ ZEND_TYPE_CHECK_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_VAR_SIMPLE_SPEC_VAR):
+ ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR):
+ ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_QUICK):
+ ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_CONST):
+ ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST):
+ ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_CONST):
+ ZEND_ASSIGN_ADD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_CONST_DIM):
+ ZEND_ASSIGN_ADD_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_CONST_OBJ):
+ ZEND_ASSIGN_ADD_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_CONST):
+ ZEND_ASSIGN_SUB_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_CONST_DIM):
+ ZEND_ASSIGN_SUB_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_CONST_OBJ):
+ ZEND_ASSIGN_SUB_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_CONST):
+ ZEND_ASSIGN_MUL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_CONST_DIM):
+ ZEND_ASSIGN_MUL_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_CONST_OBJ):
+ ZEND_ASSIGN_MUL_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_CONST):
+ ZEND_ASSIGN_DIV_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_CONST_DIM):
+ ZEND_ASSIGN_DIV_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_CONST_OBJ):
+ ZEND_ASSIGN_DIV_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_CONST):
+ ZEND_ASSIGN_MOD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_CONST_DIM):
+ ZEND_ASSIGN_MOD_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_CONST_OBJ):
+ ZEND_ASSIGN_MOD_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_CONST):
+ ZEND_ASSIGN_SL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_CONST_DIM):
+ ZEND_ASSIGN_SL_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_CONST_OBJ):
+ ZEND_ASSIGN_SL_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_CONST):
+ ZEND_ASSIGN_SR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_CONST_DIM):
+ ZEND_ASSIGN_SR_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_CONST_OBJ):
+ ZEND_ASSIGN_SR_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST):
+ ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_DIM):
+ ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_OBJ):
+ ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST):
+ ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_DIM):
+ ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_OBJ):
+ ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST):
+ ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_DIM):
+ ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_OBJ):
+ ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST):
+ ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_DIM):
+ ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_OBJ):
+ ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_CONST):
+ ZEND_ASSIGN_POW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_CONST_DIM):
+ ZEND_ASSIGN_POW_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_CONST_OBJ):
+ ZEND_ASSIGN_POW_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_CONST):
+ ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_DEC_OBJ_SPEC_VAR_CONST):
+ ZEND_PRE_DEC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_CONST):
+ ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_DEC_OBJ_SPEC_VAR_CONST):
+ ZEND_POST_DEC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_CONST):
+ ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_CONST):
+ ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST):
+ ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST):
+ ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_VAR_CONST):
+ ZEND_FETCH_OBJ_R_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST):
+ ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST):
+ ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST):
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST):
+ ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST):
+ ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP):
+ ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR):
+ ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV):
+ ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST):
+ ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP):
+ ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR):
+ ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV):
+ ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED):
+ ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED):
+ ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST):
+ ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST):
+ ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST):
+ ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_CONST):
+ ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_CONST):
+ ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_CONST):
+ ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_SPEC_VAR_CONST):
+ ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IN_ARRAY_SPEC_VAR_CONST):
+ ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_TMP):
+ ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP):
+ ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED):
+ ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED):
+ ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_SPEC_VAR_TMP):
+ ZEND_YIELD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_VAR):
+ ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR):
+ ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED):
+ ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED):
+ ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_VAR_VAR):
+ ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_SPEC_VAR_VAR):
+ ZEND_YIELD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_DIM):
+ ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_DIM):
+ ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_UNUSED_DIM):
+ ZEND_ASSIGN_MUL_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_UNUSED_DIM):
+ ZEND_ASSIGN_DIV_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_UNUSED_DIM):
+ ZEND_ASSIGN_MOD_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_UNUSED_DIM):
+ ZEND_ASSIGN_SL_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_UNUSED_DIM):
+ ZEND_ASSIGN_SR_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_UNUSED_DIM):
+ ZEND_ASSIGN_CONCAT_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_UNUSED_DIM):
+ ZEND_ASSIGN_BW_OR_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_UNUSED_DIM):
+ ZEND_ASSIGN_BW_AND_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_UNUSED_DIM):
+ ZEND_ASSIGN_BW_XOR_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_UNUSED_DIM):
+ ZEND_ASSIGN_POW_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED):
+ ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED):
+ ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED):
+ ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST):
+ ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP):
+ ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR):
+ ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV):
+ ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED):
+ ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED):
+ ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED):
+ ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_UNUSED):
+ ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEPARATE_SPEC_VAR_UNUSED):
+ ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_SPEC_VAR_UNUSED):
+ ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_MAKE_REF_SPEC_VAR_UNUSED):
+ ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_COUNT_SPEC_VAR_UNUSED):
+ ZEND_COUNT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_GET_CLASS_SPEC_VAR_UNUSED):
+ ZEND_GET_CLASS_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_GET_TYPE_SPEC_VAR_UNUSED):
+ ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_CV):
+ ZEND_IS_IDENTICAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CV):
+ ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_CV):
+ ZEND_ASSIGN_ADD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_CV_DIM):
+ ZEND_ASSIGN_ADD_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_CV_OBJ):
+ ZEND_ASSIGN_ADD_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_CV):
+ ZEND_ASSIGN_SUB_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_CV_DIM):
+ ZEND_ASSIGN_SUB_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_CV_OBJ):
+ ZEND_ASSIGN_SUB_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_CV):
+ ZEND_ASSIGN_MUL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_CV_DIM):
+ ZEND_ASSIGN_MUL_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_CV_OBJ):
+ ZEND_ASSIGN_MUL_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_CV):
+ ZEND_ASSIGN_DIV_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_CV_DIM):
+ ZEND_ASSIGN_DIV_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_CV_OBJ):
+ ZEND_ASSIGN_DIV_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_CV):
+ ZEND_ASSIGN_MOD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_CV_DIM):
+ ZEND_ASSIGN_MOD_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_CV_OBJ):
+ ZEND_ASSIGN_MOD_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_CV):
+ ZEND_ASSIGN_SL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_CV_DIM):
+ ZEND_ASSIGN_SL_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_CV_OBJ):
+ ZEND_ASSIGN_SL_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_CV):
+ ZEND_ASSIGN_SR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_CV_DIM):
+ ZEND_ASSIGN_SR_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_CV_OBJ):
+ ZEND_ASSIGN_SR_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CV):
+ ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_DIM):
+ ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_OBJ):
+ ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CV):
+ ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_DIM):
+ ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_OBJ):
+ ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CV):
+ ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_DIM):
+ ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_OBJ):
+ ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV):
+ ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_DIM):
+ ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_OBJ):
+ ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_CV):
+ ZEND_ASSIGN_POW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_CV_DIM):
+ ZEND_ASSIGN_POW_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_CV_OBJ):
+ ZEND_ASSIGN_POW_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_CV):
+ ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_DEC_OBJ_SPEC_VAR_CV):
+ ZEND_PRE_DEC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_CV):
+ ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_DEC_OBJ_SPEC_VAR_CV):
+ ZEND_POST_DEC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_CV):
+ ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_CV):
+ ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV):
+ ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV):
+ ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_VAR_CV):
+ ZEND_FETCH_OBJ_R_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_CV):
+ ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CV):
+ ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV):
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV):
+ ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST):
+ ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP):
+ ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR):
+ ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV):
+ ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST):
+ ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP):
+ ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR):
+ ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV):
+ ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED):
+ ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED):
+ ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_VAR_CV):
+ ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV):
+ ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV):
+ ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_CV):
+ ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_CV):
+ ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_CV):
+ ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_SPEC_VAR_CV):
+ ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED):
+ ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED):
+ ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR):
+ ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_DIM):
+ ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_OBJ):
+ ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR):
+ ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_DIM):
+ ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_OBJ):
+ ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR):
+ ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_DIM):
+ ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_OBJ):
+ ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR):
+ ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_DIM):
+ ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_OBJ):
+ ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR):
+ ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_DIM):
+ ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_OBJ):
+ ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR):
+ ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_DIM):
+ ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_OBJ):
+ ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR):
+ ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_DIM):
+ ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_OBJ):
+ ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR):
+ ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_DIM):
+ ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_OBJ):
+ ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR):
+ ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_DIM):
+ ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_OBJ):
+ ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR):
+ ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_DIM):
+ ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_OBJ):
+ ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR):
+ ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_DIM):
+ ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_OBJ):
+ ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR):
+ ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_DIM):
+ ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_OBJ):
+ ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR):
+ ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR):
+ ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR):
+ ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR):
+ ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR):
+ ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR):
+ ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR):
+ ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR):
+ ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_VAR_TMPVAR):
+ ZEND_FETCH_OBJ_R_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR):
+ ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR):
+ ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR):
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR):
+ ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST):
+ ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP):
+ ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR):
+ ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV):
+ ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST):
+ ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP):
+ ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR):
+ ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV):
+ ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR):
+ ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR):
+ ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR):
+ ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_TMPVAR):
+ ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR):
+ ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_NEW_SPEC_UNUSED):
+ ZEND_NEW_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CLONE_SPEC_UNUSED):
+ ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_EXIT_SPEC_UNUSED):
+ ZEND_EXIT_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_OBJ):
+ ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_OBJ):
+ ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_UNUSED_CONST_OBJ):
+ ZEND_ASSIGN_MUL_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_UNUSED_CONST_OBJ):
+ ZEND_ASSIGN_DIV_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_UNUSED_CONST_OBJ):
+ ZEND_ASSIGN_MOD_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_UNUSED_CONST_OBJ):
+ ZEND_ASSIGN_SL_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_UNUSED_CONST_OBJ):
+ ZEND_ASSIGN_SR_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CONST_OBJ):
+ ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CONST_OBJ):
+ ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CONST_OBJ):
+ ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CONST_OBJ):
+ ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_UNUSED_CONST_OBJ):
+ ZEND_ASSIGN_POW_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST):
+ ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CONST):
+ ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST):
+ ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_DEC_OBJ_SPEC_UNUSED_CONST):
+ ZEND_POST_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST):
+ ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST):
+ ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST):
+ ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST):
+ ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST):
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST):
+ ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST):
+ ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP):
+ ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR):
+ ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV):
+ ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_CONST):
+ ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST):
+ ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST):
+ ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST):
+ ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(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_UNSET_OBJ_SPEC_UNUSED_CONST):
+ ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST):
+ ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_CONST):
+ ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_TMP):
+ ZEND_YIELD_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_VAR):
+ ZEND_YIELD_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED):
+ ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED):
+ ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_UNUSED):
+ ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED):
+ ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED):
+ ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_GET_CLASS_SPEC_UNUSED_UNUSED):
+ ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED):
+ ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED):
+ ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED):
+ ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_OBJ):
+ ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_OBJ):
+ ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_UNUSED_CV_OBJ):
+ ZEND_ASSIGN_MUL_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_UNUSED_CV_OBJ):
+ ZEND_ASSIGN_DIV_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_UNUSED_CV_OBJ):
+ ZEND_ASSIGN_MOD_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_UNUSED_CV_OBJ):
+ ZEND_ASSIGN_SL_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_UNUSED_CV_OBJ):
+ ZEND_ASSIGN_SR_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CV_OBJ):
+ ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CV_OBJ):
+ ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CV_OBJ):
+ ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CV_OBJ):
+ ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_UNUSED_CV_OBJ):
+ ZEND_ASSIGN_POW_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV):
+ ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CV):
+ ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CV):
+ ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_DEC_OBJ_SPEC_UNUSED_CV):
+ ZEND_POST_DEC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV):
+ ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV):
+ ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV):
+ ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV):
+ ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV):
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV):
+ ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST):
+ ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP):
+ ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR):
+ ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV):
+ ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_CV):
+ ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV):
+ ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(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_UNSET_OBJ_SPEC_UNUSED_CV):
+ ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV):
+ ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_CV):
+ ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_OBJ):
+ ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_OBJ):
+ ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_OBJ):
+ ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_OBJ):
+ ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_OBJ):
+ ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_OBJ):
+ ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_OBJ):
+ ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_OBJ):
+ ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_OBJ):
+ ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_OBJ):
+ ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_OBJ):
+ ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_OBJ):
+ ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR):
+ ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR):
+ ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR):
+ ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR):
+ ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR):
+ ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR):
+ ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR):
+ ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR):
+ ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR):
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR):
+ ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST):
+ ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP):
+ ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR):
+ ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV):
+ ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR):
+ ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR):
+ ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(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_UNSET_OBJ_SPEC_UNUSED_TMPVAR):
+ ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR):
+ ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_NOT_SPEC_CV):
+ ZEND_BW_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BOOL_NOT_SPEC_CV):
+ ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED):
+ ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_INC_SPEC_CV_RETVAL_USED):
+ ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED):
+ ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_DEC_SPEC_CV_RETVAL_USED):
+ ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_INC_SPEC_CV):
+ ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_DEC_SPEC_CV):
+ ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ECHO_SPEC_CV):
+ ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_JMPZ_SPEC_CV):
+ ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_JMPNZ_SPEC_CV):
+ ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_JMPZNZ_SPEC_CV):
+ ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_JMPZ_EX_SPEC_CV):
+ ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_CV):
+ ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_RETURN_SPEC_CV):
+ ZEND_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_CV):
+ ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CV):
+ ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_THROW_SPEC_CV):
+ ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_VAR_SPEC_CV):
+ ZEND_SEND_VAR_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_REF_SPEC_CV):
+ ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV):
+ ZEND_SEND_VAR_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV_QUICK):
+ ZEND_SEND_VAR_EX_SPEC_CV_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_USER_SPEC_CV):
+ ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BOOL_SPEC_CV):
+ ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CLONE_SPEC_CV):
+ ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CAST_SPEC_CV):
+ ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_CV):
+ ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FE_RESET_R_SPEC_CV):
+ ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_CV):
+ ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_EXIT_SPEC_CV):
+ ZEND_EXIT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_JMP_SET_SPEC_CV):
+ ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_COALESCE_SPEC_CV):
+ ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_CV):
+ ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_FROM_SPEC_CV):
+ ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_STRLEN_SPEC_CV):
+ ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_CV):
+ ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_VAR_SIMPLE_SPEC_CV):
+ ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV):
+ ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_QUICK):
+ ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_SPEC_CV_CONST):
+ ZEND_ADD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SUB_SPEC_CV_CONST):
+ ZEND_SUB_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_MUL_SPEC_CV_CONST):
+ ZEND_MUL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DIV_SPEC_CV_CONST):
+ ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_MOD_SPEC_CV_CONST):
+ ZEND_MOD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SL_SPEC_CV_CONST):
+ ZEND_SL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SR_SPEC_CV_CONST):
+ ZEND_SR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POW_SPEC_CV_CONST):
+ ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CONCAT_SPEC_CV_CONST):
+ ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_CONST):
+ ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST):
+ ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CONST):
+ ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST):
+ ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CV_CONST):
+ ZEND_IS_SMALLER_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST):
+ ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_CONST):
+ ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_OR_SPEC_CV_CONST):
+ ZEND_BW_OR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_AND_SPEC_CV_CONST):
+ ZEND_BW_AND_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_XOR_SPEC_CV_CONST):
+ ZEND_BW_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_CONST):
+ ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_CONST):
+ ZEND_ASSIGN_ADD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_CONST_DIM):
+ ZEND_ASSIGN_ADD_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_CONST_OBJ):
+ ZEND_ASSIGN_ADD_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_CONST):
+ ZEND_ASSIGN_SUB_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_CONST_DIM):
+ ZEND_ASSIGN_SUB_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_CONST_OBJ):
+ ZEND_ASSIGN_SUB_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_CONST):
+ ZEND_ASSIGN_MUL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_CONST_DIM):
+ ZEND_ASSIGN_MUL_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_CONST_OBJ):
+ ZEND_ASSIGN_MUL_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_CONST):
+ ZEND_ASSIGN_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_CONST_DIM):
+ ZEND_ASSIGN_DIV_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_CONST_OBJ):
+ ZEND_ASSIGN_DIV_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_CONST):
+ ZEND_ASSIGN_MOD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_CONST_DIM):
+ ZEND_ASSIGN_MOD_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_CONST_OBJ):
+ ZEND_ASSIGN_MOD_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_CONST):
+ ZEND_ASSIGN_SL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_CONST_DIM):
+ ZEND_ASSIGN_SL_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_CONST_OBJ):
+ ZEND_ASSIGN_SL_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_CONST):
+ ZEND_ASSIGN_SR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_CONST_DIM):
+ ZEND_ASSIGN_SR_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_CONST_OBJ):
+ ZEND_ASSIGN_SR_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_CONST):
+ ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_DIM):
+ ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_OBJ):
+ ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_CONST):
+ ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_DIM):
+ ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_OBJ):
+ ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_CONST):
+ ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_DIM):
+ ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_OBJ):
+ ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST):
+ ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_DIM):
+ ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_OBJ):
+ ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_CONST):
+ ZEND_ASSIGN_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_CONST_DIM):
+ ZEND_ASSIGN_POW_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_CONST_OBJ):
+ ZEND_ASSIGN_POW_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_CONST):
+ ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_DEC_OBJ_SPEC_CV_CONST):
+ ZEND_PRE_DEC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_CONST):
+ ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_DEC_OBJ_SPEC_CV_CONST):
+ ZEND_POST_DEC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC_CV_CONST):
+ ZEND_FETCH_STATIC_PROP_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC_CV_CONST):
+ ZEND_FETCH_STATIC_PROP_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_CONST):
+ ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_CONST):
+ ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_CONST):
+ ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_CONST):
+ ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_CONST):
+ ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_CONST):
+ ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_CONST):
+ ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_CONST):
+ ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST):
+ ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST):
+ ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_CONST):
+ ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_CONST):
+ ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_CONST):
+ ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_CONST):
+ ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST):
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST):
+ ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_LIST_SPEC_CV_CONST):
+ ZEND_FETCH_LIST_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST):
+ ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP):
+ ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR):
+ ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV):
+ ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST):
+ ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP):
+ ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR):
+ ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV):
+ ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED):
+ ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED):
+ ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_CONST):
+ ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_CONST):
+ ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CASE_SPEC_CV_CONST):
+ ZEND_CASE_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST):
+ ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_CONST):
+ ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC_CV_CONST):
+ ZEND_UNSET_STATIC_PROP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_CONST):
+ ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_CONST):
+ ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_CONST):
+ ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST):
+ ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST):
+ ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_CONST):
+ ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_SPEC_CV_CONST):
+ ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BIND_GLOBAL_SPEC_CV_CONST):
+ ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BIND_STATIC_SPEC_CV_CONST):
+ ZEND_BIND_STATIC_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SWITCH_LONG_SPEC_CV_CONST):
+ ZEND_SWITCH_LONG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SWITCH_STRING_SPEC_CV_CONST):
+ ZEND_SWITCH_STRING_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IN_ARRAY_SPEC_CV_CONST):
+ ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST):
+ ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_TMP):
+ ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP):
+ ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED):
+ ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED):
+ ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_SPEC_CV_TMP):
+ ZEND_YIELD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_VAR):
+ ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR):
+ ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC_CV_VAR):
+ ZEND_FETCH_STATIC_PROP_R_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC_CV_VAR):
+ ZEND_FETCH_STATIC_PROP_W_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_VAR):
+ ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_VAR):
+ ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_VAR):
+ ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_VAR):
+ ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED):
+ ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED):
+ ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_CV_VAR):
+ ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC_CV_VAR):
+ ZEND_UNSET_STATIC_PROP_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_VAR):
+ ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_VAR):
+ ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_SPEC_CV_VAR):
+ ZEND_YIELD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_DIM):
+ ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_DIM):
+ ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_UNUSED_DIM):
+ ZEND_ASSIGN_MUL_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_DIM):
+ ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_UNUSED_DIM):
+ ZEND_ASSIGN_MOD_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_UNUSED_DIM):
+ ZEND_ASSIGN_SL_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_UNUSED_DIM):
+ ZEND_ASSIGN_SR_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_UNUSED_DIM):
+ ZEND_ASSIGN_CONCAT_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_UNUSED_DIM):
+ ZEND_ASSIGN_BW_OR_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_UNUSED_DIM):
+ ZEND_ASSIGN_BW_AND_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_DIM):
+ ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_UNUSED_DIM):
+ ZEND_ASSIGN_POW_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_R_SPEC_CV_UNUSED):
+ ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_W_SPEC_CV_UNUSED):
+ ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_RW_SPEC_CV_UNUSED):
+ ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED):
+ ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_CV_UNUSED):
+ ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_IS_SPEC_CV_UNUSED):
+ ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC_CV_UNUSED):
+ ZEND_FETCH_STATIC_PROP_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC_CV_UNUSED):
+ ZEND_FETCH_STATIC_PROP_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_UNUSED):
+ ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_UNUSED):
+ ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_UNUSED):
+ ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_UNUSED):
+ ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED):
+ ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED):
+ ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED):
+ ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST):
+ ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP):
+ ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR):
+ ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV):
+ ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED):
+ ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED):
+ ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_UNUSED):
+ ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_UNSET_CV_SPEC_CV_UNUSED):
+ ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_UNSET_VAR_SPEC_CV_UNUSED):
+ ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC_CV_UNUSED):
+ ZEND_UNSET_STATIC_PROP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED):
+ ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED):
+ ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_UNUSED):
+ ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_UNUSED):
+ ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_SPEC_CV_UNUSED):
+ ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CHECK_VAR_SPEC_CV_UNUSED):
+ ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_MAKE_REF_SPEC_CV_UNUSED):
+ ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_COUNT_SPEC_CV_UNUSED):
+ ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_GET_CLASS_SPEC_CV_UNUSED):
+ ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_GET_TYPE_SPEC_CV_UNUSED):
+ ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_SPEC_CV_CV):
+ ZEND_ADD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SUB_SPEC_CV_CV):
+ ZEND_SUB_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_MUL_SPEC_CV_CV):
+ ZEND_MUL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DIV_SPEC_CV_CV):
+ ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_MOD_SPEC_CV_CV):
+ ZEND_MOD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SL_SPEC_CV_CV):
+ ZEND_SL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SR_SPEC_CV_CV):
+ ZEND_SR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POW_SPEC_CV_CV):
+ ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CONCAT_SPEC_CV_CV):
+ ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_CV):
+ ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV):
+ ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CV):
+ ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV):
+ ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CV_CV):
+ ZEND_IS_SMALLER_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV):
+ ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_CV):
+ ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_OR_SPEC_CV_CV):
+ ZEND_BW_OR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_AND_SPEC_CV_CV):
+ ZEND_BW_AND_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_XOR_SPEC_CV_CV):
+ ZEND_BW_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_CV):
+ ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_CV):
+ ZEND_ASSIGN_ADD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_CV_DIM):
+ ZEND_ASSIGN_ADD_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_CV_OBJ):
+ ZEND_ASSIGN_ADD_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_CV):
+ ZEND_ASSIGN_SUB_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_CV_DIM):
+ ZEND_ASSIGN_SUB_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_CV_OBJ):
+ ZEND_ASSIGN_SUB_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_CV):
+ ZEND_ASSIGN_MUL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_CV_DIM):
+ ZEND_ASSIGN_MUL_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_CV_OBJ):
+ ZEND_ASSIGN_MUL_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_CV):
+ ZEND_ASSIGN_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_CV_DIM):
+ ZEND_ASSIGN_DIV_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_CV_OBJ):
+ ZEND_ASSIGN_DIV_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_CV):
+ ZEND_ASSIGN_MOD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_CV_DIM):
+ ZEND_ASSIGN_MOD_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_CV_OBJ):
+ ZEND_ASSIGN_MOD_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_CV):
+ ZEND_ASSIGN_SL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_CV_DIM):
+ ZEND_ASSIGN_SL_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_CV_OBJ):
+ ZEND_ASSIGN_SL_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_CV):
+ ZEND_ASSIGN_SR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_CV_DIM):
+ ZEND_ASSIGN_SR_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_CV_OBJ):
+ ZEND_ASSIGN_SR_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_CV):
+ ZEND_ASSIGN_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_CV_DIM):
+ ZEND_ASSIGN_CONCAT_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_CV_OBJ):
+ ZEND_ASSIGN_CONCAT_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_CV):
+ ZEND_ASSIGN_BW_OR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_CV_DIM):
+ ZEND_ASSIGN_BW_OR_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_CV_OBJ):
+ ZEND_ASSIGN_BW_OR_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_CV):
+ ZEND_ASSIGN_BW_AND_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_CV_DIM):
+ ZEND_ASSIGN_BW_AND_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_CV_OBJ):
+ ZEND_ASSIGN_BW_AND_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CV):
+ ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_DIM):
+ ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_OBJ):
+ ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_CV):
+ ZEND_ASSIGN_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_CV_DIM):
+ ZEND_ASSIGN_POW_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_CV_OBJ):
+ ZEND_ASSIGN_POW_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_CV):
+ ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_DEC_OBJ_SPEC_CV_CV):
+ ZEND_PRE_DEC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_CV):
+ ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_DEC_OBJ_SPEC_CV_CV):
+ ZEND_POST_DEC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_CV):
+ ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_CV):
+ ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_CV):
+ ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_CV):
+ ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV):
+ ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CV):
+ ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_CV):
+ ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_CV):
+ ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_CV):
+ ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_CV):
+ ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV):
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV):
+ ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_LIST_SPEC_CV_CV):
+ ZEND_FETCH_LIST_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST):
+ ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP):
+ ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR):
+ ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV):
+ ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST):
+ ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP):
+ ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR):
+ ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV):
+ ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED):
+ ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED):
+ ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_CV_CV):
+ ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_CV):
+ ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_CV):
+ ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CASE_SPEC_CV_CV):
+ ZEND_CASE_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV):
+ ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_CV):
+ ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_CV):
+ ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_CV):
+ ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV):
+ ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV):
+ ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_YIELD_SPEC_CV_CV):
+ ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CV):
+ ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_SPEC_CV_TMPVAR):
+ ZEND_ADD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SUB_SPEC_CV_TMPVAR):
+ ZEND_SUB_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_MUL_SPEC_CV_TMPVAR):
+ ZEND_MUL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DIV_SPEC_CV_TMPVAR):
+ ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_MOD_SPEC_CV_TMPVAR):
+ ZEND_MOD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SL_SPEC_CV_TMPVAR):
+ ZEND_SL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SR_SPEC_CV_TMPVAR):
+ ZEND_SR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POW_SPEC_CV_TMPVAR):
+ ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CONCAT_SPEC_CV_TMPVAR):
+ ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR):
+ ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR):
+ ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CV_TMPVAR):
+ ZEND_IS_SMALLER_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR):
+ ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_TMPVAR):
+ ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_OR_SPEC_CV_TMPVAR):
+ ZEND_BW_OR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_AND_SPEC_CV_TMPVAR):
+ ZEND_BW_AND_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_XOR_SPEC_CV_TMPVAR):
+ ZEND_BW_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_TMPVAR):
+ ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR):
+ ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_DIM):
+ ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_OBJ):
+ ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR):
+ ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_DIM):
+ ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_OBJ):
+ ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR):
+ ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_DIM):
+ ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_OBJ):
+ ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR):
+ ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_DIM):
+ ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_OBJ):
+ ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR):
+ ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_DIM):
+ ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_OBJ):
+ ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_TMPVAR):
+ ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_DIM):
+ ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_OBJ):
+ ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_TMPVAR):
+ ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_DIM):
+ ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_OBJ):
+ ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR):
+ ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_DIM):
+ ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_OBJ):
+ ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR):
+ ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_DIM):
+ ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_OBJ):
+ ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR):
+ ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_DIM):
+ ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_OBJ):
+ ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR):
+ ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_DIM):
+ ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_OBJ):
+ ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_TMPVAR):
+ ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_DIM):
+ ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_OBJ):
+ ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR):
+ ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR):
+ ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR):
+ ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR):
+ ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR):
+ ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR):
+ ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR):
+ ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR):
+ ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR):
+ ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR):
+ ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR):
+ ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR):
+ ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR):
+ ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR):
+ ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR):
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR):
+ ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_LIST_SPEC_CV_TMPVAR):
+ ZEND_FETCH_LIST_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST):
+ ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP):
+ ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR):
+ ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV):
+ ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST):
+ ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP):
+ ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR):
+ ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV):
+ ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_TMPVAR):
+ ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR):
+ ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CASE_SPEC_CV_TMPVAR):
+ ZEND_CASE_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR):
+ ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_TMPVAR):
+ ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_TMPVAR):
+ ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_TMPVAR):
+ ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR):
+ ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR):
+ ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVAR):
+ ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_NOT_SPEC_TMPVAR):
+ ZEND_BW_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BOOL_NOT_SPEC_TMPVAR):
+ ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ECHO_SPEC_TMPVAR):
+ ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_JMPZ_SPEC_TMPVAR):
+ ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_JMPNZ_SPEC_TMPVAR):
+ ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_JMPZNZ_SPEC_TMPVAR):
+ ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_JMPZ_EX_SPEC_TMPVAR):
+ ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_TMPVAR):
+ ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FREE_SPEC_TMPVAR):
+ ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FE_FREE_SPEC_TMPVAR):
+ ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SEND_VAL_SPEC_TMPVAR):
+ ZEND_SEND_VAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BOOL_SPEC_TMPVAR):
+ ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CLONE_SPEC_TMPVAR):
+ ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR):
+ ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_EXIT_SPEC_TMPVAR):
+ ZEND_EXIT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_STRLEN_SPEC_TMPVAR):
+ ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_SPEC_TMPVAR_CONST):
+ ZEND_ADD_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SUB_SPEC_TMPVAR_CONST):
+ ZEND_SUB_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_MUL_SPEC_TMPVAR_CONST):
+ ZEND_MUL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_CONST):
+ ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_MOD_SPEC_TMPVAR_CONST):
+ ZEND_MOD_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SL_SPEC_TMPVAR_CONST):
+ ZEND_SL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SR_SPEC_TMPVAR_CONST):
+ ZEND_SR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_CONST):
+ ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_CONST):
+ ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST):
+ ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST):
+ ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVAR_CONST):
+ ZEND_IS_SMALLER_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST):
+ ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_CONST):
+ ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_OR_SPEC_TMPVAR_CONST):
+ ZEND_BW_OR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_AND_SPEC_TMPVAR_CONST):
+ ZEND_BW_AND_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_XOR_SPEC_TMPVAR_CONST):
+ ZEND_BW_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BOOL_XOR_SPEC_TMPVAR_CONST):
+ ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_CONST):
+ ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_CONST):
+ ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_CONST):
+ ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_CONST):
+ ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_CONST):
+ ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_CONST):
+ ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST):
+ ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST):
+ ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST):
+ ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_LIST_SPEC_TMPVAR_CONST):
+ ZEND_FETCH_LIST_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST):
+ ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST):
+ ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_CONST):
+ ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_CONST):
+ ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_CONST):
+ ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST):
+ ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST):
+ ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_CONST):
+ ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SWITCH_LONG_SPEC_TMPVAR_CONST):
+ ZEND_SWITCH_LONG_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SWITCH_STRING_SPEC_TMPVAR_CONST):
+ ZEND_SWITCH_STRING_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST):
+ ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_VAR):
+ ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_VAR):
+ ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_VAR):
+ ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_VAR):
+ ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_VAR):
+ ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_VAR):
+ ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_VAR):
+ ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_VAR):
+ ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_VAR):
+ ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_R_SPEC_TMPVAR_UNUSED):
+ ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_W_SPEC_TMPVAR_UNUSED):
+ ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED):
+ ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED):
+ ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED):
+ ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED):
+ ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_UNUSED):
+ ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_UNUSED):
+ ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_UNUSED):
+ ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_UNUSED):
+ ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_UNUSED):
+ ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_UNUSED):
+ ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED):
+ ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_UNUSED):
+ ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED):
+ ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_UNUSED):
+ ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED):
+ ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_SPEC_TMPVAR_CV):
+ ZEND_ADD_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SUB_SPEC_TMPVAR_CV):
+ ZEND_SUB_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_MUL_SPEC_TMPVAR_CV):
+ ZEND_MUL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_CV):
+ ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_MOD_SPEC_TMPVAR_CV):
+ ZEND_MOD_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SL_SPEC_TMPVAR_CV):
+ ZEND_SL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SR_SPEC_TMPVAR_CV):
+ ZEND_SR_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_CV):
+ ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_CV):
+ ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CV):
+ ZEND_IS_EQUAL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CV):
+ ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVAR_CV):
+ ZEND_IS_SMALLER_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV):
+ ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_CV):
+ ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_OR_SPEC_TMPVAR_CV):
+ ZEND_BW_OR_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_AND_SPEC_TMPVAR_CV):
+ ZEND_BW_AND_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_XOR_SPEC_TMPVAR_CV):
+ ZEND_BW_XOR_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BOOL_XOR_SPEC_TMPVAR_CV):
+ ZEND_BOOL_XOR_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV):
+ ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV):
+ ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV):
+ ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_LIST_SPEC_TMPVAR_CV):
+ ZEND_FETCH_LIST_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CV):
+ ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV):
+ ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_CV):
+ ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV):
+ ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV):
+ ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CV):
+ ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_SPEC_TMPVAR_TMPVAR):
+ ZEND_ADD_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SUB_SPEC_TMPVAR_TMPVAR):
+ ZEND_SUB_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_MUL_SPEC_TMPVAR_TMPVAR):
+ ZEND_MUL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_TMPVAR):
+ ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_MOD_SPEC_TMPVAR_TMPVAR):
+ ZEND_MOD_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SL_SPEC_TMPVAR_TMPVAR):
+ ZEND_SL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SR_SPEC_TMPVAR_TMPVAR):
+ ZEND_SR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_TMPVAR):
+ ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_TMPVAR):
+ ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR):
+ ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR):
+ ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR):
+ ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR):
+ ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR):
+ ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_OR_SPEC_TMPVAR_TMPVAR):
+ ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_AND_SPEC_TMPVAR_TMPVAR):
+ ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR):
+ ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR):
+ ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR):
+ ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR):
+ ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR):
+ ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_LIST_SPEC_TMPVAR_TMPVAR):
+ ZEND_FETCH_LIST_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR):
+ ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR):
+ ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_TMPVAR):
+ ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR):
+ ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR):
+ ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVAR):
+ ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_UNUSED):
+ ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_USED):
+ ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_INC_LONG_SPEC_TMPVARCV_RETVAL_UNUSED):
+ ZEND_PRE_INC_LONG_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_INC_LONG_SPEC_TMPVARCV_RETVAL_USED):
+ ZEND_PRE_INC_LONG_SPEC_TMPVARCV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_UNUSED):
+ ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_USED):
+ ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_UNUSED):
+ ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_USED):
+ ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_DEC_LONG_SPEC_TMPVARCV_RETVAL_UNUSED):
+ ZEND_PRE_DEC_LONG_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_DEC_LONG_SPEC_TMPVARCV_RETVAL_USED):
+ ZEND_PRE_DEC_LONG_SPEC_TMPVARCV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_UNUSED):
+ ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_USED):
+ ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV):
+ ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_INC_LONG_SPEC_TMPVARCV):
+ ZEND_POST_INC_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV):
+ ZEND_POST_INC_LONG_OR_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV):
+ ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_DEC_LONG_SPEC_TMPVARCV):
+ ZEND_POST_DEC_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_POST_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV):
+ ZEND_POST_DEC_LONG_OR_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV):
+ ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV):
+ ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
+ ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SUB_LONG_SPEC_TMPVARCV_CONST):
+ ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST):
+ ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST):
+ ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ):
+ ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
+ ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST):
+ ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
+ ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
+ ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST):
+ ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
+ ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
+ ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
+ ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
+ ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
+ ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
+ ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV):
+ ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
+ ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
+ ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV):
+ ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
+ ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
+ ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV):
+ ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
+ ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
+ ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
+ ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
+ ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
+ ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
+ ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
+ ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
+ ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
+ ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
+ ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
+ ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
+ ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
+ ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV):
+ ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
+ ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
+ ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
+ ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
+ ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
+ ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
+ ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
+ ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
+ ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
+ ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
+ ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
+ ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(HYBRID_HALT):
+ execute_data = orig_execute_data;
+ opline = orig_opline;
+ return;
+ HYBRID_DEFAULT:
+ zend_error_noreturn(E_ERROR, "Invalid opcode %d/%d/%d.", OPLINE->opcode, OPLINE->op1_type, OPLINE->op2_type);
+ HYBRID_BREAK(); /* Never reached */
+#else
+#ifdef ZEND_VM_FP_GLOBAL_REG
+ execute_data = orig_execute_data;
+# ifdef ZEND_VM_IP_GLOBAL_REG
+ opline = orig_opline;
+# endif
+ return;
+#else
+ if (EXPECTED(ret > 0)) {
+ execute_data = EG(current_execute_data);
+ ZEND_VM_LOOP_INTERRUPT_CHECK();
+ } else {
+# ifdef ZEND_VM_IP_GLOBAL_REG
+ opline = orig_opline;
+# endif
+ return;
+ }
+#endif
+#endif
+ }
+
+ }
+ zend_error_noreturn(E_CORE_ERROR, "Arrived at end of main loop which shouldn't happen");
+}
+
+ZEND_API void zend_execute(zend_op_array *op_array, zval *return_value)
+{
+ zend_execute_data *execute_data;
+
+ if (EG(exception) != NULL) {
+ return;
+ }
+
+ execute_data = zend_vm_stack_push_call_frame(ZEND_CALL_TOP_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
+ (zend_function*)op_array, 0, zend_get_called_scope(EG(current_execute_data)), zend_get_this_object(EG(current_execute_data)));
+ if (EG(current_execute_data)) {
+ execute_data->symbol_table = zend_rebuild_symbol_table();
+ } else {
+ execute_data->symbol_table = &EG(symbol_table);
+ }
+ EX(prev_execute_data) = EG(current_execute_data);
+ i_init_code_execute_data(execute_data, op_array, return_value);
+ zend_execute_ex(execute_data);
+ zend_vm_stack_free_call_frame(execute_data);
+}
+
+
void zend_init_opcodes_handlers(void)
{
static const void *labels[] = {
@@ -59559,11 +65467,11 @@ void zend_init_opcodes_handlers(void)
ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER,
ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER,
ZEND_INIT_ARRAY_SPEC_VAR_CV_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_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER,
ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER,
ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER,
@@ -61488,6 +67396,281 @@ void zend_init_opcodes_handlers(void)
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
+ ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_SWITCH_LONG_SPEC_TMPVAR_CONST_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_SWITCH_LONG_SPEC_TMPVAR_CONST_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_SWITCH_LONG_SPEC_CV_CONST_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_SWITCH_STRING_SPEC_TMPVAR_CONST_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_SWITCH_STRING_SPEC_TMPVAR_CONST_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_SWITCH_STRING_SPEC_CV_CONST_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_COUNT_SPEC_TMP_UNUSED_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_COUNT_SPEC_VAR_UNUSED_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_COUNT_SPEC_CV_UNUSED_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_GET_CLASS_SPEC_TMP_UNUSED_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_GET_CLASS_SPEC_VAR_UNUSED_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_HANDLER,
+ ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_ADD_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
ZEND_ADD_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
@@ -62453,6 +68636,56 @@ void zend_init_opcodes_handlers(void)
ZEND_NULL_HANDLER,
ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_HANDLER,
ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_QUICK_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER,
+ ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER
};
static const uint32_t specs[] = {
@@ -62556,7 +68789,7 @@ void zend_init_opcodes_handlers(void)
2257 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
2282 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
2307 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 4596,
+ 4921,
2332,
2333,
2334,
@@ -62641,13 +68874,30 @@ void zend_init_opcodes_handlers(void)
3531 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
3556 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
3581 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 4596,
+ 4921,
3606 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 4596
+ 3631 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 3656 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 3681 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 3706 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 3731 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 3756 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 3781 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 3806 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 3831 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 3856 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 3881 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 4921
};
+#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
+ zend_opcode_handler_funcs = labels;
+ zend_spec_handlers = specs;
+ execute_ex(NULL);
+#else
zend_opcode_handlers = labels;
zend_handlers_count = sizeof(labels) / sizeof(void*);
zend_spec_handlers = specs;
+#endif
}
static HashTable *zend_handlers_table = NULL;
@@ -62684,6 +68934,38 @@ ZEND_API void zend_deserialize_opcode_handler(zend_op *op)
op->handler = zend_opcode_handlers[(zend_uintptr_t)op->handler];
}
+ZEND_API const void *zend_get_opcode_handler_func(const zend_op *op)
+{
+#if ZEND_VM_KIND == ZEND_VM_KIND_CALL
+ return op->handler;
+#elif ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
+ zval *zv;
+
+ if (!zend_handlers_table) {
+ init_opcode_serialiser();
+ }
+ zv = zend_hash_index_find(zend_handlers_table, (zend_long)(zend_uintptr_t)op->handler);
+ ZEND_ASSERT(zv != NULL);
+ return zend_opcode_handler_funcs[Z_LVAL_P(zv)];
+#else
+ return NULL;
+#endif
+}
+
+ZEND_API const zend_op *zend_get_halt_op(void)
+{
+#if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
+ return &hybrid_halt_op;
+#else
+ return NULL;
+#endif
+}
+
+ZEND_API int zend_vm_kind(void)
+{
+ return ZEND_VM_KIND;
+}
+
static const void *zend_vm_get_opcode_handler_ex(uint32_t spec, const zend_op* op)
{
static const int zend_vm_decode[] = {
@@ -62735,6 +69017,56 @@ static const void *zend_vm_get_opcode_handler(zend_uchar opcode, const zend_op*
return zend_vm_get_opcode_handler_ex(zend_spec_handlers[opcode], op);
}
+#if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
+static const void *zend_vm_get_opcode_handler_func(zend_uchar opcode, const zend_op* op)
+{
+ uint32_t spec = zend_spec_handlers[opcode];
+ static const int zend_vm_decode[] = {
+ _UNUSED_CODE, /* 0 */
+ _CONST_CODE, /* 1 = IS_CONST */
+ _TMP_CODE, /* 2 = IS_TMP_VAR */
+ _UNUSED_CODE, /* 3 */
+ _VAR_CODE, /* 4 = IS_VAR */
+ _UNUSED_CODE, /* 5 */
+ _UNUSED_CODE, /* 6 */
+ _UNUSED_CODE, /* 7 */
+ _UNUSED_CODE, /* 8 = IS_UNUSED */
+ _UNUSED_CODE, /* 9 */
+ _UNUSED_CODE, /* 10 */
+ _UNUSED_CODE, /* 11 */
+ _UNUSED_CODE, /* 12 */
+ _UNUSED_CODE, /* 13 */
+ _UNUSED_CODE, /* 14 */
+ _UNUSED_CODE, /* 15 */
+ _CV_CODE /* 16 = IS_CV */
+ };
+ uint32_t offset = 0;
+ if (spec & SPEC_RULE_OP1) offset = offset * 5 + zend_vm_decode[op->op1_type];
+ if (spec & SPEC_RULE_OP2) offset = offset * 5 + zend_vm_decode[op->op2_type];
+ if (spec & SPEC_RULE_OP_DATA) offset = offset * 5 + zend_vm_decode[(op + 1)->op1_type];
+ if (spec & SPEC_RULE_RETVAL) offset = offset * 2 + (op->result_type != IS_UNUSED);
+ if (spec & SPEC_RULE_QUICK_ARG) offset = offset * 2 + (op->op2.num < MAX_ARG_FLAG_NUM);
+ if (spec & SPEC_RULE_SMART_BRANCH) {
+ offset = offset * 3;
+ if ((op+1)->opcode == ZEND_JMPZ) {
+ offset += 1;
+ } else if ((op+1)->opcode == ZEND_JMPNZ) {
+ offset += 2;
+ }
+ }
+ if (spec & SPEC_RULE_DIM_OBJ) {
+ offset = offset * 3;
+ if (op->extended_value == ZEND_ASSIGN_DIM) {
+ offset += 1;
+ } else if (op->extended_value == ZEND_ASSIGN_OBJ) {
+ offset += 2;
+ }
+ }
+ return zend_opcode_handler_funcs[(spec & SPEC_START_MASK) + offset];
+}
+
+#endif
+
ZEND_API void zend_vm_set_opcode_handler(zend_op* op)
{
op->handler = zend_vm_get_opcode_handler(zend_user_opcodes[op->opcode], op);
@@ -62750,7 +69082,7 @@ ZEND_API void zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t op1_info, uint
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3631 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
+ spec = 3906 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
if (op->op1_type > op->op2_type) {
zend_swap_operands(op);
}
@@ -62758,7 +69090,7 @@ ZEND_API void zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t op1_info, uint
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3656 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
+ spec = 3931 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
if (op->op1_type > op->op2_type) {
zend_swap_operands(op);
}
@@ -62766,7 +69098,7 @@ ZEND_API void zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t op1_info, uint
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3681 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
+ spec = 3956 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
if (op->op1_type > op->op2_type) {
zend_swap_operands(op);
}
@@ -62777,17 +69109,17 @@ ZEND_API void zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t op1_info, uint
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3706 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
+ spec = 3981 | 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 = 3731 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
+ spec = 4006 | 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 = 3756 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
+ spec = 4031 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
}
break;
case ZEND_MUL:
@@ -62795,7 +69127,7 @@ ZEND_API void zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t op1_info, uint
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3781 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
+ spec = 4056 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
if (op->op1_type > op->op2_type) {
zend_swap_operands(op);
}
@@ -62803,7 +69135,7 @@ ZEND_API void zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t op1_info, uint
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3806 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
+ spec = 4081 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
if (op->op1_type > op->op2_type) {
zend_swap_operands(op);
}
@@ -62811,7 +69143,7 @@ ZEND_API void zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t op1_info, uint
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3831 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
+ spec = 4106 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
if (op->op1_type > op->op2_type) {
zend_swap_operands(op);
}
@@ -62822,7 +69154,7 @@ ZEND_API void zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t op1_info, uint
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3856 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
+ spec = 4131 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
if (op->op1_type > op->op2_type) {
zend_swap_operands(op);
}
@@ -62830,7 +69162,7 @@ ZEND_API void zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t op1_info, uint
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3931 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
+ spec = 4206 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
if (op->op1_type > op->op2_type) {
zend_swap_operands(op);
}
@@ -62841,7 +69173,7 @@ ZEND_API void zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t op1_info, uint
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 4006 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
+ spec = 4281 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
if (op->op1_type > op->op2_type) {
zend_swap_operands(op);
}
@@ -62849,7 +69181,7 @@ ZEND_API void zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t op1_info, uint
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 4081 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
+ spec = 4356 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
if (op->op1_type > op->op2_type) {
zend_swap_operands(op);
}
@@ -62860,12 +69192,12 @@ ZEND_API void zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t op1_info, uint
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 4156 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
+ spec = 4431 | 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 = 4231 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
+ spec = 4506 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
}
break;
case ZEND_IS_SMALLER_OR_EQUAL:
@@ -62873,70 +69205,75 @@ ZEND_API void zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t op1_info, uint
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 4306 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
+ spec = 4581 | 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 = 4381 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
+ spec = 4656 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
}
break;
case ZEND_QM_ASSIGN:
if (op1_info == MAY_BE_DOUBLE) {
- spec = 4546 | SPEC_RULE_OP1;
+ spec = 4821 | SPEC_RULE_OP1;
} else if (!(op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE)))) {
- spec = 4551 | SPEC_RULE_OP1;
+ spec = 4826 | SPEC_RULE_OP1;
}
break;
case ZEND_PRE_INC:
if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
- spec = 4456 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL;
+ spec = 4731 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL;
} else if (op1_info == MAY_BE_LONG) {
- spec = 4466 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL;
+ spec = 4741 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL;
} else if (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)) {
- spec = 4476 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL;
+ spec = 4751 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL;
}
break;
case ZEND_PRE_DEC:
if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
- spec = 4486 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL;
+ spec = 4761 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL;
} else if (op1_info == MAY_BE_LONG) {
- spec = 4496 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL;
+ spec = 4771 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL;
} else if (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)) {
- spec = 4506 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL;
+ spec = 4781 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL;
}
break;
case ZEND_POST_INC:
if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
- spec = 4516 | SPEC_RULE_OP1;
+ spec = 4791 | SPEC_RULE_OP1;
} else if (op1_info == MAY_BE_LONG) {
- spec = 4521 | SPEC_RULE_OP1;
+ spec = 4796 | SPEC_RULE_OP1;
} else if (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)) {
- spec = 4526 | SPEC_RULE_OP1;
+ spec = 4801 | SPEC_RULE_OP1;
}
break;
case ZEND_POST_DEC:
if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
- spec = 4531 | SPEC_RULE_OP1;
+ spec = 4806 | SPEC_RULE_OP1;
} else if (op1_info == MAY_BE_LONG) {
- spec = 4536 | SPEC_RULE_OP1;
+ spec = 4811 | SPEC_RULE_OP1;
} else if (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)) {
- spec = 4541 | SPEC_RULE_OP1;
+ spec = 4816 | SPEC_RULE_OP1;
}
break;
case ZEND_SEND_VAR_EX:
if ((op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
- spec = 4586 | SPEC_RULE_OP1 | SPEC_RULE_QUICK_ARG;
+ spec = 4861 | SPEC_RULE_OP1 | SPEC_RULE_QUICK_ARG;
+ }
+ 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 = 4871 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_RETVAL;
}
break;
case ZEND_FETCH_DIM_R:
if (!(op2_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) {
- spec = 4556 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
+ spec = 4831 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
}
break;
case ZEND_SEND_VAR:
if ((op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
- spec = 4581 | SPEC_RULE_OP1;
+ spec = 4856 | SPEC_RULE_OP1;
}
break;
default:
@@ -62947,6 +69284,9 @@ ZEND_API void zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t op1_info, uint
ZEND_API int zend_vm_call_opcode_handler(zend_execute_data* ex)
{
+#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
+ opcode_handler_t handler;
+#endif
int ret;
#ifdef ZEND_VM_IP_GLOBAL_REG
const zend_op *orig_opline = opline;
@@ -62960,8 +69300,14 @@ ZEND_API int zend_vm_call_opcode_handler(zend_execute_data* ex)
LOAD_OPLINE();
#if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
+#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
+ handler = (opcode_handler_t)zend_vm_get_opcode_handler_func(zend_user_opcodes[opline->opcode], opline);
+ handler(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ if (EXPECTED(opline != &hybrid_halt_op)) {
+#else
((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
if (EXPECTED(opline)) {
+#endif
ret = execute_data != ex ? (int)(execute_data->prev_execute_data != ex) + 1 : 0;
SAVE_OPLINE();
} else {
diff --git a/Zend/zend_vm_execute.skl b/Zend/zend_vm_execute.skl
index 345d7bde7b..8eda5a48b0 100644
--- a/Zend/zend_vm_execute.skl
+++ b/Zend/zend_vm_execute.skl
@@ -37,7 +37,7 @@ ZEND_API void zend_{%EXECUTOR_NAME%}(zend_op_array *op_array, zval *return_value
execute_data->symbol_table = &EG(symbol_table);
}
EX(prev_execute_data) = EG(current_execute_data);
- i_init_execute_data(execute_data, op_array, return_value);
+ i_init_code_execute_data(execute_data, op_array, return_value);
zend_{%EXECUTOR_NAME%}_ex(execute_data);
zend_vm_stack_free_call_frame(execute_data);
}
@@ -83,3 +83,35 @@ ZEND_API void zend_deserialize_opcode_handler(zend_op *op)
op->handler = zend_opcode_handlers[(zend_uintptr_t)op->handler];
}
+ZEND_API const void *zend_get_opcode_handler_func(const zend_op *op)
+{
+#if ZEND_VM_KIND == ZEND_VM_KIND_CALL
+ return op->handler;
+#elif ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
+ zval *zv;
+
+ if (!zend_handlers_table) {
+ init_opcode_serialiser();
+ }
+ zv = zend_hash_index_find(zend_handlers_table, (zend_long)(zend_uintptr_t)op->handler);
+ ZEND_ASSERT(zv != NULL);
+ return zend_opcode_handler_funcs[Z_LVAL_P(zv)];
+#else
+ return NULL;
+#endif
+}
+
+ZEND_API const zend_op *zend_get_halt_op(void)
+{
+#if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
+ return &hybrid_halt_op;
+#else
+ return NULL;
+#endif
+}
+
+ZEND_API int zend_vm_kind(void)
+{
+ return ZEND_VM_KIND;
+}
+
diff --git a/Zend/zend_vm_gen.php b/Zend/zend_vm_gen.php
index c024560bd7..995eafc856 100644
--- a/Zend/zend_vm_gen.php
+++ b/Zend/zend_vm_gen.php
@@ -53,6 +53,7 @@ error_reporting(E_ALL);
const ZEND_VM_KIND_CALL = 1;
const ZEND_VM_KIND_SWITCH = 2;
const ZEND_VM_KIND_GOTO = 3;
+const ZEND_VM_KIND_HYBRID = 4;
$vm_op_flags = array(
"ZEND_VM_OP_SPEC" => 1<<0,
@@ -134,6 +135,7 @@ $vm_kind_name = array(
ZEND_VM_KIND_CALL => "ZEND_VM_KIND_CALL",
ZEND_VM_KIND_SWITCH => "ZEND_VM_KIND_SWITCH",
ZEND_VM_KIND_GOTO => "ZEND_VM_KIND_GOTO",
+ ZEND_VM_KIND_HYBRID => "ZEND_VM_KIND_HYBRID",
);
$op_types = array(
@@ -234,221 +236,221 @@ $op2_free = array(
);
$op1_get_zval_ptr = array(
- "ANY" => "get_zval_ptr(opline->op1_type, opline->op1, execute_data, &free_op1, \\1)",
- "TMP" => "_get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1)",
- "VAR" => "_get_zval_ptr_var(opline->op1.var, execute_data, &free_op1)",
+ "ANY" => "get_zval_ptr(opline->op1_type, opline->op1, &free_op1, \\1)",
+ "TMP" => "_get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC)",
+ "VAR" => "_get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC)",
"CONST" => "EX_CONSTANT(opline->op1)",
"UNUSED" => "NULL",
- "CV" => "_get_zval_ptr_cv_\\1(execute_data, opline->op1.var)",
- "TMPVAR" => "_get_zval_ptr_var(opline->op1.var, execute_data, &free_op1)",
+ "CV" => "_get_zval_ptr_cv_\\1(opline->op1.var EXECUTE_DATA_CC)",
+ "TMPVAR" => "_get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC)",
"TMPVARCV" => "???",
);
$op2_get_zval_ptr = array(
- "ANY" => "get_zval_ptr(opline->op2_type, opline->op2, execute_data, &free_op2, \\1)",
- "TMP" => "_get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2)",
- "VAR" => "_get_zval_ptr_var(opline->op2.var, execute_data, &free_op2)",
+ "ANY" => "get_zval_ptr(opline->op2_type, opline->op2, &free_op2, \\1)",
+ "TMP" => "_get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC)",
+ "VAR" => "_get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC)",
"CONST" => "EX_CONSTANT(opline->op2)",
"UNUSED" => "NULL",
- "CV" => "_get_zval_ptr_cv_\\1(execute_data, opline->op2.var)",
- "TMPVAR" => "_get_zval_ptr_var(opline->op2.var, execute_data, &free_op2)",
+ "CV" => "_get_zval_ptr_cv_\\1(opline->op2.var EXECUTE_DATA_CC)",
+ "TMPVAR" => "_get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC)",
"TMPVARCV" => "???",
);
$op1_get_zval_ptr_ptr = array(
- "ANY" => "get_zval_ptr_ptr(opline->op1_type, opline->op1, execute_data, &free_op1, \\1)",
+ "ANY" => "get_zval_ptr_ptr(opline->op1_type, opline->op1, &free_op1, \\1)",
"TMP" => "NULL",
- "VAR" => "_get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1)",
+ "VAR" => "_get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC)",
"CONST" => "NULL",
"UNUSED" => "NULL",
- "CV" => "_get_zval_ptr_cv_\\1(execute_data, opline->op1.var)",
+ "CV" => "_get_zval_ptr_cv_\\1(opline->op1.var EXECUTE_DATA_CC)",
"TMPVAR" => "???",
"TMPVARCV" => "???",
);
$op2_get_zval_ptr_ptr = array(
- "ANY" => "get_zval_ptr_ptr(opline->op2_type, opline->op2, execute_data, &free_op2, \\1)",
+ "ANY" => "get_zval_ptr_ptr(opline->op2_type, opline->op2, &free_op2, \\1)",
"TMP" => "NULL",
- "VAR" => "_get_zval_ptr_ptr_var(opline->op2.var, execute_data, &free_op2)",
+ "VAR" => "_get_zval_ptr_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC)",
"CONST" => "NULL",
"UNUSED" => "NULL",
- "CV" => "_get_zval_ptr_cv_\\1(execute_data, opline->op2.var)",
+ "CV" => "_get_zval_ptr_cv_\\1(opline->op2.var EXECUTE_DATA_CC)",
"TMPVAR" => "???",
"TMPVARCV" => "???",
);
$op1_get_zval_ptr_deref = array(
- "ANY" => "get_zval_ptr_deref(opline->op1_type, opline->op1, execute_data, &free_op1, \\1)",
- "TMP" => "_get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1)",
- "VAR" => "_get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1)",
+ "ANY" => "get_zval_ptr_deref(opline->op1_type, opline->op1, &free_op1, \\1)",
+ "TMP" => "_get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC)",
+ "VAR" => "_get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC)",
"CONST" => "EX_CONSTANT(opline->op1)",
"UNUSED" => "NULL",
- "CV" => "_get_zval_ptr_cv_deref_\\1(execute_data, opline->op1.var)",
+ "CV" => "_get_zval_ptr_cv_deref_\\1(opline->op1.var EXECUTE_DATA_CC)",
"TMPVAR" => "???",
"TMPVARCV" => "???",
);
$op2_get_zval_ptr_deref = array(
- "ANY" => "get_zval_ptr_deref(opline->op2_type, opline->op2, execute_data, &free_op2, \\1)",
- "TMP" => "_get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2)",
- "VAR" => "_get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2)",
+ "ANY" => "get_zval_ptr_deref(opline->op2_type, opline->op2, &free_op2, \\1)",
+ "TMP" => "_get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC)",
+ "VAR" => "_get_zval_ptr_var_deref(opline->op2.var, &free_op2 EXECUTE_DATA_CC)",
"CONST" => "EX_CONSTANT(opline->op2)",
"UNUSED" => "NULL",
- "CV" => "_get_zval_ptr_cv_deref_\\1(execute_data, opline->op2.var)",
+ "CV" => "_get_zval_ptr_cv_deref_\\1(opline->op2.var EXECUTE_DATA_CC)",
"TMPVAR" => "???",
"TMPVARCV" => "???",
);
$op1_get_zval_ptr_undef = array(
- "ANY" => "get_zval_ptr_undef(opline->op1_type, opline->op1, execute_data, &free_op1, \\1)",
- "TMP" => "_get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1)",
- "VAR" => "_get_zval_ptr_var(opline->op1.var, execute_data, &free_op1)",
+ "ANY" => "get_zval_ptr_undef(opline->op1_type, opline->op1, &free_op1, \\1)",
+ "TMP" => "_get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC)",
+ "VAR" => "_get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC)",
"CONST" => "EX_CONSTANT(opline->op1)",
"UNUSED" => "NULL",
- "CV" => "_get_zval_ptr_cv_undef(execute_data, opline->op1.var)",
- "TMPVAR" => "_get_zval_ptr_var(opline->op1.var, execute_data, &free_op1)",
+ "CV" => "_get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC)",
+ "TMPVAR" => "_get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC)",
"TMPVARCV" => "EX_VAR(opline->op1.var)",
);
$op2_get_zval_ptr_undef = array(
- "ANY" => "get_zval_ptr_undef(opline->op2_type, opline->op2, execute_data, &free_op2, \\1)",
- "TMP" => "_get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2)",
- "VAR" => "_get_zval_ptr_var(opline->op2.var, execute_data, &free_op2)",
+ "ANY" => "get_zval_ptr_undef(opline->op2_type, opline->op2, &free_op2, \\1)",
+ "TMP" => "_get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC)",
+ "VAR" => "_get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC)",
"CONST" => "EX_CONSTANT(opline->op2)",
"UNUSED" => "NULL",
- "CV" => "_get_zval_ptr_cv_undef(execute_data, opline->op2.var)",
- "TMPVAR" => "_get_zval_ptr_var(opline->op2.var, execute_data, &free_op2)",
+ "CV" => "_get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC)",
+ "TMPVAR" => "_get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC)",
"TMPVARCV" => "EX_VAR(opline->op2.var)",
);
$op1_get_zval_ptr_ptr_undef = array(
- "ANY" => "get_zval_ptr_ptr_undef(opline->op1_type, opline->op1, execute_data, &free_op1, \\1)",
+ "ANY" => "get_zval_ptr_ptr_undef(opline->op1_type, opline->op1, &free_op1, \\1)",
"TMP" => "NULL",
- "VAR" => "_get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1)",
+ "VAR" => "_get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC)",
"CONST" => "NULL",
"UNUSED" => "NULL",
- "CV" => "_get_zval_ptr_cv_undef_\\1(execute_data, opline->op1.var)",
+ "CV" => "_get_zval_ptr_cv_undef_\\1(opline->op1.var EXECUTE_DATA_CC)",
"TMPVAR" => "???",
"TMPVARCV" => "EX_VAR(opline->op1.var)",
);
$op2_get_zval_ptr_ptr_undef = array(
- "ANY" => "get_zval_ptr_ptr_undef(opline->op2_type, opline->op2, execute_data, &free_op2, \\1)",
+ "ANY" => "get_zval_ptr_ptr_undef(opline->op2_type, opline->op2, &free_op2, \\1)",
"TMP" => "NULL",
- "VAR" => "_get_zval_ptr_ptr_var(opline->op2.var, execute_data, &free_op2)",
+ "VAR" => "_get_zval_ptr_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC)",
"CONST" => "NULL",
"UNUSED" => "NULL",
- "CV" => "_get_zval_ptr_cv_undef_\\1(execute_data, opline->op2.var)",
+ "CV" => "_get_zval_ptr_cv_undef_\\1(opline->op2.var EXECUTE_DATA_CC)",
"TMPVAR" => "???",
"TMPVARCV" => "EX_VAR(opline->op2.var)",
);
$op1_get_obj_zval_ptr = array(
- "ANY" => "get_obj_zval_ptr(opline->op1_type, opline->op1, execute_data, &free_op1, \\1)",
- "TMP" => "_get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1)",
- "VAR" => "_get_zval_ptr_var(opline->op1.var, execute_data, &free_op1)",
+ "ANY" => "get_obj_zval_ptr(opline->op1_type, opline->op1, &free_op1, \\1)",
+ "TMP" => "_get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC)",
+ "VAR" => "_get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC)",
"CONST" => "EX_CONSTANT(opline->op1)",
- "UNUSED" => "_get_obj_zval_ptr_unused(execute_data)",
- "CV" => "_get_zval_ptr_cv_\\1(execute_data, opline->op1.var)",
- "TMPVAR" => "_get_zval_ptr_var(opline->op1.var, execute_data, &free_op1)",
+ "UNUSED" => "_get_obj_zval_ptr_unused(EXECUTE_DATA_C)",
+ "CV" => "_get_zval_ptr_cv_\\1(opline->op1.var EXECUTE_DATA_CC)",
+ "TMPVAR" => "_get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC)",
"TMPVARCV" => "???",
);
$op2_get_obj_zval_ptr = array(
- "ANY" => "get_obj_zval_ptr(opline->op2_type, opline->op2, execute_data, &free_op2, \\1)",
- "TMP" => "_get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2)",
- "VAR" => "_get_zval_ptr_var(opline->op2.var, execute_data, &free_op2)",
+ "ANY" => "get_obj_zval_ptr(opline->op2_type, opline->op2, &free_op2, \\1)",
+ "TMP" => "_get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC)",
+ "VAR" => "_get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC)",
"CONST" => "EX_CONSTANT(opline->op2)",
- "UNUSED" => "_get_obj_zval_ptr_unused(execute_data)",
- "CV" => "_get_zval_ptr_cv_\\1(execute_data, opline->op2.var)",
- "TMPVAR" => "_get_zval_ptr_var(opline->op2.var, execute_data, &free_op2)",
+ "UNUSED" => "_get_obj_zval_ptr_unused(EXECUTE_DATA_C)",
+ "CV" => "_get_zval_ptr_cv_\\1(opline->op2.var EXECUTE_DATA_CC)",
+ "TMPVAR" => "_get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC)",
"TMPVARCV" => "???",
);
$op1_get_obj_zval_ptr_undef = array(
- "ANY" => "get_obj_zval_ptr_undef(opline->op1_type, opline->op1, execute_data, &free_op1, \\1)",
- "TMP" => "_get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1)",
- "VAR" => "_get_zval_ptr_var(opline->op1.var, execute_data, &free_op1)",
+ "ANY" => "get_obj_zval_ptr_undef(opline->op1_type, opline->op1, &free_op1, \\1)",
+ "TMP" => "_get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC)",
+ "VAR" => "_get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC)",
"CONST" => "EX_CONSTANT(opline->op1)",
- "UNUSED" => "_get_obj_zval_ptr_unused(execute_data)",
- "CV" => "_get_zval_ptr_cv_undef(execute_data, opline->op1.var)",
- "TMPVAR" => "_get_zval_ptr_var(opline->op1.var, execute_data, &free_op1)",
+ "UNUSED" => "_get_obj_zval_ptr_unused(EXECUTE_DATA_C)",
+ "CV" => "_get_zval_ptr_cv_undef(opline->op1.var EXECUTE_DATA_CC)",
+ "TMPVAR" => "_get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC)",
"TMPVARCV" => "EX_VAR(opline->op1.var)",
);
$op2_get_obj_zval_ptr_undef = array(
- "ANY" => "get_obj_zval_ptr_undef(opline->op2_type, opline->op2, execute_data, &free_op2, \\1)",
- "TMP" => "_get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2)",
- "VAR" => "_get_zval_ptr_var(opline->op2.var, execute_data, &free_op2)",
+ "ANY" => "get_obj_zval_ptr_undef(opline->op2_type, opline->op2, &free_op2, \\1)",
+ "TMP" => "_get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC)",
+ "VAR" => "_get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC)",
"CONST" => "EX_CONSTANT(opline->op2)",
- "UNUSED" => "_get_obj_zval_ptr_unused(execute_data)",
- "CV" => "_get_zval_ptr_cv_undef(execute_data, opline->op2.var)",
- "TMPVAR" => "_get_zval_ptr_var(opline->op2.var, execute_data, &free_op2)",
+ "UNUSED" => "_get_obj_zval_ptr_unused(EXECUTE_DATA_C)",
+ "CV" => "_get_zval_ptr_cv_undef(opline->op2.var EXECUTE_DATA_CC)",
+ "TMPVAR" => "_get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC)",
"TMPVARCV" => "EX_VAR(opline->op2.var)",
);
$op1_get_obj_zval_ptr_deref = array(
- "ANY" => "get_obj_zval_ptr(opline->op1_type, opline->op1, execute_data, &free_op1, \\1)",
- "TMP" => "_get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1)",
- "VAR" => "_get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1)",
+ "ANY" => "get_obj_zval_ptr(opline->op1_type, opline->op1, &free_op1, \\1)",
+ "TMP" => "_get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC)",
+ "VAR" => "_get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC)",
"CONST" => "EX_CONSTANT(opline->op1)",
- "UNUSED" => "_get_obj_zval_ptr_unused(execute_data)",
- "CV" => "_get_zval_ptr_cv_deref_\\1(execute_data, opline->op1.var)",
+ "UNUSED" => "_get_obj_zval_ptr_unused(EXECUTE_DATA_C)",
+ "CV" => "_get_zval_ptr_cv_deref_\\1(opline->op1.var EXECUTE_DATA_CC)",
"TMPVAR" => "???",
"TMPVARCV" => "???",
);
$op2_get_obj_zval_ptr_deref = array(
- "ANY" => "get_obj_zval_ptr(opline->op2_type, opline->op2, execute_data, &free_op2, \\1)",
- "TMP" => "_get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2)",
- "VAR" => "_get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2)",
+ "ANY" => "get_obj_zval_ptr(opline->op2_type, opline->op2, &free_op2, \\1)",
+ "TMP" => "_get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC)",
+ "VAR" => "_get_zval_ptr_var_deref(opline->op2.var, &free_op2 EXECUTE_DATA_CC)",
"CONST" => "EX_CONSTANT(opline->op2)",
- "UNUSED" => "_get_obj_zval_ptr_unused(execute_data)",
- "CV" => "_get_zval_ptr_cv_deref_\\1(execute_data, opline->op2.var)",
+ "UNUSED" => "_get_obj_zval_ptr_unused(EXECUTE_DATA_C)",
+ "CV" => "_get_zval_ptr_cv_deref_\\1(opline->op2.var EXECUTE_DATA_CC)",
"TMPVAR" => "???",
"TMPVARCV" => "???",
);
$op1_get_obj_zval_ptr_ptr = array(
- "ANY" => "get_obj_zval_ptr_ptr(opline->op1_type, opline->op1, execute_data, &free_op1, \\1)",
+ "ANY" => "get_obj_zval_ptr_ptr(opline->op1_type, opline->op1, &free_op1, \\1)",
"TMP" => "NULL",
- "VAR" => "_get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1)",
+ "VAR" => "_get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC)",
"CONST" => "NULL",
- "UNUSED" => "_get_obj_zval_ptr_unused(execute_data)",
- "CV" => "_get_zval_ptr_cv_\\1(execute_data, opline->op1.var)",
+ "UNUSED" => "_get_obj_zval_ptr_unused(EXECUTE_DATA_C)",
+ "CV" => "_get_zval_ptr_cv_\\1(opline->op1.var EXECUTE_DATA_CC)",
"TMPVAR" => "???",
"TMPVARCV" => "???",
);
$op2_get_obj_zval_ptr_ptr = array(
- "ANY" => "get_obj_zval_ptr_ptr(opline->op2_type, opline->op2, execute_data, &free_op2, \\1)",
+ "ANY" => "get_obj_zval_ptr_ptr(opline->op2_type, opline->op2, &free_op2, \\1)",
"TMP" => "NULL",
- "VAR" => "_get_zval_ptr_ptr_var(opline->op2.var, execute_data, &free_op2)",
+ "VAR" => "_get_zval_ptr_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC)",
"CONST" => "NULL",
- "UNUSED" => "_get_obj_zval_ptr_unused(execute_data)",
- "CV" => "_get_zval_ptr_cv_\\1(execute_data, opline->op2.var)",
+ "UNUSED" => "_get_obj_zval_ptr_unused(EXECUTE_DATA_C)",
+ "CV" => "_get_zval_ptr_cv_\\1(opline->op2.var EXECUTE_DATA_CC)",
"TMPVAR" => "???",
"TMPVARCV" => "???",
);
$op1_get_obj_zval_ptr_ptr_undef = array(
- "ANY" => "get_obj_zval_ptr_ptr(opline->op1_type, opline->op1, execute_data, &free_op1, \\1)",
+ "ANY" => "get_obj_zval_ptr_ptr(opline->op1_type, opline->op1, &free_op1, \\1)",
"TMP" => "NULL",
- "VAR" => "_get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1)",
+ "VAR" => "_get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC)",
"CONST" => "NULL",
- "UNUSED" => "_get_obj_zval_ptr_unused(execute_data)",
- "CV" => "_get_zval_ptr_cv_undef_\\1(execute_data, opline->op1.var)",
+ "UNUSED" => "_get_obj_zval_ptr_unused(EXECUTE_DATA_C)",
+ "CV" => "_get_zval_ptr_cv_undef_\\1(opline->op1.var EXECUTE_DATA_CC)",
"TMPVAR" => "???",
"TMPVARCV" => "EX_VAR(opline->op1.var)",
);
$op2_get_obj_zval_ptr_ptr_undef = array(
- "ANY" => "get_obj_zval_ptr_ptr(opline->op2_type, opline->op2, execute_data, &free_op2, \\1)",
+ "ANY" => "get_obj_zval_ptr_ptr(opline->op2_type, opline->op2, &free_op2, \\1)",
"TMP" => "NULL",
- "VAR" => "_get_zval_ptr_ptr_var(opline->op2.var, execute_data, &free_op2)",
+ "VAR" => "_get_zval_ptr_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC)",
"CONST" => "NULL",
- "UNUSED" => "_get_obj_zval_ptr_unused(execute_data)",
- "CV" => "_get_zval_ptr_cv_undef_\\1(execute_data, opline->op2.var)",
+ "UNUSED" => "_get_obj_zval_ptr_unused(EXECUTE_DATA_C)",
+ "CV" => "_get_zval_ptr_cv_undef_\\1(opline->op2.var EXECUTE_DATA_CC)",
"TMPVAR" => "???",
"TMPVARCV" => "EX_VAR(opline->op2.var)",
);
@@ -553,23 +555,23 @@ $op_data_type = array(
);
$op_data_get_zval_ptr = array(
- "ANY" => "get_zval_ptr((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data, \\1)",
- "TMP" => "_get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data)",
- "VAR" => "_get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data)",
+ "ANY" => "get_zval_ptr((opline+1)->op1_type, (opline+1)->op1, &free_op_data, \\1)",
+ "TMP" => "_get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC)",
+ "VAR" => "_get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC)",
"CONST" => "EX_CONSTANT((opline+1)->op1)",
"UNUSED" => "NULL",
- "CV" => "_get_zval_ptr_cv_\\1(execute_data, (opline+1)->op1.var)",
- "TMPVAR" => "_get_zval_ptr_var((opline+1)->op1.var, execute_data, &free_op_data)",
+ "CV" => "_get_zval_ptr_cv_\\1((opline+1)->op1.var EXECUTE_DATA_CC)",
+ "TMPVAR" => "_get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC)",
"TMPVARCV" => "???",
);
$op_data_get_zval_ptr_deref = array(
- "ANY" => "get_zval_ptr((opline+1)->op1_type, (opline+1)->op1, execute_data, &free_op_data, \\1)",
- "TMP" => "_get_zval_ptr_tmp((opline+1)->op1.var, execute_data, &free_op_data)",
- "VAR" => "_get_zval_ptr_var_deref((opline+1)->op1.var, execute_data, &free_op_data)",
+ "ANY" => "get_zval_ptr((opline+1)->op1_type, (opline+1)->op1, &free_op_data, \\1)",
+ "TMP" => "_get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC)",
+ "VAR" => "_get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC)",
"CONST" => "EX_CONSTANT((opline+1)->op1)",
"UNUSED" => "NULL",
- "CV" => "_get_zval_ptr_cv_deref_\\1(execute_data, (opline+1)->op1.var)",
+ "CV" => "_get_zval_ptr_cv_deref_\\1((opline+1)->op1.var EXECUTE_DATA_CC)",
"TMPVAR" => "???",
"TMPVARCV" => "???",
);
@@ -622,9 +624,11 @@ function out_line($f) {
}
// Returns name of specialized helper
-function helper_name($name, $spec, $op1, $op2) {
+function helper_name($name, $spec, $op1, $op2, $extra_spec) {
global $prefix, $helpers;
+ $extra = "";
+
if (isset($helpers[$name])) {
// If we haven't helper with specified spicialized operands then
// using unspecialized helper
@@ -636,8 +640,12 @@ function helper_name($name, $spec, $op1, $op2) {
isset($helpers[$name]["op2"]["ANY"])) {
$op2 = "ANY";
}
+ /* forward common specs (e.g. in ZEND_VM_DISPATCH_TO_HELPER) */
+ if (isset($extra_spec, $helpers[$name]["spec"])) {
+ $extra = extra_spec_name(array_intersect_key($extra_spec, $helpers[$name]["spec"]));
+ }
}
- return $name.($spec?"_SPEC":"").$prefix[$op1].$prefix[$op2];
+ return $name.($spec?"_SPEC":"").$prefix[$op1].$prefix[$op2].$extra;
}
function opcode_name($name, $spec, $op1, $op2) {
@@ -823,11 +831,11 @@ function gen_code($f, $spec, $kind, $export, $code, $op1, $op2, $name, $extra_sp
case ZEND_VM_KIND_CALL:
$code = preg_replace_callback(
array(
- "/EXECUTE_DATA/m",
+ "/EXECUTE_DATA(?=[^_])/m",
"/ZEND_VM_DISPATCH_TO_HANDLER\(\s*([A-Z_]*)\s*\)/m",
"/ZEND_VM_DISPATCH_TO_HELPER\(\s*([A-Za-z_]*)\s*(,[^)]*)?\)/m",
),
- function($matches) use ($spec, $prefix, $op1, $op2) {
+ function($matches) use ($spec, $prefix, $op1, $op2, $extra_spec) {
if (strncasecmp($matches[0], "EXECUTE_DATA", strlen("EXECUTE_DATA")) == 0) {
return "execute_data";
} else if (strncasecmp($matches[0], "ZEND_VM_DISPATCH_TO_HANDLER", strlen("ZEND_VM_DISPATCH_TO_HANDLER")) == 0) {
@@ -837,9 +845,9 @@ function gen_code($f, $spec, $kind, $export, $code, $op1, $op2, $name, $extra_sp
if (isset($matches[2])) {
// extra args
$args = substr(preg_replace("/,\s*[A-Za-z_]*\s*,\s*([^,)\s]*)\s*/", ", $1", $matches[2]), 2);
- return "ZEND_VM_TAIL_CALL(" . helper_name($matches[1], $spec, $op1, $op2) . "(" . $args. " ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC))";
+ return "ZEND_VM_TAIL_CALL(" . helper_name($matches[1], $spec, $op1, $op2, $extra_spec) . "(" . $args. " ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC))";
}
- return "ZEND_VM_TAIL_CALL(" . helper_name($matches[1], $spec, $op1, $op2) . "(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU))";
+ return "ZEND_VM_TAIL_CALL(" . helper_name($matches[1], $spec, $op1, $op2, $extra_spec) . "(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU))";
}
},
$code);
@@ -847,11 +855,11 @@ function gen_code($f, $spec, $kind, $export, $code, $op1, $op2, $name, $extra_sp
case ZEND_VM_KIND_SWITCH:
$code = preg_replace_callback(
array(
- "/EXECUTE_DATA/m",
+ "/EXECUTE_DATA(?=[^_])/m",
"/ZEND_VM_DISPATCH_TO_HANDLER\(\s*([A-Z_]*)\s*\)/m",
"/ZEND_VM_DISPATCH_TO_HELPER\(\s*([A-Za-z_]*)\s*(,[^)]*)?\)/m",
),
- function($matches) use ($spec, $prefix, $op1, $op2) {
+ function($matches) use ($spec, $prefix, $op1, $op2, $extra_spec) {
if (strncasecmp($matches[0], "EXECUTE_DATA", strlen("EXECUTE_DATA")) == 0) {
return "execute_data";
} else if (strncasecmp($matches[0], "ZEND_VM_DISPATCH_TO_HANDLER", strlen("ZEND_VM_DISPATCH_TO_HANDLER")) == 0) {
@@ -861,9 +869,9 @@ function gen_code($f, $spec, $kind, $export, $code, $op1, $op2, $name, $extra_sp
if (isset($matches[2])) {
// extra args
$args = preg_replace("/,\s*([A-Za-z_]*)\s*,\s*([^,)\s]*)\s*/", "$1 = $2; ", $matches[2]);
- return $args . "goto " . helper_name($matches[1], $spec, $op1, $op2);
+ return $args . "goto " . helper_name($matches[1], $spec, $op1, $op2, $extra_spec);
}
- return "goto " . helper_name($matches[1], $spec, $op1, $op2);
+ return "goto " . helper_name($matches[1], $spec, $op1, $op2, $extra_spec);
}
},
$code);
@@ -871,23 +879,23 @@ function gen_code($f, $spec, $kind, $export, $code, $op1, $op2, $name, $extra_sp
case ZEND_VM_KIND_GOTO:
$code = preg_replace_callback(
array(
- "/EXECUTE_DATA/m",
+ "/EXECUTE_DATA(?=[^_])/m",
"/ZEND_VM_DISPATCH_TO_HANDLER\(\s*([A-Z_]*)\s*\)/m",
"/ZEND_VM_DISPATCH_TO_HELPER\(\s*([A-Za-z_]*)\s*(,[^)]*)?\)/m",
),
- function($matches) use ($spec, $prefix, $op1, $op2) {
+ function($matches) use ($spec, $prefix, $op1, $op2, $extra_spec) {
if (strncasecmp($matches[0], "EXECUTE_DATA", strlen("EXECUTE_DATA")) == 0) {
return "execute_data";
} else if (strncasecmp($matches[0], "ZEND_VM_DISPATCH_TO_HANDLER", strlen("ZEND_VM_DISPATCH_TO_HANDLER")) == 0) {
- return "goto " . opcode_name($matches[1], $spec, $op1, $op2) . "_HANDLER";
+ return "goto " . opcode_name($matches[1], $spec, $op1, $op2) . "_LABEL";
} else {
// ZEND_VM_DISPATCH_TO_HELPER
if (isset($matches[2])) {
// extra args
$args = preg_replace("/,\s*([A-Za-z_]*)\s*,\s*([^,)\s]*)\s*/", "$1 = $2; ", $matches[2]);
- return $args . "goto " . helper_name($matches[1], $spec, $op1, $op2);
+ return $args . "goto " . helper_name($matches[1], $spec, $op1, $op2, $extra_spec);
}
- return "goto " . helper_name($matches[1], $spec, $op1, $op2);
+ return "goto " . helper_name($matches[1], $spec, $op1, $op2, $extra_spec);
}
},
$code);
@@ -941,29 +949,36 @@ function gen_code($f, $spec, $kind, $export, $code, $op1, $op2, $name, $extra_sp
out($f, $code);
}
-// Generates opcode handler
-function gen_handler($f, $spec, $kind, $name, $op1, $op2, $use, $code, $lineno, $extra_spec = null, &$switch_labels = array()) {
- global $definition_file, $prefix, $typecode, $opnames, $commutative_order;
+function skip_extra_spec_function($op1, $op2, $extra_spec) {
+ global $commutative_order;
- if ($spec &&
- isset($extra_spec["NO_CONST_CONST"]) &&
+ if (isset($extra_spec["NO_CONST_CONST"]) &&
$op1 == "CONST" && $op2 == "CONST") {
// Skip useless constant handlers
- return;
+ return true;
}
- if ($spec &&
- isset($extra_spec["COMMUTATIVE"]) &&
+ if (isset($extra_spec["COMMUTATIVE"]) &&
$commutative_order[$op1] > $commutative_order[$op2]) {
// Skip duplicate commutative handlers
- return;
+ return true;
}
- if ($spec &&
- isset($extra_spec["DIM_OBJ"]) &&
- (($op2 == "UNUSED" && $extra_spec["DIM_OBJ"] != 1) ||
- ($op1 == "UNUSED" && $extra_spec["DIM_OBJ"] != 2))) {
+ if (isset($extra_spec["DIM_OBJ"]) &&
+ (($op2 == "UNUSED" && $extra_spec["DIM_OBJ"] != 1) ||
+ ($op1 == "UNUSED" && $extra_spec["DIM_OBJ"] != 2))) {
// Skip useless handlers
+ return true;
+ }
+
+ return false;
+}
+
+// Generates opcode handler
+function gen_handler($f, $spec, $kind, $name, $op1, $op2, $use, $code, $lineno, $opcode, $extra_spec = null, &$switch_labels = array()) {
+ global $definition_file, $prefix, $typecode, $opnames;
+
+ if ($spec && skip_extra_spec_function($op1, $op2, $extra_spec)) {
return;
}
@@ -974,8 +989,17 @@ function gen_handler($f, $spec, $kind, $name, $op1, $op2, $use, $code, $lineno,
// Generate opcode handler's entry point according to selected threading model
$spec_name = $name.($spec?"_SPEC":"").$prefix[$op1].$prefix[$op2].($spec?extra_spec_name($extra_spec):"");
switch($kind) {
+ case ZEND_VM_KIND_HYBRID:
+ out($f,"\t\t\tHYBRID_CASE({$spec_name}):\n");
+ out($f,"\t\t\t\t{$spec_name}_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);\n");
+ out($f,"\t\t\t\tHYBRID_BREAK();\n");
+ return;
case ZEND_VM_KIND_CALL:
- out($f,"static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL {$spec_name}_HANDLER(ZEND_OPCODE_HANDLER_ARGS)\n");
+ if ($opcode["hot"] && ZEND_VM_KIND == ZEND_VM_KIND_HYBRID) {
+ out($f,"static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL {$spec_name}_HANDLER(ZEND_OPCODE_HANDLER_ARGS)\n");
+ } else {
+ out($f,"static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL {$spec_name}_HANDLER(ZEND_OPCODE_HANDLER_ARGS)\n");
+ }
break;
case ZEND_VM_KIND_SWITCH:
if ($spec) {
@@ -993,7 +1017,7 @@ function gen_handler($f, $spec, $kind, $name, $op1, $op2, $use, $code, $lineno,
}
break;
case ZEND_VM_KIND_GOTO:
- out($f,"{$spec_name}_HANDLER: ZEND_VM_GUARD($spec_name);\n");
+ out($f,"{$spec_name}_LABEL: ZEND_VM_GUARD($spec_name);\n");
break;
}
@@ -1002,13 +1026,23 @@ function gen_handler($f, $spec, $kind, $name, $op1, $op2, $use, $code, $lineno,
}
// Generates helper
-function gen_helper($f, $spec, $kind, $name, $op1, $op2, $param, $code, $lineno, $inline) {
+function gen_helper($f, $spec, $kind, $name, $op1, $op2, $param, $code, $lineno, $inline, $extra_spec = null) {
global $definition_file, $prefix;
+ if ($kind == ZEND_VM_KIND_HYBRID) {
+ return;
+ }
+
+ if ($spec && skip_extra_spec_function($op1, $op2, $extra_spec)) {
+ return;
+ }
+
if (ZEND_VM_LINES) {
out($f, "#line $lineno \"$definition_file\"\n");
}
+ $spec_name = $name.($spec?"_SPEC":"").$prefix[$op1].$prefix[$op2].($spec?extra_spec_name($extra_spec):"");
+
// Generate helper's entry point according to selected threading model
switch($kind) {
case ZEND_VM_KIND_CALL:
@@ -1021,22 +1055,22 @@ function gen_helper($f, $spec, $kind, $name, $op1, $op2, $param, $code, $lineno,
}
if ($param == null) {
// Helper without parameters
- out($f, "static$zend_always_inline ZEND_OPCODE_HANDLER_RET$zend_fastcall ".$name.($spec?"_SPEC":"").$prefix[$op1].$prefix[$op2]."(ZEND_OPCODE_HANDLER_ARGS)\n");
+ out($f, "static$zend_always_inline ZEND_OPCODE_HANDLER_RET$zend_fastcall $spec_name(ZEND_OPCODE_HANDLER_ARGS)\n");
} else {
// Helper with parameter
- out($f, "static$zend_always_inline ZEND_OPCODE_HANDLER_RET$zend_fastcall ".$name.($spec?"_SPEC":"").$prefix[$op1].$prefix[$op2]."(".$param." ZEND_OPCODE_HANDLER_ARGS_DC)\n");
+ out($f, "static$zend_always_inline ZEND_OPCODE_HANDLER_RET$zend_fastcall $spec_name($param ZEND_OPCODE_HANDLER_ARGS_DC)\n");
}
break;
case ZEND_VM_KIND_SWITCH:
- out($f, $name.($spec?"_SPEC":"").$prefix[$op1].$prefix[$op2].":\n");
+ out($f, "$spec_name:\n");
break;
case ZEND_VM_KIND_GOTO:
- out($f, $name.($spec?"_SPEC":"").$prefix[$op1].$prefix[$op2].":\n");
+ out($f, "$spec_name:\n");
break;
}
// Generate helper's code
- gen_code($f, $spec, $kind, 0, $code, $op1, $op2, $name);
+ gen_code($f, $spec, $kind, 0, $code, $op1, $op2, $name, $extra_spec);
}
@@ -1049,7 +1083,7 @@ function gen_null_label($f, $kind, $prolog) {
out($f,$prolog."(void*)(uintptr_t)-1,\n");
break;
case ZEND_VM_KIND_GOTO:
- out($f,$prolog."(void*)&&ZEND_NULL_HANDLER,\n");
+ out($f,$prolog."(void*)&&ZEND_NULL_LABEL,\n");
break;
}
}
@@ -1182,23 +1216,7 @@ function gen_labels($f, $spec, $kind, $prolog, &$specs, $switch_labels = array()
if (isset($dsc["op1"][$op1]) &&
isset($dsc["op2"][$op2]) &&
(!isset($extra_spec["OP_DATA"]) || isset($dsc["spec"]["OP_DATA"][$extra_spec["OP_DATA"]]))) {
-
- if (isset($extra_spec["NO_CONST_CONST"]) &&
- $op1 == "CONST" && $op2 == "CONST") {
- // Skip useless constant handlers
- gen_null_label($f, $kind, $prolog);
- $label++;
- return;
- } else if (isset($extra_spec["COMMUTATIVE"]) &&
- $commutative_order[$op1] > $commutative_order[$op2]) {
- // Skip duplicate commutative handlers
- gen_null_label($f, $kind, $prolog);
- $label++;
- return;
- } else if (isset($extra_spec["DIM_OBJ"]) &&
- (($op2 == "UNUSED" && $extra_spec["DIM_OBJ"] != 1) ||
- ($op1 == "UNUSED" && $extra_spec["DIM_OBJ"] != 2))) {
- // Skip useless handlers
+ if (skip_extra_spec_function($op1, $op2, $extra_spec)) {
gen_null_label($f, $kind, $prolog);
$label++;
return;
@@ -1216,7 +1234,7 @@ function gen_labels($f, $spec, $kind, $prolog, &$specs, $switch_labels = array()
$label++;
break;
case ZEND_VM_KIND_GOTO:
- out($f,$prolog."(void*)&&{$spec_name}_HANDLER,\n");
+ out($f,$prolog."(void*)&&{$spec_name}_LABEL,\n");
$label++;
break;
}
@@ -1262,7 +1280,7 @@ function gen_labels($f, $spec, $kind, $prolog, &$specs, $switch_labels = array()
out($f,$prolog."(void*)(uintptr_t)-1,\n");
break;
case ZEND_VM_KIND_GOTO:
- out($f,$prolog."(void*)&&ZEND_NULL_HANDLER,\n");
+ out($f,$prolog."(void*)&&ZEND_NULL_LABEL,\n");
break;
}
$next++;
@@ -1283,7 +1301,7 @@ function gen_labels($f, $spec, $kind, $prolog, &$specs, $switch_labels = array()
out($f,$prolog."(void*)(uintptr_t)".((string)$num).",\n");
break;
case ZEND_VM_KIND_GOTO:
- out($f,$prolog."(void*)&&".$dsc["op"]."_HANDLER,\n");
+ out($f,$prolog."(void*)&&".$dsc["op"]."_LABEL,\n");
break;
}
} else {
@@ -1295,7 +1313,7 @@ function gen_labels($f, $spec, $kind, $prolog, &$specs, $switch_labels = array()
out($f,$prolog."(void*)(uintptr_t)-1,\n");
break;
case ZEND_VM_KIND_GOTO:
- out($f,$prolog."(void*)&&ZEND_NULL_HANDLER,\n");
+ out($f,$prolog."(void*)&&ZEND_NULL_LABEL,\n");
break;
}
}
@@ -1311,14 +1329,14 @@ function gen_labels($f, $spec, $kind, $prolog, &$specs, $switch_labels = array()
out($f,$prolog."(void*)(uintptr_t)-1\n");
break;
case ZEND_VM_KIND_GOTO:
- out($f,$prolog."(void*)&&ZEND_NULL_HANDLER\n");
+ out($f,$prolog."(void*)&&ZEND_NULL_LABEL\n");
break;
}
$specs[$num + 1] = "$label";
}
// Generates specialized offsets
-function gen_specs($f, $spec, $kind, $prolog, $specs) {
+function gen_specs($f, $prolog, $specs) {
$lastdef = array_pop($specs);
$last = 0;
foreach ($specs as $num => $def) {
@@ -1459,16 +1477,18 @@ function gen_executor_code($f, $spec, $kind, $prolog, &$switch_labels = array())
if (isset($opcodes[$num]["op1"][$op1]) &&
isset($opcodes[$num]["op2"][$op2])) {
// Generate handler code
- gen_handler($f, 1, $kind, $opcodes[$num]["op"], $op1, $op2, isset($opcodes[$num]["use"]), $opcodes[$num]["code"], $lineno, $extra_spec, $switch_labels);
+ gen_handler($f, 1, $kind, $opcodes[$num]["op"], $op1, $op2, isset($opcodes[$num]["use"]), $opcodes[$num]["code"], $lineno, $opcodes[$num], $extra_spec, $switch_labels);
}
}
} else if (isset($dsc["helper"])) {
$num = $dsc["helper"];
- // Check if handler accepts such types of operands (op1 and op2)
- if (isset($helpers[$num]["op1"][$op1]) &&
- isset($helpers[$num]["op2"][$op2])) {
- // Generate helper code
- gen_helper($f, 1, $kind, $num, $op1, $op2, $helpers[$num]["param"], $helpers[$num]["code"], $lineno, $helpers[$num]["inline"]);
+ foreach (extra_spec_handler($helpers[$num]) as $extra_spec) {
+ // Check if handler accepts such types of operands (op1 and op2)
+ if (isset($helpers[$num]["op1"][$op1]) &&
+ isset($helpers[$num]["op2"][$op2])) {
+ // Generate helper code
+ gen_helper($f, 1, $kind, $num, $op1, $op2, $helpers[$num]["param"], $helpers[$num]["code"], $lineno, $helpers[$num]["inline"], $extra_spec);
+ }
}
} else {
var_dump($dsc);
@@ -1486,7 +1506,7 @@ function gen_executor_code($f, $spec, $kind, $prolog, &$switch_labels = array())
$num = $dsc["handler"];
// Generate handler code
if ($num < 256) {
- gen_handler($f, 0, $kind, $opcodes[$num]["op"], "ANY", "ANY", isset($opcodes[$num]["use"]), $opcodes[$num]["code"], $lineno);
+ gen_handler($f, 0, $kind, $opcodes[$num]["op"], "ANY", "ANY", isset($opcodes[$num]["use"]), $opcodes[$num]["code"], $lineno, $opcodes[$num]);
}
} else if (isset($dsc["helper"])) {
$num = $dsc["helper"];
@@ -1515,10 +1535,19 @@ function gen_executor_code($f, $spec, $kind, $prolog, &$switch_labels = array())
out($f,"\tZEND_VM_NEXT_OPCODE(); /* Never reached */\n");
break;
case ZEND_VM_KIND_GOTO:
- out($f,"ZEND_NULL_HANDLER:\n");
+ out($f,"ZEND_NULL_LABEL:\n");
out($f,"\tzend_error_noreturn(E_ERROR, \"Invalid opcode %d/%d/%d.\", OPLINE->opcode, OPLINE->op1_type, OPLINE->op2_type);\n");
out($f,"\tZEND_VM_NEXT_OPCODE(); /* Never reached */\n");
break;
+ case ZEND_VM_KIND_HYBRID:
+ out($f,"\t\t\tHYBRID_CASE(HYBRID_HALT):\n");
+ out($f,"\t\t\t\texecute_data = orig_execute_data;\n");
+ out($f,"\t\t\t\topline = orig_opline;\n");
+ out($f,"\t\t\t\treturn;\n");
+ out($f,"\t\t\tHYBRID_DEFAULT:\n");
+ out($f,"\t\t\t\tzend_error_noreturn(E_ERROR, \"Invalid opcode %d/%d/%d.\", OPLINE->opcode, OPLINE->op1_type, OPLINE->op2_type);\n");
+ out($f,"\t\t\t\tHYBRID_BREAK(); /* Never reached */\n");
+ break;
}
}
@@ -1552,21 +1581,30 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
out($f,"static const uint32_t *zend_spec_handlers;\n");
out($f,"static const void **zend_opcode_handlers;\n");
out($f,"static int zend_handlers_count;\n");
+ if ($kind == ZEND_VM_KIND_HYBRID) {
+ out($f,"#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)\n");
+ out($f,"static const void **zend_opcode_handler_funcs;\n");
+ out($f,"static zend_op hybrid_halt_op;\n");
+ out($f,"#endif\n");
+ }
out($f,"static const void *zend_vm_get_opcode_handler(zend_uchar opcode, const zend_op* op);\n\n");
+ if ($kind == ZEND_VM_KIND_HYBRID) {
+ out($f,"#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)\n");
+ out($f,"static const void *zend_vm_get_opcode_handler_func(zend_uchar opcode, const zend_op* op);\n");
+ out($f,"#else\n");
+ out($f,"# define zend_vm_get_opcode_handler_func zend_vm_get_opcode_handler\n");
+ out($f,"#endif\n\n");
+ }
switch ($kind) {
- case ZEND_VM_KIND_CALL:
- out($f,"\n");
- out($f,"#ifdef ZEND_VM_FP_GLOBAL_REG\n");
- out($f,"#pragma GCC diagnostic ignored \"-Wvolatile-register-var\"\n");
- out($f,"register zend_execute_data* volatile execute_data __asm__(ZEND_VM_FP_GLOBAL_REG);\n");
- out($f,"#pragma GCC diagnostic warning \"-Wvolatile-register-var\"\n");
- out($f,"#endif\n");
- out($f,"\n");
- out($f,"#ifdef ZEND_VM_IP_GLOBAL_REG\n");
- out($f,"#pragma GCC diagnostic ignored \"-Wvolatile-register-var\"\n");
- out($f,"register const zend_op* volatile opline __asm__(ZEND_VM_IP_GLOBAL_REG);\n");
- out($f,"#pragma GCC diagnostic warning \"-Wvolatile-register-var\"\n");
+ case ZEND_VM_KIND_HYBRID:
+ out($f,"#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)\n");
+ out($f,"#define HYBRID_NEXT() goto *(void**)(OPLINE->handler)\n");
+ out($f,"#define HYBRID_SWITCH() HYBRID_NEXT();\n");
+ out($f,"#define HYBRID_CASE(op) op ## _LABEL\n");
+ out($f,"#define HYBRID_BREAK() HYBRID_NEXT()\n");
+ out($f,"#define HYBRID_DEFAULT ZEND_NULL_LABEL\n");
out($f,"#endif\n");
+ case ZEND_VM_KIND_CALL:
out($f,"\n");
out($f,"#ifdef ZEND_VM_FP_GLOBAL_REG\n");
out($f,"# define ZEND_OPCODE_HANDLER_ARGS void\n");
@@ -1588,12 +1626,25 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
out($f,"# else\n");
out($f,"# define ZEND_VM_CONTINUE() return\n");
out($f,"# endif\n");
- out($f,"# define ZEND_VM_RETURN() opline = NULL; return\n");
+ if ($kind == ZEND_VM_KIND_HYBRID) {
+ out($f,"# if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)\n");
+ out($f,"# define ZEND_VM_RETURN() opline = &hybrid_halt_op; return\n");
+ out($f,"# define ZEND_VM_HOT zend_always_inline\n");
+ out($f,"# else\n");
+ out($f,"# define ZEND_VM_RETURN() opline = NULL; return\n");
+ out($f,"# define ZEND_VM_HOT\n");
+ out($f,"# endif\n");
+ } else {
+ out($f,"# define ZEND_VM_RETURN() opline = NULL; return\n");
+ }
out($f,"#else\n");
out($f,"# define ZEND_OPCODE_HANDLER_RET int\n");
out($f,"# define ZEND_VM_TAIL_CALL(call) return call\n");
out($f,"# define ZEND_VM_CONTINUE() return 0\n");
out($f,"# define ZEND_VM_RETURN() return -1\n");
+ if ($kind == ZEND_VM_KIND_HYBRID) {
+ out($f,"# define ZEND_VM_HOT\n");
+ }
out($f,"#endif\n");
out($f,"\n");
out($f,"typedef ZEND_OPCODE_HANDLER_RET (ZEND_FASTCALL *opcode_handler_t) (ZEND_OPCODE_HANDLER_ARGS);\n");
@@ -1634,7 +1685,11 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
out($f,"#endif\n");
out($f,"#define ZEND_VM_INTERRUPT() ZEND_VM_TAIL_CALL(zend_interrupt_helper".($spec?"_SPEC":"")."(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));\n");
out($f,"#define ZEND_VM_LOOP_INTERRUPT() zend_interrupt_helper".($spec?"_SPEC":"")."(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);\n");
- out($f,"#define ZEND_VM_DISPATCH(opcode, opline) ZEND_VM_TAIL_CALL(((opcode_handler_t)zend_vm_get_opcode_handler(opcode, opline))(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));\n");
+ if ($kind == ZEND_VM_KIND_HYBRID) {
+ out($f,"#define ZEND_VM_DISPATCH(opcode, opline) ZEND_VM_TAIL_CALL(((opcode_handler_t)zend_vm_get_opcode_handler_func(opcode, opline))(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));\n");
+ } else {
+ out($f,"#define ZEND_VM_DISPATCH(opcode, opline) ZEND_VM_TAIL_CALL(((opcode_handler_t)zend_vm_get_opcode_handler(opcode, opline))(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));\n");
+ }
out($f,"\n");
out($f,"static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_interrupt_helper".($spec?"_SPEC":"")."(ZEND_OPCODE_HANDLER_ARGS);");
out($f,"\n");
@@ -1691,11 +1746,11 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
out($f,"#undef HANDLE_EXCEPTION\n");
out($f,"#undef HANDLE_EXCEPTION_LEAVE\n");
if (ZEND_VM_SPEC) {
- out($f,"#define HANDLE_EXCEPTION() goto ZEND_HANDLE_EXCEPTION_SPEC_HANDLER\n");
- out($f,"#define HANDLE_EXCEPTION_LEAVE() goto ZEND_HANDLE_EXCEPTION_SPEC_HANDLER\n");
+ out($f,"#define HANDLE_EXCEPTION() goto ZEND_HANDLE_EXCEPTION_SPEC_LABEL\n");
+ out($f,"#define HANDLE_EXCEPTION_LEAVE() goto ZEND_HANDLE_EXCEPTION_SPEC_LABEL\n");
} else {
- out($f,"#define HANDLE_EXCEPTION() goto ZEND_HANDLE_EXCEPTION_HANDLER\n");
- out($f,"#define HANDLE_EXCEPTION_LEAVE() goto ZEND_HANDLE_EXCEPTION_HANDLER\n");
+ out($f,"#define HANDLE_EXCEPTION() goto ZEND_HANDLE_EXCEPTION_LABEL\n");
+ out($f,"#define HANDLE_EXCEPTION_LEAVE() goto ZEND_HANDLE_EXCEPTION_LABEL\n");
}
out($f,"#define ZEND_VM_CONTINUE() goto *(void**)(OPLINE->handler)\n");
out($f,"#define ZEND_VM_RETURN() return\n");
@@ -1707,12 +1762,15 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
out($f,"\n");
break;
}
+ if ($kind == ZEND_VM_KIND_HYBRID) {
+ gen_executor_code($f, $spec, ZEND_VM_KIND_CALL, $m[1]);
+ }
break;
case "EXECUTOR_NAME":
out($f, $m[1].$executor_name.$m[3]."\n");
break;
case "HELPER_VARS":
- if ($kind != ZEND_VM_KIND_CALL) {
+ if ($kind != ZEND_VM_KIND_CALL && $kind != ZEND_VM_KIND_HYBRID) {
if ($kind == ZEND_VM_KIND_SWITCH) {
out($f,$m[1]."const void *dispatch_handler;\n");
}
@@ -1738,28 +1796,36 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
}
break;
case "INTERNAL_LABELS":
- if ($kind == ZEND_VM_KIND_GOTO) {
+ if ($kind == ZEND_VM_KIND_GOTO || $kind == ZEND_VM_KIND_HYBRID) {
// Emit array of labels of opcode handlers and code for
// zend_opcode_handlers initialization
+ if ($kind == ZEND_VM_KIND_HYBRID) {
+ out($f,"#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)\n");
+ }
$prolog = $m[1];
out($f,$prolog."if (UNEXPECTED(execute_data == NULL)) {\n");
out($f,$prolog."\tstatic const void* labels[] = {\n");
- gen_labels($f, $spec, $kind, $prolog."\t\t", $specs);
+ gen_labels($f, $spec, ZEND_VM_KIND_GOTO, $prolog."\t\t", $specs);
out($f,$prolog."\t};\n");
- out($f,$prolog."static const uint32_t specs[] = {\n");
- gen_specs($f, $spec, $kind, $prolog."\t", $specs);
- out($f,$prolog."};\n");
out($f,$prolog."\tzend_opcode_handlers = (const void **) labels;\n");
out($f,$prolog."\tzend_handlers_count = sizeof(labels) / sizeof(void*);\n");
- out($f,$prolog."\tzend_spec_handlers = (const uint32_t *) specs;\n");
- out($f,$prolog."\treturn;\n");
+ if ($kind == ZEND_VM_KIND_HYBRID) {
+ out($f,$prolog."\tmemset(&hybrid_halt_op, 0, sizeof(hybrid_halt_op));\n");
+ out($f,$prolog."\thybrid_halt_op.handler = (void*)&&HYBRID_HALT_LABEL;\n");
+ out($f,$prolog."\tgoto HYBRID_HALT_LABEL;\n");
+ } else {
+ out($f,$prolog."\treturn;\n");
+ }
out($f,$prolog."}\n");
+ if ($kind == ZEND_VM_KIND_HYBRID) {
+ out($f,"#endif\n");
+ }
} else {
skip_blanks($f, $m[1], $m[3]);
}
break;
case "ZEND_VM_CONTINUE_LABEL":
- if ($kind == ZEND_VM_KIND_CALL) {
+ if ($kind == ZEND_VM_KIND_CALL || $kind == ZEND_VM_KIND_HYBRID) {
// Only SWITCH dispatch method use it
out($f,"#if !defined(ZEND_VM_FP_GLOBAL_REG) || !defined(ZEND_VM_IP_GLOBAL_REG)\n");
out($f,$m[1]."\tint ret;".$m[3]."\n");
@@ -1774,6 +1840,16 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
case "ZEND_VM_DISPATCH":
// Emit code that dispatches to opcode handler
switch ($kind) {
+ case ZEND_VM_KIND_SWITCH:
+ out($f, $m[1]."dispatch_handler = OPLINE->handler;\nzend_vm_dispatch:\n".$m[1]."switch ((int)(uintptr_t)dispatch_handler)".$m[3]."\n");
+ break;
+ case ZEND_VM_KIND_GOTO:
+ out($f, $m[1]."goto *(void**)(OPLINE->handler);".$m[3]."\n");
+ break;
+ case ZEND_VM_KIND_HYBRID:
+ out($f,"#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)\n");
+ out($f, $m[1]."HYBRID_SWITCH()".$m[3]."\n");
+ out($f,"#else\n");
case ZEND_VM_KIND_CALL:
out($f,"#if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)\n");
out($f, $m[1]."((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);\n");
@@ -1781,18 +1857,25 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
out($f,"#else\n");
out($f, $m[1]."if (UNEXPECTED((ret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)) != 0))".$m[3]."\n");
out($f,"#endif\n");
- break;
- case ZEND_VM_KIND_SWITCH:
- out($f, $m[1]."dispatch_handler = OPLINE->handler;\nzend_vm_dispatch:\n".$m[1]."switch ((int)(uintptr_t)dispatch_handler)".$m[3]."\n");
- break;
- case ZEND_VM_KIND_GOTO:
- out($f, $m[1]."goto *(void**)(OPLINE->handler);".$m[3]."\n");
+ if ($kind == ZEND_VM_KIND_HYBRID) {
+ out($f,"#endif\n");
+ }
break;
}
break;
case "INTERNAL_EXECUTOR":
- if ($kind == ZEND_VM_KIND_CALL) {
- // Executor is defined as a set of functions
+ if ($kind != ZEND_VM_KIND_CALL) {
+ // Emit executor code
+ if ($kind == ZEND_VM_KIND_HYBRID) {
+ out($f,"#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)\n");
+ }
+ gen_executor_code($f, $spec, $kind, $m[1], $switch_labels);
+ }
+ if ($kind == ZEND_VM_KIND_CALL || $kind == ZEND_VM_KIND_HYBRID) {
+ // Executor is defined as a set of functions
+ if ($kind == ZEND_VM_KIND_HYBRID) {
+ out($f,"#else\n");
+ }
out($f,
"#ifdef ZEND_VM_FP_GLOBAL_REG\n" .
$m[1]."execute_data = orig_execute_data;\n" .
@@ -1811,9 +1894,9 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
$m[1]."\treturn;\n".
$m[1]."}\n".
"#endif\n");
- } else {
- // Emit executor code
- gen_executor_code($f, $spec, $kind, $m[1], $switch_labels);
+ if ($kind == ZEND_VM_KIND_HYBRID) {
+ out($f,"#endif\n");
+ }
}
break;
case "EXTERNAL_EXECUTOR":
@@ -1830,18 +1913,31 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
if ($kind == ZEND_VM_KIND_GOTO) {
// Labels are defined in the executor itself, so we call it
// with execute_data NULL and it sets zend_opcode_handlers array
- out($f,$prolog."");
+ out($f,$prolog."static const uint32_t specs[] = {\n");
+ gen_specs($f, $prolog."\t", $specs);
+ out($f,$prolog."};\n");
+ out($f,$prolog."zend_spec_handlers = specs;\n");
out($f,$prolog.$executor_name."_ex(NULL);\n");
} else {
out($f,$prolog."static const void *labels[] = {\n");
- gen_labels($f, $spec, $kind, $prolog."\t", $specs, $switch_labels);
+ gen_labels($f, $spec, ZEND_VM_KIND_CALL, $prolog."\t", $specs, $switch_labels);
out($f,$prolog."};\n");
out($f,$prolog."static const uint32_t specs[] = {\n");
- gen_specs($f, $spec, $kind, $prolog."\t", $specs);
+ gen_specs($f, $prolog."\t", $specs);
out($f,$prolog."};\n");
+ if ($kind == ZEND_VM_KIND_HYBRID) {
+ out($f,"#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)\n");
+ out($f,$prolog."zend_opcode_handler_funcs = labels;\n");
+ out($f,$prolog."zend_spec_handlers = specs;\n");
+ out($f,$prolog.$executor_name."_ex(NULL);\n");
+ out($f,"#else\n");
+ }
out($f,$prolog."zend_opcode_handlers = labels;\n");
out($f,$prolog."zend_handlers_count = sizeof(labels) / sizeof(void*);\n");
out($f,$prolog."zend_spec_handlers = specs;\n");
+ if ($kind == ZEND_VM_KIND_HYBRID) {
+ out($f,"#endif\n");
+ }
}
break;
default:
@@ -1968,22 +2064,24 @@ function gen_vm($def, $skel) {
$export = array();
foreach ($in as $line) {
++$lineno;
- if (strpos($line,"ZEND_VM_HANDLER(") === 0) {
+ if (strpos($line,"ZEND_VM_HANDLER(") === 0 ||
+ strpos($line,"ZEND_VM_HOT_HANDLER(") === 0) {
// Parsing opcode handler's definition
if (preg_match(
- "/^ZEND_VM_HANDLER\(\s*([0-9]+)\s*,\s*([A-Z_]+)\s*,\s*([A-Z_|]+)\s*,\s*([A-Z_|]+)\s*(,\s*([A-Z_|]+)\s*)?(,\s*SPEC\(([A-Z_|=,]+)\)\s*)?\)/",
+ "/^ZEND_VM_(HOT_)?HANDLER\(\s*([0-9]+)\s*,\s*([A-Z_]+)\s*,\s*([A-Z_|]+)\s*,\s*([A-Z_|]+)\s*(,\s*([A-Z_|]+)\s*)?(,\s*SPEC\(([A-Z_|=,]+)\)\s*)?\)/",
$line,
$m) == 0) {
die("ERROR ($def:$lineno): Invalid ZEND_VM_HANDLER definition.\n");
}
- $code = (int)$m[1];
- $op = $m[2];
+ $hot = !empty($m[1]);
+ $code = (int)$m[2];
+ $op = $m[3];
$len = strlen($op);
- $op1 = parse_operand_spec($def, $lineno, $m[3], $flags1);
- $op2 = parse_operand_spec($def, $lineno, $m[4], $flags2);
+ $op1 = parse_operand_spec($def, $lineno, $m[4], $flags1);
+ $op2 = parse_operand_spec($def, $lineno, $m[5], $flags2);
$flags = $flags1 | ($flags2 << 8);
- if (!empty($m[6])) {
- $flags |= parse_ext_spec($def, $lineno, $m[6]);
+ if (!empty($m[7])) {
+ $flags |= parse_ext_spec($def, $lineno, $m[7]);
}
if ($len > $max_opcode_len) {
@@ -1998,9 +2096,9 @@ function gen_vm($def, $skel) {
if (isset($opnames[$op])) {
die("ERROR ($def:$lineno): Opcode with name '$op' is already defined.\n");
}
- $opcodes[$code] = array("op"=>$op,"op1"=>$op1,"op2"=>$op2,"code"=>"","flags"=>$flags);
- if (isset($m[8])) {
- $opcodes[$code]["spec"] = parse_spec_rules($def, $lineno, $m[8]);
+ $opcodes[$code] = array("op"=>$op,"op1"=>$op1,"op2"=>$op2,"code"=>"","flags"=>$flags,"hot"=>$hot);
+ if (isset($m[9])) {
+ $opcodes[$code]["spec"] = parse_spec_rules($def, $lineno, $m[9]);
if (isset($opcodes[$code]["spec"]["NO_CONST_CONST"])) {
$opcodes[$code]["flags"] |= $vm_op_flags["ZEND_VM_NO_CONST_CONST"];
}
@@ -2012,27 +2110,29 @@ function gen_vm($def, $skel) {
$handler = $code;
$helper = null;
$list[$lineno] = array("handler"=>$handler);
- } else if (strpos($line,"ZEND_VM_TYPE_SPEC_HANDLER(") === 0) {
+ } else if (strpos($line,"ZEND_VM_TYPE_SPEC_HANDLER(") === 0 ||
+ strpos($line,"ZEND_VM_HOT_TYPE_SPEC_HANDLER(") === 0) {
// Parsing opcode handler's definition
if (preg_match(
- "/^ZEND_VM_TYPE_SPEC_HANDLER\(\s*([A-Z_]+)\s*,\s*([^,]+),\s*([A-Za-z_]+)\s*,\s*([A-Z_|]+)\s*,\s*([A-Z_|]+)\s*(,\s*([A-Z_|]+)\s*)?(,\s*SPEC\(([A-Z_|=,]+)\)\s*)?\)/",
+ "/^ZEND_VM_(HOT_)?TYPE_SPEC_HANDLER\(\s*([A-Z_]+)\s*,\s*([^,]+),\s*([A-Za-z_]+)\s*,\s*([A-Z_|]+)\s*,\s*([A-Z_|]+)\s*(,\s*([A-Z_|]+)\s*)?(,\s*SPEC\(([A-Z_|=,]+)\)\s*)?\)/",
$line,
$m) == 0) {
die("ERROR ($def:$lineno): Invalid ZEND_VM_TYPE_HANDLER_HANDLER definition.\n");
}
- $orig_op = $m[1];
+ $hot = !empty($m[1]);
+ $orig_op = $m[2];
if (!isset($opnames[$orig_op])) {
die("ERROR ($def:$lineno): Opcode with name '$orig_op' is not defined.\n");
}
$orig_code = $opnames[$orig_op];
- $condition = $m[2];
+ $condition = $m[3];
$code = $extra_num++;
- $op = $m[3];
- $op1 = parse_operand_spec($def, $lineno, $m[4], $flags1);
- $op2 = parse_operand_spec($def, $lineno, $m[5], $flags2);
+ $op = $m[4];
+ $op1 = parse_operand_spec($def, $lineno, $m[5], $flags1);
+ $op2 = parse_operand_spec($def, $lineno, $m[6], $flags2);
$flags = $flags1 | ($flags2 << 8);
- if (!empty($m[7])) {
- $flags |= parse_ext_spec($def, $lineno, $m[7]);
+ if (!empty($m[8])) {
+ $flags |= parse_ext_spec($def, $lineno, $m[8]);
}
if (isset($opcodes[$code])) {
@@ -2040,9 +2140,9 @@ function gen_vm($def, $skel) {
}
$opcodes[$orig_code]['type_spec'][$code] = $condition;
$used_extra_spec["TYPE"] = 1;
- $opcodes[$code] = array("op"=>$op,"op1"=>$op1,"op2"=>$op2,"code"=>"","flags"=>$flags);
- if (isset($m[9])) {
- $opcodes[$code]["spec"] = parse_spec_rules($def, $lineno, $m[9]);
+ $opcodes[$code] = array("op"=>$op,"op1"=>$op1,"op2"=>$op2,"code"=>"","flags"=>$flags,"hot"=>$hot);
+ if (isset($m[10])) {
+ $opcodes[$code]["spec"] = parse_spec_rules($def, $lineno, $m[10]);
if (isset($opcodes[$code]["spec"]["NO_CONST_CONST"])) {
$opcodes[$code]["flags"] |= $vm_op_flags["ZEND_VM_NO_CONST_CONST"];
}
@@ -2057,7 +2157,7 @@ function gen_vm($def, $skel) {
} else if (strpos($line,"ZEND_VM_HELPER(") === 0 || strpos($line,"ZEND_VM_INLINE_HELPER(") === 0) {
// Parsing helper's definition
if (preg_match(
- "/^ZEND_VM(_INLINE)?_HELPER\(\s*([A-Za-z_]+)\s*,\s*([A-Z_|]+)\s*,\s*([A-Z_|]+)\s*(?:,\s*([^)]*))?\s*\)/",
+ "/^ZEND_VM(_INLINE)?_HELPER\(\s*([A-Za-z_]+)\s*,\s*([A-Z_|]+)\s*,\s*([A-Z_|]+)\s*(?:,\s*SPEC\(([A-Z_|=,]+)\)\s*)?(?:,\s*([^)]*)\s*)?\)/",
$line,
$m) == 0) {
die("ERROR ($def:$lineno): Invalid ZEND_VM_HELPER definition.\n");
@@ -2066,7 +2166,7 @@ function gen_vm($def, $skel) {
$helper = $m[2];
$op1 = parse_operand_spec($def, $lineno, $m[3], $flags1);
$op2 = parse_operand_spec($def, $lineno, $m[4], $flags2);
- $param = isset($m[5]) ? $m[5] : null;
+ $param = isset($m[6]) ? $m[6] : null;
if (isset($helpers[$helper])) {
die("ERROR ($def:$lineno): Helper with name '$helper' is already defined.\n");
}
@@ -2080,6 +2180,11 @@ function gen_vm($def, $skel) {
}
$helpers[$helper] = array("op1"=>$op1,"op2"=>$op2,"param"=>$param,"code"=>"","inline"=>$inline);
+
+ if (!empty($m[5])) {
+ $helpers[$helper]["spec"] = parse_spec_rules($def, $lineno, $m[5]);
+ }
+
$handler = null;
$list[$lineno] = array("helper"=>$helper);
} else if (strpos($line,"ZEND_VM_EXPORT_HANDLER(") === 0) {
@@ -2164,7 +2269,17 @@ function gen_vm($def, $skel) {
fputs($f, "#define ZEND_VM_KIND_CALL\t" . ZEND_VM_KIND_CALL . "\n");
fputs($f, "#define ZEND_VM_KIND_SWITCH\t" . ZEND_VM_KIND_SWITCH . "\n");
fputs($f, "#define ZEND_VM_KIND_GOTO\t" . ZEND_VM_KIND_GOTO . "\n");
- fputs($f, "#define ZEND_VM_KIND\t\t" . $GLOBALS["vm_kind_name"][ZEND_VM_KIND] . "\n");
+ fputs($f, "#define ZEND_VM_KIND_HYBRID\t" . ZEND_VM_KIND_HYBRID . "\n");
+ if ($GLOBALS["vm_kind_name"][ZEND_VM_KIND] === "ZEND_VM_KIND_HYBRID") {
+ fputs($f, "/* HYBRID requires support for computed GOTO and global register variables*/\n");
+ fputs($f, "#if (defined(__GNUC__) && defined(HAVE_GCC_GLOBAL_REGS))\n");
+ fputs($f, "# define ZEND_VM_KIND\t\tZEND_VM_KIND_HYBRID\n");
+ fputs($f, "#else\n");
+ fputs($f, "# define ZEND_VM_KIND\t\tZEND_VM_KIND_CALL\n");
+ fputs($f, "#endif\n");
+ } else {
+ fputs($f, "#define ZEND_VM_KIND\t\t" . $GLOBALS["vm_kind_name"][ZEND_VM_KIND] . "\n");
+ }
fputs($f, "\n");
foreach($vm_op_flags as $name => $val) {
fprintf($f, "#define %-24s 0x%08x\n", $name, $val);
@@ -2233,7 +2348,7 @@ function gen_vm($def, $skel) {
out($f, "#ifdef ZEND_WIN32\n");
// Suppress free_op1 warnings on Windows
- out($f, "# pragma warning(once : 4101)\n");
+ out($f, "# pragma warning(disable : 4101)\n");
if (ZEND_VM_SPEC) {
// Suppress (<non-zero constant> || <expression>) warnings on windows
out($f, "# pragma warning(once : 6235)\n");
@@ -2338,6 +2453,72 @@ function gen_vm($def, $skel) {
}
out($f, "}\n\n");
+ if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID) {
+ // Generate zend_vm_get_opcode_handler_func() function
+ out($f, "#if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID\n");
+ out($f,"static const void *zend_vm_get_opcode_handler_func(zend_uchar opcode, const zend_op* op)\n");
+ out($f, "{\n");
+ out($f, "\tuint32_t spec = zend_spec_handlers[opcode];\n");
+ if (!ZEND_VM_SPEC) {
+ out($f, "\treturn zend_opcode_handler_funcs[spec];\n");
+ } else {
+ out($f, "\tstatic const int zend_vm_decode[] = {\n");
+ out($f, "\t\t_UNUSED_CODE, /* 0 */\n");
+ out($f, "\t\t_CONST_CODE, /* 1 = IS_CONST */\n");
+ out($f, "\t\t_TMP_CODE, /* 2 = IS_TMP_VAR */\n");
+ out($f, "\t\t_UNUSED_CODE, /* 3 */\n");
+ out($f, "\t\t_VAR_CODE, /* 4 = IS_VAR */\n");
+ out($f, "\t\t_UNUSED_CODE, /* 5 */\n");
+ out($f, "\t\t_UNUSED_CODE, /* 6 */\n");
+ out($f, "\t\t_UNUSED_CODE, /* 7 */\n");
+ out($f, "\t\t_UNUSED_CODE, /* 8 = IS_UNUSED */\n");
+ out($f, "\t\t_UNUSED_CODE, /* 9 */\n");
+ out($f, "\t\t_UNUSED_CODE, /* 10 */\n");
+ out($f, "\t\t_UNUSED_CODE, /* 11 */\n");
+ out($f, "\t\t_UNUSED_CODE, /* 12 */\n");
+ out($f, "\t\t_UNUSED_CODE, /* 13 */\n");
+ out($f, "\t\t_UNUSED_CODE, /* 14 */\n");
+ out($f, "\t\t_UNUSED_CODE, /* 15 */\n");
+ out($f, "\t\t_CV_CODE /* 16 = IS_CV */\n");
+ out($f, "\t};\n");
+ out($f, "\tuint32_t offset = 0;\n");
+ out($f, "\tif (spec & SPEC_RULE_OP1) offset = offset * 5 + zend_vm_decode[op->op1_type];\n");
+ out($f, "\tif (spec & SPEC_RULE_OP2) offset = offset * 5 + zend_vm_decode[op->op2_type];\n");
+ if (isset($used_extra_spec["OP_DATA"])) {
+ out($f, "\tif (spec & SPEC_RULE_OP_DATA) offset = offset * 5 + zend_vm_decode[(op + 1)->op1_type];\n");
+ }
+ if (isset($used_extra_spec["RETVAL"])) {
+ out($f, "\tif (spec & SPEC_RULE_RETVAL) offset = offset * 2 + (op->result_type != IS_UNUSED);\n");
+ }
+ if (isset($used_extra_spec["QUICK_ARG"])) {
+ out($f, "\tif (spec & SPEC_RULE_QUICK_ARG) offset = offset * 2 + (op->op2.num < MAX_ARG_FLAG_NUM);\n");
+ }
+ if (isset($used_extra_spec["SMART_BRANCH"])) {
+ out($f, "\tif (spec & SPEC_RULE_SMART_BRANCH) {\n");
+ out($f, "\t\toffset = offset * 3;\n");
+ out($f, "\t\tif ((op+1)->opcode == ZEND_JMPZ) {\n");
+ out($f, "\t\t\toffset += 1;\n");
+ out($f, "\t\t} else if ((op+1)->opcode == ZEND_JMPNZ) {\n");
+ out($f, "\t\t\toffset += 2;\n");
+ out($f, "\t\t}\n");
+ out($f, "\t}\n");
+ }
+ if (isset($used_extra_spec["DIM_OBJ"])) {
+ out($f, "\tif (spec & SPEC_RULE_DIM_OBJ) {\n");
+ out($f, "\t\toffset = offset * 3;\n");
+ out($f, "\t\tif (op->extended_value == ZEND_ASSIGN_DIM) {\n");
+ out($f, "\t\t\toffset += 1;\n");
+ out($f, "\t\t} else if (op->extended_value == ZEND_ASSIGN_OBJ) {\n");
+ out($f, "\t\t\toffset += 2;\n");
+ out($f, "\t\t}\n");
+ out($f, "\t}\n");
+ }
+ out($f, "\treturn zend_opcode_handler_funcs[(spec & SPEC_START_MASK) + offset];\n");
+ }
+ out($f, "}\n\n");
+ out($f, "#endif\n\n");
+ }
+
// Generate zend_vm_get_opcode_handler() function
out($f, "ZEND_API void zend_vm_set_opcode_handler(zend_op* op)\n");
out($f, "{\n");
@@ -2395,9 +2576,14 @@ function gen_vm($def, $skel) {
out($f, "}\n\n");
// Generate zend_vm_call_opcode_handler() function
- if (ZEND_VM_KIND == ZEND_VM_KIND_CALL) {
+ if (ZEND_VM_KIND == ZEND_VM_KIND_CALL || ZEND_VM_KIND == ZEND_VM_KIND_HYBRID) {
out($f, "ZEND_API int zend_vm_call_opcode_handler(zend_execute_data* ex)\n");
out($f, "{\n");
+ if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID) {
+ out($f,"#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)\n");
+ out($f, "\topcode_handler_t handler;\n");
+ out($f,"#endif\n");
+ }
out($f, "\tint ret;\n");
out($f, "#ifdef ZEND_VM_IP_GLOBAL_REG\n");
out($f, "\tconst zend_op *orig_opline = opline;\n");
@@ -2411,8 +2597,20 @@ function gen_vm($def, $skel) {
out($f, "\n");
out($f, "\tLOAD_OPLINE();\n");
out($f,"#if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)\n");
+ if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID) {
+ out($f,"#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)\n");
+ out($f, "\thandler = (opcode_handler_t)zend_vm_get_opcode_handler_func(zend_user_opcodes[opline->opcode], opline);\n");
+ out($f, "\thandler(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);\n");
+ out($f, "\tif (EXPECTED(opline != &hybrid_halt_op)) {\n");
+ out($f,"#else\n");
+ }
out($f, "\t((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);\n");
- out($f, "\tif (EXPECTED(opline)) {\n");
+ if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID) {
+ out($f, "\tif (EXPECTED(opline)) {\n");
+ out($f,"#endif\n");
+ } else {
+ out($f, "\tif (EXPECTED(opline)) {\n");
+ }
out($f, "\t\tret = execute_data != ex ? (int)(execute_data->prev_execute_data != ex) + 1 : 0;\n");
out($f, "\t\tSAVE_OPLINE();\n");
out($f, "\t} else {\n");
@@ -2513,9 +2711,9 @@ function gen_vm($def, $skel) {
function usage() {
echo("\nUsage: php zend_vm_gen.php [options]\n".
"\nOptions:".
- "\n --with-vm-kind=CALL|SWITCH|GOTO - select threading model (default is CALL)".
- "\n --without-specializer - disable executor specialization".
- "\n --with-lines - enable #line directives".
+ "\n --with-vm-kind=CALL|SWITCH|GOTO|HYBRID - select threading model (default is HYBRID)".
+ "\n --without-specializer - disable executor specialization".
+ "\n --with-lines - enable #line directives".
"\n\n");
}
@@ -2533,6 +2731,9 @@ for ($i = 1; $i < $argc; $i++) {
case "GOTO":
define("ZEND_VM_KIND", ZEND_VM_KIND_GOTO);
break;
+ case "HYBRID":
+ define("ZEND_VM_KIND", ZEND_VM_KIND_HYBRID);
+ break;
default:
echo("ERROR: Invalid vm kind '$kind'\n");
usage();
@@ -2557,7 +2758,7 @@ for ($i = 1; $i < $argc; $i++) {
// Using defaults
if (!defined("ZEND_VM_KIND")) {
// Using CALL threading by default
- define("ZEND_VM_KIND", ZEND_VM_KIND_CALL);
+ define("ZEND_VM_KIND", ZEND_VM_KIND_HYBRID);
}
if (!defined("ZEND_VM_SPEC")) {
// Using specialized executor by default
diff --git a/Zend/zend_vm_opcodes.c b/Zend/zend_vm_opcodes.c
index df2f92dc17..61ce8ce072 100644
--- a/Zend/zend_vm_opcodes.c
+++ b/Zend/zend_vm_opcodes.c
@@ -21,7 +21,7 @@
#include <stdio.h>
#include <zend.h>
-static const char *zend_vm_opcodes_names[187] = {
+static const char *zend_vm_opcodes_names[198] = {
"ZEND_NOP",
"ZEND_ADD",
"ZEND_SUB",
@@ -209,9 +209,20 @@ static const char *zend_vm_opcodes_names[187] = {
"ZEND_FETCH_THIS",
NULL,
"ZEND_ISSET_ISEMPTY_THIS",
+ "ZEND_SWITCH_LONG",
+ "ZEND_SWITCH_STRING",
+ "ZEND_IN_ARRAY",
+ "ZEND_COUNT",
+ "ZEND_GET_CLASS",
+ "ZEND_GET_CALLED_CLASS",
+ "ZEND_GET_TYPE",
+ "ZEND_FUNC_NUM_ARGS",
+ "ZEND_FUNC_GET_ARGS",
+ "ZEND_UNSET_CV",
+ "ZEND_ISSET_ISEMPTY_CV",
};
-static uint32_t zend_vm_opcodes_flags[187] = {
+static uint32_t zend_vm_opcodes_flags[198] = {
0x00000000,
0x00000707,
0x00000707,
@@ -286,7 +297,7 @@ static uint32_t zend_vm_opcodes_flags[187] = {
0x00186703,
0x00106703,
0x08000007,
- 0x00030107,
+ 0x00010107,
0x00000701,
0x00000751,
0x00002003,
@@ -331,7 +342,7 @@ static uint32_t zend_vm_opcodes_flags[187] = {
0x00001003,
0x00001001,
0x01000703,
- 0x00000000,
+ 0x01000000,
0x00001003,
0x00000007,
0x00000003,
@@ -399,6 +410,17 @@ static uint32_t zend_vm_opcodes_flags[187] = {
0x00000101,
0x00000000,
0x00000101,
+ 0x03000307,
+ 0x03000307,
+ 0x01000303,
+ 0x00000103,
+ 0x00000103,
+ 0x00000101,
+ 0x00000103,
+ 0x00000101,
+ 0x00000103,
+ 0x00000101,
+ 0x00020101,
};
ZEND_API const char* zend_get_opcode_name(zend_uchar opcode) {
diff --git a/Zend/zend_vm_opcodes.h b/Zend/zend_vm_opcodes.h
index 7d042c3904..856b8d26b2 100644
--- a/Zend/zend_vm_opcodes.h
+++ b/Zend/zend_vm_opcodes.h
@@ -26,7 +26,13 @@
#define ZEND_VM_KIND_CALL 1
#define ZEND_VM_KIND_SWITCH 2
#define ZEND_VM_KIND_GOTO 3
-#define ZEND_VM_KIND ZEND_VM_KIND_CALL
+#define ZEND_VM_KIND_HYBRID 4
+/* HYBRID requires support for computed GOTO and global register variables*/
+#if (defined(__GNUC__) && defined(HAVE_GCC_GLOBAL_REGS))
+# define ZEND_VM_KIND ZEND_VM_KIND_HYBRID
+#else
+# define ZEND_VM_KIND ZEND_VM_KIND_CALL
+#endif
#define ZEND_VM_OP_SPEC 0x00000001
#define ZEND_VM_OP_CONST 0x00000002
@@ -252,7 +258,18 @@ END_EXTERN_C()
#define ZEND_BIND_STATIC 183
#define ZEND_FETCH_THIS 184
#define ZEND_ISSET_ISEMPTY_THIS 186
+#define ZEND_SWITCH_LONG 187
+#define ZEND_SWITCH_STRING 188
+#define ZEND_IN_ARRAY 189
+#define ZEND_COUNT 190
+#define ZEND_GET_CLASS 191
+#define ZEND_GET_CALLED_CLASS 192
+#define ZEND_GET_TYPE 193
+#define ZEND_FUNC_NUM_ARGS 194
+#define ZEND_FUNC_GET_ARGS 195
+#define ZEND_UNSET_CV 196
+#define ZEND_ISSET_ISEMPTY_CV 197
-#define ZEND_VM_LAST_OPCODE 186
+#define ZEND_VM_LAST_OPCODE 197
#endif