From 2cbebbc1742bfc68b4368e6e44bd7c07d580ad3f Mon Sep 17 00:00:00 2001 From: Mikhail Kornaukhov Date: Tue, 1 Nov 2022 01:23:22 +0300 Subject: [PATCH 1/4] Allow trailing comma for function use and parameter lists --- compiler/gentree.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/compiler/gentree.cpp b/compiler/gentree.cpp index 8dc0fa7afe..9495175e1e 100644 --- a/compiler/gentree.cpp +++ b/compiler/gentree.cpp @@ -4,6 +4,7 @@ #include "compiler/gentree.h" +#include "auto/compiler/vertex/vertex-types.h" #include "common/algorithms/contains.h" #include "common/algorithms/find.h" @@ -15,11 +16,13 @@ #include "compiler/data/lib-data.h" #include "compiler/data/src-file.h" #include "compiler/data/generics-mixins.h" +#include "compiler/data/vertex-adaptor.h" #include "compiler/lambda-utils.h" #include "compiler/lexer.h" #include "compiler/name-gen.h" #include "compiler/phpdoc.h" #include "compiler/stage.h" +#include "compiler/token.h" #include "compiler/type-hint.h" #include "compiler/utils/string-utils.h" #include "compiler/vertex.h" @@ -97,6 +100,9 @@ VertexPtr GenTree::get_foreach_value() { } VertexAdaptor GenTree::get_function_use_var_name_ref() { + if (cur->type() == tok_clpar) { // for trailing comma + return {}; + } auto result = get_var_name_ref(); kphp_error(result, fmt_format("function use list: expected varname, found {}", cur->str_val)); kphp_error(!result->ref_flag, "references to variables in `use` block are forbidden in lambdas"); @@ -1377,7 +1383,7 @@ bool GenTree::parse_cur_function_uses() { } std::vector> uses_as_vars; - gen_list(&uses_as_vars, &GenTree::get_function_use_var_name_ref, tok_comma); + gen_list(&uses_as_vars, &GenTree::get_function_use_var_name_ref, tok_comma); for (auto &v : uses_as_vars) { cur_function->uses_list.emplace_front(v); // the order — use($v1, $v2) or use($v2, $v1) — doesn't matter @@ -1494,7 +1500,7 @@ VertexAdaptor GenTree::parse_cur_function_param_list() { params_next.emplace_back(ClassData::gen_param_this(auto_location())); } - bool ok_params_next = gen_list(¶ms_next, &GenTree::get_func_param, tok_comma); + bool ok_params_next = gen_list(¶ms_next, &GenTree::get_func_param, tok_comma); CE(!kphp_error(ok_params_next, "Failed to parse function params")); CE(expect(tok_clpar, "')'")); From c7385de08e5e872402cda1a3b1746304b703ddb7 Mon Sep 17 00:00:00 2001 From: Mikhail Kornaukhov Date: Mon, 28 Nov 2022 11:56:48 +0300 Subject: [PATCH 2/4] Add tests --- .../php8/001_function_args_trailing_comma.php | 15 +++++++++++++++ .../php8/002_function_uses_trailing_comma.php | 15 +++++++++++++++ .../101_function_args_trailing_comma_fail.php | 9 +++++++++ .../102_function_args_trailing_comma_fail.php | 6 ++++++ 4 files changed, 45 insertions(+) create mode 100644 tests/phpt/php8/001_function_args_trailing_comma.php create mode 100644 tests/phpt/php8/002_function_uses_trailing_comma.php create mode 100644 tests/phpt/php8/101_function_args_trailing_comma_fail.php create mode 100644 tests/phpt/php8/102_function_args_trailing_comma_fail.php diff --git a/tests/phpt/php8/001_function_args_trailing_comma.php b/tests/phpt/php8/001_function_args_trailing_comma.php new file mode 100644 index 0000000000..0430e5338d --- /dev/null +++ b/tests/phpt/php8/001_function_args_trailing_comma.php @@ -0,0 +1,15 @@ +@ok php8 + \ No newline at end of file diff --git a/tests/phpt/php8/002_function_uses_trailing_comma.php b/tests/phpt/php8/002_function_uses_trailing_comma.php new file mode 100644 index 0000000000..d7dc511d9e --- /dev/null +++ b/tests/phpt/php8/002_function_uses_trailing_comma.php @@ -0,0 +1,15 @@ +@ok php8 + Date: Wed, 8 Feb 2023 12:55:48 +0300 Subject: [PATCH 3/4] Fix tests --- .../{ => trailing_comma}/001_function_args_trailing_comma.php | 2 -- .../{ => trailing_comma}/002_function_uses_trailing_comma.php | 2 +- .../101_function_args_trailing_comma_fail.php | 2 +- .../102_function_args_trailing_comma_fail.php | 2 +- 4 files changed, 3 insertions(+), 5 deletions(-) rename tests/phpt/php8/{ => trailing_comma}/001_function_args_trailing_comma.php (98%) rename tests/phpt/php8/{ => trailing_comma}/002_function_uses_trailing_comma.php (95%) rename tests/phpt/php8/{ => trailing_comma}/101_function_args_trailing_comma_fail.php (98%) rename tests/phpt/php8/{ => trailing_comma}/102_function_args_trailing_comma_fail.php (98%) diff --git a/tests/phpt/php8/001_function_args_trailing_comma.php b/tests/phpt/php8/trailing_comma/001_function_args_trailing_comma.php similarity index 98% rename from tests/phpt/php8/001_function_args_trailing_comma.php rename to tests/phpt/php8/trailing_comma/001_function_args_trailing_comma.php index 0430e5338d..fe0b1c476c 100644 --- a/tests/phpt/php8/001_function_args_trailing_comma.php +++ b/tests/phpt/php8/trailing_comma/001_function_args_trailing_comma.php @@ -11,5 +11,3 @@ function foo( } foo("vk", "com"); - -?> \ No newline at end of file diff --git a/tests/phpt/php8/002_function_uses_trailing_comma.php b/tests/phpt/php8/trailing_comma/002_function_uses_trailing_comma.php similarity index 95% rename from tests/phpt/php8/002_function_uses_trailing_comma.php rename to tests/phpt/php8/trailing_comma/002_function_uses_trailing_comma.php index d7dc511d9e..1650a9bc1b 100644 --- a/tests/phpt/php8/002_function_uses_trailing_comma.php +++ b/tests/phpt/php8/trailing_comma/002_function_uses_trailing_comma.php @@ -12,4 +12,4 @@ echo $a, $b; }; -$fn(); \ No newline at end of file +$fn(); diff --git a/tests/phpt/php8/101_function_args_trailing_comma_fail.php b/tests/phpt/php8/trailing_comma/101_function_args_trailing_comma_fail.php similarity index 98% rename from tests/phpt/php8/101_function_args_trailing_comma_fail.php rename to tests/phpt/php8/trailing_comma/101_function_args_trailing_comma_fail.php index 3f7279d43f..d42d894514 100644 --- a/tests/phpt/php8/101_function_args_trailing_comma_fail.php +++ b/tests/phpt/php8/trailing_comma/101_function_args_trailing_comma_fail.php @@ -6,4 +6,4 @@ function foo( $arg2,, // Multiple trailing commas are not allowed ) { echo $arg . $arg2 . "\n"; -} \ No newline at end of file +} diff --git a/tests/phpt/php8/102_function_args_trailing_comma_fail.php b/tests/phpt/php8/trailing_comma/102_function_args_trailing_comma_fail.php similarity index 98% rename from tests/phpt/php8/102_function_args_trailing_comma_fail.php rename to tests/phpt/php8/trailing_comma/102_function_args_trailing_comma_fail.php index 9535668f20..e035c7d4d4 100644 --- a/tests/phpt/php8/102_function_args_trailing_comma_fail.php +++ b/tests/phpt/php8/trailing_comma/102_function_args_trailing_comma_fail.php @@ -3,4 +3,4 @@ function foo(,) { // Free-standing commas are not allowed echo $arg . "\n"; -} \ No newline at end of file +} From dffa5eb09c227a296132462ce1741921119e87ef Mon Sep 17 00:00:00 2001 From: mkornaukhov03 Date: Wed, 15 Feb 2023 12:08:43 +0300 Subject: [PATCH 4/4] Fix php7_4 test --- compiler/gentree.cpp | 1 - .../phc/parsing/{php7_4 => php8_0}/arglist_trailing_comma.php | 2 +- .../parsing/{php7_4 => php8_0}/arglist_trailing_comma_bad1.php | 0 .../parsing/{php7_4 => php8_0}/arglist_trailing_comma_bad2.php | 0 .../parsing/{php7_4 => php8_0}/arglist_trailing_comma_bad3.php | 0 .../arglist_trailing_comma_decl.php} | 2 +- 6 files changed, 2 insertions(+), 3 deletions(-) rename tests/phpt/phc/parsing/{php7_4 => php8_0}/arglist_trailing_comma.php (98%) rename tests/phpt/phc/parsing/{php7_4 => php8_0}/arglist_trailing_comma_bad1.php (100%) rename tests/phpt/phc/parsing/{php7_4 => php8_0}/arglist_trailing_comma_bad2.php (100%) rename tests/phpt/phc/parsing/{php7_4 => php8_0}/arglist_trailing_comma_bad3.php (100%) rename tests/phpt/phc/parsing/{php7_4/arglist_trailing_comma_bad4.php => php8_0/arglist_trailing_comma_decl.php} (80%) diff --git a/compiler/gentree.cpp b/compiler/gentree.cpp index 9495175e1e..0a60c13d7e 100644 --- a/compiler/gentree.cpp +++ b/compiler/gentree.cpp @@ -4,7 +4,6 @@ #include "compiler/gentree.h" -#include "auto/compiler/vertex/vertex-types.h" #include "common/algorithms/contains.h" #include "common/algorithms/find.h" diff --git a/tests/phpt/phc/parsing/php7_4/arglist_trailing_comma.php b/tests/phpt/phc/parsing/php8_0/arglist_trailing_comma.php similarity index 98% rename from tests/phpt/phc/parsing/php7_4/arglist_trailing_comma.php rename to tests/phpt/phc/parsing/php8_0/arglist_trailing_comma.php index 56b4e10342..f79f075e2b 100644 --- a/tests/phpt/phc/parsing/php7_4/arglist_trailing_comma.php +++ b/tests/phpt/phc/parsing/php8_0/arglist_trailing_comma.php @@ -1,4 +1,4 @@ -@ok +@ok php8