diff options
-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); |