From 3c5b9d1be3db1ee2657ec10fc316b97a65c03542 Mon Sep 17 00:00:00 2001 From: cdemirer <41021322+cdemirer@users.noreply.github.com> Date: Mon, 4 Apr 2022 15:47:08 +0800 Subject: Fix issues with multiple bind patterns in match statement --- modules/gdscript/gdscript_parser.cpp | 3 ++- .../parser/errors/match_multiple_variable_binds_in_branch.gd | 4 ++++ .../parser/errors/match_multiple_variable_binds_in_branch.out | 2 ++ .../parser/features/match_multiple_variable_binds_in_pattern.gd | 6 ++++++ .../parser/features/match_multiple_variable_binds_in_pattern.out | 4 ++++ 5 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 modules/gdscript/tests/scripts/parser/errors/match_multiple_variable_binds_in_branch.gd create mode 100644 modules/gdscript/tests/scripts/parser/errors/match_multiple_variable_binds_in_branch.out create mode 100644 modules/gdscript/tests/scripts/parser/features/match_multiple_variable_binds_in_pattern.gd create mode 100644 modules/gdscript/tests/scripts/parser/features/match_multiple_variable_binds_in_pattern.out (limited to 'modules') diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp index 67d778f932..7ae58c4476 100644 --- a/modules/gdscript/gdscript_parser.cpp +++ b/modules/gdscript/gdscript_parser.cpp @@ -1863,7 +1863,7 @@ GDScriptParser::MatchBranchNode *GDScriptParser::parse_match_branch() { if (pattern == nullptr) { continue; } - if (pattern->pattern_type == PatternNode::PT_BIND) { + if (pattern->binds.size() > 0) { has_bind = true; } if (branch->patterns.size() > 0 && has_bind) { @@ -1899,6 +1899,7 @@ GDScriptParser::MatchBranchNode *GDScriptParser::parse_match_branch() { for (const StringName &E : binds) { SuiteNode::Local local(branch->patterns[0]->binds[E], current_function); + local.type = SuiteNode::Local::PATTERN_BIND; suite->add_local(local); } } diff --git a/modules/gdscript/tests/scripts/parser/errors/match_multiple_variable_binds_in_branch.gd b/modules/gdscript/tests/scripts/parser/errors/match_multiple_variable_binds_in_branch.gd new file mode 100644 index 0000000000..4608c778aa --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/errors/match_multiple_variable_binds_in_branch.gd @@ -0,0 +1,4 @@ +func test(): + match 1: + [[[var a]]], 2: + pass diff --git a/modules/gdscript/tests/scripts/parser/errors/match_multiple_variable_binds_in_branch.out b/modules/gdscript/tests/scripts/parser/errors/match_multiple_variable_binds_in_branch.out new file mode 100644 index 0000000000..1cdc24683b --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/errors/match_multiple_variable_binds_in_branch.out @@ -0,0 +1,2 @@ +GDTEST_PARSER_ERROR +Cannot use a variable bind with multiple patterns. diff --git a/modules/gdscript/tests/scripts/parser/features/match_multiple_variable_binds_in_pattern.gd b/modules/gdscript/tests/scripts/parser/features/match_multiple_variable_binds_in_pattern.gd new file mode 100644 index 0000000000..a0ae7fb17c --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/match_multiple_variable_binds_in_pattern.gd @@ -0,0 +1,6 @@ +func test(): + match [1, 2, 3]: + [var a, var b, var c]: + print(a == 1) + print(b == 2) + print(c == 3) diff --git a/modules/gdscript/tests/scripts/parser/features/match_multiple_variable_binds_in_pattern.out b/modules/gdscript/tests/scripts/parser/features/match_multiple_variable_binds_in_pattern.out new file mode 100644 index 0000000000..316db6d748 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/features/match_multiple_variable_binds_in_pattern.out @@ -0,0 +1,4 @@ +GDTEST_OK +true +true +true -- cgit v1.2.3