DIRECTOR: LINGO: Support getting object fields

This commit is contained in:
Eugene Sandulenko
2019-12-31 16:27:28 +01:00
parent 5d2cbc1bfc
commit fe9c19db15
5 changed files with 686 additions and 645 deletions
+8
View File
@@ -462,6 +462,14 @@ void Lingo::c_theentityassign() {
g_lingo->setTheEntity(entity, id, field, d);
}
void Lingo::c_objectfieldpush() {
Common::String object(g_lingo->readString());
int field = g_lingo->readInt();
Datum d = g_lingo->getObjectField(object, field);
g_lingo->push(d);
}
void Lingo::c_objectfieldassign() {
Common::String object(g_lingo->readString());
int field = g_lingo->readInt();
File diff suppressed because it is too large Load Diff
+4
View File
@@ -410,6 +410,10 @@ expr: simpleexpr { $$ = $1; }
WRITE_UINT32(&e, $1[0]);
WRITE_UINT32(&f, $1[1]);
g_lingo->code2(e, f); }
| THEOBJECTFIELD {
g_lingo->code1(g_lingo->c_objectfieldpush);
g_lingo->codeString($1.s->c_str());
g_lingo->codeInt($1.e); }
| asgn
| expr '+' expr { g_lingo->code1(g_lingo->c_add); }
| expr '-' expr { g_lingo->code1(g_lingo->c_sub); }
+9
View File
@@ -842,6 +842,15 @@ void Lingo::setTheCast(Datum &id1, int field, Datum &d) {
}
}
Datum Lingo::getObjectField(Common::String &obj, int field) {
warning("STUB: getObjectField(\"%s\", %d)", obj.c_str(), field);
Datum d;
d.type = VOID;
return d;
}
void Lingo::setObjectField(Common::String &obj, int field, Datum &d) {
warning("STUB: setObjectField(\"%s\", %d, ...)", obj.c_str(), field);
}
+2
View File
@@ -322,6 +322,7 @@ public:
static void c_theentitypush();
static void c_theentityassign();
static void c_objectfieldpush();
static void c_objectfieldassign();
static void c_repeatwhilecode();
@@ -573,6 +574,7 @@ public:
Datum getTheEntity(int entity, Datum &id, int field);
Datum getTheSprite(Datum &id, int field);
Datum getTheCast(Datum &id, int field);
Datum getObjectField(Common::String &obj, int field);
void setObjectField(Common::String &obj, int field, Datum &d);
public: