diff options
| author | Eugene Sandulenko | 2020-01-01 02:38:58 +0100 | 
|---|---|---|
| committer | Eugene Sandulenko | 2020-01-01 02:38:58 +0100 | 
| commit | bedd04f3965c30fbd30aca0737969d132db797a6 (patch) | |
| tree | b727c8efab43f1ce03dd40f1789bd9803b95cfaa | |
| parent | d0d7d0899f5878341275d181ff5e89cbfc29bb5e (diff) | |
| download | scummvm-rg350-bedd04f3965c30fbd30aca0737969d132db797a6.tar.gz scummvm-rg350-bedd04f3965c30fbd30aca0737969d132db797a6.tar.bz2 scummvm-rg350-bedd04f3965c30fbd30aca0737969d132db797a6.zip  | |
DIRECTOR: LINGO: Replace LC class with namespace
| -rw-r--r-- | engines/director/lingo/lingo-builtins.cpp | 6 | ||||
| -rw-r--r-- | engines/director/lingo/lingo-bytecode.cpp | 2 | ||||
| -rw-r--r-- | engines/director/lingo/lingo-code.cpp | 10 | ||||
| -rw-r--r-- | engines/director/lingo/lingo-code.h | 211 | ||||
| -rw-r--r-- | engines/director/lingo/lingo-codegen.cpp | 12 | ||||
| -rw-r--r-- | engines/director/lingo/lingo-events.cpp | 2 | ||||
| -rw-r--r-- | engines/director/lingo/lingo-gr.cpp | 192 | ||||
| -rw-r--r-- | engines/director/lingo/lingo-gr.y | 192 | ||||
| -rw-r--r-- | engines/director/lingo/lingo.cpp | 4 | ||||
| -rw-r--r-- | engines/director/lingo/lingo.h | 9 | 
10 files changed, 312 insertions, 328 deletions
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp index b0cfef469f..654ffedb67 100644 --- a/engines/director/lingo/lingo-builtins.cpp +++ b/engines/director/lingo/lingo-builtins.cpp @@ -936,7 +936,7 @@ void Lingo::b_quit(int nargs) {  void Lingo::b_return(int nargs) {  	// We do not touch the top of the stack, it will be returned -	g_lc->c_procret(); +	LC::c_procret();  }  void Lingo::b_restart(int nargs) { @@ -1136,7 +1136,7 @@ void Lingo::b_importFileInto(int nargs) {  void menuCommandsCallback(int action, Common::String &text, void *data) {  	Common::String name = Common::String::format("scummvmMenu%d", action); -	g_lc->call(name, 0); +	LC::call(name, 0);  }  void Lingo::b_installMenu(int nargs) { @@ -1687,7 +1687,7 @@ void Lingo::factoryCall(Common::String &name, int nargs) {  	s = name + "-" + *method.u.s;  	debugC(3, kDebugLingoExec, "Stack size before call: %d, nargs: %d", _stack.size(), nargs); -	_lc->call(s, nargs); +	LC::call(s, nargs);  	debugC(3, kDebugLingoExec, "Stack size after call: %d", _stack.size());  	if (!method.u.s->compareToIgnoreCase("mNew")) { diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp index b6d3939d5f..c980d51082 100644 --- a/engines/director/lingo/lingo-bytecode.cpp +++ b/engines/director/lingo/lingo-bytecode.cpp @@ -214,7 +214,7 @@ void LC::cb_call() {  	Datum nargs = g_lingo->pop();  	if ((nargs.type == ARGC) || (nargs.type == ARGCNORET)) { -		g_lc->call(name, nargs.u.i); +		LC::call(name, nargs.u.i);  	} else {  		warning("cb_call: first arg should be of type ARGC or ARGCNORET, not %s", nargs.type2str()); diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp index a4e314a9cc..97c8050bde 100644 --- a/engines/director/lingo/lingo-code.cpp +++ b/engines/director/lingo/lingo-code.cpp @@ -52,8 +52,6 @@  namespace Director { -LC *g_lc; -  static struct FuncDescr {  	const inst func;  	const char *name; @@ -408,13 +406,13 @@ bool LC::verify(Symbol *s) {  }  void LC::c_eval() { -	g_lc->c_varpush(); +	LC::c_varpush();  	Datum d;  	d = g_lingo->pop();  	if (d.type == HANDLER) { -		g_lc->call(*d.u.s, 0); +		LC::call(*d.u.s, 0);  		delete d.u.s;  		return;  	} @@ -424,7 +422,7 @@ void LC::c_eval() {  		return;  	} -	if (!g_lc->verify(d.u.sym)) +	if (!LC::verify(d.u.sym))  		return;  	d.type = d.u.sym->type; @@ -1131,7 +1129,7 @@ void LC::c_call() {  	int nargs = g_lingo->readInt(); -	g_lc->call(name, nargs); +	LC::call(name, nargs);  }  void LC::call(Common::String name, int nargs) { diff --git a/engines/director/lingo/lingo-code.h b/engines/director/lingo/lingo-code.h index d4107e828c..87051a8cca 100644 --- a/engines/director/lingo/lingo-code.h +++ b/engines/director/lingo/lingo-code.h @@ -25,118 +25,115 @@  namespace Director { -class LC { -public: -	static void c_xpop(); -	static void c_printtop(); - -	static void c_add(); -	static void c_sub(); -	static void c_mul(); -	static void c_div(); -	static void c_mod(); -	static void c_negate(); - -	static void c_and(); -	static void c_or(); -	static void c_not(); - -	static void c_ampersand(); -	static void c_after(); -	static void c_before(); -	static void c_concat(); -	static void c_contains(); -	static void c_starts(); - -	static void c_intersects(); -	static void c_within(); -	static void c_field(); -	static void c_of(); -	static void c_charOf(); -	static void c_charToOf(); -	static void c_itemOf(); -	static void c_itemToOf(); -	static void c_lineOf(); -	static void c_lineToOf(); -	static void c_wordOf(); -	static void c_wordToOf(); - -	static void c_intpush(); -	static void c_voidpush(); -	static void c_floatpush(); -	static void c_stringpush(); -	static void c_symbolpush(); -	static void c_namepush(); -	static void c_varpush(); -	static void c_argcpush(); -	static void c_argcnoretpush(); -	static void c_arraypush(); -	static void c_assign(); -	static bool verify(Symbol *s); -	static void c_eval(); -	static void c_setImmediate(); - -	static void c_swap(); - -	static void c_theentitypush(); -	static void c_theentityassign(); -	static void c_objectfieldpush(); -	static void c_objectfieldassign(); - -	static void c_repeatwhilecode(); -	static void c_repeatwithcode(); -	static void c_ifcode(); -	static void c_whencode(); -	static void c_tellcode(); -	static void c_tell(); -	static void c_telldone(); -	static void c_exitRepeat(); -	static void c_eq(); -	static void c_neq(); -	static void c_gt(); -	static void c_lt(); -	static void c_ge(); -	static void c_le(); -	static void c_jump(); -	static void c_jumpifz(); -	static void c_call(); - -	static void call(Common::String name, int nargs); - -	static void c_procret(); - -	static void c_mci(); -	static void c_mciwait(); -	static void c_goto(); -	static void c_gotoloop(); -	static void c_gotonext(); -	static void c_gotoprevious(); -	static void c_global(); -	static void c_instance(); -	static void c_factory(); -	static void c_property(); - -	static void c_play(); -	static void c_playdone(); - -	static void c_open(); -	static void c_hilite(); +namespace LC { +	void c_xpop(); +	void c_printtop(); + +	void c_add(); +	void c_sub(); +	void c_mul(); +	void c_div(); +	void c_mod(); +	void c_negate(); + +	void c_and(); +	void c_or(); +	void c_not(); + +	void c_ampersand(); +	void c_after(); +	void c_before(); +	void c_concat(); +	void c_contains(); +	void c_starts(); + +	void c_intersects(); +	void c_within(); +	void c_field(); +	void c_of(); +	void c_charOf(); +	void c_charToOf(); +	void c_itemOf(); +	void c_itemToOf(); +	void c_lineOf(); +	void c_lineToOf(); +	void c_wordOf(); +	void c_wordToOf(); + +	void c_intpush(); +	void c_voidpush(); +	void c_floatpush(); +	void c_stringpush(); +	void c_symbolpush(); +	void c_namepush(); +	void c_varpush(); +	void c_argcpush(); +	void c_argcnoretpush(); +	void c_arraypush(); +	void c_assign(); +	bool verify(Symbol *s); +	void c_eval(); +	void c_setImmediate(); + +	void c_swap(); + +	void c_theentitypush(); +	void c_theentityassign(); +	void c_objectfieldpush(); +	void c_objectfieldassign(); + +	void c_repeatwhilecode(); +	void c_repeatwithcode(); +	void c_ifcode(); +	void c_whencode(); +	void c_tellcode(); +	void c_tell(); +	void c_telldone(); +	void c_exitRepeat(); +	void c_eq(); +	void c_neq(); +	void c_gt(); +	void c_lt(); +	void c_ge(); +	void c_le(); +	void c_jump(); +	void c_jumpifz(); +	void c_call(); + +	void call(Common::String name, int nargs); + +	void c_procret(); + +	void c_mci(); +	void c_mciwait(); +	void c_goto(); +	void c_gotoloop(); +	void c_gotonext(); +	void c_gotoprevious(); +	void c_global(); +	void c_instance(); +	void c_factory(); +	void c_property(); + +	void c_play(); +	void c_playdone(); + +	void c_open(); +	void c_hilite();  	// stubs for unknown instructions -	static void c_unk(); -	static void c_unk1(); -	static void c_unk2(); +	void c_unk(); +	void c_unk1(); +	void c_unk2();  	// bytecode-related instructions -	static void cb_localcall(); -	static void cb_call(); -	static void cb_v4theentitypush(); -	static void cb_v4theentitynamepush(); -	static void cb_v4theentityassign(); +	void cb_localcall(); +	void cb_call(); +	void cb_v4theentitypush(); +	void cb_v4theentitynamepush(); +	void cb_v4theentityassign(); -}; - -extern LC *g_lc; +} // End of namespace LC  } // End of namespace Director diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp index fe452b277d..10254c3df3 100644 --- a/engines/director/lingo/lingo-codegen.cpp +++ b/engines/director/lingo/lingo-codegen.cpp @@ -356,16 +356,16 @@ void Lingo::clearArgStack() {  void Lingo::codeArgStore() {  	for (int i = _argstack.size() - 1; i >= 0; i--) { -		code1(g_lc->c_varpush); +		code1(LC::c_varpush);  		codeString(_argstack[i]->c_str()); -		code1(g_lc->c_assign); +		code1(LC::c_assign);  	}  }  int Lingo::codeSetImmediate(bool state) {  	g_lingo->_immediateMode = state; -	int res = g_lingo->code1(g_lc->c_setImmediate); +	int res = g_lingo->code1(LC::c_setImmediate);  	inst i = 0;  	WRITE_UINT32(&i, state);  	g_lingo->code1(i); @@ -374,7 +374,7 @@ int Lingo::codeSetImmediate(bool state) {  }  int Lingo::codeFunc(Common::String *s, int numpar) { -	int ret = g_lingo->code1(g_lc->c_call); +	int ret = g_lingo->code1(LC::c_call);  	g_lingo->codeString(s->c_str()); @@ -388,13 +388,13 @@ int Lingo::codeFunc(Common::String *s, int numpar) {  int Lingo::codeMe(Common::String *method, int numpar) {  	// Check if need to encode reference to the factory  	if (method == nullptr) { -		int ret = g_lingo->code1(g_lc->c_factory); +		int ret = g_lingo->code1(LC::c_factory);  		g_lingo->codeString(g_lingo->_currentFactory.c_str());  		return ret;  	} -	int ret = g_lingo->code1(g_lc->c_call); +	int ret = g_lingo->code1(LC::c_call);  	Common::String m(g_lingo->_currentFactory); diff --git a/engines/director/lingo/lingo-events.cpp b/engines/director/lingo/lingo-events.cpp index 3436d68ede..4aeed4cc38 100644 --- a/engines/director/lingo/lingo-events.cpp +++ b/engines/director/lingo/lingo-events.cpp @@ -316,7 +316,7 @@ void Lingo::processEvent(LEvent event, ScriptType st, int entityId) {  	if (_handlers.contains(ENTITY_INDEX(event, entityId))) {  		debugC(1, kDebugEvents, "Lingo::processEvent(%s, %s, %d), _eventHandler", _eventHandlerTypes[event], scriptType2str(st), entityId); -		g_lc->call(_eventHandlerTypes[event], 0); // D4+ Events +		LC::call(_eventHandlerTypes[event], 0); // D4+ Events  	} else if (event == kEventNone && _scriptContexts[st].contains(entityId)) {  		debugC(1, kDebugEvents, "Lingo::processEvent(%s, %s, %d), script", _eventHandlerTypes[event], scriptType2str(st), entityId); diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp index 9df284f47b..d4448546ee 100644 --- a/engines/director/lingo/lingo-gr.cpp +++ b/engines/director/lingo/lingo-gr.cpp @@ -2121,9 +2121,9 @@ yyreduce:    case 8:  #line 142 "engines/director/lingo/lingo-gr.y"      { -		g_lingo->code1(g_lc->c_varpush); +		g_lingo->code1(LC::c_varpush);  		g_lingo->codeString((yyvsp[(4) - (4)].s)->c_str()); -		g_lingo->code1(g_lc->c_assign); +		g_lingo->code1(LC::c_assign);  		(yyval.code) = (yyvsp[(2) - (4)].code);  		delete (yyvsp[(4) - (4)].s); ;}      break; @@ -2131,26 +2131,26 @@ yyreduce:    case 9:  #line 148 "engines/director/lingo/lingo-gr.y"      { -			g_lingo->code1(g_lc->c_assign); +			g_lingo->code1(LC::c_assign);  			(yyval.code) = (yyvsp[(2) - (4)].code); ;}      break;    case 10:  #line 151 "engines/director/lingo/lingo-gr.y" -    { (yyval.code) = g_lingo->code1(g_lc->c_after); ;} +    { (yyval.code) = g_lingo->code1(LC::c_after); ;}      break;    case 11:  #line 152 "engines/director/lingo/lingo-gr.y" -    { (yyval.code) = g_lingo->code1(g_lc->c_before); ;} +    { (yyval.code) = g_lingo->code1(LC::c_before); ;}      break;    case 12:  #line 153 "engines/director/lingo/lingo-gr.y"      { -		g_lingo->code1(g_lc->c_varpush); +		g_lingo->code1(LC::c_varpush);  		g_lingo->codeString((yyvsp[(2) - (4)].s)->c_str()); -		g_lingo->code1(g_lc->c_assign); +		g_lingo->code1(LC::c_assign);  		(yyval.code) = (yyvsp[(4) - (4)].code);  		delete (yyvsp[(2) - (4)].s); ;}      break; @@ -2158,9 +2158,9 @@ yyreduce:    case 13:  #line 159 "engines/director/lingo/lingo-gr.y"      { -		g_lingo->code1(g_lc->c_intpush); +		g_lingo->code1(LC::c_intpush);  		g_lingo->codeInt(0); // Put dummy id -		g_lingo->code1(g_lc->c_theentityassign); +		g_lingo->code1(LC::c_theentityassign);  		g_lingo->codeInt((yyvsp[(2) - (4)].e)[0]);  		g_lingo->codeInt((yyvsp[(2) - (4)].e)[1]);  		(yyval.code) = (yyvsp[(4) - (4)].code); ;} @@ -2169,9 +2169,9 @@ yyreduce:    case 14:  #line 166 "engines/director/lingo/lingo-gr.y"      { -		g_lingo->code1(g_lc->c_varpush); +		g_lingo->code1(LC::c_varpush);  		g_lingo->codeString((yyvsp[(2) - (4)].s)->c_str()); -		g_lingo->code1(g_lc->c_assign); +		g_lingo->code1(LC::c_assign);  		(yyval.code) = (yyvsp[(4) - (4)].code);  		delete (yyvsp[(2) - (4)].s); ;}      break; @@ -2179,9 +2179,9 @@ yyreduce:    case 15:  #line 172 "engines/director/lingo/lingo-gr.y"      { -		g_lingo->code1(g_lc->c_intpush); +		g_lingo->code1(LC::c_intpush);  		g_lingo->codeInt(0); // Put dummy id -		g_lingo->code1(g_lc->c_theentityassign); +		g_lingo->code1(LC::c_theentityassign);  		g_lingo->codeInt((yyvsp[(2) - (4)].e)[0]);  		g_lingo->codeInt((yyvsp[(2) - (4)].e)[1]);  		(yyval.code) = (yyvsp[(4) - (4)].code); ;} @@ -2190,8 +2190,8 @@ yyreduce:    case 16:  #line 179 "engines/director/lingo/lingo-gr.y"      { -		g_lingo->code1(g_lc->c_swap); -		g_lingo->code1(g_lc->c_theentityassign); +		g_lingo->code1(LC::c_swap); +		g_lingo->code1(LC::c_theentityassign);  		g_lingo->codeInt((yyvsp[(2) - (5)].e)[0]);  		g_lingo->codeInt((yyvsp[(2) - (5)].e)[1]);  		(yyval.code) = (yyvsp[(5) - (5)].code); ;} @@ -2200,8 +2200,8 @@ yyreduce:    case 17:  #line 185 "engines/director/lingo/lingo-gr.y"      { -		g_lingo->code1(g_lc->c_swap); -		g_lingo->code1(g_lc->c_theentityassign); +		g_lingo->code1(LC::c_swap); +		g_lingo->code1(LC::c_theentityassign);  		g_lingo->codeInt((yyvsp[(2) - (5)].e)[0]);  		g_lingo->codeInt((yyvsp[(2) - (5)].e)[1]);  		(yyval.code) = (yyvsp[(5) - (5)].code); ;} @@ -2210,7 +2210,7 @@ yyreduce:    case 18:  #line 191 "engines/director/lingo/lingo-gr.y"      { -		g_lingo->code1(g_lc->c_objectfieldassign); +		g_lingo->code1(LC::c_objectfieldassign);  		g_lingo->codeString((yyvsp[(2) - (4)].objectfield).s->c_str());  		g_lingo->codeInt((yyvsp[(2) - (4)].objectfield).e);  		(yyval.code) = (yyvsp[(4) - (4)].code); ;} @@ -2348,13 +2348,13 @@ yyreduce:    case 41:  #line 324 "engines/director/lingo/lingo-gr.y" -    { (yyval.code) = g_lingo->code3(g_lc->c_repeatwhilecode, STOP, STOP); ;} +    { (yyval.code) = g_lingo->code3(LC::c_repeatwhilecode, STOP, STOP); ;}      break;    case 42:  #line 327 "engines/director/lingo/lingo-gr.y"      { -		(yyval.code) = g_lingo->code3(g_lc->c_repeatwithcode, STOP, STOP); +		(yyval.code) = g_lingo->code3(LC::c_repeatwithcode, STOP, STOP);  		g_lingo->code3(STOP, STOP, STOP);  		g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str());  		delete (yyvsp[(3) - (3)].s); ;} @@ -2363,7 +2363,7 @@ yyreduce:    case 43:  #line 334 "engines/director/lingo/lingo-gr.y"      { -		(yyval.code) = g_lingo->code1(g_lc->c_ifcode); +		(yyval.code) = g_lingo->code1(LC::c_ifcode);  		g_lingo->code3(STOP, STOP, STOP);  		g_lingo->code1(0);  // Do not skip end  		g_lingo->codeLabel(0); ;} @@ -2374,7 +2374,7 @@ yyreduce:      {  		inst skipEnd;  		WRITE_UINT32(&skipEnd, 1); // We have to skip end to avoid multiple executions -		(yyval.code) = g_lingo->code1(g_lc->c_ifcode); +		(yyval.code) = g_lingo->code1(LC::c_ifcode);  		g_lingo->code3(STOP, STOP, STOP);  		g_lingo->code1(skipEnd); ;}      break; @@ -2397,7 +2397,7 @@ yyreduce:    case 50:  #line 360 "engines/director/lingo/lingo-gr.y"      { -		(yyval.code) = g_lingo->code1(g_lc->c_whencode); +		(yyval.code) = g_lingo->code1(LC::c_whencode);  		g_lingo->code1(STOP);  		g_lingo->codeString((yyvsp[(2) - (3)].s)->c_str());  		delete (yyvsp[(2) - (3)].s); ;} @@ -2406,42 +2406,42 @@ yyreduce:    case 51:  #line 366 "engines/director/lingo/lingo-gr.y"      { -		(yyval.code) = g_lingo->code1(g_lc->c_tellcode); +		(yyval.code) = g_lingo->code1(LC::c_tellcode);  		g_lingo->code1(STOP); ;}      break;    case 52:  #line 370 "engines/director/lingo/lingo-gr.y"      { -		(yyval.code) = g_lingo->code1(g_lc->c_intpush); +		(yyval.code) = g_lingo->code1(LC::c_intpush);  		g_lingo->codeInt((yyvsp[(1) - (1)].i)); ;}      break;    case 53:  #line 373 "engines/director/lingo/lingo-gr.y"      { -		(yyval.code) = g_lingo->code1(g_lc->c_floatpush); +		(yyval.code) = g_lingo->code1(LC::c_floatpush);  		g_lingo->codeFloat((yyvsp[(1) - (1)].f)); ;}      break;    case 54:  #line 376 "engines/director/lingo/lingo-gr.y"      {											// D3 -		(yyval.code) = g_lingo->code1(g_lc->c_symbolpush); +		(yyval.code) = g_lingo->code1(LC::c_symbolpush);  		g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); ;}      break;    case 55:  #line 379 "engines/director/lingo/lingo-gr.y"      { -		(yyval.code) = g_lingo->code1(g_lc->c_stringpush); +		(yyval.code) = g_lingo->code1(LC::c_stringpush);  		g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); ;}      break;    case 56:  #line 382 "engines/director/lingo/lingo-gr.y"      { -		(yyval.code) = g_lingo->code1(g_lc->c_eval); +		(yyval.code) = g_lingo->code1(LC::c_eval);  		g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str());  		delete (yyvsp[(1) - (1)].s); ;}      break; @@ -2480,9 +2480,9 @@ yyreduce:    case 63:  #line 400 "engines/director/lingo/lingo-gr.y"      { -		(yyval.code) = g_lingo->code1(g_lc->c_intpush); +		(yyval.code) = g_lingo->code1(LC::c_intpush);  		g_lingo->codeInt(0); // Put dummy id -		g_lingo->code1(g_lc->c_theentitypush); +		g_lingo->code1(LC::c_theentitypush);  		inst e = 0, f = 0;  		WRITE_UINT32(&e, (yyvsp[(1) - (1)].e)[0]);  		WRITE_UINT32(&f, (yyvsp[(1) - (1)].e)[1]); @@ -2492,7 +2492,7 @@ yyreduce:    case 64:  #line 408 "engines/director/lingo/lingo-gr.y"      { -		(yyval.code) = g_lingo->code1(g_lc->c_theentitypush); +		(yyval.code) = g_lingo->code1(LC::c_theentitypush);  		inst e = 0, f = 0;  		WRITE_UINT32(&e, (yyvsp[(1) - (2)].e)[0]);  		WRITE_UINT32(&f, (yyvsp[(1) - (2)].e)[1]); @@ -2502,99 +2502,99 @@ yyreduce:    case 65:  #line 414 "engines/director/lingo/lingo-gr.y"      { -		g_lingo->code1(g_lc->c_objectfieldpush); +		g_lingo->code1(LC::c_objectfieldpush);  		g_lingo->codeString((yyvsp[(1) - (1)].objectfield).s->c_str());  		g_lingo->codeInt((yyvsp[(1) - (1)].objectfield).e); ;}      break;    case 67:  #line 419 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_add); ;} +    { g_lingo->code1(LC::c_add); ;}      break;    case 68:  #line 420 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_sub); ;} +    { g_lingo->code1(LC::c_sub); ;}      break;    case 69:  #line 421 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_mul); ;} +    { g_lingo->code1(LC::c_mul); ;}      break;    case 70:  #line 422 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_div); ;} +    { g_lingo->code1(LC::c_div); ;}      break;    case 71:  #line 423 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_mod); ;} +    { g_lingo->code1(LC::c_mod); ;}      break;    case 72:  #line 424 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_gt); ;} +    { g_lingo->code1(LC::c_gt); ;}      break;    case 73:  #line 425 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_lt); ;} +    { g_lingo->code1(LC::c_lt); ;}      break;    case 74:  #line 426 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_eq); ;} +    { g_lingo->code1(LC::c_eq); ;}      break;    case 75:  #line 427 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_neq); ;} +    { g_lingo->code1(LC::c_neq); ;}      break;    case 76:  #line 428 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_ge); ;} +    { g_lingo->code1(LC::c_ge); ;}      break;    case 77:  #line 429 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_le); ;} +    { g_lingo->code1(LC::c_le); ;}      break;    case 78:  #line 430 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_and); ;} +    { g_lingo->code1(LC::c_and); ;}      break;    case 79:  #line 431 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_or); ;} +    { g_lingo->code1(LC::c_or); ;}      break;    case 80:  #line 432 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_not); ;} +    { g_lingo->code1(LC::c_not); ;}      break;    case 81:  #line 433 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_ampersand); ;} +    { g_lingo->code1(LC::c_ampersand); ;}      break;    case 82:  #line 434 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_concat); ;} +    { g_lingo->code1(LC::c_concat); ;}      break;    case 83:  #line 435 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_contains); ;} +    { g_lingo->code1(LC::c_contains); ;}      break;    case 84:  #line 436 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_starts); ;} +    { g_lingo->code1(LC::c_starts); ;}      break;    case 85: @@ -2604,7 +2604,7 @@ yyreduce:    case 86:  #line 438 "engines/director/lingo/lingo-gr.y" -    { (yyval.code) = (yyvsp[(2) - (2)].code); g_lingo->code1(g_lc->c_negate); ;} +    { (yyval.code) = (yyvsp[(2) - (2)].code); g_lingo->code1(LC::c_negate); ;}      break;    case 87: @@ -2614,57 +2614,57 @@ yyreduce:    case 88:  #line 440 "engines/director/lingo/lingo-gr.y" -    { (yyval.code) = g_lingo->code1(g_lc->c_arraypush); g_lingo->codeArray((yyvsp[(2) - (3)].narg)); ;} +    { (yyval.code) = g_lingo->code1(LC::c_arraypush); g_lingo->codeArray((yyvsp[(2) - (3)].narg)); ;}      break;    case 89:  #line 441 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_intersects); ;} +    { g_lingo->code1(LC::c_intersects); ;}      break;    case 90:  #line 442 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_within); ;} +    { g_lingo->code1(LC::c_within); ;}      break;    case 91:  #line 443 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_charOf); ;} +    { g_lingo->code1(LC::c_charOf); ;}      break;    case 92:  #line 444 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_charToOf); ;} +    { g_lingo->code1(LC::c_charToOf); ;}      break;    case 93:  #line 445 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_itemOf); ;} +    { g_lingo->code1(LC::c_itemOf); ;}      break;    case 94:  #line 446 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_itemToOf); ;} +    { g_lingo->code1(LC::c_itemToOf); ;}      break;    case 95:  #line 447 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_lineOf); ;} +    { g_lingo->code1(LC::c_lineOf); ;}      break;    case 96:  #line 448 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_lineToOf); ;} +    { g_lingo->code1(LC::c_lineToOf); ;}      break;    case 97:  #line 449 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_wordOf); ;} +    { g_lingo->code1(LC::c_wordOf); ;}      break;    case 98:  #line 450 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_wordToOf); ;} +    { g_lingo->code1(LC::c_wordToOf); ;}      break;    case 99: @@ -2691,17 +2691,17 @@ yyreduce:    case 103:  #line 461 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_printtop); ;} +    { g_lingo->code1(LC::c_printtop); ;}      break;    case 106:  #line 464 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_exitRepeat); ;} +    { g_lingo->code1(LC::c_exitRepeat); ;}      break;    case 107:  #line 465 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_procret); ;} +    { g_lingo->code1(LC::c_procret); ;}      break;    case 111: @@ -2728,7 +2728,7 @@ yyreduce:    case 114:  #line 478 "engines/director/lingo/lingo-gr.y"      { -		g_lingo->code1(g_lc->c_voidpush); +		g_lingo->code1(LC::c_voidpush);  		g_lingo->codeFunc((yyvsp[(1) - (1)].s), 1);  		delete (yyvsp[(1) - (1)].s); ;}      break; @@ -2740,12 +2740,12 @@ yyreduce:    case 116:  #line 483 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_open); ;} +    { g_lingo->code1(LC::c_open); ;}      break;    case 117:  #line 484 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code2(g_lc->c_voidpush, g_lc->c_open); ;} +    { g_lingo->code2(LC::c_voidpush, LC::c_open); ;}      break;    case 118: @@ -2755,100 +2755,100 @@ yyreduce:    case 119:  #line 488 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_global); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;} +    { g_lingo->code1(LC::c_global); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}      break;    case 120:  #line 489 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_global); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;} +    { g_lingo->code1(LC::c_global); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}      break;    case 121:  #line 492 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_property); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;} +    { g_lingo->code1(LC::c_property); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}      break;    case 122:  #line 493 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_property); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;} +    { g_lingo->code1(LC::c_property); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}      break;    case 123:  #line 496 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_instance); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;} +    { g_lingo->code1(LC::c_instance); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}      break;    case 124:  #line 497 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_instance); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;} +    { g_lingo->code1(LC::c_instance); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}      break;    case 125:  #line 508 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_gotoloop); ;} +    { g_lingo->code1(LC::c_gotoloop); ;}      break;    case 126:  #line 509 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_gotonext); ;} +    { g_lingo->code1(LC::c_gotonext); ;}      break;    case 127:  #line 510 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_gotoprevious); ;} +    { g_lingo->code1(LC::c_gotoprevious); ;}      break;    case 128:  #line 511 "engines/director/lingo/lingo-gr.y"      { -		g_lingo->code1(g_lc->c_intpush); +		g_lingo->code1(LC::c_intpush);  		g_lingo->codeInt(1); -		g_lingo->code1(g_lc->c_goto); ;} +		g_lingo->code1(LC::c_goto); ;}      break;    case 129:  #line 515 "engines/director/lingo/lingo-gr.y"      { -		g_lingo->code1(g_lc->c_intpush); +		g_lingo->code1(LC::c_intpush);  		g_lingo->codeInt(3); -		g_lingo->code1(g_lc->c_goto); ;} +		g_lingo->code1(LC::c_goto); ;}      break;    case 130:  #line 519 "engines/director/lingo/lingo-gr.y"      { -		g_lingo->code1(g_lc->c_intpush); +		g_lingo->code1(LC::c_intpush);  		g_lingo->codeInt(2); -		g_lingo->code1(g_lc->c_goto); ;} +		g_lingo->code1(LC::c_goto); ;}      break;    case 133:  #line 529 "engines/director/lingo/lingo-gr.y" -    { g_lingo->code1(g_lc->c_playdone); ;} +    { g_lingo->code1(LC::c_playdone); ;}      break;    case 134:  #line 530 "engines/director/lingo/lingo-gr.y"      { -		g_lingo->code1(g_lc->c_intpush); +		g_lingo->code1(LC::c_intpush);  		g_lingo->codeInt(1); -		g_lingo->code1(g_lc->c_play); ;} +		g_lingo->code1(LC::c_play); ;}      break;    case 135:  #line 534 "engines/director/lingo/lingo-gr.y"      { -		g_lingo->code1(g_lc->c_intpush); +		g_lingo->code1(LC::c_intpush);  		g_lingo->codeInt(3); -		g_lingo->code1(g_lc->c_play); ;} +		g_lingo->code1(LC::c_play); ;}      break;    case 136:  #line 538 "engines/director/lingo/lingo-gr.y"      { -		g_lingo->code1(g_lc->c_intpush); +		g_lingo->code1(LC::c_intpush);  		g_lingo->codeInt(2); -		g_lingo->code1(g_lc->c_play); ;} +		g_lingo->code1(LC::c_play); ;}      break;    case 137: @@ -2871,7 +2871,7 @@ yyreduce:    case 140:  #line 573 "engines/director/lingo/lingo-gr.y"      { -			g_lingo->code1(g_lc->c_procret); +			g_lingo->code1(LC::c_procret);  			g_lingo->define(*(yyvsp[(2) - (8)].s), (yyvsp[(4) - (8)].code), (yyvsp[(5) - (8)].narg));  			g_lingo->clearArgStack();  			g_lingo->_indef = kStateNone; ;} @@ -2890,7 +2890,7 @@ yyreduce:    case 143:  #line 580 "engines/director/lingo/lingo-gr.y"      { -			g_lingo->code1(g_lc->c_procret); +			g_lingo->code1(LC::c_procret);  			g_lingo->define(*(yyvsp[(1) - (7)].s), (yyvsp[(3) - (7)].code), (yyvsp[(4) - (7)].narg) + 1, &g_lingo->_currentFactory);  			g_lingo->clearArgStack();  			g_lingo->_indef = kStateNone; ;} @@ -2899,7 +2899,7 @@ yyreduce:    case 144:  #line 585 "engines/director/lingo/lingo-gr.y"      {	// D3 -		g_lingo->code1(g_lc->c_procret); +		g_lingo->code1(LC::c_procret);  		g_lingo->define(*(yyvsp[(1) - (8)].s), (yyvsp[(2) - (8)].code), (yyvsp[(3) - (8)].narg));  		g_lingo->clearArgStack();  		g_lingo->_indef = kStateNone; @@ -2911,7 +2911,7 @@ yyreduce:    case 145:  #line 593 "engines/director/lingo/lingo-gr.y"      {	// D4. No 'end' clause -		g_lingo->code1(g_lc->c_procret); +		g_lingo->code1(LC::c_procret);  		g_lingo->define(*(yyvsp[(1) - (6)].s), (yyvsp[(2) - (6)].code), (yyvsp[(3) - (6)].narg));  		g_lingo->_indef = kStateNone;  		g_lingo->clearArgStack(); @@ -2951,7 +2951,7 @@ yyreduce:    case 155:  #line 616 "engines/director/lingo/lingo-gr.y"      { -		g_lingo->code1(g_lc->c_call); +		g_lingo->code1(LC::c_call);  		g_lingo->codeString((yyvsp[(1) - (2)].s)->c_str());  		inst numpar = 0;  		WRITE_UINT32(&numpar, (yyvsp[(2) - (2)].narg)); diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y index 697d6f1e7e..a818cf41fe 100644 --- a/engines/director/lingo/lingo-gr.y +++ b/engines/director/lingo/lingo-gr.y @@ -140,56 +140,56 @@ programline: /* empty */  	;  asgn: tPUT expr tINTO ID 		{ -		g_lingo->code1(g_lc->c_varpush); +		g_lingo->code1(LC::c_varpush);  		g_lingo->codeString($4->c_str()); -		g_lingo->code1(g_lc->c_assign); +		g_lingo->code1(LC::c_assign);  		$$ = $2;  		delete $4; }  	| tPUT expr tINTO reference 		{ -			g_lingo->code1(g_lc->c_assign); +			g_lingo->code1(LC::c_assign);  			$$ = $2; } -	| tPUT expr tAFTER expr 		{ $$ = g_lingo->code1(g_lc->c_after); }		// D3 -	| tPUT expr tBEFORE expr 		{ $$ = g_lingo->code1(g_lc->c_before); }		// D3 +	| tPUT expr tAFTER expr 		{ $$ = g_lingo->code1(LC::c_after); }		// D3 +	| tPUT expr tBEFORE expr 		{ $$ = g_lingo->code1(LC::c_before); }		// D3  	| tSET ID tEQ expr			{ -		g_lingo->code1(g_lc->c_varpush); +		g_lingo->code1(LC::c_varpush);  		g_lingo->codeString($2->c_str()); -		g_lingo->code1(g_lc->c_assign); +		g_lingo->code1(LC::c_assign);  		$$ = $4;  		delete $2; }  	| tSET THEENTITY tEQ expr	{ -		g_lingo->code1(g_lc->c_intpush); +		g_lingo->code1(LC::c_intpush);  		g_lingo->codeInt(0); // Put dummy id -		g_lingo->code1(g_lc->c_theentityassign); +		g_lingo->code1(LC::c_theentityassign);  		g_lingo->codeInt($2[0]);  		g_lingo->codeInt($2[1]);  		$$ = $4; }  	| tSET ID tTO expr			{ -		g_lingo->code1(g_lc->c_varpush); +		g_lingo->code1(LC::c_varpush);  		g_lingo->codeString($2->c_str()); -		g_lingo->code1(g_lc->c_assign); +		g_lingo->code1(LC::c_assign);  		$$ = $4;  		delete $2; }  	| tSET THEENTITY tTO expr	{ -		g_lingo->code1(g_lc->c_intpush); +		g_lingo->code1(LC::c_intpush);  		g_lingo->codeInt(0); // Put dummy id -		g_lingo->code1(g_lc->c_theentityassign); +		g_lingo->code1(LC::c_theentityassign);  		g_lingo->codeInt($2[0]);  		g_lingo->codeInt($2[1]);  		$$ = $4; }  	| tSET THEENTITYWITHID expr tTO expr	{ -		g_lingo->code1(g_lc->c_swap); -		g_lingo->code1(g_lc->c_theentityassign); +		g_lingo->code1(LC::c_swap); +		g_lingo->code1(LC::c_theentityassign);  		g_lingo->codeInt($2[0]);  		g_lingo->codeInt($2[1]);  		$$ = $5; }  	| tSET THEENTITYWITHID simpleexpr tEQ expr	{ -		g_lingo->code1(g_lc->c_swap); -		g_lingo->code1(g_lc->c_theentityassign); +		g_lingo->code1(LC::c_swap); +		g_lingo->code1(LC::c_theentityassign);  		g_lingo->codeInt($2[0]);  		g_lingo->codeInt($2[1]);  		$$ = $5; }  	| tSET THEOBJECTFIELD tTO expr	{ -		g_lingo->code1(g_lc->c_objectfieldassign); +		g_lingo->code1(LC::c_objectfieldassign);  		g_lingo->codeString($2.s->c_str());  		g_lingo->codeInt($2.e);  		$$ = $4; } @@ -321,18 +321,18 @@ ifoneliner: if expr end tTHEN stmtoneliner end tELSE begin stmtoneliner end tEND  	; -repeatwhile:	tREPEAT tWHILE		{ $$ = g_lingo->code3(g_lc->c_repeatwhilecode, STOP, STOP); } +repeatwhile:	tREPEAT tWHILE		{ $$ = g_lingo->code3(LC::c_repeatwhilecode, STOP, STOP); }  	;  repeatwith:		tREPEAT tWITH ID	{ -		$$ = g_lingo->code3(g_lc->c_repeatwithcode, STOP, STOP); +		$$ = g_lingo->code3(LC::c_repeatwithcode, STOP, STOP);  		g_lingo->code3(STOP, STOP, STOP);  		g_lingo->codeString($3->c_str());  		delete $3; }  	;  if:	  tIF					{ -		$$ = g_lingo->code1(g_lc->c_ifcode); +		$$ = g_lingo->code1(LC::c_ifcode);  		g_lingo->code3(STOP, STOP, STOP);  		g_lingo->code1(0);  // Do not skip end  		g_lingo->codeLabel(0); } // Mark beginning of the if() statement @@ -341,7 +341,7 @@ if:	  tIF					{  elseif:	  tELSIF			{  		inst skipEnd;  		WRITE_UINT32(&skipEnd, 1); // We have to skip end to avoid multiple executions -		$$ = g_lingo->code1(g_lc->c_ifcode); +		$$ = g_lingo->code1(LC::c_ifcode);  		g_lingo->code3(STOP, STOP, STOP);  		g_lingo->code1(skipEnd); }  	; @@ -358,29 +358,29 @@ stmtlist: 					{ $$ = g_lingo->_currentScript->size(); }  	;  when:	  tWHEN	ID tTHEN	{ -		$$ = g_lingo->code1(g_lc->c_whencode); +		$$ = g_lingo->code1(LC::c_whencode);  		g_lingo->code1(STOP);  		g_lingo->codeString($2->c_str());  		delete $2; }  tell:	  tTELL				{ -		$$ = g_lingo->code1(g_lc->c_tellcode); +		$$ = g_lingo->code1(LC::c_tellcode);  		g_lingo->code1(STOP); }  simpleexpr: INT		{ -		$$ = g_lingo->code1(g_lc->c_intpush); +		$$ = g_lingo->code1(LC::c_intpush);  		g_lingo->codeInt($1); }  	| FLOAT		{ -		$$ = g_lingo->code1(g_lc->c_floatpush); +		$$ = g_lingo->code1(LC::c_floatpush);  		g_lingo->codeFloat($1); }  	| SYMBOL	{											// D3 -		$$ = g_lingo->code1(g_lc->c_symbolpush); +		$$ = g_lingo->code1(LC::c_symbolpush);  		g_lingo->codeString($1->c_str()); }  	| STRING		{ -		$$ = g_lingo->code1(g_lc->c_stringpush); +		$$ = g_lingo->code1(LC::c_stringpush);  		g_lingo->codeString($1->c_str()); }  	| ID		{ -		$$ = g_lingo->code1(g_lc->c_eval); +		$$ = g_lingo->code1(LC::c_eval);  		g_lingo->codeString($1->c_str());  		delete $1; }  	; @@ -398,56 +398,56 @@ expr: simpleexpr { $$ = $1; }  		$$ = g_lingo->codeFunc($1, $3);  		delete $1; }  	| THEENTITY	{ -		$$ = g_lingo->code1(g_lc->c_intpush); +		$$ = g_lingo->code1(LC::c_intpush);  		g_lingo->codeInt(0); // Put dummy id -		g_lingo->code1(g_lc->c_theentitypush); +		g_lingo->code1(LC::c_theentitypush);  		inst e = 0, f = 0;  		WRITE_UINT32(&e, $1[0]);  		WRITE_UINT32(&f, $1[1]);  		g_lingo->code2(e, f); }  	| THEENTITYWITHID expr	{ -		$$ = g_lingo->code1(g_lc->c_theentitypush); +		$$ = g_lingo->code1(LC::c_theentitypush);  		inst e = 0, f = 0;  		WRITE_UINT32(&e, $1[0]);  		WRITE_UINT32(&f, $1[1]);  		g_lingo->code2(e, f); }  	| THEOBJECTFIELD { -		g_lingo->code1(g_lc->c_objectfieldpush); +		g_lingo->code1(LC::c_objectfieldpush);  		g_lingo->codeString($1.s->c_str());  		g_lingo->codeInt($1.e); }  	| asgn -	| expr '+' expr				{ g_lingo->code1(g_lc->c_add); } -	| expr '-' expr				{ g_lingo->code1(g_lc->c_sub); } -	| expr '*' expr				{ g_lingo->code1(g_lc->c_mul); } -	| expr '/' expr				{ g_lingo->code1(g_lc->c_div); } -	| expr tMOD expr			{ g_lingo->code1(g_lc->c_mod); } -	| expr '>' expr				{ g_lingo->code1(g_lc->c_gt); } -	| expr '<' expr				{ g_lingo->code1(g_lc->c_lt); } -	| expr tEQ expr				{ g_lingo->code1(g_lc->c_eq); } -	| expr tNEQ expr			{ g_lingo->code1(g_lc->c_neq); } -	| expr tGE expr				{ g_lingo->code1(g_lc->c_ge); } -	| expr tLE expr				{ g_lingo->code1(g_lc->c_le); } -	| expr tAND expr			{ g_lingo->code1(g_lc->c_and); } -	| expr tOR expr				{ g_lingo->code1(g_lc->c_or); } -	| tNOT expr  %prec UNARY	{ g_lingo->code1(g_lc->c_not); } -	| expr '&' expr				{ g_lingo->code1(g_lc->c_ampersand); } -	| expr tCONCAT expr			{ g_lingo->code1(g_lc->c_concat); } -	| expr tCONTAINS expr		{ g_lingo->code1(g_lc->c_contains); } -	| expr tSTARTS expr			{ g_lingo->code1(g_lc->c_starts); } +	| expr '+' expr				{ g_lingo->code1(LC::c_add); } +	| expr '-' expr				{ g_lingo->code1(LC::c_sub); } +	| expr '*' expr				{ g_lingo->code1(LC::c_mul); } +	| expr '/' expr				{ g_lingo->code1(LC::c_div); } +	| expr tMOD expr			{ g_lingo->code1(LC::c_mod); } +	| expr '>' expr				{ g_lingo->code1(LC::c_gt); } +	| expr '<' expr				{ g_lingo->code1(LC::c_lt); } +	| expr tEQ expr				{ g_lingo->code1(LC::c_eq); } +	| expr tNEQ expr			{ g_lingo->code1(LC::c_neq); } +	| expr tGE expr				{ g_lingo->code1(LC::c_ge); } +	| expr tLE expr				{ g_lingo->code1(LC::c_le); } +	| expr tAND expr			{ g_lingo->code1(LC::c_and); } +	| expr tOR expr				{ g_lingo->code1(LC::c_or); } +	| tNOT expr  %prec UNARY	{ g_lingo->code1(LC::c_not); } +	| expr '&' expr				{ g_lingo->code1(LC::c_ampersand); } +	| expr tCONCAT expr			{ g_lingo->code1(LC::c_concat); } +	| expr tCONTAINS expr		{ g_lingo->code1(LC::c_contains); } +	| expr tSTARTS expr			{ g_lingo->code1(LC::c_starts); }  	| '+' expr  %prec UNARY		{ $$ = $2; } -	| '-' expr  %prec UNARY		{ $$ = $2; g_lingo->code1(g_lc->c_negate); } +	| '-' expr  %prec UNARY		{ $$ = $2; g_lingo->code1(LC::c_negate); }  	| '(' expr ')'				{ $$ = $2; } -	| '[' arglist ']'			{ $$ = g_lingo->code1(g_lc->c_arraypush); g_lingo->codeArray($2); } -	| tSPRITE expr tINTERSECTS expr 	{ g_lingo->code1(g_lc->c_intersects); } -	| tSPRITE expr tWITHIN expr		 	{ g_lingo->code1(g_lc->c_within); } -	| tCHAR expr tOF expr				{ g_lingo->code1(g_lc->c_charOf); } -	| tCHAR expr tTO expr tOF expr		{ g_lingo->code1(g_lc->c_charToOf); } -	| tITEM expr tOF expr				{ g_lingo->code1(g_lc->c_itemOf); } -	| tITEM expr tTO expr tOF expr		{ g_lingo->code1(g_lc->c_itemToOf); } -	| tLINE expr tOF expr				{ g_lingo->code1(g_lc->c_lineOf); } -	| tLINE expr tTO expr tOF expr		{ g_lingo->code1(g_lc->c_lineToOf); } -	| tWORD expr tOF expr				{ g_lingo->code1(g_lc->c_wordOf); } -	| tWORD expr tTO expr tOF expr		{ g_lingo->code1(g_lc->c_wordToOf); } +	| '[' arglist ']'			{ $$ = g_lingo->code1(LC::c_arraypush); g_lingo->codeArray($2); } +	| tSPRITE expr tINTERSECTS expr 	{ g_lingo->code1(LC::c_intersects); } +	| tSPRITE expr tWITHIN expr		 	{ g_lingo->code1(LC::c_within); } +	| tCHAR expr tOF expr				{ g_lingo->code1(LC::c_charOf); } +	| tCHAR expr tTO expr tOF expr		{ g_lingo->code1(LC::c_charToOf); } +	| tITEM expr tOF expr				{ g_lingo->code1(LC::c_itemOf); } +	| tITEM expr tTO expr tOF expr		{ g_lingo->code1(LC::c_itemToOf); } +	| tLINE expr tOF expr				{ g_lingo->code1(LC::c_lineOf); } +	| tLINE expr tTO expr tOF expr		{ g_lingo->code1(LC::c_lineToOf); } +	| tWORD expr tOF expr				{ g_lingo->code1(LC::c_wordOf); } +	| tWORD expr tTO expr tOF expr		{ g_lingo->code1(LC::c_wordToOf); }  	| tME '(' ID ')'					{ g_lingo->codeMe($3, 0); }  	| tME '(' ID ',' arglist ')'		{ g_lingo->codeMe($3, $5); }  	| tME								{ g_lingo->codeMe(nullptr, 0); } @@ -458,11 +458,11 @@ reference: 	RBLTINONEARG simpleexpr	{  		delete $1; }  	; -proc: tPUT expr				{ g_lingo->code1(g_lc->c_printtop); } +proc: tPUT expr				{ g_lingo->code1(LC::c_printtop); }  	| gotofunc  	| playfunc -	| tEXIT tREPEAT			{ g_lingo->code1(g_lc->c_exitRepeat); } -	| tEXIT					{ g_lingo->code1(g_lc->c_procret); } +	| tEXIT tREPEAT			{ g_lingo->code1(LC::c_exitRepeat); } +	| tEXIT					{ g_lingo->code1(LC::c_procret); }  	| tGLOBAL globallist  	| tPROPERTY propertylist  	| tINSTANCE instancelist @@ -476,25 +476,25 @@ proc: tPUT expr				{ g_lingo->code1(g_lc->c_printtop); }  		g_lingo->codeFunc($1, 1);  		delete $1; }  	| BLTINNOARGSORONE 		{ -		g_lingo->code1(g_lc->c_voidpush); +		g_lingo->code1(LC::c_voidpush);  		g_lingo->codeFunc($1, 1);  		delete $1; }  	| BLTINARGLIST arglist	{ g_lingo->codeFunc($1, $2); } -	| tOPEN expr tWITH expr	{ g_lingo->code1(g_lc->c_open); } -	| tOPEN expr 			{ g_lingo->code2(g_lc->c_voidpush, g_lc->c_open); } +	| tOPEN expr tWITH expr	{ g_lingo->code1(LC::c_open); } +	| tOPEN expr 			{ g_lingo->code2(LC::c_voidpush, LC::c_open); }  	| TWOWORDBUILTIN ID arglist	{ Common::String s(*$1); s += '-'; s += *$2; g_lingo->codeFunc(&s, $3); }  	; -globallist: ID					{ g_lingo->code1(g_lc->c_global); g_lingo->codeString($1->c_str()); delete $1; } -	| globallist ',' ID			{ g_lingo->code1(g_lc->c_global); g_lingo->codeString($3->c_str()); delete $3; } +globallist: ID					{ g_lingo->code1(LC::c_global); g_lingo->codeString($1->c_str()); delete $1; } +	| globallist ',' ID			{ g_lingo->code1(LC::c_global); g_lingo->codeString($3->c_str()); delete $3; }  	; -propertylist: ID				{ g_lingo->code1(g_lc->c_property); g_lingo->codeString($1->c_str()); delete $1; } -	| propertylist ',' ID		{ g_lingo->code1(g_lc->c_property); g_lingo->codeString($3->c_str()); delete $3; } +propertylist: ID				{ g_lingo->code1(LC::c_property); g_lingo->codeString($1->c_str()); delete $1; } +	| propertylist ',' ID		{ g_lingo->code1(LC::c_property); g_lingo->codeString($3->c_str()); delete $3; }  	; -instancelist: ID				{ g_lingo->code1(g_lc->c_instance); g_lingo->codeString($1->c_str()); delete $1; } -	| instancelist ',' ID		{ g_lingo->code1(g_lc->c_instance); g_lingo->codeString($3->c_str()); delete $3; } +instancelist: ID				{ g_lingo->code1(LC::c_instance); g_lingo->codeString($1->c_str()); delete $1; } +	| instancelist ',' ID		{ g_lingo->code1(LC::c_instance); g_lingo->codeString($3->c_str()); delete $3; }  	;  // go {to} {frame} whichFrame {of movie whichMovie} @@ -505,40 +505,40 @@ instancelist: ID				{ g_lingo->code1(g_lc->c_instance); g_lingo->codeString($1->  // go to {frame} whichFrame {of movie whichMovie}  // go to {frame whichFrame of} movie whichMovie -gotofunc: tGO tLOOP				{ g_lingo->code1(g_lc->c_gotoloop); } -	| tGO tNEXT					{ g_lingo->code1(g_lc->c_gotonext); } -	| tGO tPREVIOUS				{ g_lingo->code1(g_lc->c_gotoprevious); } +gotofunc: tGO tLOOP				{ g_lingo->code1(LC::c_gotoloop); } +	| tGO tNEXT					{ g_lingo->code1(LC::c_gotonext); } +	| tGO tPREVIOUS				{ g_lingo->code1(LC::c_gotoprevious); }  	| tGO expr 			{ -		g_lingo->code1(g_lc->c_intpush); +		g_lingo->code1(LC::c_intpush);  		g_lingo->codeInt(1); -		g_lingo->code1(g_lc->c_goto); } +		g_lingo->code1(LC::c_goto); }  	| tGO expr gotomovie	{ -		g_lingo->code1(g_lc->c_intpush); +		g_lingo->code1(LC::c_intpush);  		g_lingo->codeInt(3); -		g_lingo->code1(g_lc->c_goto); } +		g_lingo->code1(LC::c_goto); }  	| tGO gotomovie				{ -		g_lingo->code1(g_lc->c_intpush); +		g_lingo->code1(LC::c_intpush);  		g_lingo->codeInt(2); -		g_lingo->code1(g_lc->c_goto); } +		g_lingo->code1(LC::c_goto); }  	;  gotomovie: tOF tMOVIE expr  	| tMOVIE expr  	; -playfunc: tPLAY tDONE			{ g_lingo->code1(g_lc->c_playdone); } +playfunc: tPLAY tDONE			{ g_lingo->code1(LC::c_playdone); }  	| tPLAY expr 			{ -		g_lingo->code1(g_lc->c_intpush); +		g_lingo->code1(LC::c_intpush);  		g_lingo->codeInt(1); -		g_lingo->code1(g_lc->c_play); } +		g_lingo->code1(LC::c_play); }  	| tPLAY expr gotomovie	{ -		g_lingo->code1(g_lc->c_intpush); +		g_lingo->code1(LC::c_intpush);  		g_lingo->codeInt(3); -		g_lingo->code1(g_lc->c_play); } +		g_lingo->code1(LC::c_play); }  	| tPLAY gotomovie				{ -		g_lingo->code1(g_lc->c_intpush); +		g_lingo->code1(LC::c_intpush);  		g_lingo->codeInt(2); -		g_lingo->code1(g_lc->c_play); } +		g_lingo->code1(LC::c_play); }  	| tPLAYACCEL { g_lingo->codeSetImmediate(true); } arglist	{  		g_lingo->codeSetImmediate(false);  		g_lingo->codeFunc($1, $3); } @@ -571,19 +571,19 @@ playfunc: tPLAY tDONE			{ g_lingo->code1(g_lc->c_playdone); }  //   on keyword  defn: tMACRO ID { g_lingo->_indef = kStateInArgs; g_lingo->_currentFactory.clear(); }  		begin argdef '\n' argstore stmtlist 		{ -			g_lingo->code1(g_lc->c_procret); +			g_lingo->code1(LC::c_procret);  			g_lingo->define(*$2, $4, $5);  			g_lingo->clearArgStack();  			g_lingo->_indef = kStateNone; }  	| tFACTORY ID	{ g_lingo->codeFactory(*$2); }  	| tMETHOD { g_lingo->_indef = kStateInArgs; }  		begin argdef '\n' argstore stmtlist 		{ -			g_lingo->code1(g_lc->c_procret); +			g_lingo->code1(LC::c_procret);  			g_lingo->define(*$1, $3, $4 + 1, &g_lingo->_currentFactory);  			g_lingo->clearArgStack();  			g_lingo->_indef = kStateNone; }  	| on begin argdef '\n' argstore stmtlist ENDCLAUSE endargdef {	// D3 -		g_lingo->code1(g_lc->c_procret); +		g_lingo->code1(LC::c_procret);  		g_lingo->define(*$1, $2, $3);  		g_lingo->clearArgStack();  		g_lingo->_indef = kStateNone; @@ -591,7 +591,7 @@ defn: tMACRO ID { g_lingo->_indef = kStateInArgs; g_lingo->_currentFactory.clear  		checkEnd($7, $1->c_str(), false); }  	| on begin argdef '\n' argstore stmtlist {	// D4. No 'end' clause -		g_lingo->code1(g_lc->c_procret); +		g_lingo->code1(LC::c_procret);  		g_lingo->define(*$1, $2, $3);  		g_lingo->_indef = kStateNone;  		g_lingo->clearArgStack(); @@ -614,7 +614,7 @@ argstore:	  /* nothing */		{ g_lingo->codeArgStore(); g_lingo->_indef = kStateIn  	;  macro: ID nonemptyarglist	{ -		g_lingo->code1(g_lc->c_call); +		g_lingo->code1(LC::c_call);  		g_lingo->codeString($1->c_str());  		inst numpar = 0;  		WRITE_UINT32(&numpar, $2); diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp index 1db39272f0..2200276526 100644 --- a/engines/director/lingo/lingo.cpp +++ b/engines/director/lingo/lingo.cpp @@ -47,10 +47,6 @@ Symbol::Symbol() {  Lingo::Lingo(DirectorEngine *vm) : _vm(vm) {  	g_lingo = this; -	_lc = new LC; - -	g_lc = _lc; -  	_currentScript = 0;  	_currentScriptType = kMovieScript;  	_currentEntityId = 0; diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h index 264ceb30d4..09476e7b1c 100644 --- a/engines/director/lingo/lingo.h +++ b/engines/director/lingo/lingo.h @@ -42,8 +42,6 @@ struct TheEntityField;  struct LingoV4Bytecode;  struct LingoV4TheEntity;  class DirectorEngine; -class LC; -  class Frame;  enum LEvent { @@ -180,8 +178,6 @@ struct CFrame {	/* proc/func call stack frame */  class Lingo { -friend class LC; -  public:  	Lingo(DirectorEngine *vm);  	~Lingo(); @@ -532,7 +528,7 @@ public:  	void push(Datum d);  	Datum pop(void); -private: +public:  	Common::HashMap<uint32, const char *> _eventHandlerTypes;  	Common::HashMap<Common::String, uint32, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> _eventHandlerTypeIds;  	Common::HashMap<Common::String, Audio::AudioStream *> _audioAliases; @@ -544,17 +540,14 @@ private:  	FuncHash _functions; -protected:  	Common::HashMap<int, LingoV4Bytecode *> _lingoV4;  	Common::HashMap<int, LingoV4TheEntity *> _lingoV4TheEntity; -private:  	uint _pc;  	StackData _stack;  	DirectorEngine *_vm; -	LC *_lc;  	int _floatPrecision;  | 
