[Scummvm-git-logs] scummvm master -> 4c92044e36a255a2dc2be5aeee10102a21ff62ef
djsrv
dservilla at gmail.com
Tue Jul 7 21:01:42 UTC 2020
This automated email contains information about 5 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
59baadaefc DIRECTOR: LINGO: Fix builtin method calls
8ea0b01c87 DIRECTOR: LINGO: Remove debug lines
b2c20a07f7 DIRECTOR: LINGO: Refactor Object
3f0a33e5e8 DIRECTOR: LINGO: Allow method calls on any objtype
4c92044e36 DIRECTOR: LINGO: Stub window/stage methods
Commit: 59baadaefc2812676e296b6f19ef29bb7cf3f305
https://github.com/scummvm/scummvm/commit/59baadaefc2812676e296b6f19ef29bb7cf3f305
Author: djsrv (dservilla at gmail.com)
Date: 2020-07-07T16:53:31-04:00
Commit Message:
DIRECTOR: LINGO: Fix builtin method calls
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 df012d0f60..de14da35ac 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -1420,16 +1420,11 @@ void LC::call(const Symbol &funcSym, int nargs) {
if (funcSym.type == BLTIN || funcSym.type == FBLTIN || funcSym.type == RBLTIN) {
int stackSize = g_lingo->_stack.size() - nargs;
- Datum target;
- if (funcSym.ctx) {
- target = funcSym.target;
- }
-
- if (target.type == OBJECT) {
+ if (funcSym.target) {
// Only need to update the me obj
// Pushing an entire stack frame is not necessary
Datum retMe = g_lingo->_currentMe;
- g_lingo->_currentMe = target;
+ g_lingo->_currentMe = funcSym.target;
(*funcSym.u.bltin)(nargs);
g_lingo->_currentMe = retMe;
} else {
Commit: 8ea0b01c87f805b61a78c836d3c5200a4ccb3507
https://github.com/scummvm/scummvm/commit/8ea0b01c87f805b61a78c836d3c5200a4ccb3507
Author: djsrv (dservilla at gmail.com)
Date: 2020-07-07T16:59:44-04:00
Commit Message:
DIRECTOR: LINGO: Remove debug lines
Changed paths:
engines/director/lingo/lingo.cpp
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 584419ba33..3d5daeacb2 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -689,8 +689,6 @@ Datum::Datum(const Datum &d) {
}
Datum& Datum::operator=(const Datum &d) {
- if (d.type == OBJECT)
- warning("%p = REFCOUNT %d", (void *)this, *refCount);
if (this != &d && refCount != d.refCount) {
reset();
type = d.type;
@@ -731,7 +729,6 @@ Datum::Datum(Object *val) {
lazy = false;
refCount = val->refCount;
*refCount += 1;
- warning("%p create REFCOUNT %d", (void *)this, *refCount);
}
void Datum::reset() {
Commit: b2c20a07f710a450f4dd1c772425994e43038006
https://github.com/scummvm/scummvm/commit/b2c20a07f710a450f4dd1c772425994e43038006
Author: djsrv (dservilla at gmail.com)
Date: 2020-07-07T16:59:55-04:00
Commit Message:
DIRECTOR: LINGO: Refactor Object
This turns Object into a template so any type can easily act as a Lingo
object. For example, script objects no longer own a script context.
They *are* script contexts, and there are custom getters/setters for
methods and properties.
Changed paths:
engines/director/cast.cpp
engines/director/lingo/lingo-builtins.cpp
engines/director/lingo/lingo-bytecode.cpp
engines/director/lingo/lingo-code.cpp
engines/director/lingo/lingo-codegen.cpp
engines/director/lingo/lingo-events.cpp
engines/director/lingo/lingo-gr.cpp
engines/director/lingo/lingo-gr.h
engines/director/lingo/lingo-gr.y
engines/director/lingo/lingo-object.cpp
engines/director/lingo/lingo-object.h
engines/director/lingo/lingo.cpp
engines/director/lingo/lingo.h
engines/director/lingo/xlibs/fileio.cpp
engines/director/lingo/xlibs/fileio.h
engines/director/movie.cpp
diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index 498362aad1..53c9b4680e 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -39,6 +39,7 @@
#include "director/stxt.h"
#include "director/util.h"
#include "director/lingo/lingo.h"
+#include "director/lingo/lingo-object.h"
namespace Director {
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index d0ece1c429..e90620acb3 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1288,7 +1288,7 @@ void LB::b_return(int nargs) {
CFrame *fp = g_lingo->_callstack.back();
// Do not allow a factory's mNew method to return a value
// Otherwise do not touch the top of the stack, it will be returned
- if (g_lingo->_currentMe.type == OBJECT && g_lingo->_currentMe.u.obj->type == kFactoryObj && fp->sp.name->equalsIgnoreCase("mNew")) {
+ if (g_lingo->_currentMe.type == OBJECT && g_lingo->_currentMe.u.obj->getObjType() == kFactoryObj && fp->sp.name->equalsIgnoreCase("mNew")) {
g_lingo->pop();
}
LC::c_procret();
@@ -1327,8 +1327,8 @@ void LB::b_factory(int nargs) {
Datum factoryName = g_lingo->pop();
factoryName.type = VAR;
Datum o = g_lingo->varFetch(factoryName, true);
- if (o.type == OBJECT && (o.u.obj->type & (kFactoryObj | kXObj))
- && o.u.obj->name->equalsIgnoreCase(*factoryName.u.s) && o.u.obj->inheritanceLevel == 1) {
+ if (o.type == OBJECT && (o.u.obj->getObjType() & (kFactoryObj | kXObj))
+ && o.u.obj->getName().equalsIgnoreCase(*factoryName.u.s) && o.u.obj->getInheritanceLevel() == 1) {
g_lingo->push(o);
} else {
g_lingo->push(Datum(0));
@@ -1357,7 +1357,7 @@ void LB::b_objectp(int nargs) {
Datum d = g_lingo->pop();
Datum res;
if (d.type == OBJECT) {
- res = !d.u.obj->disposed;
+ res = !d.u.obj->isDisposed();
} else {
res = 0;
}
@@ -2200,7 +2200,7 @@ void LB::b_script(int nargs) {
}
if (script) {
- g_lingo->push(Datum(script->getParentScript()));
+ g_lingo->push(script);
return;
}
}
diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index aca410f484..e901c1c3b9 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -317,7 +317,7 @@ void LC::cb_objectcall() {
Datum d = g_lingo->pop();
Datum nargs = g_lingo->pop();
- Object *target = nullptr;
+ AbstractObject *target = nullptr;
if (d.type == INT) {
if (g_lingo->_callstack.empty()) {
@@ -381,7 +381,7 @@ void LC::cb_objectcall() {
}
Symbol method = target->getMethod(methodName.asString());
if (method.type != VOID) {
- if (target->type == kFactoryObj && method.type == HANDLER) {
+ if (target->getObjType() == kFactoryObj && method.type == HANDLER) {
// For kFactoryObj handlers the target is the first argument
g_lingo->push(method.target);
nargs.u.i += 1;
@@ -909,7 +909,6 @@ ScriptContext *Lingo::compileLingoV4(Common::SeekableSubReadStreamEndian &stream
debugC(1, kDebugCompile, "Add V4 bytecode for factory '%s' with id %d", factoryName.c_str(), castId);
codeFactory(factoryName);
- _assemblyContext = _currentFactory->ctx;
} else {
debugC(1, kDebugCompile, "Add V4 bytecode for type %s with id %d", scriptType2str(scriptType), castId);
@@ -936,11 +935,7 @@ ScriptContext *Lingo::compileLingoV4(Common::SeekableSubReadStreamEndian &stream
if (0 <= index && index < (int16)archive->names.size()) {
const char *name = archive->names[index].c_str();
debugC(5, kDebugLoading, "%d: %s", i, name);
- if (scriptFlags & kScriptFlagFactoryDef) {
- _currentFactory->properties[name] = Datum();
- } else {
- _assemblyContext->_propNames.push_back(name);
- }
+ _assemblyContext->_properties[name] = Datum();
} else {
warning("Property %d has unknown name id %d, skipping define", i, index);
}
@@ -1437,15 +1432,16 @@ ScriptContext *Lingo::compileLingoV4(Common::SeekableSubReadStreamEndian &stream
free(codeStore);
_assemblyContext = nullptr;
- _currentFactory = nullptr;
return sc;
}
void LingoArchive::addCodeV4(Common::SeekableSubReadStreamEndian &stream, const Common::String &archName) {
ScriptContext *ctx = g_lingo->compileLingoV4(stream, this, archName);
- if (ctx)
- scriptContexts[ctx->_type][ctx->_id] = ctx;
+ if (ctx) {
+ scriptContexts[ctx->_scriptType][ctx->_id] = ctx;
+ *ctx->_refCount += 1;
+ }
}
void LingoArchive::addNamesV4(Common::SeekableSubReadStreamEndian &stream) {
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index de14da35ac..88791df635 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -1330,15 +1330,15 @@ void LC::call(const Common::String &name, int nargs) {
// Script/Xtra method call
if (nargs > 0) {
Datum d = g_lingo->peek(nargs - 1);
- if (d.type == OBJECT && (d.u.obj->type & (kScriptObj | kXtraObj))) {
+ if (d.type == OBJECT && (d.u.obj->getObjType() & (kScriptObj | kXtraObj))) {
debugC(3, kDebugLingoExec, "Method called on object: <%s>", d.asString(true).c_str());
- Object *target = d.u.obj;
+ AbstractObject *target = d.u.obj;
if (name.equalsIgnoreCase("birth") || name.equalsIgnoreCase("new")) {
target = target->clone();
}
funcSym = target->getMethod(name);
if (funcSym.type != VOID) {
- if (target->type == kScriptObj && funcSym.type == HANDLER) {
+ if (target->getObjType() == kScriptObj && funcSym.type == HANDLER) {
// For kScriptObj handlers the target is the first argument
g_lingo->_stack[g_lingo->_stack.size() - nargs] = funcSym.target;
} else {
@@ -1360,15 +1360,15 @@ void LC::call(const Common::String &name, int nargs) {
Datum objName(name);
objName.type = VAR;
Datum d = g_lingo->varFetch(objName);
- if (d.type == OBJECT && (d.u.obj->type & (kFactoryObj | kXObj))) {
+ if (d.type == OBJECT && (d.u.obj->getObjType() & (kFactoryObj | kXObj))) {
debugC(3, kDebugLingoExec, "Method called on object: <%s>", d.asString(true).c_str());
- Object *target = d.u.obj;
+ AbstractObject *target = d.u.obj;
Datum methodName = g_lingo->_stack[g_lingo->_stack.size() - nargs];
if (methodName.u.s->equalsIgnoreCase("mNew")) {
target = target->clone();
}
funcSym = target->getMethod(*methodName.u.s);
- if (target->type == kScriptObj && funcSym.type == HANDLER) {
+ if (target->getObjType() == kScriptObj && funcSym.type == HANDLER) {
// For kFactoryObj handlers the target is the first argument
g_lingo->_stack[g_lingo->_stack.size() - nargs] = funcSym.target;
} else {
@@ -1510,7 +1510,7 @@ void LC::c_procret() {
}
CFrame *fp = g_lingo->_callstack.back();
- if (g_lingo->_currentMe.type == OBJECT && g_lingo->_currentMe.u.obj->type == kFactoryObj && fp->sp.name->equalsIgnoreCase("mNew")) {
+ if (g_lingo->_currentMe.type == OBJECT && g_lingo->_currentMe.u.obj->getObjType() == kFactoryObj && fp->sp.name->equalsIgnoreCase("mNew")) {
// Return the newly created object after executing mNew
g_lingo->push(g_lingo->_currentMe);
}
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 5eb42296bc..f7cb85b084 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -87,7 +87,7 @@ Symbol ScriptContext::define(Common::String &name, int nargs, ScriptData *code,
if (!g_lingo->_eventHandlerTypeIds.contains(name)) {
_functionHandlers[name] = sym;
- if (_type == kMovieScript && _archive && !_archive->functionHandlers.contains(name)) {
+ if (_scriptType == kMovieScript && _archive && !_archive->functionHandlers.contains(name)) {
_archive->functionHandlers[name] = sym;
}
} else {
@@ -97,9 +97,9 @@ Symbol ScriptContext::define(Common::String &name, int nargs, ScriptData *code,
return sym;
}
-Symbol Lingo::codeDefine(Common::String &name, int start, int nargs, Object *factory, int end, bool removeCode) {
- debugC(1, kDebugCompile, "codeDefine(\"%s\"(len: %d), %d, %d, \"%s\", %d)",
- name.c_str(), _currentAssembly->size() - 1, start, nargs, (factory ? factory->name->c_str() : ""), end);
+Symbol Lingo::codeDefine(Common::String &name, int start, int nargs, int end, bool removeCode) {
+ debugC(1, kDebugCompile, "codeDefine(\"%s\"(len: %d), %d, %d, %d)",
+ name.c_str(), _currentAssembly->size() - 1, start, nargs, end);
if (end == -1)
end = _currentAssembly->size();
@@ -115,8 +115,7 @@ Symbol Lingo::codeDefine(Common::String &name, int start, int nargs, Object *fac
varNames->push_back(Common::String(it->_key));
}
- ScriptContext *ctx = factory ? factory->ctx : _assemblyContext;
- Symbol sym = ctx->define(name, nargs, code, argNames, varNames);
+ Symbol sym = _assemblyContext->define(name, nargs, code, argNames, varNames);
if (debugChannelSet(1, kDebugCompile)) {
debug("Function vars");
@@ -287,12 +286,9 @@ void Lingo::varCreate(const Common::String &name, bool global, DatumHash *localv
void Lingo::codeFactory(Common::String &name) {
// FIXME: The factory's context should not be tied to the LingoArchive
// but bytecode needs it to resolve names
- ScriptContext *ctx = new ScriptContext(name, _assemblyArchive);
- Object *obj = new Object(name, kFactoryObj, ctx);
-
- _currentFactory = obj;
+ _assemblyContext->setFactory(true);
if (!_globalvars.contains(name)) {
- _globalvars[name] = obj;
+ _globalvars[name] = _assemblyContext;
} else {
warning("Factory '%s' already defined", name.c_str());
}
diff --git a/engines/director/lingo/lingo-events.cpp b/engines/director/lingo/lingo-events.cpp
index 9055127243..5b0d8d4650 100644
--- a/engines/director/lingo/lingo-events.cpp
+++ b/engines/director/lingo/lingo-events.cpp
@@ -23,6 +23,7 @@
#include "director/director.h"
#include "director/lingo/lingo.h"
#include "director/lingo/lingo-code.h"
+#include "director/lingo/lingo-object.h"
#include "director/cast.h"
#include "director/movie.h"
#include "director/frame.h"
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 38837d1d4c..78c0eed3b4 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -117,7 +117,7 @@ static void startDef() {
(*g_lingo->_methodVars)[i->_key] = i->_value;
}
if (g_lingo->_inFactory) {
- for (DatumHash::iterator i = g_lingo->_currentFactory->properties.begin(); i != g_lingo->_currentFactory->properties.end(); ++i) {
+ for (DatumHash::iterator i = g_lingo->_assemblyContext->_properties.begin(); i != g_lingo->_assemblyContext->_properties.end(); ++i) {
(*g_lingo->_methodVars)[i->_key] = kVarInstance;
}
}
@@ -166,14 +166,8 @@ static VarType globalCheck() {
static void mVar(Common::String *s, VarType type) {
if (!g_lingo->_methodVars->contains(*s)) {
(*g_lingo->_methodVars)[*s] = type;
- if (type == kVarProperty) {
- g_lingo->_assemblyContext->_propNames.push_back(*s);
- } else if (type == kVarInstance) {
- if (g_lingo->_inFactory) {
- g_lingo->_currentFactory->properties[*s] = Datum();
- } else {
- warning("Instance var '%s' defined outside factory", s->c_str());
- }
+ if (type == kVarProperty || type == kVarInstance) {
+ g_lingo->_assemblyContext->_properties[*s] = Datum();
} else if (type == kVarGlobal) {
g_lingo->varCreate(*s, true);
}
@@ -181,7 +175,7 @@ static void mVar(Common::String *s, VarType type) {
}
-#line 185 "engines/director/lingo/lingo-gr.cpp"
+#line 179 "engines/director/lingo/lingo-gr.cpp"
# ifndef YY_CAST
# ifdef __cplusplus
@@ -317,7 +311,7 @@ extern int yydebug;
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
union YYSTYPE
{
-#line 168 "engines/director/lingo/lingo-gr.y"
+#line 162 "engines/director/lingo/lingo-gr.y"
Common::String *s;
int i;
@@ -332,7 +326,7 @@ union YYSTYPE
Common::String *prop;
} objectprop;
-#line 336 "engines/director/lingo/lingo-gr.cpp"
+#line 330 "engines/director/lingo/lingo-gr.cpp"
};
typedef union YYSTYPE YYSTYPE;
@@ -497,20 +491,19 @@ enum yysymbol_kind_t
YYSYMBOL_defn = 144, /* defn */
YYSYMBOL_145_15 = 145, /* $@15 */
YYSYMBOL_146_16 = 146, /* $@16 */
- YYSYMBOL_147_17 = 147, /* $@17 */
- YYSYMBOL_on = 148, /* on */
- YYSYMBOL_149_18 = 149, /* $@18 */
- YYSYMBOL_argdef = 150, /* argdef */
- YYSYMBOL_endargdef = 151, /* endargdef */
- YYSYMBOL_argstore = 152, /* argstore */
- YYSYMBOL_macro = 153, /* macro */
- YYSYMBOL_arglist = 154, /* arglist */
- YYSYMBOL_nonemptyarglist = 155, /* nonemptyarglist */
- YYSYMBOL_list = 156, /* list */
- YYSYMBOL_valuelist = 157, /* valuelist */
- YYSYMBOL_linearlist = 158, /* linearlist */
- YYSYMBOL_proplist = 159, /* proplist */
- YYSYMBOL_proppair = 160 /* proppair */
+ YYSYMBOL_on = 147, /* on */
+ YYSYMBOL_148_17 = 148, /* $@17 */
+ YYSYMBOL_argdef = 149, /* argdef */
+ YYSYMBOL_endargdef = 150, /* endargdef */
+ YYSYMBOL_argstore = 151, /* argstore */
+ YYSYMBOL_macro = 152, /* macro */
+ YYSYMBOL_arglist = 153, /* arglist */
+ YYSYMBOL_nonemptyarglist = 154, /* nonemptyarglist */
+ YYSYMBOL_list = 155, /* list */
+ YYSYMBOL_valuelist = 156, /* valuelist */
+ YYSYMBOL_linearlist = 157, /* linearlist */
+ YYSYMBOL_proplist = 158, /* proplist */
+ YYSYMBOL_proppair = 159 /* proppair */
};
typedef enum yysymbol_kind_t yysymbol_kind_t;
@@ -820,16 +813,16 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 125
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 2602
+#define YYLAST 2593
/* YYNTOKENS -- Number of terminals. */
#define YYNTOKENS 102
/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 59
+#define YYNNTS 58
/* YYNRULES -- Number of rules. */
-#define YYNRULES 182
+#define YYNRULES 181
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 382
+#define YYNSTATES 381
#define YYMAXUTOK 341
@@ -886,25 +879,25 @@ static const yytype_int8 yytranslate[] =
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_int16 yyrline[] =
{
- 0, 220, 220, 221, 223, 224, 225, 227, 234, 238,
- 249, 256, 259, 266, 269, 276, 283, 290, 297, 303,
- 310, 321, 332, 339, 347, 348, 349, 351, 352, 357,
- 370, 374, 377, 369, 404, 408, 411, 403, 438, 445,
- 451, 437, 481, 489, 492, 493, 495, 497, 499, 506,
- 514, 515, 517, 523, 527, 531, 535, 538, 540, 541,
- 542, 544, 547, 550, 554, 558, 562, 570, 576, 577,
- 578, 589, 590, 591, 594, 597, 603, 603, 608, 611,
- 614, 620, 621, 622, 623, 624, 625, 626, 627, 628,
- 629, 630, 631, 632, 633, 634, 635, 636, 637, 638,
- 639, 640, 641, 642, 644, 645, 646, 647, 648, 649,
- 650, 651, 653, 656, 658, 659, 660, 661, 669, 670,
- 670, 671, 671, 672, 672, 673, 676, 679, 680, 682,
- 685, 689, 692, 696, 699, 710, 711, 712, 713, 717,
- 721, 726, 727, 729, 733, 737, 741, 741, 771, 771,
- 771, 777, 778, 778, 784, 792, 798, 798, 801, 802,
- 803, 805, 806, 807, 809, 811, 819, 820, 821, 823,
- 824, 826, 828, 829, 830, 831, 833, 834, 836, 837,
- 839, 843, 847
+ 0, 214, 214, 215, 217, 218, 219, 221, 228, 232,
+ 243, 250, 253, 260, 263, 270, 277, 284, 291, 297,
+ 304, 315, 326, 333, 341, 342, 343, 345, 346, 351,
+ 364, 368, 371, 363, 398, 402, 405, 397, 432, 439,
+ 445, 431, 475, 483, 486, 487, 489, 491, 493, 500,
+ 508, 509, 511, 517, 521, 525, 529, 532, 534, 535,
+ 536, 538, 541, 544, 548, 552, 556, 564, 570, 571,
+ 572, 583, 584, 585, 588, 591, 597, 597, 602, 605,
+ 608, 614, 615, 616, 617, 618, 619, 620, 621, 622,
+ 623, 624, 625, 626, 627, 628, 629, 630, 631, 632,
+ 633, 634, 635, 636, 638, 639, 640, 641, 642, 643,
+ 644, 645, 647, 650, 652, 653, 654, 655, 663, 664,
+ 664, 665, 665, 666, 666, 667, 670, 673, 674, 676,
+ 679, 683, 686, 690, 693, 704, 705, 706, 707, 711,
+ 715, 720, 721, 723, 727, 731, 735, 735, 765, 765,
+ 771, 772, 772, 778, 786, 792, 792, 794, 795, 796,
+ 798, 799, 800, 802, 804, 812, 813, 814, 816, 817,
+ 819, 821, 822, 823, 824, 826, 827, 829, 830, 832,
+ 836, 840
};
#endif
@@ -941,10 +934,9 @@ yysymbol_name (yysymbol_kind_t yysymbol)
"elseifstmt", "jumpifz", "jump", "varassign", "if", "lbl", "stmtlist",
"simpleexpr", "expr", "$@10", "chunkexpr", "reference", "proc", "$@11",
"$@12", "$@13", "globallist", "propertylist", "instancelist", "gotofunc",
- "gotomovie", "playfunc", "$@14", "defn", "$@15", "$@16", "$@17", "on",
- "$@18", "argdef", "endargdef", "argstore", "macro", "arglist",
- "nonemptyarglist", "list", "valuelist", "linearlist", "proplist",
- "proppair", YY_NULLPTR
+ "gotomovie", "playfunc", "$@14", "defn", "$@15", "$@16", "on", "$@17",
+ "argdef", "endargdef", "argstore", "macro", "arglist", "nonemptyarglist",
+ "list", "valuelist", "linearlist", "proplist", "proppair", YY_NULLPTR
};
return yy_sname[yysymbol];
}
@@ -969,12 +961,12 @@ static const yytype_int16 yytoknum[] =
};
#endif
-#define YYPACT_NINF (-328)
+#define YYPACT_NINF (-325)
#define yypact_value_is_default(Yyn) \
((Yyn) == YYPACT_NINF)
-#define YYTABLE_NINF (-173)
+#define YYTABLE_NINF (-172)
#define yytable_value_is_error(Yyn) \
0
@@ -983,45 +975,45 @@ static const yytype_int16 yytoknum[] =
STATE-NUM. */
static const yytype_int16 yypact[] =
{
- 786, -86, -328, -328, 52, -328, 612, 334, 52, -34,
- 515, -328, -328, -328, -328, -328, -30, -328, 1782, -328,
- -328, -328, -2, 2020, -13, 128, 28, 51, 2056, 1818,
- -328, 2056, 2056, 2056, 2056, 2056, 2056, 2056, -328, -328,
- 2056, 2056, 2056, 427, 80, 17, -328, -328, -328, -328,
- 2056, -328, 2496, -328, -328, -328, -328, -328, -328, -328,
- -328, -328, -328, -328, -328, -7, 2020, 1898, 2496, 12,
- 1898, 12, -328, 52, 1934, 2496, 64, 699, -328, -328,
- 124, 2056, -328, 121, -328, 2077, -328, 170, -328, 172,
- 400, 180, -328, 19, 52, 52, 41, 58, 155, -328,
- 2413, 2077, -328, 183, -328, 2110, 2143, 2176, 2209, 2463,
- 2374, 184, 185, -328, -328, 2426, -55, 111, 112, -328,
- 2496, 114, 117, 118, -328, -328, 786, 2496, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 191, 1934, 400, 2426, 60,
- 2056, 78, -328, 91, 93, 2056, 12, 191, -328, 120,
- 2496, 2056, -328, -328, 52, -18, 25, 39, -23, 2056,
- 2056, 2056, 89, 173, 2056, 2056, 2056, 2056, 2056, 2056,
- -328, -328, 123, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, -328, -328, -328, 129, -328, -328, 2056,
- 2056, 2056, -328, 2056, 59, -328, 167, 16, 16, 16,
- 16, 2509, 2509, -328, 27, 16, 16, 16, 16, 27,
- -54, -54, -328, -328, -328, -74, -328, 2496, -328, -328,
- -328, -328, 2496, -43, 200, 2496, -328, 186, -328, -328,
- -328, -328, -328, -328, 2056, 2056, 2496, 2496, 16, 2056,
- 2056, 202, 2496, 16, 2496, 16, 2496, 2496, 204, 2496,
- 2242, 2496, 2275, 2496, 2308, 2496, 2341, 2496, 2496, 1702,
- -328, 206, 2496, 2496, 2496, 2496, 133, 111, 112, -328,
- -328, -328, 209, 2056, -328, -328, 191, 2056, 2496, 240,
- -328, 2496, 16, 52, -328, 2056, 2056, 2056, 2056, -328,
- 1203, -328, 1119, -328, -328, 103, -328, 61, 2496, -328,
- -328, -328, -328, 90, 2496, 2496, 2496, 2496, -328, -328,
- -328, 150, -328, 870, -328, 953, -328, -328, -328, -328,
- 1286, 2056, 2056, -328, 56, 211, -328, -328, 187, 207,
- 157, 2496, 16, -328, 2056, -328, 161, -328, 148, 1036,
- -328, 2056, 194, -328, 1369, 2496, -328, 222, -328, 2496,
- 2056, 165, 198, -328, -328, -328, 2496, -328, -328, 1453,
- -328, -328, 1119, -328, -328, -328, -328, 1536, -328, -328,
- 1619, -328
+ 785, -79, -325, -325, 52, -325, 611, 333, 52, -39,
+ 514, -325, -325, -325, -325, -325, -4, -325, 1781, -325,
+ -325, -325, -2, 1933, 98, 124, 29, 31, 2013, 1817,
+ -325, 2013, 2013, 2013, 2013, 2013, 2013, 2013, -325, -325,
+ 2013, 2013, 2013, 426, 50, -15, -325, -325, -325, -325,
+ 2013, -325, 2487, -325, -325, -325, -325, -325, -325, -325,
+ -325, -325, -325, -325, -325, -44, 1933, 233, 2487, -10,
+ 233, -10, -325, 52, 1897, 2487, 14, 698, -325, -325,
+ 68, 2013, -325, 74, -325, 2068, -325, 95, -325, 119,
+ 399, 121, -325, -43, 52, 52, 24, 32, 114, -325,
+ 2404, 2068, -325, 166, -325, 2101, 2134, 2167, 2200, 2454,
+ 2365, 170, 184, -325, -325, 2417, -87, 110, 112, -325,
+ 2487, 115, 116, 118, -325, -325, 785, 2487, 2013, 2013,
+ 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013,
+ 2013, 2013, 2013, 2013, 2013, 186, 1897, 399, 2417, 62,
+ 2013, 78, -325, 102, 108, 2013, -10, 186, -325, 120,
+ 2487, 2013, -325, -325, 52, 25, 30, 39, -18, 2013,
+ 2013, 2013, 93, 172, 2013, 2013, 2013, 2013, 2013, 2013,
+ -325, -325, 122, 2013, 2013, 2013, 2013, 2013, 2013, 2013,
+ 2013, 2013, 2013, -325, -325, -325, 123, -325, -325, 2013,
+ 2013, 2013, -325, 2013, 91, -325, 165, -50, -50, -50,
+ -50, 2500, 2500, -325, 18, -50, -50, -50, -50, 18,
+ -1, -1, -325, -325, -325, -36, -325, 2487, -325, -325,
+ -325, -325, 2487, 63, 196, 2487, 186, 180, -325, -325,
+ -325, -325, -325, -325, 2013, 2013, 2487, 2487, -50, 2013,
+ 2013, 198, 2487, -50, 2487, -50, 2487, 2487, 199, 2487,
+ 2233, 2487, 2266, 2487, 2299, 2487, 2332, 2487, 2487, 1701,
+ -325, 202, 2487, 2487, 2487, 2487, 128, 110, 112, -325,
+ -325, -325, 204, 2013, -325, -325, 92, 2013, 2487, 2034,
+ -325, 2487, -50, 52, -325, 2013, 2013, 2013, 2013, -325,
+ 1202, -325, 1118, -325, -325, 111, -325, -325, 2487, -325,
+ -325, -325, -325, 99, 2487, 2487, 2487, 2487, -325, -325,
+ -325, 145, -325, 869, -325, 952, -325, -325, -325, -325,
+ 1285, 2013, 2013, -325, 153, 206, 1035, -325, 182, 203,
+ 148, 2487, -50, -325, 2013, -325, 156, -325, 143, -325,
+ 2013, 189, -325, 1368, 2487, -325, 219, -325, 2487, 2013,
+ 162, 197, -325, -325, -325, 2487, -325, -325, 1452, -325,
+ -325, 1118, -325, -325, -325, -325, 1535, -325, -325, 1618,
+ -325
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1030,66 +1022,66 @@ static const yytype_int16 yypact[] =
static const yytype_uint8 yydefact[] =
{
0, 0, 61, 66, 0, 62, 0, 0, 0, 0,
- 0, 64, 63, 146, 152, 80, 118, 119, 0, 135,
+ 0, 64, 63, 146, 151, 80, 118, 119, 0, 135,
56, 148, 0, 0, 0, 0, 0, 0, 0, 0,
- 123, 0, 0, 0, 0, 0, 0, 0, 121, 156,
+ 123, 0, 0, 0, 0, 0, 0, 0, 121, 155,
0, 0, 0, 0, 0, 2, 81, 27, 6, 28,
0, 71, 25, 113, 72, 26, 115, 116, 5, 57,
- 24, 69, 70, 65, 67, 65, 0, 0, 167, 126,
- 0, 74, 112, 0, 0, 169, 165, 0, 57, 117,
+ 24, 69, 70, 65, 67, 65, 0, 0, 166, 126,
+ 0, 74, 112, 0, 0, 168, 164, 0, 57, 117,
0, 0, 136, 0, 137, 138, 140, 0, 42, 0,
- 114, 0, 57, 0, 0, 0, 0, 0, 0, 151,
+ 114, 0, 57, 0, 0, 0, 0, 0, 0, 150,
128, 143, 145, 0, 95, 0, 0, 0, 0, 0,
- 0, 0, 0, 100, 101, 0, 65, 64, 63, 173,
- 176, 0, 175, 174, 178, 1, 0, 53, 0, 0,
+ 0, 0, 0, 100, 101, 0, 65, 64, 63, 172,
+ 175, 0, 174, 173, 177, 1, 0, 53, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 158, 0, 0, 167, 0,
- 0, 0, 79, 65, 0, 0, 147, 158, 129, 120,
- 142, 0, 139, 149, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 157, 0, 0, 166, 0,
+ 0, 0, 79, 65, 0, 0, 147, 157, 129, 120,
+ 142, 0, 139, 57, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
144, 133, 124, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 47, 47, 131, 122, 157, 68, 0,
- 0, 0, 171, 0, 0, 3, 0, 91, 92, 89,
+ 0, 0, 0, 47, 47, 131, 122, 156, 68, 0,
+ 0, 0, 170, 0, 0, 3, 0, 91, 92, 89,
90, 93, 94, 86, 97, 98, 99, 88, 87, 96,
- 82, 83, 84, 85, 159, 0, 125, 168, 73, 75,
- 76, 78, 170, 0, 0, 141, 57, 0, 7, 8,
+ 82, 83, 84, 85, 158, 0, 125, 167, 73, 75,
+ 76, 78, 169, 0, 0, 141, 157, 0, 7, 8,
10, 11, 12, 13, 0, 0, 53, 17, 15, 0,
0, 0, 16, 14, 22, 23, 43, 127, 0, 104,
0, 106, 0, 108, 0, 110, 0, 102, 103, 0,
- 58, 0, 182, 181, 180, 177, 0, 0, 0, 179,
- 58, 164, 0, 0, 164, 130, 158, 0, 38, 30,
+ 58, 0, 181, 180, 179, 176, 0, 0, 0, 178,
+ 58, 163, 0, 0, 163, 130, 0, 0, 38, 30,
46, 18, 19, 0, 134, 0, 0, 0, 0, 57,
- 0, 132, 0, 58, 160, 0, 58, 0, 9, 57,
+ 0, 132, 0, 58, 159, 0, 58, 163, 9, 57,
55, 55, 58, 0, 105, 107, 109, 111, 45, 59,
- 60, 0, 50, 0, 77, 0, 164, 39, 31, 35,
- 0, 0, 0, 44, 57, 161, 58, 53, 0, 0,
- 0, 20, 21, 58, 0, 51, 0, 162, 154, 0,
- 40, 0, 0, 29, 0, 53, 48, 0, 46, 32,
- 0, 0, 0, 163, 58, 53, 36, 49, 58, 0,
- 46, 53, 0, 41, 58, 46, 52, 0, 58, 33,
- 0, 37
+ 60, 0, 50, 0, 77, 0, 58, 39, 31, 35,
+ 0, 0, 0, 44, 57, 160, 0, 53, 0, 0,
+ 0, 20, 21, 58, 0, 51, 0, 161, 153, 40,
+ 0, 0, 29, 0, 53, 48, 0, 46, 32, 0,
+ 0, 0, 162, 58, 53, 36, 49, 58, 0, 46,
+ 53, 0, 41, 58, 46, 52, 0, 58, 33, 0,
+ 37
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -328, 125, -328, -328, -17, 15, -328, -328, -328, -328,
- -328, -328, -328, -328, -328, -308, 62, -328, -328, -328,
- -163, -327, -58, -328, -76, -81, 3, -6, -328, -328,
- 38, -328, -328, -328, -328, -328, -328, -328, -328, -11,
- -328, -328, -328, -328, -328, -328, -328, -328, -147, -328,
- -279, -328, 26, -29, -328, -328, -328, -328, 53
+ -325, 126, -325, -325, -21, 13, -325, -325, -325, -325,
+ -325, -325, -325, -325, -325, -285, 59, -325, -325, -325,
+ -163, -324, -56, -325, -73, 1700, 3, -6, -325, -325,
+ 37, -325, -325, -325, -325, -325, -325, -325, -325, -27,
+ -325, -325, -325, -325, -325, -325, -325, -154, -325, -269,
+ -325, 26, -20, -325, -325, -325, -325, 60
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int16 yydefgoto[] =
{
- -1, 44, 45, 46, 47, 320, 310, 338, 365, 311,
- 339, 371, 309, 337, 358, 312, 269, 49, 334, 345,
+ -1, 44, 45, 46, 47, 320, 310, 338, 364, 311,
+ 339, 370, 309, 337, 357, 312, 269, 49, 334, 345,
206, 322, 328, 50, 145, 300, 51, 52, 283, 53,
54, 55, 80, 111, 103, 159, 196, 182, 56, 86,
- 57, 77, 58, 87, 236, 78, 59, 112, 225, 348,
- 303, 60, 154, 76, 61, 121, 122, 123, 124
+ 57, 77, 58, 87, 78, 59, 112, 225, 348, 303,
+ 60, 154, 76, 61, 121, 122, 123, 124
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@@ -1097,532 +1089,530 @@ static const yytype_int16 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_int16 yytable[] =
{
- 68, 68, 157, 340, 75, 306, 8, 64, 238, 62,
- 233, 72, 85, 73, 134, 48, 169, 90, 102, 244,
- 79, 281, 100, 101, 282, 104, 105, 106, 107, 108,
- 109, 110, 69, 71, 113, 114, 115, 120, 143, 144,
- 245, 146, 91, 92, 127, 376, 199, 336, 88, 8,
- 364, 240, 284, 1, 98, 282, 32, 33, 34, 35,
- 147, 148, 374, 8, 148, 242, 2, 378, 148, 3,
- 4, 68, 170, 5, 162, 160, 152, 99, 63, 11,
- 125, 12, 171, 290, 134, 276, 277, 135, 278, 146,
- 180, 343, 344, 149, 174, 134, 151, 172, 173, 32,
- 33, 34, 35, 156, 175, 140, 141, 142, 143, 144,
- 150, 176, 126, 32, 33, 34, 35, 141, 142, 143,
- 144, 177, 207, 208, 209, 210, 211, 212, 213, 214,
- 215, 216, 217, 218, 219, 220, 221, 222, 223, 307,
- 68, 48, 249, 331, 227, 93, 94, 95, 42, 232,
- 158, 43, 250, 332, 96, 235, 326, 226, 150, 282,
- 286, 97, 155, 246, 247, 248, 161, 237, 252, 253,
- 254, 255, 256, 257, 350, 228, 150, 259, 260, 261,
- 262, 263, 264, 265, 266, 267, 268, 146, 229, 230,
- 231, 150, 362, 272, 273, 274, 163, 275, 164, 302,
- 324, 155, 370, 239, 241, 243, 168, 178, 375, 181,
- 195, 197, 200, 201, 202, 203, 204, 224, 234, 280,
- 251, 258, 323, 318, 321, 325, 285, 271, 293, 287,
- 294, 330, 301, 327, 199, 304, 333, 347, 288, 289,
- 351, 352, 353, 291, 292, 356, 357, 360, 363, 367,
- 368, 205, 299, 329, 305, 349, 270, 279, 346, 0,
- 0, 0, 354, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, -34, 0, 0, 75, 361, 0,
- 0, 308, 0, 369, 0, 0, 0, 372, 0, 314,
- 315, 316, 317, 377, 0, 0, 313, 380, 0, 0,
- 0, 128, 129, 130, 131, 132, 133, 0, 134, 0,
- 0, 135, 136, 137, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 341, 342, 138, 139, 140,
- 141, 142, 143, 144, -166, 1, 0, 0, 355, 0,
- 0, 0, 0, 0, 0, 359, 0, 0, 2, 0,
- 0, 3, 4, 0, 366, 5, -166, 7, 8, 9,
- 65, 11, 0, 12, -166, -166, 0, 15, -166, -166,
- -166, -166, -166, -166, -166, -166, 0, -166, 0, -166,
- -166, -166, 0, 66, -166, 25, -166, -166, -166, -166,
- 0, 0, -166, -166, -166, -166, -166, -166, -166, -166,
- -166, 31, -166, -166, -166, -166, -166, -166, 32, 33,
- 34, 35, 36, -166, -166, -166, -166, 0, -166, -166,
- -166, -166, -166, -166, 40, 41, -166, -166, 1, -166,
- 70, -166, -166, 43, -166, 0, 0, 0, 0, 0,
- 0, 2, 0, 165, 3, 4, 0, 0, 5, 0,
- 7, 8, 9, 116, 117, 0, 118, 0, 0, 0,
- 15, 128, 129, 130, 131, 132, 133, 0, 134, 166,
- 167, 135, 136, 137, 0, 0, 66, 0, 25, 0,
- 0, 0, 0, 0, 0, 0, 0, 138, 139, 140,
- 141, 142, 143, 144, 31, 0, 0, 0, 0, 0,
- 0, 32, 33, 34, 35, 36, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, -65, 1, 40, 41, 0,
- 0, 0, 0, 42, 0, 0, 43, -172, 119, 2,
- 0, 0, 3, 4, 0, 0, 5, -65, 7, 8,
- 9, 65, 11, 0, 12, -65, -65, 0, 15, 0,
- -65, -65, -65, -65, -65, -65, -65, 0, 0, 0,
- 0, -65, 0, 0, 66, -65, 25, 0, 0, -65,
- 0, 0, 0, -65, -65, -65, -65, -65, -65, -65,
- -65, -65, 31, -65, 0, 0, -65, -65, -65, 32,
- 33, 34, 35, 36, 0, 0, -65, -65, 0, -65,
- -65, -65, -65, -65, -65, 40, 41, -65, -65, 0,
- -65, 74, -166, 1, 43, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 2, 0, 0, 3,
- 4, 0, 0, 5, -166, 7, 8, 9, 65, 11,
- 0, 12, -166, -166, 0, 15, 0, -166, -166, -166,
- -166, -166, -166, -166, 0, 0, 0, 0, -166, 0,
- 0, 66, -166, 25, 0, 0, -166, 0, 0, 0,
- -166, -166, -166, 0, 0, 0, 0, 0, 0, 31,
- 0, 0, 0, 0, 0, 0, 32, 33, 34, 35,
- 36, 0, 0, -166, -166, 0, -166, -166, -166, -166,
- 1, 0, 40, 41, 0, 0, 0, -166, 67, 0,
- -166, 43, 0, 2, 0, 0, 3, 4, 0, 0,
- 5, -166, 7, 8, 9, 65, 11, 0, 12, -166,
- -166, 0, 15, 0, -166, -166, -166, -166, -166, -166,
- -166, 0, 0, 0, 0, -166, 0, 0, 66, -166,
- 25, 0, 0, -166, 0, 0, 0, -166, -166, -166,
- 0, 0, 0, 0, 0, 0, 31, 0, 0, 0,
- 0, 0, 0, 32, 33, 34, 35, 36, 0, 0,
- -166, -166, 0, -166, -166, -166, -4, 1, 0, 40,
- 41, 0, 0, 0, -166, 42, 0, -166, 43, 0,
- 2, 0, 0, 3, 4, 0, 0, 5, 6, 7,
- 8, 9, 10, 11, 0, 12, 0, 13, 14, 15,
- 0, 0, 0, 16, 17, 18, 19, 20, 0, 0,
- 21, 0, 22, 0, 0, 23, 24, 25, 0, 0,
- 26, 0, 0, 27, 28, 29, 30, 0, 0, 0,
- 0, 0, 0, 31, 0, 0, 0, 0, 0, 0,
- 32, 33, 34, 35, 36, 0, 0, 37, 38, 39,
- -155, 1, 0, 0, 0, 0, 40, 41, 0, 0,
- 0, -4, 42, 0, 2, 43, 0, 3, 4, 0,
- 0, 5, 6, 7, 8, 9, 10, 11, 0, 12,
- 335, 13, 0, 15, 0, 0, 0, 16, 17, 18,
- 19, 20, 0, 0, 0, 0, 22, 0, 0, 23,
- 24, 25, 0, 0, 26, 0, 0, 0, 28, 29,
- 30, 0, 0, 0, 0, 0, 0, 31, 0, 0,
- 0, 0, 0, 0, 32, 33, 34, 35, 36, 0,
- 0, 37, 38, -153, 1, 0, 0, 0, 0, 0,
- 40, 41, 0, 0, 0, 319, 42, 2, 0, 43,
- 3, 4, 0, 0, 5, 6, 7, 8, 9, 10,
- 11, 0, 12, 0, 13, 0, 15, 0, 0, 0,
- 16, 17, 18, 19, 20, 0, 0, 0, 0, 22,
- 0, 0, 23, 24, 25, 0, 0, 26, 0, 0,
- 0, 28, 29, 30, 0, 0, 0, 0, 0, 0,
- 31, 0, 0, 0, 0, 0, 0, 32, 33, 34,
- 35, 36, 0, 0, 37, 38, -150, 1, 0, 0,
- 0, 0, 0, 40, 41, 0, 0, 0, 319, 42,
- 2, 0, 43, 3, 4, 0, 0, 5, 6, 7,
- 8, 9, 10, 11, 0, 12, 0, 13, 0, 15,
- 0, 0, 0, 16, 17, 18, 19, 20, 0, 0,
- 0, 0, 22, 0, 0, 23, 24, 25, 0, 0,
- 26, 0, 0, 0, 28, 29, 30, 0, 0, 0,
- 0, 0, 0, 31, 0, 0, 0, 0, 0, 0,
- 32, 33, 34, 35, 36, 0, 0, 37, 38, 0,
- 1, 0, 0, 0, 0, 0, 40, 41, 0, 0,
- 0, 319, 42, 2, 0, 43, 3, 4, 0, 0,
- 5, 6, 7, 8, 9, 10, 11, 0, 12, 0,
- 13, 0, 15, 0, -54, -54, 16, 17, 18, 19,
- 20, 0, 0, 0, 0, 22, 0, 0, 23, 24,
- 25, 0, 0, 26, 0, 0, 0, 28, 29, 30,
- 0, 0, 0, 0, 0, 0, 31, 0, 0, 0,
- 0, 0, 0, 32, 33, 34, 35, 36, 0, 0,
- 37, 38, 0, -54, 1, 0, 0, 0, 0, 40,
- 41, 0, 0, 0, 319, 42, 0, 2, 43, 0,
- 3, 4, 0, 0, 5, 6, 7, 8, 9, 10,
- 11, 0, 12, 0, 13, 0, 15, 0, 0, 0,
- 16, 17, 18, 19, 20, 0, 0, 0, 0, 22,
- 0, 0, 23, 24, 25, 0, 0, 26, 0, 0,
- 0, 28, 29, 30, 0, 0, 0, 0, 0, 0,
+ 68, 68, 102, 233, 75, 157, 340, 64, 73, 146,
+ 170, 72, 85, 48, 199, 306, 62, 90, 134, 169,
+ 171, 135, 100, 101, 244, 104, 105, 106, 107, 108,
+ 109, 110, 69, 71, 113, 114, 115, 120, 326, 140,
+ 141, 142, 143, 144, 127, 245, 79, 375, 88, 8,
+ 125, 238, 146, 1, 8, 98, 240, 99, 162, 281,
+ 147, 148, 282, 8, 148, 242, 2, 134, 148, 3,
+ 4, 68, 363, 5, 180, 160, 152, 174, 63, 11,
+ 126, 12, 286, 290, 373, 176, 134, 175, 150, 377,
+ 236, 143, 144, 149, 158, 177, 151, 172, 173, 32,
+ 33, 34, 35, 156, 32, 33, 34, 35, 141, 142,
+ 143, 144, 155, 32, 33, 34, 35, 276, 277, 161,
+ 278, 163, 207, 208, 209, 210, 211, 212, 213, 214,
+ 215, 216, 217, 218, 219, 220, 221, 222, 223, 48,
+ 68, 93, 94, 95, 227, 164, 249, 168, 42, 232,
+ 96, 43, 331, 91, 92, 235, 250, 97, 284, 226,
+ 150, 282, 332, 246, 247, 248, 178, 237, 252, 253,
+ 254, 255, 256, 257, 349, 228, 150, 259, 260, 261,
+ 262, 263, 264, 265, 266, 267, 268, 307, 343, 344,
+ 282, 361, 181, 272, 273, 274, 195, 275, 146, 229,
+ 230, 369, 239, 241, 243, 231, 150, 374, 324, 155,
+ 197, 200, 224, 201, 203, 202, 204, 280, 234, 251,
+ 258, 271, 285, 287, 293, 294, 318, 321, 301, 199,
+ 304, 333, 347, 352, 1, 350, 327, 351, 288, 289,
+ 355, 356, 359, 291, 292, 362, 366, 2, 299, 367,
+ 3, 4, 205, 270, 5, 329, 7, 8, 9, 65,
+ 11, 346, 12, 305, 279, 0, 15, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 75, 0, 0,
+ 360, 308, 66, 0, 25, 0, 0, 0, 0, 314,
+ 315, 316, 317, 0, 0, 0, 313, 0, 0, 0,
31, 0, 0, 0, 0, 0, 0, 32, 33, 34,
- 35, 36, 0, 0, 37, 38, 0, 1, 0, -57,
- 0, 0, 0, 40, 41, 0, 0, 0, 319, 42,
- 2, 0, 43, 3, 4, 0, 0, 5, 6, 7,
- 8, 9, 10, 11, 0, 12, 0, 13, 0, 15,
- 0, 0, 0, 16, 17, 18, 19, 20, 0, 0,
- 0, 0, 22, 0, 0, 23, 24, 25, 0, 0,
- 26, 0, 0, 0, 28, 29, 30, 0, 0, 0,
- 0, 0, 0, 31, 0, 0, 0, 0, 0, 0,
- 32, 33, 34, 35, 36, 0, 0, 37, 38, 0,
- 1, -54, 0, 0, 0, 0, 40, 41, 0, 0,
- 0, 319, 42, 2, 0, 43, 3, 4, 0, 0,
- 5, 6, 7, 8, 9, 10, 11, 0, 12, 0,
- 13, 0, 15, 0, 0, 0, 16, 17, 18, 19,
- 20, 0, 0, 0, 0, 22, 0, 0, 23, 24,
- 25, 0, 0, 26, 0, 0, 0, 28, 29, 30,
- 0, 0, 0, 0, 0, 0, 31, 0, 0, 0,
- 0, 0, 0, 32, 33, 34, 35, 36, 0, 0,
- 37, 38, 0, -57, 1, 0, 0, 0, 0, 40,
- 41, 0, 0, 0, 319, 42, 0, 2, 43, 0,
- 3, 4, 0, 0, 5, 6, 7, 8, 9, 10,
- 11, 0, 12, 0, 13, 0, 15, 0, 0, 0,
- 16, 17, 18, 19, 20, 0, 0, 0, 0, 22,
- 0, 0, 23, 24, 25, 0, 0, 26, 0, 0,
- 0, 28, 29, 30, 0, 0, 0, 0, 0, 0,
- 31, 0, 0, 0, 0, 0, 0, 32, 33, 34,
- 35, 36, 0, 0, 37, 38, 0, 1, 373, 0,
- 0, 0, 0, 40, 41, 0, 0, 0, 319, 42,
- 2, 0, 43, 3, 4, 0, 0, 5, 6, 7,
- 8, 9, 10, 11, 0, 12, 0, 13, 0, 15,
- 0, 0, 0, 16, 17, 18, 19, 20, 0, 0,
- 0, 0, 22, 0, 0, 23, 24, 25, 0, 0,
- 26, 0, 0, 0, 28, 29, 30, 0, 0, 0,
- 0, 0, 0, 31, 0, 0, 0, 0, 0, 0,
- 32, 33, 34, 35, 36, 0, 0, 37, 38, 0,
- 1, 379, 0, 0, 0, 0, 40, 41, 0, 0,
- 0, 319, 42, 2, 0, 43, 3, 4, 0, 0,
- 5, 6, 7, 8, 9, 10, 11, 0, 12, 0,
+ 35, 36, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 40, 41, 341, 342, 0, 0, 42,
+ -165, -165, 43, -165, 1, 0, 0, 0, 354, 0,
+ 0, 0, 0, 0, 358, 0, 0, 2, 0, 0,
+ 3, 4, 0, 365, 5, -165, 7, 8, 9, 65,
+ 11, 0, 12, -165, -165, 0, 15, -165, -165, -165,
+ -165, -165, -165, -165, -165, 0, -165, 0, -165, -165,
+ -165, 0, 66, -165, 25, -165, -165, -165, -165, 0,
+ 0, -165, -165, -165, -165, -165, -165, -165, -165, -165,
+ 31, -165, -165, -165, -165, -165, -165, 32, 33, 34,
+ 35, 36, -165, -165, -165, -165, 0, -165, -165, -165,
+ -165, -165, -165, 40, 41, -165, -165, 1, -165, 70,
+ -165, -165, 43, -165, 0, 0, 0, 0, 0, 0,
+ 2, 0, 165, 3, 4, 0, 0, 5, 0, 7,
+ 8, 9, 116, 117, 0, 118, 0, 0, 0, 15,
+ 128, 129, 130, 131, 132, 133, 0, 134, 166, 167,
+ 135, 136, 137, 0, 0, 66, 0, 25, 0, 0,
+ 0, 0, 0, 0, 0, 0, 138, 139, 140, 141,
+ 142, 143, 144, 31, 0, 0, 0, 0, 0, 0,
+ 32, 33, 34, 35, 36, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, -65, 1, 40, 41, 0, 0,
+ 0, 0, 42, 0, 0, 43, -171, 119, 2, 0,
+ 0, 3, 4, 0, 0, 5, -65, 7, 8, 9,
+ 65, 11, 0, 12, -65, -65, 0, 15, 0, -65,
+ -65, -65, -65, -65, -65, -65, 0, 0, 0, 0,
+ -65, 0, 0, 66, -65, 25, 0, 0, -65, 0,
+ 0, 0, -65, -65, -65, -65, -65, -65, -65, -65,
+ -65, 31, -65, 0, 0, -65, -65, -65, 32, 33,
+ 34, 35, 36, 0, 0, -65, -65, 0, -65, -65,
+ -65, -65, -65, -65, 40, 41, -65, -65, 0, -65,
+ 74, -165, 1, 43, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 0, 0, 3, 4,
+ 0, 0, 5, -165, 7, 8, 9, 65, 11, 0,
+ 12, -165, -165, 0, 15, 0, -165, -165, -165, -165,
+ -165, -165, -165, 0, 0, 0, 0, -165, 0, 0,
+ 66, -165, 25, 0, 0, -165, 0, 0, 0, -165,
+ -165, -165, 0, 0, 0, 0, 0, 0, 31, 0,
+ 0, 0, 0, 0, 0, 32, 33, 34, 35, 36,
+ 0, 0, -165, -165, 0, -165, -165, -165, -165, 1,
+ 0, 40, 41, 0, 0, 0, -165, 67, 0, -165,
+ 43, 0, 2, 0, 0, 3, 4, 0, 0, 5,
+ -165, 7, 8, 9, 65, 11, 0, 12, -165, -165,
+ 0, 15, 0, -165, -165, -165, -165, -165, -165, -165,
+ 0, 0, 0, 0, -165, 0, 0, 66, -165, 25,
+ 0, 0, -165, 0, 0, 0, -165, -165, -165, 0,
+ 0, 0, 0, 0, 0, 31, 0, 0, 0, 0,
+ 0, 0, 32, 33, 34, 35, 36, 0, 0, -165,
+ -165, 0, -165, -165, -165, -4, 1, 0, 40, 41,
+ 0, 0, 0, -165, 42, 0, -165, 43, 0, 2,
+ 0, 0, 3, 4, 0, 0, 5, 6, 7, 8,
+ 9, 10, 11, 0, 12, 0, 13, 14, 15, 0,
+ 0, 0, 16, 17, 18, 19, 20, 0, 0, 21,
+ 0, 22, 0, 0, 23, 24, 25, 0, 0, 26,
+ 0, 0, 27, 28, 29, 30, 0, 0, 0, 0,
+ 0, 0, 31, 0, 0, 0, 0, 0, 0, 32,
+ 33, 34, 35, 36, 0, 0, 37, 38, 39, -154,
+ 1, 0, 0, 0, 0, 40, 41, 0, 0, 0,
+ -4, 42, 0, 2, 43, 0, 3, 4, 0, 0,
+ 5, 6, 7, 8, 9, 10, 11, 0, 12, 335,
13, 0, 15, 0, 0, 0, 16, 17, 18, 19,
20, 0, 0, 0, 0, 22, 0, 0, 23, 24,
25, 0, 0, 26, 0, 0, 0, 28, 29, 30,
0, 0, 0, 0, 0, 0, 31, 0, 0, 0,
0, 0, 0, 32, 33, 34, 35, 36, 0, 0,
- 37, 38, 0, 1, 381, 0, 0, 0, 0, 40,
+ 37, 38, -152, 1, 0, 0, 0, 0, 0, 40,
41, 0, 0, 0, 319, 42, 2, 0, 43, 3,
4, 0, 0, 5, 6, 7, 8, 9, 10, 11,
0, 12, 0, 13, 0, 15, 0, 0, 0, 16,
- 17, 18, 19, 0, 0, 0, 0, 0, 0, 0,
- 0, 23, 0, 25, 0, 0, 0, 0, 0, 0,
+ 17, 18, 19, 20, 0, 0, 0, 0, 22, 0,
+ 0, 23, 24, 25, 0, 0, 26, 0, 0, 0,
+ 28, 29, 30, 0, 0, 0, 0, 0, 0, 31,
+ 0, 0, 0, 0, 0, 0, 32, 33, 34, 35,
+ 36, 0, 0, 37, 38, -149, 1, 0, 0, 0,
+ 0, 0, 40, 41, 0, 0, 0, 319, 42, 2,
+ 0, 43, 3, 4, 0, 0, 5, 6, 7, 8,
+ 9, 10, 11, 0, 12, 0, 13, 0, 15, 0,
+ 0, 0, 16, 17, 18, 19, 20, 0, 0, 0,
+ 0, 22, 0, 0, 23, 24, 25, 0, 0, 26,
+ 0, 0, 0, 28, 29, 30, 0, 0, 0, 0,
+ 0, 0, 31, 0, 0, 0, 0, 0, 0, 32,
+ 33, 34, 35, 36, 0, 0, 37, 38, 0, 1,
+ 0, 0, 0, 0, 0, 40, 41, 0, 0, 0,
+ 319, 42, 2, 0, 43, 3, 4, 0, 0, 5,
+ 6, 7, 8, 9, 10, 11, 0, 12, 0, 13,
+ 0, 15, 0, -54, -54, 16, 17, 18, 19, 20,
+ 0, 0, 0, 0, 22, 0, 0, 23, 24, 25,
+ 0, 0, 26, 0, 0, 0, 28, 29, 30, 0,
+ 0, 0, 0, 0, 0, 31, 0, 0, 0, 0,
+ 0, 0, 32, 33, 34, 35, 36, 0, 0, 37,
+ 38, 0, -54, 1, 0, 0, 0, 0, 40, 41,
+ 0, 0, 0, 319, 42, 0, 2, 43, 0, 3,
+ 4, 0, 0, 5, 6, 7, 8, 9, 10, 11,
+ 0, 12, 0, 13, 0, 15, 0, 0, 0, 16,
+ 17, 18, 19, 20, 0, 0, 0, 0, 22, 0,
+ 0, 23, 24, 25, 0, 0, 26, 0, 0, 0,
+ 28, 29, 30, 0, 0, 0, 0, 0, 0, 31,
+ 0, 0, 0, 0, 0, 0, 32, 33, 34, 35,
+ 36, 0, 0, 37, 38, 0, 1, 0, -57, 0,
+ 0, 0, 40, 41, 0, 0, 0, 319, 42, 2,
+ 0, 43, 3, 4, 0, 0, 5, 6, 7, 8,
+ 9, 10, 11, 0, 12, 0, 13, 0, 15, 0,
+ 0, 0, 16, 17, 18, 19, 20, 0, 0, 0,
+ 0, 22, 0, 0, 23, 24, 25, 0, 0, 26,
+ 0, 0, 0, 28, 29, 30, 0, 0, 0, 0,
+ 0, 0, 31, 0, 0, 0, 0, 0, 0, 32,
+ 33, 34, 35, 36, 0, 0, 37, 38, 0, 1,
+ -54, 0, 0, 0, 0, 40, 41, 0, 0, 0,
+ 319, 42, 2, 0, 43, 3, 4, 0, 0, 5,
+ 6, 7, 8, 9, 10, 11, 0, 12, 0, 13,
+ 0, 15, 0, 0, 0, 16, 17, 18, 19, 20,
+ 0, 0, 0, 0, 22, 0, 0, 23, 24, 25,
+ 0, 0, 26, 0, 0, 0, 28, 29, 30, 0,
+ 0, 0, 0, 0, 0, 31, 0, 0, 0, 0,
+ 0, 0, 32, 33, 34, 35, 36, 0, 0, 37,
+ 38, 0, -57, 1, 0, 0, 0, 0, 40, 41,
+ 0, 0, 0, 319, 42, 0, 2, 43, 0, 3,
+ 4, 0, 0, 5, 6, 7, 8, 9, 10, 11,
+ 0, 12, 0, 13, 0, 15, 0, 0, 0, 16,
+ 17, 18, 19, 20, 0, 0, 0, 0, 22, 0,
+ 0, 23, 24, 25, 0, 0, 26, 0, 0, 0,
28, 29, 30, 0, 0, 0, 0, 0, 0, 31,
0, 0, 0, 0, 0, 0, 32, 33, 34, 35,
- 36, 0, 0, 1, 38, 0, 0, 0, 0, 0,
- 0, 0, 40, 41, 0, 0, 2, 0, 42, 3,
- 4, 43, 0, 5, 0, 7, 8, 9, 65, 11,
- 0, 12, 0, 0, 0, 15, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 81, 82, 83,
- 84, 66, 2, 25, 0, 3, 4, 0, 0, 5,
- 0, 7, 8, 9, 65, 11, 0, 12, 0, 31,
- 0, 15, 0, 0, 0, 0, 32, 33, 34, 35,
- 36, 0, 0, 81, 0, 83, 0, 66, 0, 25,
- 0, 0, 40, 41, 0, 0, 0, 0, 42, 0,
- 0, 43, 0, 0, 0, 31, 0, 0, 0, 0,
- 0, 0, 32, 33, 34, 35, 36, 0, 0, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 40, 41,
- 0, 0, 2, 0, 42, 3, 4, 43, 0, 5,
- 0, 7, 8, 9, 65, 11, 0, 12, 0, 0,
- 0, 15, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 66, 2, 25,
- 0, 3, 4, 0, 0, 5, 0, 7, 8, 9,
- 153, 11, 0, 12, 0, 31, 0, 15, 0, 0,
- 0, 0, 32, 33, 34, 35, 36, 0, 0, 0,
- 0, 0, 0, 66, 0, 25, 0, 0, 40, 41,
- 0, 0, 0, 0, 42, -166, -166, 43, 0, 0,
- 0, 31, 0, 0, 0, 0, 0, 0, 32, 33,
- 34, 35, 36, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 40, 41, 0, 0, 0, 0,
- 42, -166, -166, 43, 2, 0, 0, 3, 4, 0,
- 89, 5, 0, 7, 8, 9, 65, 11, 0, 12,
- 0, 0, 0, 15, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 66,
- 2, 25, 0, 3, 4, 0, 0, 5, 0, 7,
- 8, 9, 65, 11, 0, 12, 0, 31, 0, 15,
- 0, 0, 0, 0, 32, 33, 34, 35, 36, 0,
- 0, 0, 0, 0, 0, 66, 0, 25, 0, 0,
- 40, 41, 0, 0, 0, 0, 42, 0, 0, 43,
- 0, 0, 81, 31, 83, 0, 0, 0, 0, 0,
- 32, 33, 34, 35, 36, 0, 0, 0, 128, 129,
- 130, 131, 132, 133, 0, 134, 40, 41, 135, 136,
- 137, 0, 42, 0, 0, 43, 0, 183, 0, 0,
- 0, 0, 0, 184, 138, 139, 140, 141, 142, 143,
+ 36, 0, 0, 37, 38, 0, 1, 372, 0, 0,
+ 0, 0, 40, 41, 0, 0, 0, 319, 42, 2,
+ 0, 43, 3, 4, 0, 0, 5, 6, 7, 8,
+ 9, 10, 11, 0, 12, 0, 13, 0, 15, 0,
+ 0, 0, 16, 17, 18, 19, 20, 0, 0, 0,
+ 0, 22, 0, 0, 23, 24, 25, 0, 0, 26,
+ 0, 0, 0, 28, 29, 30, 0, 0, 0, 0,
+ 0, 0, 31, 0, 0, 0, 0, 0, 0, 32,
+ 33, 34, 35, 36, 0, 0, 37, 38, 0, 1,
+ 378, 0, 0, 0, 0, 40, 41, 0, 0, 0,
+ 319, 42, 2, 0, 43, 3, 4, 0, 0, 5,
+ 6, 7, 8, 9, 10, 11, 0, 12, 0, 13,
+ 0, 15, 0, 0, 0, 16, 17, 18, 19, 20,
+ 0, 0, 0, 0, 22, 0, 0, 23, 24, 25,
+ 0, 0, 26, 0, 0, 0, 28, 29, 30, 0,
+ 0, 0, 0, 0, 0, 31, 0, 0, 0, 0,
+ 0, 0, 32, 33, 34, 35, 36, 0, 0, 37,
+ 38, 0, 1, 380, 0, 0, 0, 0, 40, 41,
+ 0, 0, 0, 319, 42, 2, 0, 43, 3, 4,
+ 0, 0, 5, 6, 7, 8, 9, 10, 11, 0,
+ 12, 0, 13, 0, 15, 0, 0, 0, 16, 17,
+ 18, 19, 0, 0, 0, 0, 0, 0, 0, 0,
+ 23, 0, 25, 0, 0, 0, 0, 0, 0, 28,
+ 29, 30, 0, 0, 0, 0, 0, 0, 31, 0,
+ 0, 0, 0, 0, 0, 32, 33, 34, 35, 36,
+ 0, 0, 1, 38, 0, 0, 0, 0, 0, 0,
+ 0, 40, 41, 0, 0, 2, 0, 42, 3, 4,
+ 43, 0, 5, 0, 7, 8, 9, 65, 11, 0,
+ 12, 0, 0, 0, 15, 0, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 81, 82, 83, 84,
+ 66, 2, 25, 0, 3, 4, 0, 0, 5, 0,
+ 7, 8, 9, 65, 11, 0, 12, 0, 31, 0,
+ 15, 0, 0, 0, 0, 32, 33, 34, 35, 36,
+ 0, 0, 81, 0, 83, 0, 66, 0, 25, 0,
+ 0, 40, 41, 0, 0, 0, 0, 42, 0, 0,
+ 43, 0, 0, 0, 31, 0, 0, 0, 0, 0,
+ 0, 32, 33, 34, 35, 36, 0, 0, 1, 0,
+ 0, 0, 0, 0, 0, 0, 0, 40, 41, 0,
+ 0, 2, 0, 42, 3, 4, 43, 0, 5, 0,
+ 7, 8, 9, 153, 11, 0, 12, 0, 0, 0,
+ 15, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 66, 2, 25, 0,
+ 3, 4, 0, 89, 5, 0, 7, 8, 9, 65,
+ 11, 0, 12, 0, 31, 0, 15, 0, 0, 0,
+ 0, 32, 33, 34, 35, 36, 0, 0, 0, 0,
+ 302, 0, 66, 0, 25, 0, 0, 40, 41, 0,
+ 0, 0, 0, 42, -165, -165, 43, 0, 0, 0,
+ 31, 0, 0, 323, 0, 0, 325, 32, 33, 34,
+ 35, 36, 330, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 40, 41, 0, 336, 2, 0, 42,
+ 3, 4, 43, 0, 5, 0, 7, 8, 9, 65,
+ 11, 0, 12, 353, 0, 0, 15, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 66, 368, 25, 0, 0, 371, -34, 0,
+ 0, 0, 0, 376, 0, 0, 0, 379, 0, 0,
+ 31, 0, 0, 0, 0, 0, 0, 32, 33, 34,
+ 35, 36, 0, 0, 0, 128, 129, 130, 131, 132,
+ 133, 0, 134, 40, 41, 135, 136, 137, 0, 42,
+ 0, 0, 43, 81, 0, 83, 0, 0, 0, 0,
+ 0, 138, 139, 140, 141, 142, 143, 144, 0, 128,
+ 129, 130, 131, 132, 133, 0, 134, 0, 0, 135,
+ 136, 137, 0, 0, 0, 0, 0, 0, 183, 0,
+ 0, 0, 0, 0, 184, 138, 139, 140, 141, 142,
+ 143, 144, 128, 129, 130, 131, 132, 133, 0, 134,
+ 0, 0, 135, 136, 137, 0, 0, 0, 0, 0,
+ 0, 185, 0, 0, 0, 0, 0, 186, 138, 139,
+ 140, 141, 142, 143, 144, 128, 129, 130, 131, 132,
+ 133, 0, 134, 0, 0, 135, 136, 137, 0, 0,
+ 0, 0, 0, 0, 187, 0, 0, 0, 0, 0,
+ 188, 138, 139, 140, 141, 142, 143, 144, 128, 129,
+ 130, 131, 132, 133, 0, 134, 0, 0, 135, 136,
+ 137, 0, 0, 0, 0, 0, 0, 189, 0, 0,
+ 0, 0, 0, 190, 138, 139, 140, 141, 142, 143,
144, 128, 129, 130, 131, 132, 133, 0, 134, 0,
0, 135, 136, 137, 0, 0, 0, 0, 0, 0,
- 185, 0, 0, 0, 0, 0, 186, 138, 139, 140,
+ 295, 0, 0, 0, 0, 0, 0, 138, 139, 140,
141, 142, 143, 144, 128, 129, 130, 131, 132, 133,
0, 134, 0, 0, 135, 136, 137, 0, 0, 0,
- 0, 0, 0, 187, 0, 0, 0, 0, 0, 188,
+ 0, 0, 0, 296, 0, 0, 0, 0, 0, 0,
138, 139, 140, 141, 142, 143, 144, 128, 129, 130,
131, 132, 133, 0, 134, 0, 0, 135, 136, 137,
- 0, 0, 0, 0, 0, 0, 189, 0, 0, 0,
- 0, 0, 190, 138, 139, 140, 141, 142, 143, 144,
+ 0, 0, 0, 0, 0, 0, 297, 0, 0, 0,
+ 0, 0, 0, 138, 139, 140, 141, 142, 143, 144,
128, 129, 130, 131, 132, 133, 0, 134, 0, 0,
- 135, 136, 137, 0, 0, 0, 0, 0, 0, 295,
+ 135, 136, 137, 0, 0, 0, 0, 0, 0, 298,
0, 0, 0, 0, 0, 0, 138, 139, 140, 141,
142, 143, 144, 128, 129, 130, 131, 132, 133, 0,
134, 0, 0, 135, 136, 137, 0, 0, 0, 0,
- 0, 0, 296, 0, 0, 0, 0, 0, 0, 138,
+ 0, 0, 0, 0, 0, 0, 0, 0, 193, 138,
139, 140, 141, 142, 143, 144, 128, 129, 130, 131,
132, 133, 0, 134, 0, 0, 135, 136, 137, 0,
- 0, 0, 0, 0, 0, 297, 0, 0, 0, 0,
- 0, 0, 138, 139, 140, 141, 142, 143, 144, 128,
- 129, 130, 131, 132, 133, 0, 134, 0, 0, 135,
- 136, 137, 0, 0, 0, 0, 0, 0, 298, 0,
- 0, 0, 0, 0, 0, 138, 139, 140, 141, 142,
- 143, 144, 128, 129, 130, 131, 132, 133, 0, 134,
- 0, 0, 135, 136, 137, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 193, 138, 139,
- 140, 141, 142, 143, 144, 128, 129, 130, 131, 132,
- 133, 0, 134, 0, 0, 135, 136, 137, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 138, 139, 140, 141, 142, 143, 144, 179, 194,
- 0, 0, 0, 0, 128, 129, 130, 131, 132, 133,
- 0, 134, 0, 0, 135, 136, 137, 128, 129, 130,
- 131, 132, 133, 0, 134, 0, 0, 135, 136, 137,
- 138, 139, 140, 141, 142, 143, 144, 0, 0, 0,
- 0, 0, 0, 138, 139, 140, 141, 142, 143, 144,
- 0, 0, 0, 198, 128, 129, 130, 131, 132, 133,
- 0, 134, 0, 0, 135, 136, 137, 0, 0, 0,
- 0, 0, 191, 192, 0, 0, 0, 0, 0, 0,
- 138, 139, 140, 141, 142, 143, 144, 128, 129, 130,
- 131, 132, 133, 0, 134, 0, 0, 135, 136, 137,
- 128, 129, 130, 131, 0, 0, 0, 134, 0, 0,
- 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
- 0, 0, 0, 0, 0, 0, 138, 139, 140, 141,
- 142, 143, 144
+ 0, 0, 138, 139, 140, 141, 142, 143, 144, 179,
+ 194, 0, 0, 0, 0, 128, 129, 130, 131, 132,
+ 133, 0, 134, 0, 0, 135, 136, 137, 128, 129,
+ 130, 131, 132, 133, 0, 134, 0, 0, 135, 136,
+ 137, 138, 139, 140, 141, 142, 143, 144, 0, 0,
+ 0, 0, 0, 0, 138, 139, 140, 141, 142, 143,
+ 144, 0, 0, 0, 198, 128, 129, 130, 131, 132,
+ 133, 0, 134, 0, 0, 135, 136, 137, 0, 0,
+ 0, 0, 0, 191, 192, 0, 0, 0, 0, 0,
+ 0, 138, 139, 140, 141, 142, 143, 144, 128, 129,
+ 130, 131, 132, 133, 0, 134, 0, 0, 135, 136,
+ 137, 128, 129, 130, 131, 0, 0, 0, 134, 0,
+ 0, 135, 136, 137, 138, 139, 140, 141, 142, 143,
+ 144, 0, 0, 0, 0, 0, 0, 138, 139, 140,
+ 141, 142, 143, 144
};
static const yytype_int16 yycheck[] =
{
- 6, 7, 78, 330, 10, 284, 24, 4, 26, 95,
- 157, 8, 18, 47, 68, 0, 92, 23, 29, 42,
- 50, 95, 28, 29, 98, 31, 32, 33, 34, 35,
- 36, 37, 6, 7, 40, 41, 42, 43, 92, 93,
- 63, 96, 55, 56, 50, 372, 101, 326, 50, 24,
- 358, 26, 95, 1, 26, 98, 74, 75, 76, 77,
- 66, 67, 370, 24, 70, 26, 14, 375, 74, 17,
- 18, 77, 53, 21, 85, 81, 73, 26, 26, 27,
- 0, 29, 63, 246, 68, 26, 27, 71, 29, 96,
- 101, 35, 36, 67, 53, 68, 70, 94, 95, 74,
- 75, 76, 77, 77, 63, 89, 90, 91, 92, 93,
- 98, 53, 95, 74, 75, 76, 77, 90, 91, 92,
- 93, 63, 128, 129, 130, 131, 132, 133, 134, 135,
- 136, 137, 138, 139, 140, 141, 142, 143, 144, 286,
- 146, 126, 53, 53, 150, 17, 18, 19, 96, 155,
- 26, 99, 63, 63, 26, 161, 95, 97, 98, 98,
- 236, 33, 98, 169, 170, 171, 45, 164, 174, 175,
+ 6, 7, 29, 157, 10, 78, 330, 4, 47, 96,
+ 53, 8, 18, 0, 101, 284, 95, 23, 68, 92,
+ 63, 71, 28, 29, 42, 31, 32, 33, 34, 35,
+ 36, 37, 6, 7, 40, 41, 42, 43, 307, 89,
+ 90, 91, 92, 93, 50, 63, 50, 371, 50, 24,
+ 0, 26, 96, 1, 24, 26, 26, 26, 85, 95,
+ 66, 67, 98, 24, 70, 26, 14, 68, 74, 17,
+ 18, 77, 357, 21, 101, 81, 73, 53, 26, 27,
+ 95, 29, 236, 246, 369, 53, 68, 63, 98, 374,
+ 163, 92, 93, 67, 26, 63, 70, 94, 95, 74,
+ 75, 76, 77, 77, 74, 75, 76, 77, 90, 91,
+ 92, 93, 98, 74, 75, 76, 77, 26, 27, 45,
+ 29, 26, 128, 129, 130, 131, 132, 133, 134, 135,
+ 136, 137, 138, 139, 140, 141, 142, 143, 144, 126,
+ 146, 17, 18, 19, 150, 26, 53, 26, 96, 155,
+ 26, 99, 53, 55, 56, 161, 63, 33, 95, 97,
+ 98, 98, 63, 169, 170, 171, 52, 164, 174, 175,
176, 177, 178, 179, 337, 97, 98, 183, 184, 185,
- 186, 187, 188, 189, 190, 191, 192, 96, 97, 98,
- 97, 98, 355, 199, 200, 201, 26, 203, 26, 280,
- 97, 98, 365, 165, 166, 167, 26, 52, 371, 26,
- 26, 26, 101, 101, 100, 98, 98, 26, 98, 52,
- 47, 98, 303, 299, 300, 306, 26, 98, 26, 43,
- 26, 312, 26, 309, 101, 26, 86, 26, 244, 245,
- 53, 34, 85, 249, 250, 84, 98, 53, 26, 84,
- 52, 126, 269, 311, 283, 336, 194, 204, 334, -1,
- -1, -1, 343, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 34, -1, -1, 283, 354, -1,
- -1, 287, -1, 364, -1, -1, -1, 368, -1, 295,
- 296, 297, 298, 374, -1, -1, 293, 378, -1, -1,
- -1, 61, 62, 63, 64, 65, 66, -1, 68, -1,
- -1, 71, 72, 73, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 331, 332, 87, 88, 89,
- 90, 91, 92, 93, 0, 1, -1, -1, 344, -1,
- -1, -1, -1, -1, -1, 351, -1, -1, 14, -1,
- -1, 17, 18, -1, 360, 21, 22, 23, 24, 25,
- 26, 27, -1, 29, 30, 31, -1, 33, 34, 35,
- 36, 37, 38, 39, 40, 41, -1, 43, -1, 45,
- 46, 47, -1, 49, 50, 51, 52, 53, 54, 55,
+ 186, 187, 188, 189, 190, 191, 192, 95, 35, 36,
+ 98, 354, 26, 199, 200, 201, 26, 203, 96, 97,
+ 98, 364, 165, 166, 167, 97, 98, 370, 97, 98,
+ 26, 101, 26, 101, 98, 100, 98, 52, 98, 47,
+ 98, 98, 26, 43, 26, 26, 299, 300, 26, 101,
+ 26, 86, 26, 85, 1, 53, 309, 34, 244, 245,
+ 84, 98, 53, 249, 250, 26, 84, 14, 269, 52,
+ 17, 18, 126, 194, 21, 311, 23, 24, 25, 26,
+ 27, 334, 29, 283, 204, -1, 33, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 283, -1, -1,
+ 353, 287, 49, -1, 51, -1, -1, -1, -1, 295,
+ 296, 297, 298, -1, -1, -1, 293, -1, -1, -1,
+ 67, -1, -1, -1, -1, -1, -1, 74, 75, 76,
+ 77, 78, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 90, 91, 331, 332, -1, -1, 96,
+ 97, 98, 99, 0, 1, -1, -1, -1, 344, -1,
+ -1, -1, -1, -1, 350, -1, -1, 14, -1, -1,
+ 17, 18, -1, 359, 21, 22, 23, 24, 25, 26,
+ 27, -1, 29, 30, 31, -1, 33, 34, 35, 36,
+ 37, 38, 39, 40, 41, -1, 43, -1, 45, 46,
+ 47, -1, 49, 50, 51, 52, 53, 54, 55, -1,
+ -1, 58, 59, 60, 61, 62, 63, 64, 65, 66,
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ 77, 78, 79, 80, 81, 82, -1, 84, 85, 86,
+ 87, 88, 89, 90, 91, 92, 93, 1, 95, 96,
+ 97, 98, 99, 100, -1, -1, -1, -1, -1, -1,
+ 14, -1, 43, 17, 18, -1, -1, 21, -1, 23,
+ 24, 25, 26, 27, -1, 29, -1, -1, -1, 33,
+ 61, 62, 63, 64, 65, 66, -1, 68, 69, 70,
+ 71, 72, 73, -1, -1, 49, -1, 51, -1, -1,
+ -1, -1, -1, -1, -1, -1, 87, 88, 89, 90,
+ 91, 92, 93, 67, -1, -1, -1, -1, -1, -1,
+ 74, 75, 76, 77, 78, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 0, 1, 90, 91, -1, -1,
+ -1, -1, 96, -1, -1, 99, 100, 101, 14, -1,
+ -1, 17, 18, -1, -1, 21, 22, 23, 24, 25,
+ 26, 27, -1, 29, 30, 31, -1, 33, -1, 35,
+ 36, 37, 38, 39, 40, 41, -1, -1, -1, -1,
+ 46, -1, -1, 49, 50, 51, -1, -1, 54, -1,
-1, -1, 58, 59, 60, 61, 62, 63, 64, 65,
- 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
- 76, 77, 78, 79, 80, 81, 82, -1, 84, 85,
- 86, 87, 88, 89, 90, 91, 92, 93, 1, 95,
- 96, 97, 98, 99, 100, -1, -1, -1, -1, -1,
- -1, 14, -1, 43, 17, 18, -1, -1, 21, -1,
- 23, 24, 25, 26, 27, -1, 29, -1, -1, -1,
- 33, 61, 62, 63, 64, 65, 66, -1, 68, 69,
- 70, 71, 72, 73, -1, -1, 49, -1, 51, -1,
- -1, -1, -1, -1, -1, -1, -1, 87, 88, 89,
- 90, 91, 92, 93, 67, -1, -1, -1, -1, -1,
- -1, 74, 75, 76, 77, 78, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 0, 1, 90, 91, -1,
- -1, -1, -1, 96, -1, -1, 99, 100, 101, 14,
+ 66, 67, 68, -1, -1, 71, 72, 73, 74, 75,
+ 76, 77, 78, -1, -1, 81, 82, -1, 84, 85,
+ 86, 87, 88, 89, 90, 91, 92, 93, -1, 95,
+ 96, 0, 1, 99, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 14, -1, -1, 17, 18,
+ -1, -1, 21, 22, 23, 24, 25, 26, 27, -1,
+ 29, 30, 31, -1, 33, -1, 35, 36, 37, 38,
+ 39, 40, 41, -1, -1, -1, -1, 46, -1, -1,
+ 49, 50, 51, -1, -1, 54, -1, -1, -1, 58,
+ 59, 60, -1, -1, -1, -1, -1, -1, 67, -1,
+ -1, -1, -1, -1, -1, 74, 75, 76, 77, 78,
+ -1, -1, 81, 82, -1, 84, 85, 86, 0, 1,
+ -1, 90, 91, -1, -1, -1, 95, 96, -1, 98,
+ 99, -1, 14, -1, -1, 17, 18, -1, -1, 21,
+ 22, 23, 24, 25, 26, 27, -1, 29, 30, 31,
+ -1, 33, -1, 35, 36, 37, 38, 39, 40, 41,
+ -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
+ -1, -1, 54, -1, -1, -1, 58, 59, 60, -1,
+ -1, -1, -1, -1, -1, 67, -1, -1, -1, -1,
+ -1, -1, 74, 75, 76, 77, 78, -1, -1, 81,
+ 82, -1, 84, 85, 86, 0, 1, -1, 90, 91,
+ -1, -1, -1, 95, 96, -1, 98, 99, -1, 14,
-1, -1, 17, 18, -1, -1, 21, 22, 23, 24,
- 25, 26, 27, -1, 29, 30, 31, -1, 33, -1,
- 35, 36, 37, 38, 39, 40, 41, -1, -1, -1,
+ 25, 26, 27, -1, 29, -1, 31, 32, 33, -1,
+ -1, -1, 37, 38, 39, 40, 41, -1, -1, 44,
-1, 46, -1, -1, 49, 50, 51, -1, -1, 54,
- -1, -1, -1, 58, 59, 60, 61, 62, 63, 64,
- 65, 66, 67, 68, -1, -1, 71, 72, 73, 74,
- 75, 76, 77, 78, -1, -1, 81, 82, -1, 84,
- 85, 86, 87, 88, 89, 90, 91, 92, 93, -1,
- 95, 96, 0, 1, 99, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 14, -1, -1, 17,
- 18, -1, -1, 21, 22, 23, 24, 25, 26, 27,
- -1, 29, 30, 31, -1, 33, -1, 35, 36, 37,
- 38, 39, 40, 41, -1, -1, -1, -1, 46, -1,
- -1, 49, 50, 51, -1, -1, 54, -1, -1, -1,
- 58, 59, 60, -1, -1, -1, -1, -1, -1, 67,
- -1, -1, -1, -1, -1, -1, 74, 75, 76, 77,
- 78, -1, -1, 81, 82, -1, 84, 85, 86, 0,
- 1, -1, 90, 91, -1, -1, -1, 95, 96, -1,
- 98, 99, -1, 14, -1, -1, 17, 18, -1, -1,
+ -1, -1, 57, 58, 59, 60, -1, -1, -1, -1,
+ -1, -1, 67, -1, -1, -1, -1, -1, -1, 74,
+ 75, 76, 77, 78, -1, -1, 81, 82, 83, 0,
+ 1, -1, -1, -1, -1, 90, 91, -1, -1, -1,
+ 95, 96, -1, 14, 99, -1, 17, 18, -1, -1,
21, 22, 23, 24, 25, 26, 27, -1, 29, 30,
- 31, -1, 33, -1, 35, 36, 37, 38, 39, 40,
- 41, -1, -1, -1, -1, 46, -1, -1, 49, 50,
- 51, -1, -1, 54, -1, -1, -1, 58, 59, 60,
- -1, -1, -1, -1, -1, -1, 67, -1, -1, -1,
- -1, -1, -1, 74, 75, 76, 77, 78, -1, -1,
- 81, 82, -1, 84, 85, 86, 0, 1, -1, 90,
- 91, -1, -1, -1, 95, 96, -1, 98, 99, -1,
- 14, -1, -1, 17, 18, -1, -1, 21, 22, 23,
- 24, 25, 26, 27, -1, 29, -1, 31, 32, 33,
- -1, -1, -1, 37, 38, 39, 40, 41, -1, -1,
- 44, -1, 46, -1, -1, 49, 50, 51, -1, -1,
- 54, -1, -1, 57, 58, 59, 60, -1, -1, -1,
- -1, -1, -1, 67, -1, -1, -1, -1, -1, -1,
- 74, 75, 76, 77, 78, -1, -1, 81, 82, 83,
- 0, 1, -1, -1, -1, -1, 90, 91, -1, -1,
- -1, 95, 96, -1, 14, 99, -1, 17, 18, -1,
- -1, 21, 22, 23, 24, 25, 26, 27, -1, 29,
- 30, 31, -1, 33, -1, -1, -1, 37, 38, 39,
- 40, 41, -1, -1, -1, -1, 46, -1, -1, 49,
- 50, 51, -1, -1, 54, -1, -1, -1, 58, 59,
- 60, -1, -1, -1, -1, -1, -1, 67, -1, -1,
- -1, -1, -1, -1, 74, 75, 76, 77, 78, -1,
- -1, 81, 82, 0, 1, -1, -1, -1, -1, -1,
- 90, 91, -1, -1, -1, 95, 96, 14, -1, 99,
- 17, 18, -1, -1, 21, 22, 23, 24, 25, 26,
- 27, -1, 29, -1, 31, -1, 33, -1, -1, -1,
- 37, 38, 39, 40, 41, -1, -1, -1, -1, 46,
- -1, -1, 49, 50, 51, -1, -1, 54, -1, -1,
- -1, 58, 59, 60, -1, -1, -1, -1, -1, -1,
- 67, -1, -1, -1, -1, -1, -1, 74, 75, 76,
- 77, 78, -1, -1, 81, 82, 0, 1, -1, -1,
- -1, -1, -1, 90, 91, -1, -1, -1, 95, 96,
- 14, -1, 99, 17, 18, -1, -1, 21, 22, 23,
- 24, 25, 26, 27, -1, 29, -1, 31, -1, 33,
- -1, -1, -1, 37, 38, 39, 40, 41, -1, -1,
- -1, -1, 46, -1, -1, 49, 50, 51, -1, -1,
- 54, -1, -1, -1, 58, 59, 60, -1, -1, -1,
- -1, -1, -1, 67, -1, -1, -1, -1, -1, -1,
- 74, 75, 76, 77, 78, -1, -1, 81, 82, -1,
- 1, -1, -1, -1, -1, -1, 90, 91, -1, -1,
- -1, 95, 96, 14, -1, 99, 17, 18, -1, -1,
- 21, 22, 23, 24, 25, 26, 27, -1, 29, -1,
- 31, -1, 33, -1, 35, 36, 37, 38, 39, 40,
- 41, -1, -1, -1, -1, 46, -1, -1, 49, 50,
- 51, -1, -1, 54, -1, -1, -1, 58, 59, 60,
- -1, -1, -1, -1, -1, -1, 67, -1, -1, -1,
- -1, -1, -1, 74, 75, 76, 77, 78, -1, -1,
- 81, 82, -1, 84, 1, -1, -1, -1, -1, 90,
- 91, -1, -1, -1, 95, 96, -1, 14, 99, -1,
- 17, 18, -1, -1, 21, 22, 23, 24, 25, 26,
- 27, -1, 29, -1, 31, -1, 33, -1, -1, -1,
- 37, 38, 39, 40, 41, -1, -1, -1, -1, 46,
- -1, -1, 49, 50, 51, -1, -1, 54, -1, -1,
- -1, 58, 59, 60, -1, -1, -1, -1, -1, -1,
- 67, -1, -1, -1, -1, -1, -1, 74, 75, 76,
- 77, 78, -1, -1, 81, 82, -1, 1, -1, 86,
- -1, -1, -1, 90, 91, -1, -1, -1, 95, 96,
- 14, -1, 99, 17, 18, -1, -1, 21, 22, 23,
- 24, 25, 26, 27, -1, 29, -1, 31, -1, 33,
- -1, -1, -1, 37, 38, 39, 40, 41, -1, -1,
- -1, -1, 46, -1, -1, 49, 50, 51, -1, -1,
- 54, -1, -1, -1, 58, 59, 60, -1, -1, -1,
- -1, -1, -1, 67, -1, -1, -1, -1, -1, -1,
- 74, 75, 76, 77, 78, -1, -1, 81, 82, -1,
- 1, 85, -1, -1, -1, -1, 90, 91, -1, -1,
- -1, 95, 96, 14, -1, 99, 17, 18, -1, -1,
- 21, 22, 23, 24, 25, 26, 27, -1, 29, -1,
31, -1, 33, -1, -1, -1, 37, 38, 39, 40,
41, -1, -1, -1, -1, 46, -1, -1, 49, 50,
51, -1, -1, 54, -1, -1, -1, 58, 59, 60,
-1, -1, -1, -1, -1, -1, 67, -1, -1, -1,
-1, -1, -1, 74, 75, 76, 77, 78, -1, -1,
- 81, 82, -1, 84, 1, -1, -1, -1, -1, 90,
- 91, -1, -1, -1, 95, 96, -1, 14, 99, -1,
- 17, 18, -1, -1, 21, 22, 23, 24, 25, 26,
- 27, -1, 29, -1, 31, -1, 33, -1, -1, -1,
- 37, 38, 39, 40, 41, -1, -1, -1, -1, 46,
- -1, -1, 49, 50, 51, -1, -1, 54, -1, -1,
- -1, 58, 59, 60, -1, -1, -1, -1, -1, -1,
- 67, -1, -1, -1, -1, -1, -1, 74, 75, 76,
- 77, 78, -1, -1, 81, 82, -1, 1, 85, -1,
- -1, -1, -1, 90, 91, -1, -1, -1, 95, 96,
- 14, -1, 99, 17, 18, -1, -1, 21, 22, 23,
- 24, 25, 26, 27, -1, 29, -1, 31, -1, 33,
- -1, -1, -1, 37, 38, 39, 40, 41, -1, -1,
- -1, -1, 46, -1, -1, 49, 50, 51, -1, -1,
- 54, -1, -1, -1, 58, 59, 60, -1, -1, -1,
- -1, -1, -1, 67, -1, -1, -1, -1, -1, -1,
- 74, 75, 76, 77, 78, -1, -1, 81, 82, -1,
- 1, 85, -1, -1, -1, -1, 90, 91, -1, -1,
- -1, 95, 96, 14, -1, 99, 17, 18, -1, -1,
- 21, 22, 23, 24, 25, 26, 27, -1, 29, -1,
- 31, -1, 33, -1, -1, -1, 37, 38, 39, 40,
- 41, -1, -1, -1, -1, 46, -1, -1, 49, 50,
- 51, -1, -1, 54, -1, -1, -1, 58, 59, 60,
- -1, -1, -1, -1, -1, -1, 67, -1, -1, -1,
- -1, -1, -1, 74, 75, 76, 77, 78, -1, -1,
- 81, 82, -1, 1, 85, -1, -1, -1, -1, 90,
+ 81, 82, 0, 1, -1, -1, -1, -1, -1, 90,
91, -1, -1, -1, 95, 96, 14, -1, 99, 17,
18, -1, -1, 21, 22, 23, 24, 25, 26, 27,
-1, 29, -1, 31, -1, 33, -1, -1, -1, 37,
- 38, 39, 40, -1, -1, -1, -1, -1, -1, -1,
- -1, 49, -1, 51, -1, -1, -1, -1, -1, -1,
+ 38, 39, 40, 41, -1, -1, -1, -1, 46, -1,
+ -1, 49, 50, 51, -1, -1, 54, -1, -1, -1,
+ 58, 59, 60, -1, -1, -1, -1, -1, -1, 67,
+ -1, -1, -1, -1, -1, -1, 74, 75, 76, 77,
+ 78, -1, -1, 81, 82, 0, 1, -1, -1, -1,
+ -1, -1, 90, 91, -1, -1, -1, 95, 96, 14,
+ -1, 99, 17, 18, -1, -1, 21, 22, 23, 24,
+ 25, 26, 27, -1, 29, -1, 31, -1, 33, -1,
+ -1, -1, 37, 38, 39, 40, 41, -1, -1, -1,
+ -1, 46, -1, -1, 49, 50, 51, -1, -1, 54,
+ -1, -1, -1, 58, 59, 60, -1, -1, -1, -1,
+ -1, -1, 67, -1, -1, -1, -1, -1, -1, 74,
+ 75, 76, 77, 78, -1, -1, 81, 82, -1, 1,
+ -1, -1, -1, -1, -1, 90, 91, -1, -1, -1,
+ 95, 96, 14, -1, 99, 17, 18, -1, -1, 21,
+ 22, 23, 24, 25, 26, 27, -1, 29, -1, 31,
+ -1, 33, -1, 35, 36, 37, 38, 39, 40, 41,
+ -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
+ -1, -1, 54, -1, -1, -1, 58, 59, 60, -1,
+ -1, -1, -1, -1, -1, 67, -1, -1, -1, -1,
+ -1, -1, 74, 75, 76, 77, 78, -1, -1, 81,
+ 82, -1, 84, 1, -1, -1, -1, -1, 90, 91,
+ -1, -1, -1, 95, 96, -1, 14, 99, -1, 17,
+ 18, -1, -1, 21, 22, 23, 24, 25, 26, 27,
+ -1, 29, -1, 31, -1, 33, -1, -1, -1, 37,
+ 38, 39, 40, 41, -1, -1, -1, -1, 46, -1,
+ -1, 49, 50, 51, -1, -1, 54, -1, -1, -1,
58, 59, 60, -1, -1, -1, -1, -1, -1, 67,
-1, -1, -1, -1, -1, -1, 74, 75, 76, 77,
- 78, -1, -1, 1, 82, -1, -1, -1, -1, -1,
- -1, -1, 90, 91, -1, -1, 14, -1, 96, 17,
- 18, 99, -1, 21, -1, 23, 24, 25, 26, 27,
- -1, 29, -1, -1, -1, 33, -1, -1, -1, 1,
- -1, -1, -1, -1, -1, -1, -1, 45, 46, 47,
- 48, 49, 14, 51, -1, 17, 18, -1, -1, 21,
- -1, 23, 24, 25, 26, 27, -1, 29, -1, 67,
- -1, 33, -1, -1, -1, -1, 74, 75, 76, 77,
- 78, -1, -1, 45, -1, 47, -1, 49, -1, 51,
- -1, -1, 90, 91, -1, -1, -1, -1, 96, -1,
- -1, 99, -1, -1, -1, 67, -1, -1, -1, -1,
- -1, -1, 74, 75, 76, 77, 78, -1, -1, 1,
- -1, -1, -1, -1, -1, -1, -1, -1, 90, 91,
- -1, -1, 14, -1, 96, 17, 18, 99, -1, 21,
- -1, 23, 24, 25, 26, 27, -1, 29, -1, -1,
- -1, 33, -1, -1, -1, 1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 49, 14, 51,
- -1, 17, 18, -1, -1, 21, -1, 23, 24, 25,
- 26, 27, -1, 29, -1, 67, -1, 33, -1, -1,
- -1, -1, 74, 75, 76, 77, 78, -1, -1, -1,
- -1, -1, -1, 49, -1, 51, -1, -1, 90, 91,
- -1, -1, -1, -1, 96, 97, 98, 99, -1, -1,
- -1, 67, -1, -1, -1, -1, -1, -1, 74, 75,
- 76, 77, 78, -1, -1, -1, -1, -1, -1, -1,
- -1, 1, -1, -1, 90, 91, -1, -1, -1, -1,
- 96, 97, 98, 99, 14, -1, -1, 17, 18, -1,
- 20, 21, -1, 23, 24, 25, 26, 27, -1, 29,
- -1, -1, -1, 33, -1, -1, -1, 1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 49,
- 14, 51, -1, 17, 18, -1, -1, 21, -1, 23,
- 24, 25, 26, 27, -1, 29, -1, 67, -1, 33,
- -1, -1, -1, -1, 74, 75, 76, 77, 78, -1,
- -1, -1, -1, -1, -1, 49, -1, 51, -1, -1,
- 90, 91, -1, -1, -1, -1, 96, -1, -1, 99,
- -1, -1, 45, 67, 47, -1, -1, -1, -1, -1,
- 74, 75, 76, 77, 78, -1, -1, -1, 61, 62,
- 63, 64, 65, 66, -1, 68, 90, 91, 71, 72,
- 73, -1, 96, -1, -1, 99, -1, 47, -1, -1,
+ 78, -1, -1, 81, 82, -1, 1, -1, 86, -1,
+ -1, -1, 90, 91, -1, -1, -1, 95, 96, 14,
+ -1, 99, 17, 18, -1, -1, 21, 22, 23, 24,
+ 25, 26, 27, -1, 29, -1, 31, -1, 33, -1,
+ -1, -1, 37, 38, 39, 40, 41, -1, -1, -1,
+ -1, 46, -1, -1, 49, 50, 51, -1, -1, 54,
+ -1, -1, -1, 58, 59, 60, -1, -1, -1, -1,
+ -1, -1, 67, -1, -1, -1, -1, -1, -1, 74,
+ 75, 76, 77, 78, -1, -1, 81, 82, -1, 1,
+ 85, -1, -1, -1, -1, 90, 91, -1, -1, -1,
+ 95, 96, 14, -1, 99, 17, 18, -1, -1, 21,
+ 22, 23, 24, 25, 26, 27, -1, 29, -1, 31,
+ -1, 33, -1, -1, -1, 37, 38, 39, 40, 41,
+ -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
+ -1, -1, 54, -1, -1, -1, 58, 59, 60, -1,
+ -1, -1, -1, -1, -1, 67, -1, -1, -1, -1,
+ -1, -1, 74, 75, 76, 77, 78, -1, -1, 81,
+ 82, -1, 84, 1, -1, -1, -1, -1, 90, 91,
+ -1, -1, -1, 95, 96, -1, 14, 99, -1, 17,
+ 18, -1, -1, 21, 22, 23, 24, 25, 26, 27,
+ -1, 29, -1, 31, -1, 33, -1, -1, -1, 37,
+ 38, 39, 40, 41, -1, -1, -1, -1, 46, -1,
+ -1, 49, 50, 51, -1, -1, 54, -1, -1, -1,
+ 58, 59, 60, -1, -1, -1, -1, -1, -1, 67,
+ -1, -1, -1, -1, -1, -1, 74, 75, 76, 77,
+ 78, -1, -1, 81, 82, -1, 1, 85, -1, -1,
+ -1, -1, 90, 91, -1, -1, -1, 95, 96, 14,
+ -1, 99, 17, 18, -1, -1, 21, 22, 23, 24,
+ 25, 26, 27, -1, 29, -1, 31, -1, 33, -1,
+ -1, -1, 37, 38, 39, 40, 41, -1, -1, -1,
+ -1, 46, -1, -1, 49, 50, 51, -1, -1, 54,
+ -1, -1, -1, 58, 59, 60, -1, -1, -1, -1,
+ -1, -1, 67, -1, -1, -1, -1, -1, -1, 74,
+ 75, 76, 77, 78, -1, -1, 81, 82, -1, 1,
+ 85, -1, -1, -1, -1, 90, 91, -1, -1, -1,
+ 95, 96, 14, -1, 99, 17, 18, -1, -1, 21,
+ 22, 23, 24, 25, 26, 27, -1, 29, -1, 31,
+ -1, 33, -1, -1, -1, 37, 38, 39, 40, 41,
+ -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
+ -1, -1, 54, -1, -1, -1, 58, 59, 60, -1,
+ -1, -1, -1, -1, -1, 67, -1, -1, -1, -1,
+ -1, -1, 74, 75, 76, 77, 78, -1, -1, 81,
+ 82, -1, 1, 85, -1, -1, -1, -1, 90, 91,
+ -1, -1, -1, 95, 96, 14, -1, 99, 17, 18,
+ -1, -1, 21, 22, 23, 24, 25, 26, 27, -1,
+ 29, -1, 31, -1, 33, -1, -1, -1, 37, 38,
+ 39, 40, -1, -1, -1, -1, -1, -1, -1, -1,
+ 49, -1, 51, -1, -1, -1, -1, -1, -1, 58,
+ 59, 60, -1, -1, -1, -1, -1, -1, 67, -1,
+ -1, -1, -1, -1, -1, 74, 75, 76, 77, 78,
+ -1, -1, 1, 82, -1, -1, -1, -1, -1, -1,
+ -1, 90, 91, -1, -1, 14, -1, 96, 17, 18,
+ 99, -1, 21, -1, 23, 24, 25, 26, 27, -1,
+ 29, -1, -1, -1, 33, -1, -1, -1, 1, -1,
+ -1, -1, -1, -1, -1, -1, 45, 46, 47, 48,
+ 49, 14, 51, -1, 17, 18, -1, -1, 21, -1,
+ 23, 24, 25, 26, 27, -1, 29, -1, 67, -1,
+ 33, -1, -1, -1, -1, 74, 75, 76, 77, 78,
+ -1, -1, 45, -1, 47, -1, 49, -1, 51, -1,
+ -1, 90, 91, -1, -1, -1, -1, 96, -1, -1,
+ 99, -1, -1, -1, 67, -1, -1, -1, -1, -1,
+ -1, 74, 75, 76, 77, 78, -1, -1, 1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 90, 91, -1,
+ -1, 14, -1, 96, 17, 18, 99, -1, 21, -1,
+ 23, 24, 25, 26, 27, -1, 29, -1, -1, -1,
+ 33, -1, -1, -1, 1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 49, 14, 51, -1,
+ 17, 18, -1, 20, 21, -1, 23, 24, 25, 26,
+ 27, -1, 29, -1, 67, -1, 33, -1, -1, -1,
+ -1, 74, 75, 76, 77, 78, -1, -1, -1, -1,
+ 280, -1, 49, -1, 51, -1, -1, 90, 91, -1,
+ -1, -1, -1, 96, 97, 98, 99, -1, -1, -1,
+ 67, -1, -1, 303, -1, -1, 306, 74, 75, 76,
+ 77, 78, 312, -1, 1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 90, 91, -1, 326, 14, -1, 96,
+ 17, 18, 99, -1, 21, -1, 23, 24, 25, 26,
+ 27, -1, 29, 343, -1, -1, 33, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 49, 363, 51, -1, -1, 367, 34, -1,
+ -1, -1, -1, 373, -1, -1, -1, 377, -1, -1,
+ 67, -1, -1, -1, -1, -1, -1, 74, 75, 76,
+ 77, 78, -1, -1, -1, 61, 62, 63, 64, 65,
+ 66, -1, 68, 90, 91, 71, 72, 73, -1, 96,
+ -1, -1, 99, 45, -1, 47, -1, -1, -1, -1,
+ -1, 87, 88, 89, 90, 91, 92, 93, -1, 61,
+ 62, 63, 64, 65, 66, -1, 68, -1, -1, 71,
+ 72, 73, -1, -1, -1, -1, -1, -1, 47, -1,
+ -1, -1, -1, -1, 53, 87, 88, 89, 90, 91,
+ 92, 93, 61, 62, 63, 64, 65, 66, -1, 68,
+ -1, -1, 71, 72, 73, -1, -1, -1, -1, -1,
+ -1, 47, -1, -1, -1, -1, -1, 53, 87, 88,
+ 89, 90, 91, 92, 93, 61, 62, 63, 64, 65,
+ 66, -1, 68, -1, -1, 71, 72, 73, -1, -1,
+ -1, -1, -1, -1, 47, -1, -1, -1, -1, -1,
+ 53, 87, 88, 89, 90, 91, 92, 93, 61, 62,
+ 63, 64, 65, 66, -1, 68, -1, -1, 71, 72,
+ 73, -1, -1, -1, -1, -1, -1, 47, -1, -1,
-1, -1, -1, 53, 87, 88, 89, 90, 91, 92,
93, 61, 62, 63, 64, 65, 66, -1, 68, -1,
-1, 71, 72, 73, -1, -1, -1, -1, -1, -1,
- 47, -1, -1, -1, -1, -1, 53, 87, 88, 89,
+ 47, -1, -1, -1, -1, -1, -1, 87, 88, 89,
90, 91, 92, 93, 61, 62, 63, 64, 65, 66,
-1, 68, -1, -1, 71, 72, 73, -1, -1, -1,
- -1, -1, -1, 47, -1, -1, -1, -1, -1, 53,
+ -1, -1, -1, 47, -1, -1, -1, -1, -1, -1,
87, 88, 89, 90, 91, 92, 93, 61, 62, 63,
64, 65, 66, -1, 68, -1, -1, 71, 72, 73,
-1, -1, -1, -1, -1, -1, 47, -1, -1, -1,
- -1, -1, 53, 87, 88, 89, 90, 91, 92, 93,
+ -1, -1, -1, 87, 88, 89, 90, 91, 92, 93,
61, 62, 63, 64, 65, 66, -1, 68, -1, -1,
71, 72, 73, -1, -1, -1, -1, -1, -1, 47,
-1, -1, -1, -1, -1, -1, 87, 88, 89, 90,
91, 92, 93, 61, 62, 63, 64, 65, 66, -1,
68, -1, -1, 71, 72, 73, -1, -1, -1, -1,
- -1, -1, 47, -1, -1, -1, -1, -1, -1, 87,
+ -1, -1, -1, -1, -1, -1, -1, -1, 53, 87,
88, 89, 90, 91, 92, 93, 61, 62, 63, 64,
65, 66, -1, 68, -1, -1, 71, 72, 73, -1,
- -1, -1, -1, -1, -1, 47, -1, -1, -1, -1,
- -1, -1, 87, 88, 89, 90, 91, 92, 93, 61,
- 62, 63, 64, 65, 66, -1, 68, -1, -1, 71,
- 72, 73, -1, -1, -1, -1, -1, -1, 47, -1,
- -1, -1, -1, -1, -1, 87, 88, 89, 90, 91,
- 92, 93, 61, 62, 63, 64, 65, 66, -1, 68,
- -1, -1, 71, 72, 73, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 53, 87, 88,
- 89, 90, 91, 92, 93, 61, 62, 63, 64, 65,
- 66, -1, 68, -1, -1, 71, 72, 73, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 87, 88, 89, 90, 91, 92, 93, 55, 95,
- -1, -1, -1, -1, 61, 62, 63, 64, 65, 66,
- -1, 68, -1, -1, 71, 72, 73, 61, 62, 63,
- 64, 65, 66, -1, 68, -1, -1, 71, 72, 73,
- 87, 88, 89, 90, 91, 92, 93, -1, -1, -1,
- -1, -1, -1, 87, 88, 89, 90, 91, 92, 93,
- -1, -1, -1, 97, 61, 62, 63, 64, 65, 66,
- -1, 68, -1, -1, 71, 72, 73, -1, -1, -1,
- -1, -1, 79, 80, -1, -1, -1, -1, -1, -1,
- 87, 88, 89, 90, 91, 92, 93, 61, 62, 63,
- 64, 65, 66, -1, 68, -1, -1, 71, 72, 73,
- 61, 62, 63, 64, -1, -1, -1, 68, -1, -1,
- 71, 72, 73, 87, 88, 89, 90, 91, 92, 93,
- -1, -1, -1, -1, -1, -1, 87, 88, 89, 90,
- 91, 92, 93
+ -1, -1, 87, 88, 89, 90, 91, 92, 93, 55,
+ 95, -1, -1, -1, -1, 61, 62, 63, 64, 65,
+ 66, -1, 68, -1, -1, 71, 72, 73, 61, 62,
+ 63, 64, 65, 66, -1, 68, -1, -1, 71, 72,
+ 73, 87, 88, 89, 90, 91, 92, 93, -1, -1,
+ -1, -1, -1, -1, 87, 88, 89, 90, 91, 92,
+ 93, -1, -1, -1, 97, 61, 62, 63, 64, 65,
+ 66, -1, 68, -1, -1, 71, 72, 73, -1, -1,
+ -1, -1, -1, 79, 80, -1, -1, -1, -1, -1,
+ -1, 87, 88, 89, 90, 91, 92, 93, 61, 62,
+ 63, 64, 65, 66, -1, 68, -1, -1, 71, 72,
+ 73, 61, 62, 63, 64, -1, -1, -1, 68, -1,
+ -1, 71, 72, 73, 87, 88, 89, 90, 91, 92,
+ 93, -1, -1, -1, -1, -1, -1, 87, 88, 89,
+ 90, 91, 92, 93
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1634,40 +1624,40 @@ static const yytype_uint8 yystos[] =
41, 44, 46, 49, 50, 51, 54, 57, 58, 59,
60, 67, 74, 75, 76, 77, 78, 81, 82, 83,
90, 91, 96, 99, 103, 104, 105, 106, 107, 119,
- 125, 128, 129, 131, 132, 133, 140, 142, 144, 148,
- 153, 156, 95, 26, 128, 26, 49, 96, 129, 154,
- 96, 154, 128, 47, 96, 129, 155, 143, 147, 50,
+ 125, 128, 129, 131, 132, 133, 140, 142, 144, 147,
+ 152, 155, 95, 26, 128, 26, 49, 96, 129, 153,
+ 96, 153, 128, 47, 96, 129, 154, 143, 146, 50,
134, 45, 46, 47, 48, 129, 141, 145, 50, 20,
129, 55, 56, 17, 18, 19, 26, 33, 26, 26,
129, 129, 141, 136, 129, 129, 129, 129, 129, 129,
- 129, 135, 149, 129, 129, 129, 26, 27, 29, 101,
- 129, 157, 158, 159, 160, 0, 95, 129, 61, 62,
+ 129, 135, 148, 129, 129, 129, 26, 27, 29, 101,
+ 129, 156, 157, 158, 159, 0, 95, 129, 61, 62,
63, 64, 65, 66, 68, 71, 72, 73, 87, 88,
- 89, 90, 91, 92, 93, 126, 96, 129, 129, 154,
- 98, 154, 128, 26, 154, 98, 154, 126, 26, 137,
+ 89, 90, 91, 92, 93, 126, 96, 129, 129, 153,
+ 98, 153, 128, 26, 153, 98, 153, 126, 26, 137,
129, 45, 141, 26, 26, 43, 69, 70, 26, 126,
53, 63, 128, 128, 53, 63, 53, 63, 52, 55,
141, 26, 139, 47, 53, 47, 53, 47, 53, 47,
53, 79, 80, 53, 95, 26, 138, 26, 97, 101,
101, 101, 100, 98, 98, 103, 122, 129, 129, 129,
129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
- 129, 129, 129, 129, 26, 150, 97, 129, 97, 97,
- 98, 97, 129, 150, 98, 129, 146, 128, 26, 132,
+ 129, 129, 129, 129, 26, 149, 97, 129, 97, 97,
+ 98, 97, 129, 149, 98, 129, 126, 128, 26, 132,
26, 132, 26, 132, 42, 63, 129, 129, 129, 53,
63, 47, 129, 129, 129, 129, 129, 129, 98, 129,
129, 129, 129, 129, 129, 129, 129, 129, 129, 118,
- 118, 98, 129, 129, 129, 129, 26, 27, 29, 160,
- 52, 95, 98, 130, 95, 26, 126, 43, 129, 129,
+ 118, 98, 129, 129, 129, 129, 26, 27, 29, 159,
+ 52, 95, 98, 130, 95, 26, 149, 43, 129, 129,
122, 129, 129, 26, 26, 47, 47, 47, 47, 106,
- 127, 26, 127, 152, 26, 155, 152, 150, 129, 114,
+ 127, 26, 127, 151, 26, 154, 151, 95, 129, 114,
108, 111, 117, 128, 129, 129, 129, 129, 126, 95,
- 107, 126, 123, 127, 97, 127, 95, 126, 124, 124,
- 127, 53, 63, 86, 120, 30, 152, 115, 109, 112,
- 123, 129, 129, 35, 36, 121, 126, 26, 151, 127,
- 122, 53, 34, 85, 127, 129, 84, 98, 116, 129,
- 53, 126, 122, 26, 117, 110, 129, 84, 52, 127,
- 122, 113, 127, 85, 117, 122, 123, 127, 117, 85,
- 127, 85
+ 107, 126, 123, 127, 97, 127, 151, 126, 124, 124,
+ 127, 53, 63, 86, 120, 30, 127, 115, 109, 112,
+ 123, 129, 129, 35, 36, 121, 126, 26, 150, 122,
+ 53, 34, 85, 127, 129, 84, 98, 116, 129, 53,
+ 126, 122, 26, 117, 110, 129, 84, 52, 127, 122,
+ 113, 127, 85, 117, 122, 123, 127, 117, 85, 127,
+ 85
};
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
@@ -1687,11 +1677,11 @@ static const yytype_uint8 yyr1[] =
131, 131, 132, 132, 133, 133, 133, 133, 133, 134,
133, 135, 133, 136, 133, 133, 133, 133, 133, 137,
137, 138, 138, 139, 139, 140, 140, 140, 140, 140,
- 140, 141, 141, 142, 142, 142, 143, 142, 145, 146,
- 144, 144, 147, 144, 144, 144, 149, 148, 150, 150,
- 150, 151, 151, 151, 152, 153, 154, 154, 154, 155,
- 155, 156, 157, 157, 157, 157, 158, 158, 159, 159,
- 160, 160, 160
+ 140, 141, 141, 142, 142, 142, 143, 142, 145, 144,
+ 144, 146, 144, 144, 144, 148, 147, 149, 149, 149,
+ 150, 150, 150, 151, 152, 153, 153, 153, 154, 154,
+ 155, 156, 156, 156, 156, 157, 157, 158, 158, 159,
+ 159, 159
};
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
@@ -1711,11 +1701,11 @@ static const yytype_int8 yyr2[] =
4, 6, 2, 1, 2, 1, 1, 2, 1, 0,
3, 0, 3, 0, 3, 4, 2, 4, 2, 1,
3, 1, 3, 1, 3, 1, 2, 2, 2, 3,
- 2, 3, 2, 2, 3, 2, 0, 3, 0, 0,
- 9, 2, 0, 7, 8, 6, 0, 3, 0, 1,
- 3, 0, 1, 3, 0, 2, 0, 1, 3, 1,
- 3, 3, 0, 1, 1, 1, 1, 3, 1, 3,
- 3, 3, 3
+ 2, 3, 2, 2, 3, 2, 0, 3, 0, 8,
+ 2, 0, 7, 8, 6, 0, 3, 0, 1, 3,
+ 0, 1, 3, 0, 2, 0, 1, 3, 1, 3,
+ 3, 0, 1, 1, 1, 1, 3, 1, 3, 3,
+ 3, 3
};
@@ -1987,75 +1977,75 @@ yydestruct (const char *yymsg,
switch (yykind)
{
case 22: /* BLTIN */
-#line 216 "engines/director/lingo/lingo-gr.y"
+#line 210 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1993 "engines/director/lingo/lingo-gr.cpp"
+#line 1983 "engines/director/lingo/lingo-gr.cpp"
break;
case 23: /* FBLTIN */
-#line 216 "engines/director/lingo/lingo-gr.y"
+#line 210 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1999 "engines/director/lingo/lingo-gr.cpp"
+#line 1989 "engines/director/lingo/lingo-gr.cpp"
break;
case 24: /* RBLTIN */
-#line 216 "engines/director/lingo/lingo-gr.y"
+#line 210 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 2005 "engines/director/lingo/lingo-gr.cpp"
+#line 1995 "engines/director/lingo/lingo-gr.cpp"
break;
case 25: /* THEFBLTIN */
-#line 216 "engines/director/lingo/lingo-gr.y"
+#line 210 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 2011 "engines/director/lingo/lingo-gr.cpp"
+#line 2001 "engines/director/lingo/lingo-gr.cpp"
break;
case 26: /* ID */
-#line 216 "engines/director/lingo/lingo-gr.y"
+#line 210 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 2017 "engines/director/lingo/lingo-gr.cpp"
+#line 2007 "engines/director/lingo/lingo-gr.cpp"
break;
case 27: /* STRING */
-#line 216 "engines/director/lingo/lingo-gr.y"
+#line 210 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 2023 "engines/director/lingo/lingo-gr.cpp"
+#line 2013 "engines/director/lingo/lingo-gr.cpp"
break;
case 28: /* HANDLER */
-#line 216 "engines/director/lingo/lingo-gr.y"
+#line 210 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 2029 "engines/director/lingo/lingo-gr.cpp"
+#line 2019 "engines/director/lingo/lingo-gr.cpp"
break;
case 29: /* SYMBOL */
-#line 216 "engines/director/lingo/lingo-gr.y"
+#line 210 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 2035 "engines/director/lingo/lingo-gr.cpp"
+#line 2025 "engines/director/lingo/lingo-gr.cpp"
break;
case 30: /* ENDCLAUSE */
-#line 216 "engines/director/lingo/lingo-gr.y"
+#line 210 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 2041 "engines/director/lingo/lingo-gr.cpp"
+#line 2031 "engines/director/lingo/lingo-gr.cpp"
break;
case 31: /* tPLAYACCEL */
-#line 216 "engines/director/lingo/lingo-gr.y"
+#line 210 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 2047 "engines/director/lingo/lingo-gr.cpp"
+#line 2037 "engines/director/lingo/lingo-gr.cpp"
break;
case 32: /* tMETHOD */
-#line 216 "engines/director/lingo/lingo-gr.y"
+#line 210 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 2053 "engines/director/lingo/lingo-gr.cpp"
+#line 2043 "engines/director/lingo/lingo-gr.cpp"
break;
- case 148: /* on */
-#line 216 "engines/director/lingo/lingo-gr.y"
+ case 147: /* on */
+#line 210 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 2059 "engines/director/lingo/lingo-gr.cpp"
+#line 2049 "engines/director/lingo/lingo-gr.cpp"
break;
default:
@@ -2334,7 +2324,7 @@ yyreduce:
switch (yyn)
{
case 7:
-#line 227 "engines/director/lingo/lingo-gr.y"
+#line 221 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[0].s)->c_str());
@@ -2342,19 +2332,19 @@ yyreduce:
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[-2].code);
delete (yyvsp[0].s); }
-#line 2346 "engines/director/lingo/lingo-gr.cpp"
+#line 2336 "engines/director/lingo/lingo-gr.cpp"
break;
case 8:
-#line 234 "engines/director/lingo/lingo-gr.y"
+#line 228 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[-2].code); }
-#line 2354 "engines/director/lingo/lingo-gr.cpp"
+#line 2344 "engines/director/lingo/lingo-gr.cpp"
break;
case 9:
-#line 238 "engines/director/lingo/lingo-gr.y"
+#line 232 "engines/director/lingo/lingo-gr.y"
{
if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
warning("LEXER: keyword 'menu' expected");
@@ -2366,11 +2356,11 @@ yyreduce:
g_lingo->codeInt((yyvsp[-4].e)[1]);
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[0].code); }
-#line 2370 "engines/director/lingo/lingo-gr.cpp"
+#line 2360 "engines/director/lingo/lingo-gr.cpp"
break;
case 10:
-#line 249 "engines/director/lingo/lingo-gr.y"
+#line 243 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[0].s)->c_str());
@@ -2378,19 +2368,19 @@ yyreduce:
g_lingo->code1(LC::c_after);
(yyval.code) = (yyvsp[-2].code);
delete (yyvsp[0].s); }
-#line 2382 "engines/director/lingo/lingo-gr.cpp"
+#line 2372 "engines/director/lingo/lingo-gr.cpp"
break;
case 11:
-#line 256 "engines/director/lingo/lingo-gr.y"
+#line 250 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_after);
(yyval.code) = (yyvsp[-2].code); }
-#line 2390 "engines/director/lingo/lingo-gr.cpp"
+#line 2380 "engines/director/lingo/lingo-gr.cpp"
break;
case 12:
-#line 259 "engines/director/lingo/lingo-gr.y"
+#line 253 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[0].s)->c_str());
@@ -2398,19 +2388,19 @@ yyreduce:
g_lingo->code1(LC::c_before);
(yyval.code) = (yyvsp[-2].code);
delete (yyvsp[0].s); }
-#line 2402 "engines/director/lingo/lingo-gr.cpp"
+#line 2392 "engines/director/lingo/lingo-gr.cpp"
break;
case 13:
-#line 266 "engines/director/lingo/lingo-gr.y"
+#line 260 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_before);
(yyval.code) = (yyvsp[-2].code); }
-#line 2410 "engines/director/lingo/lingo-gr.cpp"
+#line 2400 "engines/director/lingo/lingo-gr.cpp"
break;
case 14:
-#line 269 "engines/director/lingo/lingo-gr.y"
+#line 263 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
@@ -2418,11 +2408,11 @@ yyreduce:
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[0].code);
delete (yyvsp[-2].s); }
-#line 2422 "engines/director/lingo/lingo-gr.cpp"
+#line 2412 "engines/director/lingo/lingo-gr.cpp"
break;
case 15:
-#line 276 "engines/director/lingo/lingo-gr.y"
+#line 270 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(0); // Put dummy id
@@ -2430,11 +2420,11 @@ yyreduce:
g_lingo->codeInt((yyvsp[-2].e)[0]);
g_lingo->codeInt((yyvsp[-2].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2434 "engines/director/lingo/lingo-gr.cpp"
+#line 2424 "engines/director/lingo/lingo-gr.cpp"
break;
case 16:
-#line 283 "engines/director/lingo/lingo-gr.y"
+#line 277 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
@@ -2442,11 +2432,11 @@ yyreduce:
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[0].code);
delete (yyvsp[-2].s); }
-#line 2446 "engines/director/lingo/lingo-gr.cpp"
+#line 2436 "engines/director/lingo/lingo-gr.cpp"
break;
case 17:
-#line 290 "engines/director/lingo/lingo-gr.y"
+#line 284 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(0); // Put dummy id
@@ -2454,33 +2444,33 @@ yyreduce:
g_lingo->codeInt((yyvsp[-2].e)[0]);
g_lingo->codeInt((yyvsp[-2].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2458 "engines/director/lingo/lingo-gr.cpp"
+#line 2448 "engines/director/lingo/lingo-gr.cpp"
break;
case 18:
-#line 297 "engines/director/lingo/lingo-gr.y"
+#line 291 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_swap);
g_lingo->code1(LC::c_theentityassign);
g_lingo->codeInt((yyvsp[-3].e)[0]);
g_lingo->codeInt((yyvsp[-3].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2469 "engines/director/lingo/lingo-gr.cpp"
+#line 2459 "engines/director/lingo/lingo-gr.cpp"
break;
case 19:
-#line 303 "engines/director/lingo/lingo-gr.y"
+#line 297 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_swap);
g_lingo->code1(LC::c_theentityassign);
g_lingo->codeInt((yyvsp[-3].e)[0]);
g_lingo->codeInt((yyvsp[-3].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2480 "engines/director/lingo/lingo-gr.cpp"
+#line 2470 "engines/director/lingo/lingo-gr.cpp"
break;
case 20:
-#line 310 "engines/director/lingo/lingo-gr.y"
+#line 304 "engines/director/lingo/lingo-gr.y"
{
if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
warning("LEXER: keyword 'menu' expected");
@@ -2492,11 +2482,11 @@ yyreduce:
g_lingo->codeInt((yyvsp[-6].e)[0]);
g_lingo->codeInt((yyvsp[-6].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2496 "engines/director/lingo/lingo-gr.cpp"
+#line 2486 "engines/director/lingo/lingo-gr.cpp"
break;
case 21:
-#line 321 "engines/director/lingo/lingo-gr.y"
+#line 315 "engines/director/lingo/lingo-gr.y"
{
if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
warning("LEXER: keyword 'menu' expected");
@@ -2508,11 +2498,11 @@ yyreduce:
g_lingo->codeInt((yyvsp[-6].e)[0]);
g_lingo->codeInt((yyvsp[-6].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2512 "engines/director/lingo/lingo-gr.cpp"
+#line 2502 "engines/director/lingo/lingo-gr.cpp"
break;
case 22:
-#line 332 "engines/director/lingo/lingo-gr.y"
+#line 326 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_objectpropassign);
g_lingo->codeString((yyvsp[-2].objectprop).obj->c_str());
@@ -2520,11 +2510,11 @@ yyreduce:
delete (yyvsp[-2].objectprop).obj;
delete (yyvsp[-2].objectprop).prop;
(yyval.code) = (yyvsp[0].code); }
-#line 2524 "engines/director/lingo/lingo-gr.cpp"
+#line 2514 "engines/director/lingo/lingo-gr.cpp"
break;
case 23:
-#line 339 "engines/director/lingo/lingo-gr.y"
+#line 333 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_objectpropassign);
g_lingo->codeString((yyvsp[-2].objectprop).obj->c_str());
@@ -2532,11 +2522,11 @@ yyreduce:
delete (yyvsp[-2].objectprop).obj;
delete (yyvsp[-2].objectprop).prop;
(yyval.code) = (yyvsp[0].code); }
-#line 2536 "engines/director/lingo/lingo-gr.cpp"
+#line 2526 "engines/director/lingo/lingo-gr.cpp"
break;
case 29:
-#line 357 "engines/director/lingo/lingo-gr.y"
+#line 351 "engines/director/lingo/lingo-gr.y"
{
inst start = 0, end = 0;
WRITE_UINT32(&start, (yyvsp[-6].code) - (yyvsp[-1].code) + 1);
@@ -2544,32 +2534,32 @@ yyreduce:
(*g_lingo->_currentAssembly)[(yyvsp[-4].code)] = end; /* end, if cond fails */
(*g_lingo->_currentAssembly)[(yyvsp[-1].code)] = start; /* looping back */
endRepeat((yyvsp[-1].code) + 1, (yyvsp[-6].code)); }
-#line 2548 "engines/director/lingo/lingo-gr.cpp"
+#line 2538 "engines/director/lingo/lingo-gr.cpp"
break;
case 30:
-#line 370 "engines/director/lingo/lingo-gr.y"
+#line 364 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
mVar((yyvsp[-2].s), globalCheck()); }
-#line 2556 "engines/director/lingo/lingo-gr.cpp"
+#line 2546 "engines/director/lingo/lingo-gr.cpp"
break;
case 31:
-#line 374 "engines/director/lingo/lingo-gr.y"
+#line 368 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_eval);
g_lingo->codeString((yyvsp[-4].s)->c_str()); }
-#line 2563 "engines/director/lingo/lingo-gr.cpp"
+#line 2553 "engines/director/lingo/lingo-gr.cpp"
break;
case 32:
-#line 377 "engines/director/lingo/lingo-gr.y"
+#line 371 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_le); }
-#line 2569 "engines/director/lingo/lingo-gr.cpp"
+#line 2559 "engines/director/lingo/lingo-gr.cpp"
break;
case 33:
-#line 377 "engines/director/lingo/lingo-gr.y"
+#line 371 "engines/director/lingo/lingo-gr.y"
{
int nextPos = g_lingo->_currentAssembly->size();
@@ -2590,32 +2580,32 @@ yyreduce:
(*g_lingo->_currentAssembly)[pos] = loop; /* final count value */
(*g_lingo->_currentAssembly)[(yyvsp[-3].code)] = end; /* end, if cond fails */
endRepeat(pos + 1, nextPos); }
-#line 2594 "engines/director/lingo/lingo-gr.cpp"
+#line 2584 "engines/director/lingo/lingo-gr.cpp"
break;
case 34:
-#line 404 "engines/director/lingo/lingo-gr.y"
+#line 398 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
mVar((yyvsp[-2].s), globalCheck()); }
-#line 2602 "engines/director/lingo/lingo-gr.cpp"
+#line 2592 "engines/director/lingo/lingo-gr.cpp"
break;
case 35:
-#line 408 "engines/director/lingo/lingo-gr.y"
+#line 402 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_eval);
g_lingo->codeString((yyvsp[-4].s)->c_str()); }
-#line 2609 "engines/director/lingo/lingo-gr.cpp"
+#line 2599 "engines/director/lingo/lingo-gr.cpp"
break;
case 36:
-#line 411 "engines/director/lingo/lingo-gr.y"
+#line 405 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_ge); }
-#line 2615 "engines/director/lingo/lingo-gr.cpp"
+#line 2605 "engines/director/lingo/lingo-gr.cpp"
break;
case 37:
-#line 412 "engines/director/lingo/lingo-gr.y"
+#line 406 "engines/director/lingo/lingo-gr.y"
{
int nextPos = g_lingo->_currentAssembly->size();
@@ -2636,32 +2626,32 @@ yyreduce:
(*g_lingo->_currentAssembly)[pos] = loop; /* final count value */
(*g_lingo->_currentAssembly)[(yyvsp[-3].code)] = end; /* end, if cond fails */
endRepeat(pos + 1, nextPos); }
-#line 2640 "engines/director/lingo/lingo-gr.cpp"
+#line 2630 "engines/director/lingo/lingo-gr.cpp"
break;
case 38:
-#line 438 "engines/director/lingo/lingo-gr.y"
+#line 432 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_stackpeek);
g_lingo->codeInt(0);
Common::String count("count");
g_lingo->codeFunc(&count, 1);
g_lingo->code1(LC::c_intpush); // start counter
g_lingo->codeInt(1); }
-#line 2651 "engines/director/lingo/lingo-gr.cpp"
+#line 2641 "engines/director/lingo/lingo-gr.cpp"
break;
case 39:
-#line 445 "engines/director/lingo/lingo-gr.y"
+#line 439 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_stackpeek); // get counter
g_lingo->codeInt(0);
g_lingo->code1(LC::c_stackpeek); // get array size
g_lingo->codeInt(2);
g_lingo->code1(LC::c_le); }
-#line 2661 "engines/director/lingo/lingo-gr.cpp"
+#line 2651 "engines/director/lingo/lingo-gr.cpp"
break;
case 40:
-#line 451 "engines/director/lingo/lingo-gr.y"
+#line 445 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_stackpeek); // get list
g_lingo->codeInt(2);
g_lingo->code1(LC::c_stackpeek); // get counter
@@ -2672,11 +2662,11 @@ yyreduce:
g_lingo->codeString((yyvsp[-6].s)->c_str());
mVar((yyvsp[-6].s), globalCheck());
g_lingo->code1(LC::c_assign); }
-#line 2676 "engines/director/lingo/lingo-gr.cpp"
+#line 2666 "engines/director/lingo/lingo-gr.cpp"
break;
case 41:
-#line 461 "engines/director/lingo/lingo-gr.y"
+#line 455 "engines/director/lingo/lingo-gr.y"
{
int nextPos = g_lingo->_currentAssembly->size();
@@ -2696,11 +2686,11 @@ yyreduce:
(*g_lingo->_currentAssembly)[jump + 1] = loop; /* final count value */
(*g_lingo->_currentAssembly)[(yyvsp[-4].code)] = end; /* end, if cond fails */
endRepeat(end2, nextPos); }
-#line 2700 "engines/director/lingo/lingo-gr.cpp"
+#line 2690 "engines/director/lingo/lingo-gr.cpp"
break;
case 42:
-#line 481 "engines/director/lingo/lingo-gr.y"
+#line 475 "engines/director/lingo/lingo-gr.y"
{
if (g_lingo->_repeatStack.size()) {
g_lingo->code2(LC::c_jump, 0);
@@ -2709,43 +2699,43 @@ yyreduce:
} else {
warning("# LINGO: next repeat not inside repeat block");
} }
-#line 2713 "engines/director/lingo/lingo-gr.cpp"
+#line 2703 "engines/director/lingo/lingo-gr.cpp"
break;
case 43:
-#line 489 "engines/director/lingo/lingo-gr.y"
+#line 483 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_whencode);
g_lingo->codeString((yyvsp[-2].s)->c_str()); }
-#line 2721 "engines/director/lingo/lingo-gr.cpp"
+#line 2711 "engines/director/lingo/lingo-gr.cpp"
break;
case 44:
-#line 492 "engines/director/lingo/lingo-gr.y"
+#line 486 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_telldone); }
-#line 2727 "engines/director/lingo/lingo-gr.cpp"
+#line 2717 "engines/director/lingo/lingo-gr.cpp"
break;
case 45:
-#line 493 "engines/director/lingo/lingo-gr.y"
+#line 487 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_telldone); }
-#line 2733 "engines/director/lingo/lingo-gr.cpp"
+#line 2723 "engines/director/lingo/lingo-gr.cpp"
break;
case 46:
-#line 495 "engines/director/lingo/lingo-gr.y"
+#line 489 "engines/director/lingo/lingo-gr.y"
{ startRepeat(); }
-#line 2739 "engines/director/lingo/lingo-gr.cpp"
+#line 2729 "engines/director/lingo/lingo-gr.cpp"
break;
case 47:
-#line 497 "engines/director/lingo/lingo-gr.y"
+#line 491 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_tell); }
-#line 2745 "engines/director/lingo/lingo-gr.cpp"
+#line 2735 "engines/director/lingo/lingo-gr.cpp"
break;
case 48:
-#line 499 "engines/director/lingo/lingo-gr.y"
+#line 493 "engines/director/lingo/lingo-gr.y"
{
inst else1 = 0, end3 = 0;
WRITE_UINT32(&else1, (yyvsp[-3].code) + 1 - (yyvsp[-6].code) + 1);
@@ -2753,11 +2743,11 @@ yyreduce:
(*g_lingo->_currentAssembly)[(yyvsp[-6].code)] = else1; /* elsepart */
(*g_lingo->_currentAssembly)[(yyvsp[-3].code)] = end3; /* end, if cond fails */
g_lingo->processIf((yyvsp[-3].code), (yyvsp[-1].code)); }
-#line 2757 "engines/director/lingo/lingo-gr.cpp"
+#line 2747 "engines/director/lingo/lingo-gr.cpp"
break;
case 49:
-#line 506 "engines/director/lingo/lingo-gr.y"
+#line 500 "engines/director/lingo/lingo-gr.y"
{
inst else1 = 0, end = 0;
WRITE_UINT32(&else1, (yyvsp[-5].code) + 1 - (yyvsp[-8].code) + 1);
@@ -2765,107 +2755,107 @@ yyreduce:
(*g_lingo->_currentAssembly)[(yyvsp[-8].code)] = else1; /* elsepart */
(*g_lingo->_currentAssembly)[(yyvsp[-5].code)] = end; /* end, if cond fails */
g_lingo->processIf((yyvsp[-5].code), (yyvsp[-1].code)); }
-#line 2769 "engines/director/lingo/lingo-gr.cpp"
+#line 2759 "engines/director/lingo/lingo-gr.cpp"
break;
case 52:
-#line 517 "engines/director/lingo/lingo-gr.y"
+#line 511 "engines/director/lingo/lingo-gr.y"
{
inst else1 = 0;
WRITE_UINT32(&else1, (yyvsp[0].code) + 1 - (yyvsp[-3].code) + 1);
(*g_lingo->_currentAssembly)[(yyvsp[-3].code)] = else1; /* end, if cond fails */
g_lingo->codeLabel((yyvsp[0].code)); }
-#line 2779 "engines/director/lingo/lingo-gr.cpp"
+#line 2769 "engines/director/lingo/lingo-gr.cpp"
break;
case 53:
-#line 523 "engines/director/lingo/lingo-gr.y"
+#line 517 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code2(LC::c_jumpifz, 0);
(yyval.code) = g_lingo->_currentAssembly->size() - 1; }
-#line 2787 "engines/director/lingo/lingo-gr.cpp"
+#line 2777 "engines/director/lingo/lingo-gr.cpp"
break;
case 54:
-#line 527 "engines/director/lingo/lingo-gr.y"
+#line 521 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code2(LC::c_jump, 0);
(yyval.code) = g_lingo->_currentAssembly->size() - 1; }
-#line 2795 "engines/director/lingo/lingo-gr.cpp"
+#line 2785 "engines/director/lingo/lingo-gr.cpp"
break;
case 55:
-#line 531 "engines/director/lingo/lingo-gr.y"
+#line 525 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_assign);
(yyval.code) = g_lingo->_currentAssembly->size() - 1; }
-#line 2803 "engines/director/lingo/lingo-gr.cpp"
+#line 2793 "engines/director/lingo/lingo-gr.cpp"
break;
case 56:
-#line 535 "engines/director/lingo/lingo-gr.y"
+#line 529 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeLabel(0); }
-#line 2810 "engines/director/lingo/lingo-gr.cpp"
+#line 2800 "engines/director/lingo/lingo-gr.cpp"
break;
case 57:
-#line 538 "engines/director/lingo/lingo-gr.y"
+#line 532 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->_currentAssembly->size(); }
-#line 2816 "engines/director/lingo/lingo-gr.cpp"
+#line 2806 "engines/director/lingo/lingo-gr.cpp"
break;
case 58:
-#line 540 "engines/director/lingo/lingo-gr.y"
+#line 534 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->_currentAssembly->size(); }
-#line 2822 "engines/director/lingo/lingo-gr.cpp"
+#line 2812 "engines/director/lingo/lingo-gr.cpp"
break;
case 61:
-#line 544 "engines/director/lingo/lingo-gr.y"
+#line 538 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_intpush);
g_lingo->codeInt((yyvsp[0].i)); }
-#line 2830 "engines/director/lingo/lingo-gr.cpp"
+#line 2820 "engines/director/lingo/lingo-gr.cpp"
break;
case 62:
-#line 547 "engines/director/lingo/lingo-gr.y"
+#line 541 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_floatpush);
g_lingo->codeFloat((yyvsp[0].f)); }
-#line 2838 "engines/director/lingo/lingo-gr.cpp"
+#line 2828 "engines/director/lingo/lingo-gr.cpp"
break;
case 63:
-#line 550 "engines/director/lingo/lingo-gr.y"
+#line 544 "engines/director/lingo/lingo-gr.y"
{ // D3
(yyval.code) = g_lingo->code1(LC::c_symbolpush);
g_lingo->codeString((yyvsp[0].s)->c_str());
delete (yyvsp[0].s); }
-#line 2847 "engines/director/lingo/lingo-gr.cpp"
+#line 2837 "engines/director/lingo/lingo-gr.cpp"
break;
case 64:
-#line 554 "engines/director/lingo/lingo-gr.y"
+#line 548 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_stringpush);
g_lingo->codeString((yyvsp[0].s)->c_str());
delete (yyvsp[0].s); }
-#line 2856 "engines/director/lingo/lingo-gr.cpp"
+#line 2846 "engines/director/lingo/lingo-gr.cpp"
break;
case 65:
-#line 558 "engines/director/lingo/lingo-gr.y"
+#line 552 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_eval);
g_lingo->codeString((yyvsp[0].s)->c_str());
delete (yyvsp[0].s); }
-#line 2865 "engines/director/lingo/lingo-gr.cpp"
+#line 2855 "engines/director/lingo/lingo-gr.cpp"
break;
case 66:
-#line 562 "engines/director/lingo/lingo-gr.y"
+#line 556 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(0); // Put dummy id
@@ -2874,28 +2864,28 @@ yyreduce:
WRITE_UINT32(&e, (yyvsp[0].e)[0]);
WRITE_UINT32(&f, (yyvsp[0].e)[1]);
g_lingo->code2(e, f); }
-#line 2878 "engines/director/lingo/lingo-gr.cpp"
+#line 2868 "engines/director/lingo/lingo-gr.cpp"
break;
case 67:
-#line 570 "engines/director/lingo/lingo-gr.y"
+#line 564 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_theentitypush);
inst e = 0, f = 0;
WRITE_UINT32(&e, (yyvsp[-1].e)[0]);
WRITE_UINT32(&f, (yyvsp[-1].e)[1]);
g_lingo->code2(e, f); }
-#line 2889 "engines/director/lingo/lingo-gr.cpp"
+#line 2879 "engines/director/lingo/lingo-gr.cpp"
break;
case 68:
-#line 576 "engines/director/lingo/lingo-gr.y"
+#line 570 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[-1].code); }
-#line 2895 "engines/director/lingo/lingo-gr.cpp"
+#line 2885 "engines/director/lingo/lingo-gr.cpp"
break;
case 70:
-#line 578 "engines/director/lingo/lingo-gr.y"
+#line 572 "engines/director/lingo/lingo-gr.y"
{
// Director parser till D3 was forgiving for any hanging parentheses
if (g_lingo->_ignoreError) {
@@ -2906,280 +2896,280 @@ yyreduce:
yyerrok;
}
}
-#line 2910 "engines/director/lingo/lingo-gr.cpp"
+#line 2900 "engines/director/lingo/lingo-gr.cpp"
break;
case 71:
-#line 589 "engines/director/lingo/lingo-gr.y"
+#line 583 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[0].code); }
-#line 2916 "engines/director/lingo/lingo-gr.cpp"
+#line 2906 "engines/director/lingo/lingo-gr.cpp"
break;
case 73:
-#line 591 "engines/director/lingo/lingo-gr.y"
+#line 585 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
delete (yyvsp[-3].s); }
-#line 2924 "engines/director/lingo/lingo-gr.cpp"
+#line 2914 "engines/director/lingo/lingo-gr.cpp"
break;
case 74:
-#line 594 "engines/director/lingo/lingo-gr.y"
+#line 588 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
delete (yyvsp[-1].s); }
-#line 2932 "engines/director/lingo/lingo-gr.cpp"
+#line 2922 "engines/director/lingo/lingo-gr.cpp"
break;
case 75:
-#line 597 "engines/director/lingo/lingo-gr.y"
+#line 591 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_lazyeval);
g_lingo->codeString((yyvsp[-1].s)->c_str());
g_lingo->codeFunc((yyvsp[-3].s), 1);
delete (yyvsp[-3].s);
delete (yyvsp[-1].s); }
-#line 2943 "engines/director/lingo/lingo-gr.cpp"
+#line 2933 "engines/director/lingo/lingo-gr.cpp"
break;
case 76:
-#line 603 "engines/director/lingo/lingo-gr.y"
+#line 597 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_lazyeval); g_lingo->codeString((yyvsp[-1].s)->c_str()); }
-#line 2949 "engines/director/lingo/lingo-gr.cpp"
+#line 2939 "engines/director/lingo/lingo-gr.cpp"
break;
case 77:
-#line 604 "engines/director/lingo/lingo-gr.y"
+#line 598 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-6].s), (yyvsp[-1].narg) + 1);
delete (yyvsp[-6].s);
delete (yyvsp[-4].s); }
-#line 2958 "engines/director/lingo/lingo-gr.cpp"
+#line 2948 "engines/director/lingo/lingo-gr.cpp"
break;
case 78:
-#line 608 "engines/director/lingo/lingo-gr.y"
+#line 602 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
delete (yyvsp[-3].s); }
-#line 2966 "engines/director/lingo/lingo-gr.cpp"
+#line 2956 "engines/director/lingo/lingo-gr.cpp"
break;
case 79:
-#line 611 "engines/director/lingo/lingo-gr.y"
+#line 605 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->codeFunc((yyvsp[-2].s), 1);
delete (yyvsp[-2].s); }
-#line 2974 "engines/director/lingo/lingo-gr.cpp"
+#line 2964 "engines/director/lingo/lingo-gr.cpp"
break;
case 80:
-#line 614 "engines/director/lingo/lingo-gr.y"
+#line 608 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_objectproppush);
g_lingo->codeString((yyvsp[0].objectprop).obj->c_str());
g_lingo->codeString((yyvsp[0].objectprop).prop->c_str());
delete (yyvsp[0].objectprop).obj;
delete (yyvsp[0].objectprop).prop; }
-#line 2985 "engines/director/lingo/lingo-gr.cpp"
+#line 2975 "engines/director/lingo/lingo-gr.cpp"
break;
case 82:
-#line 621 "engines/director/lingo/lingo-gr.y"
+#line 615 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_add); }
-#line 2991 "engines/director/lingo/lingo-gr.cpp"
+#line 2981 "engines/director/lingo/lingo-gr.cpp"
break;
case 83:
-#line 622 "engines/director/lingo/lingo-gr.y"
+#line 616 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_sub); }
-#line 2997 "engines/director/lingo/lingo-gr.cpp"
+#line 2987 "engines/director/lingo/lingo-gr.cpp"
break;
case 84:
-#line 623 "engines/director/lingo/lingo-gr.y"
+#line 617 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_mul); }
-#line 3003 "engines/director/lingo/lingo-gr.cpp"
+#line 2993 "engines/director/lingo/lingo-gr.cpp"
break;
case 85:
-#line 624 "engines/director/lingo/lingo-gr.y"
+#line 618 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_div); }
-#line 3009 "engines/director/lingo/lingo-gr.cpp"
+#line 2999 "engines/director/lingo/lingo-gr.cpp"
break;
case 86:
-#line 625 "engines/director/lingo/lingo-gr.y"
+#line 619 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_mod); }
-#line 3015 "engines/director/lingo/lingo-gr.cpp"
+#line 3005 "engines/director/lingo/lingo-gr.cpp"
break;
case 87:
-#line 626 "engines/director/lingo/lingo-gr.y"
+#line 620 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gt); }
-#line 3021 "engines/director/lingo/lingo-gr.cpp"
+#line 3011 "engines/director/lingo/lingo-gr.cpp"
break;
case 88:
-#line 627 "engines/director/lingo/lingo-gr.y"
+#line 621 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_lt); }
-#line 3027 "engines/director/lingo/lingo-gr.cpp"
+#line 3017 "engines/director/lingo/lingo-gr.cpp"
break;
case 89:
-#line 628 "engines/director/lingo/lingo-gr.y"
+#line 622 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_eq); }
-#line 3033 "engines/director/lingo/lingo-gr.cpp"
+#line 3023 "engines/director/lingo/lingo-gr.cpp"
break;
case 90:
-#line 629 "engines/director/lingo/lingo-gr.y"
+#line 623 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_neq); }
-#line 3039 "engines/director/lingo/lingo-gr.cpp"
+#line 3029 "engines/director/lingo/lingo-gr.cpp"
break;
case 91:
-#line 630 "engines/director/lingo/lingo-gr.y"
+#line 624 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_ge); }
-#line 3045 "engines/director/lingo/lingo-gr.cpp"
+#line 3035 "engines/director/lingo/lingo-gr.cpp"
break;
case 92:
-#line 631 "engines/director/lingo/lingo-gr.y"
+#line 625 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_le); }
-#line 3051 "engines/director/lingo/lingo-gr.cpp"
+#line 3041 "engines/director/lingo/lingo-gr.cpp"
break;
case 93:
-#line 632 "engines/director/lingo/lingo-gr.y"
+#line 626 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_and); }
-#line 3057 "engines/director/lingo/lingo-gr.cpp"
+#line 3047 "engines/director/lingo/lingo-gr.cpp"
break;
case 94:
-#line 633 "engines/director/lingo/lingo-gr.y"
+#line 627 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_or); }
-#line 3063 "engines/director/lingo/lingo-gr.cpp"
+#line 3053 "engines/director/lingo/lingo-gr.cpp"
break;
case 95:
-#line 634 "engines/director/lingo/lingo-gr.y"
+#line 628 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_not); }
-#line 3069 "engines/director/lingo/lingo-gr.cpp"
+#line 3059 "engines/director/lingo/lingo-gr.cpp"
break;
case 96:
-#line 635 "engines/director/lingo/lingo-gr.y"
+#line 629 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_ampersand); }
-#line 3075 "engines/director/lingo/lingo-gr.cpp"
+#line 3065 "engines/director/lingo/lingo-gr.cpp"
break;
case 97:
-#line 636 "engines/director/lingo/lingo-gr.y"
+#line 630 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_concat); }
-#line 3081 "engines/director/lingo/lingo-gr.cpp"
+#line 3071 "engines/director/lingo/lingo-gr.cpp"
break;
case 98:
-#line 637 "engines/director/lingo/lingo-gr.y"
+#line 631 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_contains); }
-#line 3087 "engines/director/lingo/lingo-gr.cpp"
+#line 3077 "engines/director/lingo/lingo-gr.cpp"
break;
case 99:
-#line 638 "engines/director/lingo/lingo-gr.y"
+#line 632 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_starts); }
-#line 3093 "engines/director/lingo/lingo-gr.cpp"
+#line 3083 "engines/director/lingo/lingo-gr.cpp"
break;
case 100:
-#line 639 "engines/director/lingo/lingo-gr.y"
+#line 633 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[0].code); }
-#line 3099 "engines/director/lingo/lingo-gr.cpp"
+#line 3089 "engines/director/lingo/lingo-gr.cpp"
break;
case 101:
-#line 640 "engines/director/lingo/lingo-gr.y"
+#line 634 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[0].code); g_lingo->code1(LC::c_negate); }
-#line 3105 "engines/director/lingo/lingo-gr.cpp"
+#line 3095 "engines/director/lingo/lingo-gr.cpp"
break;
case 102:
-#line 641 "engines/director/lingo/lingo-gr.y"
+#line 635 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_intersects); }
-#line 3111 "engines/director/lingo/lingo-gr.cpp"
+#line 3101 "engines/director/lingo/lingo-gr.cpp"
break;
case 103:
-#line 642 "engines/director/lingo/lingo-gr.y"
+#line 636 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_within); }
-#line 3117 "engines/director/lingo/lingo-gr.cpp"
+#line 3107 "engines/director/lingo/lingo-gr.cpp"
break;
case 104:
-#line 644 "engines/director/lingo/lingo-gr.y"
+#line 638 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_charOf); }
-#line 3123 "engines/director/lingo/lingo-gr.cpp"
+#line 3113 "engines/director/lingo/lingo-gr.cpp"
break;
case 105:
-#line 645 "engines/director/lingo/lingo-gr.y"
+#line 639 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_charToOf); }
-#line 3129 "engines/director/lingo/lingo-gr.cpp"
+#line 3119 "engines/director/lingo/lingo-gr.cpp"
break;
case 106:
-#line 646 "engines/director/lingo/lingo-gr.y"
+#line 640 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_itemOf); }
-#line 3135 "engines/director/lingo/lingo-gr.cpp"
+#line 3125 "engines/director/lingo/lingo-gr.cpp"
break;
case 107:
-#line 647 "engines/director/lingo/lingo-gr.y"
+#line 641 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_itemToOf); }
-#line 3141 "engines/director/lingo/lingo-gr.cpp"
+#line 3131 "engines/director/lingo/lingo-gr.cpp"
break;
case 108:
-#line 648 "engines/director/lingo/lingo-gr.y"
+#line 642 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_lineOf); }
-#line 3147 "engines/director/lingo/lingo-gr.cpp"
+#line 3137 "engines/director/lingo/lingo-gr.cpp"
break;
case 109:
-#line 649 "engines/director/lingo/lingo-gr.y"
+#line 643 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_lineToOf); }
-#line 3153 "engines/director/lingo/lingo-gr.cpp"
+#line 3143 "engines/director/lingo/lingo-gr.cpp"
break;
case 110:
-#line 650 "engines/director/lingo/lingo-gr.y"
+#line 644 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_wordOf); }
-#line 3159 "engines/director/lingo/lingo-gr.cpp"
+#line 3149 "engines/director/lingo/lingo-gr.cpp"
break;
case 111:
-#line 651 "engines/director/lingo/lingo-gr.y"
+#line 645 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_wordToOf); }
-#line 3165 "engines/director/lingo/lingo-gr.cpp"
+#line 3155 "engines/director/lingo/lingo-gr.cpp"
break;
case 112:
-#line 653 "engines/director/lingo/lingo-gr.y"
+#line 647 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-1].s), 1);
delete (yyvsp[-1].s); }
-#line 3173 "engines/director/lingo/lingo-gr.cpp"
+#line 3163 "engines/director/lingo/lingo-gr.cpp"
break;
case 114:
-#line 658 "engines/director/lingo/lingo-gr.y"
+#line 652 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_printtop); }
-#line 3179 "engines/director/lingo/lingo-gr.cpp"
+#line 3169 "engines/director/lingo/lingo-gr.cpp"
break;
case 117:
-#line 661 "engines/director/lingo/lingo-gr.y"
+#line 655 "engines/director/lingo/lingo-gr.y"
{
if (g_lingo->_repeatStack.size()) {
g_lingo->code2(LC::c_jump, 0);
@@ -3188,260 +3178,254 @@ yyreduce:
} else {
warning("# LINGO: exit repeat not inside repeat block");
} }
-#line 3192 "engines/director/lingo/lingo-gr.cpp"
+#line 3182 "engines/director/lingo/lingo-gr.cpp"
break;
case 118:
-#line 669 "engines/director/lingo/lingo-gr.y"
+#line 663 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_procret); }
-#line 3198 "engines/director/lingo/lingo-gr.cpp"
+#line 3188 "engines/director/lingo/lingo-gr.cpp"
break;
case 119:
-#line 670 "engines/director/lingo/lingo-gr.y"
+#line 664 "engines/director/lingo/lingo-gr.y"
{ inArgs(); }
-#line 3204 "engines/director/lingo/lingo-gr.cpp"
+#line 3194 "engines/director/lingo/lingo-gr.cpp"
break;
case 120:
-#line 670 "engines/director/lingo/lingo-gr.y"
+#line 664 "engines/director/lingo/lingo-gr.y"
{ inLast(); }
-#line 3210 "engines/director/lingo/lingo-gr.cpp"
+#line 3200 "engines/director/lingo/lingo-gr.cpp"
break;
case 121:
-#line 671 "engines/director/lingo/lingo-gr.y"
+#line 665 "engines/director/lingo/lingo-gr.y"
{ inArgs(); }
-#line 3216 "engines/director/lingo/lingo-gr.cpp"
+#line 3206 "engines/director/lingo/lingo-gr.cpp"
break;
case 122:
-#line 671 "engines/director/lingo/lingo-gr.y"
+#line 665 "engines/director/lingo/lingo-gr.y"
{ inLast(); }
-#line 3222 "engines/director/lingo/lingo-gr.cpp"
+#line 3212 "engines/director/lingo/lingo-gr.cpp"
break;
case 123:
-#line 672 "engines/director/lingo/lingo-gr.y"
+#line 666 "engines/director/lingo/lingo-gr.y"
{ inArgs(); }
-#line 3228 "engines/director/lingo/lingo-gr.cpp"
+#line 3218 "engines/director/lingo/lingo-gr.cpp"
break;
case 124:
-#line 672 "engines/director/lingo/lingo-gr.y"
+#line 666 "engines/director/lingo/lingo-gr.y"
{ inLast(); }
-#line 3234 "engines/director/lingo/lingo-gr.cpp"
+#line 3224 "engines/director/lingo/lingo-gr.cpp"
break;
case 125:
-#line 673 "engines/director/lingo/lingo-gr.y"
+#line 667 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
delete (yyvsp[-3].s); }
-#line 3242 "engines/director/lingo/lingo-gr.cpp"
+#line 3232 "engines/director/lingo/lingo-gr.cpp"
break;
case 126:
-#line 676 "engines/director/lingo/lingo-gr.y"
+#line 670 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
delete (yyvsp[-1].s); }
-#line 3250 "engines/director/lingo/lingo-gr.cpp"
+#line 3240 "engines/director/lingo/lingo-gr.cpp"
break;
case 127:
-#line 679 "engines/director/lingo/lingo-gr.y"
+#line 673 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_open); }
-#line 3256 "engines/director/lingo/lingo-gr.cpp"
+#line 3246 "engines/director/lingo/lingo-gr.cpp"
break;
case 128:
-#line 680 "engines/director/lingo/lingo-gr.y"
+#line 674 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code2(LC::c_voidpush, LC::c_open); }
-#line 3262 "engines/director/lingo/lingo-gr.cpp"
+#line 3252 "engines/director/lingo/lingo-gr.cpp"
break;
case 129:
-#line 682 "engines/director/lingo/lingo-gr.y"
+#line 676 "engines/director/lingo/lingo-gr.y"
{
mVar((yyvsp[0].s), kVarGlobal);
delete (yyvsp[0].s); }
-#line 3270 "engines/director/lingo/lingo-gr.cpp"
+#line 3260 "engines/director/lingo/lingo-gr.cpp"
break;
case 130:
-#line 685 "engines/director/lingo/lingo-gr.y"
+#line 679 "engines/director/lingo/lingo-gr.y"
{
mVar((yyvsp[0].s), kVarGlobal);
delete (yyvsp[0].s); }
-#line 3278 "engines/director/lingo/lingo-gr.cpp"
+#line 3268 "engines/director/lingo/lingo-gr.cpp"
break;
case 131:
-#line 689 "engines/director/lingo/lingo-gr.y"
+#line 683 "engines/director/lingo/lingo-gr.y"
{
mVar((yyvsp[0].s), kVarProperty);
delete (yyvsp[0].s); }
-#line 3286 "engines/director/lingo/lingo-gr.cpp"
+#line 3276 "engines/director/lingo/lingo-gr.cpp"
break;
case 132:
-#line 692 "engines/director/lingo/lingo-gr.y"
+#line 686 "engines/director/lingo/lingo-gr.y"
{
mVar((yyvsp[0].s), kVarProperty);
delete (yyvsp[0].s); }
-#line 3294 "engines/director/lingo/lingo-gr.cpp"
+#line 3284 "engines/director/lingo/lingo-gr.cpp"
break;
case 133:
-#line 696 "engines/director/lingo/lingo-gr.y"
+#line 690 "engines/director/lingo/lingo-gr.y"
{
mVar((yyvsp[0].s), kVarInstance);
delete (yyvsp[0].s); }
-#line 3302 "engines/director/lingo/lingo-gr.cpp"
+#line 3292 "engines/director/lingo/lingo-gr.cpp"
break;
case 134:
-#line 699 "engines/director/lingo/lingo-gr.y"
+#line 693 "engines/director/lingo/lingo-gr.y"
{
mVar((yyvsp[0].s), kVarInstance);
delete (yyvsp[0].s); }
-#line 3310 "engines/director/lingo/lingo-gr.cpp"
+#line 3300 "engines/director/lingo/lingo-gr.cpp"
break;
case 135:
-#line 710 "engines/director/lingo/lingo-gr.y"
+#line 704 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gotoloop); }
-#line 3316 "engines/director/lingo/lingo-gr.cpp"
+#line 3306 "engines/director/lingo/lingo-gr.cpp"
break;
case 136:
-#line 711 "engines/director/lingo/lingo-gr.y"
+#line 705 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gotonext); }
-#line 3322 "engines/director/lingo/lingo-gr.cpp"
+#line 3312 "engines/director/lingo/lingo-gr.cpp"
break;
case 137:
-#line 712 "engines/director/lingo/lingo-gr.y"
+#line 706 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gotoprevious); }
-#line 3328 "engines/director/lingo/lingo-gr.cpp"
+#line 3318 "engines/director/lingo/lingo-gr.cpp"
break;
case 138:
-#line 713 "engines/director/lingo/lingo-gr.y"
+#line 707 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(1);
g_lingo->code1(LC::c_goto); }
-#line 3337 "engines/director/lingo/lingo-gr.cpp"
+#line 3327 "engines/director/lingo/lingo-gr.cpp"
break;
case 139:
-#line 717 "engines/director/lingo/lingo-gr.y"
+#line 711 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(3);
g_lingo->code1(LC::c_goto); }
-#line 3346 "engines/director/lingo/lingo-gr.cpp"
+#line 3336 "engines/director/lingo/lingo-gr.cpp"
break;
case 140:
-#line 721 "engines/director/lingo/lingo-gr.y"
+#line 715 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(2);
g_lingo->code1(LC::c_goto); }
-#line 3355 "engines/director/lingo/lingo-gr.cpp"
+#line 3345 "engines/director/lingo/lingo-gr.cpp"
break;
case 143:
-#line 729 "engines/director/lingo/lingo-gr.y"
+#line 723 "engines/director/lingo/lingo-gr.y"
{ // "play #done" is also caught by this
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(1);
g_lingo->code1(LC::c_play); }
-#line 3364 "engines/director/lingo/lingo-gr.cpp"
+#line 3354 "engines/director/lingo/lingo-gr.cpp"
break;
case 144:
-#line 733 "engines/director/lingo/lingo-gr.y"
+#line 727 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(3);
g_lingo->code1(LC::c_play); }
-#line 3373 "engines/director/lingo/lingo-gr.cpp"
+#line 3363 "engines/director/lingo/lingo-gr.cpp"
break;
case 145:
-#line 737 "engines/director/lingo/lingo-gr.y"
+#line 731 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(2);
g_lingo->code1(LC::c_play); }
-#line 3382 "engines/director/lingo/lingo-gr.cpp"
+#line 3372 "engines/director/lingo/lingo-gr.cpp"
break;
case 146:
-#line 741 "engines/director/lingo/lingo-gr.y"
+#line 735 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeSetImmediate(true); }
-#line 3388 "engines/director/lingo/lingo-gr.cpp"
+#line 3378 "engines/director/lingo/lingo-gr.cpp"
break;
case 147:
-#line 741 "engines/director/lingo/lingo-gr.y"
+#line 735 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeSetImmediate(false);
g_lingo->codeFunc((yyvsp[-2].s), (yyvsp[0].narg));
delete (yyvsp[-2].s); }
-#line 3397 "engines/director/lingo/lingo-gr.cpp"
+#line 3387 "engines/director/lingo/lingo-gr.cpp"
break;
case 148:
-#line 771 "engines/director/lingo/lingo-gr.y"
+#line 765 "engines/director/lingo/lingo-gr.y"
{ startDef(); }
-#line 3403 "engines/director/lingo/lingo-gr.cpp"
+#line 3393 "engines/director/lingo/lingo-gr.cpp"
break;
case 149:
-#line 771 "engines/director/lingo/lingo-gr.y"
- { g_lingo->_currentFactory = NULL; }
-#line 3409 "engines/director/lingo/lingo-gr.cpp"
- break;
-
- case 150:
-#line 772 "engines/director/lingo/lingo-gr.y"
+#line 766 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_procret);
- g_lingo->codeDefine(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg));
+ g_lingo->codeDefine(*(yyvsp[-5].s), (yyvsp[-4].code), (yyvsp[-3].narg));
endDef();
- delete (yyvsp[-6].s); }
-#line 3419 "engines/director/lingo/lingo-gr.cpp"
+ delete (yyvsp[-5].s); }
+#line 3403 "engines/director/lingo/lingo-gr.cpp"
break;
- case 151:
-#line 777 "engines/director/lingo/lingo-gr.y"
+ case 150:
+#line 771 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeFactory(*(yyvsp[0].s)); delete (yyvsp[0].s); }
-#line 3425 "engines/director/lingo/lingo-gr.cpp"
+#line 3409 "engines/director/lingo/lingo-gr.cpp"
break;
- case 152:
-#line 778 "engines/director/lingo/lingo-gr.y"
+ case 151:
+#line 772 "engines/director/lingo/lingo-gr.y"
{ startDef(); (*g_lingo->_methodVars)["me"] = kVarArgument; }
-#line 3431 "engines/director/lingo/lingo-gr.cpp"
+#line 3415 "engines/director/lingo/lingo-gr.cpp"
break;
- case 153:
-#line 779 "engines/director/lingo/lingo-gr.y"
+ case 152:
+#line 773 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_procret);
- g_lingo->codeDefine(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg) + 1, g_lingo->_currentFactory);
+ g_lingo->codeDefine(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg) + 1);
endDef();
delete (yyvsp[-6].s); }
-#line 3441 "engines/director/lingo/lingo-gr.cpp"
+#line 3425 "engines/director/lingo/lingo-gr.cpp"
break;
- case 154:
-#line 784 "engines/director/lingo/lingo-gr.y"
+ case 153:
+#line 778 "engines/director/lingo/lingo-gr.y"
{ // D3
g_lingo->code1(LC::c_procret);
g_lingo->codeDefine(*(yyvsp[-7].s), (yyvsp[-6].code), (yyvsp[-5].narg));
@@ -3450,70 +3434,69 @@ yyreduce:
checkEnd((yyvsp[-1].s), (yyvsp[-7].s)->c_str(), false);
delete (yyvsp[-7].s);
delete (yyvsp[-1].s); }
-#line 3454 "engines/director/lingo/lingo-gr.cpp"
+#line 3438 "engines/director/lingo/lingo-gr.cpp"
break;
- case 155:
-#line 792 "engines/director/lingo/lingo-gr.y"
+ case 154:
+#line 786 "engines/director/lingo/lingo-gr.y"
{ // D4. No 'end' clause
g_lingo->code1(LC::c_procret);
g_lingo->codeDefine(*(yyvsp[-5].s), (yyvsp[-4].code), (yyvsp[-3].narg));
endDef();
delete (yyvsp[-5].s); }
-#line 3464 "engines/director/lingo/lingo-gr.cpp"
+#line 3448 "engines/director/lingo/lingo-gr.cpp"
break;
- case 156:
-#line 798 "engines/director/lingo/lingo-gr.y"
+ case 155:
+#line 792 "engines/director/lingo/lingo-gr.y"
{ startDef(); }
-#line 3470 "engines/director/lingo/lingo-gr.cpp"
+#line 3454 "engines/director/lingo/lingo-gr.cpp"
break;
- case 157:
-#line 798 "engines/director/lingo/lingo-gr.y"
- {
- (yyval.s) = (yyvsp[0].s); g_lingo->_currentFactory = NULL; }
-#line 3477 "engines/director/lingo/lingo-gr.cpp"
+ case 156:
+#line 792 "engines/director/lingo/lingo-gr.y"
+ { (yyval.s) = (yyvsp[0].s); }
+#line 3460 "engines/director/lingo/lingo-gr.cpp"
break;
- case 158:
-#line 801 "engines/director/lingo/lingo-gr.y"
+ case 157:
+#line 794 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 0; }
-#line 3483 "engines/director/lingo/lingo-gr.cpp"
+#line 3466 "engines/director/lingo/lingo-gr.cpp"
break;
- case 159:
-#line 802 "engines/director/lingo/lingo-gr.y"
+ case 158:
+#line 795 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeArg((yyvsp[0].s)); mVar((yyvsp[0].s), kVarArgument); (yyval.narg) = 1; delete (yyvsp[0].s); }
-#line 3489 "engines/director/lingo/lingo-gr.cpp"
+#line 3472 "engines/director/lingo/lingo-gr.cpp"
break;
- case 160:
-#line 803 "engines/director/lingo/lingo-gr.y"
+ case 159:
+#line 796 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeArg((yyvsp[0].s)); mVar((yyvsp[0].s), kVarArgument); (yyval.narg) = (yyvsp[-2].narg) + 1; delete (yyvsp[0].s); }
-#line 3495 "engines/director/lingo/lingo-gr.cpp"
+#line 3478 "engines/director/lingo/lingo-gr.cpp"
break;
- case 162:
-#line 806 "engines/director/lingo/lingo-gr.y"
+ case 161:
+#line 799 "engines/director/lingo/lingo-gr.y"
{ delete (yyvsp[0].s); }
-#line 3501 "engines/director/lingo/lingo-gr.cpp"
+#line 3484 "engines/director/lingo/lingo-gr.cpp"
break;
- case 163:
-#line 807 "engines/director/lingo/lingo-gr.y"
+ case 162:
+#line 800 "engines/director/lingo/lingo-gr.y"
{ delete (yyvsp[0].s); }
-#line 3507 "engines/director/lingo/lingo-gr.cpp"
+#line 3490 "engines/director/lingo/lingo-gr.cpp"
break;
- case 164:
-#line 809 "engines/director/lingo/lingo-gr.y"
+ case 163:
+#line 802 "engines/director/lingo/lingo-gr.y"
{ inDef(); }
-#line 3513 "engines/director/lingo/lingo-gr.cpp"
+#line 3496 "engines/director/lingo/lingo-gr.cpp"
break;
- case 165:
-#line 811 "engines/director/lingo/lingo-gr.y"
+ case 164:
+#line 804 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_call);
g_lingo->codeString((yyvsp[-1].s)->c_str());
@@ -3521,122 +3504,122 @@ yyreduce:
WRITE_UINT32(&numpar, (yyvsp[0].narg));
g_lingo->code1(numpar);
delete (yyvsp[-1].s); }
-#line 3525 "engines/director/lingo/lingo-gr.cpp"
+#line 3508 "engines/director/lingo/lingo-gr.cpp"
break;
- case 166:
-#line 819 "engines/director/lingo/lingo-gr.y"
+ case 165:
+#line 812 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 0; }
-#line 3531 "engines/director/lingo/lingo-gr.cpp"
+#line 3514 "engines/director/lingo/lingo-gr.cpp"
break;
- case 167:
-#line 820 "engines/director/lingo/lingo-gr.y"
+ case 166:
+#line 813 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3537 "engines/director/lingo/lingo-gr.cpp"
+#line 3520 "engines/director/lingo/lingo-gr.cpp"
break;
- case 168:
-#line 821 "engines/director/lingo/lingo-gr.y"
+ case 167:
+#line 814 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3543 "engines/director/lingo/lingo-gr.cpp"
+#line 3526 "engines/director/lingo/lingo-gr.cpp"
break;
- case 169:
-#line 823 "engines/director/lingo/lingo-gr.y"
+ case 168:
+#line 816 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3549 "engines/director/lingo/lingo-gr.cpp"
+#line 3532 "engines/director/lingo/lingo-gr.cpp"
break;
- case 170:
-#line 824 "engines/director/lingo/lingo-gr.y"
+ case 169:
+#line 817 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3555 "engines/director/lingo/lingo-gr.cpp"
+#line 3538 "engines/director/lingo/lingo-gr.cpp"
break;
- case 171:
-#line 826 "engines/director/lingo/lingo-gr.y"
+ case 170:
+#line 819 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[-1].code); }
-#line 3561 "engines/director/lingo/lingo-gr.cpp"
+#line 3544 "engines/director/lingo/lingo-gr.cpp"
break;
- case 172:
-#line 828 "engines/director/lingo/lingo-gr.y"
+ case 171:
+#line 821 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code2(LC::c_arraypush, 0); }
-#line 3567 "engines/director/lingo/lingo-gr.cpp"
+#line 3550 "engines/director/lingo/lingo-gr.cpp"
break;
- case 173:
-#line 829 "engines/director/lingo/lingo-gr.y"
+ case 172:
+#line 822 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code2(LC::c_proparraypush, 0); }
-#line 3573 "engines/director/lingo/lingo-gr.cpp"
+#line 3556 "engines/director/lingo/lingo-gr.cpp"
break;
- case 174:
-#line 830 "engines/director/lingo/lingo-gr.y"
+ case 173:
+#line 823 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(LC::c_proparraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3579 "engines/director/lingo/lingo-gr.cpp"
+#line 3562 "engines/director/lingo/lingo-gr.cpp"
break;
- case 175:
-#line 831 "engines/director/lingo/lingo-gr.y"
+ case 174:
+#line 824 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(LC::c_arraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3585 "engines/director/lingo/lingo-gr.cpp"
+#line 3568 "engines/director/lingo/lingo-gr.cpp"
break;
- case 176:
-#line 833 "engines/director/lingo/lingo-gr.y"
+ case 175:
+#line 826 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3591 "engines/director/lingo/lingo-gr.cpp"
+#line 3574 "engines/director/lingo/lingo-gr.cpp"
break;
- case 177:
-#line 834 "engines/director/lingo/lingo-gr.y"
+ case 176:
+#line 827 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3597 "engines/director/lingo/lingo-gr.cpp"
+#line 3580 "engines/director/lingo/lingo-gr.cpp"
break;
- case 178:
-#line 836 "engines/director/lingo/lingo-gr.y"
+ case 177:
+#line 829 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3603 "engines/director/lingo/lingo-gr.cpp"
+#line 3586 "engines/director/lingo/lingo-gr.cpp"
break;
- case 179:
-#line 837 "engines/director/lingo/lingo-gr.y"
+ case 178:
+#line 830 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3609 "engines/director/lingo/lingo-gr.cpp"
+#line 3592 "engines/director/lingo/lingo-gr.cpp"
break;
- case 180:
-#line 839 "engines/director/lingo/lingo-gr.y"
+ case 179:
+#line 832 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_symbolpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
delete (yyvsp[-2].s); }
-#line 3618 "engines/director/lingo/lingo-gr.cpp"
+#line 3601 "engines/director/lingo/lingo-gr.cpp"
break;
- case 181:
-#line 843 "engines/director/lingo/lingo-gr.y"
+ case 180:
+#line 836 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_stringpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
delete (yyvsp[-2].s); }
-#line 3627 "engines/director/lingo/lingo-gr.cpp"
+#line 3610 "engines/director/lingo/lingo-gr.cpp"
break;
- case 182:
-#line 847 "engines/director/lingo/lingo-gr.y"
+ case 181:
+#line 840 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_stringpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
delete (yyvsp[-2].s); }
-#line 3636 "engines/director/lingo/lingo-gr.cpp"
+#line 3619 "engines/director/lingo/lingo-gr.cpp"
break;
-#line 3640 "engines/director/lingo/lingo-gr.cpp"
+#line 3623 "engines/director/lingo/lingo-gr.cpp"
default: break;
}
@@ -3835,7 +3818,7 @@ yyreturn:
return yyresult;
}
-#line 853 "engines/director/lingo/lingo-gr.y"
+#line 846 "engines/director/lingo/lingo-gr.y"
int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index 0e8ad2b57f..4988e0b597 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -146,7 +146,7 @@ extern int yydebug;
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
union YYSTYPE
{
-#line 168 "engines/director/lingo/lingo-gr.y"
+#line 162 "engines/director/lingo/lingo-gr.y"
Common::String *s;
int i;
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index e4e9dc4445..14a5c655e0 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -100,7 +100,7 @@ static void startDef() {
(*g_lingo->_methodVars)[i->_key] = i->_value;
}
if (g_lingo->_inFactory) {
- for (DatumHash::iterator i = g_lingo->_currentFactory->properties.begin(); i != g_lingo->_currentFactory->properties.end(); ++i) {
+ for (DatumHash::iterator i = g_lingo->_assemblyContext->_properties.begin(); i != g_lingo->_assemblyContext->_properties.end(); ++i) {
(*g_lingo->_methodVars)[i->_key] = kVarInstance;
}
}
@@ -149,14 +149,8 @@ static VarType globalCheck() {
static void mVar(Common::String *s, VarType type) {
if (!g_lingo->_methodVars->contains(*s)) {
(*g_lingo->_methodVars)[*s] = type;
- if (type == kVarProperty) {
- g_lingo->_assemblyContext->_propNames.push_back(*s);
- } else if (type == kVarInstance) {
- if (g_lingo->_inFactory) {
- g_lingo->_currentFactory->properties[*s] = Datum();
- } else {
- warning("Instance var '%s' defined outside factory", s->c_str());
- }
+ if (type == kVarProperty || type == kVarInstance) {
+ g_lingo->_assemblyContext->_properties[*s] = Datum();
} else if (type == kVarGlobal) {
g_lingo->varCreate(*s, true);
}
@@ -768,7 +762,7 @@ playfunc: tPLAY expr { // "play #done" is also caught by this
//
// See also:
// on keyword
-defn: tMACRO { startDef(); } ID { g_lingo->_currentFactory = NULL; }
+defn: tMACRO { startDef(); } ID
lbl argdef '\n' argstore stmtlist {
g_lingo->code1(LC::c_procret);
g_lingo->codeDefine(*$ID, $lbl, $argdef);
@@ -778,7 +772,7 @@ defn: tMACRO { startDef(); } ID { g_lingo->_currentFactory = NULL; }
| tMETHOD { startDef(); (*g_lingo->_methodVars)["me"] = kVarArgument; }
lbl argdef '\n' argstore stmtlist {
g_lingo->code1(LC::c_procret);
- g_lingo->codeDefine(*$tMETHOD, $lbl, $argdef + 1, g_lingo->_currentFactory);
+ g_lingo->codeDefine(*$tMETHOD, $lbl, $argdef + 1);
endDef();
delete $tMETHOD; }
| on lbl argdef '\n' argstore stmtlist ENDCLAUSE endargdef { // D3
@@ -795,8 +789,7 @@ defn: tMACRO { startDef(); } ID { g_lingo->_currentFactory = NULL; }
endDef();
delete $on; }
-on: tON { startDef(); } ID {
- $$ = $ID; g_lingo->_currentFactory = NULL; }
+on: tON { startDef(); } ID { $$ = $ID; }
argdef: /* nothing */ { $$ = 0; }
| ID { g_lingo->codeArg($ID); mVar($ID, kVarArgument); $$ = 1; delete $ID; }
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index a77363b5b9..2af923deb1 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -31,7 +31,7 @@
namespace Director {
-static struct MethodProto {
+static struct PredefinedProto {
const char *name;
void (*func)(int);
int minArgs; // -1 -- arglist
@@ -60,7 +60,7 @@ static struct MethodProto {
};
void Lingo::initMethods() {
- for (MethodProto *mtd = predefinedMethods; mtd->name; mtd++) {
+ for (PredefinedProto *mtd = predefinedMethods; mtd->name; mtd++) {
if (mtd->version > _vm->getVersion())
continue;
@@ -110,183 +110,144 @@ void Lingo::openXLib(const Common::String &name, ObjectType type) {
}
}
-Object::Object(const Common::String &objName, ObjectType objType, ScriptContext *objCtx) {
- name = new Common::String(objName);
- type = objType;
- disposed = false;
- inheritanceLevel = 1;
- refCount = new int;
- *refCount = 0;
- ctx = objCtx;
- if (ctx)
- ctx->setTarget(this);
-
- if (objType == kFactoryObj) {
- objArray = new Common::HashMap<uint32, Datum>;
- } else {
- objArray = nullptr;
- }
+// Initialization/disposal
+
+void LM::m_new(int nargs) {
+ // This is usually overridden by a user-defined mNew
+ g_lingo->printSTUBWithArglist("m_new", nargs);
+ g_lingo->push(g_lingo->_currentMe);
}
-Object::Object(const Object &obj) {
- name = new Common::String(*obj.name);
- type = obj.type;
- disposed = obj.disposed;
- inheritanceLevel = obj.inheritanceLevel + 1;
- properties = obj.properties;
- refCount = new int;
- *refCount = 0;
- if (obj.ctx) {
- ctx = new ScriptContext(*obj.ctx);
- ctx->setTarget(this);
- } else {
- ctx = nullptr;
- }
+void LM::m_dispose(int nargs) {
+ g_lingo->_currentMe.u.obj->dispose();
+}
- if (obj.objArray) {
- objArray = new Common::HashMap<uint32, Datum>(*obj.objArray);
- } else {
- objArray = nullptr;
- }
+/* ScriptContext */
+
+ScriptContext::ScriptContext(Common::String name, LingoArchive *archive, ScriptType type, uint16 id)
+ : Object(name), _archive(archive), _scriptType(type), _id(id) {
+ _objType = kScriptObj;
}
-Object::~Object() {
- delete name;
- delete objArray;
- delete refCount;
- delete ctx;
+ScriptContext::ScriptContext(const ScriptContext &sc) : Object(sc) {
+ _scriptType = sc._scriptType;
+ _functionNames = sc._functionNames;
+ for (SymbolHash::iterator it = sc._functionHandlers.begin(); it != sc._functionHandlers.end(); ++it) {
+ _functionHandlers[it->_key] = it->_value;
+ _functionHandlers[it->_key].ctx = this;
+ }
+ for (Common::HashMap<uint32, Symbol>::iterator it = sc._eventHandlers.begin(); it != sc._eventHandlers.end(); ++it) {
+ _eventHandlers[it->_key] = it->_value;
+ _eventHandlers[it->_key].ctx = this;
+ }
+ _constants = sc._constants;
+ _properties = sc._properties;
+
+ _archive = sc._archive;
+ _id = sc._id;
}
-Object *Object::clone() {
- return new Object(*this);
+ScriptContext::~ScriptContext() {}
+
+Common::String ScriptContext::asString() {
+ return Common::String::format("script: #%s %d %p", _name.c_str(), _inheritanceLevel, (void *)this);
}
-Symbol Object::getMethod(const Common::String &methodName) {
- if (disposed) {
- error("Method '%s' called on disposed object <%s>", methodName.c_str(), Datum(this).asString(true).c_str());
- }
+Symbol ScriptContext::getMethod(const Common::String &methodName) {
+ Symbol sym;
- // instance method (factory, script object, and Xtra)
- if ((type & (kFactoryObj | kScriptObj | kXtraObj)) && ctx->_functionHandlers.contains(methodName)) {
- return ctx->_functionHandlers[methodName];
+ if (_functionHandlers.contains(methodName)) {
+ sym = _functionHandlers[methodName];
+ sym.target = this;
+ return sym;
}
- if ((type & (kFactoryObj | kXObj)) && methodName.hasPrefixIgnoreCase("m")) {
- // factory or XObject
- Common::String shortName = methodName.substr(1);
- if (type == kXObj && ctx->_functionHandlers.contains(shortName) && inheritanceLevel > 1) {
- // instance method (XObject)
- return ctx->_functionHandlers[shortName];
- }
- if (g_lingo->_methods.contains(shortName) && (type & g_lingo->_methods[shortName].targetType)) {
- // predefined method
- Symbol sym = g_lingo->_methods[shortName];
- sym.target = this;
- return sym;
- }
- } else {
- // script object, Xtra, etc.
- if (g_lingo->_methods.contains(methodName) && (type & g_lingo->_methods[methodName].targetType)) {
- // predefined method
- Symbol sym = g_lingo->_methods[methodName];
- sym.target = this;
- return sym;
- }
- if (properties.contains("ancestor") && properties["ancestor"].type == OBJECT
- && (properties["ancestor"].u.obj->type & (kScriptObj | kXtraObj))) {
+ sym = Object::getMethod(methodName);
+ if (sym.type != VOID)
+ return sym;
+
+ if (_objType == kScriptObj) {
+ if (_properties.contains("ancestor") && _properties["ancestor"].type == OBJECT
+ && (_properties["ancestor"].u.obj->getObjType() & (kScriptObj | kXtraObj))) {
// ancestor method
- debugC(3, kDebugLingoExec, "Calling method '%s' on ancestor: <%s>", methodName.c_str(), properties["ancestor"].asString(true).c_str());
- return properties["ancestor"].u.obj->getMethod(methodName);
+ debugC(3, kDebugLingoExec, "Calling method '%s' on ancestor: <%s>", methodName.c_str(), _properties["ancestor"].asString(true).c_str());
+ return _properties["ancestor"].u.obj->getMethod(methodName);
}
}
- return Symbol();
+ return sym;
}
-// Property access
-
-bool Object::hasProp(const Common::String &propName) {
- if (disposed) {
+bool ScriptContext::hasProp(const Common::String &propName) {
+ if (_disposed) {
error("Property '%s' accessed on disposed object <%s>", propName.c_str(), Datum(this).asString(true).c_str());
}
- if (properties.contains(propName)) {
+ if (_properties.contains(propName)) {
return true;
}
- if (type & (kScriptObj | kXtraObj)) {
- if (properties.contains("ancestor") && properties["ancestor"].type == OBJECT
- && (properties["ancestor"].u.obj->type & (kScriptObj | kXtraObj))) {
- return properties["ancestor"].u.obj->hasProp(propName);
+ if (_objType == kScriptObj) {
+ if (_properties.contains("ancestor") && _properties["ancestor"].type == OBJECT
+ && (_properties["ancestor"].u.obj->getObjType() & (kScriptObj | kXtraObj))) {
+ return _properties["ancestor"].u.obj->hasProp(propName);
}
}
return false;
}
-Datum Object::getProp(const Common::String &propName) {
- if (disposed) {
+Datum ScriptContext::getProp(const Common::String &propName) {
+ if (_disposed) {
error("Property '%s' accessed on disposed object <%s>", propName.c_str(), Datum(this).asString(true).c_str());
}
- if (properties.contains(propName)) {
- return properties[propName];
+ if (_properties.contains(propName)) {
+ return _properties[propName];
}
- if (type & (kScriptObj | kXtraObj)) {
- if (properties.contains("ancestor") && properties["ancestor"].type == OBJECT
- && (properties["ancestor"].u.obj->type & (kScriptObj | kXtraObj))) {
- debugC(3, kDebugLingoExec, "Getting prop '%s' from ancestor: <%s>", propName.c_str(), properties["ancestor"].asString(true).c_str());
- return properties["ancestor"].u.obj->getProp(propName);
+ if (_objType == kScriptObj) {
+ if (_properties.contains("ancestor") && _properties["ancestor"].type == OBJECT
+ && (_properties["ancestor"].u.obj->getObjType() & (kScriptObj | kXtraObj))) {
+ debugC(3, kDebugLingoExec, "Getting prop '%s' from ancestor: <%s>", propName.c_str(), _properties["ancestor"].asString(true).c_str());
+ return _properties["ancestor"].u.obj->getProp(propName);
}
}
- return properties[propName]; // return new property
+ return _properties[propName]; // return new property
}
-bool Object::setProp(const Common::String &propName, const Datum &value) {
- if (disposed) {
+bool ScriptContext::setProp(const Common::String &propName, const Datum &value) {
+ if (_disposed) {
error("Property '%s' accessed on disposed object <%s>", propName.c_str(), Datum(this).asString(true).c_str());
}
- if (properties.contains(propName)) {
- properties[propName] = value;
+ if (_properties.contains(propName)) {
+ _properties[propName] = value;
return true;
}
- if (type & (kScriptObj | kXtraObj)) {
- if (properties.contains("ancestor") && properties["ancestor"].type == OBJECT
- && (properties["ancestor"].u.obj->type & (kScriptObj | kXtraObj))) {
- debugC(3, kDebugLingoExec, "Getting prop '%s' from ancestor: <%s>", propName.c_str(), properties["ancestor"].asString(true).c_str());
- return properties["ancestor"].u.obj->setProp(propName, value);
+ if (_objType == kScriptObj) {
+ if (_properties.contains("ancestor") && _properties["ancestor"].type == OBJECT
+ && (_properties["ancestor"].u.obj->getObjType() & (kScriptObj | kXtraObj))) {
+ debugC(3, kDebugLingoExec, "Getting prop '%s' from ancestor: <%s>", propName.c_str(), _properties["ancestor"].asString(true).c_str());
+ return _properties["ancestor"].u.obj->setProp(propName, value);
}
}
return false;
}
-// Initialization/disposal
-
-void LM::m_new(int nargs) {
- // This is usually overridden by a user-defined mNew
- g_lingo->printSTUBWithArglist("m_new", nargs);
- g_lingo->push(g_lingo->_currentMe);
-}
-
-void LM::m_dispose(int nargs) {
- g_lingo->_currentMe.u.obj->disposed = true;
-}
-
// Object array
void LM::m_get(int nargs) {
- Object *me = g_lingo->_currentMe.u.obj;
+ ScriptContext *me = static_cast<ScriptContext *>(g_lingo->_currentMe.u.obj);
Datum indexD = g_lingo->pop();
uint index = MAX(0, indexD.asInt());
- if (me->objArray->contains(index)) {
- g_lingo->push((*me->objArray)[index]);
+ if (me->_objArray.contains(index)) {
+ g_lingo->push(me->_objArray[index]);
} else {
g_lingo->push(Datum(0));
}
}
void LM::m_put(int nargs) {
- Object *me = g_lingo->_currentMe.u.obj;
+ ScriptContext *me = static_cast<ScriptContext *>(g_lingo->_currentMe.u.obj);
Datum value = g_lingo->pop();
Datum indexD = g_lingo->pop();
uint index = MAX(0, indexD.asInt());
- (*me->objArray)[index] = value;
+ me->_objArray[index] = value;
}
// Other
@@ -294,7 +255,7 @@ void LM::m_put(int nargs) {
void LM::m_perform(int nargs) {
// Lingo doesn't seem to bother cloning the object when
// mNew is called with mPerform
- Object *me = g_lingo->_currentMe.u.obj;
+ AbstractObject *me = g_lingo->_currentMe.u.obj;
Datum methodName = g_lingo->_stack.remove_at(g_lingo->_stack.size() - nargs); // Take method name out of stack
nargs -= 1;
Symbol funcSym = me->getMethod(*methodName.u.s);
@@ -308,19 +269,15 @@ void LM::m_describe(int nargs) {
}
void LM::m_instanceRespondsTo(int nargs) {
- Object *me = g_lingo->_currentMe.u.obj;
+ AbstractObject *me = g_lingo->_currentMe.u.obj;
Datum d = g_lingo->pop();
Common::String methodName = d.asString();
- if (me->ctx->_functionHandlers.contains(methodName)) {
+ if (g_lingo->_methods.contains(methodName) && (me->getObjType() & g_lingo->_methods[methodName].type)) {
g_lingo->push(Datum(1));
- return;
- }
- if (g_lingo->_methods.contains(methodName) && (me->type & g_lingo->_methods[methodName].type)) {
- g_lingo->push(Datum(1));
- return;
+ } else {
+ g_lingo->push(Datum(0));
}
- g_lingo->push(Datum(0));
}
void LM::m_messageList(int nargs) {
@@ -329,24 +286,21 @@ void LM::m_messageList(int nargs) {
}
void LM::m_name(int nargs) {
- Object *me = g_lingo->_currentMe.u.obj;
- g_lingo->push(Datum(*me->name));
+ AbstractObject *me = g_lingo->_currentMe.u.obj;
+ g_lingo->push(me->getName());
}
void LM::m_respondsTo(int nargs) {
- Object *me = g_lingo->_currentMe.u.obj;
+ AbstractObject *me = g_lingo->_currentMe.u.obj;
Datum d = g_lingo->pop();
Common::String methodName = d.asString();
- if (me->ctx->_functionHandlers.contains(methodName) && me->inheritanceLevel > 1) {
- g_lingo->push(Datum(1));
- return;
- }
- if (g_lingo->_methods.contains(methodName) && (me->type & g_lingo->_methods[methodName].type)) {
+ // TODO: Check inheritance level
+ if (g_lingo->_methods.contains(methodName) && (me->getObjType() & g_lingo->_methods[methodName].type)) {
g_lingo->push(Datum(1));
- return;
+ } else {
+ g_lingo->push(Datum(0));
}
- g_lingo->push(Datum(0));
}
} // End of namespace Director
diff --git a/engines/director/lingo/lingo-object.h b/engines/director/lingo/lingo-object.h
index 49206f698c..6cb4bca131 100644
--- a/engines/director/lingo/lingo-object.h
+++ b/engines/director/lingo/lingo-object.h
@@ -23,30 +23,176 @@
#ifndef DIRECTOR_LINGO_OBJECT_H
#define DIRECTOR_LINGO_OBJECT_H
+#include "director/lingo/lingo-gr.h"
+
namespace Director {
-struct Object {
- Common::String *name;
- ObjectType type;
- bool disposed;
+struct MethodProto {
+ const char *name;
+ void (*func)(int);
+ int minArgs; // -1 -- arglist
+ int maxArgs;
+ int version;
+};
+
+class AbstractObject {
+public:
+ virtual ~AbstractObject() {};
+
+ virtual Common::String getName() const = 0;
+ virtual ObjectType getObjType() const = 0;
+ virtual bool isDisposed() const = 0;
+ virtual int *getRefCount() const = 0;
+ virtual int getInheritanceLevel() const = 0;
+
+ virtual Common::String asString() = 0;
+ virtual AbstractObject *clone() = 0;
+ virtual void dispose() = 0;
+ virtual Symbol getMethod(const Common::String &methodName) = 0;
+ virtual bool hasProp(const Common::String &propName) = 0;
+ virtual Datum getProp(const Common::String &propName) = 0;
+ virtual bool setProp(const Common::String &propName, const Datum &value) = 0;
+};
+
+template <typename Derived>
+class Object : public AbstractObject {
+public:
+ int *_refCount;
+
+protected:
+ Object(Common::String objName) {
+ _name = objName;
+ _objType = kNoneObj;
+ _disposed = false;
+ _inheritanceLevel = 1;
+ _refCount = new int;
+ *_refCount = 0;
+ };
+
+ Object(const Object &obj) {
+ _name = obj._name;
+ _objType = obj._objType;
+ _disposed = obj._disposed;
+ _inheritanceLevel = obj._inheritanceLevel + 1;
+ _refCount = new int;
+ *_refCount = 0;
+ };
+
+public:
+ static void initMethods(MethodProto protos[]) {
+ _methods = new SymbolHash;
+ for (MethodProto *mtd = protos; mtd->name; mtd++) {
+ if (mtd->version > g_lingo->_vm->getVersion())
+ continue;
+
+ Symbol sym;
+ sym.name = new Common::String(mtd->name);
+ sym.type = FBLTIN;
+ sym.nargs = mtd->minArgs;
+ sym.maxArgs = mtd->maxArgs;
+ sym.u.bltin = mtd->func;
+ (*_methods)[mtd->name] = sym;
+ }
+ }
+
+ virtual ~Object() {
+ delete _refCount;
+ };
+
+ virtual Common::String getName() const { return _name; };
+ virtual ObjectType getObjType() const { return _objType; };
+ virtual bool isDisposed() const { return _disposed; };
+ virtual int *getRefCount() const { return _refCount; };
+ virtual int getInheritanceLevel() const { return _inheritanceLevel; };
+
+ virtual Common::String asString() {
+ return Common::String::format("object: #%s %d %p", _name.c_str(), _inheritanceLevel, (void *)this);
+ };
+
+ virtual AbstractObject *clone() {
+ return new Derived(static_cast<Derived const &>(*this));
+ };
+
+ virtual void dispose() {
+ _disposed = true;
+ };
+
+ virtual Symbol getMethod(const Common::String &methodName) {
+ if (_disposed) {
+ error("Method '%s' called on disposed object <%s>", methodName.c_str(), asString().c_str());
+ }
+
+ Common::String methodId;
+ if ((_objType & (kFactoryObj | kXObj)) && methodName.hasPrefixIgnoreCase("m")) {
+ methodId = methodName.substr(1);
+ } else {
+ methodId = methodName;
+ }
+
+
+ Symbol sym;
+ if (_methods && _methods->contains(methodId)) {
+ sym = (*_methods)[methodId];
+ sym.target = this;
+ return sym;
+ }
+ if (g_lingo->_methods.contains(methodId) && (g_lingo->_methods[methodId].targetType & _objType)) {
+ sym = g_lingo->_methods[methodId];
+ sym.target = this;
+ return sym;
+ }
+
+ return sym;
+ };
+
+ virtual bool hasProp(const Common::String &propName) {
+ return false;
+ };
+ virtual Datum getProp(const Common::String &propName) {
+ return Datum();
+ };
+ virtual bool setProp(const Common::String &propName, const Datum &value) {
+ return false;
+ };
+
+protected:
+ static SymbolHash *_methods;
+ Common::String _name;
+ ObjectType _objType;
+ bool _disposed;
+ int _inheritanceLevel; // 1 for original object
+};
+
+template<typename Derived>
+SymbolHash *Object<Derived>::_methods = nullptr;
+
+class ScriptContext : public Object<ScriptContext> {
+public:
+ LingoArchive *_archive;
+ ScriptType _scriptType;
+ uint16 _id;
+ Common::Array<Common::String> _functionNames; // used by cb_localcall
+ SymbolHash _functionHandlers;
+ Common::HashMap<uint32, Symbol> _eventHandlers;
+ Common::Array<Datum> _constants;
+ DatumHash _properties;
+ Common::HashMap<uint32, Datum> _objArray;
- DatumHash properties;
- int *refCount;
- ScriptContext *ctx;
- int inheritanceLevel; // 1 for original object
+public:
+ ScriptContext(Common::String name, LingoArchive *archive = nullptr, ScriptType type = kNoneScript, uint16 id = 0);
+ ScriptContext(const ScriptContext &sc);
+ virtual ~ScriptContext();
- // used only for factories
- Common::HashMap<uint32, Datum> *objArray;
+ bool isFactory() const { return _objType == kFactoryObj; };
+ void setFactory(bool flag) { _objType = flag ? kFactoryObj : kScriptObj; }
- Object(const Common::String &objName, ObjectType objType, ScriptContext *objCtx = nullptr);
- Object(const Object &obj);
- virtual ~Object();
+ virtual Common::String asString();
+ virtual Symbol getMethod(const Common::String &methodName);
+ virtual bool hasProp(const Common::String &propName);
+ virtual Datum getProp(const Common::String &propName);
+ virtual bool setProp(const Common::String &propName, const Datum &value);
- virtual Object *clone();
- Symbol getMethod(const Common::String &methodName);
- bool hasProp(const Common::String &propName);
- Datum getProp(const Common::String &propName);
- bool setProp(const Common::String &propName, const Datum &value);
+ Symbol define(Common::String &name, int nargs, ScriptData *code, Common::Array<Common::String> *argNames, Common::Array<Common::String> *varNames);
};
namespace LM {
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 3d5daeacb2..db1b5d74d8 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -281,6 +281,7 @@ void LingoArchive::addCode(const char *code, ScriptType type, uint16 id, const c
ScriptContext *sc = g_lingo->compileLingo(code, this, type, id, contextName);
scriptContexts[type][id] = sc;
+ *sc->_refCount += 1;
}
ScriptContext *Lingo::compileAnonymous(const char *code) {
@@ -292,7 +293,7 @@ ScriptContext *Lingo::compileAnonymous(const char *code) {
ScriptContext *Lingo::compileLingo(const char *code, LingoArchive *archive, ScriptType type, uint16 id, const Common::String &scriptName, bool anonymous) {
_assemblyArchive = archive;
- ScriptContext *sc = _assemblyContext = new ScriptContext(scriptName, archive, type, id);
+ ScriptContext *mainContext = _assemblyContext = new ScriptContext(scriptName, archive, type, id);
_currentAssembly = new ScriptData;
_methodVars = new VarTypeHash;
@@ -318,12 +319,19 @@ ScriptContext *Lingo::compileLingo(const char *code, LingoArchive *archive, Scri
do {
Common::String chunk(begin, end);
- if (chunk.hasPrefixIgnoreCase("factory") || chunk.hasPrefixIgnoreCase("method"))
+ if (chunk.hasPrefixIgnoreCase("factory")) {
_inFactory = true;
- else if (chunk.hasPrefixIgnoreCase("macro") || chunk.hasPrefixIgnoreCase("on"))
+ _assemblyContext = new ScriptContext(scriptName, archive, type, id);
+ } else if (chunk.hasPrefixIgnoreCase("method")) {
+ _inFactory = true;
+ // remain in factory context
+ } else if (chunk.hasPrefixIgnoreCase("macro") || chunk.hasPrefixIgnoreCase("on")) {
_inFactory = false;
- else
+ _assemblyContext = mainContext;
+ } else {
_inFactory = false;
+ _assemblyContext = mainContext;
+ }
debugC(1, kDebugCompile, "Code chunk:\n#####\n%s#####", chunk.c_str());
@@ -381,7 +389,7 @@ ScriptContext *Lingo::compileLingo(const char *code, LingoArchive *archive, Scri
currentFunc.type = HANDLER;
currentFunc.u.defn = _currentAssembly;
Common::String typeStr = Common::String(scriptType2str(type));
- currentFunc.name = new Common::String("[" + typeStr + " " + _assemblyContext->_name + "]");
+ currentFunc.name = new Common::String("[" + typeStr + " " + _assemblyContext->getName() + "]");
currentFunc.ctx = _assemblyContext;
currentFunc.archive = archive;
currentFunc.anonymous = anonymous;
@@ -418,7 +426,7 @@ ScriptContext *Lingo::compileLingo(const char *code, LingoArchive *archive, Scri
_assemblyContext->_eventHandlers[kEventNone] = currentFunc;
_assemblyContext = nullptr;
_assemblyArchive = nullptr;
- return sc;
+ return mainContext;
}
void Lingo::printStack(const char *s, uint pc) {
@@ -723,11 +731,11 @@ Datum::Datum(const Common::String &val) {
*refCount = 1;
}
-Datum::Datum(Object *val) {
+Datum::Datum(AbstractObject *val) {
u.obj = val;
type = OBJECT;
lazy = false;
- refCount = val->refCount;
+ refCount = val->getRefCount();
*refCount += 1;
}
@@ -886,9 +894,9 @@ Common::String Datum::asString(bool printonly) {
break;
case OBJECT:
if (!printonly) {
- s = Common::String::format("#%s", u.obj->name->c_str());
+ s = Common::String::format("#%s", u.obj->getName().c_str());
} else {
- s = Common::String::format("object: #%s %d %p", u.obj->name->c_str(), u.obj->inheritanceLevel, (void *)u.obj);
+ s = u.obj->asString();
}
break;
case VOID:
@@ -1044,27 +1052,6 @@ int Datum::compareTo(Datum &d, bool ignoreCase) {
}
}
-void ScriptContext::setTarget(Object *target) {
- _target = target;
- for (SymbolHash::iterator it = _functionHandlers.begin(); it != _functionHandlers.end(); ++it) {
- it->_value.target = target;
- }
- for (Common::HashMap<uint32, Symbol>::iterator it = _eventHandlers.begin(); it != _eventHandlers.end(); ++it) {
- it->_value.target = target;
- }
-}
-
-Datum ScriptContext::getParentScript() {
- if (_parentScript.type != OBJECT) {
- _parentScript.type = OBJECT;
- _parentScript.u.obj = new Object(_name, kScriptObj, new ScriptContext(*this));
- for (Common::Array<Common::String>::iterator it = _propNames.begin(); it != _propNames.end(); ++it) {
- _parentScript.u.obj->properties[*it] = Datum();
- }
- }
- return _parentScript;
-}
-
void Lingo::parseMenu(const char *code) {
warning("STUB: parseMenu");
}
@@ -1156,9 +1143,10 @@ void Lingo::printAllVars() {
}
debugN("\n");
- if (_currentMe.type == OBJECT) {
+ if (_currentMe.type == OBJECT && _currentMe.u.obj->getObjType() & (kFactoryObj | kScriptObj)) {
+ ScriptContext *script = static_cast<ScriptContext *>(_currentMe.u.obj);
debugN(" Instance/property vars: ");
- for (DatumHash::iterator i = _currentMe.u.obj->properties.begin(); i != _currentMe.u.obj->properties.end(); ++i) {
+ for (DatumHash::iterator i = script->_properties.begin(); i != script->_properties.end(); ++i) {
debugN("%s, ", (*i)._key.c_str());
}
debugN("\n");
@@ -1279,7 +1267,7 @@ Datum Lingo::varFetch(Datum &var, bool global, DatumHash *localvars) {
// For kScriptObj handlers the target is an argument
// (and can be renamed from 'me)
- if (_currentMe.type == OBJECT && _currentMe.u.obj->type != kScriptObj && name.equalsIgnoreCase("me")) {
+ if (_currentMe.type == OBJECT && _currentMe.u.obj->getObjType() != kScriptObj && name.equalsIgnoreCase("me")) {
result = _currentMe;
return result;
}
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 3c1dbf9d50..196af0244d 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -42,7 +42,7 @@ struct TheEntityField;
struct LingoArchive;
struct LingoV4Bytecode;
struct LingoV4TheEntity;
-struct Object;
+class AbstractObject;
class ScriptContext;
class DirectorEngine;
class Frame;
@@ -97,7 +97,7 @@ struct Symbol { /* symbol table entry */
Common::Array<Common::String> *varNames;
ScriptContext *ctx; /* optional script context to execute with */
LingoArchive *archive; /* optional archive to execute with */
- Object *target; /* optional method target */
+ AbstractObject *target; /* optional method target */
bool anonymous;
Symbol();
@@ -117,7 +117,7 @@ struct Datum { /* interpreter stack type */
Common::String *s; /* STRING, VAR, OBJECT */
DatumArray *farr; /* ARRAY, POINT, RECT */
PropertyArray *parr; /* PARRAY */
- Object *obj;
+ AbstractObject *obj;
} u;
int *refCount;
@@ -128,7 +128,7 @@ struct Datum { /* interpreter stack type */
Datum(int val);
Datum(double val);
Datum(const Common::String &val);
- Datum(Object *val);
+ Datum(AbstractObject *val);
void reset();
~Datum() {
@@ -171,49 +171,6 @@ typedef Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common
typedef Common::HashMap<Common::String, TheEntity *, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> TheEntityHash;
typedef Common::HashMap<Common::String, TheEntityField *, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> TheEntityFieldHash;
-class ScriptContext {
-public:
- Common::String _name;
- LingoArchive *_archive;
- ScriptType _type;
- uint16 _id;
- Common::Array<Common::String> _functionNames; // used by cb_localcall
- SymbolHash _functionHandlers;
- Common::HashMap<uint32, Symbol> _eventHandlers;
- Common::Array<Datum> _constants;
- Common::Array<Common::String> _propNames;
-
- ScriptContext(Common::String name, LingoArchive *archive = nullptr, ScriptType type = kNoneScript, uint16 id = 0)
- : _name(name), _archive(archive), _type(type), _id(id), _target(nullptr) {}
- ScriptContext(const ScriptContext &sc) {
- _type = sc._type;
- _name = sc._name;
- _functionNames = sc._functionNames;
- for (SymbolHash::iterator it = sc._functionHandlers.begin(); it != sc._functionHandlers.end(); ++it) {
- _functionHandlers[it->_key] = it->_value;
- _functionHandlers[it->_key].ctx = this;
- }
- for (Common::HashMap<uint32, Symbol>::iterator it = sc._eventHandlers.begin(); it != sc._eventHandlers.end(); ++it) {
- _eventHandlers[it->_key] = it->_value;
- _eventHandlers[it->_key].ctx = this;
- }
- _constants = sc._constants;
- _propNames = sc._propNames;
-
- _archive = sc._archive;
- _id = sc._id;
- }
-
- Object *getTarget() const { return _target; }
- void setTarget(Object *target);
- Datum getParentScript();
- Symbol define(Common::String &name, int nargs, ScriptData *code, Common::Array<Common::String> *argNames, Common::Array<Common::String> *varNames);
-
-private:
- Datum _parentScript;
- Object *_target;
-};
-
struct CFrame { /* proc/func call stack frame */
Symbol sp; /* symbol table entry */
int retpc; /* where to resume after return */
@@ -410,7 +367,7 @@ public:
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 code4(inst code_1, inst code_2, inst code_3, inst code_4) { int o = code1(code_1); code1(code_2); code1(code_3); code1(code_4); return o; }
void codeArg(Common::String *s);
- Symbol codeDefine(Common::String &s, int start, int nargs, Object *obj = nullptr, int end = -1, bool removeCode = true);
+ Symbol codeDefine(Common::String &s, int start, int nargs, int end = -1, bool removeCode = true);
void codeFactory(Common::String &s);
int codeFloat(double f);
int codeFunc(Common::String *s, int numpar);
@@ -434,7 +391,6 @@ public:
int _errorbytenumber;
bool _ignoreError;
bool _inFactory;
- Object *_currentFactory;
Common::Array<RepeatBlock *> _repeatStack;
Common::Array<Common::String *> _argstack;
diff --git a/engines/director/lingo/xlibs/fileio.cpp b/engines/director/lingo/xlibs/fileio.cpp
index 2cbab90aee..774f92c841 100644
--- a/engines/director/lingo/xlibs/fileio.cpp
+++ b/engines/director/lingo/xlibs/fileio.cpp
@@ -28,43 +28,33 @@
#include "director/director.h"
#include "director/lingo/lingo.h"
#include "director/lingo/lingo-object.h"
-#include "director/lingo/lingo-gr.h"
#include "director/lingo/xlibs/fileio.h"
namespace Director {
static const char *xlibName = "FileIO";
-static struct MethodProto {
- const char *name;
- void (*func)(int);
- int minArgs; // -1 -- arglist
- int maxArgs;
- int type;
- int version;
-} xlibMethods[] = {
- { "delete", FileIO::m_delete, 0, 0, kXObj | kXtraObj, 2 }, // D2
- { "dispose", FileIO::m_dispose, 0, 0, kXObj, 2 }, // D2
- { "fileName", FileIO::m_fileName, 0, 0, kXObj | kXtraObj, 2 }, // D2
- { "getLength", FileIO::m_getLength, 0, 0, kXObj | kXtraObj, 2 }, // D2
- { "getPosition", FileIO::m_getPosition, 0, 0, kXObj | kXtraObj, 2 }, // D2
- { "new", FileIO::m_new, 2, 2, kXObj | kXtraObj, 2 }, // D2
- { "readChar", FileIO::m_readChar, 0, 0, kXObj | kXtraObj, 2 }, // D2
- { "readLine", FileIO::m_readLine, 0, 0, kXObj | kXtraObj, 2 }, // D2
- { "readToken", FileIO::m_readToken, 2, 2, kXObj | kXtraObj, 2 }, // D2
- { "readWord", FileIO::m_readWord, 0, 0, kXObj | kXtraObj, 2 }, // D2
- { "setPosition", FileIO::m_setPosition, 1, 1, kXObj | kXtraObj, 2 }, // D2
- { "writeChar", FileIO::m_writeChar, 1, 1, kXObj | kXtraObj, 2 }, // D2
- { "writeString", FileIO::m_writeString, 1, 1, kXObj | kXtraObj, 2 }, // D2
- { 0, 0, 0, 0, 0, 0 }
+static MethodProto xlibMethods[] = {
+ { "delete", FileIO::m_delete, 0, 0, 2 }, // D2
+ { "fileName", FileIO::m_fileName, 0, 0, 2 }, // D2
+ { "getLength", FileIO::m_getLength, 0, 0, 2 }, // D2
+ { "getPosition", FileIO::m_getPosition, 0, 0, 2 }, // D2
+ { "new", FileIO::m_new, 2, 2, 2 }, // D2
+ { "readChar", FileIO::m_readChar, 0, 0, 2 }, // D2
+ { "readLine", FileIO::m_readLine, 0, 0, 2 }, // D2
+ { "readToken", FileIO::m_readToken, 2, 2, 2 }, // D2
+ { "readWord", FileIO::m_readWord, 0, 0, 2 }, // D2
+ { "setPosition", FileIO::m_setPosition, 1, 1, 2 }, // D2
+ { "writeChar", FileIO::m_writeChar, 1, 1, 2 }, // D2
+ { "writeString", FileIO::m_writeString, 1, 1, 2 }, // D2
+ { 0, 0, 0, 0, 0 }
};
void FileIO::initialize(int type) {
+ FileObject::initMethods(xlibMethods);
if (type & kXObj) {
if (!g_lingo->_globalvars.contains(xlibName)) {
- ScriptContext *ctx = new ScriptContext(Common::String(xlibName));
- FileObject *xobj = new FileObject(kXObj, ctx);
- xobj->initMethods();
+ FileObject *xobj = new FileObject(kXObj);
g_lingo->_globalvars[xlibName] = xobj;
} else {
warning("FileIO XObject already initialized");
@@ -77,50 +67,54 @@ void FileIO::initialize(int type) {
// Initialization/disposal
-void FileObject::initMethods() {
- for (MethodProto *mtd = xlibMethods; mtd->name; mtd++) {
- if (mtd->version > g_lingo->_vm->getVersion() || !(type & mtd->type))
- continue;
-
- Symbol sym;
- sym.name = new Common::String(mtd->name);
- sym.type = FBLTIN;
- sym.nargs = mtd->minArgs;
- sym.maxArgs = mtd->maxArgs;
- sym.targetType = mtd->type;
- sym.u.bltin = mtd->func;
- ctx->_functionHandlers[mtd->name] = sym;
- }
+FileObject::FileObject(ObjectType objType) : Object("FileIO") {
+ _objType = objType;
+ _filename = nullptr;
+ _inFile = nullptr;
+ _inStream = nullptr;
+ _outFile = nullptr;
+ _outStream = nullptr;
}
-Object *FileObject::clone() {
- return new FileObject(*this);
+FileObject::FileObject(const FileObject &obj) : Object(obj) {
+ _filename = nullptr;
+ _inFile = nullptr;
+ _inStream = nullptr;
+ _outFile = nullptr;
+ _outStream = nullptr;
}
-void FileObject::dispose() {
- disposed = true;
+FileObject::~FileObject() {
+ clear();
+}
- if (filename) {
- delete filename;
- filename = nullptr;
+void FileObject::clear() {
+ if (_filename) {
+ delete _filename;
+ _filename = nullptr;
}
- if (inFile) {
- delete inFile;
- if (inStream != inFile)
- delete inStream;
- inFile = nullptr;
- inStream = nullptr;
+ if (_inFile) {
+ delete _inFile;
+ if (_inStream != _inFile)
+ delete _inStream;
+ _inFile = nullptr;
+ _inStream = nullptr;
}
- if (outFile) {
- outFile->write(outStream->getData(), outStream->size());
- outFile->finalize();
- delete outFile;
- delete outStream;
- outFile = nullptr;
- outStream = nullptr;
+ if (_outFile) {
+ _outFile->write(_outStream->getData(), _outStream->size());
+ _outFile->finalize();
+ delete _outFile;
+ delete _outStream;
+ _outFile = nullptr;
+ _outStream = nullptr;
}
}
+void FileObject::dispose() {
+ _disposed = true;
+ clear();
+}
+
void FileIO::saveFileError() {
Common::SaveFileManager *saves = g_system->getSavefileManager();
if (saves->getError().getCode()) {
@@ -154,39 +148,39 @@ void FileIO::m_new(int nargs) {
}
if (option.equalsIgnoreCase("read")) {
- me->inFile = saves->openForLoading(filename);
- me->inStream = me->inFile;
- if (!me->inFile) {
+ me->_inFile = saves->openForLoading(filename);
+ me->_inStream = me->_inFile;
+ if (!me->_inFile) {
saveFileError();
delete me;
return;
}
} else if (option.equalsIgnoreCase("write")) {
// OutSaveFile is not seekable so create a separate seekable stream
- // which will be written to the outfile upon disposal
- me->outFile = saves->openForSaving(filename, false);
- me->outStream = new Common::MemoryWriteStreamDynamic(DisposeAfterUse::YES);
- if (!me->outFile) {
+ // which will be written to the _outFile upon disposal
+ me->_outFile = saves->openForSaving(filename, false);
+ me->_outStream = new Common::MemoryWriteStreamDynamic(DisposeAfterUse::YES);
+ if (!me->_outFile) {
saveFileError();
delete me;
return;
}
} else if (option.equalsIgnoreCase("append")) {
- Common::InSaveFile *inFile = saves->openForLoading(filename);
- if (!inFile) {
+ Common::InSaveFile *_inFile = saves->openForLoading(filename);
+ if (!_inFile) {
saveFileError();
delete me;
return;
}
- me->outStream = new Common::MemoryWriteStreamDynamic(DisposeAfterUse::YES);
- byte b = inFile->readByte();
- while (!inFile->eos() && !inFile->err()) {
- me->outStream->writeByte(b);
- b = inFile->readByte();
+ me->_outStream = new Common::MemoryWriteStreamDynamic(DisposeAfterUse::YES);
+ byte b = _inFile->readByte();
+ while (!_inFile->eos() && !_inFile->err()) {
+ me->_outStream->writeByte(b);
+ b = _inFile->readByte();
}
- delete inFile;
- me->outFile = saves->openForSaving(filename, false);
- if (!me->outFile) {
+ delete _inFile;
+ me->_outFile = saves->openForSaving(filename, false);
+ if (!me->_outFile) {
saveFileError();
delete me;
return;
@@ -195,28 +189,23 @@ void FileIO::m_new(int nargs) {
error("Unsupported FileIO option: '%s'", option.c_str());
}
- me->filename = new Common::String(filename);
+ me->_filename = new Common::String(filename);
g_lingo->push(g_lingo->_currentMe);
}
-void FileIO::m_dispose(int nargs) {
- FileObject *me = static_cast<FileObject *>(g_lingo->_currentMe.u.obj);
- me->dispose();
-}
-
// Read
void FileIO::m_readChar(int nargs) {
FileObject *me = static_cast<FileObject *>(g_lingo->_currentMe.u.obj);
- if (!me->inStream || me->inStream->eos() || me->inStream->err()) {
+ if (!me->_inStream || me->_inStream->eos() || me->_inStream->err()) {
g_lingo->push(Datum(kErrorEOF));
return;
}
- int ch = me->inStream->readByte();
- if (me->inStream->eos() || me->inStream->err()) {
+ int ch = me->_inStream->readByte();
+ if (me->_inStream->eos() || me->_inStream->err()) {
ch = kErrorEOF;
}
g_lingo->push(Datum(ch));
@@ -255,7 +244,7 @@ void FileIO::m_readToken(int nargs) {
Common::String skipString = d1.asString();
Common::String breakString = d2.asString();
- if (!me->inStream || me->inStream->eos() || me->inStream->err()) {
+ if (!me->_inStream || me->_inStream->eos() || me->_inStream->err()) {
g_lingo->push(Datum(""));
return;
}
@@ -263,8 +252,8 @@ void FileIO::m_readToken(int nargs) {
Common::String tok = "";
char ch;
do {
- ch = me->inStream->readByte();
- if (me->inStream->eos() || me->inStream->err()) {
+ ch = me->_inStream->readByte();
+ if (me->_inStream->eos() || me->_inStream->err()) {
g_lingo->push(Datum(tok));
return;
}
@@ -272,9 +261,9 @@ void FileIO::m_readToken(int nargs) {
while (!charInMatchString(ch, breakString)) {
tok += ch;
- ch = me->inStream->readByte();
+ ch = me->_inStream->readByte();
- if (me->inStream->eos() || me->inStream->err()) {
+ if (me->_inStream->eos() || me->_inStream->err()) {
g_lingo->push(Datum(tok));
return;
}
@@ -284,7 +273,7 @@ void FileIO::m_readToken(int nargs) {
if (skipString.size() == 0) {
tok += ch;
} else {
- me->inStream->seek(-1, SEEK_CUR);
+ me->_inStream->seek(-1, SEEK_CUR);
}
g_lingo->push(Datum(tok));
@@ -296,12 +285,12 @@ void FileIO::m_writeChar(int nargs) {
FileObject *me = static_cast<FileObject *>(g_lingo->_currentMe.u.obj);
Datum d = g_lingo->pop();
- if (!me->outStream) {
+ if (!me->_outStream) {
g_lingo->push(Datum(kErrorReadOnly));
return;
}
- me->outStream->writeByte(d.asInt());
+ me->_outStream->writeByte(d.asInt());
g_lingo->push(Datum(kErrorNone));
}
@@ -309,12 +298,12 @@ void FileIO::m_writeString(int nargs) {
FileObject *me = static_cast<FileObject *>(g_lingo->_currentMe.u.obj);
Datum d = g_lingo->pop();
- if (!me->outStream) {
+ if (!me->_outStream) {
g_lingo->push(Datum(kErrorReadOnly));
return;
}
- me->outStream->writeString(d.asString());
+ me->_outStream->writeString(d.asString());
g_lingo->push(Datum(kErrorNone));
}
@@ -323,10 +312,10 @@ void FileIO::m_writeString(int nargs) {
void FileIO::m_getPosition(int nargs) {
FileObject *me = static_cast<FileObject *>(g_lingo->_currentMe.u.obj);
- if (me->inStream) {
- g_lingo->push(Datum((int)me->inStream->pos()));
- } else if (me->outStream) {
- g_lingo->push(Datum((int)me->outStream->pos()));
+ if (me->_inStream) {
+ g_lingo->push(Datum((int)me->_inStream->pos()));
+ } else if (me->_outStream) {
+ g_lingo->push(Datum((int)me->_outStream->pos()));
} else {
warning("FileIO: No file open");
g_lingo->push(Datum(kErrorFileNotOpen));
@@ -338,20 +327,20 @@ void FileIO::m_setPosition(int nargs) {
Datum d = g_lingo->pop();
int pos = d.asInt();
- if (me->inStream) {
- if (pos <= me->inStream->size()) {
- me->inStream->seek(pos, SEEK_SET);
+ if (me->_inStream) {
+ if (pos <= me->_inStream->size()) {
+ me->_inStream->seek(pos, SEEK_SET);
g_lingo->push(Datum(kErrorNone));
} else {
- me->inStream->seek(me->inStream->size(), SEEK_SET);
+ me->_inStream->seek(me->_inStream->size(), SEEK_SET);
g_lingo->push(Datum(kErrorInvalidPos));
}
- } else if (me->outStream) {
- if (pos <= me->outStream->size()) {
- me->outStream->seek(pos, SEEK_SET);
+ } else if (me->_outStream) {
+ if (pos <= me->_outStream->size()) {
+ me->_outStream->seek(pos, SEEK_SET);
g_lingo->push(Datum(kErrorNone));
} else {
- me->outStream->seek(me->outStream->size(), SEEK_SET);
+ me->_outStream->seek(me->_outStream->size(), SEEK_SET);
g_lingo->push(Datum(kErrorInvalidPos));
}
} else {
@@ -363,10 +352,10 @@ void FileIO::m_setPosition(int nargs) {
void FileIO::m_getLength(int nargs) {
FileObject *me = static_cast<FileObject *>(g_lingo->_currentMe.u.obj);
- if (me->inStream) {
- g_lingo->push(Datum((int)me->inStream->size()));
- } else if (me->outStream) {
- g_lingo->push(Datum((int)me->outStream->size()));
+ if (me->_inStream) {
+ g_lingo->push(Datum((int)me->_inStream->size()));
+ } else if (me->_outStream) {
+ g_lingo->push(Datum((int)me->_outStream->size()));
} else {
warning("FileIO: No file open");
g_lingo->push(Datum(kErrorFileNotOpen));
@@ -376,8 +365,8 @@ void FileIO::m_getLength(int nargs) {
void FileIO::m_fileName(int nargs) {
FileObject *me = static_cast<FileObject *>(g_lingo->_currentMe.u.obj);
- if (me->filename) {
- g_lingo->push(Datum(*me->filename));
+ if (me->_filename) {
+ g_lingo->push(Datum(*me->_filename));
} else {
warning("FileIO: No file open");
g_lingo->push(Datum(kErrorFileNotOpen));
@@ -387,8 +376,8 @@ void FileIO::m_fileName(int nargs) {
void FileIO::m_delete(int nargs) {
FileObject *me = static_cast<FileObject *>(g_lingo->_currentMe.u.obj);
- if (me->filename) {
- Common::String filename = *me->filename;
+ if (me->_filename) {
+ Common::String filename = *me->_filename;
me->dispose();
if (g_system->getSavefileManager()->removeSavefile(filename)) {
g_lingo->push(Datum(kErrorNone));
diff --git a/engines/director/lingo/xlibs/fileio.h b/engines/director/lingo/xlibs/fileio.h
index 2788abd4c1..5be0af4fb2 100644
--- a/engines/director/lingo/xlibs/fileio.h
+++ b/engines/director/lingo/xlibs/fileio.h
@@ -50,36 +50,21 @@ enum FileIOError {
kErrorDirectoryNotFound = -120
};
-struct FileObject : Object {
- Common::String *filename;
- Common::InSaveFile *inFile;
- Common::SeekableReadStream *inStream;
- Common::OutSaveFile *outFile;
- Common::MemoryWriteStreamDynamic *outStream;
+class FileObject : public Object<FileObject> {
+public:
+ Common::String *_filename;
+ Common::InSaveFile *_inFile;
+ Common::SeekableReadStream *_inStream;
+ Common::OutSaveFile *_outFile;
+ Common::MemoryWriteStreamDynamic *_outStream;
- FileObject(ObjectType objType, ScriptContext *objCtx) : Object("FileIO", objType, objCtx) {
- filename = nullptr;
- inFile = nullptr;
- inStream = nullptr;
- outFile = nullptr;
- outStream = nullptr;
- }
+public:
+ FileObject(ObjectType objType);
+ FileObject(const FileObject &obj);
+ virtual ~FileObject();
- FileObject(const FileObject &obj) : Object(obj) {
- filename = nullptr;
- inFile = nullptr;
- inStream = nullptr;
- outFile = nullptr;
- outStream = nullptr;
- }
-
- virtual ~FileObject() {
- dispose();
- }
-
- void initMethods();
- virtual Object *clone();
- void dispose();
+ void clear();
+ virtual void dispose();
};
namespace FileIO {
diff --git a/engines/director/movie.cpp b/engines/director/movie.cpp
index 961da7bdbc..16f4fa0a16 100644
--- a/engines/director/movie.cpp
+++ b/engines/director/movie.cpp
@@ -30,6 +30,7 @@
#include "director/score.h"
#include "director/stage.h"
#include "director/lingo/lingo.h"
+#include "director/lingo/lingo-object.h"
namespace Director {
Commit: 3f0a33e5e8862aae5a5ef564511e52969d6a18bd
https://github.com/scummvm/scummvm/commit/3f0a33e5e8862aae5a5ef564511e52969d6a18bd
Author: djsrv (dservilla at gmail.com)
Date: 2020-07-07T16:59:55-04:00
Commit Message:
DIRECTOR: LINGO: Allow method calls on any objtype
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 88791df635..15e655acb5 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -1330,7 +1330,7 @@ void LC::call(const Common::String &name, int nargs) {
// Script/Xtra method call
if (nargs > 0) {
Datum d = g_lingo->peek(nargs - 1);
- if (d.type == OBJECT && (d.u.obj->getObjType() & (kScriptObj | kXtraObj))) {
+ if (d.type == OBJECT && !(d.u.obj->getObjType() & (kFactoryObj | kXObj))) {
debugC(3, kDebugLingoExec, "Method called on object: <%s>", d.asString(true).c_str());
AbstractObject *target = d.u.obj;
if (name.equalsIgnoreCase("birth") || name.equalsIgnoreCase("new")) {
Commit: 4c92044e36a255a2dc2be5aeee10102a21ff62ef
https://github.com/scummvm/scummvm/commit/4c92044e36a255a2dc2be5aeee10102a21ff62ef
Author: djsrv (dservilla at gmail.com)
Date: 2020-07-07T16:59:55-04:00
Commit Message:
DIRECTOR: LINGO: Stub window/stage methods
Changed paths:
engines/director/director.cpp
engines/director/lingo/lingo-builtins.cpp
engines/director/lingo/lingo-builtins.h
engines/director/lingo/lingo-object.cpp
engines/director/lingo/lingo-object.h
engines/director/lingo/lingo-the.cpp
engines/director/stage.cpp
engines/director/stage.h
engines/director/types.h
diff --git a/engines/director/director.cpp b/engines/director/director.cpp
index 3f870fd9a8..264ed8b2ec 100644
--- a/engines/director/director.cpp
+++ b/engines/director/director.cpp
@@ -134,6 +134,7 @@ Common::Error DirectorEngine::run() {
_wm->setEngine(this);
_currentStage = new Stage(_wm->getNextId(), false, false, false, _wm, this);
+ *_currentStage->_refCount += 1;
if (!debugChannelSet(-1, kDebugDesktop))
_currentStage->disableBorder();
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index e90620acb3..e455c37249 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -230,12 +230,6 @@ static struct BuiltinProto {
{ "mciwait", LB::b_mciwait, 1, 1, false, 4, BLTIN }, // D4 c
{ "sound", LB::b_sound, 2, 3, false, 3, BLTIN }, // D3 c
{ "soundBusy", LB::b_soundBusy, 1, 1, true, 3, FBLTIN }, // D3 f
- // Window
- { "close", LB::b_close, 1, 1, false, 4, BLTIN }, // D4 c
- { "forget", LB::b_forget, 1, 1, false, 4, BLTIN }, // D4 c
- { "inflate", LB::b_inflate, 3, 3, true, 4, FBLTIN }, // D4 f
- { "moveToBack", LB::b_moveToBack, 1, 1, false, 4, BLTIN }, // D4 c
- { "moveToFront", LB::b_moveToFront, 1, 1, false, 4, BLTIN }, // D4 c
// Constants
{ "backspace", LB::b_backspace, 0, 0, false, 2, FBLTIN }, // D2
{ "empty", LB::b_empty, 0, 0, false, 2, FBLTIN }, // D2
@@ -1919,36 +1913,6 @@ void LB::b_updateStage(int nargs) {
}
-///////////////////
-// Window
-///////////////////
-
-void LB::b_close(int nargs) {
- g_lingo->printSTUBWithArglist("b_close", nargs);
- g_lingo->dropStack(nargs);
-}
-
-void LB::b_forget(int nargs) {
- g_lingo->printSTUBWithArglist("b_forget", nargs);
- g_lingo->dropStack(nargs);
-}
-
-void LB::b_inflate(int nargs) {
- g_lingo->printSTUBWithArglist("b_inflate", nargs);
- g_lingo->dropStack(nargs);
-}
-
-void LB::b_moveToBack(int nargs) {
- g_lingo->printSTUBWithArglist("b_moveToBack", nargs);
- g_lingo->dropStack(nargs);
-}
-
-void LB::b_moveToFront(int nargs) {
- g_lingo->printSTUBWithArglist("b_moveToFront", nargs);
- g_lingo->dropStack(nargs);
-}
-
-
///////////////////
// Point
///////////////////
diff --git a/engines/director/lingo/lingo-builtins.h b/engines/director/lingo/lingo-builtins.h
index cc7315cdb4..e63f632432 100644
--- a/engines/director/lingo/lingo-builtins.h
+++ b/engines/director/lingo/lingo-builtins.h
@@ -166,11 +166,6 @@ namespace LB {
void b_rect(int nargs);
void b_union(int nargs);
- void b_close(int nargs);
- void b_forget(int nargs);
- void b_inflate(int nargs);
- void b_moveToBack(int nargs);
- void b_moveToFront(int nargs);
void b_window(int nargs);
void b_beep(int nargs);
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index 2af923deb1..26fef19b34 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -23,6 +23,7 @@
#include "common/endian.h"
#include "director/director.h"
+#include "director/stage.h"
#include "director/lingo/lingo.h"
#include "director/lingo/lingo-code.h"
#include "director/lingo/lingo-object.h"
@@ -59,6 +60,16 @@ static struct PredefinedProto {
{ 0, 0, 0, 0, 0, 0 }
};
+static MethodProto windowMethods[] = {
+ // window / stage
+ { "close", LM::m_close, 0, 0, 4 }, // D4
+ { "forget", LM::m_forget, 0, 0, 4 }, // D4
+ { "open", LM::m_open, 0, 0, 4 }, // D4
+ { "moveToBack", LM::m_moveToBack, 0, 0, 4 }, // D4
+ { "moveToFront", LM::m_moveToFront, 0, 0, 4 }, // D4
+ { 0, 0, 0, 0, 0 }
+};
+
void Lingo::initMethods() {
for (PredefinedProto *mtd = predefinedMethods; mtd->name; mtd++) {
if (mtd->version > _vm->getVersion())
@@ -73,6 +84,7 @@ void Lingo::initMethods() {
sym.u.bltin = mtd->func;
_methods[mtd->name] = sym;
}
+ Stage::initMethods(windowMethods);
}
static struct XLibProto {
@@ -303,4 +315,26 @@ void LM::m_respondsTo(int nargs) {
}
}
+// Window
+
+void LM::m_close(int nargs) {
+ g_lingo->printSTUBWithArglist("m_close", nargs);
+}
+
+void LM::m_forget(int nargs) {
+ g_lingo->printSTUBWithArglist("m_forget", nargs);
+}
+
+void LM::m_open(int nargs) {
+ g_lingo->printSTUBWithArglist("m_open", nargs);
+}
+
+void LM::m_moveToBack(int nargs) {
+ g_lingo->printSTUBWithArglist("m_moveToBack", nargs);
+}
+
+void LM::m_moveToFront(int nargs) {
+ g_lingo->printSTUBWithArglist("m_moveToFront", nargs);
+}
+
} // End of namespace Director
diff --git a/engines/director/lingo/lingo-object.h b/engines/director/lingo/lingo-object.h
index 6cb4bca131..df54d20bde 100644
--- a/engines/director/lingo/lingo-object.h
+++ b/engines/director/lingo/lingo-object.h
@@ -23,6 +23,8 @@
#ifndef DIRECTOR_LINGO_OBJECT_H
#define DIRECTOR_LINGO_OBJECT_H
+// FIXME: Basic Lingo types like Datum should probably be in a separate, smaller header
+#include "director/lingo/lingo.h"
#include "director/lingo/lingo-gr.h"
namespace Director {
@@ -208,6 +210,13 @@ namespace LM {
void m_put(int nargs);
void m_respondsTo(int nargs);
+ // window
+ void m_close(int nargs);
+ void m_forget(int nargs);
+ void m_moveToBack(int nargs);
+ void m_moveToFront(int nargs);
+ void m_open(int nargs);
+
} // End of namespace LM
} // End of namespace Director
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index ba8442a208..e824f7c58e 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -547,6 +547,9 @@ Datum Lingo::getTheEntity(int entity, Datum &id, int field) {
case kTheSprite:
d = getTheSprite(id, field);
break;
+ case kTheStage:
+ d = _vm->getStage();
+ break;
case kTheStageBottom:
d.type = INT;
d.u.i = _vm->getCurrentMovie()->_movieRect.bottom;
diff --git a/engines/director/stage.cpp b/engines/director/stage.cpp
index 6c135af3f4..010f78d2c4 100644
--- a/engines/director/stage.cpp
+++ b/engines/director/stage.cpp
@@ -39,7 +39,7 @@
namespace Director {
Stage::Stage(int id, bool scrollable, bool resizable, bool editable, Graphics::MacWindowManager *wm, DirectorEngine *vm)
- : MacWindow(id, scrollable, resizable, editable, wm) {
+ : MacWindow(id, scrollable, resizable, editable, wm), Object("Stage") {
_vm = vm;
_stageColor = 0;
_puppetTransition = nullptr;
@@ -49,6 +49,8 @@ Stage::Stage(int id, bool scrollable, bool resizable, bool editable, Graphics::M
_macBinary = nullptr;
_nextMovie.frameI = -1;
_newMovieStarted = true;
+
+ _objType = kWindowObj;
}
Stage::~Stage() {
diff --git a/engines/director/stage.h b/engines/director/stage.h
index b9a055783d..dfc209829a 100644
--- a/engines/director/stage.h
+++ b/engines/director/stage.h
@@ -24,6 +24,7 @@
#define DIRECTOR_STAGE_H
#include "graphics/macgui/macwindow.h"
+#include "director/lingo/lingo-object.h"
namespace Common {
class Error;
@@ -41,7 +42,7 @@ struct Channel;
struct MacShape;
struct TransParams;
-class Stage : public Graphics::MacWindow {
+class Stage : public Graphics::MacWindow, public Object<Stage> {
public:
Stage(int id, bool scrollable, bool resizable, bool editable, Graphics::MacWindowManager *wm, DirectorEngine *vm);
~Stage();
diff --git a/engines/director/types.h b/engines/director/types.h
index d8e8dd2c15..e07863d04b 100644
--- a/engines/director/types.h
+++ b/engines/director/types.h
@@ -75,7 +75,8 @@ enum ObjectType {
kXObj = 1 << 1,
kScriptObj = 1 << 2,
kXtraObj = 1 << 3,
- kAllObj = kFactoryObj | kXObj | kScriptObj | kXtraObj
+ kAllObj = kFactoryObj | kXObj | kScriptObj | kXtraObj,
+ kWindowObj = 1 << 4
};
enum ShapeType {
More information about the Scummvm-git-logs
mailing list