Browse Source

Fix issues with multiple bind patterns in match statement

cdemirer 3 years ago
parent
commit
3c5b9d1be3

+ 2 - 1
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);
 		}
 	}

+ 4 - 0
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

+ 2 - 0
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.

+ 6 - 0
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)

+ 4 - 0
modules/gdscript/tests/scripts/parser/features/match_multiple_variable_binds_in_pattern.out

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