mirror of
https://github.com/scummvm/scummvm.git
synced 2026-06-20 05:45:29 +00:00
DIRECTOR: Lingo: Simplified code generation for constants
This commit is contained in:
@@ -184,6 +184,15 @@ int Lingo::codeFloat(double f) {
|
||||
return _currentScript->size();
|
||||
}
|
||||
|
||||
int Lingo::codeConst(int val) {
|
||||
int res = g_lingo->code1(g_lingo->c_constpush);
|
||||
inst i = 0;
|
||||
WRITE_UINT32(&i, val);
|
||||
g_lingo->code1(i);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
void Lingo::codeArg(Common::String *s) {
|
||||
_argstack.push_back(s);
|
||||
}
|
||||
|
||||
@@ -620,14 +620,14 @@ static const yytype_uint16 yyrline[] =
|
||||
174, 176, 177, 182, 193, 209, 221, 226, 233, 242,
|
||||
251, 261, 271, 282, 283, 286, 287, 290, 291, 294,
|
||||
302, 303, 311, 312, 313, 315, 317, 323, 329, 336,
|
||||
338, 340, 341, 342, 345, 350, 353, 356, 360, 363,
|
||||
367, 374, 380, 381, 382, 383, 384, 385, 386, 387,
|
||||
388, 389, 390, 391, 392, 393, 394, 395, 396, 397,
|
||||
398, 399, 400, 401, 404, 405, 406, 407, 408, 410,
|
||||
411, 412, 418, 424, 425, 431, 432, 440, 441, 452,
|
||||
453, 454, 455, 460, 466, 473, 474, 475, 476, 479,
|
||||
480, 481, 509, 509, 515, 518, 518, 524, 525, 526,
|
||||
527, 529, 533, 541, 542, 543
|
||||
338, 340, 341, 342, 345, 346, 349, 352, 356, 359,
|
||||
363, 370, 376, 377, 378, 379, 380, 381, 382, 383,
|
||||
384, 385, 386, 387, 388, 389, 390, 391, 392, 393,
|
||||
394, 395, 396, 397, 400, 401, 402, 403, 404, 406,
|
||||
407, 408, 411, 414, 415, 418, 419, 424, 425, 436,
|
||||
437, 438, 439, 444, 450, 457, 458, 459, 460, 463,
|
||||
464, 465, 493, 493, 499, 502, 502, 508, 509, 510,
|
||||
511, 513, 517, 525, 526, 527
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -1855,7 +1855,7 @@ yyreduce:
|
||||
case 14:
|
||||
#line 134 "engines/director/lingo/lingo-gr.y"
|
||||
{
|
||||
g_lingo->code2(g_lingo->c_constpush, 0); // Put dummy id
|
||||
g_lingo->codeConst(0); // Put dummy id
|
||||
g_lingo->code1(g_lingo->c_theentityassign);
|
||||
inst e = 0, f = 0;
|
||||
WRITE_UINT32(&e, (yyvsp[(2) - (4)].e)[0]);
|
||||
@@ -1889,7 +1889,7 @@ yyreduce:
|
||||
case 17:
|
||||
#line 156 "engines/director/lingo/lingo-gr.y"
|
||||
{
|
||||
g_lingo->code2(g_lingo->c_constpush, 0); // Put dummy id
|
||||
g_lingo->codeConst(0); // Put dummy id
|
||||
g_lingo->code1(g_lingo->c_theentityassign);
|
||||
inst e = 0, f = 0;
|
||||
WRITE_UINT32(&e, (yyvsp[(2) - (4)].e)[0]);
|
||||
@@ -2133,44 +2133,40 @@ yyreduce:
|
||||
|
||||
case 54:
|
||||
#line 345 "engines/director/lingo/lingo-gr.y"
|
||||
{
|
||||
(yyval.code) = g_lingo->code1(g_lingo->c_constpush);
|
||||
inst i = 0;
|
||||
WRITE_UINT32(&i, (yyvsp[(1) - (1)].i));
|
||||
g_lingo->code1(i); ;}
|
||||
{ (yyval.code) = g_lingo->codeConst((yyvsp[(1) - (1)].i)); ;}
|
||||
break;
|
||||
|
||||
case 55:
|
||||
#line 350 "engines/director/lingo/lingo-gr.y"
|
||||
#line 346 "engines/director/lingo/lingo-gr.y"
|
||||
{
|
||||
(yyval.code) = g_lingo->code1(g_lingo->c_fconstpush);
|
||||
g_lingo->codeFloat((yyvsp[(1) - (1)].f)); ;}
|
||||
break;
|
||||
|
||||
case 56:
|
||||
#line 353 "engines/director/lingo/lingo-gr.y"
|
||||
#line 349 "engines/director/lingo/lingo-gr.y"
|
||||
{
|
||||
(yyval.code) = g_lingo->code1(g_lingo->c_stringpush);
|
||||
g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); ;}
|
||||
break;
|
||||
|
||||
case 57:
|
||||
#line 356 "engines/director/lingo/lingo-gr.y"
|
||||
#line 352 "engines/director/lingo/lingo-gr.y"
|
||||
{
|
||||
(yyval.code) = g_lingo->code1(g_lingo->_handlers[*(yyvsp[(1) - (1)].s)]->u.func);
|
||||
(yyval.code) = g_lingo->code2(g_lingo->c_constpush, 0); // Put dummy value
|
||||
g_lingo->codeConst(0); // Put dummy value
|
||||
delete (yyvsp[(1) - (1)].s); ;}
|
||||
break;
|
||||
|
||||
case 58:
|
||||
#line 360 "engines/director/lingo/lingo-gr.y"
|
||||
#line 356 "engines/director/lingo/lingo-gr.y"
|
||||
{
|
||||
(yyval.code) = g_lingo->codeFunc((yyvsp[(1) - (4)].s), (yyvsp[(3) - (4)].narg));
|
||||
delete (yyvsp[(1) - (4)].s); ;}
|
||||
break;
|
||||
|
||||
case 59:
|
||||
#line 363 "engines/director/lingo/lingo-gr.y"
|
||||
#line 359 "engines/director/lingo/lingo-gr.y"
|
||||
{
|
||||
(yyval.code) = g_lingo->code1(g_lingo->c_eval);
|
||||
g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str());
|
||||
@@ -2178,9 +2174,9 @@ yyreduce:
|
||||
break;
|
||||
|
||||
case 60:
|
||||
#line 367 "engines/director/lingo/lingo-gr.y"
|
||||
#line 363 "engines/director/lingo/lingo-gr.y"
|
||||
{
|
||||
(yyval.code) = g_lingo->code2(g_lingo->c_constpush, 0); // Put dummy id
|
||||
(yyval.code) = g_lingo->codeConst(0); // Put dummy id
|
||||
g_lingo->code1(g_lingo->c_theentitypush);
|
||||
inst e = 0, f = 0;
|
||||
WRITE_UINT32(&e, (yyvsp[(1) - (1)].e)[0]);
|
||||
@@ -2189,7 +2185,7 @@ yyreduce:
|
||||
break;
|
||||
|
||||
case 61:
|
||||
#line 374 "engines/director/lingo/lingo-gr.y"
|
||||
#line 370 "engines/director/lingo/lingo-gr.y"
|
||||
{
|
||||
(yyval.code) = g_lingo->code1(g_lingo->c_theentitypush);
|
||||
inst e = 0, f = 0;
|
||||
@@ -2199,213 +2195,201 @@ yyreduce:
|
||||
break;
|
||||
|
||||
case 63:
|
||||
#line 381 "engines/director/lingo/lingo-gr.y"
|
||||
#line 377 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->code1(g_lingo->c_add); ;}
|
||||
break;
|
||||
|
||||
case 64:
|
||||
#line 382 "engines/director/lingo/lingo-gr.y"
|
||||
#line 378 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->code1(g_lingo->c_sub); ;}
|
||||
break;
|
||||
|
||||
case 65:
|
||||
#line 383 "engines/director/lingo/lingo-gr.y"
|
||||
#line 379 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->code1(g_lingo->c_mul); ;}
|
||||
break;
|
||||
|
||||
case 66:
|
||||
#line 384 "engines/director/lingo/lingo-gr.y"
|
||||
#line 380 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->code1(g_lingo->c_div); ;}
|
||||
break;
|
||||
|
||||
case 67:
|
||||
#line 385 "engines/director/lingo/lingo-gr.y"
|
||||
#line 381 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->code1(g_lingo->c_gt); ;}
|
||||
break;
|
||||
|
||||
case 68:
|
||||
#line 386 "engines/director/lingo/lingo-gr.y"
|
||||
#line 382 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->code1(g_lingo->c_lt); ;}
|
||||
break;
|
||||
|
||||
case 69:
|
||||
#line 387 "engines/director/lingo/lingo-gr.y"
|
||||
#line 383 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->code1(g_lingo->c_neq); ;}
|
||||
break;
|
||||
|
||||
case 70:
|
||||
#line 388 "engines/director/lingo/lingo-gr.y"
|
||||
#line 384 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->code1(g_lingo->c_ge); ;}
|
||||
break;
|
||||
|
||||
case 71:
|
||||
#line 389 "engines/director/lingo/lingo-gr.y"
|
||||
#line 385 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->code1(g_lingo->c_le); ;}
|
||||
break;
|
||||
|
||||
case 72:
|
||||
#line 390 "engines/director/lingo/lingo-gr.y"
|
||||
#line 386 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->code1(g_lingo->c_and); ;}
|
||||
break;
|
||||
|
||||
case 73:
|
||||
#line 391 "engines/director/lingo/lingo-gr.y"
|
||||
#line 387 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->code1(g_lingo->c_or); ;}
|
||||
break;
|
||||
|
||||
case 74:
|
||||
#line 392 "engines/director/lingo/lingo-gr.y"
|
||||
#line 388 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->code1(g_lingo->c_not); ;}
|
||||
break;
|
||||
|
||||
case 75:
|
||||
#line 393 "engines/director/lingo/lingo-gr.y"
|
||||
#line 389 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->code1(g_lingo->c_ampersand); ;}
|
||||
break;
|
||||
|
||||
case 76:
|
||||
#line 394 "engines/director/lingo/lingo-gr.y"
|
||||
#line 390 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->code1(g_lingo->c_concat); ;}
|
||||
break;
|
||||
|
||||
case 77:
|
||||
#line 395 "engines/director/lingo/lingo-gr.y"
|
||||
#line 391 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->code1(g_lingo->c_contains); ;}
|
||||
break;
|
||||
|
||||
case 78:
|
||||
#line 396 "engines/director/lingo/lingo-gr.y"
|
||||
#line 392 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->code1(g_lingo->c_starts); ;}
|
||||
break;
|
||||
|
||||
case 79:
|
||||
#line 397 "engines/director/lingo/lingo-gr.y"
|
||||
#line 393 "engines/director/lingo/lingo-gr.y"
|
||||
{ (yyval.code) = (yyvsp[(2) - (2)].code); ;}
|
||||
break;
|
||||
|
||||
case 80:
|
||||
#line 398 "engines/director/lingo/lingo-gr.y"
|
||||
#line 394 "engines/director/lingo/lingo-gr.y"
|
||||
{ (yyval.code) = (yyvsp[(2) - (2)].code); g_lingo->code1(g_lingo->c_negate); ;}
|
||||
break;
|
||||
|
||||
case 81:
|
||||
#line 399 "engines/director/lingo/lingo-gr.y"
|
||||
#line 395 "engines/director/lingo/lingo-gr.y"
|
||||
{ (yyval.code) = (yyvsp[(2) - (3)].code); ;}
|
||||
break;
|
||||
|
||||
case 82:
|
||||
#line 400 "engines/director/lingo/lingo-gr.y"
|
||||
#line 396 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->code1(g_lingo->c_intersects); ;}
|
||||
break;
|
||||
|
||||
case 83:
|
||||
#line 401 "engines/director/lingo/lingo-gr.y"
|
||||
#line 397 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->code1(g_lingo->c_within); ;}
|
||||
break;
|
||||
|
||||
case 84:
|
||||
#line 404 "engines/director/lingo/lingo-gr.y"
|
||||
#line 400 "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 405 "engines/director/lingo/lingo-gr.y"
|
||||
#line 401 "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 406 "engines/director/lingo/lingo-gr.y"
|
||||
#line 402 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->code1(g_lingo->c_printtop); ;}
|
||||
break;
|
||||
|
||||
case 88:
|
||||
#line 408 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->code2(g_lingo->c_constpush, (inst)0); // Push fake value on stack
|
||||
#line 404 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->codeConst(0); // Push fake value on stack
|
||||
g_lingo->code1(g_lingo->c_procret); ;}
|
||||
break;
|
||||
|
||||
case 90:
|
||||
#line 411 "engines/director/lingo/lingo-gr.y"
|
||||
#line 407 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->code1(g_lingo->c_alert); ;}
|
||||
break;
|
||||
|
||||
case 91:
|
||||
#line 412 "engines/director/lingo/lingo-gr.y"
|
||||
#line 408 "engines/director/lingo/lingo-gr.y"
|
||||
{
|
||||
g_lingo->code1(g_lingo->c_constpush);
|
||||
inst i = 0;
|
||||
WRITE_UINT32(&i, (yyvsp[(2) - (2)].i));
|
||||
g_lingo->code1(i);
|
||||
g_lingo->codeConst((yyvsp[(2) - (2)].i));
|
||||
g_lingo->code1(g_lingo->c_beep); ;}
|
||||
break;
|
||||
|
||||
case 92:
|
||||
#line 418 "engines/director/lingo/lingo-gr.y"
|
||||
#line 411 "engines/director/lingo/lingo-gr.y"
|
||||
{
|
||||
g_lingo->code1(g_lingo->c_constpush);
|
||||
inst i = 0;
|
||||
WRITE_UINT32(&i, 0);
|
||||
g_lingo->code1(i);
|
||||
g_lingo->codeConst(0);
|
||||
g_lingo->code1(g_lingo->c_beep); ;}
|
||||
break;
|
||||
|
||||
case 93:
|
||||
#line 424 "engines/director/lingo/lingo-gr.y"
|
||||
#line 414 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->code1(g_lingo->c_closeResFile); ;}
|
||||
break;
|
||||
|
||||
case 94:
|
||||
#line 425 "engines/director/lingo/lingo-gr.y"
|
||||
#line 415 "engines/director/lingo/lingo-gr.y"
|
||||
{
|
||||
g_lingo->code1(g_lingo->c_constpush);
|
||||
inst i = 0;
|
||||
WRITE_UINT32(&i, 0);
|
||||
g_lingo->code1(i);
|
||||
g_lingo->codeConst(0);
|
||||
g_lingo->code1(g_lingo->c_closeResFile); ;}
|
||||
break;
|
||||
|
||||
case 95:
|
||||
#line 431 "engines/director/lingo/lingo-gr.y"
|
||||
#line 418 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->code1(g_lingo->c_closeXlib); ;}
|
||||
break;
|
||||
|
||||
case 96:
|
||||
#line 432 "engines/director/lingo/lingo-gr.y"
|
||||
#line 419 "engines/director/lingo/lingo-gr.y"
|
||||
{
|
||||
g_lingo->code1(g_lingo->c_constpush);
|
||||
inst i = 0;
|
||||
WRITE_UINT32(&i, 0);
|
||||
g_lingo->code1(i);
|
||||
g_lingo->codeConst(0);
|
||||
g_lingo->code1(g_lingo->c_closeXlib); ;}
|
||||
break;
|
||||
|
||||
case 97:
|
||||
#line 440 "engines/director/lingo/lingo-gr.y"
|
||||
#line 424 "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 98:
|
||||
#line 441 "engines/director/lingo/lingo-gr.y"
|
||||
#line 425 "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 99:
|
||||
#line 452 "engines/director/lingo/lingo-gr.y"
|
||||
#line 436 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->code1(g_lingo->c_gotoloop); ;}
|
||||
break;
|
||||
|
||||
case 100:
|
||||
#line 453 "engines/director/lingo/lingo-gr.y"
|
||||
#line 437 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->code1(g_lingo->c_gotonext); ;}
|
||||
break;
|
||||
|
||||
case 101:
|
||||
#line 454 "engines/director/lingo/lingo-gr.y"
|
||||
#line 438 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->code1(g_lingo->c_gotoprevious); ;}
|
||||
break;
|
||||
|
||||
case 102:
|
||||
#line 455 "engines/director/lingo/lingo-gr.y"
|
||||
#line 439 "engines/director/lingo/lingo-gr.y"
|
||||
{
|
||||
g_lingo->code1(g_lingo->c_goto);
|
||||
g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str());
|
||||
@@ -2414,7 +2398,7 @@ yyreduce:
|
||||
break;
|
||||
|
||||
case 103:
|
||||
#line 460 "engines/director/lingo/lingo-gr.y"
|
||||
#line 444 "engines/director/lingo/lingo-gr.y"
|
||||
{
|
||||
g_lingo->code1(g_lingo->c_goto);
|
||||
g_lingo->codeString((yyvsp[(2) - (3)].s)->c_str());
|
||||
@@ -2424,7 +2408,7 @@ yyreduce:
|
||||
break;
|
||||
|
||||
case 104:
|
||||
#line 466 "engines/director/lingo/lingo-gr.y"
|
||||
#line 450 "engines/director/lingo/lingo-gr.y"
|
||||
{
|
||||
g_lingo->code1(g_lingo->c_goto);
|
||||
g_lingo->codeString("");
|
||||
@@ -2433,102 +2417,102 @@ yyreduce:
|
||||
break;
|
||||
|
||||
case 105:
|
||||
#line 473 "engines/director/lingo/lingo-gr.y"
|
||||
#line 457 "engines/director/lingo/lingo-gr.y"
|
||||
{ (yyval.s) = (yyvsp[(3) - (3)].s); ;}
|
||||
break;
|
||||
|
||||
case 106:
|
||||
#line 474 "engines/director/lingo/lingo-gr.y"
|
||||
#line 458 "engines/director/lingo/lingo-gr.y"
|
||||
{ (yyval.s) = (yyvsp[(2) - (2)].s); ;}
|
||||
break;
|
||||
|
||||
case 107:
|
||||
#line 475 "engines/director/lingo/lingo-gr.y"
|
||||
#line 459 "engines/director/lingo/lingo-gr.y"
|
||||
{ (yyval.s) = (yyvsp[(2) - (2)].s); ;}
|
||||
break;
|
||||
|
||||
case 108:
|
||||
#line 476 "engines/director/lingo/lingo-gr.y"
|
||||
#line 460 "engines/director/lingo/lingo-gr.y"
|
||||
{ (yyval.s) = (yyvsp[(1) - (1)].s); ;}
|
||||
break;
|
||||
|
||||
case 109:
|
||||
#line 479 "engines/director/lingo/lingo-gr.y"
|
||||
#line 463 "engines/director/lingo/lingo-gr.y"
|
||||
{ (yyval.s) = (yyvsp[(3) - (3)].s); ;}
|
||||
break;
|
||||
|
||||
case 110:
|
||||
#line 480 "engines/director/lingo/lingo-gr.y"
|
||||
#line 464 "engines/director/lingo/lingo-gr.y"
|
||||
{ (yyval.s) = (yyvsp[(2) - (2)].s); ;}
|
||||
break;
|
||||
|
||||
case 111:
|
||||
#line 481 "engines/director/lingo/lingo-gr.y"
|
||||
#line 465 "engines/director/lingo/lingo-gr.y"
|
||||
{ (yyval.s) = (yyvsp[(3) - (3)].s); ;}
|
||||
break;
|
||||
|
||||
case 112:
|
||||
#line 509 "engines/director/lingo/lingo-gr.y"
|
||||
#line 493 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->_indef = true; g_lingo->_currentFactory.clear(); ;}
|
||||
break;
|
||||
|
||||
case 113:
|
||||
#line 510 "engines/director/lingo/lingo-gr.y"
|
||||
#line 494 "engines/director/lingo/lingo-gr.y"
|
||||
{
|
||||
g_lingo->code2(g_lingo->c_constpush, (inst)0); // Push fake value on stack
|
||||
g_lingo->codeConst(0); // Push fake value on stack
|
||||
g_lingo->code1(g_lingo->c_procret);
|
||||
g_lingo->define(*(yyvsp[(2) - (8)].s), (yyvsp[(4) - (8)].code), (yyvsp[(5) - (8)].narg));
|
||||
g_lingo->_indef = false; ;}
|
||||
break;
|
||||
|
||||
case 114:
|
||||
#line 515 "engines/director/lingo/lingo-gr.y"
|
||||
#line 499 "engines/director/lingo/lingo-gr.y"
|
||||
{
|
||||
g_lingo->codeFactory(*(yyvsp[(2) - (2)].s));
|
||||
;}
|
||||
break;
|
||||
|
||||
case 115:
|
||||
#line 518 "engines/director/lingo/lingo-gr.y"
|
||||
#line 502 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->_indef = true; ;}
|
||||
break;
|
||||
|
||||
case 116:
|
||||
#line 519 "engines/director/lingo/lingo-gr.y"
|
||||
#line 503 "engines/director/lingo/lingo-gr.y"
|
||||
{
|
||||
g_lingo->code2(g_lingo->c_constpush, (inst)0); // Push fake value on stack
|
||||
g_lingo->codeConst(0); // Push fake value on stack
|
||||
g_lingo->code1(g_lingo->c_procret);
|
||||
g_lingo->define(*(yyvsp[(2) - (8)].s), (yyvsp[(4) - (8)].code), (yyvsp[(5) - (8)].narg), &g_lingo->_currentFactory);
|
||||
g_lingo->_indef = false; ;}
|
||||
break;
|
||||
|
||||
case 117:
|
||||
#line 524 "engines/director/lingo/lingo-gr.y"
|
||||
#line 508 "engines/director/lingo/lingo-gr.y"
|
||||
{ (yyval.narg) = 0; ;}
|
||||
break;
|
||||
|
||||
case 118:
|
||||
#line 525 "engines/director/lingo/lingo-gr.y"
|
||||
#line 509 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->codeArg((yyvsp[(1) - (1)].s)); (yyval.narg) = 1; ;}
|
||||
break;
|
||||
|
||||
case 119:
|
||||
#line 526 "engines/director/lingo/lingo-gr.y"
|
||||
#line 510 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->codeArg((yyvsp[(3) - (3)].s)); (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
|
||||
break;
|
||||
|
||||
case 120:
|
||||
#line 527 "engines/director/lingo/lingo-gr.y"
|
||||
#line 511 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->codeArg((yyvsp[(4) - (4)].s)); (yyval.narg) = (yyvsp[(1) - (4)].narg) + 1; ;}
|
||||
break;
|
||||
|
||||
case 121:
|
||||
#line 529 "engines/director/lingo/lingo-gr.y"
|
||||
#line 513 "engines/director/lingo/lingo-gr.y"
|
||||
{ g_lingo->codeArgStore(); ;}
|
||||
break;
|
||||
|
||||
case 122:
|
||||
#line 533 "engines/director/lingo/lingo-gr.y"
|
||||
#line 517 "engines/director/lingo/lingo-gr.y"
|
||||
{
|
||||
g_lingo->code1(g_lingo->c_call);
|
||||
g_lingo->codeString((yyvsp[(1) - (3)].s)->c_str());
|
||||
@@ -2538,23 +2522,23 @@ yyreduce:
|
||||
break;
|
||||
|
||||
case 123:
|
||||
#line 541 "engines/director/lingo/lingo-gr.y"
|
||||
#line 525 "engines/director/lingo/lingo-gr.y"
|
||||
{ (yyval.narg) = 0; ;}
|
||||
break;
|
||||
|
||||
case 124:
|
||||
#line 542 "engines/director/lingo/lingo-gr.y"
|
||||
#line 526 "engines/director/lingo/lingo-gr.y"
|
||||
{ (yyval.narg) = 1; ;}
|
||||
break;
|
||||
|
||||
case 125:
|
||||
#line 543 "engines/director/lingo/lingo-gr.y"
|
||||
#line 527 "engines/director/lingo/lingo-gr.y"
|
||||
{ (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
|
||||
break;
|
||||
|
||||
|
||||
/* Line 1267 of yacc.c. */
|
||||
#line 2558 "engines/director/lingo/lingo-gr.cpp"
|
||||
#line 2542 "engines/director/lingo/lingo-gr.cpp"
|
||||
default: break;
|
||||
}
|
||||
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
|
||||
@@ -2768,6 +2752,6 @@ yyreturn:
|
||||
}
|
||||
|
||||
|
||||
#line 546 "engines/director/lingo/lingo-gr.y"
|
||||
#line 530 "engines/director/lingo/lingo-gr.y"
|
||||
|
||||
|
||||
|
||||
@@ -132,7 +132,7 @@ asgn: tPUT expr tINTO ID {
|
||||
$$ = $4;
|
||||
delete $2; }
|
||||
| tSET vTHEENTITY '=' expr {
|
||||
g_lingo->code2(g_lingo->c_constpush, 0); // Put dummy id
|
||||
g_lingo->codeConst(0); // Put dummy id
|
||||
g_lingo->code1(g_lingo->c_theentityassign);
|
||||
inst e = 0, f = 0;
|
||||
WRITE_UINT32(&e, $2[0]);
|
||||
@@ -154,7 +154,7 @@ asgn: tPUT expr tINTO ID {
|
||||
$$ = $4;
|
||||
delete $2; }
|
||||
| tSET vTHEENTITY tTO expr {
|
||||
g_lingo->code2(g_lingo->c_constpush, 0); // Put dummy id
|
||||
g_lingo->codeConst(0); // Put dummy id
|
||||
g_lingo->code1(g_lingo->c_theentityassign);
|
||||
inst e = 0, f = 0;
|
||||
WRITE_UINT32(&e, $2[0]);
|
||||
@@ -342,11 +342,7 @@ stmtlist: /* nothing */ { $$ = g_lingo->_currentScript->size(); }
|
||||
| stmtlist stmt
|
||||
;
|
||||
|
||||
expr: vINT {
|
||||
$$ = g_lingo->code1(g_lingo->c_constpush);
|
||||
inst i = 0;
|
||||
WRITE_UINT32(&i, $1);
|
||||
g_lingo->code1(i); }
|
||||
expr: vINT { $$ = g_lingo->codeConst($1); }
|
||||
| vFLOAT {
|
||||
$$ = g_lingo->code1(g_lingo->c_fconstpush);
|
||||
g_lingo->codeFloat($1); }
|
||||
@@ -355,7 +351,7 @@ expr: vINT {
|
||||
g_lingo->codeString($1->c_str()); }
|
||||
| vBLTINNOARGS {
|
||||
$$ = g_lingo->code1(g_lingo->_handlers[*$1]->u.func);
|
||||
$$ = g_lingo->code2(g_lingo->c_constpush, 0); // Put dummy value
|
||||
g_lingo->codeConst(0); // Put dummy value
|
||||
delete $1; }
|
||||
| ID '(' arglist ')' {
|
||||
$$ = g_lingo->codeFunc($1, $3);
|
||||
@@ -365,7 +361,7 @@ expr: vINT {
|
||||
g_lingo->codeString($1->c_str());
|
||||
delete $1; }
|
||||
| vTHEENTITY {
|
||||
$$ = g_lingo->code2(g_lingo->c_constpush, 0); // Put dummy id
|
||||
$$ = g_lingo->codeConst(0); // Put dummy id
|
||||
g_lingo->code1(g_lingo->c_theentitypush);
|
||||
inst e = 0, f = 0;
|
||||
WRITE_UINT32(&e, $1[0]);
|
||||
@@ -405,35 +401,23 @@ func: tMCI vSTRING { g_lingo->code1(g_lingo->c_mci); g_lingo->codeString($2->c
|
||||
| tMCIWAIT ID { g_lingo->code1(g_lingo->c_mciwait); g_lingo->codeString($2->c_str()); delete $2; }
|
||||
| tPUT expr { g_lingo->code1(g_lingo->c_printtop); }
|
||||
| gotofunc
|
||||
| tEXIT { g_lingo->code2(g_lingo->c_constpush, (inst)0); // Push fake value on stack
|
||||
| tEXIT { g_lingo->codeConst(0); // Push fake value on stack
|
||||
g_lingo->code1(g_lingo->c_procret); }
|
||||
| tGLOBAL globallist
|
||||
| tALERT expr { g_lingo->code1(g_lingo->c_alert); }
|
||||
| tBEEP vINT {
|
||||
g_lingo->code1(g_lingo->c_constpush);
|
||||
inst i = 0;
|
||||
WRITE_UINT32(&i, $2);
|
||||
g_lingo->code1(i);
|
||||
g_lingo->codeConst($2);
|
||||
g_lingo->code1(g_lingo->c_beep); }
|
||||
| tBEEP {
|
||||
g_lingo->code1(g_lingo->c_constpush);
|
||||
inst i = 0;
|
||||
WRITE_UINT32(&i, 0);
|
||||
g_lingo->code1(i);
|
||||
g_lingo->codeConst(0);
|
||||
g_lingo->code1(g_lingo->c_beep); }
|
||||
| tCLOSERESFILE expr { g_lingo->code1(g_lingo->c_closeResFile); }
|
||||
| tCLOSERESFILE {
|
||||
g_lingo->code1(g_lingo->c_constpush);
|
||||
inst i = 0;
|
||||
WRITE_UINT32(&i, 0);
|
||||
g_lingo->code1(i);
|
||||
g_lingo->codeConst(0);
|
||||
g_lingo->code1(g_lingo->c_closeResFile); }
|
||||
| tCLOSEXLIB expr { g_lingo->code1(g_lingo->c_closeXlib); }
|
||||
| tCLOSEXLIB {
|
||||
g_lingo->code1(g_lingo->c_constpush);
|
||||
inst i = 0;
|
||||
WRITE_UINT32(&i, 0);
|
||||
g_lingo->code1(i);
|
||||
g_lingo->codeConst(0);
|
||||
g_lingo->code1(g_lingo->c_closeXlib); }
|
||||
;
|
||||
|
||||
@@ -508,7 +492,7 @@ gotomovie: tOF tMOVIE vSTRING { $$ = $3; }
|
||||
// on keyword
|
||||
defn: tMACRO ID { g_lingo->_indef = true; g_lingo->_currentFactory.clear(); }
|
||||
begin argdef nl argstore stmtlist {
|
||||
g_lingo->code2(g_lingo->c_constpush, (inst)0); // Push fake value on stack
|
||||
g_lingo->codeConst(0); // Push fake value on stack
|
||||
g_lingo->code1(g_lingo->c_procret);
|
||||
g_lingo->define(*$2, $4, $5);
|
||||
g_lingo->_indef = false; }
|
||||
@@ -517,7 +501,7 @@ defn: tMACRO ID { g_lingo->_indef = true; g_lingo->_currentFactory.clear(); }
|
||||
}
|
||||
| tMETHOD ID { g_lingo->_indef = true; }
|
||||
begin argdef nl argstore stmtlist {
|
||||
g_lingo->code2(g_lingo->c_constpush, (inst)0); // Push fake value on stack
|
||||
g_lingo->codeConst(0); // Push fake value on stack
|
||||
g_lingo->code1(g_lingo->c_procret);
|
||||
g_lingo->define(*$2, $4, $5, &g_lingo->_currentFactory);
|
||||
g_lingo->_indef = false; } ;
|
||||
|
||||
@@ -173,6 +173,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 codeString(const char *s);
|
||||
void codeLabel(int label);
|
||||
int codeConst(int val);
|
||||
|
||||
int calcStringAlignment(const char *s) {
|
||||
return calcCodeAlignment(strlen(s) + 1);
|
||||
|
||||
Reference in New Issue
Block a user