Merge pull request #59863 from cdemirer/fix-match-multiple-bind-single-pattern

Fix issues with multiple bind patterns in match statement
This commit is contained in:
Rémi Verschelde 2022-05-11 14:18:02 +02:00 committed by GitHub
commit 9963ae3553
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 18 additions and 1 deletions

View file

@ -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);
}
}

View file

@ -0,0 +1,4 @@
func test():
match 1:
[[[var a]]], 2:
pass

View file

@ -0,0 +1,2 @@
GDTEST_PARSER_ERROR
Cannot use a variable bind with multiple patterns.

View file

@ -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)

View file

@ -0,0 +1,4 @@
GDTEST_OK
true
true
true