diff options
| author | Eugene Sandulenko | 2016-08-02 11:49:15 +0300 | 
|---|---|---|
| committer | Eugene Sandulenko | 2016-08-03 23:40:36 +0200 | 
| commit | f67bcdc141146cdf096bdcc14ad24320118a00a0 (patch) | |
| tree | bc559d96e73ba430d531da6d78742e49b6e4eec3 | |
| parent | fa7725a5f554bf31c848fccb3d2f8da83dd6f393 (diff) | |
| download | scummvm-rg350-f67bcdc141146cdf096bdcc14ad24320118a00a0.tar.gz scummvm-rg350-f67bcdc141146cdf096bdcc14ad24320118a00a0.tar.bz2 scummvm-rg350-f67bcdc141146cdf096bdcc14ad24320118a00a0.zip | |
DIRECTOR: Lingo: Simplify CodeId
| -rw-r--r-- | engines/director/lingo/lingo-code.cpp | 2 | ||||
| -rw-r--r-- | engines/director/lingo/lingo-codegen.cpp | 15 | ||||
| -rw-r--r-- | engines/director/lingo/lingo-gr.cpp | 131 | ||||
| -rw-r--r-- | engines/director/lingo/lingo-gr.y | 3 | ||||
| -rw-r--r-- | engines/director/lingo/lingo.h | 2 | 
5 files changed, 70 insertions, 83 deletions
| diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp index fb1ad93c5d..4c88e5d6e9 100644 --- a/engines/director/lingo/lingo-code.cpp +++ b/engines/director/lingo/lingo-code.cpp @@ -220,6 +220,8 @@ bool Lingo::verify(Symbol *s) {  }  void Lingo::c_eval() { +	g_lingo->c_varpush(); +  	Datum d;  	d = g_lingo->pop(); diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp index 21501bf2a3..00875dec27 100644 --- a/engines/director/lingo/lingo-codegen.cpp +++ b/engines/director/lingo/lingo-codegen.cpp @@ -206,21 +206,6 @@ void Lingo::codeArgStore() {  	}  } -int Lingo::codeId(Common::String &s) { -	return codeId_(s); -} - -int Lingo::codeId_(Common::String &name) { -	int ret; - -	ret = code1(c_varpush); - -	codeString(name.c_str()); -	code1(c_eval); - -	return ret; -} -  void Lingo::codeLabel(int label) {  	_labelstack.push_back(label);  } diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp index a26ecfdd3a..ccbf35533e 100644 --- a/engines/director/lingo/lingo-gr.cpp +++ b/engines/director/lingo/lingo-gr.cpp @@ -609,12 +609,12 @@ static const yytype_uint16 yyrline[] =       249,   259,   269,   280,   281,   284,   285,   288,   289,   292,       300,   301,   309,   310,   311,   313,   315,   321,   327,   334,       336,   338,   339,   340,   343,   348,   351,   354,   358,   366, -     369,   376,   382,   383,   384,   385,   386,   387,   388,   389, -     390,   391,   392,   393,   394,   395,   396,   397,   398,   399, -     400,   401,   402,   403,   406,   407,   408,   409,   410,   412, -     415,   416,   427,   428,   429,   430,   435,   441,   448,   449, -     450,   451,   454,   455,   456,   484,   484,   490,   493,   493, -     499,   500,   501,   502,   504,   508,   516,   517,   518 +     370,   377,   383,   384,   385,   386,   387,   388,   389,   390, +     391,   392,   393,   394,   395,   396,   397,   398,   399,   400, +     401,   402,   403,   404,   407,   408,   409,   410,   411,   413, +     416,   417,   428,   429,   430,   431,   436,   442,   449,   450, +     451,   452,   455,   456,   457,   485,   485,   491,   494,   494, +     500,   501,   502,   503,   505,   509,   517,   518,   519  };  #endif @@ -2140,12 +2140,13 @@ yyreduce:    case 59:  #line 366 "engines/director/lingo/lingo-gr.y"      { -		(yyval.code) = g_lingo->codeId(*(yyvsp[(1) - (1)].s)); +		(yyval.code) = g_lingo->code1(g_lingo->c_eval); +		g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str());  		delete (yyvsp[(1) - (1)].s); ;}      break;    case 60: -#line 369 "engines/director/lingo/lingo-gr.y" +#line 370 "engines/director/lingo/lingo-gr.y"      {  		(yyval.code) = g_lingo->code2(g_lingo->c_constpush, 0); // Put dummy id  		g_lingo->code1(g_lingo->c_theentitypush); @@ -2156,7 +2157,7 @@ yyreduce:      break;    case 61: -#line 376 "engines/director/lingo/lingo-gr.y" +#line 377 "engines/director/lingo/lingo-gr.y"      {  		(yyval.code) = g_lingo->code1(g_lingo->c_theentitypush);  		inst e = 0, f = 0; @@ -2166,158 +2167,158 @@ yyreduce:      break;    case 63: -#line 383 "engines/director/lingo/lingo-gr.y" +#line 384 "engines/director/lingo/lingo-gr.y"      { g_lingo->code1(g_lingo->c_add); ;}      break;    case 64: -#line 384 "engines/director/lingo/lingo-gr.y" +#line 385 "engines/director/lingo/lingo-gr.y"      { g_lingo->code1(g_lingo->c_sub); ;}      break;    case 65: -#line 385 "engines/director/lingo/lingo-gr.y" +#line 386 "engines/director/lingo/lingo-gr.y"      { g_lingo->code1(g_lingo->c_mul); ;}      break;    case 66: -#line 386 "engines/director/lingo/lingo-gr.y" +#line 387 "engines/director/lingo/lingo-gr.y"      { g_lingo->code1(g_lingo->c_div); ;}      break;    case 67: -#line 387 "engines/director/lingo/lingo-gr.y" +#line 388 "engines/director/lingo/lingo-gr.y"      { g_lingo->code1(g_lingo->c_gt); ;}      break;    case 68: -#line 388 "engines/director/lingo/lingo-gr.y" +#line 389 "engines/director/lingo/lingo-gr.y"      { g_lingo->code1(g_lingo->c_lt); ;}      break;    case 69: -#line 389 "engines/director/lingo/lingo-gr.y" +#line 390 "engines/director/lingo/lingo-gr.y"      { g_lingo->code1(g_lingo->c_neq); ;}      break;    case 70: -#line 390 "engines/director/lingo/lingo-gr.y" +#line 391 "engines/director/lingo/lingo-gr.y"      { g_lingo->code1(g_lingo->c_ge); ;}      break;    case 71: -#line 391 "engines/director/lingo/lingo-gr.y" +#line 392 "engines/director/lingo/lingo-gr.y"      { g_lingo->code1(g_lingo->c_le); ;}      break;    case 72: -#line 392 "engines/director/lingo/lingo-gr.y" +#line 393 "engines/director/lingo/lingo-gr.y"      { g_lingo->code1(g_lingo->c_and); ;}      break;    case 73: -#line 393 "engines/director/lingo/lingo-gr.y" +#line 394 "engines/director/lingo/lingo-gr.y"      { g_lingo->code1(g_lingo->c_or); ;}      break;    case 74: -#line 394 "engines/director/lingo/lingo-gr.y" +#line 395 "engines/director/lingo/lingo-gr.y"      { g_lingo->code1(g_lingo->c_not); ;}      break;    case 75: -#line 395 "engines/director/lingo/lingo-gr.y" +#line 396 "engines/director/lingo/lingo-gr.y"      { g_lingo->code1(g_lingo->c_ampersand); ;}      break;    case 76: -#line 396 "engines/director/lingo/lingo-gr.y" +#line 397 "engines/director/lingo/lingo-gr.y"      { g_lingo->code1(g_lingo->c_concat); ;}      break;    case 77: -#line 397 "engines/director/lingo/lingo-gr.y" +#line 398 "engines/director/lingo/lingo-gr.y"      { g_lingo->code1(g_lingo->c_contains); ;}      break;    case 78: -#line 398 "engines/director/lingo/lingo-gr.y" +#line 399 "engines/director/lingo/lingo-gr.y"      { g_lingo->code1(g_lingo->c_starts); ;}      break;    case 79: -#line 399 "engines/director/lingo/lingo-gr.y" +#line 400 "engines/director/lingo/lingo-gr.y"      { (yyval.code) = (yyvsp[(2) - (2)].code); ;}      break;    case 80: -#line 400 "engines/director/lingo/lingo-gr.y" +#line 401 "engines/director/lingo/lingo-gr.y"      { (yyval.code) = (yyvsp[(2) - (2)].code); g_lingo->code1(g_lingo->c_negate); ;}      break;    case 81: -#line 401 "engines/director/lingo/lingo-gr.y" +#line 402 "engines/director/lingo/lingo-gr.y"      { (yyval.code) = (yyvsp[(2) - (3)].code); ;}      break;    case 82: -#line 402 "engines/director/lingo/lingo-gr.y" +#line 403 "engines/director/lingo/lingo-gr.y"      { g_lingo->code1(g_lingo->c_intersects); ;}      break;    case 83: -#line 403 "engines/director/lingo/lingo-gr.y" +#line 404 "engines/director/lingo/lingo-gr.y"      { g_lingo->code1(g_lingo->c_within); ;}      break;    case 84: -#line 406 "engines/director/lingo/lingo-gr.y" +#line 407 "engines/director/lingo/lingo-gr.y"      { g_lingo->code1(g_lingo->c_mci); g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str()); delete (yyvsp[(2) - (2)].s); ;}      break;    case 85: -#line 407 "engines/director/lingo/lingo-gr.y" +#line 408 "engines/director/lingo/lingo-gr.y"      { g_lingo->code1(g_lingo->c_mciwait); g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str()); delete (yyvsp[(2) - (2)].s); ;}      break;    case 86: -#line 408 "engines/director/lingo/lingo-gr.y" +#line 409 "engines/director/lingo/lingo-gr.y"      { g_lingo->code1(g_lingo->c_printtop); ;}      break;    case 88: -#line 410 "engines/director/lingo/lingo-gr.y" +#line 411 "engines/director/lingo/lingo-gr.y"      { g_lingo->code2(g_lingo->c_constpush, (inst)0); // Push fake value on stack  							  g_lingo->code1(g_lingo->c_procret); ;}      break;    case 90: -#line 415 "engines/director/lingo/lingo-gr.y" +#line 416 "engines/director/lingo/lingo-gr.y"      { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}      break;    case 91: -#line 416 "engines/director/lingo/lingo-gr.y" +#line 417 "engines/director/lingo/lingo-gr.y"      { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}      break;    case 92: -#line 427 "engines/director/lingo/lingo-gr.y" +#line 428 "engines/director/lingo/lingo-gr.y"      { g_lingo->code1(g_lingo->c_gotoloop); ;}      break;    case 93: -#line 428 "engines/director/lingo/lingo-gr.y" +#line 429 "engines/director/lingo/lingo-gr.y"      { g_lingo->code1(g_lingo->c_gotonext); ;}      break;    case 94: -#line 429 "engines/director/lingo/lingo-gr.y" +#line 430 "engines/director/lingo/lingo-gr.y"      { g_lingo->code1(g_lingo->c_gotoprevious); ;}      break;    case 95: -#line 430 "engines/director/lingo/lingo-gr.y" +#line 431 "engines/director/lingo/lingo-gr.y"      {  		g_lingo->code1(g_lingo->c_goto);  		g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str()); @@ -2326,7 +2327,7 @@ yyreduce:      break;    case 96: -#line 435 "engines/director/lingo/lingo-gr.y" +#line 436 "engines/director/lingo/lingo-gr.y"      {  		g_lingo->code1(g_lingo->c_goto);  		g_lingo->codeString((yyvsp[(2) - (3)].s)->c_str()); @@ -2336,7 +2337,7 @@ yyreduce:      break;    case 97: -#line 441 "engines/director/lingo/lingo-gr.y" +#line 442 "engines/director/lingo/lingo-gr.y"      {  		g_lingo->code1(g_lingo->c_goto);  		g_lingo->codeString(""); @@ -2345,47 +2346,47 @@ yyreduce:      break;    case 98: -#line 448 "engines/director/lingo/lingo-gr.y" +#line 449 "engines/director/lingo/lingo-gr.y"      { (yyval.s) = (yyvsp[(3) - (3)].s); ;}      break;    case 99: -#line 449 "engines/director/lingo/lingo-gr.y" +#line 450 "engines/director/lingo/lingo-gr.y"      { (yyval.s) = (yyvsp[(2) - (2)].s); ;}      break;    case 100: -#line 450 "engines/director/lingo/lingo-gr.y" +#line 451 "engines/director/lingo/lingo-gr.y"      { (yyval.s) = (yyvsp[(2) - (2)].s); ;}      break;    case 101: -#line 451 "engines/director/lingo/lingo-gr.y" +#line 452 "engines/director/lingo/lingo-gr.y"      { (yyval.s) = (yyvsp[(1) - (1)].s); ;}      break;    case 102: -#line 454 "engines/director/lingo/lingo-gr.y" +#line 455 "engines/director/lingo/lingo-gr.y"      { (yyval.s) = (yyvsp[(3) - (3)].s); ;}      break;    case 103: -#line 455 "engines/director/lingo/lingo-gr.y" +#line 456 "engines/director/lingo/lingo-gr.y"      { (yyval.s) = (yyvsp[(2) - (2)].s); ;}      break;    case 104: -#line 456 "engines/director/lingo/lingo-gr.y" +#line 457 "engines/director/lingo/lingo-gr.y"      { (yyval.s) = (yyvsp[(3) - (3)].s); ;}      break;    case 105: -#line 484 "engines/director/lingo/lingo-gr.y" +#line 485 "engines/director/lingo/lingo-gr.y"      { g_lingo->_indef = true; ;}      break;    case 106: -#line 485 "engines/director/lingo/lingo-gr.y" +#line 486 "engines/director/lingo/lingo-gr.y"      {  			g_lingo->code2(g_lingo->c_constpush, (inst)0); // Push fake value on stack  			g_lingo->code1(g_lingo->c_procret); @@ -2394,19 +2395,19 @@ yyreduce:      break;    case 107: -#line 490 "engines/director/lingo/lingo-gr.y" +#line 491 "engines/director/lingo/lingo-gr.y"      {  			g_lingo->codeFactory(*(yyvsp[(2) - (2)].s));  		;}      break;    case 108: -#line 493 "engines/director/lingo/lingo-gr.y" +#line 494 "engines/director/lingo/lingo-gr.y"      { g_lingo->_indef = true; ;}      break;    case 109: -#line 494 "engines/director/lingo/lingo-gr.y" +#line 495 "engines/director/lingo/lingo-gr.y"      {  			g_lingo->code2(g_lingo->c_constpush, (inst)0); // Push fake value on stack  			g_lingo->code1(g_lingo->c_procret); @@ -2415,32 +2416,32 @@ yyreduce:      break;    case 110: -#line 499 "engines/director/lingo/lingo-gr.y" +#line 500 "engines/director/lingo/lingo-gr.y"      { (yyval.narg) = 0; ;}      break;    case 111: -#line 500 "engines/director/lingo/lingo-gr.y" +#line 501 "engines/director/lingo/lingo-gr.y"      { g_lingo->codeArg((yyvsp[(1) - (1)].s)); (yyval.narg) = 1; ;}      break;    case 112: -#line 501 "engines/director/lingo/lingo-gr.y" +#line 502 "engines/director/lingo/lingo-gr.y"      { g_lingo->codeArg((yyvsp[(3) - (3)].s)); (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}      break;    case 113: -#line 502 "engines/director/lingo/lingo-gr.y" +#line 503 "engines/director/lingo/lingo-gr.y"      { g_lingo->codeArg((yyvsp[(4) - (4)].s)); (yyval.narg) = (yyvsp[(1) - (4)].narg) + 1; ;}      break;    case 114: -#line 504 "engines/director/lingo/lingo-gr.y" +#line 505 "engines/director/lingo/lingo-gr.y"      { g_lingo->codeArgStore(); ;}      break;    case 115: -#line 508 "engines/director/lingo/lingo-gr.y" +#line 509 "engines/director/lingo/lingo-gr.y"      {  		g_lingo->code1(g_lingo->c_call);  		g_lingo->codeString((yyvsp[(1) - (3)].s)->c_str()); @@ -2450,23 +2451,23 @@ yyreduce:      break;    case 116: -#line 516 "engines/director/lingo/lingo-gr.y" +#line 517 "engines/director/lingo/lingo-gr.y"      { (yyval.narg) = 0; ;}      break;    case 117: -#line 517 "engines/director/lingo/lingo-gr.y" +#line 518 "engines/director/lingo/lingo-gr.y"      { (yyval.narg) = 1; ;}      break;    case 118: -#line 518 "engines/director/lingo/lingo-gr.y" +#line 519 "engines/director/lingo/lingo-gr.y"      { (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}      break;  /* Line 1267 of yacc.c.  */ -#line 2470 "engines/director/lingo/lingo-gr.cpp" +#line 2471 "engines/director/lingo/lingo-gr.cpp"        default: break;      }    YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -2680,6 +2681,6 @@ yyreturn:  } -#line 521 "engines/director/lingo/lingo-gr.y" +#line 522 "engines/director/lingo/lingo-gr.y" diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y index cfed29a6d3..e718d4806a 100644 --- a/engines/director/lingo/lingo-gr.y +++ b/engines/director/lingo/lingo-gr.y @@ -364,7 +364,8 @@ expr: INT		{  		g_lingo->code1(numpar);  		delete $1; }  	| ID		{ -		$$ = g_lingo->codeId(*$1); +		$$ = g_lingo->code1(g_lingo->c_eval); +		g_lingo->codeString($1->c_str());  		delete $1; }  	| THEENTITY	{  		$$ = g_lingo->code2(g_lingo->c_constpush, 0); // Put dummy id diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h index ec2c018926..c80d6ee1ac 100644 --- a/engines/director/lingo/lingo.h +++ b/engines/director/lingo/lingo.h @@ -184,8 +184,6 @@ public:  	void codeArg(Common::String *s);  	void codeArgStore(); -	int codeId(Common::String &s); -	int codeId_(Common::String &s);  	int codeFloat(double f);  	void codeFactory(Common::String &s); | 
