GDScript: Add return type covariance and parameter type contravariance

This commit is contained in:
Danil Alexeev
2023-09-28 11:28:28 +03:00
parent 4c3dc26367
commit cb8b89fd95
19 changed files with 169 additions and 4 deletions

View File

@@ -0,0 +1,10 @@
class A:
func f(_p: Object):
pass
class B extends A:
func f(_p: Node):
pass
func test():
pass

View File

@@ -0,0 +1,2 @@
GDTEST_ANALYZER_ERROR
The function signature doesn't match the parent. Parent signature is "f(Object) -> Variant".

View File

@@ -0,0 +1,10 @@
class A:
func f(_p: Variant):
pass
class B extends A:
func f(_p: Node): # No `is_type_compatible()` misuse.
pass
func test():
pass

View File

@@ -0,0 +1,2 @@
GDTEST_ANALYZER_ERROR
The function signature doesn't match the parent. Parent signature is "f(Variant) -> Variant".

View File

@@ -0,0 +1,10 @@
class A:
func f(_p: int):
pass
class B extends A:
func f(_p: float): # No implicit conversion.
pass
func test():
pass

View File

@@ -0,0 +1,2 @@
GDTEST_ANALYZER_ERROR
The function signature doesn't match the parent. Parent signature is "f(int) -> Variant".

View File

@@ -0,0 +1,10 @@
class A:
func f() -> Node:
return null
class B extends A:
func f() -> Object:
return null
func test():
pass

View File

@@ -0,0 +1,2 @@
GDTEST_ANALYZER_ERROR
The function signature doesn't match the parent. Parent signature is "f() -> Node".

View File

@@ -0,0 +1,10 @@
class A:
func f() -> Node:
return null
class B extends A:
func f() -> Variant: # No `is_type_compatible()` misuse.
return null
func test():
pass

View File

@@ -0,0 +1,2 @@
GDTEST_ANALYZER_ERROR
The function signature doesn't match the parent. Parent signature is "f() -> Node".

View File

@@ -0,0 +1,10 @@
class A:
func f() -> Node:
return null
class B extends A:
func f() -> void: # No `is_type_compatible()` misuse.
return
func test():
pass

View File

@@ -0,0 +1,2 @@
GDTEST_ANALYZER_ERROR
The function signature doesn't match the parent. Parent signature is "f() -> Node".

View File

@@ -0,0 +1,10 @@
class A:
func f() -> float:
return 0.0
class B extends A:
func f() -> int: # No implicit conversion.
return 0
func test():
pass

View File

@@ -0,0 +1,2 @@
GDTEST_ANALYZER_ERROR
The function signature doesn't match the parent. Parent signature is "f() -> float".