Fix issues with multiple bind patterns in match statement

This commit is contained in:
cdemirer 2022-04-04 15:47:08 +08:00
parent c630c2001d
commit 3c5b9d1be3
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