From 9fd27bf674ca4f0f40259ca758635510faf264ca Mon Sep 17 00:00:00 2001 From: Alexander Danilov Date: Fri, 30 Oct 2026 18:19:55 +0200 Subject: [PATCH] Added ZEND_ASSIGN_OBJ fast path for the first write to an uninitialized typed property --- ...ed_properties_uninit_assign_fast_path.phpt | 285 ++++++++++++++++++ ...perties_uninit_assign_fast_path_scope.phpt | 223 ++++++++++++++ Zend/zend_execute.c | 31 ++ Zend/zend_vm_def.h | 5 + Zend/zend_vm_execute.h | 270 +++++++++++++++++ 5 files changed, 814 insertions(+) create mode 100644 Zend/tests/type_declarations/typed_properties_uninit_assign_fast_path.phpt create mode 100644 Zend/tests/type_declarations/typed_properties_uninit_assign_fast_path_scope.phpt diff --git a/Zend/tests/type_declarations/typed_properties_uninit_assign_fast_path.phpt b/Zend/tests/type_declarations/typed_properties_uninit_assign_fast_path.phpt new file mode 100644 index 000000000000..de6738fa1fc5 --- /dev/null +++ b/Zend/tests/type_declarations/typed_properties_uninit_assign_fast_path.phpt @@ -0,0 +1,285 @@ +--TEST-- +First write to an uninitialized typed property (ZEND_ASSIGN_OBJ fast path) +--FILE-- +i = $v; } +function set_s(Plain $o, $v) { $o->s = $v; } +function set_foo(Plain $o, $v) { $o->foo = $v; } +function set_u(Plain $o, $v) { $o->u = $v; } +function set_a(Plain $o, $v) { $o->a = $v; } +function set_f(Plain $o, $v) { $o->f = $v; } +function ret(Plain $o, $v) { return $o->i = $v; } +function chain(Plain $o, $v) { return $o->s = $o->i = $v; } + +function attempt(callable $f, ...$args) { + try { + $r = $f(...$args); + var_dump($r); + } catch (Throwable $e) { + echo get_class($e), ": ", $e->getMessage(), "\n"; + } +} + +echo "--- coercion, weak mode\n"; +for ($k = 0; $k < 3; $k++) { + $o = new Plain; attempt('set_i', $o, "2"); var_dump($o->i); + $o = new Plain; attempt('set_i', $o, 2.0); var_dump($o->i); + $o = new Plain; attempt('set_i', $o, true); var_dump($o->i); + $o = new Plain; attempt('set_i', $o, "abc"); var_dump(isset($o->i)); + $o = new Plain; attempt('set_i', $o, null); var_dump(isset($o->i)); + $o = new Plain; attempt('set_s', $o, 12); var_dump($o->s); +} + +echo "--- union, class and nullable types\n"; +for ($k = 0; $k < 3; $k++) { + $o = new Plain; attempt('set_u', $o, true); var_dump($o->u); + $o = new Plain; attempt('set_u', $o, []); var_dump(isset($o->u)); + $o = new Plain; attempt('set_foo', $o, new Bar); var_dump($o->foo instanceof Bar); + $o = new Plain; attempt('set_foo', $o, null); var_dump($o->foo); + $o = new Plain; attempt('set_foo', $o, new stdClass); var_dump(isset($o->foo)); + $o = new Plain; attempt('set_f', $o, 3); var_dump($o->f); +} + +echo "--- result value\n"; +for ($k = 0; $k < 3; $k++) { + $o = new Plain; attempt('ret', $o, "5"); + $o = new Plain; attempt('ret', $o, "x"); + $o = new Plain; attempt('chain', $o, "7"); var_dump($o->s, $o->i); +} + +echo "--- reference and refcounted values\n"; +for ($k = 0; $k < 3; $k++) { + $o = new Plain; + $str = str_repeat("a", 3) . $k; + $arr = [$k, [$k]]; + $ref = &$arr; + set_s($o, $str); + set_a($o, $ref); + $arr[] = 1; + var_dump($o->s === $str, count($o->a), count($arr)); + unset($ref, $arr, $str); + var_dump($o->s, $o->a); +} + +echo "--- strict_types is taken from the calling file\n"; +eval('declare(strict_types=1); function set_i_strict(Plain $o, $v) { $o->i = $v; }'); +for ($k = 0; $k < 3; $k++) { + $o = new Plain; attempt('set_i_strict', $o, "2"); var_dump(isset($o->i)); + $o = new Plain; attempt('set_i_strict', $o, 2); var_dump($o->i); +} + +echo "--- unset() property goes through __set()\n"; +class Magic { + public int $x; + public function __set($n, $v) { echo "__set($n)\n"; } + public function drop() { unset($this->x); } +} +function set_x(Magic $o, $v) { $o->x = $v; } +for ($k = 0; $k < 3; $k++) { + $o = new Magic; set_x($o, 1); var_dump($o->x); + $o = new Magic; $o->drop(); set_x($o, 2); var_dump(isset($o->x)); +} + +echo "--- object released while coercing the value\n"; +class Releaser { + public function __toString(): string { unset($GLOBALS['victim']); return "5"; } +} +class Victim { public string $s; public function set($v) { $this->s = $v; } } +for ($k = 0; $k < 3; $k++) { + $victim = new Victim; + try { + $victim->s = new Releaser; + echo "assigned\n"; + } catch (Error $e) { + echo $e->getMessage(), "\n"; + } +} +for ($k = 0; $k < 3; $k++) { + $victim = new Victim; + try { + $victim->set(new Releaser); + echo "assigned\n"; + } catch (Error $e) { + echo $e->getMessage(), "\n"; + } +} + +?> +--EXPECT-- +--- coercion, weak mode +NULL +int(2) +NULL +int(2) +NULL +int(1) +TypeError: Cannot assign string to property Plain::$i of type int +bool(false) +TypeError: Cannot assign null to property Plain::$i of type int +bool(false) +NULL +string(2) "12" +NULL +int(2) +NULL +int(2) +NULL +int(1) +TypeError: Cannot assign string to property Plain::$i of type int +bool(false) +TypeError: Cannot assign null to property Plain::$i of type int +bool(false) +NULL +string(2) "12" +NULL +int(2) +NULL +int(2) +NULL +int(1) +TypeError: Cannot assign string to property Plain::$i of type int +bool(false) +TypeError: Cannot assign null to property Plain::$i of type int +bool(false) +NULL +string(2) "12" +--- union, class and nullable types +NULL +int(1) +TypeError: Cannot assign array to property Plain::$u of type string|int +bool(false) +NULL +bool(true) +NULL +NULL +TypeError: Cannot assign stdClass to property Plain::$foo of type ?Foo +bool(false) +NULL +float(3) +NULL +int(1) +TypeError: Cannot assign array to property Plain::$u of type string|int +bool(false) +NULL +bool(true) +NULL +NULL +TypeError: Cannot assign stdClass to property Plain::$foo of type ?Foo +bool(false) +NULL +float(3) +NULL +int(1) +TypeError: Cannot assign array to property Plain::$u of type string|int +bool(false) +NULL +bool(true) +NULL +NULL +TypeError: Cannot assign stdClass to property Plain::$foo of type ?Foo +bool(false) +NULL +float(3) +--- result value +int(5) +TypeError: Cannot assign string to property Plain::$i of type int +string(1) "7" +string(1) "7" +int(7) +int(5) +TypeError: Cannot assign string to property Plain::$i of type int +string(1) "7" +string(1) "7" +int(7) +int(5) +TypeError: Cannot assign string to property Plain::$i of type int +string(1) "7" +string(1) "7" +int(7) +--- reference and refcounted values +bool(true) +int(2) +int(3) +string(4) "aaa0" +array(2) { + [0]=> + int(0) + [1]=> + array(1) { + [0]=> + int(0) + } +} +bool(true) +int(2) +int(3) +string(4) "aaa1" +array(2) { + [0]=> + int(1) + [1]=> + array(1) { + [0]=> + int(1) + } +} +bool(true) +int(2) +int(3) +string(4) "aaa2" +array(2) { + [0]=> + int(2) + [1]=> + array(1) { + [0]=> + int(2) + } +} +--- strict_types is taken from the calling file +TypeError: Cannot assign string to property Plain::$i of type int +bool(false) +NULL +int(2) +TypeError: Cannot assign string to property Plain::$i of type int +bool(false) +NULL +int(2) +TypeError: Cannot assign string to property Plain::$i of type int +bool(false) +NULL +int(2) +--- unset() property goes through __set() +int(1) +__set(x) +bool(false) +int(1) +__set(x) +bool(false) +int(1) +__set(x) +bool(false) +--- object released while coercing the value +Object was released while assigning to property Victim::$s +Object was released while assigning to property Victim::$s +Object was released while assigning to property Victim::$s +assigned +assigned +assigned diff --git a/Zend/tests/type_declarations/typed_properties_uninit_assign_fast_path_scope.phpt b/Zend/tests/type_declarations/typed_properties_uninit_assign_fast_path_scope.phpt new file mode 100644 index 000000000000..5f1520f18218 --- /dev/null +++ b/Zend/tests/type_declarations/typed_properties_uninit_assign_fast_path_scope.phpt @@ -0,0 +1,223 @@ +--TEST-- +First write to an uninitialized typed property: write access, readonly, hooks and lazy objects +--FILE-- +getMessage(), "\n"; + } +} + +echo "--- protected(set) / private(set) from a foreign scope after warm-up\n"; +class Avis { + public protected(set) int $p; + public private(set) int $q; + public function init() { $this->p = 1; $this->q = 1; } +} +function w_p(Avis $o) { $o->p = 5; } +function w_q(Avis $o) { $o->q = 5; } +for ($k = 0; $k < 3; $k++) { + $o = new Avis; attempt('w_p', $o); var_dump(isset($o->p)); + $o = new Avis; attempt('w_q', $o); var_dump(isset($o->q)); + $o = new Avis; $o->init(); var_dump($o->p, $o->q); +} + +echo "--- the same closure bound to different scopes\n"; +class Both { + public protected(set) int $x; +} +$write = function (Both $o) { $o->x = 1; }; +for ($k = 0; $k < 3; $k++) { + $o = new Both; + attempt($write, $o); var_dump(isset($o->x)); + $o = new Both; + attempt(Closure::bind($write, null, Both::class), $o); var_dump(isset($o->x)); + $o = new Both; + attempt($write, $o); var_dump(isset($o->x)); +} + +echo "--- readonly\n"; +class RO { + public function __construct(public readonly int $x) {} +} +class RO2 { + public readonly int $x; + public function init(int $v) { $this->x = $v; } +} +for ($k = 0; $k < 3; $k++) { + $o = new RO2; $o->init(1); attempt([$o, 'init'], 2); var_dump($o->x); + $o = new RO2; attempt(function() use ($o) { $o->x = 3; }); var_dump(isset($o->x)); + $o = new RO(7); var_dump($o->x); +} + +echo "--- readonly: write into an uninitialized property in __clone()\n"; +class Cl { + public readonly int $a; + public readonly int $b; + public function __construct() { $this->a = 1; } + public function __clone() { $this->b = 2; attempt([$this, 'again']); } + public function again() { $this->b = 3; } +} +function foreign(Cl $c) { $c->b = 4; } +for ($k = 0; $k < 3; $k++) { + $c = new Cl; + $d = clone $c; + var_dump($d->a, $d->b); + attempt('foreign', $c); + attempt('foreign', $d); +} + +echo "--- hooks: write to the backing store from a hook\n"; +class Hooked { + public int $v { + set { echo "set hook\n"; $this->v = $value * 2; } + } + public int $w { + get => $this->w; + set { $this->w = $value + 1; } + } +} +for ($k = 0; $k < 3; $k++) { + $o = new Hooked; $o->v = 5; var_dump($o->v); + $o = new Hooked; $o->w = 5; var_dump($o->w); + $o = new Hooked; attempt(function() use ($o) { $o->w = "x"; }); +} + +echo "--- lazy objects\n"; +class Lazy { + public int $a; + public string $b; + public function __construct() { echo "init\n"; $this->a = 1; } +} +function set_a(Lazy $o, $v) { $o->a = $v; } +function set_b(Lazy $o, $v) { $o->b = $v; } +$rc = new ReflectionClass(Lazy::class); +for ($k = 0; $k < 3; $k++) { + $ghost = $rc->newLazyGhost(function (Lazy $o) { echo "ghost init\n"; $o->__construct(); }); + attempt('set_b', $ghost, "x"); var_dump($rc->isUninitializedLazyObject($ghost)); + $proxy = $rc->newLazyProxy(fn() => new Lazy); + attempt('set_b', $proxy, "y"); var_dump($rc->isUninitializedLazyObject($proxy)); + $plain = new Lazy; + attempt('set_b', $plain, "z"); var_dump($plain->b); +} + +?> +--EXPECTF-- +--- protected(set) / private(set) from a foreign scope after warm-up +Error: Cannot modify protected(set) property Avis::$p from global scope +bool(false) +Error: Cannot modify private(set) property Avis::$q from global scope +bool(false) +int(1) +int(1) +Error: Cannot modify protected(set) property Avis::$p from global scope +bool(false) +Error: Cannot modify private(set) property Avis::$q from global scope +bool(false) +int(1) +int(1) +Error: Cannot modify protected(set) property Avis::$p from global scope +bool(false) +Error: Cannot modify private(set) property Avis::$q from global scope +bool(false) +int(1) +int(1) +--- the same closure bound to different scopes +Error: Cannot modify protected(set) property Both::$x from global scope +bool(false) +ok +bool(true) +Error: Cannot modify protected(set) property Both::$x from global scope +bool(false) +Error: Cannot modify protected(set) property Both::$x from global scope +bool(false) +ok +bool(true) +Error: Cannot modify protected(set) property Both::$x from global scope +bool(false) +Error: Cannot modify protected(set) property Both::$x from global scope +bool(false) +ok +bool(true) +Error: Cannot modify protected(set) property Both::$x from global scope +bool(false) +--- readonly +Error: Cannot modify readonly property RO2::$x +int(1) +Error: Cannot modify protected(set) readonly property RO2::$x from global scope +bool(false) +int(7) +Error: Cannot modify readonly property RO2::$x +int(1) +Error: Cannot modify protected(set) readonly property RO2::$x from global scope +bool(false) +int(7) +Error: Cannot modify readonly property RO2::$x +int(1) +Error: Cannot modify protected(set) readonly property RO2::$x from global scope +bool(false) +int(7) +--- readonly: write into an uninitialized property in __clone() +Error: Cannot modify readonly property Cl::$b +int(1) +int(2) +Error: Cannot modify protected(set) readonly property Cl::$b from global scope +Error: Cannot modify readonly property Cl::$b +Error: Cannot modify readonly property Cl::$b +int(1) +int(2) +Error: Cannot modify protected(set) readonly property Cl::$b from global scope +Error: Cannot modify readonly property Cl::$b +Error: Cannot modify readonly property Cl::$b +int(1) +int(2) +Error: Cannot modify protected(set) readonly property Cl::$b from global scope +Error: Cannot modify readonly property Cl::$b +--- hooks: write to the backing store from a hook +set hook +int(10) +int(6) +TypeError: Hooked::$w::set(): Argument #1 ($value) must be of type int, string given, called in %s on line %d +set hook +int(10) +int(6) +TypeError: Hooked::$w::set(): Argument #1 ($value) must be of type int, string given, called in %s on line %d +set hook +int(10) +int(6) +TypeError: Hooked::$w::set(): Argument #1 ($value) must be of type int, string given, called in %s on line %d +--- lazy objects +ghost init +init +ok +bool(false) +init +ok +bool(false) +init +ok +string(1) "z" +ghost init +init +ok +bool(false) +init +ok +bool(false) +init +ok +string(1) "z" +ghost init +init +ok +bool(false) +init +ok +bool(false) +init +ok +string(1) "z" diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 10db2e6247f6..a7674519e836 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -1122,6 +1122,37 @@ static zend_never_inline zval* zend_assign_to_typed_prop(const zend_property_inf return zend_assign_to_variable_ex(property_val, &tmp, IS_TMP_VAR, EX_USES_STRICT_TYPES(), garbage_ptr); } +static zend_never_inline zval* zend_assign_to_uninit_typed_prop(zend_object *zobj, const zend_property_info *info, zval *property_val, zval *value EXECUTE_DATA_DC) +{ + zval tmp; + + ZEND_ASSERT(Z_TYPE_P(property_val) == IS_UNDEF); + ZEND_ASSERT(Z_PROP_FLAG_P(property_val) & IS_PROP_UNINIT); + ZEND_ASSERT(!zend_object_is_lazy(zobj)); + + ZVAL_COPY_DEREF(&tmp, value); + + if (UNEXPECTED(!ZEND_TYPE_CONTAINS_CODE(info->type, Z_TYPE(tmp)))) { + GC_ADDREF(zobj); + bool type_matched = i_zend_verify_property_type(info, &tmp, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(GC_DELREF(zobj) == 0)) { + zend_object_released_while_assigning_to_property_error(info); + zend_objects_store_del(zobj); + zval_ptr_dtor(&tmp); + return &EG(uninitialized_zval); + } + if (UNEXPECTED(!type_matched)) { + zval_ptr_dtor(&tmp); + return &EG(uninitialized_zval); + } + } + + ZVAL_COPY_VALUE(property_val, &tmp); + Z_PROP_FLAG_P(property_val) &= ~(IS_PROP_UNINIT|IS_PROP_REINITABLE); + + return property_val; +} + static zend_always_inline bool zend_value_instanceof_static(const zval *zv) { if (Z_TYPE_P(zv) != IS_OBJECT) { return 0; diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index cea13f11e680..c0738038b023 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -2536,6 +2536,11 @@ ZEND_VM_C_LABEL(fast_assign_obj): } ZEND_VM_C_GOTO(exit_assign_obj); } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + ZEND_VM_C_GOTO(free_and_exit_assign_obj); } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(GET_OP2_ZVAL_PTR(BP_VAR_R)); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 6d32bed15ac0..4f5369b5e14c 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -24584,6 +24584,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SP } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(RT_CONSTANT(opline, opline->op2)); @@ -24741,6 +24746,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SP } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(RT_CONSTANT(opline, opline->op2)); @@ -24896,6 +24906,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SP } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(RT_CONSTANT(opline, opline->op2)); @@ -27292,6 +27307,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SP } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC)); @@ -27448,6 +27468,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SP } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC)); @@ -27602,6 +27627,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SP } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC)); @@ -31119,6 +31149,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SP } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC)); @@ -31276,6 +31311,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SP } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC)); @@ -31431,6 +31471,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SP } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC)); @@ -33693,6 +33738,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SP } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(RT_CONSTANT(opline, opline->op2)); @@ -33851,6 +33901,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SP } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(RT_CONSTANT(opline, opline->op2)); @@ -34007,6 +34062,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SP } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(RT_CONSTANT(opline, opline->op2)); @@ -35815,6 +35875,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SP } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC)); @@ -35972,6 +36037,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SP } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC)); @@ -36127,6 +36197,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SP } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC)); @@ -38413,6 +38488,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SP } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC)); @@ -38571,6 +38651,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SP } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC)); @@ -38727,6 +38812,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SP } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC)); @@ -42786,6 +42876,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SP } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(RT_CONSTANT(opline, opline->op2)); @@ -42944,6 +43039,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SP } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(RT_CONSTANT(opline, opline->op2)); @@ -43100,6 +43200,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SP } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(RT_CONSTANT(opline, opline->op2)); @@ -46609,6 +46714,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SP } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC)); @@ -46766,6 +46876,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SP } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC)); @@ -46921,6 +47036,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SP } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC)); @@ -51728,6 +51848,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SP } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC)); @@ -51886,6 +52011,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SP } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC)); @@ -52042,6 +52172,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_ASSIGN_OBJ_SP } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC)); @@ -77261,6 +77396,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_VA } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(RT_CONSTANT(opline, opline->op2)); @@ -77418,6 +77558,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_VA } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(RT_CONSTANT(opline, opline->op2)); @@ -77573,6 +77718,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_VA } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(RT_CONSTANT(opline, opline->op2)); @@ -79969,6 +80119,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_VA } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC)); @@ -80125,6 +80280,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_VA } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC)); @@ -80279,6 +80439,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_VA } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC)); @@ -83796,6 +83961,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_VA } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC)); @@ -83953,6 +84123,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_VA } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC)); @@ -84108,6 +84283,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_VA } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC)); @@ -86370,6 +86550,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_UN } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(RT_CONSTANT(opline, opline->op2)); @@ -86528,6 +86713,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_UN } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(RT_CONSTANT(opline, opline->op2)); @@ -86684,6 +86874,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_UN } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(RT_CONSTANT(opline, opline->op2)); @@ -88492,6 +88687,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_UN } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC)); @@ -88649,6 +88849,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_UN } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC)); @@ -88804,6 +89009,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_UN } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC)); @@ -91090,6 +91300,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_UN } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC)); @@ -91248,6 +91463,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_UN } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC)); @@ -91404,6 +91624,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_UN } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC)); @@ -95463,6 +95688,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_CV } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(RT_CONSTANT(opline, opline->op2)); @@ -95621,6 +95851,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_CV } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(RT_CONSTANT(opline, opline->op2)); @@ -95777,6 +96012,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_CV } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(RT_CONSTANT(opline, opline->op2)); @@ -99286,6 +99526,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_CV } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC)); @@ -99443,6 +99688,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_CV } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC)); @@ -99598,6 +99848,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_CV } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC)); @@ -104303,6 +104558,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_CV } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC)); @@ -104461,6 +104721,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_CV } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC)); @@ -104617,6 +104882,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_ASSIGN_OBJ_SPEC_CV } goto exit_assign_obj; } + } else if (prop_info != NULL + && EXPECTED((Z_PROP_FLAG_P(property_val) & (IS_PROP_UNINIT|IS_PROP_LAZY)) == IS_PROP_UNINIT) + && EXPECTED(!zend_object_is_lazy(zobj))) { + value = zend_assign_to_uninit_typed_prop(zobj, prop_info, property_val, value EXECUTE_DATA_CC); + goto free_and_exit_assign_obj; } } else if (EXPECTED(IS_DYNAMIC_PROPERTY_OFFSET(prop_offset))) { name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));