[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