Explorar el Código

GDScript: Allow casting enum to int

An enum value is always an integer so the cast is valid. The code here
now consider this case to avoid giving an error message.
George Marques hace 1 año
padre
commit
030995c10d

+ 2 - 0
modules/gdscript/gdscript_analyzer.cpp

@@ -3469,6 +3469,8 @@ void GDScriptAnalyzer::reduce_cast(GDScriptParser::CastNode *p_cast) {
 			if (op_type.builtin_type == Variant::INT && cast_type.kind == GDScriptParser::DataType::ENUM) {
 				mark_node_unsafe(p_cast);
 				valid = true;
+			} else if (op_type.kind == GDScriptParser::DataType::ENUM && cast_type.builtin_type == Variant::INT) {
+				valid = true;
 			} else if (op_type.kind == GDScriptParser::DataType::BUILTIN && cast_type.kind == GDScriptParser::DataType::BUILTIN) {
 				valid = Variant::can_convert(op_type.builtin_type, cast_type.builtin_type);
 			} else if (op_type.kind != GDScriptParser::DataType::BUILTIN && cast_type.kind != GDScriptParser::DataType::BUILTIN) {

+ 9 - 0
modules/gdscript/tests/scripts/analyzer/features/cast_enum_to_int.gd

@@ -0,0 +1,9 @@
+# GH-85882
+
+enum Foo { A, B, C }
+
+func test():
+	var a := Foo.A
+	var b := a as int + 1
+	print(b)
+	

+ 2 - 0
modules/gdscript/tests/scripts/analyzer/features/cast_enum_to_int.out

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