Explorar o código

Fix `inst2dict` calling to getters to retrieve value

Use `GDScriptInstance` to iterate through all members directly instead.
This is similar to how `dict2inst` works and makes the serialization
behaviour more consistent.
Andrii Doroshenko (Xrayez) %!s(int64=5) %!d(string=hai) anos
pai
achega
1b9a7e1c21
Modificáronse 1 ficheiros con 3 adicións e 17 borrados
  1. 3 17
      modules/gdscript/gdscript_functions.cpp

+ 3 - 17
modules/gdscript/gdscript_functions.cpp

@@ -1127,25 +1127,11 @@ void GDScriptFunctions::call(Function p_func, const Variant **p_args, int p_arg_
 					d["@subpath"] = cp;
 					d["@path"] = p->path;
 
-					p = base.ptr();
-
-					while (p) {
-
-						for (Set<StringName>::Element *E = p->members.front(); E; E = E->next()) {
-
-							Variant value;
-							if (ins->get(E->get(), value)) {
-
-								String k = E->get();
-								if (!d.has(k)) {
-									d[k] = value;
-								}
-							}
+					for (Map<StringName, GDScript::MemberInfo>::Element *E = base->member_indices.front(); E; E = E->next()) {
+						if (!d.has(E->key())) {
+							d[E->key()] = ins->members[E->get().index];
 						}
-
-						p = p->_base;
 					}
-
 					r_ret = d;
 				}
 			}