Merge pull request #57591 from vnen/gdscript-enum-fixes

This commit is contained in:
Rémi Verschelde
2022-02-04 13:49:15 +01:00
committed by GitHub
34 changed files with 352 additions and 57 deletions
@@ -0,0 +1,10 @@
enum MyEnum { ENUM_VALUE_1, ENUM_VALUE_2 }
enum MyOtherEnum { OTHER_ENUM_VALUE_1, OTHER_ENUM_VALUE_2 }
# Different enum types can't be assigned without casting.
var class_var: MyEnum = MyEnum.ENUM_VALUE_1
func test():
print(class_var)
class_var = MyOtherEnum.OTHER_ENUM_VALUE_2
print(class_var)
@@ -0,0 +1,2 @@
GDTEST_ANALYZER_ERROR
Cannot assign a value of type "MyOtherEnum (enum)" to a target of type "MyEnum (enum)".
@@ -0,0 +1,8 @@
enum MyEnum { ENUM_VALUE_1, ENUM_VALUE_2 }
enum MyOtherEnum { OTHER_ENUM_VALUE_1, OTHER_ENUM_VALUE_2 }
# Different enum types can't be assigned without casting.
var class_var: MyEnum = MyOtherEnum.OTHER_ENUM_VALUE_1
func test():
print(class_var)
@@ -0,0 +1,2 @@
GDTEST_ANALYZER_ERROR
Value of type "MyOtherEnum (enum)" cannot be assigned to a variable of type "MyEnum (enum)".
@@ -0,0 +1,8 @@
enum MyEnum { ENUM_VALUE_1, ENUM_VALUE_2 }
enum MyOtherEnum { OTHER_ENUM_VALUE_1, OTHER_ENUM_VALUE_2 }
func test():
var local_var: MyEnum = MyEnum.ENUM_VALUE_1
print(local_var)
local_var = MyOtherEnum.OTHER_ENUM_VALUE_2
print(local_var)
@@ -0,0 +1,2 @@
GDTEST_ANALYZER_ERROR
Cannot assign a value of type "MyOtherEnum (enum)" to a target of type "MyEnum (enum)".
@@ -0,0 +1,6 @@
enum MyEnum { ENUM_VALUE_1, ENUM_VALUE_2 }
enum MyOtherEnum { OTHER_ENUM_VALUE_1, OTHER_ENUM_VALUE_2 }
func test():
var local_var: MyEnum = MyOtherEnum.OTHER_ENUM_VALUE_1
print(local_var)
@@ -0,0 +1,2 @@
GDTEST_ANALYZER_ERROR
Value of type "MyOtherEnum (enum)" cannot be assigned to a variable of type "MyEnum (enum)".
@@ -0,0 +1,13 @@
enum MyEnum { ENUM_VALUE_1, ENUM_VALUE_2 }
var class_var: int = MyEnum.ENUM_VALUE_1
func test():
print(class_var)
class_var = MyEnum.ENUM_VALUE_2
print(class_var)
var local_var: int = MyEnum.ENUM_VALUE_1
print(local_var)
local_var = MyEnum.ENUM_VALUE_2
print(local_var)
@@ -0,0 +1,5 @@
GDTEST_OK
0
1
0
1
@@ -0,0 +1,13 @@
enum MyEnum { ENUM_VALUE_1, ENUM_VALUE_2 }
var class_var: MyEnum = 0 as MyEnum
func test():
print(class_var)
class_var = 1 as MyEnum
print(class_var)
var local_var: MyEnum = 0 as MyEnum
print(local_var)
local_var = 1 as MyEnum
print(local_var)
@@ -0,0 +1,5 @@
GDTEST_OK
0
1
0
1
@@ -0,0 +1,14 @@
enum MyEnum { ENUM_VALUE_1, ENUM_VALUE_2 }
enum MyOtherEnum { OTHER_ENUM_VALUE_1, OTHER_ENUM_VALUE_2 }
var class_var: MyEnum = MyOtherEnum.OTHER_ENUM_VALUE_1 as MyEnum
func test():
print(class_var)
class_var = MyOtherEnum.OTHER_ENUM_VALUE_2 as MyEnum
print(class_var)
var local_var: MyEnum = MyOtherEnum.OTHER_ENUM_VALUE_1 as MyEnum
print(local_var)
local_var = MyOtherEnum.OTHER_ENUM_VALUE_2 as MyEnum
print(local_var)
@@ -0,0 +1,13 @@
enum MyEnum { ENUM_VALUE_1, ENUM_VALUE_2 }
var class_var: MyEnum = MyEnum.ENUM_VALUE_1
func test():
print(class_var)
class_var = MyEnum.ENUM_VALUE_2
print(class_var)
var local_var: MyEnum = MyEnum.ENUM_VALUE_1
print(local_var)
local_var = MyEnum.ENUM_VALUE_2
print(local_var)
@@ -0,0 +1,5 @@
GDTEST_OK
0
1
0
1
@@ -0,0 +1,21 @@
# Enum is equivalent to int for comparisons and operations.
enum MyEnum {
ZERO,
ONE,
TWO,
}
enum OtherEnum {
ZERO,
ONE,
TWO,
}
func test():
print(MyEnum.ZERO == OtherEnum.ZERO)
print(MyEnum.ZERO == 1)
print(MyEnum.ZERO != OtherEnum.ONE)
print(MyEnum.ZERO != 0)
print(MyEnum.ONE + OtherEnum.TWO)
print(2 - MyEnum.ONE)
@@ -0,0 +1,7 @@
GDTEST_OK
true
false
true
false
3
1
@@ -0,0 +1,13 @@
enum MyEnum {
ZERO,
ONE,
TWO,
}
func test():
for key in MyEnum.keys():
prints(key, MyEnum[key])
# https://github.com/godotengine/godot/issues/55491
for key in MyEnum:
prints(key, MyEnum[key])
@@ -0,0 +1,7 @@
GDTEST_OK
ZERO 0
ONE 1
TWO 2
ZERO 0
ONE 1
TWO 2
@@ -0,0 +1,15 @@
enum MyEnum { ENUM_VALUE_1, ENUM_VALUE_2 }
# Assigning int value to enum-typed variable without explicit cast causes a warning.
# While it is valid it may be a mistake in the assignment.
var class_var: MyEnum = 0
func test():
print(class_var)
class_var = 1
print(class_var)
var local_var: MyEnum = 0
print(local_var)
local_var = 1
print(local_var)
@@ -0,0 +1,21 @@
GDTEST_OK
>> WARNING
>> Line: 5
>> INT_ASSIGNED_TO_ENUM
>> Integer used when an enum value is expected. If this is intended cast the integer to the enum type.
>> WARNING
>> Line: 9
>> INT_ASSIGNED_TO_ENUM
>> Integer used when an enum value is expected. If this is intended cast the integer to the enum type.
>> WARNING
>> Line: 12
>> INT_ASSIGNED_TO_ENUM
>> Integer used when an enum value is expected. If this is intended cast the integer to the enum type.
>> WARNING
>> Line: 14
>> INT_ASSIGNED_TO_ENUM
>> Integer used when an enum value is expected. If this is intended cast the integer to the enum type.
0
1
0
1
@@ -1,3 +1,4 @@
#debug-only
func test():
var node := Node.new()
var inside_tree = node.is_inside_tree
@@ -2,5 +2,5 @@ GDTEST_RUNTIME_ERROR
>> SCRIPT ERROR
>> on function: test()
>> runtime/errors/callable_call_after_free_object.gd
>> 5
>> 6
>> Attempt to call function 'null::is_inside_tree (Callable)' on a null instance.