diff --git a/src/Php/CompilerBase.php b/src/Php/CompilerBase.php index 538417dc..6b7b792d 100644 --- a/src/Php/CompilerBase.php +++ b/src/Php/CompilerBase.php @@ -67,6 +67,7 @@ class CompilerBase extends \PhpAot\Core\Translator public const string EXPR_NEW = 'Expr_New'; public const string EXPR_ARRAY_DIM_FETCH = 'Expr_ArrayDimFetch'; + public const string EXPR_PROPERTY_FETCH = 'Expr_PropertyFetch'; public const string NAMESPACE_SEPARATOR = '__'; @@ -361,7 +362,7 @@ class CompilerBase extends \PhpAot\Core\Translator return $this->parseArray($expr); case self::EXPR_ARRAY_DIM_FETCH: return $this->parseArrayDimFetch($expr, $this->inAssignExpr); - case 'Expr_PropertyFetch': + case self::EXPR_PROPERTY_FETCH: return $this->parsePropertyFetch($expr, $this->inAssignExpr); case 'Expr_BinaryOp_ShiftLeft': return $this->parseBinaryOpShiftLeft($expr); @@ -1828,6 +1829,10 @@ class CompilerBase extends \PhpAot\Core\Translator return $this->parseArrayDimStore($node->var->var, $dim, $tmpVar); } + + if ($this->isAssignOpConcat($op)) { + return $var . '.append(' . $expr . ')'; + } return $var . ' ' . $op . ' (' . $expr . ')'; } @@ -2860,7 +2865,7 @@ class CompilerBase extends \PhpAot\Core\Translator $object = $expr->var; $property = $expr->name; $id = $this->getPropertyIdentifier($object, $property); - return $this->convertToObject($object) . '.attr(' . $id . ', ' . $this->escapeBool($update) . ')'; + return $this->parseIdentifier($object) . '.attr(' . $id . ', ' . $this->escapeBool($update) . ')'; } protected function parseAssignOpShiftRight(Node $node): string diff --git a/tests/aot/object-link-002.phpt b/tests/aot/object-link-002.phpt new file mode 100644 index 00000000..c3ed55e8 --- /dev/null +++ b/tests/aot/object-link-002.phpt @@ -0,0 +1,14 @@ +--TEST-- +object link operator 002 +--FILE-- +prop = new stdClass(); + $o->prop->value = "value"; + var_dump($o->prop->value); +} +?> +--EXPECT-- +string(5) "value" diff --git a/tests/aot/object-link-003.phpt b/tests/aot/object-link-003.phpt new file mode 100644 index 00000000..23069b6d --- /dev/null +++ b/tests/aot/object-link-003.phpt @@ -0,0 +1,15 @@ +--TEST-- +object link operator 003 +--FILE-- +prop = new stdClass(); + $o->prop->value = "value"; + $o->prop->value .= " 2025"; + var_dump($o->prop->value); +} +?> +--EXPECT-- +string(10) "value 2025"