[Scummvm-git-logs] scummvm master -> 4e33136e385b18425866a76bdcf17f70c156e66b
djsrv
dservilla at gmail.com
Tue Jul 7 22:05:48 UTC 2020
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
4e33136e38 DIRECTOR: LINGO: Fix segfault when loading factory
Commit: 4e33136e385b18425866a76bdcf17f70c156e66b
https://github.com/scummvm/scummvm/commit/4e33136e385b18425866a76bdcf17f70c156e66b
Author: djsrv (dservilla at gmail.com)
Date: 2020-07-07T18:05:20-04:00
Commit Message:
DIRECTOR: LINGO: Fix segfault when loading factory
Changed paths:
engines/director/lingo/lingo-bytecode.cpp
engines/director/lingo/lingo-codegen.cpp
engines/director/lingo/lingo-object.h
diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index e901c1c3b9..9d0ff0fb8c 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -908,6 +908,7 @@ ScriptContext *Lingo::compileLingoV4(Common::SeekableSubReadStreamEndian &stream
}
debugC(1, kDebugCompile, "Add V4 bytecode for factory '%s' with id %d", factoryName.c_str(), castId);
+ _assemblyContext = new ScriptContext(factoryName, _assemblyArchive, scriptType, castId);
codeFactory(factoryName);
} else {
debugC(1, kDebugCompile, "Add V4 bytecode for type %s with id %d", scriptType2str(scriptType), castId);
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index f7cb85b084..a69829fa50 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -286,6 +286,7 @@ void Lingo::varCreate(const Common::String &name, bool global, DatumHash *localv
void Lingo::codeFactory(Common::String &name) {
// FIXME: The factory's context should not be tied to the LingoArchive
// but bytecode needs it to resolve names
+ _assemblyContext->setName(name);
_assemblyContext->setFactory(true);
if (!_globalvars.contains(name)) {
_globalvars[name] = _assemblyContext;
diff --git a/engines/director/lingo/lingo-object.h b/engines/director/lingo/lingo-object.h
index df54d20bde..9c940d7c84 100644
--- a/engines/director/lingo/lingo-object.h
+++ b/engines/director/lingo/lingo-object.h
@@ -47,9 +47,11 @@ public:
virtual int *getRefCount() const = 0;
virtual int getInheritanceLevel() const = 0;
+ virtual void setName(const Common::String &name) = 0;
+ virtual void dispose() = 0;
+
virtual Common::String asString() = 0;
virtual AbstractObject *clone() = 0;
- virtual void dispose() = 0;
virtual Symbol getMethod(const Common::String &methodName) = 0;
virtual bool hasProp(const Common::String &propName) = 0;
virtual Datum getProp(const Common::String &propName) = 0;
@@ -107,6 +109,9 @@ public:
virtual int *getRefCount() const { return _refCount; };
virtual int getInheritanceLevel() const { return _inheritanceLevel; };
+ virtual void setName(const Common::String &name) { _name = name; };
+ virtual void dispose() { _disposed = true; };
+
virtual Common::String asString() {
return Common::String::format("object: #%s %d %p", _name.c_str(), _inheritanceLevel, (void *)this);
};
@@ -115,10 +120,6 @@ public:
return new Derived(static_cast<Derived const &>(*this));
};
- virtual void dispose() {
- _disposed = true;
- };
-
virtual Symbol getMethod(const Common::String &methodName) {
if (_disposed) {
error("Method '%s' called on disposed object <%s>", methodName.c_str(), asString().c_str());
More information about the Scummvm-git-logs
mailing list