mirror of
https://github.com/godotengine/godot.git
synced 2026-01-03 18:11:19 +03:00
Merge pull request #82477 from dalexeev/gds-covariance-and-contravariance
GDScript: Add return type covariance and parameter type contravariance
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
class A:
|
||||
func f(_p: Object):
|
||||
pass
|
||||
|
||||
class B extends A:
|
||||
func f(_p: Node):
|
||||
pass
|
||||
|
||||
func test():
|
||||
pass
|
||||
@@ -0,0 +1,2 @@
|
||||
GDTEST_ANALYZER_ERROR
|
||||
The function signature doesn't match the parent. Parent signature is "f(Object) -> Variant".
|
||||
@@ -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
|
||||
@@ -0,0 +1,2 @@
|
||||
GDTEST_ANALYZER_ERROR
|
||||
The function signature doesn't match the parent. Parent signature is "f(Variant) -> Variant".
|
||||
@@ -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
|
||||
@@ -0,0 +1,2 @@
|
||||
GDTEST_ANALYZER_ERROR
|
||||
The function signature doesn't match the parent. Parent signature is "f(int) -> Variant".
|
||||
@@ -0,0 +1,10 @@
|
||||
class A:
|
||||
func f() -> Node:
|
||||
return null
|
||||
|
||||
class B extends A:
|
||||
func f() -> Object:
|
||||
return null
|
||||
|
||||
func test():
|
||||
pass
|
||||
@@ -0,0 +1,2 @@
|
||||
GDTEST_ANALYZER_ERROR
|
||||
The function signature doesn't match the parent. Parent signature is "f() -> Node".
|
||||
@@ -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
|
||||
@@ -0,0 +1,2 @@
|
||||
GDTEST_ANALYZER_ERROR
|
||||
The function signature doesn't match the parent. Parent signature is "f() -> Node".
|
||||
@@ -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
|
||||
@@ -0,0 +1,2 @@
|
||||
GDTEST_ANALYZER_ERROR
|
||||
The function signature doesn't match the parent. Parent signature is "f() -> Node".
|
||||
@@ -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
|
||||
@@ -0,0 +1,2 @@
|
||||
GDTEST_ANALYZER_ERROR
|
||||
The function signature doesn't match the parent. Parent signature is "f() -> float".
|
||||
@@ -0,0 +1,20 @@
|
||||
class A:
|
||||
func int_to_variant(_p: int): pass
|
||||
func node_to_variant(_p: Node): pass
|
||||
func node_2d_to_node(_p: Node2D): pass
|
||||
|
||||
func variant_to_untyped(_p: Variant): pass
|
||||
func int_to_untyped(_p: int): pass
|
||||
func node_to_untyped(_p: Node): pass
|
||||
|
||||
class B extends A:
|
||||
func int_to_variant(_p: Variant): pass
|
||||
func node_to_variant(_p: Variant): pass
|
||||
func node_2d_to_node(_p: Node): pass
|
||||
|
||||
func variant_to_untyped(_p): pass
|
||||
func int_to_untyped(_p): pass
|
||||
func node_to_untyped(_p): pass
|
||||
|
||||
func test():
|
||||
pass
|
||||
@@ -0,0 +1 @@
|
||||
GDTEST_OK
|
||||
@@ -0,0 +1,32 @@
|
||||
class A:
|
||||
func variant_to_int() -> Variant: return 0
|
||||
func variant_to_node() -> Variant: return null
|
||||
func node_to_node_2d() -> Node: return null
|
||||
|
||||
func untyped_to_void(): pass
|
||||
func untyped_to_variant(): pass
|
||||
func untyped_to_int(): pass
|
||||
func untyped_to_node(): pass
|
||||
|
||||
func void_to_untyped() -> void: pass
|
||||
func variant_to_untyped() -> Variant: return null
|
||||
func int_to_untyped() -> int: return 0
|
||||
func node_to_untyped() -> Node: return null
|
||||
|
||||
class B extends A:
|
||||
func variant_to_int() -> int: return 0
|
||||
func variant_to_node() -> Node: return null
|
||||
func node_to_node_2d() -> Node2D: return null
|
||||
|
||||
func untyped_to_void() -> void: pass
|
||||
func untyped_to_variant() -> Variant: return null
|
||||
func untyped_to_int() -> int: return 0
|
||||
func untyped_to_node() -> Node: return null
|
||||
|
||||
func void_to_untyped(): pass
|
||||
func variant_to_untyped(): pass
|
||||
func int_to_untyped(): pass
|
||||
func node_to_untyped(): pass
|
||||
|
||||
func test():
|
||||
pass
|
||||
@@ -0,0 +1 @@
|
||||
GDTEST_OK
|
||||
Reference in New Issue
Block a user