Browse Source

Merge pull request #90580 from vnen/gdscript-allow-enum-to-int-cast

GDScript: Allow casting enum to int
Rémi Verschelde 1 year ago
parent
commit
c9a595afb5

+ 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