瀏覽代碼

GDScript: Fix multiline and trailing comma for assert

Dmitrii Maganov 2 年之前
父節點
當前提交
71f7c8a9d3

+ 7 - 2
modules/gdscript/gdscript_parser.cpp

@@ -1799,24 +1799,29 @@ GDScriptParser::AssertNode *GDScriptParser::parse_assert() {
 	// TODO: Add assert message.
 	AssertNode *assert = alloc_node<AssertNode>();
 
+	push_multiline(true);
 	consume(GDScriptTokenizer::Token::PARENTHESIS_OPEN, R"(Expected "(" after "assert".)");
+
 	assert->condition = parse_expression(false);
 	if (assert->condition == nullptr) {
 		push_error("Expected expression to assert.");
+		pop_multiline();
 		complete_extents(assert);
 		return nullptr;
 	}
 
-	if (match(GDScriptTokenizer::Token::COMMA)) {
-		// Error message.
+	if (match(GDScriptTokenizer::Token::COMMA) && !check(GDScriptTokenizer::Token::PARENTHESIS_CLOSE)) {
 		assert->message = parse_expression(false);
 		if (assert->message == nullptr) {
 			push_error(R"(Expected error message for assert after ",".)");
+			pop_multiline();
 			complete_extents(assert);
 			return nullptr;
 		}
+		match(GDScriptTokenizer::Token::COMMA);
 	}
 
+	pop_multiline();
 	consume(GDScriptTokenizer::Token::PARENTHESIS_CLOSE, R"*(Expected ")" after assert expression.)*");
 
 	complete_extents(assert);

+ 24 - 0
modules/gdscript/tests/scripts/parser/features/multiline_assert.gd

@@ -0,0 +1,24 @@
+func test():
+	var x := 5
+
+	assert(x > 0)
+	assert(x > 0,)
+	assert(x > 0, 'message')
+	assert(x > 0, 'message',)
+
+	assert(
+		x > 0
+	)
+	assert(
+		x > 0,
+	)
+	assert(
+		x > 0,
+		'message'
+	)
+	assert(
+		x > 0,
+		'message',
+	)
+
+	print('OK')

+ 2 - 0
modules/gdscript/tests/scripts/parser/features/multiline_assert.out

@@ -0,0 +1,2 @@
+GDTEST_OK
+OK