From 97066672495d56809a03ecdf42a79847a6af1a11 Mon Sep 17 00:00:00 2001 From: Anton Vasiliev <1695147@gmail.com> Date: Sun, 28 Sep 2025 14:25:39 +0100 Subject: [PATCH] #37 - Add full support for object variable declaration --- parser/parser.h | 8 ++++---- parser/zephir.lemon | 4 ++++ tests/base/declare.phpt | 2 ++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/parser/parser.h b/parser/parser.h index 9c3426c6..6b6e9e27 100644 --- a/parser/parser.h +++ b/parser/parser.h @@ -1049,6 +1049,10 @@ static void xx_ret_declare_statement(zval *ret, int type, zval *variables, xx_sc parser_add_str(ret, "data-type", "bool"); break; + case XX_T_TYPE_OBJECT: + parser_add_str(ret, "data-type", "object"); + break; + case XX_T_TYPE_STRING: parser_add_str(ret, "data-type", "string"); break; @@ -1073,10 +1077,6 @@ static void xx_ret_declare_statement(zval *ret, int type, zval *variables, xx_sc parser_add_str(ret, "data-type", "mixed"); break; - case XX_T_TYPE_OBJECT: - parser_add_str(ret, "data-type", "object"); - break; - default: fprintf(stderr, "err 2?\n"); } diff --git a/parser/zephir.lemon b/parser/zephir.lemon index 1ec5c9d0..191a56e8 100644 --- a/parser/zephir.lemon +++ b/parser/zephir.lemon @@ -1741,6 +1741,10 @@ xx_declare_statement(R) ::= TYPE_MIXED xx_declare_variable_list(L) DOTCOMMA . { xx_ret_declare_statement(&R, XX_T_TYPE_MIXED, &L, status->scanner_state); } +xx_declare_statement(R) ::= TYPE_OBJECT xx_declare_variable_list(L) DOTCOMMA . { + xx_ret_declare_statement(&R, XX_T_TYPE_OBJECT, &L, status->scanner_state); +} + xx_declare_variable_list(R) ::= xx_declare_variable_list(L) COMMA xx_declare_variable(V) . { xx_ret_list(&R, &L, &V, status->scanner_state); } diff --git a/tests/base/declare.phpt b/tests/base/declare.phpt index f2a07a66..ee324594 100644 --- a/tests/base/declare.phpt +++ b/tests/base/declare.phpt @@ -19,6 +19,7 @@ function test() { string foo = "foobar"; array foo = [10,20,30]; var foo = 10; + object obj = new stdClass; } ZEP; @@ -47,3 +48,4 @@ declare bool foo bool true declare string foo string foobar declare array foo array - declare variable foo int 10 +declare object obj new -