diff options
Diffstat (limited to 'engines/director/lingo/lingo-gr.y')
-rw-r--r-- | engines/director/lingo/lingo-gr.y | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y index 1703cfbf23..53e313dae8 100644 --- a/engines/director/lingo/lingo-gr.y +++ b/engines/director/lingo/lingo-gr.y @@ -104,7 +104,7 @@ void checkEnd(Common::String *token, const char *expect, bool required) { %token tON tME %type<code> asgn begin elseif elsestmtoneliner end expr if when repeatwhile -%type<code> repeatwith stmtlist tell reference +%type<code> repeatwith stmtlist tell reference simpleexpr %type<narg> argdef arglist nonemptyarglist %type<s> on @@ -190,6 +190,12 @@ asgn: tPUT expr tINTO ID { g_lingo->codeInt($2[0]); g_lingo->codeInt($2[1]); $$ = $5; } + | tSET THEENTITYWITHID simpleexpr tEQ expr { + g_lingo->code1(g_lingo->c_swap); + g_lingo->code1(g_lingo->c_theentityassign); + g_lingo->codeInt($2[0]); + g_lingo->codeInt($2[1]); + $$ = $5; } ; stmtoneliner: macro @@ -418,7 +424,7 @@ tell: tTELL { $$ = g_lingo->code1(g_lingo->c_tellcode); g_lingo->code1(STOP); } -expr: INT { +simpleexpr: INT { $$ = g_lingo->code1(g_lingo->c_intpush); g_lingo->codeInt($1); } | FLOAT { @@ -430,6 +436,13 @@ expr: INT { | STRING { $$ = g_lingo->code1(g_lingo->c_stringpush); g_lingo->codeString($1->c_str()); } + | ID { + $$ = g_lingo->code1(g_lingo->c_eval); + g_lingo->codeString($1->c_str()); + delete $1; } + ; + +expr: simpleexpr { $$ = $1; } | reference | FBLTINNOARGS { g_lingo->codeFunc($1, 0); @@ -442,10 +455,6 @@ expr: INT { | ID '(' arglist ')' { $$ = g_lingo->codeFunc($1, $3); delete $1; } - | ID { - $$ = g_lingo->code1(g_lingo->c_eval); - g_lingo->codeString($1->c_str()); - delete $1; } | THEENTITY { $$ = g_lingo->code1(g_lingo->c_intpush); g_lingo->codeInt(0); // Put dummy id |