]> git.localhorst.tv Git - l2e.git/blobdiff - src/loader/Interpreter.cpp
simplified definition postponing
[l2e.git] / src / loader / Interpreter.cpp
index 8f9e9dc6eff141aa69a1d5d13ad4662293b4b329..8b54fc177913de18a1266f885cc8e959b6eb4eef 100644 (file)
@@ -329,7 +329,7 @@ void Interpreter::ReadObject(int typeId, int id, char *object, const PropertyLis
                                                        *reinterpret_cast<void **>(iter)
                                                                        = GetObject(fd.TypeId(), *j);
                                                } else {
-                                                       Postpone(typeId, id, fd.Offset() + (iter - aggregate), *j, fd.TypeId(), false);
+                                                       Postpone(iter, *j, fd.TypeId(), false);
                                                }
                                        }
                                }
@@ -355,7 +355,7 @@ void Interpreter::ReadObject(int typeId, int id, char *object, const PropertyLis
                                }
                        }
                } else {
-                       Postpone(typeId, id, fd.Offset(), i->second->GetIdentifier(), fd.TypeId(), !fd.IsReferenced());
+                       Postpone(object, i->second->GetIdentifier(), fd.TypeId(), !fd.IsReferenced(), fd.IsAggregate());
                }
        }
        td.Load(object);
@@ -860,11 +860,17 @@ bool Interpreter::CanLink(const Value &v) const {
        return v.IsLiteral() || source.IsDefined(v.GetIdentifier());
 }
 
-void Interpreter::Postpone(int type, int id, std::ptrdiff_t offset, const std::string &identifier, int linkedType, bool inlined) {
+void Interpreter::Postpone(
+               char *dest,
+               const std::string &identifier,
+               int type,
+               bool inlined,
+               bool aggregate) {
        char *str(alloc.Alloc(identifier.size() + 1));
        std::memcpy(str, identifier.c_str(), identifier.size());
        str[identifier.size()] = '\0';
-       postponedDefinitions.push_back(PostponedDefinition(type, id, offset, str, linkedType, inlined));
+       postponedDefinitions.push_back(
+                       PostponedDefinition(dest, str, type, inlined, aggregate));
 }