diff options
author | Eugene Sandulenko | 2016-07-02 12:38:10 +0200 |
---|---|---|
committer | Eugene Sandulenko | 2016-08-03 23:40:36 +0200 |
commit | ca40ccd9d123d18d9ba5e7b9a504a9fb6ee10355 (patch) | |
tree | 816cfcf4489314b7a1e9b4b4d28eb80186e62b41 /engines/director/lingo/lingo.h | |
parent | 32fb9a33442af5786a207f1b9b053f0ef5cda8ae (diff) | |
download | scummvm-rg350-ca40ccd9d123d18d9ba5e7b9a504a9fb6ee10355.tar.gz scummvm-rg350-ca40ccd9d123d18d9ba5e7b9a504a9fb6ee10355.tar.bz2 scummvm-rg350-ca40ccd9d123d18d9ba5e7b9a504a9fb6ee10355.zip |
DIRECTOR: Lingo: Added float constants and automatic type conversion
Diffstat (limited to 'engines/director/lingo/lingo.h')
-rw-r--r-- | engines/director/lingo/lingo.h | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h index d1969c2317..c6c903d29b 100644 --- a/engines/director/lingo/lingo.h +++ b/engines/director/lingo/lingo.h @@ -101,6 +101,9 @@ struct Datum { /* interpreter stack type */ } u; Datum() { u.sym = NULL; type = VOID; } + + float toFloat(); + int toInt(); }; struct Builtin { @@ -142,14 +145,19 @@ public: void cleanLocalVars(); void define(Common::String &s, int start, int nargs); + int alignTypes(Datum &d1, Datum &d2); + int code1(inst code) { _currentScript->push_back(code); return _currentScript->size() - 1; } int code2(inst code_1, inst code_2) { int o = code1(code_1); code1(code_2); return o; } int code3(inst code_1, inst code_2, inst code_3) { int o = code1(code_1); code1(code_2); code1(code_3); return o; } int codeString(const char *s); int calcStringAlignment(const char *s) { + return calcCodeAlignment(strlen(s) + 1); + } + int calcCodeAlignment(int l) { int instLen = sizeof(inst); - int l = strlen(s); return (l + 1 + instLen - 1) / instLen; + return (l + instLen - 1) / instLen; } int codeFunc(Common::String *name, int nargs); @@ -157,6 +165,7 @@ public: void codeArgStore(); int codeId(Common::String &s); int codeId_(Common::String &s); + int codeFloat(float f); static void c_xpop(); static void c_printtop(); @@ -166,6 +175,7 @@ public: static void c_div(); static void c_negate(); static void c_constpush(); + static void c_fconstpush(); static void c_varpush(); static void c_assign(); bool verify(Symbol *s); |