[Scummvm-cvs-logs] scummvm master -> a8bdfadbbf5ce330846c97ce6f67c099f4b6631d

sev- sev at scummvm.org
Tue Aug 16 19:10:28 CEST 2016


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
289d10c26b DIRECTOR: Lingo: Start of script execution trace code
a8bdfadbbf DIRECTOR: Lingo: Started adding function descriptions


Commit: 289d10c26be65307f39f3cd23cf4df27533cc43c
    https://github.com/scummvm/scummvm/commit/289d10c26be65307f39f3cd23cf4df27533cc43c
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-08-16T19:10:19+02:00

Commit Message:
DIRECTOR: Lingo: Start of script execution trace code

Changed paths:
    engines/director/lingo/lingo-builtins.cpp
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo.h



diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 70092d8..e366356 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -136,6 +136,8 @@ void Lingo::initBuiltIns() {
 		sym->u.bltin = blt->func;
 
 		_handlers[blt->name] = sym;
+
+		_functions[(void *)sym->u.s] = new FuncDesc(blt->name, "");
 	}
 }
 
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index bf96802..d84d5c7 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -53,17 +53,28 @@ namespace Director {
 
 void Lingo::execute(int pc) {
 	for(_pc = pc; (*_currentScript)[_pc] != STOP && !_returning;) {
+		Common::String instr = decodeInstruction(_pc);
+
+		debugC(1, kDebugLingoExec, "%s", instr.c_str());
 
 		for (uint i = 0; i < _stack.size(); i++) {
-			debugN(5, "%d ", _stack[i].u.i);
+			debugCN(5, kDebugLingoExec, "%d ", _stack[i].u.i);
 		}
-		debug(5, "%s", "");
+		debugCN(5, kDebugLingoExec, "%s", "");
 
 		_pc++;
 		(*((*_currentScript)[_pc - 1]))();
 	}
 }
 
+Common::String Lingo::decodeInstruction(int pc) {
+	if (_functions.contains((void *)(*_currentScript)[pc])) {
+		return _functions[(void *)(*_currentScript)[pc]]->name;
+	} else {
+		return "<unknown>";
+	}
+}
+
 Symbol *Lingo::lookupVar(const char *name, bool create, bool putInGlobalList) {
 	Symbol *sym;
 
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 33dd025..7a5fba0 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -83,6 +83,30 @@ typedef void (*inst)(void);
 typedef Common::Array<inst> ScriptData;
 typedef Common::Array<double> FloatArray;
 
+struct FuncDesc {
+	Common::String name;
+	const char *proto;
+
+	FuncDesc(Common::String n, const char *p) { name = n; proto = p; }
+};
+
+struct Pointer_EqualTo {
+	bool operator()(const void *x, const void *y) const { return x == y; }
+};
+
+struct Pointer_Hash {
+	uint operator()(const void *x) const {
+#ifdef SCUMM_64BITS
+		uint64 v = (uint64)x;
+		return (v >> 32) ^ (v & 0xffffffff);
+#else
+		return (uint)x;
+#endif
+	}
+};
+
+typedef Common::HashMap<void *, FuncDesc *, Pointer_Hash, Pointer_EqualTo> FuncHash;
+
 struct Symbol {	/* symbol table entry */
 	char *name;
 	int type;
@@ -156,6 +180,7 @@ public:
 
 	void addCode(const char *code, ScriptType type, uint16 id);
 	void executeScript(ScriptType type, uint16 id);
+	Common::String decodeInstruction(int pc);
 
 	void processEvent(LEvent event, int entityId);
 
@@ -403,6 +428,8 @@ private:
 	SymbolHash _globalvars;
 	SymbolHash *_localvars;
 
+	FuncHash _functions;
+
 	int _pc;
 
 	StackData _stack;


Commit: a8bdfadbbf5ce330846c97ce6f67c099f4b6631d
    https://github.com/scummvm/scummvm/commit/a8bdfadbbf5ce330846c97ce6f67c099f4b6631d
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-08-16T19:10:19+02:00

Commit Message:
DIRECTOR: Lingo: Started adding function descriptions

Changed paths:
    engines/director/lingo/lingo-code.cpp
    engines/director/lingo/lingo-codegen.cpp
    engines/director/lingo/lingo.cpp
    engines/director/lingo/lingo.h



diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 6072977..0769a0f 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -51,6 +51,27 @@
 
 namespace Director {
 
+static struct FuncDescr {
+	const inst func;
+	const char *name;
+	const char *args;
+} funcDescr[] = {
+	{ Lingo::c_xpop,		"c_xpop",		"" },
+	{ Lingo::c_printtop,	"c_printtop",	"" },
+	{ Lingo::c_constpush,	"c_constpush",	"i" },
+	{ Lingo::c_voidpush,	"c_voidpush",	"" },
+	{ Lingo::c_fconstpush,	"c_fconstpush",	"f" },
+	{ 0, 0, 0 }
+};
+
+void Lingo::initFuncs() {
+	Symbol sym;
+	for (FuncDescr *fnc = funcDescr; fnc->name; fnc++) {
+		sym.u.func = fnc->func;
+		_functions[(void *)sym.u.s] = new FuncDesc(fnc->name, fnc->args);
+	}
+}
+
 void Lingo::push(Datum d) {
 	_stack.push_back(d);
 }
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index d84d5c7..ff1fbed 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -55,7 +55,7 @@ void Lingo::execute(int pc) {
 	for(_pc = pc; (*_currentScript)[_pc] != STOP && !_returning;) {
 		Common::String instr = decodeInstruction(_pc);
 
-		debugC(1, kDebugLingoExec, "%s", instr.c_str());
+		debugC(1, kDebugLingoExec, "E: %s", instr.c_str());
 
 		for (uint i = 0; i < _stack.size(); i++) {
 			debugCN(5, kDebugLingoExec, "%d ", _stack[i].u.i);
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 96e6f86..9aea959 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -86,6 +86,7 @@ Lingo::Lingo(DirectorEngine *vm) : _vm(vm) {
 		_eventHandlerTypes[t->handler] = t->name;
 
 	initBuiltIns();
+	initFuncs();
 	initTheEntities();
 
 	_currentScript = 0;
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 7a5fba0..911abb6 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -185,6 +185,7 @@ public:
 	void processEvent(LEvent event, int entityId);
 
 	void initBuiltIns();
+	void initFuncs();
 	void initTheEntities();
 
 	Common::String *toLowercaseMac(Common::String *s);






More information about the Scummvm-git-logs mailing list