Fix issues with multiple bind patterns in match statement
This commit is contained in:
parent
c630c2001d
commit
3c5b9d1be3
5 changed files with 18 additions and 1 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
func test():
|
||||
match 1:
|
||||
[[[var a]]], 2:
|
||||
pass
|
|
@ -0,0 +1,2 @@
|
|||
GDTEST_PARSER_ERROR
|
||||
Cannot use a variable bind with multiple patterns.
|
|
@ -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)
|
|
@ -0,0 +1,4 @@
|
|||
GDTEST_OK
|
||||
true
|
||||
true
|
||||
true
|
Loading…
Reference in a new issue