Sfoglia il codice sorgente

Merge pull request #83120 from dalexeev/gds-allow-property-getter-empty-parentheses

GDScript: Allow empty parentheses for property getter declaration
Rémi Verschelde 1 anno fa
parent
commit
150f2a75b2

+ 7 - 3
modules/gdscript/gdscript_parser.cpp

@@ -1120,7 +1120,12 @@ void GDScriptParser::parse_property_getter(VariableNode *p_variable) {
 		case VariableNode::PROP_INLINE: {
 			FunctionNode *function = alloc_node<FunctionNode>();
 
-			consume(GDScriptTokenizer::Token::COLON, R"(Expected ":" after "get".)");
+			if (match(GDScriptTokenizer::Token::PARENTHESIS_OPEN)) {
+				consume(GDScriptTokenizer::Token::PARENTHESIS_CLOSE, R"*(Expected ")" after "get(".)*");
+				consume(GDScriptTokenizer::Token::COLON, R"*(Expected ":" after "get()".)*");
+			} else {
+				consume(GDScriptTokenizer::Token::COLON, R"(Expected ":" or "(" after "get".)");
+			}
 
 			IdentifierNode *identifier = alloc_node<IdentifierNode>();
 			complete_extents(identifier);
@@ -1268,8 +1273,7 @@ GDScriptParser::EnumNode *GDScriptParser::parse_enum(bool p_is_static) {
 	EnumNode *enum_node = alloc_node<EnumNode>();
 	bool named = false;
 
-	if (check(GDScriptTokenizer::Token::IDENTIFIER)) {
-		advance();
+	if (match(GDScriptTokenizer::Token::IDENTIFIER)) {
 		enum_node->identifier = parse_identifier();
 		named = true;
 	}

+ 5 - 0
modules/gdscript/tests/scripts/parser/features/property_setter_getter.gd

@@ -6,6 +6,9 @@ var property:
 	set(value):
 		_backing = value - 1000
 
+var property_2:
+	get(): # Allow parentheses.
+		return 123
 
 func test():
 	print("Not using self:")
@@ -35,3 +38,5 @@ func test():
 	self.property = 5000
 	print(self.property)
 	print(self._backing)
+
+	print(property_2)

+ 1 - 0
modules/gdscript/tests/scripts/parser/features/property_setter_getter.out

@@ -17,3 +17,4 @@ Using self:
 -50
 5000
 4000
+123