[Scummvm-cvs-logs] scummvm master -> 97be9aa6dc204843f4a896f7e12f6cabc4322b44

sev- sev at scummvm.org
Fri Aug 19 19:24:27 CEST 2016


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

Summary:
21d4d0aeb2 DIRECTOR: Lingo: Added generated script decompilation
31b8ea453a DIRECTOR: Lingo: Fixed c_eval decompilation
0a3d891f6e DIRECTOR: Lingo: Fix when..then code generation
835a9e1b57 DIRECTOR: Lingo: Better VAR symbol handling
7896f2b6c2 DIRECTOR: Lingo: Enhanced Datum::toString() output
97be9aa6dc DIRECTOR: Lingo: Improved debug output


Commit: 21d4d0aeb20b19f17784338fbf663774b2728562
    https://github.com/scummvm/scummvm/commit/21d4d0aeb20b19f17784338fbf663774b2728562
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-08-19T12:39:08+02:00

Commit Message:
DIRECTOR: Lingo: Added generated script decompilation

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



diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 3b72784..6584a92 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -71,7 +71,7 @@ void Lingo::execute(int pc) {
 	}
 }
 
-Common::String Lingo::decodeInstruction(int pc) {
+Common::String Lingo::decodeInstruction(int pc, int *newPc) {
 	Symbol sym;
 	Common::String res;
 
@@ -118,6 +118,9 @@ Common::String Lingo::decodeInstruction(int pc) {
 		res = "<unknown>";
 	}
 
+	if (newPc)
+		*newPc = pc;
+
 	return res;
 }
 
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 412b817..5728a29 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -181,6 +181,14 @@ void Lingo::addCode(const char *code, ScriptType type, uint16 id) {
 
 			parse(chunk.c_str());
 
+			if (debugChannelSet(3, kDebugLingoCompile)) {
+				int pc = 0;
+				while (pc < _currentScript->size()) {
+					Common::String instr = decodeInstruction(pc, &pc);
+					debugC(3, kDebugLingoCompile, "[%5d] %s", pc, instr.c_str());
+				}
+			}
+
 			_currentScript->clear();
 
 			begin = end;
@@ -201,6 +209,12 @@ void Lingo::addCode(const char *code, ScriptType type, uint16 id) {
 	if (debugChannelSet(3, kDebugLingoCompile)) {
 		if (_currentScript->size() && !_hadError)
 			Common::hexdump((byte *)&_currentScript->front(), _currentScript->size() * sizeof(inst));
+
+		int pc = 0;
+		while (pc < _currentScript->size()) {
+			Common::String instr = decodeInstruction(pc, &pc);
+			debugC(3, kDebugLingoCompile, "[%5d] %s", pc, instr.c_str());
+		}
 	}
 }
 
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index e674b22..71708cf 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -180,7 +180,7 @@ public:
 
 	void addCode(const char *code, ScriptType type, uint16 id);
 	void executeScript(ScriptType type, uint16 id);
-	Common::String decodeInstruction(int pc);
+	Common::String decodeInstruction(int pc, int *newPC = NULL);
 
 	void processEvent(LEvent event, int entityId);
 


Commit: 31b8ea453a162e46f6b963c8dfe7caa1af787a40
    https://github.com/scummvm/scummvm/commit/31b8ea453a162e46f6b963c8dfe7caa1af787a40
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-08-19T18:47:30+02:00

Commit Message:
DIRECTOR: Lingo: Fixed c_eval decompilation

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



diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index de92efa..95bb7f3 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -65,7 +65,7 @@ static struct FuncDescr {
 	{ Lingo::c_stringpush,	"c_stringpush",	"s" },
 	{ Lingo::c_varpush,		"c_varpush",	"s" },
 	{ Lingo::c_assign,		"c_assign",		"" },
-	{ Lingo::c_eval,		"c_eval",		"" },
+	{ Lingo::c_eval,		"c_eval",		"s" },
 	{ Lingo::c_theentitypush,"c_theentitypush","ii" }, // entity, field
 	{ Lingo::c_theentityassign,"c_theentityassign","ii" },
 	{ Lingo::c_swap,		"c_swap",		"" },


Commit: 0a3d891f6e054a851343432b9c7c6523e376f5e9
    https://github.com/scummvm/scummvm/commit/0a3d891f6e054a851343432b9c7c6523e376f5e9
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-08-19T18:49:01+02:00

Commit Message:
DIRECTOR: Lingo: Fix when..then code generation

Changed paths:
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y



diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 89c0e3c..be5b3eb 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -1993,7 +1993,7 @@ yyreduce:
     {
 			inst end = 0;
 			WRITE_UINT32(&end, (yyvsp[(3) - (3)].code));
-			g_lingo->code1(g_lingo->c_whencode);
+			g_lingo->code1(STOP);
 			(*g_lingo->_currentScript)[(yyvsp[(1) - (3)].code) + 1] = end;
 		;}
     break;
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 6b16385..f74244e 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -220,7 +220,7 @@ stmt: stmtoneliner
 	| when expr end {
 			inst end = 0;
 			WRITE_UINT32(&end, $3);
-			g_lingo->code1(g_lingo->c_whencode);
+			g_lingo->code1(STOP);
 			(*g_lingo->_currentScript)[$1 + 1] = end;
 		}
 	;


Commit: 835a9e1b575e702ca26a4c32c34e1aa66f75f284
    https://github.com/scummvm/scummvm/commit/835a9e1b575e702ca26a4c32c34e1aa66f75f284
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-08-19T18:50:58+02:00

Commit Message:
DIRECTOR: Lingo: Better VAR symbol handling

Changed paths:
    engines/director/lingo/lingo.cpp



diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 5728a29..4088a57 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -331,6 +331,8 @@ const char *Datum::type2str(bool isk) {
 		return isk ? "#symbol" : "SYMBOL";
 	case OBJECT:
 		return isk ? "#object" : "OBJECT";
+	case VAR:
+		return isk ? "#var" : "VAR";
 	default:
 		snprintf(res, 20, "-- (%d) --", type);
 		return res;


Commit: 7896f2b6c2a93bd2c8d888b5a57432b818f3b873
    https://github.com/scummvm/scummvm/commit/7896f2b6c2a93bd2c8d888b5a57432b818f3b873
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-08-19T18:56:07+02:00

Commit Message:
DIRECTOR: Lingo: Enhanced Datum::toString() output

Changed paths:
    engines/director/lingo/lingo.cpp



diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 4088a57..06e4e53 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -301,6 +301,15 @@ Common::String *Datum::toString() {
 		delete s;
 		s = u.s;
 		break;
+	case OBJECT:
+		*s = Common::String::format("#%s", u.s->c_str());
+		break;
+	case VOID:
+		*s = "#void";
+		break;
+	case VAR:
+		*s = Common::String::format("var: #%s", u.sym->name);
+		break;
 	default:
 		warning("Incorrect operation toString() for type: %s", type2str());
 	}


Commit: 97be9aa6dc204843f4a896f7e12f6cabc4322b44
    https://github.com/scummvm/scummvm/commit/97be9aa6dc204843f4a896f7e12f6cabc4322b44
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-08-19T19:04:07+02:00

Commit Message:
DIRECTOR: Lingo: Improved debug output

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



diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 798ab08..6738d4b 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -545,7 +545,7 @@ void Lingo::b_alert(int nargs) {
 
 	d.toString();
 
-	warning("STUB: b_alert");
+	warning("STUB: b_alert(%s)", d.u.s->c_str());
 
 	delete d.u.s;
 }
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 95bb7f3..8712f09 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -702,24 +702,25 @@ void Lingo::c_ifcode() {
 	int end =     READ_UINT32(&(*g_lingo->_currentScript)[savepc + 2]);
 	int skipEnd = READ_UINT32(&(*g_lingo->_currentScript)[savepc + 3]);
 
-	debug(8, "executing cond (have to %s end)", skipEnd ? "skip" : "execute");
+	debugC(8, kDebugLingoExec, "executing cond (have to %s end)", skipEnd ? "skip" : "execute");
 	g_lingo->execute(savepc + 4);	/* condition */
 
 	d = g_lingo->pop();
 
 	if (d.toInt()) {
-		debug(8, "executing then");
+		debugC(8, kDebugLingoExec, "executing then");
 		g_lingo->execute(then);
 	} else if (elsep) { /* else part? */
-		debug(8, "executing else");
+		debugC(8, kDebugLingoExec, "executing else");
 		g_lingo->execute(elsep);
 	}
 
 	if (!g_lingo->_returning && !skipEnd) {
 		g_lingo->_pc = end; /* next stmt */
-		debug(8, "executing end");
-	} else
-		debug(8, "Skipped end");
+		debugC(8, kDebugLingoExec, "executing end");
+	} else {
+		debugC(8, kDebugLingoExec, "Skipped end");
+	}
 }
 
 void Lingo::c_whencode() {
@@ -809,7 +810,7 @@ void Lingo::call(Common::String &name, int nargs) {
 	if (!g_lingo->_handlers.contains(name)) {
 		Symbol *s = g_lingo->lookupVar(name.c_str(), false);
 		if (s && s->type == OBJECT) {
-			debug(3, "Dereferencing object reference: %s to %s", name.c_str(), s->u.s->c_str());
+			debugC(3, kDebugLingoExec,  "Dereferencing object reference: %s to %s", name.c_str(), s->u.s->c_str());
 			name = *s->u.s;
 		}
 	}
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 6584a92..32ddea4 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -281,7 +281,7 @@ int Lingo::codeFunc(Common::String *s, int numpar) {
 	if (s->equalsIgnoreCase("me")) {
 		if (!g_lingo->_currentFactory.empty()) {
 			g_lingo->codeString(g_lingo->_currentFactory.c_str());
-			debug(2, "Repaced 'me' with %s", g_lingo->_currentFactory.c_str());
+			debugC(2, kDebugLingoCompile, "Replaced 'me' with %s", g_lingo->_currentFactory.c_str());
 		} else {
 			warning("'me' out of factory method");
 			g_lingo->codeString(s->c_str());
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 06e4e53..d37da42 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -121,17 +121,17 @@ const char *Lingo::findNextDefinition(const char *s) {
 			return NULL;
 
 		if (!strncmp(res, "macro ", 6)) {
-			warning("See macro");
+			debugC(3, kDebugLingoCompile, "See macro");
 			return res;
 		}
 
 		if (!strncmp(res, "factory ", 8)) {
-			warning("See factory");
+			debugC(3, kDebugLingoCompile, "See factory");
 			return res;
 		}
 
 		if (!strncmp(res, "method ", 7)) {
-			warning("See method");
+			debugC(3, kDebugLingoCompile, "See method");
 			return res;
 		}
 
@@ -241,7 +241,7 @@ void Lingo::processEvent(LEvent event, int entityId) {
 	if (!_eventHandlerTypes.contains(event))
 		error("processEvent: Unknown event %d for entity %d", event, entityId);
 
-	debug(2, "processEvent(%s) for %d", _eventHandlerTypes[event], entityId);
+	debug(2, "STUB: processEvent(%s) for %d", _eventHandlerTypes[event], entityId);
 }
 
 int Lingo::alignTypes(Datum &d1, Datum &d2) {
@@ -412,7 +412,7 @@ void Lingo::runTests() {
 
 			stream->read(script, size);
 
-			warning("Compiling file %s of size %d, id: %d", fileList[i].c_str(), size, counter);
+			debugC(2, kDebugLingoCompile, "Compiling file %s of size %d, id: %d", fileList[i].c_str(), size, counter);
 
 			_hadError = false;
 			addCode(script, kMovieScript, counter);
@@ -420,7 +420,7 @@ void Lingo::runTests() {
 			if (!_hadError)
 				executeScript(kMovieScript, counter);
 			else
-				warning("Skipping execution");
+				debugC(2, kDebugLingoCompile, "Skipping execution");
 
 			free(script);
 






More information about the Scummvm-git-logs mailing list