Assorted enum and native type fixes

This commit is contained in:
ocean (they/them)
2022-12-03 22:02:03 -05:00
parent e84bab8e4f
commit 366ec895b1
61 changed files with 699 additions and 97 deletions
@@ -0,0 +1,29 @@
class_name EnumAccessOuterClass
class InnerClass:
enum MyEnum { V0, V2, V1 }
static func print_enums():
print("Inner - Inner")
print(MyEnum.V0, MyEnum.V1, MyEnum.V2)
print(InnerClass.MyEnum.V0, InnerClass.MyEnum.V1, InnerClass.MyEnum.V2)
print(EnumAccessOuterClass.InnerClass.MyEnum.V0, EnumAccessOuterClass.InnerClass.MyEnum.V1, EnumAccessOuterClass.InnerClass.MyEnum.V2)
print("Inner - Outer")
print(EnumAccessOuterClass.MyEnum.V0, EnumAccessOuterClass.MyEnum.V1, EnumAccessOuterClass.MyEnum.V2)
enum MyEnum { V0, V1, V2 }
func print_enums():
print("Outer - Outer")
print(MyEnum.V0, MyEnum.V1, MyEnum.V2)
print(EnumAccessOuterClass.MyEnum.V0, EnumAccessOuterClass.MyEnum.V1, EnumAccessOuterClass.MyEnum.V2)
print("Outer - Inner")
print(InnerClass.MyEnum.V0, InnerClass.MyEnum.V1, InnerClass.MyEnum.V2)
print(EnumAccessOuterClass.InnerClass.MyEnum.V0, EnumAccessOuterClass.InnerClass.MyEnum.V1, EnumAccessOuterClass.InnerClass.MyEnum.V2)
func test():
print_enums()
InnerClass.print_enums()
@@ -0,0 +1,13 @@
GDTEST_OK
Outer - Outer
012
012
Outer - Inner
021
021
Inner - Inner
021
021
021
Inner - Outer
012
@@ -0,0 +1,13 @@
enum Enum {V1, V2}
func test():
var enumAsDict : Dictionary = Enum.duplicate()
var enumAsVariant = Enum.duplicate()
print(Enum.has("V1"))
print(enumAsDict.has("V1"))
print(enumAsVariant.has("V1"))
enumAsDict.clear()
enumAsVariant.clear()
print(Enum.has("V1"))
print(enumAsDict.has("V1"))
print(enumAsVariant.has("V1"))
@@ -0,0 +1,7 @@
GDTEST_OK
true
true
true
true
false
false
@@ -0,0 +1,13 @@
class A:
enum Named { VALUE_A, VALUE_B, VALUE_C = 42 }
class B extends A:
var a = Named.VALUE_A
var b = Named.VALUE_B
var c = Named.VALUE_C
func test():
var test_instance = B.new()
prints("a", test_instance.a, test_instance.a == A.Named.VALUE_A)
prints("b", test_instance.b, test_instance.b == A.Named.VALUE_B)
prints("c", test_instance.c, test_instance.c == B.Named.VALUE_C)
@@ -1,5 +1,3 @@
extends Node
enum Named { VALUE_A, VALUE_B, VALUE_C = 42 }
class Test:
@@ -0,0 +1,4 @@
GDTEST_OK
a 0 true
b 1 true
c 42 true
@@ -0,0 +1,112 @@
class_name EnumFunctionTypecheckOuterClass
enum MyEnum { V0, V1, V2 }
class InnerClass:
enum MyEnum { V0, V2, V1 }
func inner_inner_no_class(e : MyEnum) -> MyEnum:
print(e)
return e
func inner_inner_class(e : InnerClass.MyEnum) -> InnerClass.MyEnum:
print(e)
return e
func inner_inner_class_class(e : EnumFunctionTypecheckOuterClass.InnerClass.MyEnum) -> EnumFunctionTypecheckOuterClass.InnerClass.MyEnum:
print(e)
return e
func inner_outer(e : EnumFunctionTypecheckOuterClass.MyEnum) -> EnumFunctionTypecheckOuterClass.MyEnum:
print(e)
return e
func test():
var _d
print("Inner")
var o := EnumFunctionTypecheckOuterClass.new()
_d = o.outer_outer_no_class(EnumFunctionTypecheckOuterClass.MyEnum.V1)
print()
_d = o.outer_outer_class(EnumFunctionTypecheckOuterClass.MyEnum.V1)
print()
_d = o.outer_inner_class(MyEnum.V1)
_d = o.outer_inner_class(InnerClass.MyEnum.V1)
_d = o.outer_inner_class(EnumFunctionTypecheckOuterClass.InnerClass.MyEnum.V1)
print()
_d = o.outer_inner_class_class(MyEnum.V1)
_d = o.outer_inner_class_class(InnerClass.MyEnum.V1)
_d = o.outer_inner_class_class(EnumFunctionTypecheckOuterClass.InnerClass.MyEnum.V1)
print()
print()
_d = inner_inner_no_class(MyEnum.V1)
_d = inner_inner_no_class(InnerClass.MyEnum.V1)
_d = inner_inner_no_class(EnumFunctionTypecheckOuterClass.InnerClass.MyEnum.V1)
print()
_d = inner_inner_class(MyEnum.V1)
_d = inner_inner_class(InnerClass.MyEnum.V1)
_d = inner_inner_class(EnumFunctionTypecheckOuterClass.InnerClass.MyEnum.V1)
print()
_d = inner_inner_class_class(MyEnum.V1)
_d = inner_inner_class_class(InnerClass.MyEnum.V1)
_d = inner_inner_class_class(EnumFunctionTypecheckOuterClass.InnerClass.MyEnum.V1)
print()
_d = inner_outer(EnumFunctionTypecheckOuterClass.MyEnum.V1)
print()
print()
func outer_outer_no_class(e : MyEnum) -> MyEnum:
print(e)
return e
func outer_outer_class(e : EnumFunctionTypecheckOuterClass.MyEnum) -> EnumFunctionTypecheckOuterClass.MyEnum:
print(e)
return e
func outer_inner_class(e : InnerClass.MyEnum) -> InnerClass.MyEnum:
print(e)
return e
func outer_inner_class_class(e : EnumFunctionTypecheckOuterClass.InnerClass.MyEnum) -> EnumFunctionTypecheckOuterClass.InnerClass.MyEnum:
print(e)
return e
func test():
var _d
print("Outer")
_d = outer_outer_no_class(MyEnum.V1)
_d = outer_outer_no_class(EnumFunctionTypecheckOuterClass.MyEnum.V1)
print()
_d = outer_outer_class(MyEnum.V1)
_d = outer_outer_class(EnumFunctionTypecheckOuterClass.MyEnum.V1)
print()
_d = outer_inner_class(InnerClass.MyEnum.V1)
_d = outer_inner_class(EnumFunctionTypecheckOuterClass.InnerClass.MyEnum.V1)
print()
_d = outer_inner_class_class(InnerClass.MyEnum.V1)
_d = outer_inner_class_class(EnumFunctionTypecheckOuterClass.InnerClass.MyEnum.V1)
print()
print()
var i := EnumFunctionTypecheckOuterClass.InnerClass.new()
_d = i.inner_inner_no_class(InnerClass.MyEnum.V1)
_d = i.inner_inner_no_class(EnumFunctionTypecheckOuterClass.InnerClass.MyEnum.V1)
print()
_d = i.inner_inner_class(InnerClass.MyEnum.V1)
_d = i.inner_inner_class(EnumFunctionTypecheckOuterClass.InnerClass.MyEnum.V1)
print()
_d = i.inner_inner_class_class(InnerClass.MyEnum.V1)
_d = i.inner_inner_class_class(EnumFunctionTypecheckOuterClass.InnerClass.MyEnum.V1)
print()
_d = i.inner_outer(MyEnum.V1)
_d = i.inner_outer(EnumFunctionTypecheckOuterClass.MyEnum.V1)
print()
print()
i.test()
@@ -0,0 +1,55 @@
GDTEST_OK
Outer
1
1
1
1
2
2
2
2
2
2
2
2
2
2
1
1
Inner
1
1
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
1
@@ -0,0 +1,16 @@
const A := 1
enum { B }
enum NamedEnum { C }
class Parent:
const D := 2
enum { E }
enum NamedEnum2 { F }
class Child extends Parent:
enum TestEnum { A, B, C, D, E, F, Node, Object, Child, Parent}
func test():
print(A, B, NamedEnum.C, Parent.D, Parent.E, Parent.NamedEnum2.F)
print(Child.TestEnum.A, Child.TestEnum.B, Child.TestEnum.C, Child.TestEnum.D, Child.TestEnum.E, Child.TestEnum.F)
print(Child.TestEnum.Node, Child.TestEnum.Object, Child.TestEnum.Child, Child.TestEnum.Parent)
@@ -0,0 +1,4 @@
GDTEST_OK
100200
012345
6789
@@ -0,0 +1,19 @@
func print_enum(e : TileSet.TileShape) -> TileSet.TileShape:
print(e)
return e
func test():
var v : TileSet.TileShape
v = TileSet.TILE_SHAPE_SQUARE
v = print_enum(v)
v = print_enum(TileSet.TILE_SHAPE_SQUARE)
v = TileSet.TileShape.TILE_SHAPE_SQUARE
v = print_enum(v)
v = print_enum(TileSet.TileShape.TILE_SHAPE_SQUARE)
v = TileSet.TILE_SHAPE_ISOMETRIC
v = print_enum(v)
v = print_enum(TileSet.TILE_SHAPE_ISOMETRIC)
v = TileSet.TileShape.TILE_SHAPE_ISOMETRIC
v = print_enum(v)
v = print_enum(TileSet.TileShape.TILE_SHAPE_ISOMETRIC)
@@ -0,0 +1,9 @@
GDTEST_OK
0
0
0
0
1
1
1
1
@@ -0,0 +1,86 @@
class_name EnumTypecheckOuterClass
enum MyEnum { V0, V1, V2 }
class InnerClass:
enum MyEnum { V0, V2, V1 }
static func test_inner_from_inner():
print("Inner - Inner")
var e1 : MyEnum
var e2 : InnerClass.MyEnum
var e3 : EnumTypecheckOuterClass.InnerClass.MyEnum
print("Self ", e1, e2, e3)
e1 = MyEnum.V1
e2 = MyEnum.V1
e3 = MyEnum.V1
print("MyEnum ", e1, e2, e3)
e1 = InnerClass.MyEnum.V1
e2 = InnerClass.MyEnum.V1
e3 = InnerClass.MyEnum.V1
print("Inner.MyEnum ", e1, e2, e3)
e1 = EnumTypecheckOuterClass.InnerClass.MyEnum.V1
e2 = EnumTypecheckOuterClass.InnerClass.MyEnum.V1
e3 = EnumTypecheckOuterClass.InnerClass.MyEnum.V1
print("Outer.Inner.MyEnum ", e1, e2, e3)
e1 = e2
e1 = e3
e2 = e1
e2 = e3
e3 = e1
e3 = e2
print()
static func test_outer_from_inner():
print("Inner - Outer")
var e : EnumTypecheckOuterClass.MyEnum
e = EnumTypecheckOuterClass.MyEnum.V1
print("Outer.MyEnum ", e)
print()
func test_outer_from_outer():
print("Outer - Outer")
var e1 : MyEnum
var e2 : EnumTypecheckOuterClass.MyEnum
print("Self ", e1, e2)
e1 = MyEnum.V1
e2 = MyEnum.V1
print("Outer ", e1, e2)
e1 = EnumTypecheckOuterClass.MyEnum.V1
e2 = EnumTypecheckOuterClass.MyEnum.V1
print("Outer.MyEnum ", e1, e2)
e1 = e2
e2 = e1
print()
func test_inner_from_outer():
print("Outer - Inner")
var e1 : InnerClass.MyEnum
var e2 : EnumTypecheckOuterClass.InnerClass.MyEnum
print("Inner ", e1, e2)
e1 = InnerClass.MyEnum.V1
e2 = InnerClass.MyEnum.V1
print("Outer.Inner ", e1, e2)
e1 = EnumTypecheckOuterClass.InnerClass.MyEnum.V1
e2 = EnumTypecheckOuterClass.InnerClass.MyEnum.V1
print("Outer.Inner.MyEnum ", e1, e2)
e1 = e2
e2 = e1
print()
func test():
test_outer_from_outer()
test_inner_from_outer()
InnerClass.test_outer_from_inner()
InnerClass.test_inner_from_inner()
@@ -0,0 +1,19 @@
GDTEST_OK
Outer - Outer
Self 00
Outer 11
Outer.MyEnum 11
Outer - Inner
Inner 00
Outer.Inner 22
Outer.Inner.MyEnum 22
Inner - Outer
Outer.MyEnum 1
Inner - Inner
Self 000
MyEnum 222
Inner.MyEnum 222
Outer.Inner.MyEnum 222