[Scummvm-git-logs] scummvm master -> 5798907e824f9c72573d46e5322fe8befe8effc5

sev- noreply at scummvm.org
Fri Apr 10 10:06:01 UTC 2026


This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .

Summary:
e3bf752288 BACKENDS: PSP2: Properly designate system-wide include
617d5cf023 DIRECTOR: LINGO: Regenerate the grammar file
5798907e82 DIRECTOR: LINGO: Fix parsing floats in lexer, added tests


Commit: e3bf7522889fcf5aab037e49c55898e07ac02969
    https://github.com/scummvm/scummvm/commit/e3bf7522889fcf5aab037e49c55898e07ac02969
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2026-04-10T12:05:48+02:00

Commit Message:
BACKENDS: PSP2: Properly designate system-wide include

Changed paths:
    backends/events/psp2sdl/psp2sdl-events.cpp


diff --git a/backends/events/psp2sdl/psp2sdl-events.cpp b/backends/events/psp2sdl/psp2sdl-events.cpp
index 1d039f364b5..91c29a7c821 100644
--- a/backends/events/psp2sdl/psp2sdl-events.cpp
+++ b/backends/events/psp2sdl/psp2sdl-events.cpp
@@ -34,7 +34,7 @@
 #include "common/events.h"
 #include "common/config-manager.h"
 
-#include "math.h"
+#include <math.h>
 
 void PSP2EventSource::preprocessEvents(SDL_Event *event) {
 


Commit: 617d5cf023734499db91e081aa1039c8391610de
    https://github.com/scummvm/scummvm/commit/617d5cf023734499db91e081aa1039c8391610de
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2026-04-10T12:05:48+02:00

Commit Message:
DIRECTOR: LINGO: Regenerate the grammar file

Following added comment in f2bad1d9b8493e4d3855d4575be8ad4fe7c7bfef
No functional changes

Changed paths:
    engines/director/lingo/lingo-gr.cpp


diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 29bb3c2de12..dc0d6653a89 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -727,40 +727,40 @@ static const yytype_int8 yytranslate[] =
 /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   208,   208,   210,   216,   223,   224,   225,   226,   227,
-     228,   257,   261,   263,   265,   266,   269,   275,   282,   283,
-     284,   289,   293,   297,   298,   299,   306,   307,   308,   309,
-     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
-     320,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     330,   331,   332,   333,   334,   335,   336,   337,   338,   339,
-     340,   341,   342,   343,   344,   345,   346,   347,   348,   349,
-     350,   351,   352,   353,   354,   357,   358,   359,   360,   361,
-     362,   363,   364,   365,   366,   367,   368,   369,   370,   371,
-     372,   373,   374,   375,   376,   379,   380,   381,   384,   388,
-     398,   399,   402,   403,   404,   405,   406,   407,   410,   411,
-     412,   415,   416,   417,   418,   419,   420,   421,   422,   427,
-     428,   429,   430,   431,   432,   433,   434,   437,   440,   445,
-     449,   455,   460,   463,   468,   472,   478,   485,   485,   491,
-     496,   502,   508,   514,   522,   523,   524,   525,   528,   528,
-     530,   531,   532,   535,   539,   543,   549,   553,   557,   561,
-     568,   570,   572,   574,   576,   580,   584,   588,   590,   591,
-     595,   601,   608,   609,   612,   613,   617,   623,   630,   631,
-     637,   638,   639,   640,   641,   642,   643,   644,   650,   655,
-     656,   657,   658,   659,   660,   663,   665,   666,   669,   670,
-     673,   674,   675,   676,   677,   679,   681,   683,   685,   687,
-     689,   691,   693,   696,   697,   698,   699,   702,   703,   706,
-     711,   714,   719,   725,   726,   727,   728,   729,   732,   733,
-     734,   735,   736,   739,   741,   742,   743,   744,   745,   746,
-     747,   748,   749,   750,   754,   755,   756,   757,   758,   759,
-     760,   761,   764,   764,   766,   767,   770,   771,   772,   773,
-     774,   777,   778,   779,   785,   789,   792,   797,   798,   799,
-     800,   801,   804,   805,   808,   809,   813,   814,   815,   816,
-     817,   818,   819,   820,   821,   822,   823,   824,   825,   826,
-     827,   828,   829,   830,   831,   838,   839,   840,   841,   842,
-     843,   844,   845,   846,   847,   848,   849,   850,   851,   852,
-     853,   854,   855,   856,   859,   860,   861,   862,   863,   864,
-     865,   866,   867,   868,   869,   870,   871,   872,   873,   874,
-     875,   876,   879,   880,   883,   884,   887,   891
+       0,   211,   211,   213,   219,   226,   227,   228,   229,   230,
+     231,   260,   264,   266,   268,   269,   272,   278,   285,   286,
+     287,   292,   296,   300,   301,   302,   309,   310,   311,   312,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
+     333,   334,   335,   336,   337,   338,   339,   340,   341,   342,
+     343,   344,   345,   346,   347,   348,   349,   350,   351,   352,
+     353,   354,   355,   356,   357,   360,   361,   362,   363,   364,
+     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
+     375,   376,   377,   378,   379,   382,   383,   384,   387,   391,
+     401,   402,   405,   406,   407,   408,   409,   410,   413,   414,
+     415,   418,   419,   420,   421,   422,   423,   424,   425,   430,
+     431,   432,   433,   434,   435,   436,   437,   440,   443,   448,
+     452,   458,   463,   466,   471,   475,   481,   488,   488,   494,
+     499,   505,   511,   517,   525,   526,   527,   528,   531,   531,
+     533,   534,   535,   538,   542,   546,   552,   556,   560,   564,
+     571,   573,   575,   577,   579,   583,   587,   591,   593,   594,
+     598,   604,   611,   612,   615,   616,   620,   626,   633,   634,
+     640,   641,   642,   643,   644,   645,   646,   647,   653,   658,
+     659,   660,   661,   662,   663,   666,   668,   669,   672,   673,
+     676,   677,   678,   679,   680,   682,   684,   686,   688,   690,
+     692,   694,   696,   699,   700,   701,   702,   705,   706,   709,
+     714,   717,   722,   728,   729,   730,   731,   732,   735,   736,
+     737,   738,   739,   742,   744,   745,   746,   747,   748,   749,
+     750,   751,   752,   753,   757,   758,   759,   760,   761,   762,
+     763,   764,   767,   767,   769,   770,   773,   774,   775,   776,
+     777,   780,   781,   782,   788,   792,   795,   800,   801,   802,
+     803,   804,   807,   808,   811,   812,   816,   817,   818,   819,
+     820,   821,   822,   823,   824,   825,   826,   827,   828,   829,
+     830,   831,   832,   833,   834,   841,   842,   843,   844,   845,
+     846,   847,   848,   849,   850,   851,   852,   853,   854,   855,
+     856,   857,   858,   859,   862,   863,   864,   865,   866,   867,
+     868,   869,   870,   871,   872,   873,   874,   875,   876,   877,
+     878,   879,   882,   883,   886,   887,   890,   894
 };
 #endif
 
@@ -2354,283 +2354,283 @@ yydestruct (const char *yymsg,
   switch (yykind)
     {
     case YYSYMBOL_tVARID: /* tVARID  */
-#line 201 "engines/director/lingo/lingo-gr.y"
+#line 204 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
 #line 2360 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSTRING: /* tSTRING  */
-#line 201 "engines/director/lingo/lingo-gr.y"
+#line 204 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
 #line 2366 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tSYMBOL: /* tSYMBOL  */
-#line 201 "engines/director/lingo/lingo-gr.y"
+#line 204 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
 #line 2372 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tENDCLAUSE: /* tENDCLAUSE  */
-#line 201 "engines/director/lingo/lingo-gr.y"
+#line 204 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
 #line 2378 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_script: /* script  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2384 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_scriptpart: /* scriptpart  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2390 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_macro: /* macro  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2396 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_factory: /* factory  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2402 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_method: /* method  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2408 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_methodlistline: /* methodlistline  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2414 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_handler: /* handler  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2420 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_CMDID: /* CMDID  */
-#line 201 "engines/director/lingo/lingo-gr.y"
+#line 204 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
 #line 2426 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
-#line 201 "engines/director/lingo/lingo-gr.y"
+#line 204 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
 #line 2432 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_stmt: /* stmt  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2438 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_stmt_insideif: /* stmt_insideif  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2444 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_stmtoneliner: /* stmtoneliner  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2450 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_proc: /* proc  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2456 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_asgn: /* asgn  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2462 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_definevars: /* definevars  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2468 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ifstmt: /* ifstmt  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2474 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ifelsestmt: /* ifelsestmt  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2480 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_loop: /* loop  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2486 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tell: /* tell  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2492 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_when: /* when  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2498 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_stmtlistline: /* stmtlistline  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2504 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_stmtlistline_insideif: /* stmtlistline_insideif  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2510 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_simpleexpr_nounarymath: /* simpleexpr_nounarymath  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2516 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_var: /* var  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2522 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_varorchunk: /* varorchunk  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2528 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_varorthe: /* varorthe  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2534 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_chunk: /* chunk  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2540 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_object: /* object  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2546 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_the: /* the  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2552 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_theobj: /* theobj  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2558 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_menu: /* menu  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2564 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_thedatetime: /* thedatetime  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2570 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_thenumberof: /* thenumberof  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2576 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_writablethe: /* writablethe  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2582 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_writabletheobj: /* writabletheobj  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2588 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_list: /* list  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2594 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_proppair: /* proppair  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2600 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_unarymath: /* unarymath  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2606 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_simpleexpr: /* simpleexpr  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2612 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_expr: /* expr  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2618 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_expr_nounarymath: /* expr_nounarymath  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2624 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_expr_noeq: /* expr_noeq  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2630 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_sprite: /* sprite  */
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).node); }
 #line 2636 "engines/director/lingo/lingo-gr.cpp"
         break;
