Zero Dictionary and Array variants when changing type with reset

So they don't reference to the old values anymore and instead refer to
a new value.
This commit is contained in:
George Marques 2021-10-14 11:09:47 -03:00
parent d952a84c3e
commit 4c14051b3f
No known key found for this signature in database
GPG Key ID: 046BD46A3201E43D
5 changed files with 62 additions and 2 deletions

View File

@ -1301,12 +1301,12 @@ struct VariantZeroAssigner<Signal> {
template <>
struct VariantZeroAssigner<Dictionary> {
static _FORCE_INLINE_ void zero(Variant *v) {}
static _FORCE_INLINE_ void zero(Variant *v) { *VariantInternal::get_dictionary(v) = Dictionary(); }
};
template <>
struct VariantZeroAssigner<Array> {
static _FORCE_INLINE_ void zero(Variant *v) {}
static _FORCE_INLINE_ void zero(Variant *v) { *VariantInternal::get_array(v) = Array(); }
};
template <>

View File

@ -0,0 +1,32 @@
# https://github.com/godotengine/godot/issues/48121
func test():
var x := []
var y := []
x.push_back(y)
print("TEST ARRAY ADD TO SELF: " + str(len(y)))
x.clear()
x = Array()
y = Array()
x.push_back(y)
print("TEST ARRAY ADD TO SELF: " + str(len(y)))
x.clear()
x = Array().duplicate()
y = Array().duplicate()
x.push_back(y)
print("TEST ARRAY ADD TO SELF: " + str(len(y)))
x.clear()
x = [].duplicate()
y = [].duplicate()
x.push_back(y)
print("TEST ARRAY ADD TO SELF: " + str(len(y)))
x.clear()
x = Array()
y = Array()
x.push_back(y)
print("TEST ARRAY ADD TO SELF: " + str(len(y)))
x.clear()

View File

@ -0,0 +1,6 @@
GDTEST_OK
TEST ARRAY ADD TO SELF: 0
TEST ARRAY ADD TO SELF: 0
TEST ARRAY ADD TO SELF: 0
TEST ARRAY ADD TO SELF: 0
TEST ARRAY ADD TO SELF: 0

View File

@ -0,0 +1,19 @@
# https://github.com/godotengine/godot/issues/48121
func test():
var x := Dictionary()
var y := Dictionary()
y[0]=1
y[1]=1
y[2]=1
print("TEST OTHER DICTIONARY: " + str(len(x)))
x.clear()
x = Dictionary().duplicate()
y = Dictionary().duplicate()
y[0]=1
y[1]=1
y[2]=1
print("TEST OTHER DICTIONARY: " + str(len(x)))
x.clear()
return

View File

@ -0,0 +1,3 @@
GDTEST_OK
TEST OTHER DICTIONARY: 0
TEST OTHER DICTIONARY: 0