GDScript: Improve evaluation of constant expressions with arrays/dictionaries
This commit is contained in:
parent
e9bb99a3bb
commit
6d06b3a7d6
9 changed files with 446 additions and 115 deletions
|
|
@ -0,0 +1,69 @@
|
|||
const UNTYPED_ARRAY: Variant = [1000]
|
||||
const TYPED_ARRAY: Variant = [2000] as Array[int]
|
||||
const UNTYPED_DICT: Variant = {1000: 1000}
|
||||
const TYPED_DICT: Variant = {2000: 2000} as Dictionary[int, int]
|
||||
|
||||
const TEST_STRING_INDEX = "data"[0]
|
||||
const TEST_VECTOR2_ATTR = Vector2(1, 2).x
|
||||
const TEST_ARRAY_INDEX = [100, 200][0]
|
||||
const TEST_DICT_ATTR = {a = 1, b = 2}.a
|
||||
|
||||
const TEST_CALL_ARRAY = Array()
|
||||
const TEST_CALL_DICT = Dictionary()
|
||||
|
||||
const TEST_BINARY_OP = [1] + [2]
|
||||
const TEST_TERNARY_OP = [123] if [true] else [456]
|
||||
|
||||
const TEST_CAST_UNTYPED_ARRAY = [11] as Array
|
||||
const TEST_CAST_TYPED_ARRAY = [22] as Array[int]
|
||||
const TEST_CAST_UNTYPED_DICT = {11: 111} as Dictionary
|
||||
const TEST_CAST_TYPED_DICT = {22: 222} as Dictionary[int, int]
|
||||
|
||||
const TEST_TYPE_TEST_LITERAL_UNTYPED_ARRAY = [33] is Array
|
||||
const TEST_TYPE_TEST_LITERAL_TYPED_ARRAY = [44] is Array[int]
|
||||
const TEST_TYPE_TEST_LITERAL_UNTYPED_DICT = {33: 333} is Dictionary
|
||||
const TEST_TYPE_TEST_LITERAL_TYPED_DICT = {44: 444} is Dictionary[int, int]
|
||||
|
||||
const TEST_TYPE_TEST_UNTYPED_UNTYPED_ARRAY = UNTYPED_ARRAY is Array
|
||||
const TEST_TYPE_TEST_UNTYPED_TYPED_ARRAY = UNTYPED_ARRAY is Array[int]
|
||||
const TEST_TYPE_TEST_UNTYPED_UNTYPED_DICT = UNTYPED_DICT is Dictionary
|
||||
const TEST_TYPE_TEST_UNTYPED_TYPED_DICT = UNTYPED_DICT is Dictionary[int, int]
|
||||
|
||||
const TEST_TYPE_TEST_TYPED_UNTYPED_ARRAY = TYPED_ARRAY is Array
|
||||
const TEST_TYPE_TEST_TYPED_TYPED_ARRAY = TYPED_ARRAY is Array[int]
|
||||
const TEST_TYPE_TEST_TYPED_UNTYPED_DICT = TYPED_DICT is Dictionary
|
||||
const TEST_TYPE_TEST_TYPED_TYPED_DICT = TYPED_DICT is Dictionary[int, int]
|
||||
|
||||
@export_custom(
|
||||
PROPERTY_HINT_TYPE_STRING,
|
||||
"%d/%d:Zero,One,Two" % [TYPE_INT, PROPERTY_HINT_ENUM],
|
||||
)
|
||||
var test_export_custom: Array
|
||||
|
||||
func test():
|
||||
var script: Script = get_script()
|
||||
var constants: Dictionary = script.get_script_constant_map()
|
||||
for constant: StringName in constants:
|
||||
if constant.begins_with("TEST_"):
|
||||
print("const %s = %s" % [constant, var_to_str(constants[constant]).replace("\n", "")])
|
||||
if constants[constant] is Array:
|
||||
var array: Array = constants[constant]
|
||||
Utils.check(array.is_read_only())
|
||||
array = get(constant)
|
||||
Utils.check(array.is_read_only())
|
||||
elif constants[constant] is Dictionary:
|
||||
var dict: Dictionary = constants[constant]
|
||||
Utils.check(dict.is_read_only())
|
||||
dict = get(constant)
|
||||
Utils.check(dict.is_read_only())
|
||||
|
||||
for property in get_property_list():
|
||||
if str(property.name).begins_with("test_"):
|
||||
Utils.print_property_extended_info(property, self)
|
||||
|
||||
# GH-96152
|
||||
const ARRAY = [42]
|
||||
const CONST_CONCAT = ARRAY + ARRAY
|
||||
var var_concat := ARRAY + ARRAY
|
||||
prints(CONST_CONCAT, CONST_CONCAT.is_read_only())
|
||||
prints(var_concat, var_concat.is_read_only())
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
GDTEST_OK
|
||||
const TEST_STRING_INDEX = "d"
|
||||
const TEST_VECTOR2_ATTR = 1.0
|
||||
const TEST_ARRAY_INDEX = 100
|
||||
const TEST_DICT_ATTR = 1
|
||||
const TEST_CALL_ARRAY = []
|
||||
const TEST_CALL_DICT = {}
|
||||
const TEST_BINARY_OP = [1, 2]
|
||||
const TEST_TERNARY_OP = [123]
|
||||
const TEST_CAST_UNTYPED_ARRAY = [11]
|
||||
const TEST_CAST_TYPED_ARRAY = Array[int]([22])
|
||||
const TEST_CAST_UNTYPED_DICT = {11: 111}
|
||||
const TEST_CAST_TYPED_DICT = Dictionary[int, int]({22: 222})
|
||||
const TEST_TYPE_TEST_LITERAL_UNTYPED_ARRAY = true
|
||||
const TEST_TYPE_TEST_LITERAL_TYPED_ARRAY = false
|
||||
const TEST_TYPE_TEST_LITERAL_UNTYPED_DICT = true
|
||||
const TEST_TYPE_TEST_LITERAL_TYPED_DICT = false
|
||||
const TEST_TYPE_TEST_UNTYPED_UNTYPED_ARRAY = true
|
||||
const TEST_TYPE_TEST_UNTYPED_TYPED_ARRAY = false
|
||||
const TEST_TYPE_TEST_UNTYPED_UNTYPED_DICT = true
|
||||
const TEST_TYPE_TEST_UNTYPED_TYPED_DICT = false
|
||||
const TEST_TYPE_TEST_TYPED_UNTYPED_ARRAY = true
|
||||
const TEST_TYPE_TEST_TYPED_TYPED_ARRAY = true
|
||||
const TEST_TYPE_TEST_TYPED_UNTYPED_DICT = true
|
||||
const TEST_TYPE_TEST_TYPED_TYPED_DICT = true
|
||||
var test_export_custom: Array = []
|
||||
hint=TYPE_STRING hint_string="<int>/<ENUM>:Zero,One,Two" usage=DEFAULT|SCRIPT_VARIABLE class_name=&""
|
||||
[42, 42] true
|
||||
[42, 42] false
|
||||
|
|
@ -19,6 +19,24 @@ func test():
|
|||
Utils.check((const_builtin is float) == false)
|
||||
Utils.check(is_instance_of(const_builtin, TYPE_FLOAT) == false)
|
||||
|
||||
var untyped_array: Variant = []
|
||||
Utils.check((untyped_array is Variant) == true)
|
||||
Utils.check((untyped_array is Array) == true)
|
||||
Utils.check(is_instance_of(untyped_array, TYPE_ARRAY) == true)
|
||||
Utils.check((untyped_array is Array[int]) == false)
|
||||
Utils.check((untyped_array is Array[float]) == false)
|
||||
Utils.check((untyped_array is int) == false)
|
||||
Utils.check(is_instance_of(untyped_array, TYPE_INT) == false)
|
||||
|
||||
const const_untyped_array: Variant = []
|
||||
Utils.check((const_untyped_array is Variant) == true)
|
||||
Utils.check((const_untyped_array is Array) == true)
|
||||
Utils.check(is_instance_of(const_untyped_array, TYPE_ARRAY) == true)
|
||||
Utils.check((const_untyped_array is Array[int]) == false)
|
||||
Utils.check((const_untyped_array is Array[float]) == false)
|
||||
Utils.check((const_untyped_array is int) == false)
|
||||
Utils.check(is_instance_of(const_untyped_array, TYPE_INT) == false)
|
||||
|
||||
var int_array: Variant = [] as Array[int]
|
||||
Utils.check((int_array is Variant) == true)
|
||||
Utils.check((int_array is Array) == true)
|
||||
|
|
@ -28,7 +46,7 @@ func test():
|
|||
Utils.check((int_array is int) == false)
|
||||
Utils.check(is_instance_of(int_array, TYPE_INT) == false)
|
||||
|
||||
var const_int_array: Variant = [] as Array[int]
|
||||
const const_int_array: Variant = [] as Array[int]
|
||||
Utils.check((const_int_array is Variant) == true)
|
||||
Utils.check((const_int_array is Array) == true)
|
||||
Utils.check(is_instance_of(const_int_array, TYPE_ARRAY) == true)
|
||||
|
|
@ -47,7 +65,7 @@ func test():
|
|||
Utils.check((b_array is int) == false)
|
||||
Utils.check(is_instance_of(b_array, TYPE_INT) == false)
|
||||
|
||||
var const_b_array: Variant = [] as Array[B]
|
||||
const const_b_array: Variant = [] as Array[B]
|
||||
Utils.check((const_b_array is Variant) == true)
|
||||
Utils.check((const_b_array is Array) == true)
|
||||
Utils.check(is_instance_of(const_b_array, TYPE_ARRAY) == true)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue