aboutsummaryrefslogtreecommitdiff
path: root/engines/director/lingo/lingo-gr.y
diff options
context:
space:
mode:
Diffstat (limited to 'engines/director/lingo/lingo-gr.y')
-rw-r--r--engines/director/lingo/lingo-gr.y21
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