@@ -2900,13 +2900,13 @@ yyreduce:
   switch (yyn)
     {
   case 2: /* script: scriptpartlist  */
-#line 208 "engines/director/lingo/lingo-gr.y"
+#line 211 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->_compiler->_assemblyAST = Common::SharedPtr<Node>(new ScriptNode((yyvsp[0].nodelist))); (yyval.node) = nullptr; }
 #line 2906 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 3: /* scriptpartlist: scriptpart  */
-#line 210 "engines/director/lingo/lingo-gr.y"
+#line 213 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
@@ -2917,7 +2917,7 @@ yyreduce:
     break;
 
   case 4: /* scriptpartlist: scriptpartlist scriptpart  */
-#line 216 "engines/director/lingo/lingo-gr.y"
+#line 219 "engines/director/lingo/lingo-gr.y"
                                                         {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
@@ -2927,43 +2927,43 @@ yyreduce:
     break;
 
   case 5: /* scriptpart: '\n'  */
-#line 223 "engines/director/lingo/lingo-gr.y"
+#line 226 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
 #line 2933 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* scriptpart: tENDCLAUSE endargdef '\n'  */
-#line 228 "engines/director/lingo/lingo-gr.y"
+#line 231 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; delete (yyvsp[-2].s); }
 #line 2939 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* macro: tMACRO ID idlist '\n' stmtlist  */
-#line 257 "engines/director/lingo/lingo-gr.y"
+#line 260 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
 #line 2945 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* factory: tFACTORY ID '\n' methodlist  */
-#line 261 "engines/director/lingo/lingo-gr.y"
+#line 264 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FactoryNode((yyvsp[-2].s), (yyvsp[0].nodelist)); }
 #line 2951 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* method: tMETHOD ID idlist '\n' stmtlist  */
-#line 263 "engines/director/lingo/lingo-gr.y"
+#line 266 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
 #line 2957 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 14: /* methodlist: %empty  */
-#line 265 "engines/director/lingo/lingo-gr.y"
+#line 268 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
 #line 2963 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* nonemptymethodlist: methodlistline  */
-#line 269 "engines/director/lingo/lingo-gr.y"
+#line 272 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
@@ -2974,7 +2974,7 @@ yyreduce:
     break;
 
   case 17: /* nonemptymethodlist: nonemptymethodlist methodlistline  */
-#line 275 "engines/director/lingo/lingo-gr.y"
+#line 278 "engines/director/lingo/lingo-gr.y"
                                                         {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
@@ -2984,19 +2984,19 @@ yyreduce:
     break;
 
   case 18: /* methodlistline: '\n'  */
-#line 282 "engines/director/lingo/lingo-gr.y"
+#line 285 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
 #line 2990 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* methodlistline: tENDCLAUSE endargdef '\n'  */
-#line 284 "engines/director/lingo/lingo-gr.y"
+#line 287 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; delete (yyvsp[-2].s); }
 #line 2996 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 21: /* handler: tON ID idlist '\n' stmtlist tENDCLAUSE endargdef '\n'  */
-#line 289 "engines/director/lingo/lingo-gr.y"
+#line 292 "engines/director/lingo/lingo-gr.y"
                                                                {	// D3
 		(yyval.node) = new HandlerNode((yyvsp[-6].s), (yyvsp[-5].idlist), (yyvsp[-3].nodelist));
 		checkEnd((yyvsp[-2].s), (yyvsp[-6].s), false);
@@ -3005,434 +3005,434 @@ yyreduce:
     break;
 
   case 22: /* handler: tON ID idlist '\n' stmtlist  */
-#line 293 "engines/director/lingo/lingo-gr.y"
+#line 296 "engines/director/lingo/lingo-gr.y"
                                       {	// D4. No 'end' clause
 		(yyval.node) = new HandlerNode((yyvsp[-3].s), (yyvsp[-2].idlist), (yyvsp[0].nodelist)); }
 #line 3012 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 24: /* endargdef: ID  */
-#line 298 "engines/director/lingo/lingo-gr.y"
+#line 301 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
 #line 3018 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* endargdef: endargdef ',' ID  */
-#line 299 "engines/director/lingo/lingo-gr.y"
+#line 302 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
 #line 3024 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* CMDID: tABBREVIATED  */
-#line 307 "engines/director/lingo/lingo-gr.y"
+#line 310 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("abbreviated"); }
 #line 3030 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* CMDID: tABBREV  */
-#line 308 "engines/director/lingo/lingo-gr.y"
+#line 311 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbrev"); }
 #line 3036 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29: /* CMDID: tABBR  */
-#line 309 "engines/director/lingo/lingo-gr.y"
+#line 312 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("abbr"); }
 #line 3042 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30: /* CMDID: tAFTER  */
-#line 310 "engines/director/lingo/lingo-gr.y"
+#line 313 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("after"); }
 #line 3048 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31: /* CMDID: tBEFORE  */
-#line 311 "engines/director/lingo/lingo-gr.y"
+#line 314 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("before"); }
 #line 3054 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32: /* CMDID: tCAST  */
-#line 312 "engines/director/lingo/lingo-gr.y"
+#line 315 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
 #line 3060 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* CMDID: tCASTLIB  */
-#line 313 "engines/director/lingo/lingo-gr.y"
+#line 316 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("castLib"); }
 #line 3066 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* CMDID: tCHAR  */
-#line 314 "engines/director/lingo/lingo-gr.y"
+#line 317 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("char"); }
 #line 3072 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35: /* CMDID: tCHARS  */
-#line 315 "engines/director/lingo/lingo-gr.y"
+#line 318 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("chars"); }
 #line 3078 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36: /* CMDID: tDATE  */
-#line 316 "engines/director/lingo/lingo-gr.y"
+#line 319 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("date"); }
 #line 3084 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37: /* CMDID: tDELETE  */
-#line 317 "engines/director/lingo/lingo-gr.y"
+#line 320 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("delete"); }
 #line 3090 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* CMDID: tDOWN  */
-#line 318 "engines/director/lingo/lingo-gr.y"
+#line 321 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("down"); }
 #line 3096 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39: /* CMDID: tFIELD  */
-#line 319 "engines/director/lingo/lingo-gr.y"
+#line 322 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
 #line 3102 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40: /* CMDID: tFRAME  */
-#line 320 "engines/director/lingo/lingo-gr.y"
+#line 323 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("frame"); }
 #line 3108 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41: /* CMDID: tHILITE  */
-#line 321 "engines/director/lingo/lingo-gr.y"
+#line 324 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("hilite"); }
 #line 3114 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* CMDID: tIN  */
-#line 322 "engines/director/lingo/lingo-gr.y"
+#line 325 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("in"); }
 #line 3120 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* CMDID: tINTERSECTS  */
-#line 323 "engines/director/lingo/lingo-gr.y"
+#line 326 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("intersects"); }
 #line 3126 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* CMDID: tINTO  */
-#line 324 "engines/director/lingo/lingo-gr.y"
+#line 327 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("into"); }
 #line 3132 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* CMDID: tITEM  */
-#line 325 "engines/director/lingo/lingo-gr.y"
+#line 328 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("item"); }
 #line 3138 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* CMDID: tITEMS  */
-#line 326 "engines/director/lingo/lingo-gr.y"
+#line 329 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("items"); }
 #line 3144 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* CMDID: tLAST  */
-#line 327 "engines/director/lingo/lingo-gr.y"
+#line 330 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("last"); }
 #line 3150 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48: /* CMDID: tLINE  */
-#line 328 "engines/director/lingo/lingo-gr.y"
+#line 331 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("line"); }
 #line 3156 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49: /* CMDID: tLINES  */
-#line 329 "engines/director/lingo/lingo-gr.y"
+#line 332 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("lines"); }
 #line 3162 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50: /* CMDID: tLONG  */
-#line 330 "engines/director/lingo/lingo-gr.y"
+#line 333 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("long"); }
 #line 3168 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51: /* CMDID: tMEMBER  */
-#line 331 "engines/director/lingo/lingo-gr.y"
+#line 334 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("member"); }
 #line 3174 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52: /* CMDID: tMENU  */
-#line 332 "engines/director/lingo/lingo-gr.y"
+#line 335 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menu"); }
 #line 3180 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 53: /* CMDID: tMENUITEM  */
-#line 333 "engines/director/lingo/lingo-gr.y"
+#line 336 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("menuItem"); }
 #line 3186 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54: /* CMDID: tMENUITEMS  */
-#line 334 "engines/director/lingo/lingo-gr.y"
+#line 337 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("menuItems"); }
 #line 3192 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55: /* CMDID: tMOVIE  */
-#line 335 "engines/director/lingo/lingo-gr.y"
+#line 338 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("movie"); }
 #line 3198 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56: /* CMDID: tNEXT  */
-#line 336 "engines/director/lingo/lingo-gr.y"
+#line 339 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("next"); }
 #line 3204 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57: /* CMDID: tNUMBER  */
-#line 337 "engines/director/lingo/lingo-gr.y"
+#line 340 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("number"); }
 #line 3210 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58: /* CMDID: tOF  */
-#line 338 "engines/director/lingo/lingo-gr.y"
+#line 341 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("of"); }
 #line 3216 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59: /* CMDID: tPREVIOUS  */
-#line 339 "engines/director/lingo/lingo-gr.y"
+#line 342 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("previous"); }
 #line 3222 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60: /* CMDID: tREPEAT  */
-#line 340 "engines/director/lingo/lingo-gr.y"
+#line 343 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("repeat"); }
 #line 3228 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 61: /* CMDID: tSCRIPT  */
-#line 341 "engines/director/lingo/lingo-gr.y"
+#line 344 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
 #line 3234 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 62: /* CMDID: tASSERTERROR  */
-#line 342 "engines/director/lingo/lingo-gr.y"
+#line 345 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("scummvmAssertError"); }
 #line 3240 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 63: /* CMDID: tSHORT  */
-#line 343 "engines/director/lingo/lingo-gr.y"
+#line 346 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("short"); }
 #line 3246 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 64: /* CMDID: tSOUND  */
-#line 344 "engines/director/lingo/lingo-gr.y"
+#line 347 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sound"); }
 #line 3252 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 65: /* CMDID: tSPRITE  */
-#line 345 "engines/director/lingo/lingo-gr.y"
+#line 348 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("sprite"); }
 #line 3258 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 66: /* CMDID: tTHE  */
-#line 346 "engines/director/lingo/lingo-gr.y"
+#line 349 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("the"); }
 #line 3264 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 67: /* CMDID: tTIME  */
-#line 347 "engines/director/lingo/lingo-gr.y"
+#line 350 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("time"); }
 #line 3270 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 68: /* CMDID: tTO  */
-#line 348 "engines/director/lingo/lingo-gr.y"
+#line 351 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("to"); }
 #line 3276 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 69: /* CMDID: tWHILE  */
-#line 349 "engines/director/lingo/lingo-gr.y"
+#line 352 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("while"); }
 #line 3282 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 70: /* CMDID: tWINDOW  */
-#line 350 "engines/director/lingo/lingo-gr.y"
+#line 353 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
 #line 3288 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 71: /* CMDID: tWITH  */
-#line 351 "engines/director/lingo/lingo-gr.y"
+#line 354 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("with"); }
 #line 3294 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 72: /* CMDID: tWITHIN  */
-#line 352 "engines/director/lingo/lingo-gr.y"
+#line 355 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("within"); }
 #line 3300 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 73: /* CMDID: tWORD  */
-#line 353 "engines/director/lingo/lingo-gr.y"
+#line 356 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("word"); }
 #line 3306 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 74: /* CMDID: tWORDS  */
-#line 354 "engines/director/lingo/lingo-gr.y"
+#line 357 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("words"); }
 #line 3312 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 76: /* ID: tELSE  */
-#line 358 "engines/director/lingo/lingo-gr.y"
+#line 361 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("else"); }
 #line 3318 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 77: /* ID: tENDCLAUSE  */
-#line 359 "engines/director/lingo/lingo-gr.y"
+#line 362 "engines/director/lingo/lingo-gr.y"
                         { (yyval.s) = new Common::String("end"); delete (yyvsp[0].s); }
 #line 3324 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 78: /* ID: tEXIT  */
-#line 360 "engines/director/lingo/lingo-gr.y"
+#line 363 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("exit"); }
 #line 3330 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79: /* ID: tFACTORY  */
-#line 361 "engines/director/lingo/lingo-gr.y"
+#line 364 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("factory"); }
 #line 3336 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 80: /* ID: tGLOBAL  */
-#line 362 "engines/director/lingo/lingo-gr.y"
+#line 365 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("global"); }
 #line 3342 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 81: /* ID: tGO  */
-#line 363 "engines/director/lingo/lingo-gr.y"
+#line 366 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("go"); }
 #line 3348 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 82: /* ID: tIF  */
-#line 364 "engines/director/lingo/lingo-gr.y"
+#line 367 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("if"); }
 #line 3354 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 83: /* ID: tINSTANCE  */
-#line 365 "engines/director/lingo/lingo-gr.y"
+#line 368 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("instance"); }
 #line 3360 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 84: /* ID: tMACRO  */
-#line 366 "engines/director/lingo/lingo-gr.y"
+#line 369 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("macro"); }
 #line 3366 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 85: /* ID: tMETHOD  */
-#line 367 "engines/director/lingo/lingo-gr.y"
+#line 370 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("method"); }
 #line 3372 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 86: /* ID: tON  */
-#line 368 "engines/director/lingo/lingo-gr.y"
+#line 371 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("on"); }
 #line 3378 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 87: /* ID: tOPEN  */
-#line 369 "engines/director/lingo/lingo-gr.y"
+#line 372 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("open"); }
 #line 3384 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 88: /* ID: tPLAY  */
-#line 370 "engines/director/lingo/lingo-gr.y"
+#line 373 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("play"); }
 #line 3390 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 89: /* ID: tPROPERTY  */
-#line 371 "engines/director/lingo/lingo-gr.y"
+#line 374 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("property"); }
 #line 3396 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 90: /* ID: tPUT  */
-#line 372 "engines/director/lingo/lingo-gr.y"
+#line 375 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("put"); }
 #line 3402 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 91: /* ID: tRETURN  */
-#line 373 "engines/director/lingo/lingo-gr.y"
+#line 376 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("return"); }
 #line 3408 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 92: /* ID: tSET  */
-#line 374 "engines/director/lingo/lingo-gr.y"
+#line 377 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("set"); }
 #line 3414 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 93: /* ID: tTELL  */
-#line 375 "engines/director/lingo/lingo-gr.y"
+#line 378 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("tell"); }
 #line 3420 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 94: /* ID: tTHEN  */
-#line 376 "engines/director/lingo/lingo-gr.y"
+#line 379 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("then"); }
 #line 3426 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 95: /* idlist: %empty  */
-#line 379 "engines/director/lingo/lingo-gr.y"
+#line 382 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.idlist) = new IDList; }
 #line 3432 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 98: /* nonemptyidlist: ID  */
-#line 384 "engines/director/lingo/lingo-gr.y"
+#line 387 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		Common::Array<Common::String *> *list = new IDList;
 		list->push_back((yyvsp[0].s));
@@ -3441,7 +3441,7 @@ yyreduce:
     break;
 
   case 99: /* nonemptyidlist: nonemptyidlist ',' ID  */
-#line 388 "engines/director/lingo/lingo-gr.y"
+#line 391 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyvsp[-2].idlist)->push_back((yyvsp[0].s));
 		(yyval.idlist) = (yyvsp[-2].idlist); }
@@ -3449,55 +3449,55 @@ yyreduce:
     break;
 
   case 101: /* stmt: tENDIF '\n'  */
-#line 399 "engines/director/lingo/lingo-gr.y"
+#line 402 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = nullptr; }
 #line 3455 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 111: /* proc: CMDID cmdargs '\n'  */
-#line 415 "engines/director/lingo/lingo-gr.y"
+#line 418 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist), g_lingo->_compiler->_linenumber - 1); }
 #line 3461 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 112: /* proc: tPUT cmdargs '\n'  */
-#line 416 "engines/director/lingo/lingo-gr.y"
+#line 419 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist), g_lingo->_compiler->_linenumber - 1); }
 #line 3467 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 113: /* proc: tGO cmdargs '\n'  */
-#line 417 "engines/director/lingo/lingo-gr.y"
+#line 420 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist), g_lingo->_compiler->_linenumber - 1); }
 #line 3473 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 114: /* proc: tGO frameargs '\n'  */
-#line 418 "engines/director/lingo/lingo-gr.y"
+#line 421 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("go"), (yyvsp[-1].nodelist), g_lingo->_compiler->_linenumber - 1); }
 #line 3479 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 115: /* proc: tPLAY cmdargs '\n'  */
-#line 419 "engines/director/lingo/lingo-gr.y"
+#line 422 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist), g_lingo->_compiler->_linenumber - 1); }
 #line 3485 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 116: /* proc: tPLAY frameargs '\n'  */
-#line 420 "engines/director/lingo/lingo-gr.y"
+#line 423 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("play"), (yyvsp[-1].nodelist), g_lingo->_compiler->_linenumber - 1); }
 #line 3491 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 117: /* proc: tOPEN cmdargs '\n'  */
-#line 421 "engines/director/lingo/lingo-gr.y"
+#line 424 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new CmdNode(new Common::String("open"), (yyvsp[-1].nodelist), g_lingo->_compiler->_linenumber - 1); }
 #line 3497 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 118: /* proc: tOPEN expr tWITH expr '\n'  */
-#line 422 "engines/director/lingo/lingo-gr.y"
+#line 425 "engines/director/lingo/lingo-gr.y"
                                                  {
 		NodeList *args = new NodeList;
 		args->push_back((yyvsp[-3].node));
@@ -3507,55 +3507,55 @@ yyreduce:
     break;
 
   case 119: /* proc: tNEXT tREPEAT '\n'  */
-#line 427 "engines/director/lingo/lingo-gr.y"
+#line 430 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new NextRepeatNode(); }
 #line 3513 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 120: /* proc: tEXIT tREPEAT '\n'  */
-#line 428 "engines/director/lingo/lingo-gr.y"
+#line 431 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new ExitRepeatNode(); }
 #line 3519 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 121: /* proc: tEXIT '\n'  */
-#line 429 "engines/director/lingo/lingo-gr.y"
+#line 432 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new ExitNode(); }
 #line 3525 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 122: /* proc: tRETURN '\n'  */
-#line 430 "engines/director/lingo/lingo-gr.y"
+#line 433 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new ReturnNode(nullptr); }
 #line 3531 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 123: /* proc: tRETURN expr '\n'  */
-#line 431 "engines/director/lingo/lingo-gr.y"
+#line 434 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new ReturnNode((yyvsp[-1].node)); }
 #line 3537 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 124: /* proc: tDELETE chunk '\n'  */
-#line 432 "engines/director/lingo/lingo-gr.y"
+#line 435 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new DeleteNode((yyvsp[-1].node)); }
 #line 3543 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 125: /* proc: tHILITE chunk '\n'  */
-#line 433 "engines/director/lingo/lingo-gr.y"
+#line 436 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new HiliteNode((yyvsp[-1].node)); }
 #line 3549 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 126: /* proc: tASSERTERROR stmtoneliner  */
-#line 434 "engines/director/lingo/lingo-gr.y"
+#line 437 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new AssertErrorNode((yyvsp[0].node)); }
 #line 3555 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 127: /* cmdargs: %empty  */
-#line 437 "engines/director/lingo/lingo-gr.y"
+#line 440 "engines/director/lingo/lingo-gr.y"
                                                                                         {
 		// This matches `cmd`
 		(yyval.nodelist) = new NodeList; }
@@ -3563,7 +3563,7 @@ yyreduce:
     break;
 
   case 128: /* cmdargs: expr trailingcomma  */
-#line 440 "engines/director/lingo/lingo-gr.y"
+#line 443 "engines/director/lingo/lingo-gr.y"
                                                                                         {
 		// This matches `cmd arg` and `cmd(arg)`
 		NodeList *args = new NodeList;
@@ -3573,7 +3573,7 @@ yyreduce:
     break;
 
   case 129: /* cmdargs: expr ',' nonemptyexprlist trailingcomma  */
-#line 445 "engines/director/lingo/lingo-gr.y"
+#line 448 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `cmd arg, ...)
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
@@ -3582,7 +3582,7 @@ yyreduce:
     break;
 
   case 130: /* cmdargs: expr expr_nounarymath trailingcomma  */
-#line 449 "engines/director/lingo/lingo-gr.y"
+#line 452 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd arg arg`
 		NodeList *args = new NodeList;
@@ -3593,7 +3593,7 @@ yyreduce:
     break;
 
   case 131: /* cmdargs: expr expr_nounarymath ',' nonemptyexprlist trailingcomma  */
-#line 455 "engines/director/lingo/lingo-gr.y"
+#line 458 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		// This matches `cmd arg arg, ...`
 		(yyvsp[-1].nodelist)->insert_at(0, (yyvsp[-3].node));
@@ -3603,7 +3603,7 @@ yyreduce:
     break;
 
   case 132: /* cmdargs: '(' ')'  */
-#line 460 "engines/director/lingo/lingo-gr.y"
+#line 463 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `cmd()`
 		(yyval.nodelist) = new NodeList; }
@@ -3611,7 +3611,7 @@ yyreduce:
     break;
 
   case 133: /* cmdargs: '(' expr ',' ')'  */
-#line 463 "engines/director/lingo/lingo-gr.y"
+#line 466 "engines/director/lingo/lingo-gr.y"
                            {
 		// This matches `cmd(arg,)`
 		NodeList *args = new NodeList;
@@ -3621,7 +3621,7 @@ yyreduce:
     break;
 
   case 134: /* cmdargs: '(' expr ',' nonemptyexprlist trailingcomma ')'  */
-#line 468 "engines/director/lingo/lingo-gr.y"
+#line 471 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `cmd(arg, ...)`
 		(yyvsp[-2].nodelist)->insert_at(0, (yyvsp[-4].node));
@@ -3630,7 +3630,7 @@ yyreduce:
     break;
 
   case 135: /* cmdargs: '(' var expr_nounarymath trailingcomma ')'  */
-#line 472 "engines/director/lingo/lingo-gr.y"
+#line 475 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `obj(method arg)`
 		NodeList *args = new NodeList;
@@ -3641,7 +3641,7 @@ yyreduce:
     break;
 
   case 136: /* cmdargs: '(' var expr_nounarymath ',' nonemptyexprlist trailingcomma ')'  */
-#line 478 "engines/director/lingo/lingo-gr.y"
+#line 481 "engines/director/lingo/lingo-gr.y"
                                                                                         {
 		// This matches `obj(method arg, ...)`
 		(yyvsp[-2].nodelist)->insert_at(0, (yyvsp[-4].node));
@@ -3651,7 +3651,7 @@ yyreduce:
     break;
 
   case 139: /* frameargs: tFRAME expr  */
-#line 491 "engines/director/lingo/lingo-gr.y"
+#line 494 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		// This matches `play frame arg`
 		NodeList *args = new NodeList;
@@ -3661,7 +3661,7 @@ yyreduce:
     break;
 
   case 140: /* frameargs: tMOVIE expr  */
-#line 496 "engines/director/lingo/lingo-gr.y"
+#line 499 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		// This matches `play movie arg`
 		NodeList *args = new NodeList;
@@ -3672,7 +3672,7 @@ yyreduce:
     break;
 
   case 141: /* frameargs: tFRAME expr tOF tMOVIE expr  */
-#line 502 "engines/director/lingo/lingo-gr.y"
+#line 505 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play frame arg of movie arg`
 		NodeList *args = new NodeList;
@@ -3683,7 +3683,7 @@ yyreduce:
     break;
 
   case 142: /* frameargs: expr tOF tMOVIE expr  */
-#line 508 "engines/director/lingo/lingo-gr.y"
+#line 511 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `play arg of movie arg` (weird but valid)
 		NodeList *args = new NodeList;
@@ -3694,7 +3694,7 @@ yyreduce:
     break;
 
   case 143: /* frameargs: tFRAME expr expr_nounarymath  */
-#line 514 "engines/director/lingo/lingo-gr.y"
+#line 517 "engines/director/lingo/lingo-gr.y"
                                                         {
 		// This matches `play frame arg arg` (also weird but valid)
 		NodeList *args = new NodeList;
@@ -3705,49 +3705,49 @@ yyreduce:
     break;
 
   case 144: /* asgn: tPUT expr tINTO varorchunk '\n'  */
-#line 522 "engines/director/lingo/lingo-gr.y"
+#line 525 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); }
 #line 3711 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 145: /* asgn: tPUT expr tAFTER varorchunk '\n'  */
-#line 523 "engines/director/lingo/lingo-gr.y"
+#line 526 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); }
 #line 3717 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 146: /* asgn: tPUT expr tBEFORE varorchunk '\n'  */
-#line 524 "engines/director/lingo/lingo-gr.y"
+#line 527 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); }
 #line 3723 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 147: /* asgn: tSET varorthe to expr '\n'  */
-#line 525 "engines/director/lingo/lingo-gr.y"
+#line 528 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); }
 #line 3729 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 150: /* definevars: tGLOBAL idlist '\n'  */
-#line 530 "engines/director/lingo/lingo-gr.y"
+#line 533 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); }
 #line 3735 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 151: /* definevars: tPROPERTY idlist '\n'  */
-#line 531 "engines/director/lingo/lingo-gr.y"
+#line 534 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); }
 #line 3741 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 152: /* definevars: tINSTANCE idlist '\n'  */
-#line 532 "engines/director/lingo/lingo-gr.y"
+#line 535 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); }
 #line 3747 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 153: /* ifstmt: tIF expr tTHEN stmt  */
-#line 535 "engines/director/lingo/lingo-gr.y"
+#line 538 "engines/director/lingo/lingo-gr.y"
                             {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
@@ -3756,14 +3756,14 @@ yyreduce:
     break;
 
   case 154: /* ifstmt: tIF expr tTHEN '\n' stmtlist_insideif endif  */
-#line 539 "engines/director/lingo/lingo-gr.y"
+#line 542 "engines/director/lingo/lingo-gr.y"
                                                       {
 		(yyval.node) = new IfStmtNode((yyvsp[-4].node), (yyvsp[-1].nodelist)); }
 #line 3763 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 155: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt  */
-#line 543 "engines/director/lingo/lingo-gr.y"
+#line 546 "engines/director/lingo/lingo-gr.y"
                                                          {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-2].node));
@@ -3774,7 +3774,7 @@ yyreduce:
     break;
 
   case 156: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist_insideif endif  */
-#line 549 "engines/director/lingo/lingo-gr.y"
+#line 552 "engines/director/lingo/lingo-gr.y"
                                                                                    {
 		NodeList *stmtlist1 = new NodeList;
 		stmtlist1->push_back((yyvsp[-4].node));
@@ -3783,7 +3783,7 @@ yyreduce:
     break;
 
   case 157: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist_insideif tELSE stmt  */
-#line 553 "engines/director/lingo/lingo-gr.y"
+#line 556 "engines/director/lingo/lingo-gr.y"
                                                                              {
 		NodeList *stmtlist2 = new NodeList;
 		stmtlist2->push_back((yyvsp[0].node));
@@ -3792,14 +3792,14 @@ yyreduce:
     break;
 
   case 158: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist_insideif tELSE '\n' stmtlist_insideif endif  */
-#line 557 "engines/director/lingo/lingo-gr.y"
+#line 560 "engines/director/lingo/lingo-gr.y"
                                                                                                          {
 		(yyval.node) = new IfElseStmtNode((yyvsp[-7].node), (yyvsp[-4].nodelist), (yyvsp[-1].nodelist)); }
 #line 3799 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 159: /* endif: %empty  */
-#line 561 "engines/director/lingo/lingo-gr.y"
+#line 564 "engines/director/lingo/lingo-gr.y"
                         {
 		LingoCompiler *compiler = g_lingo->_compiler;
 		warning("LingoCompiler::parse: no end if at line %d col %d in %s id: %d",
@@ -3811,35 +3811,35 @@ yyreduce:
     break;
 
   case 161: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 570 "engines/director/lingo/lingo-gr.y"
+#line 573 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
 #line 3818 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 162: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 572 "engines/director/lingo/lingo-gr.y"
+#line 575 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
 #line 3825 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 163: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 574 "engines/director/lingo/lingo-gr.y"
+#line 577 "engines/director/lingo/lingo-gr.y"
                                                                                              {
 		(yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
 #line 3832 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 164: /* loop: tREPEAT tWITH ID tIN expr '\n' stmtlist tENDREPEAT '\n'  */
-#line 576 "engines/director/lingo/lingo-gr.y"
+#line 579 "engines/director/lingo/lingo-gr.y"
                                                                   {
 		(yyval.node) = new RepeatWithInNode((yyvsp[-6].s), (yyvsp[-4].node), (yyvsp[-2].nodelist)); }
 #line 3839 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 165: /* tell: tTELL expr tTO stmtoneliner  */
-#line 580 "engines/director/lingo/lingo-gr.y"
+#line 583 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *stmtlist = new NodeList;
 		stmtlist->push_back((yyvsp[0].node));
@@ -3848,26 +3848,26 @@ yyreduce:
     break;
 
   case 166: /* tell: tTELL expr '\n' stmtlist tENDTELL '\n'  */
-#line 584 "engines/director/lingo/lingo-gr.y"
+#line 587 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.node) = new TellNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); }
 #line 3855 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 167: /* when: tWHEN '\n'  */
-#line 588 "engines/director/lingo/lingo-gr.y"
+#line 591 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new WhenNode((yyvsp[-1].w).eventName, (yyvsp[-1].w).stmt); }
 #line 3861 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 168: /* stmtlist: %empty  */
-#line 590 "engines/director/lingo/lingo-gr.y"
+#line 593 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.nodelist) = new NodeList; }
 #line 3867 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 170: /* nonemptystmtlist: stmtlistline  */
-#line 595 "engines/director/lingo/lingo-gr.y"
+#line 598 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
@@ -3878,7 +3878,7 @@ yyreduce:
     break;
 
   case 171: /* nonemptystmtlist: nonemptystmtlist stmtlistline  */
-#line 601 "engines/director/lingo/lingo-gr.y"
+#line 604 "engines/director/lingo/lingo-gr.y"
                                                         {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
@@ -3888,19 +3888,19 @@ yyreduce:
     break;
 
   case 172: /* stmtlistline: '\n'  */
-#line 608 "engines/director/lingo/lingo-gr.y"
+#line 611 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = nullptr; }
 #line 3894 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 174: /* stmtlist_insideif: %empty  */
-#line 612 "engines/director/lingo/lingo-gr.y"
+#line 615 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.nodelist) = new NodeList; }
 #line 3900 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 176: /* nonemptystmtlist_insideif: stmtlistline_insideif  */
-#line 617 "engines/director/lingo/lingo-gr.y"
+#line 620 "engines/director/lingo/lingo-gr.y"
                                                 {
 		NodeList *list = new NodeList;
 		if ((yyvsp[0].node)) {
@@ -3911,7 +3911,7 @@ yyreduce:
     break;
 
   case 177: /* nonemptystmtlist_insideif: nonemptystmtlist_insideif stmtlistline_insideif  */
-#line 623 "engines/director/lingo/lingo-gr.y"
+#line 626 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		if ((yyvsp[0].node)) {
 			(yyvsp[-1].nodelist)->push_back((yyvsp[0].node));
@@ -3921,55 +3921,55 @@ yyreduce:
     break;
 
   case 178: /* stmtlistline_insideif: '\n'  */
-#line 630 "engines/director/lingo/lingo-gr.y"
+#line 633 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = nullptr; }
 #line 3927 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 180: /* simpleexpr_nounarymath: tINT  */
-#line 637 "engines/director/lingo/lingo-gr.y"
+#line 640 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new IntNode((yyvsp[0].i)); }
 #line 3933 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 181: /* simpleexpr_nounarymath: tFLOAT  */
-#line 638 "engines/director/lingo/lingo-gr.y"
+#line 641 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FloatNode((yyvsp[0].f)); }
 #line 3939 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 182: /* simpleexpr_nounarymath: tSYMBOL  */
-#line 639 "engines/director/lingo/lingo-gr.y"
+#line 642 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new SymbolNode((yyvsp[0].s)); }
 #line 3945 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 183: /* simpleexpr_nounarymath: tSTRING  */
-#line 640 "engines/director/lingo/lingo-gr.y"
+#line 643 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new StringNode((yyvsp[0].s)); }
 #line 3951 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 184: /* simpleexpr_nounarymath: tNOT simpleexpr  */
-#line 641 "engines/director/lingo/lingo-gr.y"
+#line 644 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); }
 #line 3957 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 185: /* simpleexpr_nounarymath: ID '(' ')'  */
-#line 642 "engines/director/lingo/lingo-gr.y"
+#line 645 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new FuncNode((yyvsp[-2].s), new NodeList); }
 #line 3963 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 186: /* simpleexpr_nounarymath: ID '(' nonemptyexprlist trailingcomma ')'  */
-#line 643 "engines/director/lingo/lingo-gr.y"
+#line 646 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new FuncNode((yyvsp[-4].s), (yyvsp[-2].nodelist)); }
 #line 3969 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 187: /* simpleexpr_nounarymath: ID '(' var expr_nounarymath trailingcomma ')'  */
-#line 644 "engines/director/lingo/lingo-gr.y"
+#line 647 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `obj(method arg)`
 		NodeList *args = new NodeList;
@@ -3980,7 +3980,7 @@ yyreduce:
     break;
 
   case 188: /* simpleexpr_nounarymath: ID '(' var expr_nounarymath ',' nonemptyexprlist trailingcomma ')'  */
-#line 650 "engines/director/lingo/lingo-gr.y"
+#line 653 "engines/director/lingo/lingo-gr.y"
                                                                                                 {
 		// This matches `obj(method arg, ...)`
 		(yyvsp[-2].nodelist)->insert_at(0, (yyvsp[-4].node));
@@ -3990,141 +3990,141 @@ yyreduce:
     break;
 
   case 189: /* simpleexpr_nounarymath: '(' expr ')'  */
-#line 655 "engines/director/lingo/lingo-gr.y"
+#line 658 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = (yyvsp[-1].node); }
 #line 3996 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 195: /* var: ID  */
-#line 663 "engines/director/lingo/lingo-gr.y"
+#line 666 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new VarNode((yyvsp[0].s)); }
 #line 4002 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 200: /* chunk: tFIELD refargs  */
-#line 673 "engines/director/lingo/lingo-gr.y"
+#line 676 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.node) = new FuncNode(new Common::String("field"), (yyvsp[0].nodelist)); }
 #line 4008 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 201: /* chunk: tCAST refargs  */
-#line 674 "engines/director/lingo/lingo-gr.y"
+#line 677 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FuncNode(new Common::String("cast"), (yyvsp[0].nodelist)); }
 #line 4014 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 202: /* chunk: tMEMBER refargs  */
-#line 675 "engines/director/lingo/lingo-gr.y"
+#line 678 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FuncNode(new Common::String("member"), (yyvsp[0].nodelist)); }
 #line 4020 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 203: /* chunk: tCASTLIB refargs  */
-#line 676 "engines/director/lingo/lingo-gr.y"
+#line 679 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FuncNode(new Common::String("castLib"), (yyvsp[0].nodelist)); }
 #line 4026 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 204: /* chunk: tCHAR expr tOF simpleexpr  */
-#line 677 "engines/director/lingo/lingo-gr.y"
+#line 680 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkChar, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
 #line 4033 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 205: /* chunk: tCHAR expr tTO expr tOF simpleexpr  */
-#line 679 "engines/director/lingo/lingo-gr.y"
+#line 682 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkChar, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4040 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 206: /* chunk: tWORD expr tOF simpleexpr  */
-#line 681 "engines/director/lingo/lingo-gr.y"
+#line 684 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkWord, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
 #line 4047 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 207: /* chunk: tWORD expr tTO expr tOF simpleexpr  */
-#line 683 "engines/director/lingo/lingo-gr.y"
+#line 686 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkWord, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4054 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 208: /* chunk: tITEM expr tOF simpleexpr  */
-#line 685 "engines/director/lingo/lingo-gr.y"
+#line 688 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkItem, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
 #line 4061 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 209: /* chunk: tITEM expr tTO expr tOF simpleexpr  */
-#line 687 "engines/director/lingo/lingo-gr.y"
+#line 690 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkItem, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4068 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 210: /* chunk: tLINE expr tOF simpleexpr  */
-#line 689 "engines/director/lingo/lingo-gr.y"
+#line 692 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkLine, (yyvsp[-2].node), nullptr, (yyvsp[0].node)); }
 #line 4075 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 211: /* chunk: tLINE expr tTO expr tOF simpleexpr  */
-#line 691 "engines/director/lingo/lingo-gr.y"
+#line 694 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		(yyval.node) = new ChunkExprNode(kChunkLine, (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4082 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 212: /* chunk: tTHE tLAST chunktype inof simpleexpr  */
-#line 693 "engines/director/lingo/lingo-gr.y"
+#line 696 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new TheLastNode((yyvsp[-2].chunktype), (yyvsp[0].node)); }
 #line 4088 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 213: /* chunktype: tCHAR  */
-#line 696 "engines/director/lingo/lingo-gr.y"
+#line 699 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.chunktype) = kChunkChar; }
 #line 4094 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 214: /* chunktype: tWORD  */
-#line 697 "engines/director/lingo/lingo-gr.y"
+#line 700 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkWord; }
 #line 4100 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 215: /* chunktype: tITEM  */
-#line 698 "engines/director/lingo/lingo-gr.y"
+#line 701 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkItem; }
 #line 4106 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 216: /* chunktype: tLINE  */
-#line 699 "engines/director/lingo/lingo-gr.y"
+#line 702 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.chunktype) = kChunkLine; }
 #line 4112 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 217: /* object: tSCRIPT refargs  */
-#line 702 "engines/director/lingo/lingo-gr.y"
+#line 705 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.node) = new FuncNode(new Common::String("script"), (yyvsp[0].nodelist)); }
 #line 4118 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 218: /* object: tWINDOW refargs  */
-#line 703 "engines/director/lingo/lingo-gr.y"
+#line 706 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new FuncNode(new Common::String("window"), (yyvsp[0].nodelist)); }
 #line 4124 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 219: /* refargs: simpleexpr  */
-#line 706 "engines/director/lingo/lingo-gr.y"
+#line 709 "engines/director/lingo/lingo-gr.y"
                                                                                 {
 		// This matches `ref arg` and `ref(arg)`
 		NodeList *args = new NodeList;
@@ -4134,7 +4134,7 @@ yyreduce:
     break;
 
   case 220: /* refargs: '(' ')'  */
-#line 711 "engines/director/lingo/lingo-gr.y"
+#line 714 "engines/director/lingo/lingo-gr.y"
                                                                                         {
 		// This matches `ref()`
 		(yyval.nodelist) = new NodeList; }
@@ -4142,7 +4142,7 @@ yyreduce:
     break;
 
   case 221: /* refargs: '(' expr ',' ')'  */
-#line 714 "engines/director/lingo/lingo-gr.y"
+#line 717 "engines/director/lingo/lingo-gr.y"
                            {
 		// This matches `ref(arg,)`
 		NodeList *args = new NodeList;
@@ -4152,7 +4152,7 @@ yyreduce:
     break;
 
   case 222: /* refargs: '(' expr ',' nonemptyexprlist trailingcomma ')'  */
-#line 719 "engines/director/lingo/lingo-gr.y"
+#line 722 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		// This matches `ref(arg, ...)`
 		(yyvsp[-2].nodelist)->insert_at(0, (yyvsp[-4].node));
@@ -4161,211 +4161,211 @@ yyreduce:
     break;
 
   case 223: /* the: tTHE ID  */
-#line 725 "engines/director/lingo/lingo-gr.y"
+#line 728 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheNode((yyvsp[0].s)); }
 #line 4167 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 224: /* the: tTHE ID tOF theobj  */
-#line 726 "engines/director/lingo/lingo-gr.y"
+#line 729 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheOfNode((yyvsp[-2].s), (yyvsp[0].node)); }
 #line 4173 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 225: /* the: tTHE tNUMBER tOF theobj  */
-#line 727 "engines/director/lingo/lingo-gr.y"
+#line 730 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheOfNode(new Common::String("number"), (yyvsp[0].node)); }
 #line 4179 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 230: /* theobj: tMENUITEM simpleexpr tOF tMENU simpleexpr  */
-#line 734 "engines/director/lingo/lingo-gr.y"
+#line 737 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new MenuItemNode((yyvsp[-3].node), (yyvsp[0].node)); }
 #line 4185 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 231: /* theobj: tSOUND simpleexpr  */
-#line 735 "engines/director/lingo/lingo-gr.y"
+#line 738 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new SoundNode((yyvsp[0].node)); }
 #line 4191 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 232: /* theobj: tSPRITE simpleexpr  */
-#line 736 "engines/director/lingo/lingo-gr.y"
+#line 739 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new SpriteNode((yyvsp[0].node)); }
 #line 4197 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 233: /* menu: tMENU simpleexpr  */
-#line 739 "engines/director/lingo/lingo-gr.y"
+#line 742 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new MenuNode((yyvsp[0].node)); }
 #line 4203 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 234: /* thedatetime: tTHE tABBREVIATED tDATE  */
-#line 741 "engines/director/lingo/lingo-gr.y"
+#line 744 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
 #line 4209 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 235: /* thedatetime: tTHE tABBREVIATED tTIME  */
-#line 742 "engines/director/lingo/lingo-gr.y"
+#line 745 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
 #line 4215 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 236: /* thedatetime: tTHE tABBREV tDATE  */
-#line 743 "engines/director/lingo/lingo-gr.y"
+#line 746 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
 #line 4221 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 237: /* thedatetime: tTHE tABBREV tTIME  */
-#line 744 "engines/director/lingo/lingo-gr.y"
+#line 747 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
 #line 4227 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 238: /* thedatetime: tTHE tABBR tDATE  */
-#line 745 "engines/director/lingo/lingo-gr.y"
+#line 748 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheDate); }
 #line 4233 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 239: /* thedatetime: tTHE tABBR tTIME  */
-#line 746 "engines/director/lingo/lingo-gr.y"
+#line 749 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheAbbr, kTheTime); }
 #line 4239 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 240: /* thedatetime: tTHE tLONG tDATE  */
-#line 747 "engines/director/lingo/lingo-gr.y"
+#line 750 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheLong, kTheDate); }
 #line 4245 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 241: /* thedatetime: tTHE tLONG tTIME  */
-#line 748 "engines/director/lingo/lingo-gr.y"
+#line 751 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheLong, kTheTime); }
 #line 4251 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 242: /* thedatetime: tTHE tSHORT tDATE  */
-#line 749 "engines/director/lingo/lingo-gr.y"
+#line 752 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheShort, kTheDate); }
 #line 4257 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 243: /* thedatetime: tTHE tSHORT tTIME  */
-#line 750 "engines/director/lingo/lingo-gr.y"
+#line 753 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheDateTimeNode(kTheShort, kTheTime); }
 #line 4263 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 244: /* thenumberof: tTHE tNUMBER tOF tCHARS inof simpleexpr  */
-#line 754 "engines/director/lingo/lingo-gr.y"
+#line 757 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfChars, (yyvsp[0].node)); }
 #line 4269 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 245: /* thenumberof: tTHE tNUMBER tOF tWORDS inof simpleexpr  */
-#line 755 "engines/director/lingo/lingo-gr.y"
+#line 758 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfWords, (yyvsp[0].node)); }
 #line 4275 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 246: /* thenumberof: tTHE tNUMBER tOF tITEMS inof simpleexpr  */
-#line 756 "engines/director/lingo/lingo-gr.y"
+#line 759 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfItems, (yyvsp[0].node)); }
 #line 4281 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 247: /* thenumberof: tTHE tNUMBER tOF tLINES inof simpleexpr  */
-#line 757 "engines/director/lingo/lingo-gr.y"
+#line 760 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfLines, (yyvsp[0].node)); }
 #line 4287 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 248: /* thenumberof: tTHE tNUMBER tOF tMENUITEMS inof menu  */
-#line 758 "engines/director/lingo/lingo-gr.y"
+#line 761 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfMenuItems, (yyvsp[0].node)); }
 #line 4293 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 249: /* thenumberof: tTHE tNUMBER tOF tMENUS  */
-#line 759 "engines/director/lingo/lingo-gr.y"
+#line 762 "engines/director/lingo/lingo-gr.y"
                                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfMenus, nullptr); }
 #line 4299 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 250: /* thenumberof: tTHE tNUMBER tOF tXTRAS  */
-#line 760 "engines/director/lingo/lingo-gr.y"
+#line 763 "engines/director/lingo/lingo-gr.y"
                                                                         { (yyval.node) = new TheNumberOfNode(kNumberOfXtras, nullptr); }
 #line 4305 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 251: /* thenumberof: tTHE tNUMBER tOF tCASTLIBS  */
-#line 761 "engines/director/lingo/lingo-gr.y"
+#line 764 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new TheNumberOfNode(kNumberOfCastlibs, nullptr); }
 #line 4311 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 254: /* writablethe: tTHE ID  */
-#line 766 "engines/director/lingo/lingo-gr.y"
+#line 769 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new TheNode((yyvsp[0].s)); }
 #line 4317 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 255: /* writablethe: tTHE ID tOF writabletheobj  */
-#line 767 "engines/director/lingo/lingo-gr.y"
+#line 770 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new TheOfNode((yyvsp[-2].s), (yyvsp[0].node)); }
 #line 4323 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 257: /* writabletheobj: tMENU expr_noeq  */
-#line 771 "engines/director/lingo/lingo-gr.y"
+#line 774 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new MenuNode((yyvsp[0].node)); }
 #line 4329 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 258: /* writabletheobj: tMENUITEM expr_noeq tOF tMENU expr_noeq  */
-#line 772 "engines/director/lingo/lingo-gr.y"
+#line 775 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new MenuItemNode((yyvsp[-3].node), (yyvsp[0].node)); }
 #line 4335 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 259: /* writabletheobj: tSOUND expr_noeq  */
-#line 773 "engines/director/lingo/lingo-gr.y"
+#line 776 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new SoundNode((yyvsp[0].node)); }
 #line 4341 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 260: /* writabletheobj: tSPRITE expr_noeq  */
-#line 774 "engines/director/lingo/lingo-gr.y"
+#line 777 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new SpriteNode((yyvsp[0].node)); }
 #line 4347 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 261: /* list: '[' exprlist ']'  */
-#line 777 "engines/director/lingo/lingo-gr.y"
+#line 780 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); }
 #line 4353 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 262: /* list: '[' ':' ']'  */
-#line 778 "engines/director/lingo/lingo-gr.y"
+#line 781 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode(new NodeList); }
 #line 4359 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 263: /* list: '[' proplist ']'  */
-#line 779 "engines/director/lingo/lingo-gr.y"
+#line 782 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); }
 #line 4365 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 264: /* proplist: proppair  */
-#line 785 "engines/director/lingo/lingo-gr.y"
+#line 788 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList;
 		list->push_back((yyvsp[0].node));
@@ -4374,7 +4374,7 @@ yyreduce:
     break;
 
   case 265: /* proplist: proplist ',' proppair  */
-#line 789 "engines/director/lingo/lingo-gr.y"
+#line 792 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
@@ -4382,7 +4382,7 @@ yyreduce:
     break;
 
   case 266: /* proplist: proplist ',' expr  */
-#line 792 "engines/director/lingo/lingo-gr.y"
+#line 795 "engines/director/lingo/lingo-gr.y"
                                         {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
@@ -4390,367 +4390,367 @@ yyreduce:
     break;
 
   case 267: /* proppair: tSYMBOL ':' expr  */
-#line 797 "engines/director/lingo/lingo-gr.y"
+#line 800 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
 #line 4396 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 268: /* proppair: ID ':' expr  */
-#line 798 "engines/director/lingo/lingo-gr.y"
+#line 801 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); }
 #line 4402 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 269: /* proppair: tSTRING ':' expr  */
-#line 799 "engines/director/lingo/lingo-gr.y"
+#line 802 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); }
 #line 4408 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 270: /* proppair: tINT ':' expr  */
-#line 800 "engines/director/lingo/lingo-gr.y"
+#line 803 "engines/director/lingo/lingo-gr.y"
                                     { (yyval.node) = new PropPairNode(new IntNode((yyvsp[-2].i)), (yyvsp[0].node)); }
 #line 4414 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 271: /* proppair: tFLOAT ':' expr  */
-#line 801 "engines/director/lingo/lingo-gr.y"
+#line 804 "engines/director/lingo/lingo-gr.y"
                                     { (yyval.node) = new PropPairNode(new FloatNode((yyvsp[-2].f)), (yyvsp[0].node)); }
 #line 4420 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 272: /* unarymath: '+' simpleexpr  */
-#line 804 "engines/director/lingo/lingo-gr.y"
+#line 807 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = (yyvsp[0].node); }
 #line 4426 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 273: /* unarymath: '-' simpleexpr  */
-#line 805 "engines/director/lingo/lingo-gr.y"
+#line 808 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); }
 #line 4432 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 278: /* expr: expr '+' expr  */
-#line 815 "engines/director/lingo/lingo-gr.y"
+#line 818 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4438 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 279: /* expr: expr '-' expr  */
-#line 816 "engines/director/lingo/lingo-gr.y"
+#line 819 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4444 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 280: /* expr: expr '*' expr  */
-#line 817 "engines/director/lingo/lingo-gr.y"
+#line 820 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4450 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 281: /* expr: expr '/' expr  */
-#line 818 "engines/director/lingo/lingo-gr.y"
+#line 821 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4456 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 282: /* expr: expr tMOD expr  */
-#line 819 "engines/director/lingo/lingo-gr.y"
+#line 822 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4462 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 283: /* expr: expr '>' expr  */
-#line 820 "engines/director/lingo/lingo-gr.y"
+#line 823 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4468 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 284: /* expr: expr '<' expr  */
-#line 821 "engines/director/lingo/lingo-gr.y"
+#line 824 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4474 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 285: /* expr: expr tEQ expr  */
-#line 822 "engines/director/lingo/lingo-gr.y"
+#line 825 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4480 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 286: /* expr: expr tNEQ expr  */
-#line 823 "engines/director/lingo/lingo-gr.y"
+#line 826 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4486 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 287: /* expr: expr tGE expr  */
-#line 824 "engines/director/lingo/lingo-gr.y"
+#line 827 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4492 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 288: /* expr: expr tLE expr  */
-#line 825 "engines/director/lingo/lingo-gr.y"
+#line 828 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4498 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 289: /* expr: expr tAND expr  */
-#line 826 "engines/director/lingo/lingo-gr.y"
+#line 829 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4504 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 290: /* expr: expr tOR expr  */
-#line 827 "engines/director/lingo/lingo-gr.y"
+#line 830 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4510 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 291: /* expr: expr '&' expr  */
-#line 828 "engines/director/lingo/lingo-gr.y"
+#line 831 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4516 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 292: /* expr: expr tCONCAT expr  */
-#line 829 "engines/director/lingo/lingo-gr.y"
+#line 832 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4522 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 293: /* expr: expr tCONTAINS expr  */
-#line 830 "engines/director/lingo/lingo-gr.y"
+#line 833 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4528 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 294: /* expr: expr tSTARTS expr  */
-#line 831 "engines/director/lingo/lingo-gr.y"
+#line 834 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4534 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 297: /* expr_nounarymath: expr_nounarymath '+' expr  */
-#line 840 "engines/director/lingo/lingo-gr.y"
+#line 843 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4540 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 298: /* expr_nounarymath: expr_nounarymath '-' expr  */
-#line 841 "engines/director/lingo/lingo-gr.y"
+#line 844 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4546 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 299: /* expr_nounarymath: expr_nounarymath '*' expr  */
-#line 842 "engines/director/lingo/lingo-gr.y"
+#line 845 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4552 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 300: /* expr_nounarymath: expr_nounarymath '/' expr  */
-#line 843 "engines/director/lingo/lingo-gr.y"
+#line 846 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4558 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 301: /* expr_nounarymath: expr_nounarymath tMOD expr  */
-#line 844 "engines/director/lingo/lingo-gr.y"
+#line 847 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4564 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 302: /* expr_nounarymath: expr_nounarymath '>' expr  */
-#line 845 "engines/director/lingo/lingo-gr.y"
+#line 848 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4570 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 303: /* expr_nounarymath: expr_nounarymath '<' expr  */
-#line 846 "engines/director/lingo/lingo-gr.y"
+#line 849 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4576 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 304: /* expr_nounarymath: expr_nounarymath tEQ expr  */
-#line 847 "engines/director/lingo/lingo-gr.y"
+#line 850 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4582 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 305: /* expr_nounarymath: expr_nounarymath tNEQ expr  */
-#line 848 "engines/director/lingo/lingo-gr.y"
+#line 851 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4588 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 306: /* expr_nounarymath: expr_nounarymath tGE expr  */
-#line 849 "engines/director/lingo/lingo-gr.y"
+#line 852 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4594 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 307: /* expr_nounarymath: expr_nounarymath tLE expr  */
-#line 850 "engines/director/lingo/lingo-gr.y"
+#line 853 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4600 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 308: /* expr_nounarymath: expr_nounarymath tAND expr  */
-#line 851 "engines/director/lingo/lingo-gr.y"
+#line 854 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4606 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 309: /* expr_nounarymath: expr_nounarymath tOR expr  */
-#line 852 "engines/director/lingo/lingo-gr.y"
+#line 855 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4612 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 310: /* expr_nounarymath: expr_nounarymath '&' expr  */
-#line 853 "engines/director/lingo/lingo-gr.y"
+#line 856 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4618 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 311: /* expr_nounarymath: expr_nounarymath tCONCAT expr  */
-#line 854 "engines/director/lingo/lingo-gr.y"
+#line 857 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4624 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 312: /* expr_nounarymath: expr_nounarymath tCONTAINS expr  */
-#line 855 "engines/director/lingo/lingo-gr.y"
+#line 858 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4630 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 313: /* expr_nounarymath: expr_nounarymath tSTARTS expr  */
-#line 856 "engines/director/lingo/lingo-gr.y"
+#line 859 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4636 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 316: /* expr_noeq: expr_noeq '+' expr_noeq  */
-#line 861 "engines/director/lingo/lingo-gr.y"
+#line 864 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4642 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 317: /* expr_noeq: expr_noeq '-' expr_noeq  */
-#line 862 "engines/director/lingo/lingo-gr.y"
+#line 865 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4648 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 318: /* expr_noeq: expr_noeq '*' expr_noeq  */
-#line 863 "engines/director/lingo/lingo-gr.y"
+#line 866 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4654 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 319: /* expr_noeq: expr_noeq '/' expr_noeq  */
-#line 864 "engines/director/lingo/lingo-gr.y"
+#line 867 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4660 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 320: /* expr_noeq: expr_noeq tMOD expr_noeq  */
-#line 865 "engines/director/lingo/lingo-gr.y"
+#line 868 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4666 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 321: /* expr_noeq: expr_noeq '>' expr_noeq  */
-#line 866 "engines/director/lingo/lingo-gr.y"
+#line 869 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4672 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 322: /* expr_noeq: expr_noeq '<' expr_noeq  */
-#line 867 "engines/director/lingo/lingo-gr.y"
+#line 870 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4678 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 323: /* expr_noeq: expr_noeq tNEQ expr_noeq  */
-#line 868 "engines/director/lingo/lingo-gr.y"
+#line 871 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4684 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 324: /* expr_noeq: expr_noeq tGE expr_noeq  */
-#line 869 "engines/director/lingo/lingo-gr.y"
+#line 872 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4690 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 325: /* expr_noeq: expr_noeq tLE expr_noeq  */
-#line 870 "engines/director/lingo/lingo-gr.y"
+#line 873 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4696 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 326: /* expr_noeq: expr_noeq tAND expr_noeq  */
-#line 871 "engines/director/lingo/lingo-gr.y"
+#line 874 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4702 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 327: /* expr_noeq: expr_noeq tOR expr_noeq  */
-#line 872 "engines/director/lingo/lingo-gr.y"
+#line 875 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4708 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 328: /* expr_noeq: expr_noeq '&' expr_noeq  */
-#line 873 "engines/director/lingo/lingo-gr.y"
+#line 876 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4714 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 329: /* expr_noeq: expr_noeq tCONCAT expr_noeq  */
-#line 874 "engines/director/lingo/lingo-gr.y"
+#line 877 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4720 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 330: /* expr_noeq: expr_noeq tCONTAINS expr_noeq  */
-#line 875 "engines/director/lingo/lingo-gr.y"
+#line 878 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4726 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 331: /* expr_noeq: expr_noeq tSTARTS expr_noeq  */
-#line 876 "engines/director/lingo/lingo-gr.y"
+#line 879 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4732 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 332: /* sprite: tSPRITE expr tINTERSECTS simpleexpr  */
-#line 879 "engines/director/lingo/lingo-gr.y"
+#line 882 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.node) = new IntersectsNode((yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4738 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 333: /* sprite: tSPRITE expr tWITHIN simpleexpr  */
-#line 880 "engines/director/lingo/lingo-gr.y"
+#line 883 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.node) = new WithinNode((yyvsp[-2].node), (yyvsp[0].node)); }
 #line 4744 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 334: /* exprlist: %empty  */
-#line 883 "engines/director/lingo/lingo-gr.y"
+#line 886 "engines/director/lingo/lingo-gr.y"
                                                                 { (yyval.nodelist) = new NodeList; }
 #line 4750 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 336: /* nonemptyexprlist: expr  */
-#line 887 "engines/director/lingo/lingo-gr.y"
+#line 890 "engines/director/lingo/lingo-gr.y"
                                                         {
 		NodeList *list = new NodeList;
 		list->push_back((yyvsp[0].node));
@@ -4759,7 +4759,7 @@ yyreduce:
     break;
 
   case 337: /* nonemptyexprlist: nonemptyexprlist ',' expr  */
-#line 891 "engines/director/lingo/lingo-gr.y"
+#line 894 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyvsp[-2].nodelist)->push_back((yyvsp[0].node));
 		(yyval.nodelist) = (yyvsp[-2].nodelist); }
@@ -4965,7 +4965,7 @@ yyreturnlab:
   return yyresult;
 }
 
-#line 896 "engines/director/lingo/lingo-gr.y"
+#line 899 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {


Commit: 5798907e824f9c72573d46e5322fe8befe8effc5
    https://github.com/scummvm/scummvm/commit/5798907e824f9c72573d46e5322fe8befe8effc5
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2026-04-10T12:05:48+02:00

Commit Message:
DIRECTOR: LINGO: Fix parsing floats in lexer, added tests

We were not correctly parsing floats without leading zero,
e.g. ".5", and we were reading this as "5"

Changed paths:
    engines/director/lingo/lingo-lex.cpp
    engines/director/lingo/lingo-lex.l
    engines/director/lingo/tests/math.lingo


diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index 722ee191e46..a7d6ac47445 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -1,4 +1,4 @@
-#line 2 "engines/director/lingo/lingo-lex.cpp"
+#line 1 "engines/director/lingo/lingo-lex.cpp"
 /* ScummVM - Graphic Adventure Engine
  *
  * ScummVM is the legal property of its developers, whose names
@@ -45,7 +45,7 @@ using namespace Director;
 static const char *inputbuffer;
 static uint inputlen;
 
-#line 49 "engines/director/lingo/lingo-lex.cpp"
+#line 48 "engines/director/lingo/lingo-lex.cpp"
 
 #define  YY_INT_ALIGNED short int
 
@@ -409,48 +409,48 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static const flex_int16_t yy_accept[368] =
+static const flex_int16_t yy_accept[369] =
     {   0,
         0,    0,   93,   91,    1,   89,   89,   91,   91,   88,
-       88,   87,   88,   84,   88,   85,   85,   85,   85,   85,
+       88,   86,   87,   88,   84,   88,   85,   85,   85,   85,
        85,   85,   85,   85,   85,   85,   85,   85,   85,   85,
-       85,   85,   85,   85,   85,   91,    1,   85,   91,    1,
-       89,    0,    0,   90,    2,   83,   86,   87,   82,   80,
-       81,   85,   85,   85,   85,   85,   85,   85,   85,   85,
-       85,   85,   85,   85,   85,   85,   85,   85,   25,   85,
-       27,   31,   85,   85,   85,   85,   85,   85,   85,   85,
-       85,   85,   50,   51,   85,   53,   85,   85,   85,   85,
-       85,   85,   85,   85,   85,   85,   85,   85,   85,   71,
-
-       85,   85,   85,   85,    1,    0,    0,   85,    2,   86,
-       85,   85,    7,   85,   85,   85,   85,   85,   85,   85,
-       85,   19,   85,   85,   85,   85,    0,    0,   85,   85,
-       85,   85,   85,   85,   85,   85,   85,   85,   85,   45,
-       85,   85,   48,   85,   85,   85,   85,   85,   57,   85,
-       85,   85,   85,   62,   85,   85,   85,   85,   85,   68,
-       85,   85,   85,   85,   85,   85,   85,    0,   85,    5,
-       85,   85,    9,   12,   85,   15,   85,   17,   18,    0,
-        0,   20,   85,   85,   85,    0,   85,   85,   85,   30,
-       32,   34,   35,   37,   85,   85,   40,   85,   85,   47,
-
-       85,   52,   54,   85,   85,   85,   85,   85,   85,   85,
-       85,   85,   85,   67,   69,   70,   85,   85,   85,   75,
-       77,   85,    0,   85,   85,    6,   85,   85,   13,   85,
-       85,   19,   22,   23,   85,   25,   85,   85,   85,   33,
-       36,   38,   85,   85,   41,   85,   46,   85,   85,   85,
-       85,   85,   85,   85,   63,   64,   85,   85,    0,    0,
-       73,   85,   85,   78,   79,    0,   85,    4,    8,   85,
-       85,   16,   19,   24,   26,   85,   85,   39,   85,   44,
-       49,   85,   85,   58,   59,   60,   85,   65,   66,    0,
-        0,    0,   74,   76,    0,   85,   85,   10,   85,   85,
-
-       85,   85,   85,   85,   85,    0,    0,    0,    0,   21,
-       85,   11,   14,   28,   85,   42,   55,   56,   85,    0,
-        0,    0,   21,   85,   85,   43,   85,    0,    0,    0,
-        0,   85,   29,   85,    0,    0,    0,    0,    3,   85,
-        0,    0,    0,    0,    0,    0,   85,    0,    0,    0,
-        0,    0,   85,    0,    0,   85,    0,    0,   85,   72,
-       85,   72,   72,   72,   85,   61,    0
+       85,   85,   85,   85,   85,   85,   91,    1,   85,   91,
+        1,   89,    0,    0,   90,    2,   83,   86,   86,   87,
+       82,   80,   81,   85,   85,   85,   85,   85,   85,   85,
+       85,   85,   85,   85,   85,   85,   85,   85,   85,   85,
+       25,   85,   27,   31,   85,   85,   85,   85,   85,   85,
+       85,   85,   85,   85,   50,   51,   85,   53,   85,   85,
+       85,   85,   85,   85,   85,   85,   85,   85,   85,   85,
+
+       85,   71,   85,   85,   85,   85,    1,    0,    0,   85,
+        2,   85,   85,    7,   85,   85,   85,   85,   85,   85,
+       85,   85,   19,   85,   85,   85,   85,    0,    0,   85,
+       85,   85,   85,   85,   85,   85,   85,   85,   85,   85,
+       45,   85,   85,   48,   85,   85,   85,   85,   85,   57,
+       85,   85,   85,   85,   62,   85,   85,   85,   85,   85,
+       68,   85,   85,   85,   85,   85,   85,   85,    0,   85,
+        5,   85,   85,    9,   12,   85,   15,   85,   17,   18,
+        0,    0,   20,   85,   85,   85,    0,   85,   85,   85,
+       30,   32,   34,   35,   37,   85,   85,   40,   85,   85,
+
+       47,   85,   52,   54,   85,   85,   85,   85,   85,   85,
+       85,   85,   85,   85,   67,   69,   70,   85,   85,   85,
+       75,   77,   85,    0,   85,   85,    6,   85,   85,   13,
+       85,   85,   19,   22,   23,   85,   25,   85,   85,   85,
+       33,   36,   38,   85,   85,   41,   85,   46,   85,   85,
+       85,   85,   85,   85,   85,   63,   64,   85,   85,    0,
+        0,   73,   85,   85,   78,   79,    0,   85,    4,    8,
+       85,   85,   16,   19,   24,   26,   85,   85,   39,   85,
+       44,   49,   85,   85,   58,   59,   60,   85,   65,   66,
+        0,    0,    0,   74,   76,    0,   85,   85,   10,   85,
+
+       85,   85,   85,   85,   85,   85,    0,    0,    0,    0,
+       21,   85,   11,   14,   28,   85,   42,   55,   56,   85,
+        0,    0,    0,   21,   85,   85,   43,   85,    0,    0,
+        0,    0,   85,   29,   85,    0,    0,    0,    0,    3,
+       85,    0,    0,    0,    0,    0,    0,   85,    0,    0,
+        0,    0,    0,   85,    0,    0,   85,    0,    0,   85,
+       72,   85,   72,   72,   72,   85,   61,    0
     } ;
 
 static const YY_CHAR yy_ec[256] =
@@ -479,13 +479,13 @@ static const YY_CHAR yy_ec[256] =
 
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,   64,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1
     } ;
 
-static const YY_CHAR yy_meta[64] =
+static const YY_CHAR yy_meta[65] =
     {   0,
         1,    2,    3,    3,    2,    1,    1,    1,    1,    4,
         4,    1,    1,    1,    5,    5,    5,    5,    5,    5,
@@ -493,201 +493,205 @@ static const YY_CHAR yy_meta[64] =
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-        5,    1,    2
+        5,    1,    2,    2
     } ;
 
-static const flex_int16_t yy_base[375] =
+static const flex_int16_t yy_base[376] =
     {   0,
-        0,   62,  466,  823,   66,  823,  823,  439,    0,  823,
-      429,   55,   59,  823,  404,   58,   56,   61,   62,   59,
-       57,   63,   56,   98,    0,  101,  108,  109,  137,  138,
-       74,  179,  181,  133,   64,  243,  130,  182,  239,  212,
-      823,  196,  245,  823,    0,  823,  178,   84,  823,  823,
-      823,    0,  105,  103,  104,  119,  139,  143,  148,  150,
-      158,  175,  186,  160,  196,  204,  211,  201,  235,  212,
-        0,  212,  220,  210,  218,  220,  232,  227,  239,  219,
-      226,  235,    0,    0,  233,    0,  249,  251,  233,  254,
-      259,  239,  257,  257,  261,  281,  273,  281,  275,    0,
-
-      285,  278,  281,  286,  334,  303,  124,  302,    0,  166,
-      290,  304,    0,  297,  294,  299,  300,  312,  322,  317,
-      327,  346,  319,  331,  331,  343,  358,  113,  338,  331,
-      343,  339,  334,  350,  353,  340,  360,  339,  355,    0,
-      356,  349,    0,  368,  360,  354,  364,  372,    0,  385,
-      372,  384,  383,    0,  381,  385,  393,  387,  393,  392,
-      404,  398,  401,  406,  408,  414,  419,  420,  406,  425,
-      415,  420,  426,  421,  440,    0,  424,    0,    0,  458,
-      111,    0,  441,  445,  450,  438,  437,  456,  442,    0,
-      445,    0,  446,    0,  452,  463,  462,  455,  467,    0,
-
-      468,    0,    0,  468,  473,  483,  466,  472,  476,  472,
-      481,  475,  479,    0,    0,    0,  522,  494,  489,  491,
-      487,  497,  497,  503,  498,    0,  515,  513,    0,  516,
-      521,    0,    0,    0,  517,  823,  525,  518,  515,    0,
-        0,    0,  517,  516,    0,  532,    0,  523,  528,  528,
-      528,  537,  534,  538,    0,    0,  532,  544,  576,  108,
-        0,  543,  555,    0,    0,  558,  558,  539,    0,  575,
-      565,    0,    0,    0,    0,  577,  576,    0,  578,    0,
-        0,  566,  571,    0,    0,    0,  578,    0,    0,  579,
-      578,  588,    0,    0,  577,  575,  599,  585,  588,  606,
-
-      612,  606,  602,  599,  626,  606,  611,  619,  609,    0,
-      615,    0,    0,    0,  617,  619,    0,    0,  620,  624,
-      622,  636,  823,  640,  629,    0,  630,  634,  634,  653,
-      647,  660,    0,  661,  646,  686,  672,  655,    0,  661,
-      665,  692,   82,  666,  668,  667,  668,  705,  681,  672,
-      715,  717,  690,  692,  685,  697,  702,  732,  707,  737,
-      711,    0,  739,   79,  712,    0,  823,  802,   79,  804,
-      806,  810,  812,  817
+        0,   63,  223,  851,   67,  851,  851,  211,    0,  851,
+      202,  179,   56,   60,  851,  176,   59,   57,   62,   63,
+       60,   58,   64,   57,  101,    0,  109,  120,  117,  134,
+      142,   75,  183,  175,  185,   63,  122,  238,  215,  120,
+      245,  851,  113,  144,  851,    0,  851,  131,  129,  112,
+      851,  851,  851,    0,  101,  110,  129,  133,  112,  140,
+      130,  137,  154,  147,  154,  177,  178,  191,  205,  163,
+      250,  202,    0,  224,  234,  213,  232,  233,  246,  238,
+      257,  230,  237,  245,    0,    0,  254,    0,  259,  267,
+      248,  270,  286,  272,  277,  273,  280,  297,  290,  299,
+
+      294,    0,  308,  305,  291,  293,  355,  310,   75,  324,
+        0,  315,  329,    0,  321,  320,  323,  329,  344,  345,
+      338,  348,  330,  341,  352,  352,  352,  378,   71,  348,
+      348,  371,  355,  351,  367,  375,  367,  387,  372,  386,
+        0,  386,  379,    0,  397,  387,  378,  382,  392,    0,
+      405,  392,  405,  403,    0,  400,  408,  420,  415,  421,
+      422,  425,  423,  429,  438,  435,  440,  445,  444,  430,
+      445,  435,  440,  446,  443,  461,    0,  446,    0,    0,
+      460,   66,    0,  459,  464,  472,  461,  458,  477,  465,
+        0,  465,    0,  467,    0,  474,  474,  483,  475,  486,
+
+        0,  489,    0,    0,  486,  491,  497,  487,  491,  498,
+      495,  513,  502,  504,    0,    0,    0,  537,  521,  514,
+      522,  515,  517,  517,  523,  518,    0,  535,  533,    0,
+      534,  540,    0,    0,    0,  535,  851,  543,  537,  535,
+        0,    0,    0,  537,  538,    0,  545,    0,  543,  550,
+      551,  552,  561,  559,  558,    0,    0,  576,  566,  620,
+       63,    0,  567,  576,    0,    0,  577,  576,  573,    0,
+      583,  581,    0,    0,    0,    0,  593,  592,    0,  594,
+        0,    0,  583,  585,    0,    0,    0,  601,    0,    0,
+      595,  602,  601,    0,    0,  602,  598,  624,  610,  611,
+
+      630,  633,  617,  614,  614,  640,  619,  624,  635,  626,
+        0,  638,    0,    0,    0,  639,  645,    0,    0,  646,
+      664,  654,  669,  851,  670,  659,    0,  660,  664,  666,
+      680,  668,  684,    0,  684,  669,  702,  690,  676,    0,
+      680,  689,  720,   36,  689,  699,  698,  702,  734,  715,
+      708,  740,  744,  719,  729,  722,  720,  727,  754,  726,
+      758,  735,    0,  766,   33,  738,    0,  851,  830,   80,
+      832,  834,  838,  840,  845
     } ;
 
-static const flex_int16_t yy_def[375] =
+static const flex_int16_t yy_def[376] =
     {   0,
-      367,    1,  367,  367,  367,  367,  367,  368,  369,  367,
-      367,  367,  367,  367,  367,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  367,  367,  370,  367,  367,
-      367,  367,  368,  367,  371,  367,  367,  367,  367,  367,
-      367,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-
-      370,  370,  370,  370,  367,  367,  367,  370,  371,  367,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  367,  367,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  367,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  372,
-      367,  370,  370,  370,  370,  367,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  367,  370,  370,  370,  370,  370,  370,  370,
-      370,  373,  370,  370,  370,  367,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  367,  367,
-      370,  370,  370,  370,  370,  367,  370,  370,  370,  370,
-      370,  370,  373,  370,  370,  370,  370,  370,  370,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  367,
-      367,  367,  370,  370,  367,  370,  370,  370,  370,  370,
-
-      370,  370,  370,  370,  370,  367,  367,  367,  367,  370,
-      370,  370,  370,  370,  370,  370,  370,  370,  370,  367,
-      367,  367,  367,  370,  370,  370,  370,  367,  367,  367,
-      367,  370,  370,  370,  367,  367,  367,  367,  370,  370,
-      367,  367,  367,  367,  367,  367,  370,  367,  367,  367,
-      367,  367,  370,  367,  367,  370,  367,  367,  370,  374,
-      370,  374,  374,  374,  370,  370,    0,  367,  367,  367,
-      367,  367,  367,  367
+      368,    1,  368,  368,  368,  368,  368,  369,  370,  368,
+      368,  368,  368,  368,  368,  368,  371,  371,  371,  371,
+      371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
+      371,  371,  371,  371,  371,  371,  368,  368,  371,  368,
+      368,  368,  368,  369,  368,  372,  368,  368,  368,  368,
+      368,  368,  368,  371,  371,  371,  371,  371,  371,  371,
+      371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
+      371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
+      371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
+      371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
+
+      371,  371,  371,  371,  371,  371,  368,  368,  368,  371,
+      372,  371,  371,  371,  371,  371,  371,  371,  371,  371,
+      371,  371,  371,  371,  371,  371,  371,  368,  368,  371,
+      371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
+      371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
+      371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
+      371,  371,  371,  371,  371,  371,  371,  371,  368,  371,
+      371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
+      373,  368,  371,  371,  371,  371,  368,  371,  371,  371,
+      371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
+
+      371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
+      371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
+      371,  371,  371,  368,  371,  371,  371,  371,  371,  371,
+      371,  371,  374,  371,  371,  371,  368,  371,  371,  371,
+      371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
+      371,  371,  371,  371,  371,  371,  371,  371,  371,  368,
+      368,  371,  371,  371,  371,  371,  368,  371,  371,  371,
+      371,  371,  371,  374,  371,  371,  371,  371,  371,  371,
+      371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
+      368,  368,  368,  371,  371,  368,  371,  371,  371,  371,
+
+      371,  371,  371,  371,  371,  371,  368,  368,  368,  368,
+      371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
+      368,  368,  368,  368,  371,  371,  371,  371,  368,  368,
+      368,  368,  371,  371,  371,  368,  368,  368,  368,  371,
+      371,  368,  368,  368,  368,  368,  368,  371,  368,  368,
+      368,  368,  368,  371,  368,  368,  371,  368,  368,  371,
+      375,  371,  375,  375,  375,  371,  371,    0,  368,  368,
+      368,  368,  368,  368,  368
     } ;
 
-static const flex_int16_t yy_nxt[887] =
+static const flex_int16_t yy_nxt[916] =
     {   0,
-        4,    5,    6,    7,    5,    8,    9,   10,   11,    4,
-       12,   13,   14,   15,   16,   17,   18,   19,   20,   21,
-       22,   23,   24,   25,   25,   26,   27,   28,   29,   30,
-       31,   32,   33,   25,   25,   34,   35,   25,   16,   17,
-       18,   19,   20,   21,   22,   23,   24,   25,   26,   27,
-       28,   29,   30,   31,   32,   33,   25,   25,   34,   35,
-       25,    4,   36,   37,   47,   48,   37,   40,   41,   41,
-       40,   49,   50,   53,   56,   57,   60,   54,   70,   66,
-       61,   38,   58,   45,   63,   55,   64,   67,   68,   59,
-       62,   69,   90,   47,   48,   65,  104,   53,   56,   57,
-
-       60,   54,   70,   66,   61,   38,   58,   63,   55,   64,
-       67,   68,   59,   62,   69,   74,   90,   71,   65,  104,
-      111,  113,   77,   75,   39,   72,   78,   80,   42,   76,
-       73,  105,   41,   41,  105,  112,   79,   81,  114,   74,
-      363,   71,   82,  342,  111,  113,   77,   75,   72,  106,
-       78,   80,   76,   73,  101,  102,   83,  116,  112,   79,
-       81,  103,  114,   87,   84,   82,   85,   86,   88,  259,
-      115,   89,  180,  106,  127,  117,  110,  122,  101,  102,
-       83,  116,  118,  119,  103,  105,   87,   84,  110,   85,
-       86,   88,  107,  115,   89,   91,  108,   92,  117,   97,
-
-       93,  122,   98,   99,   66,  118,  119,   94,   95,  100,
-      120,   96,   67,   40,   41,   41,   40,  121,  123,   91,
-      108,   92,  124,   97,   93,  125,   98,   99,   66,  126,
-       94,   95,  100,  120,   96,   67,  127,  129,  132,  127,
-      121,  133,  123,  130,  131,  134,  124,  135,  136,  125,
-       44,  145,  126,  137,  138,  142,  140,   40,  143,  139,
-      129,  144,  132,  146,  133,  149,  130,  131,  134,  147,
-      135,  154,  136,  141,   42,  145,  137,  138,  142,  148,
-      140,  143,  139,  150,  144,  155,  151,  146,  149,  152,
-      156,  157,  153,  147,  154,  158,  141,  128,  159,  160,
-
-      105,  161,  148,  162,   40,  164,  150,  163,  155,  151,
-      165,  166,  152,  156,  157,  153,  167,  168,  169,  158,
-      170,  159,  171,  160,  161,  172,  173,  162,  164,  174,
-      176,  163,  175,  165,  166,  105,   41,   41,  105,  167,
-      177,  168,  169,  170,  178,  179,  171,  180,  172,  173,
-      180,  182,  174,  106,  176,  175,  183,  184,  185,  127,
-      187,  189,  127,  188,  177,  191,  192,  178,  193,  179,
-      195,  190,  197,  194,  182,  196,  198,  106,  199,  183,
-      184,  200,  185,  201,  187,  189,  188,  202,  191,  192,
-      186,  203,  193,  195,  190,  197,  107,  194,  204,  196,
-
-      198,  205,  199,  206,  200,  207,  208,  201,  181,  209,
-      202,  210,  211,  186,  203,  212,   51,  213,  214,  215,
-      128,  204,  216,  219,  205,  217,  218,  206,  207,  220,
-      208,  221,  209,  222,  210,  211,  223,   46,  224,  212,
-      213,  214,  215,  225,   44,  226,  216,  219,  217,  218,
-      227,  228,  229,  220,  230,  221,  231,  222,  233,  180,
-      223,  224,  180,  234,  235,  367,  236,  225,  226,  237,
-      238,  367,  239,  227,  228,  229,  240,  241,  230,  231,
-      242,  243,  233,  246,  244,  247,  248,  234,  235,  236,
-      249,  250,  237,  245,  238,  239,  252,  251,  256,  240,
-
-      241,  253,  254,  242,  255,  243,  246,  257,  244,  247,
-      248,  258,  261,  263,  249,  250,  245,  262,  264,  252,
-      181,  251,  256,  259,  253,  254,  259,  255,  265,  266,
-      257,  267,  268,  269,  258,  270,  261,  263,  271,  272,
-      262,  264,  274,  275,  367,  276,  277,  278,  279,  280,
-      288,  265,  266,  281,  267,  268,  282,  269,  283,  270,
-      284,  297,  271,  272,  285,  274,  286,  275,  276,  277,
-      278,  279,  287,  280,  288,  289,  281,  259,  293,  282,
-      259,  283,  294,  284,  260,  297,  295,  285,  296,  286,
-      298,  367,  299,  300,  301,  287,  302,  306,  289,  303,
-
-      290,  293,  291,  304,  305,  294,  307,  309,  292,  295,
-      308,  296,  310,  311,  298,  299,  312,  300,  301,  313,
-      302,  306,  303,  290,  314,  291,  304,  305,  315,  307,
-      309,  292,  316,  317,  308,  310,  318,  311,  260,  312,
-      319,  328,  313,  320,  321,  322,  323,  324,  314,  325,
-      326,  327,  315,  330,  331,  316,  317,  329,  332,  318,
-      333,  334,  335,  336,  319,  328,  320,  321,  322,  323,
-      324,  337,  325,  326,  327,  338,  330,  339,  331,  340,
-      329,  341,  332,  333,  334,  335,  336,  342,  346,  344,
-      342,  347,  348,  342,  350,  337,  342,  351,  338,  352,
-
-      353,  339,  354,  340,  341,  345,  342,  355,  356,  342,
-      357,  346,  358,  344,  347,  348,  342,  350,  342,  342,
-      351,  342,  352,  353,  349,  367,  354,  359,  345,  360,
-      355,  367,  356,  342,  357,  358,  342,  361,  363,  365,
-      363,  363,  366,  363,  367,  367,  367,  349,  343,  367,
-      359,  367,  360,  367,  343,  367,  367,  367,  367,  367,
-      361,  367,  365,  367,  367,  366,  367,  343,  367,  367,
-      367,  367,  367,  367,  367,  367,  367,  343,  367,  343,
-      367,  367,  367,  367,  367,  367,  367,  367,  367,  367,
-      367,  367,  367,  367,  343,  367,  367,  367,  367,  364,
-
-      367,  364,   43,   43,  367,   43,   43,   52,   52,  109,
-      109,  232,  367,  367,  232,  273,  273,  362,  362,  367,
-      362,  362,    3,  367,  367,  367,  367,  367,  367,  367,
-      367,  367,  367,  367,  367,  367,  367,  367,  367,  367,
-      367,  367,  367,  367,  367,  367,  367,  367,  367,  367,
-      367,  367,  367,  367,  367,  367,  367,  367,  367,  367,
-      367,  367,  367,  367,  367,  367,  367,  367,  367,  367,
-      367,  367,  367,  367,  367,  367,  367,  367,  367,  367,
-      367,  367,  367,  367,  367,  367
+        4,    5,    6,    7,    5,    8,    9,   10,   11,   12,
+       13,   14,   15,   16,   17,   18,   19,   20,   21,   22,
+       23,   24,   25,   26,   26,   27,   28,   29,   30,   31,
+       32,   33,   34,   26,   26,   35,   36,   26,   17,   18,
+       19,   20,   21,   22,   23,   24,   25,   26,   27,   28,
+       29,   30,   31,   32,   33,   34,   26,   26,   35,   36,
+       26,    4,   37,   37,   38,   49,   50,   38,   41,   42,
+       42,   41,   51,   52,   55,   58,   59,   62,   56,   72,
+       68,   63,   39,   60,   46,   65,   57,   66,   69,   70,
+       61,   64,   71,   92,  364,  106,   67,  343,   55,   58,
+
+       59,   62,   56,   72,   68,   63,   39,   60,   65,   57,
+       66,   69,   70,   61,   64,   71,  112,   92,  106,   67,
+       73,   49,   50,   76,  260,   40,   40,  181,   74,   43,
+       43,   77,  128,   75,   79,   82,  107,   78,   80,   48,
+      112,   48,  113,  116,   73,   83,  114,   76,   81,   45,
+       84,   74,  115,   85,  117,   77,   75,  118,   79,   82,
+       78,   86,   80,   87,   88,  113,  116,   89,   83,  119,
+      114,   81,   90,   84,   41,   91,  115,   85,  117,  120,
+      118,  107,  121,   41,   86,  122,   87,   88,   53,   48,
+       89,  127,  119,   99,  123,   90,  100,  101,   91,   93,
+
+      124,   94,  120,  102,   95,  121,  103,  104,  122,  125,
+       47,   96,   97,  105,  127,   98,   45,   99,  123,  126,
+      100,  101,  368,   93,  124,   94,  102,  130,   95,  110,
+      103,  104,  368,  125,   96,   97,  105,   68,   98,  107,
+       42,   42,  107,  126,  134,   69,   41,   42,   42,   41,
+      130,  128,  133,  110,  128,  131,  132,  108,  368,  135,
+      136,   68,  137,  368,  138,  139,  143,  134,   69,  144,
+      140,  145,  146,  147,  141,  368,  133,  368,  131,  132,
+      150,  108,  135,  136,  368,  148,  137,  138,  139,  143,
+      368,  142,  144,  140,  145,  149,  146,  147,  141,  151,
+
+      109,  109,  152,  150,  155,  156,  157,   43,   43,  148,
+      158,  159,  129,  129,  142,  160,  153,  161,  149,  154,
+      162,  167,  151,  168,  169,  152,  163,  155,  156,  157,
+      164,  181,  165,  158,  181,  159,  368,  166,  160,  153,
+      170,  161,  154,  162,  167,  171,  168,  172,  169,  173,
+      163,  368,  174,  175,  164,  165,  107,   42,   42,  107,
+      166,  176,  177,  178,  170,  179,  180,  186,  171,  368,
+      188,  172,  173,  183,  108,  174,  175,  184,  185,  128,
+      189,  192,  128,  193,  176,  194,  177,  178,  179,  190,
+      180,  186,  182,  182,  188,  195,  183,  196,  108,  191,
+
+      184,  185,  197,  189,  192,  198,  193,  199,  200,  194,
+      187,  201,  202,  190,  203,  204,  205,  109,  109,  195,
+      196,  206,  191,  207,  368,  208,  197,  209,  198,  210,
+      211,  199,  200,  187,  201,  212,  202,  203,  204,  205,
+      129,  129,  213,  217,  206,  214,  215,  207,  208,  216,
+      218,  209,  210,  211,  219,  220,  221,  222,  212,  223,
+      224,  181,  225,  226,  181,  227,  213,  217,  214,  215,
+      228,  229,  216,  218,  230,  231,  234,  219,  232,  220,
+      221,  222,  235,  223,  224,  225,  236,  226,  227,  237,
+      238,  239,  244,  228,  229,  240,  241,  230,  242,  231,
+
+      234,  232,  243,  247,  248,  245,  235,  249,  250,  251,
+      236,  252,  237,  238,  246,  239,  244,  253,  240,  241,
+      254,  242,  182,  182,  255,  243,  247,  256,  248,  245,
+      257,  249,  250,  251,  258,  252,  259,  246,  260,  262,
+      253,  260,  263,  254,  264,  368,  265,  255,  266,  267,
+      256,  268,  269,  270,  257,  271,  272,  258,  273,  259,
+      275,  276,  281,  262,  277,  263,  278,  279,  264,  265,
+      280,  266,  267,  282,  268,  269,  368,  270,  283,  271,
+      272,  284,  273,  275,  285,  276,  281,  277,  286,  278,
+      279,  287,  288,  280,  289,  298,  282,  290,  299,  261,
+
+      261,  283,  294,  295,  284,  296,  297,  285,  300,  301,
+      302,  286,  303,  307,  287,  288,  304,  305,  289,  298,
+      290,  260,  299,  309,  260,  294,  295,  306,  296,  297,
+      308,  300,  310,  301,  302,  311,  303,  307,  312,  304,
+      305,  313,  314,  317,  291,  318,  292,  309,  315,  316,
+      306,  319,  293,  308,  320,  310,  321,  322,  311,  368,
+      368,  323,  312,  324,  313,  314,  317,  291,  318,  292,
+      325,  326,  315,  316,  319,  293,  327,  328,  320,  321,
+      322,  329,  261,  261,  323,  331,  324,  332,  333,  368,
+      334,  335,  336,  325,  326,  337,  339,  330,  338,  327,
+
+      328,  340,  341,  343,  342,  329,  343,  345,  331,  347,
+      348,  332,  333,  334,  335,  336,  349,  351,  337,  339,
+      330,  343,  338,  346,  343,  340,  341,  342,  352,  368,
+      353,  345,  347,  348,  354,  343,  355,  357,  343,  349,
+      351,  343,  368,  356,  343,  343,  346,  358,  343,  359,
+      360,  352,  350,  353,  361,  343,  362,  354,  343,  364,
+      355,  357,  364,  366,  344,  344,  356,  364,  367,  368,
+      364,  358,  359,  360,  368,  350,  368,  361,  368,  362,
+      368,  368,  344,  344,  368,  368,  366,  368,  368,  368,
+      368,  367,  368,  368,  368,  368,  344,  344,  368,  368,
+
+      368,  368,  344,  344,  368,  368,  344,  344,  368,  368,
+      368,  368,  368,  368,  368,  368,  344,  344,  368,  368,
+      365,  365,  368,  368,  368,  368,  368,  368,  365,  365,
+       44,   44,  368,   44,   44,   54,   54,  111,  111,  233,
+      368,  368,  233,  274,  274,  363,  363,  368,  363,  363,
+        3,  368,  368,  368,  368,  368,  368,  368,  368,  368,
+      368,  368,  368,  368,  368,  368,  368,  368,  368,  368,
+      368,  368,  368,  368,  368,  368,  368,  368,  368,  368,
+      368,  368,  368,  368,  368,  368,  368,  368,  368,  368,
+      368,  368,  368,  368,  368,  368,  368,  368,  368,  368,
+
+      368,  368,  368,  368,  368,  368,  368,  368,  368,  368,
+      368,  368,  368,  368,  368
     } ;
 
-static const flex_int16_t yy_chk[887] =
+static const flex_int16_t yy_chk[916] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -695,97 +699,101 @@ static const flex_int16_t yy_chk[887] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    2,   12,   12,    2,    5,    5,    5,
-        5,   13,   13,   16,   17,   18,   19,   16,   23,   21,
-       19,    2,   18,  369,   20,   16,   20,   21,   22,   18,
-       19,   22,   31,   48,   48,   20,   35,   16,   17,   18,
-
-       19,   16,   23,   21,   19,    2,   18,   20,   16,   20,
-       21,   22,   18,   19,   22,   26,   31,   24,   20,   35,
-       53,   55,   27,   26,    2,   24,   27,   28,    5,   26,
-       24,   37,   37,   37,   37,   54,   27,   28,   56,   26,
-      364,   24,   28,  343,   53,   55,   27,   26,   24,   37,
-       27,   28,   26,   24,   34,   34,   29,   58,   54,   27,
-       28,   34,   56,   30,   29,   28,   29,   29,   30,  260,
-       57,   30,  181,   37,  128,   59,  110,   64,   34,   34,
-       29,   58,   60,   61,   34,  107,   30,   29,   47,   29,
-       29,   30,   37,   57,   30,   32,   38,   32,   59,   33,
-
-       32,   64,   33,   33,   38,   60,   61,   32,   32,   33,
-       62,   32,   38,   40,   40,   40,   40,   63,   65,   32,
-       38,   32,   66,   33,   32,   67,   33,   33,   38,   68,
-       32,   32,   33,   62,   32,   38,   69,   70,   73,   69,
-       63,   74,   65,   72,   72,   75,   66,   76,   77,   67,
-       43,   85,   68,   78,   78,   80,   79,   42,   81,   78,
-       70,   82,   73,   87,   74,   89,   72,   72,   75,   88,
-       76,   92,   77,   79,   40,   85,   78,   78,   80,   88,
-       79,   81,   78,   90,   82,   93,   90,   87,   89,   91,
-       94,   95,   91,   88,   92,   96,   79,   69,   97,   98,
-
-       39,   99,   88,  101,   36,  102,   90,  101,   93,   90,
-      102,  103,   91,   94,   95,   91,  104,  106,  108,   96,
-      111,   97,  112,   98,   99,  114,  115,  101,  102,  116,
-      118,  101,  117,  102,  103,  105,  105,  105,  105,  104,
-      119,  106,  108,  111,  120,  121,  112,  122,  114,  115,
-      122,  123,  116,  105,  118,  117,  124,  125,  126,  127,
-      129,  131,  127,  130,  119,  132,  133,  120,  134,  121,
-      136,  131,  138,  135,  123,  137,  139,  105,  141,  124,
-      125,  142,  126,  144,  129,  131,  130,  145,  132,  133,
-      127,  146,  134,  136,  131,  138,  105,  135,  147,  137,
-
-      139,  148,  141,  150,  142,  151,  152,  144,  122,  153,
-      145,  155,  156,  127,  146,  157,   15,  158,  159,  160,
-      127,  147,  161,  164,  148,  162,  163,  150,  151,  165,
-      152,  166,  153,  167,  155,  156,  168,   11,  169,  157,
-      158,  159,  160,  170,    8,  171,  161,  164,  162,  163,
-      172,  173,  174,  165,  175,  166,  177,  167,  183,  180,
-      168,  169,  180,  184,  185,    3,  186,  170,  171,  187,
-      188,    0,  189,  172,  173,  174,  191,  193,  175,  177,
-      195,  196,  183,  198,  197,  199,  201,  184,  185,  186,
-      204,  205,  187,  197,  188,  189,  207,  206,  211,  191,
-
-      193,  208,  209,  195,  210,  196,  198,  212,  197,  199,
-      201,  213,  218,  220,  204,  205,  197,  219,  221,  207,
-      180,  206,  211,  217,  208,  209,  217,  210,  222,  223,
-      212,  224,  225,  227,  213,  228,  218,  220,  230,  231,
-      219,  221,  235,  237,    0,  238,  239,  243,  244,  246,
-      257,  222,  223,  248,  224,  225,  249,  227,  250,  228,
-      251,  268,  230,  231,  252,  235,  253,  237,  238,  239,
-      243,  244,  254,  246,  257,  258,  248,  259,  262,  249,
-      259,  250,  263,  251,  217,  268,  266,  252,  267,  253,
-      270,    0,  271,  276,  277,  254,  279,  290,  258,  282,
-
-      259,  262,  259,  283,  287,  263,  291,  295,  259,  266,
-      292,  267,  296,  297,  270,  271,  298,  276,  277,  299,
-      279,  290,  282,  259,  300,  259,  283,  287,  301,  291,
-      295,  259,  302,  303,  292,  296,  304,  297,  259,  298,
-      305,  320,  299,  306,  307,  308,  309,  311,  300,  315,
-      316,  319,  301,  321,  322,  302,  303,  320,  324,  304,
-      325,  327,  328,  329,  305,  320,  306,  307,  308,  309,
-      311,  330,  315,  316,  319,  331,  321,  332,  322,  334,
-      320,  335,  324,  325,  327,  328,  329,  336,  338,  337,
-      336,  340,  341,  342,  344,  330,  342,  345,  331,  346,
-
-      347,  332,  349,  334,  335,  337,  348,  350,  353,  348,
-      354,  338,  355,  337,  340,  341,  351,  344,  352,  351,
-      345,  352,  346,  347,  342,    0,  349,  356,  337,  357,
-      350,    0,  353,  358,  354,  355,  358,  359,  360,  361,
-      363,  360,  365,  363,    0,    0,    0,  342,  336,    0,
-      356,    0,  357,    0,  342,    0,    0,    0,    0,    0,
-      359,    0,  361,    0,    0,  365,    0,  348,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  351,    0,  352,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  358,    0,    0,    0,    0,  360,
-
-        0,  363,  368,  368,    0,  368,  368,  370,  370,  371,
-      371,  372,    0,    0,  372,  373,  373,  374,  374,    0,
-      374,  374,  367,  367,  367,  367,  367,  367,  367,  367,
-      367,  367,  367,  367,  367,  367,  367,  367,  367,  367,
-      367,  367,  367,  367,  367,  367,  367,  367,  367,  367,
-      367,  367,  367,  367,  367,  367,  367,  367,  367,  367,
-      367,  367,  367,  367,  367,  367,  367,  367,  367,  367,
-      367,  367,  367,  367,  367,  367,  367,  367,  367,  367,
-      367,  367,  367,  367,  367,  367
+        1,    1,    1,    1,    2,   13,   13,    2,    5,    5,
+        5,    5,   14,   14,   17,   18,   19,   20,   17,   24,
+       22,   20,    2,   19,  370,   21,   17,   21,   22,   23,
+       19,   20,   23,   32,  365,   36,   21,  344,   17,   18,
+
+       19,   20,   17,   24,   22,   20,    2,   19,   21,   17,
+       21,   22,   23,   19,   20,   23,   55,   32,   36,   21,
+       25,   50,   50,   27,  261,    2,    2,  182,   25,    5,
+        5,   27,  129,   25,   28,   29,  109,   27,   28,   49,
+       55,   48,   56,   59,   25,   29,   57,   27,   28,   44,
+       29,   25,   58,   30,   60,   27,   25,   61,   28,   29,
+       27,   30,   28,   30,   30,   56,   59,   31,   29,   62,
+       57,   28,   31,   29,   43,   31,   58,   30,   60,   63,
+       61,   40,   64,   37,   30,   65,   30,   30,   16,   12,
+       31,   70,   62,   34,   66,   31,   34,   34,   31,   33,
+
+       67,   33,   63,   34,   33,   64,   35,   35,   65,   68,
+       11,   33,   33,   35,   70,   33,    8,   34,   66,   69,
+       34,   34,    3,   33,   67,   33,   34,   72,   33,   39,
+       35,   35,    0,   68,   33,   33,   35,   39,   33,   38,
+       38,   38,   38,   69,   76,   39,   41,   41,   41,   41,
+       72,   71,   75,   39,   71,   74,   74,   38,    0,   77,
+       78,   39,   79,    0,   80,   80,   82,   76,   39,   83,
+       80,   84,   87,   89,   81,    0,   75,    0,   74,   74,
+       91,   38,   77,   78,    0,   90,   79,   80,   80,   82,
+        0,   81,   83,   80,   84,   90,   87,   89,   81,   92,
+
+       38,   38,   92,   91,   94,   95,   96,   41,   41,   90,
+       97,   98,   71,   71,   81,   99,   93,  100,   90,   93,
+      101,  105,   92,  106,  108,   92,  103,   94,   95,   96,
+      103,  123,  104,   97,  123,   98,    0,  104,   99,   93,
+      110,  100,   93,  101,  105,  112,  106,  113,  108,  115,
+      103,    0,  116,  117,  103,  104,  107,  107,  107,  107,
+      104,  118,  119,  120,  110,  121,  122,  127,  112,    0,
+      130,  113,  115,  124,  107,  116,  117,  125,  126,  128,
+      131,  133,  128,  134,  118,  135,  119,  120,  121,  132,
+      122,  127,  123,  123,  130,  136,  124,  137,  107,  132,
+
+      125,  126,  138,  131,  133,  139,  134,  140,  142,  135,
+      128,  143,  145,  132,  146,  147,  148,  107,  107,  136,
+      137,  149,  132,  151,    0,  152,  138,  153,  139,  154,
+      156,  140,  142,  128,  143,  157,  145,  146,  147,  148,
+      128,  128,  158,  162,  149,  159,  160,  151,  152,  161,
+      163,  153,  154,  156,  164,  165,  166,  167,  157,  168,
+      169,  181,  170,  171,  181,  172,  158,  162,  159,  160,
+      173,  174,  161,  163,  175,  176,  184,  164,  178,  165,
+      166,  167,  185,  168,  169,  170,  186,  171,  172,  187,
+      188,  189,  197,  173,  174,  190,  192,  175,  194,  176,
+
+      184,  178,  196,  199,  200,  198,  185,  202,  205,  206,
+      186,  207,  187,  188,  198,  189,  197,  208,  190,  192,
+      209,  194,  181,  181,  210,  196,  199,  211,  200,  198,
+      212,  202,  205,  206,  213,  207,  214,  198,  218,  219,
+      208,  218,  220,  209,  221,    0,  222,  210,  223,  224,
+      211,  225,  226,  228,  212,  229,  231,  213,  232,  214,
+      236,  238,  247,  219,  239,  220,  240,  244,  221,  222,
+      245,  223,  224,  249,  225,  226,    0,  228,  250,  229,
+      231,  251,  232,  236,  252,  238,  247,  239,  253,  240,
+      244,  254,  255,  245,  258,  269,  249,  259,  271,  218,
+
+      218,  250,  263,  264,  251,  267,  268,  252,  272,  277,
+      278,  253,  280,  291,  254,  255,  283,  284,  258,  269,
+      259,  260,  271,  293,  260,  263,  264,  288,  267,  268,
+      292,  272,  296,  277,  278,  297,  280,  291,  298,  283,
+      284,  299,  300,  303,  260,  304,  260,  293,  301,  302,
+      288,  305,  260,  292,  306,  296,  307,  308,  297,    0,
+        0,  309,  298,  310,  299,  300,  303,  260,  304,  260,
+      312,  316,  301,  302,  305,  260,  317,  320,  306,  307,
+      308,  321,  260,  260,  309,  322,  310,  323,  325,    0,
+      326,  328,  329,  312,  316,  330,  332,  321,  331,  317,
+
+      320,  333,  335,  337,  336,  321,  337,  338,  322,  339,
+      341,  323,  325,  326,  328,  329,  342,  345,  330,  332,
+      321,  343,  331,  338,  343,  333,  335,  336,  346,    0,
+      347,  338,  339,  341,  348,  349,  350,  354,  349,  342,
+      345,  352,    0,  351,  352,  353,  338,  355,  353,  356,
+      357,  346,  343,  347,  358,  359,  360,  348,  359,  361,
+      350,  354,  361,  362,  337,  337,  351,  364,  366,    0,
+      364,  355,  356,  357,    0,  343,    0,  358,    0,  360,
+        0,    0,  343,  343,    0,    0,  362,    0,    0,    0,
+        0,  366,    0,    0,    0,    0,  349,  349,    0,    0,
+
+        0,    0,  352,  352,    0,    0,  353,  353,    0,    0,
+        0,    0,    0,    0,    0,    0,  359,  359,    0,    0,
+      361,  361,    0,    0,    0,    0,    0,    0,  364,  364,
+      369,  369,    0,  369,  369,  371,  371,  372,  372,  373,
+        0,    0,  373,  374,  374,  375,  375,    0,  375,  375,
+      368,  368,  368,  368,  368,  368,  368,  368,  368,  368,
+      368,  368,  368,  368,  368,  368,  368,  368,  368,  368,
+      368,  368,  368,  368,  368,  368,  368,  368,  368,  368,
+      368,  368,  368,  368,  368,  368,  368,  368,  368,  368,
+      368,  368,  368,  368,  368,  368,  368,  368,  368,  368,
+
+      368,  368,  368,  368,  368,  368,  368,  368,  368,  368,
+      368,  368,  368,  368,  368
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -904,8 +912,8 @@ static Common::String *readUntilNewline(const char **ptr) {
 	return res;
 }
 
-#line 908 "engines/director/lingo/lingo-lex.cpp"
-#line 909 "engines/director/lingo/lingo-lex.cpp"
+#line 915 "engines/director/lingo/lingo-lex.cpp"
+#line 916 "engines/director/lingo/lingo-lex.cpp"
 
 #define INITIAL 0
 
@@ -1126,7 +1134,7 @@ YY_DECL
 #line 169 "engines/director/lingo/lingo-lex.l"
 
 
-#line 1130 "engines/director/lingo/lingo-lex.cpp"
+#line 1137 "engines/director/lingo/lingo-lex.cpp"
 
 	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
@@ -1154,13 +1162,13 @@ yy_match:
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 368 )
+				if ( yy_current_state >= 369 )
 					yy_c = yy_meta[yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 367 );
+		while ( yy_current_state != 368 );
 		yy_cp = (yy_last_accepting_cpos);
 		yy_current_state = (yy_last_accepting_state);
 
@@ -1679,7 +1687,7 @@ YY_RULE_SETUP
 #line 305 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1683 "engines/director/lingo/lingo-lex.cpp"
+#line 1690 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -1978,7 +1986,7 @@ static int yy_get_next_buffer (void)
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 368 )
+			if ( yy_current_state >= 369 )
 				yy_c = yy_meta[yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -2006,11 +2014,11 @@ static int yy_get_next_buffer (void)
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 368 )
+		if ( yy_current_state >= 369 )
 			yy_c = yy_meta[yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-	yy_is_jam = (yy_current_state == 367);
+	yy_is_jam = (yy_current_state == 368);
 
 		return yy_is_jam ? 0 : yy_current_state;
 }
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index 66213882f6f..a15bb5f9af3 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -157,7 +157,7 @@ static Common::String *readUntilNewline(const char **ptr) {
 %}
 
 identifier [_[:alpha:]][_\.[:alnum:]]*
-constfloat [[:digit:]]+\.[[:digit:]]*
+constfloat [[:digit:]]*\.[[:digit:]]*
 constinteger [[:digit:]]+
 conststring \"[^\"\r\n]*\"
 operator [-+*/%^:,()><&\[\]]
diff --git a/engines/director/lingo/tests/math.lingo b/engines/director/lingo/tests/math.lingo
index 94ce5eccddf..bb04709fafa 100644
--- a/engines/director/lingo/tests/math.lingo
+++ b/engines/director/lingo/tests/math.lingo
@@ -11,6 +11,10 @@ put cos(z2)
 set x = 2 + 3 * (4 / 2)
 put x
 
+set x = .5 + .5 + 1.5
+put x
+scummvmAssertEqual(x, 2.5)
+
 put power(2, 8)
 put power(2, 8, 0)
 put power(2)




More information about the Scummvm-git-logs mailing list