[VBSCRIPT] Sync with Wine Staging 1.7.37. CORE-9246
authorAmine Khaldi <amine.khaldi@reactos.org>
Sat, 25 Apr 2015 11:03:05 +0000 (11:03 +0000)
committerAmine Khaldi <amine.khaldi@reactos.org>
Sat, 25 Apr 2015 11:03:05 +0000 (11:03 +0000)
svn path=/trunk/; revision=67402

reactos/dll/win32/vbscript/compile.c
reactos/dll/win32/vbscript/global.c
reactos/dll/win32/vbscript/interp.c
reactos/dll/win32/vbscript/parse.h
reactos/dll/win32/vbscript/parser.tab.c
reactos/dll/win32/vbscript/parser.y
reactos/dll/win32/vbscript/vbscript.h
reactos/media/doc/README.WINE

index 4251bb2..3a816ab 100644 (file)
@@ -515,6 +515,8 @@ static HRESULT compile_expression(compile_ctx_t *ctx, expression_t *expr)
         return compile_binary_expression(ctx, (binary_expression_t*)expr, OP_nequal);
     case EXPR_NEW:
         return push_instr_str(ctx, OP_new, ((string_expression_t*)expr)->value);
+    case EXPR_NOARG:
+        return push_instr_int(ctx, OP_hres, DISP_E_PARAMNOTFOUND);
     case EXPR_NOT:
         return compile_unary_expression(ctx, (unary_expression_t*)expr, OP_not);
     case EXPR_NOTHING:
index a3d01d5..c3e6f62 100644 (file)
@@ -19,6 +19,7 @@
 #include "vbscript.h"
 
 #include <math.h>
+#include <wingdi.h>
 #include <mshtmhst.h>
 
 #define round(x) (((x) < 0) ? (int)((x) - 0.5) : (int)((x) + 0.5))
@@ -106,9 +107,6 @@ static HRESULT return_short(VARIANT *res, short val)
 
 static HRESULT return_int(VARIANT *res, int val)
 {
-    if((short)val == val)
-        return return_short(res, val);
-
     if(res) {
         V_VT(res) = VT_I4;
         V_I4(res) = val;
@@ -127,6 +125,16 @@ static inline HRESULT return_double(VARIANT *res, double val)
     return S_OK;
 }
 
+static inline HRESULT return_float(VARIANT *res, float val)
+{
+    if(res) {
+        V_VT(res) = VT_R4;
+        V_R4(res) = val;
+    }
+
+    return S_OK;
+}
+
 static inline HRESULT return_null(VARIANT *res)
 {
     if(res)
@@ -196,11 +204,12 @@ static HRESULT set_object_site(script_ctx_t *ctx, IUnknown *obj)
         return S_OK;
 
     ax_site = create_ax_site(ctx);
-    if(ax_site)
+    if(ax_site) {
         hres = IObjectWithSite_SetSite(obj_site, ax_site);
+        IUnknown_Release(ax_site);
+    }
     else
         hres = E_OUTOFMEMORY;
-    IUnknown_Release(ax_site);
     IObjectWithSite_Release(obj_site);
     return hres;
 }
@@ -411,9 +420,7 @@ static HRESULT Global_CLng(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARI
     if(!res)
         return DISP_E_BADVARTYPE;
 
-    V_VT(res) = VT_I4;
-    V_I4(res) = i;
-    return S_OK;
+    return return_int(res, i);
 }
 
 static HRESULT Global_CBool(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
@@ -759,8 +766,13 @@ static HRESULT Global_Rnd(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIA
 
 static HRESULT Global_Timer(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
 {
-    FIXME("\n");
-    return E_NOTIMPL;
+    SYSTEMTIME lt;
+    double sec;
+
+    GetLocalTime(&lt);
+    sec = lt.wHour * 3600 + lt.wMinute * 60 + lt.wSecond + lt.wMilliseconds / 1000.0;
+    return return_float(res, sec);
+
 }
 
 static HRESULT Global_LBound(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
@@ -777,8 +789,24 @@ static HRESULT Global_UBound(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VA
 
 static HRESULT Global_RGB(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
 {
-    FIXME("\n");
-    return E_NOTIMPL;
+    HRESULT hres;
+    int i, color[3];
+
+    TRACE("%s %s %s\n", debugstr_variant(arg), debugstr_variant(arg + 1), debugstr_variant(arg + 2));
+
+    assert(args_cnt == 3);
+
+    for(i = 0; i < 3; i++) {
+        hres = to_int(arg + i, color + i);
+        if(FAILED(hres))
+            return hres;
+        if(color[i] > 255)
+            color[i] = 255;
+        if(color[i] < 0)
+            return MAKE_VBSERROR(VBSE_ILLEGAL_FUNC_CALL);
+    }
+
+    return return_int(res, RGB(color[0], color[1], color[2]));
 }
 
 static HRESULT Global_Len(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
@@ -1745,10 +1773,64 @@ static HRESULT Global_StrReverse(vbdisp_t *This, VARIANT *arg, unsigned args_cnt
     return return_bstr(res, ret);
 }
 
-static HRESULT Global_InStrRev(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
+static HRESULT Global_InStrRev(vbdisp_t *This, VARIANT *args, unsigned args_cnt, VARIANT *res)
 {
-    FIXME("\n");
-    return E_NOTIMPL;
+    int start, ret = 0;
+    BSTR str1, str2;
+    HRESULT hres;
+
+    TRACE("%s %s arg_cnt=%u\n", debugstr_variant(args), debugstr_variant(args+1), args_cnt);
+
+    if(args_cnt > 3) {
+        FIXME("Unsupported args\n");
+        return E_NOTIMPL;
+    }
+
+    assert(2 <= args_cnt && args_cnt <= 4);
+
+    if(V_VT(args) == VT_NULL || V_VT(args+1) == VT_NULL || V_VT(args+2) == VT_NULL)
+        return MAKE_VBSERROR(VBSE_ILLEGAL_NULL_USE);
+
+    hres = to_string(args, &str1);
+    if(FAILED(hres))
+        return hres;
+
+    hres = to_string(args+1, &str2);
+    if(SUCCEEDED(hres)) {
+        if(args_cnt > 2) {
+            hres = to_int(args+2, &start);
+            if(SUCCEEDED(hres) && start <= 0) {
+                FIXME("Unsupported start %d\n", start);
+                hres = E_NOTIMPL;
+            }
+        }else {
+            start = SysStringLen(str1);
+        }
+    } else {
+        str2 = NULL;
+    }
+
+    if(SUCCEEDED(hres)) {
+        const WCHAR *ptr;
+        size_t len;
+
+        len = SysStringLen(str2);
+        if(start >= len && start <= SysStringLen(str1)) {
+            for(ptr = str1+start-SysStringLen(str2); ptr >= str1; ptr--) {
+                if(!memcmp(ptr, str2, len*sizeof(WCHAR))) {
+                    ret = ptr-str1+1;
+                    break;
+                }
+            }
+        }
+    }
+
+    SysFreeString(str1);
+    SysFreeString(str2);
+    if(FAILED(hres))
+        return hres;
+
+    return return_int(res, ret);
 }
 
 static HRESULT Global_LoadPicture(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
@@ -1772,12 +1854,7 @@ static HRESULT Global_ScriptEngineMajorVersion(vbdisp_t *This, VARIANT *arg, uns
 
     assert(args_cnt == 0);
 
-    if(res) {
-        V_VT(res) = VT_I4;
-        V_I4(res) = VBSCRIPT_MAJOR_VERSION;
-    }
-
-    return S_OK;
+    return return_int(res, VBSCRIPT_MAJOR_VERSION);
 }
 
 static HRESULT Global_ScriptEngineMinorVersion(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
@@ -1786,12 +1863,7 @@ static HRESULT Global_ScriptEngineMinorVersion(vbdisp_t *This, VARIANT *arg, uns
 
     assert(args_cnt == 0);
 
-    if(res) {
-        V_VT(res) = VT_I4;
-        V_I4(res) = VBSCRIPT_MINOR_VERSION;
-    }
-
-    return S_OK;
+    return return_int(res, VBSCRIPT_MINOR_VERSION);
 }
 
 static HRESULT Global_ScriptEngineBuildVersion(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
@@ -1800,12 +1872,7 @@ static HRESULT Global_ScriptEngineBuildVersion(vbdisp_t *This, VARIANT *arg, uns
 
     assert(args_cnt == 0);
 
-    if(res) {
-        V_VT(res) = VT_I4;
-        V_I4(res) = VBSCRIPT_BUILD_VERSION;
-    }
-
-    return S_OK;
+    return return_int(res, VBSCRIPT_BUILD_VERSION);
 }
 
 static HRESULT Global_FormatNumber(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
index aae6758..eea4ccd 100644 (file)
@@ -1360,6 +1360,18 @@ static HRESULT interp_nothing(exec_ctx_t *ctx)
     return stack_push(ctx, &v);
 }
 
+static HRESULT interp_hres(exec_ctx_t *ctx)
+{
+    const unsigned arg = ctx->instr->arg1.uint;
+    VARIANT v;
+
+    TRACE("%d\n", arg);
+
+    V_VT(&v) = VT_ERROR;
+    V_ERROR(&v) = arg;
+    return stack_push(ctx, &v);
+}
+
 static HRESULT interp_not(exec_ctx_t *ctx)
 {
     variant_val_t val;
index 2a49703..f0479b5 100644 (file)
@@ -42,6 +42,7 @@ typedef enum {
     EXPR_NEG,
     EXPR_NEQUAL,
     EXPR_NEW,
+    EXPR_NOARG, /* not a real expression */
     EXPR_NOT,
     EXPR_NOTHING,
     EXPR_NULL,
index 212783a..367c7f3 100644 (file)
@@ -145,7 +145,10 @@ static const WCHAR propertyW[] = {'p','r','o','p','e','r','t','y',0};
 # define YYERROR_VERBOSE 0
 #endif
 
-
+/* In a future release of Bison, this section will be replaced
+   by #include "parser.tab.h".  */
+#ifndef YY_PARSER_PARSER_TAB_H_INCLUDED
+# define YY_PARSER_PARSER_TAB_H_INCLUDED
 /* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 0
@@ -254,7 +257,7 @@ union YYSTYPE
     BOOL boolean;
     double dbl;
 
-#line 263 "parser.tab.c" /* yacc.c:355  */
+#line 266 "parser.tab.c" /* yacc.c:355  */
 };
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
@@ -264,11 +267,11 @@ union YYSTYPE
 
 int parser_parse (parser_ctx_t *ctx);
 
-
+#endif /* !YY_PARSER_PARSER_TAB_H_INCLUDED  */
 
 /* Copy the second part of user declarations.  */
 
-#line 277 "parser.tab.c" /* yacc.c:358  */
+#line 280 "parser.tab.c" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -510,16 +513,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  5
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   862
+#define YYLAST   871
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  87
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  59
+#define YYNNTS  60
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  164
+#define YYNRULES  167
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  335
+#define YYNSTATES  341
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
@@ -579,16 +582,16 @@ static const yytype_uint16 yyrline[] =
      208,   212,   213,   216,   217,   220,   221,   222,   225,   226,
      229,   230,   233,   236,   237,   240,   241,   244,   245,   248,
      250,   251,   254,   256,   259,   260,   263,   264,   267,   271,
-     272,   275,   276,   277,   281,   282,   285,   286,   288,   290,
-     293,   294,   297,   298,   301,   302,   305,   306,   309,   310,
-     313,   314,   317,   318,   321,   322,   323,   324,   325,   326,
-     327,   328,   331,   332,   335,   336,   337,   340,   341,   344,
-     345,   349,   350,   352,   356,   357,   360,   361,   362,   363,
-     366,   367,   370,   371,   372,   373,   374,   375,   376,   379,
-     380,   381,   382,   385,   386,   387,   390,   391,   394,   397,
-     398,   400,   402,   403,   406,   408,   410,   414,   416,   420,
-     421,   424,   425,   426,   429,   430,   433,   434,   437,   438,
-     439,   443,   444,   448,   449
+     272,   275,   276,   277,   281,   282,   285,   286,   289,   290,
+     291,   293,   295,   298,   299,   302,   303,   306,   307,   310,
+     311,   314,   315,   318,   319,   322,   323,   326,   327,   328,
+     329,   330,   331,   332,   333,   336,   337,   340,   341,   342,
+     345,   346,   349,   350,   354,   355,   357,   361,   362,   365,
+     366,   367,   368,   371,   372,   375,   376,   377,   378,   379,
+     380,   381,   384,   385,   386,   387,   390,   391,   392,   395,
+     396,   399,   402,   403,   405,   407,   408,   411,   413,   415,
+     419,   421,   425,   426,   429,   430,   431,   434,   435,   438,
+     439,   442,   443,   444,   448,   449,   453,   454
 };
 #endif
 
@@ -614,16 +617,16 @@ static const char *const yytname[] =
   "DimList", "ConstDeclList", "ConstDecl", "ConstExpression", "DoType",
   "Step_opt", "IfStatement", "EndIf_opt", "ElseIfs_opt", "ElseIfs",
   "ElseIf", "Else_opt", "CaseClausules", "Arguments_opt",
-  "ArgumentList_opt", "EmptyBrackets_opt", "ExpressionList", "Expression",
-  "EqvExpression", "XorExpression", "OrExpression", "AndExpression",
-  "NotExpression", "EqualityExpression", "ConcatExpression",
-  "AdditiveExpression", "ModExpression", "IntdivExpression",
-  "MultiplicativeExpression", "ExpExpression", "UnaryExpression",
-  "CallExpression", "LiteralExpression", "NumericLiteralExpression",
-  "IntegerValue", "PrimaryExpression", "ClassDeclaration", "ClassBody",
-  "PropertyDecl", "FunctionDecl", "Storage_opt", "Storage",
-  "ArgumentsDecl_opt", "ArgumentDeclList", "ArgumentDecl", "Identifier",
-  "StSep", YY_NULLPTR
+  "ArgumentList_opt", "ArgumentList", "EmptyBrackets_opt",
+  "ExpressionList", "Expression", "EqvExpression", "XorExpression",
+  "OrExpression", "AndExpression", "NotExpression", "EqualityExpression",
+  "ConcatExpression", "AdditiveExpression", "ModExpression",
+  "IntdivExpression", "MultiplicativeExpression", "ExpExpression",
+  "UnaryExpression", "CallExpression", "LiteralExpression",
+  "NumericLiteralExpression", "IntegerValue", "PrimaryExpression",
+  "ClassDeclaration", "ClassBody", "PropertyDecl", "FunctionDecl",
+  "Storage_opt", "Storage", "ArgumentsDecl_opt", "ArgumentDeclList",
+  "ArgumentDecl", "Identifier", "StSep", YY_NULLPTR
 };
 #endif
 
@@ -644,12 +647,12 @@ static const yytype_uint16 yytoknum[] =
 };
 # endif
 
-#define YYPACT_NINF -158
+#define YYPACT_NINF -154
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-158)))
+  (!!((Yystate) == (-154)))
 
-#define YYTABLE_NINF -150
+#define YYTABLE_NINF -153
 
 #define yytable_value_is_error(Yytable_value) \
   0
@@ -658,40 +661,41 @@ static const yytype_uint16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     -28,   -18,    43,  -158,    56,  -158,   307,  -158,  -158,     6,
-      -2,  -158,    -2,   468,   184,   468,    20,    33,    32,  -158,
-      -2,     6,    26,  -158,  -158,    50,  -158,   557,   468,  -158,
-     116,    51,   388,  -158,    62,  -158,  -158,  -158,   130,  -158,
-    -158,     8,  -158,    63,    10,  -158,    93,   104,  -158,  -158,
-     468,  -158,  -158,  -158,    -2,  -158,  -158,  -158,  -158,  -158,
-     498,     8,    24,   166,   171,   177,   189,  -158,    29,   113,
-      53,   182,   122,   102,   129,  -158,    62,  -158,  -158,  -158,
-    -158,  -158,  -158,  -158,    47,   598,  -158,  -158,   468,    -2,
-     145,   468,   214,     8,  -158,   127,  -158,    11,  -158,   557,
-    -158,   468,   152,  -158,    -5,  -158,    19,    -2,    -2,    -2,
-     468,   163,  -158,    -2,  -158,   112,    -2,    97,  -158,  -158,
-    -158,  -158,   468,   348,   468,   468,   468,   468,   498,   498,
-     498,   498,   498,   498,   498,   498,   498,   498,   498,   498,
-     498,   498,   498,   651,   201,  -158,   557,    48,   200,   468,
-      36,   120,   173,   185,   175,  -158,  -158,   169,    35,   468,
-     468,  -158,    13,    13,  -158,  -158,  -158,  -158,   176,   179,
-    -158,    45,  -158,  -158,   166,   557,   221,   171,   177,   189,
-    -158,   113,   113,   113,   113,   113,   113,   113,    53,   182,
-     182,   122,   102,   129,   129,  -158,   217,   121,  -158,   598,
-     468,    25,  -158,  -158,   211,    -2,   228,   256,   257,   150,
-     196,   468,  -158,  -158,  -158,   249,  -158,   -11,  -158,   260,
-     261,  -158,   112,  -158,   237,   786,  -158,   468,   233,    59,
-     468,   418,   240,   268,   219,   120,   120,   135,   270,   249,
-      -2,    -2,   198,   202,   277,   692,   692,  -158,   468,   247,
-    -158,   237,   253,   249,  -158,   733,    12,     7,     7,   242,
-     120,   283,  -158,  -158,   224,   225,   226,   120,   277,   277,
-    -158,   -11,  -158,   263,   265,    27,   293,   271,  -158,   273,
-    -158,   243,   468,   295,   786,   557,  -158,  -158,  -158,    13,
-     231,   236,  -158,  -158,  -158,  -158,   282,   286,   310,   692,
-     287,  -158,  -158,   249,   733,  -158,   211,   312,   -11,   -11,
-    -158,  -158,   557,  -158,  -158,   255,  -158,   692,   241,   252,
-    -158,  -158,   288,   320,   326,   308,   692,   692,  -158,   302,
-     305,   314,   315,  -158,  -158
+     -13,   -11,    67,  -154,    78,  -154,   313,  -154,  -154,    98,
+      -5,  -154,    -5,   464,   146,   464,    12,    34,    76,  -154,
+      -5,    98,    96,  -154,  -154,    90,  -154,   566,   464,  -154,
+     159,   101,   182,  -154,   104,  -154,  -154,  -154,    37,  -154,
+    -154,     1,  -154,   100,     4,  -154,   112,   131,  -154,  -154,
+     464,  -154,  -154,  -154,    -5,  -154,  -154,  -154,  -154,  -154,
+     497,     1,    31,   171,   196,   198,   212,  -154,    24,   147,
+     -60,   208,   148,   -31,   143,  -154,   104,  -154,  -154,  -154,
+    -154,  -154,  -154,  -154,    52,   607,  -154,  -154,   464,    -5,
+     158,   464,   228,     1,  -154,    65,  -154,    -3,  -154,   566,
+    -154,   392,   392,   165,  -154,  -154,   130,    19,    -5,    -5,
+      -5,   392,   167,  -154,    -5,  -154,    92,    -5,   528,  -154,
+    -154,  -154,  -154,   464,   354,   464,   464,   464,   464,   497,
+     497,   497,   497,   497,   497,   497,   497,   497,   497,   497,
+     497,   497,   497,   497,   660,   202,  -154,   566,   105,   204,
+     464,    16,   123,   181,   201,   191,  -154,  -154,  -154,   188,
+      22,   464,   392,  -154,     7,     7,  -154,  -154,  -154,  -154,
+     192,   193,  -154,    42,  -154,  -154,   171,   566,    85,   196,
+     198,   212,  -154,   147,   147,   147,   147,   147,   147,   147,
+     -60,   208,   208,   148,   -31,   143,   143,  -154,   236,    13,
+    -154,   607,   464,    29,  -154,  -154,   227,    -5,   242,   270,
+     271,   176,   210,   464,  -154,  -154,  -154,   263,  -154,     2,
+    -154,   274,   275,  -154,    92,  -154,   250,   795,   253,  -154,
+    -154,   464,   245,   109,   464,   425,   258,   286,   239,   123,
+     123,   107,   291,   263,    -5,    -5,   219,   222,   292,   701,
+     701,  -154,   464,   273,  -154,   250,   269,  -154,   263,  -154,
+     742,    14,    21,    21,    30,   260,   123,   302,  -154,  -154,
+     241,   244,   247,   123,   292,   292,  -154,     2,  -154,   277,
+     280,    43,   311,   287,  -154,  -154,   259,   464,   316,   795,
+     566,   464,  -154,  -154,  -154,     7,   246,   248,  -154,  -154,
+    -154,  -154,   301,   307,   321,   701,   308,  -154,   263,   742,
+    -154,   227,  -154,   331,     2,     2,  -154,  -154,   566,  -154,
+    -154,   276,  -154,   701,   262,   265,  -154,  -154,   312,   341,
+     346,   327,   701,   701,  -154,   322,   323,   332,   335,  -154,
+    -154
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -699,62 +703,63 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       3,     0,     0,     5,     0,     1,   149,     4,     2,     0,
-       0,   162,     0,     0,     0,     0,     0,     0,     0,    34,
-       0,     0,   152,   153,   137,     0,   161,    13,     0,     6,
-       0,    15,    78,    22,     0,   120,     7,    27,     0,   150,
-      41,    78,    21,    43,    45,    37,    50,     0,   122,   123,
-       0,   128,   126,   127,     0,   124,   131,   129,   132,   130,
-       0,    78,     0,    82,    84,    86,    88,    90,    92,    94,
-     102,   104,   107,   109,   111,   114,   117,   116,   125,    32,
-      30,    31,    28,    29,     0,   149,    55,    56,     0,     0,
-       0,     0,     0,    78,   151,     0,    14,     0,    12,    17,
-      79,     0,   121,    18,    76,    77,    80,     0,     0,     0,
-       0,    19,    74,     0,    47,     0,     0,     0,    93,   118,
-     119,   121,     0,   149,     0,     0,     0,     0,     0,     0,
+       3,     0,     0,     5,     0,     1,   152,     4,     2,     0,
+       0,   165,     0,     0,     0,     0,     0,     0,     0,    34,
+       0,     0,   155,   156,   140,     0,   164,    13,     0,     6,
+       0,    15,    81,    22,     0,   123,     7,    27,     0,   153,
+      41,    81,    21,    43,    45,    37,    50,     0,   125,   126,
+       0,   131,   129,   130,     0,   127,   134,   132,   135,   133,
+       0,    81,     0,    85,    87,    89,    91,    93,    95,    97,
+     105,   107,   110,   112,   114,   117,   120,   119,   128,    32,
+      30,    31,    28,    29,     0,   152,    55,    56,     0,     0,
+       0,     0,     0,    81,   154,     0,    14,     0,    12,    17,
+      82,     0,     0,   124,    18,    77,    76,    78,     0,     0,
+       0,     0,    19,    74,     0,    47,     0,     0,     0,    96,
+     121,   122,   124,     0,   152,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   149,     0,     9,    10,     0,     0,     0,
-       0,   149,   121,     0,     0,   136,    16,     0,     0,     0,
-       0,    42,    78,    78,    44,   135,   133,   134,     0,    48,
-      51,     0,    52,    53,    83,     8,    60,    85,    87,    89,
-      91,    96,   101,   100,    99,    95,    97,    98,   103,   106,
-     105,   108,   110,   112,   113,   115,     0,    26,    11,   149,
-       0,     0,   163,   164,    71,     0,     0,     0,     0,     0,
-     150,     0,    35,    36,    75,    20,    81,     0,   154,     0,
-       0,    46,     0,    54,    64,   149,    23,     0,     0,     0,
-       0,     0,     0,     0,     0,   149,   149,     0,     0,    33,
-       0,     0,     0,   156,    78,   149,   149,    49,     0,    69,
-      65,    66,    62,    25,    24,   149,    57,     0,     0,     0,
-     149,     0,   143,   140,     0,     0,     0,   149,    78,    78,
-     155,     0,   158,     0,     0,     0,     0,     0,    67,     0,
-      61,     0,     0,     0,   149,     8,    40,   142,   138,    78,
-       0,     0,   141,   159,   160,   157,     0,     0,     0,   149,
-       0,    63,    39,    58,   149,    72,    71,     0,     0,     0,
-     147,   148,     8,    70,    59,     0,    73,   149,     0,     0,
-      68,    38,     0,     0,     0,     0,   149,   149,   144,     0,
-       0,     0,     0,   145,   146
+       0,     0,     0,     0,   152,     0,     9,    10,     0,     0,
+       0,     0,   152,   124,     0,     0,   139,    16,    80,     0,
+       0,     0,     0,    42,    81,    81,    44,   138,   136,   137,
+       0,    48,    51,     0,    52,    53,    86,     8,    62,    88,
+      90,    92,    94,    99,   104,   103,   102,    98,   100,   101,
+     106,   109,   108,   111,   113,   115,   116,   118,     0,    26,
+      11,   152,     0,     0,   166,   167,    71,     0,     0,     0,
+       0,     0,   153,     0,    35,    36,    75,    20,    79,     0,
+     157,     0,     0,    46,     0,    54,    64,   152,     0,    60,
+      23,     0,     0,     0,     0,     0,     0,     0,     0,   152,
+     152,     0,     0,    33,     0,     0,     0,   159,    81,   152,
+     152,    49,     0,    69,    65,    66,    62,    63,    25,    24,
+     152,    57,     0,     0,    83,     0,   152,     0,   146,   143,
+       0,     0,     0,   152,    81,    81,   158,     0,   161,     0,
+       0,     0,     0,     0,    67,    61,     0,     0,     0,   152,
+       8,     0,    40,   145,   141,    81,     0,     0,   144,   162,
+     163,   160,     0,     0,     0,   152,     0,    39,    58,   152,
+      72,    71,    84,     0,     0,     0,   150,   151,     8,    70,
+      59,     0,    73,   152,     0,     0,    68,    38,     0,     0,
+       0,     0,   152,   152,   147,     0,     0,     0,     0,   148,
+     149
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -158,  -158,  -158,  -158,  -101,  -137,   336,   -23,  -158,    -6,
-     232,   139,   125,   234,  -158,  -158,   151,  -158,  -158,  -158,
-    -158,    98,  -158,  -158,    49,   -13,  -158,     0,   -31,    55,
-     238,   229,   246,   230,   -40,  -158,    99,   223,    60,   216,
-     220,    69,   -52,    -4,   262,   192,  -158,  -158,  -158,   -78,
-    -158,  -144,  -139,  -133,  -157,    95,   -96,    17,   -22
+    -154,  -154,  -154,  -154,  -113,  -143,   349,   -26,  -154,    -6,
+     251,   153,   137,   249,  -154,  -154,   163,  -154,  -154,   108,
+    -154,   114,  -154,  -154,    61,    -9,  -154,   -23,    -8,    86,
+      57,   257,   261,   266,   256,   -42,  -154,    82,   255,   -30,
+     264,   254,    25,   -54,    -4,   267,   223,  -154,  -154,  -154,
+    -149,  -154,  -138,   -90,   -87,  -153,   118,  -121,    17,   -37
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,     2,     3,     6,   144,   145,   146,    30,    31,    61,
-      42,    43,   168,    45,    46,   172,    88,   283,    33,   280,
-     249,   250,   251,   277,   232,   102,   103,   112,   157,   106,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,   169,    35,    36,   206,
-     207,    37,    38,    39,   219,   242,   243,    40,   204
+      -1,     2,     3,     6,   145,   146,   147,    30,    31,    61,
+      42,    43,   170,    45,    46,   174,    88,   288,    33,   229,
+     253,   254,   255,   283,   236,   103,   104,   159,   113,   263,
+     107,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,   171,    35,    36,
+     208,   209,    37,    38,    39,   221,   246,   247,    40,   206
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -762,184 +767,186 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      32,   105,    34,    41,    96,    34,   220,   208,   120,   198,
-     118,   202,   209,    11,   100,    93,   114,    34,   210,   100,
-       1,    32,    11,    34,    85,   122,   122,    44,   111,    47,
-      11,     4,   104,   122,    90,   240,   241,    92,   122,   122,
-     202,   122,   196,     5,   128,   129,   130,   131,   121,   122,
-     122,   143,   199,   282,    86,    26,   123,    11,    87,   298,
-       7,   122,   122,   255,    26,   230,    24,   -74,    62,   -74,
-      84,   119,    26,   122,   224,    89,   156,    91,   203,    32,
-     152,    34,    28,    97,   110,    94,   115,   180,   155,   217,
-     195,   208,   208,    32,   160,    34,   209,   209,   228,    26,
-     176,   132,   210,   210,    48,    49,   148,   203,   133,   134,
-     160,    95,   155,    56,    57,    58,   208,    32,    59,    34,
-      98,   209,    99,   208,   161,   162,   163,   210,   209,   216,
-      44,   136,   307,    47,   210,   137,   107,    32,   113,    34,
-      32,   205,    34,   147,   273,   274,   150,   305,    51,    52,
-      53,  -139,   108,   109,   281,    86,   158,   262,   263,    87,
-     264,   265,   218,   218,    55,    56,    57,    58,   116,    32,
-      59,    34,   108,   109,   237,   171,   117,    22,    23,   124,
-     165,   166,   287,   125,   306,   167,   140,   141,   126,   292,
-     266,   153,   154,    32,   135,    34,   189,   190,   313,   127,
-     258,   138,   252,   315,   201,   139,    79,    80,    81,   193,
-     194,   320,   318,   319,   215,   142,   322,   149,   151,    32,
-      82,    34,    44,    83,   159,   329,   330,   181,   182,   183,
-     184,   185,   186,   187,   244,   284,   285,  -121,   197,    32,
-      32,    34,    34,   200,   272,   211,   214,   212,   213,    32,
-     225,    34,   226,   221,   222,   229,   231,   268,   269,   234,
-     235,   236,   238,   122,   245,   246,   239,   248,   293,   294,
-     254,   259,   260,   261,   267,   270,   276,   271,    32,    32,
-      34,    34,   253,   100,   279,   256,   286,   288,   244,   218,
-     289,   290,   291,    32,   296,    34,   297,   299,    32,   304,
-      34,   301,   300,   275,   310,   302,    32,   308,    34,   311,
-       8,    32,   309,    34,   312,   314,   317,   321,   323,   325,
-      32,    32,    34,    34,   326,   244,   244,     9,    10,   324,
-     327,    11,   328,   331,    12,    13,   332,   303,   333,   334,
-      14,    15,    29,    16,   233,   164,    17,   247,   227,   278,
-     170,    18,   175,   177,   191,   316,   179,    19,   188,   192,
-     174,    20,    21,   223,    22,    23,   295,    24,     9,    10,
-      25,   178,    11,    26,     0,    12,    13,     0,    27,   173,
-       0,    14,    15,    28,    16,     0,     0,    17,     0,     0,
-       0,     0,    18,     0,   100,    48,    49,    50,    19,     0,
-       0,     0,     0,    21,     0,    22,    23,     0,    24,     0,
-       0,    25,    11,     0,    26,     0,     0,     0,     0,    27,
-       0,     0,     0,     0,    28,    48,    49,    50,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    51,
-      52,    53,    11,     0,    54,     0,     0,   257,    24,     0,
-       0,     0,     0,     0,    26,    55,    56,    57,    58,     0,
-       0,    59,     0,     0,   101,     0,    60,     0,     0,    51,
-      52,    53,     0,     0,    54,    48,    49,    50,    24,     0,
-       0,     0,     0,     0,    26,    55,    56,    57,    58,     0,
-       0,    59,    11,     0,    28,     0,    60,     0,     0,     0,
-       0,     0,     0,     0,     0,    48,    49,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    51,
-      52,    53,    11,     0,    54,     0,     0,     0,    24,     0,
-       0,     0,     0,     0,    26,    55,    56,    57,    58,     0,
-       0,    59,     0,     0,    28,     0,    60,     0,     0,    51,
-      52,    53,     0,     0,    54,     0,     0,     0,    24,     0,
-       0,     0,     0,     0,    26,    55,    56,    57,    58,     0,
-       0,    59,     0,     0,    28,     0,    60,     9,    10,  -149,
-    -149,    11,     0,     0,    12,    13,     0,     0,     0,     0,
-      14,    15,     0,    16,     0,     0,    17,     0,     0,     0,
+      32,    96,    34,    41,   200,    34,   121,   100,   119,   105,
+     115,   123,   222,   100,   210,    93,    85,    34,   137,    11,
+     204,    32,   138,    34,   106,   204,    11,    44,   123,    47,
+     123,   198,   112,   123,    90,     1,   123,    92,     4,   129,
+     130,   131,   132,   123,   123,   123,    86,    86,   244,   245,
+      87,    87,   122,   141,   142,   287,   144,   123,    11,   109,
+     110,    26,   211,   124,   226,   212,   123,     5,    26,   234,
+      62,   120,    84,   157,   156,   304,    89,   111,   158,    32,
+     116,    34,     7,   219,   153,    97,   182,   205,   232,   197,
+     268,   269,   205,    32,   162,    34,   133,   162,   178,   156,
+      26,   210,   210,   134,   135,   291,   149,   191,   192,   201,
+      56,    57,    58,   260,   227,    59,   228,   293,    32,   123,
+      34,    91,    11,   123,   298,   163,   164,   165,   210,   154,
+     155,    44,   270,   271,    47,   210,   279,   280,    32,   218,
+      34,    32,   313,    34,   207,   148,   310,   286,   151,   211,
+     211,    95,   212,   212,  -142,    94,   220,   220,    24,   160,
+     167,   168,   272,    98,    26,   169,   195,   196,    79,    80,
+      81,    32,    99,    34,    28,   114,   211,   311,   108,   212,
+      22,    23,    82,   211,   125,    83,   212,   117,   100,    48,
+      49,    50,   319,   324,   325,    32,   321,    34,   109,   110,
+     241,   256,   -74,   118,   -74,   326,    11,   203,   126,   127,
+     328,   183,   184,   185,   186,   187,   188,   189,   217,   335,
+     336,    32,   128,    34,    44,   289,   290,   139,   136,   143,
+     150,   140,   152,    51,    52,    53,   248,   161,    54,   199,
+     278,  -124,    24,    32,    32,    34,    34,   202,    26,    55,
+      56,    57,    58,   213,    32,    59,    34,   101,   102,   233,
+      60,   274,   275,   214,   215,   216,   299,   300,   224,   223,
+     243,   230,   235,   238,   239,   240,   242,   123,   249,   250,
+     252,   257,   259,    32,    32,    34,    34,   220,   258,   265,
+     266,   261,   264,   267,   248,   273,   276,   277,   100,    32,
+     228,    34,   282,    32,   292,    34,   294,   295,   302,   281,
+     296,   303,    32,   297,    34,   305,     8,    32,   306,    34,
+     309,   307,   314,   316,   315,   318,    32,    32,    34,    34,
+     317,   248,   248,     9,    10,   323,   320,    11,   327,   329,
+      12,    13,   330,   331,   308,   332,    14,    15,   264,    16,
+     333,   334,    17,   337,   338,    29,   339,    18,   177,   340,
+     237,   251,   231,    19,   285,   166,   172,    20,    21,   284,
+      22,    23,   322,    24,     9,    10,    25,   312,    11,    26,
+     176,    12,    13,   181,    27,   175,   179,    14,    15,    28,
+      16,   190,   180,    17,   194,   301,   225,     0,    18,    48,
+      49,    50,     0,   193,    19,     0,     0,     0,     0,    21,
+       0,    22,    23,     0,    24,     0,    11,    25,     0,     0,
+      26,     0,     0,     0,     0,    27,     0,     0,     0,     0,
+      28,     0,    48,    49,    50,     0,     0,     0,     0,     0,
+       0,     0,     0,    51,    52,    53,     0,     0,    54,    11,
+       0,     0,    24,     0,   262,     0,     0,     0,    26,    55,
+      56,    57,    58,     0,     0,    59,     0,   101,    28,     0,
+      60,    48,    49,    50,     0,     0,    51,    52,    53,     0,
+       0,    54,     0,     0,     0,    24,     0,     0,    11,     0,
+       0,    26,    55,    56,    57,    58,     0,     0,    59,     0,
+       0,    28,     0,    60,    48,    49,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    51,    52,    53,     0,     0,
+      54,    11,     0,     0,    24,     0,     0,     0,     0,     0,
+      26,    55,    56,    57,    58,    48,    49,    59,     0,     0,
+      28,     0,    60,     0,     0,     0,     0,     0,    51,    52,
+      53,     0,     0,    54,     0,     0,     0,    24,     0,     0,
+       0,     0,     0,    26,    55,    56,    57,    58,     0,     0,
+      59,     0,     0,    28,     0,    60,     0,     0,     0,    51,
+      52,    53,     0,     0,     0,     0,     9,    10,  -152,  -152,
+      11,     0,     0,    12,    13,    55,    56,    57,    58,    14,
+      15,    59,    16,     0,     0,    17,   173,     0,     0,     0,
+      18,     0,     0,     0,     0,     0,    19,     0,     0,     0,
+       0,    21,     0,    22,    23,     0,    24,     9,    10,    25,
+       0,    11,    26,     0,    12,    13,     0,    27,     0,     0,
+      14,    15,    28,    16,    -8,     0,    17,     0,     0,     0,
        0,    18,     0,     0,     0,     0,     0,    19,     0,     0,
-       0,     0,    21,     0,    22,    23,     0,    24,     9,    10,
-      25,     0,    11,    26,     0,    12,    13,     0,    27,     0,
-       0,    14,    15,    28,    16,    -8,     0,    17,     0,     0,
-       0,     0,    18,     0,     0,     0,     0,     0,    19,     0,
-       0,     0,     0,    21,     0,    22,    23,     0,    24,     0,
-       0,    25,     0,     0,    26,     0,     0,     0,     0,    27,
-       0,     9,    10,     0,    28,    11,     0,     0,    12,    13,
-       0,     0,     0,     0,    14,    15,    -8,    16,     0,     0,
+       0,     0,    21,     0,    22,    23,     0,    24,     0,     0,
+      25,     0,     0,    26,     0,     0,     0,     0,    27,     0,
+       9,    10,     0,    28,    11,     0,     0,    12,    13,     0,
+       0,     0,     0,    14,    15,    -8,    16,     0,     0,    17,
+       0,     0,     0,     0,    18,     0,     0,     0,     0,     0,
+      19,     0,     0,     0,     0,    21,     0,    22,    23,     0,
+      24,     9,    10,    25,     0,    11,    26,     0,    12,    13,
+       0,    27,    -8,     0,    14,    15,    28,    16,     0,     0,
       17,     0,     0,     0,     0,    18,     0,     0,     0,     0,
        0,    19,     0,     0,     0,     0,    21,     0,    22,    23,
        0,    24,     9,    10,    25,     0,    11,    26,     0,    12,
-      13,     0,    27,    -8,     0,    14,    15,    28,    16,     0,
+      13,     0,    27,     0,     0,    14,    15,    28,    16,     0,
        0,    17,     0,     0,     0,     0,    18,     0,     0,     0,
        0,     0,    19,     0,     0,     0,     0,    21,     0,    22,
-      23,     0,    24,     9,    10,    25,     0,    11,    26,     0,
-      12,    13,     0,    27,     0,     0,    14,    15,    28,    16,
-       0,     0,    17,     0,     0,     0,     0,    18,     0,     0,
-       0,     0,     0,    19,     0,     0,     0,     0,    21,     0,
-      22,    23,     0,    24,     0,    -8,    25,     0,     0,    26,
-       0,     0,     0,     0,    27,     0,     9,    10,     0,    28,
-      11,     0,     0,    12,    13,     0,     0,     0,     0,    14,
-      15,     0,    16,     0,     0,    17,     0,     0,     0,     0,
-      18,     0,     0,     0,     0,     0,    19,     0,     0,     0,
-       0,    21,     0,    22,    23,     0,    24,     0,     0,    25,
-       0,     0,    26,     0,     0,     0,     0,    27,     0,     0,
-       0,     0,    28
+      23,     0,    24,     0,    -8,    25,     0,     0,    26,     0,
+       0,     0,     0,    27,     0,     9,    10,     0,    28,    11,
+       0,     0,    12,    13,     0,     0,     0,     0,    14,    15,
+       0,    16,     0,     0,    17,     0,     0,     0,     0,    18,
+       0,     0,     0,     0,     0,    19,     0,     0,     0,     0,
+      21,     0,    22,    23,     0,    24,     0,     0,    25,     0,
+       0,    26,     0,     0,     0,     0,    27,     0,     0,     0,
+       0,    28
 };
 
 static const yytype_int16 yycheck[] =
 {
-       6,    32,     6,     9,    27,     9,   163,   151,    60,   146,
-      50,     4,   151,    24,     6,    21,     6,    21,   151,     6,
-      48,    27,    24,    27,     4,    14,    14,    10,    41,    12,
-      24,    49,    32,    14,    17,    46,    47,    20,    14,    14,
-       4,    14,   143,     0,    15,    16,    17,    18,    61,    14,
-      14,     4,     4,    41,    34,    66,    32,    24,    38,    32,
-       4,    14,    14,     4,    66,    40,    60,    72,    13,    74,
-      15,    54,    66,    14,   175,    42,    99,    45,    71,    85,
-      93,    85,    76,    28,    76,    59,    76,   127,    77,    76,
-     142,   235,   236,    99,    75,    99,   235,   236,   199,    66,
-     123,    72,   235,   236,     7,     8,    89,    71,    79,    80,
-      75,    61,    77,    68,    69,    70,   260,   123,    73,   123,
-       4,   260,    71,   267,   107,   108,   109,   260,   267,   160,
-     113,    78,   289,   116,   267,    82,    74,   143,    75,   143,
-     146,    21,   146,    88,   245,   246,    91,   284,    51,    52,
-      53,    31,    22,    23,   255,    34,   101,   235,   236,    38,
-      25,    26,   162,   163,    67,    68,    69,    70,    75,   175,
-      73,   175,    22,    23,    24,    78,    72,    57,    58,    13,
-      68,    69,   260,    12,   285,    73,    84,    85,    11,   267,
-      55,    64,    65,   199,    81,   199,   136,   137,   299,    10,
-     231,    19,   225,   304,   149,    83,    22,    23,    24,   140,
-     141,   312,   308,   309,   159,    86,   317,    72,     4,   225,
-      36,   225,   205,    39,    72,   326,   327,   128,   129,   130,
-     131,   132,   133,   134,   217,   257,   258,    74,    37,   245,
-     246,   245,   246,    43,   244,    72,    77,    62,    73,   255,
-      29,   255,    35,    77,    75,   200,    45,   240,   241,    31,
-       4,     4,    66,    14,     4,     4,   211,    30,   268,   269,
-      37,    31,     4,    54,     4,    77,    29,    75,   284,   285,
-     284,   285,   227,     6,    31,   230,    44,     4,   271,   289,
-      66,    66,    66,   299,    31,   299,    31,     4,   304,     4,
-     304,    28,    31,   248,    22,    62,   312,    76,   312,    23,
-       3,   317,    76,   317,     4,    28,     4,    62,    77,    31,
-     326,   327,   326,   327,     4,   308,   309,    20,    21,    77,
-       4,    24,    24,    31,    27,    28,    31,   282,    24,    24,
-      33,    34,     6,    36,   205,   113,    39,   222,   197,   251,
-     116,    44,     4,   124,   138,   306,   126,    50,   135,   139,
-     122,    54,    55,   171,    57,    58,   271,    60,    20,    21,
-      63,   125,    24,    66,    -1,    27,    28,    -1,    71,   117,
-      -1,    33,    34,    76,    36,    -1,    -1,    39,    -1,    -1,
-      -1,    -1,    44,    -1,     6,     7,     8,     9,    50,    -1,
-      -1,    -1,    -1,    55,    -1,    57,    58,    -1,    60,    -1,
-      -1,    63,    24,    -1,    66,    -1,    -1,    -1,    -1,    71,
-      -1,    -1,    -1,    -1,    76,     7,     8,     9,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    51,
-      52,    53,    24,    -1,    56,    -1,    -1,    29,    60,    -1,
-      -1,    -1,    -1,    -1,    66,    67,    68,    69,    70,    -1,
-      -1,    73,    -1,    -1,    76,    -1,    78,    -1,    -1,    51,
-      52,    53,    -1,    -1,    56,     7,     8,     9,    60,    -1,
-      -1,    -1,    -1,    -1,    66,    67,    68,    69,    70,    -1,
-      -1,    73,    24,    -1,    76,    -1,    78,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,     7,     8,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    51,
-      52,    53,    24,    -1,    56,    -1,    -1,    -1,    60,    -1,
-      -1,    -1,    -1,    -1,    66,    67,    68,    69,    70,    -1,
-      -1,    73,    -1,    -1,    76,    -1,    78,    -1,    -1,    51,
-      52,    53,    -1,    -1,    56,    -1,    -1,    -1,    60,    -1,
-      -1,    -1,    -1,    -1,    66,    67,    68,    69,    70,    -1,
-      -1,    73,    -1,    -1,    76,    -1,    78,    20,    21,    22,
-      23,    24,    -1,    -1,    27,    28,    -1,    -1,    -1,    -1,
-      33,    34,    -1,    36,    -1,    -1,    39,    -1,    -1,    -1,
+       6,    27,     6,     9,   147,     9,    60,     6,    50,    32,
+       6,    14,   165,     6,   152,    21,     4,    21,    78,    24,
+       4,    27,    82,    27,    32,     4,    24,    10,    14,    12,
+      14,   144,    41,    14,    17,    48,    14,    20,    49,    15,
+      16,    17,    18,    14,    14,    14,    34,    34,    46,    47,
+      38,    38,    61,    84,    85,    41,     4,    14,    24,    22,
+      23,    66,   152,    32,   177,   152,    14,     0,    66,    40,
+      13,    54,    15,    99,    77,    32,    42,    76,   101,    85,
+      76,    85,     4,    76,    93,    28,   128,    71,   201,   143,
+     239,   240,    71,    99,    75,    99,    72,    75,   124,    77,
+      66,   239,   240,    79,    80,    75,    89,   137,   138,     4,
+      68,    69,    70,     4,    29,    73,    31,   266,   124,    14,
+     124,    45,    24,    14,   273,   108,   109,   110,   266,    64,
+      65,   114,    25,    26,   117,   273,   249,   250,   144,   162,
+     144,   147,   295,   147,    21,    88,   289,   260,    91,   239,
+     240,    61,   239,   240,    31,    59,   164,   165,    60,   102,
+      68,    69,    55,     4,    66,    73,   141,   142,    22,    23,
+      24,   177,    71,   177,    76,    75,   266,   290,    74,   266,
+      57,    58,    36,   273,    13,    39,   273,    75,     6,     7,
+       8,     9,   305,   314,   315,   201,   309,   201,    22,    23,
+      24,   227,    72,    72,    74,   318,    24,   150,    12,    11,
+     323,   129,   130,   131,   132,   133,   134,   135,   161,   332,
+     333,   227,    10,   227,   207,   262,   263,    19,    81,    86,
+      72,    83,     4,    51,    52,    53,   219,    72,    56,    37,
+     248,    74,    60,   249,   250,   249,   250,    43,    66,    67,
+      68,    69,    70,    72,   260,    73,   260,    75,    76,   202,
+      78,   244,   245,    62,    73,    77,   274,   275,    75,    77,
+     213,    35,    45,    31,     4,     4,    66,    14,     4,     4,
+      30,    28,    37,   289,   290,   289,   290,   295,   231,    31,
+       4,   234,   235,    54,   277,     4,    77,    75,     6,   305,
+      31,   305,    29,   309,    44,   309,     4,    66,    31,   252,
+      66,    31,   318,    66,   318,     4,     3,   323,    31,   323,
+       4,    62,    76,    22,    76,     4,   332,   333,   332,   333,
+      23,   314,   315,    20,    21,     4,    28,    24,    62,    77,
+      27,    28,    77,    31,   287,     4,    33,    34,   291,    36,
+       4,    24,    39,    31,    31,     6,    24,    44,     4,    24,
+     207,   224,   199,    50,   256,   114,   117,    54,    55,   255,
+      57,    58,   311,    60,    20,    21,    63,   291,    24,    66,
+     123,    27,    28,   127,    71,   118,   125,    33,    34,    76,
+      36,   136,   126,    39,   140,   277,   173,    -1,    44,     7,
+       8,     9,    -1,   139,    50,    -1,    -1,    -1,    -1,    55,
+      -1,    57,    58,    -1,    60,    -1,    24,    63,    -1,    -1,
+      66,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    -1,
+      76,    -1,     7,     8,     9,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    51,    52,    53,    -1,    -1,    56,    24,
+      -1,    -1,    60,    -1,    29,    -1,    -1,    -1,    66,    67,
+      68,    69,    70,    -1,    -1,    73,    -1,    75,    76,    -1,
+      78,     7,     8,     9,    -1,    -1,    51,    52,    53,    -1,
+      -1,    56,    -1,    -1,    -1,    60,    -1,    -1,    24,    -1,
+      -1,    66,    67,    68,    69,    70,    -1,    -1,    73,    -1,
+      -1,    76,    -1,    78,     7,     8,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    51,    52,    53,    -1,    -1,
+      56,    24,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,
+      66,    67,    68,    69,    70,     7,     8,    73,    -1,    -1,
+      76,    -1,    78,    -1,    -1,    -1,    -1,    -1,    51,    52,
+      53,    -1,    -1,    56,    -1,    -1,    -1,    60,    -1,    -1,
+      -1,    -1,    -1,    66,    67,    68,    69,    70,    -1,    -1,
+      73,    -1,    -1,    76,    -1,    78,    -1,    -1,    -1,    51,
+      52,    53,    -1,    -1,    -1,    -1,    20,    21,    22,    23,
+      24,    -1,    -1,    27,    28,    67,    68,    69,    70,    33,
+      34,    73,    36,    -1,    -1,    39,    78,    -1,    -1,    -1,
+      44,    -1,    -1,    -1,    -1,    -1,    50,    -1,    -1,    -1,
+      -1,    55,    -1,    57,    58,    -1,    60,    20,    21,    63,
+      -1,    24,    66,    -1,    27,    28,    -1,    71,    -1,    -1,
+      33,    34,    76,    36,    37,    -1,    39,    -1,    -1,    -1,
       -1,    44,    -1,    -1,    -1,    -1,    -1,    50,    -1,    -1,
-      -1,    -1,    55,    -1,    57,    58,    -1,    60,    20,    21,
-      63,    -1,    24,    66,    -1,    27,    28,    -1,    71,    -1,
-      -1,    33,    34,    76,    36,    37,    -1,    39,    -1,    -1,
-      -1,    -1,    44,    -1,    -1,    -1,    -1,    -1,    50,    -1,
-      -1,    -1,    -1,    55,    -1,    57,    58,    -1,    60,    -1,
-      -1,    63,    -1,    -1,    66,    -1,    -1,    -1,    -1,    71,
-      -1,    20,    21,    -1,    76,    24,    -1,    -1,    27,    28,
-      -1,    -1,    -1,    -1,    33,    34,    35,    36,    -1,    -1,
+      -1,    -1,    55,    -1,    57,    58,    -1,    60,    -1,    -1,
+      63,    -1,    -1,    66,    -1,    -1,    -1,    -1,    71,    -1,
+      20,    21,    -1,    76,    24,    -1,    -1,    27,    28,    -1,
+      -1,    -1,    -1,    33,    34,    35,    36,    -1,    -1,    39,
+      -1,    -1,    -1,    -1,    44,    -1,    -1,    -1,    -1,    -1,
+      50,    -1,    -1,    -1,    -1,    55,    -1,    57,    58,    -1,
+      60,    20,    21,    63,    -1,    24,    66,    -1,    27,    28,
+      -1,    71,    31,    -1,    33,    34,    76,    36,    -1,    -1,
       39,    -1,    -1,    -1,    -1,    44,    -1,    -1,    -1,    -1,
       -1,    50,    -1,    -1,    -1,    -1,    55,    -1,    57,    58,
       -1,    60,    20,    21,    63,    -1,    24,    66,    -1,    27,
-      28,    -1,    71,    31,    -1,    33,    34,    76,    36,    -1,
+      28,    -1,    71,    -1,    -1,    33,    34,    76,    36,    -1,
       -1,    39,    -1,    -1,    -1,    -1,    44,    -1,    -1,    -1,
       -1,    -1,    50,    -1,    -1,    -1,    -1,    55,    -1,    57,
-      58,    -1,    60,    20,    21,    63,    -1,    24,    66,    -1,
-      27,    28,    -1,    71,    -1,    -1,    33,    34,    76,    36,
-      -1,    -1,    39,    -1,    -1,    -1,    -1,    44,    -1,    -1,
-      -1,    -1,    -1,    50,    -1,    -1,    -1,    -1,    55,    -1,
-      57,    58,    -1,    60,    -1,    62,    63,    -1,    -1,    66,
-      -1,    -1,    -1,    -1,    71,    -1,    20,    21,    -1,    76,
-      24,    -1,    -1,    27,    28,    -1,    -1,    -1,    -1,    33,
-      34,    -1,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
-      44,    -1,    -1,    -1,    -1,    -1,    50,    -1,    -1,    -1,
-      -1,    55,    -1,    57,    58,    -1,    60,    -1,    -1,    63,
-      -1,    -1,    66,    -1,    -1,    -1,    -1,    71,    -1,    -1,
-      -1,    -1,    76
+      58,    -1,    60,    -1,    62,    63,    -1,    -1,    66,    -1,
+      -1,    -1,    -1,    71,    -1,    20,    21,    -1,    76,    24,
+      -1,    -1,    27,    28,    -1,    -1,    -1,    -1,    33,    34,
+      -1,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    44,
+      -1,    -1,    -1,    -1,    -1,    50,    -1,    -1,    -1,    -1,
+      55,    -1,    57,    58,    -1,    60,    -1,    -1,    63,    -1,
+      -1,    66,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,
+      -1,    76
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -949,37 +956,38 @@ static const yytype_uint8 yystos[] =
        0,    48,    88,    89,    49,     0,    90,     4,     3,    20,
       21,    24,    27,    28,    33,    34,    36,    39,    44,    50,
       54,    55,    57,    58,    60,    63,    66,    71,    76,    93,
-      94,    95,    96,   105,   130,   134,   135,   138,   139,   140,
-     144,    96,    97,    98,   144,   100,   101,   144,     7,     8,
+      94,    95,    96,   105,   131,   135,   136,   139,   140,   141,
+     145,    96,    97,    98,   145,   100,   101,   145,     7,     8,
        9,    51,    52,    53,    56,    67,    68,    69,    70,    73,
-      78,    96,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,    22,
-      23,    24,    36,    39,   116,     4,    34,    38,   103,    42,
-     144,    45,   144,    96,    59,    61,    94,   116,     4,    71,
-       6,    76,   112,   113,   114,   115,   116,    74,    22,    23,
-      76,   112,   114,    75,     6,    76,    75,    72,   121,   144,
-     129,   112,    14,    32,    13,    12,    11,    10,    15,    16,
-      17,    18,    72,    79,    80,    81,    78,    82,    19,    83,
-      84,    85,    86,     4,    91,    92,    93,   116,   144,    72,
-     116,     4,   112,    64,    65,    77,    94,   115,   116,    72,
-      75,   144,   144,   144,    97,    68,    69,    73,    99,   133,
-     100,    78,   102,   131,   117,     4,    94,   118,   119,   120,
-     121,   123,   123,   123,   123,   123,   123,   123,   124,   125,
-     125,   126,   127,   128,   128,   129,    91,    37,    92,     4,
-      43,   116,     4,    71,   145,    21,   136,   137,   138,   139,
-     140,    72,    62,    73,    77,   116,   115,    76,   114,   141,
-     141,    77,    75,   132,    91,    29,    35,   103,    91,   116,
-      40,    45,   111,    98,    31,     4,     4,    24,    66,   116,
-      46,    47,   142,   143,   144,     4,     4,    99,    30,   107,
-     108,   109,    94,   116,    37,     4,   116,    29,   115,    31,
-       4,    54,   136,   136,    25,    26,    55,     4,   144,   144,
-      77,    75,   114,    91,    91,   116,    29,   110,   108,    31,
-     106,    91,    41,   104,   145,   145,    44,   136,     4,    66,
-      66,    66,   136,   114,   114,   142,    31,    31,    32,     4,
-      31,    28,    62,   116,     4,    92,    91,   141,    76,    76,
-      22,    23,     4,    91,    28,    91,   111,     4,   143,   143,
-      91,    62,    91,    77,    77,    31,     4,     4,    24,    91,
-      91,    31,    31,    24,    24
+      78,    96,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,    22,
+      23,    24,    36,    39,   117,     4,    34,    38,   103,    42,
+     145,    45,   145,    96,    59,    61,    94,   117,     4,    71,
+       6,    75,    76,   112,   113,   114,   115,   117,    74,    22,
+      23,    76,   112,   115,    75,     6,    76,    75,    72,   122,
+     145,   130,   112,    14,    32,    13,    12,    11,    10,    15,
+      16,    17,    18,    72,    79,    80,    81,    78,    82,    19,
+      83,    84,    85,    86,     4,    91,    92,    93,   117,   145,
+      72,   117,     4,   112,    64,    65,    77,    94,   114,   114,
+     117,    72,    75,   145,   145,   145,    97,    68,    69,    73,
+      99,   134,   100,    78,   102,   132,   118,     4,    94,   119,
+     120,   121,   122,   124,   124,   124,   124,   124,   124,   124,
+     125,   126,   126,   127,   128,   129,   129,   130,    91,    37,
+      92,     4,    43,   117,     4,    71,   146,    21,   137,   138,
+     139,   140,   141,    72,    62,    73,    77,   117,   114,    76,
+     115,   142,   142,    77,    75,   133,    91,    29,    31,   106,
+      35,   103,    91,   117,    40,    45,   111,    98,    31,     4,
+       4,    24,    66,   117,    46,    47,   143,   144,   145,     4,
+       4,    99,    30,   107,   108,   109,    94,    28,   117,    37,
+       4,   117,    29,   116,   117,    31,     4,    54,   137,   137,
+      25,    26,    55,     4,   145,   145,    77,    75,   115,    91,
+      91,   117,    29,   110,   108,   106,    91,    41,   104,   146,
+     146,    75,    44,   137,     4,    66,    66,    66,   137,   115,
+     115,   143,    31,    31,    32,     4,    31,    62,   117,     4,
+      92,    91,   116,   142,    76,    76,    22,    23,     4,    91,
+      28,    91,   111,     4,   144,   144,    91,    62,    91,    77,
+      77,    31,     4,     4,    24,    91,    91,    31,    31,    24,
+      24
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -993,15 +1001,15 @@ static const yytype_uint8 yyr1[] =
      100,   100,   101,   102,   102,   103,   103,   104,   104,   105,
      105,   105,   106,   106,   107,   107,   108,   108,   109,   110,
      110,   111,   111,   111,   112,   112,   113,   113,   114,   114,
-     115,   115,   116,   116,   117,   117,   118,   118,   119,   119,
-     120,   120,   121,   121,   122,   122,   122,   122,   122,   122,
-     122,   122,   123,   123,   124,   124,   124,   125,   125,   126,
-     126,   127,   127,   127,   128,   128,   129,   129,   129,   129,
-     130,   130,   131,   131,   131,   131,   131,   131,   131,   132,
-     132,   132,   132,   133,   133,   133,   134,   134,   135,   136,
-     136,   136,   136,   136,   137,   137,   137,   138,   138,   139,
-     139,   140,   140,   140,   141,   141,   142,   142,   143,   143,
-     143,   144,   144,   145,   145
+     114,   115,   115,   116,   116,   117,   117,   118,   118,   119,
+     119,   120,   120,   121,   121,   122,   122,   123,   123,   123,
+     123,   123,   123,   123,   123,   124,   124,   125,   125,   125,
+     126,   126,   127,   127,   128,   128,   128,   129,   129,   130,
+     130,   130,   130,   131,   131,   132,   132,   132,   132,   132,
+     132,   132,   133,   133,   133,   133,   134,   134,   134,   135,
+     135,   136,   137,   137,   137,   137,   137,   138,   138,   138,
+     139,   139,   140,   140,   141,   141,   141,   142,   142,   143,
+     143,   144,   144,   144,   145,   145,   146,   146
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1013,17 +1021,17 @@ static const yytype_uint8 yyr2[] =
        2,     2,     2,     5,     1,     4,     4,     2,    10,     8,
        7,     1,     3,     1,     3,     1,     4,     2,     1,     3,
        1,     3,     3,     1,     2,     1,     1,     0,     2,     9,
-       4,     7,     0,     2,     0,     1,     1,     2,     5,     0,
-       3,     0,     4,     5,     1,     3,     1,     1,     0,     1,
-       1,     3,     1,     3,     1,     3,     1,     3,     1,     3,
-       1,     3,     1,     2,     1,     3,     3,     3,     3,     3,
-       3,     3,     1,     3,     1,     3,     3,     1,     3,     1,
-       3,     1,     3,     3,     1,     3,     1,     1,     2,     2,
-       1,     2,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     3,     1,     7,     0,
-       3,     4,     4,     3,     9,    11,    11,     8,     8,     0,
-       1,     2,     1,     1,     1,     3,     1,     3,     2,     3,
-       3,     1,     1,     1,     1
+       5,     7,     0,     2,     0,     1,     1,     2,     5,     0,
+       3,     0,     4,     5,     1,     3,     1,     1,     1,     3,
+       2,     0,     1,     1,     3,     1,     3,     1,     3,     1,
+       3,     1,     3,     1,     3,     1,     2,     1,     3,     3,
+       3,     3,     3,     3,     3,     1,     3,     1,     3,     3,
+       1,     3,     1,     3,     1,     3,     3,     1,     3,     1,
+       1,     2,     2,     1,     2,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
+       1,     7,     0,     3,     4,     4,     3,     9,    11,    11,
+       8,     8,     0,     1,     2,     1,     1,     1,     3,     1,
+       3,     2,     3,     3,     1,     1,     1,     1
 };
 
 
@@ -1708,944 +1716,962 @@ yyreduce:
         case 2:
 #line 147 "parser.y" /* yacc.c:1646  */
     { parse_complete(ctx, (yyvsp[-2].boolean)); }
-#line 1717 "parser.tab.c" /* yacc.c:1646  */
+#line 1725 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 3:
 #line 150 "parser.y" /* yacc.c:1646  */
     { (yyval.boolean) = FALSE; }
-#line 1723 "parser.tab.c" /* yacc.c:1646  */
+#line 1731 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 4:
 #line 151 "parser.y" /* yacc.c:1646  */
     { (yyval.boolean) = TRUE; }
-#line 1729 "parser.tab.c" /* yacc.c:1646  */
+#line 1737 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 6:
 #line 155 "parser.y" /* yacc.c:1646  */
     { source_add_statement(ctx, (yyvsp[0].statement)); }
-#line 1735 "parser.tab.c" /* yacc.c:1646  */
+#line 1743 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 7:
 #line 156 "parser.y" /* yacc.c:1646  */
     { source_add_class(ctx, (yyvsp[0].class_decl)); }
-#line 1741 "parser.tab.c" /* yacc.c:1646  */
+#line 1749 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 8:
 #line 159 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = NULL; }
-#line 1747 "parser.tab.c" /* yacc.c:1646  */
+#line 1755 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 9:
 #line 160 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = (yyvsp[0].statement); }
-#line 1753 "parser.tab.c" /* yacc.c:1646  */
+#line 1761 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 10:
 #line 163 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = (yyvsp[0].statement); }
-#line 1759 "parser.tab.c" /* yacc.c:1646  */
+#line 1767 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 11:
 #line 164 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = link_statements((yyvsp[-1].statement), (yyvsp[0].statement)); }
-#line 1765 "parser.tab.c" /* yacc.c:1646  */
+#line 1773 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 12:
 #line 167 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = (yyvsp[-1].statement); }
-#line 1771 "parser.tab.c" /* yacc.c:1646  */
+#line 1779 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 13:
 #line 170 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = NULL; }
-#line 1777 "parser.tab.c" /* yacc.c:1646  */
+#line 1785 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 14:
 #line 171 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = (yyvsp[0].statement); }
-#line 1783 "parser.tab.c" /* yacc.c:1646  */
+#line 1791 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 15:
 #line 172 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = (yyvsp[0].statement); }
-#line 1789 "parser.tab.c" /* yacc.c:1646  */
+#line 1797 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 16:
 #line 173 "parser.y" /* yacc.c:1646  */
     { (yyvsp[-2].statement)->next = (yyvsp[0].statement); (yyval.statement) = (yyvsp[-2].statement); }
-#line 1795 "parser.tab.c" /* yacc.c:1646  */
+#line 1803 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 17:
 #line 174 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = (yyvsp[-1].statement); }
-#line 1801 "parser.tab.c" /* yacc.c:1646  */
+#line 1809 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 18:
 #line 177 "parser.y" /* yacc.c:1646  */
     { (yyvsp[-1].member)->args = (yyvsp[0].expression); (yyval.statement) = new_call_statement(ctx, FALSE, (yyvsp[-1].member)); CHECK_ERROR; }
-#line 1807 "parser.tab.c" /* yacc.c:1646  */
+#line 1815 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 19:
 #line 178 "parser.y" /* yacc.c:1646  */
     { (yyvsp[-1].member)->args = (yyvsp[0].expression); (yyval.statement) = new_call_statement(ctx, TRUE, (yyvsp[-1].member)); CHECK_ERROR; }
-#line 1813 "parser.tab.c" /* yacc.c:1646  */
+#line 1821 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 20:
 #line 180 "parser.y" /* yacc.c:1646  */
     { (yyvsp[-3].member)->args = (yyvsp[-2].expression); (yyval.statement) = new_assign_statement(ctx, (yyvsp[-3].member), (yyvsp[0].expression)); CHECK_ERROR; }
-#line 1819 "parser.tab.c" /* yacc.c:1646  */
+#line 1827 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 21:
 #line 181 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_dim_statement(ctx, (yyvsp[0].dim_decl)); CHECK_ERROR; }
-#line 1825 "parser.tab.c" /* yacc.c:1646  */
+#line 1833 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 22:
 #line 182 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = (yyvsp[0].statement); }
-#line 1831 "parser.tab.c" /* yacc.c:1646  */
+#line 1839 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 23:
 #line 184 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_while_statement(ctx, STAT_WHILE, (yyvsp[-3].expression), (yyvsp[-1].statement)); CHECK_ERROR; }
-#line 1837 "parser.tab.c" /* yacc.c:1646  */
+#line 1845 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 24:
 #line 186 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_while_statement(ctx, (yyvsp[-4].boolean) ? STAT_WHILELOOP : STAT_UNTIL, (yyvsp[-3].expression), (yyvsp[-1].statement));
                                               CHECK_ERROR; }
-#line 1844 "parser.tab.c" /* yacc.c:1646  */
+#line 1852 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 25:
 #line 189 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_while_statement(ctx, (yyvsp[-1].boolean) ? STAT_DOWHILE : STAT_DOUNTIL, (yyvsp[0].expression), (yyvsp[-3].statement));
                                               CHECK_ERROR; }
-#line 1851 "parser.tab.c" /* yacc.c:1646  */
+#line 1859 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 26:
 #line 191 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_while_statement(ctx, STAT_DOWHILE, NULL, (yyvsp[-1].statement)); CHECK_ERROR; }
-#line 1857 "parser.tab.c" /* yacc.c:1646  */
+#line 1865 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 27:
 #line 192 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_function_statement(ctx, (yyvsp[0].func_decl)); CHECK_ERROR; }
-#line 1863 "parser.tab.c" /* yacc.c:1646  */
+#line 1871 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 28:
 #line 193 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_statement(ctx, STAT_EXITDO, 0); CHECK_ERROR; }
-#line 1869 "parser.tab.c" /* yacc.c:1646  */
+#line 1877 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 29:
 #line 194 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_statement(ctx, STAT_EXITFOR, 0); CHECK_ERROR; }
-#line 1875 "parser.tab.c" /* yacc.c:1646  */
+#line 1883 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 30:
 #line 195 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_statement(ctx, STAT_EXITFUNC, 0); CHECK_ERROR; }
-#line 1881 "parser.tab.c" /* yacc.c:1646  */
+#line 1889 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 31:
 #line 196 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_statement(ctx, STAT_EXITPROP, 0); CHECK_ERROR; }
-#line 1887 "parser.tab.c" /* yacc.c:1646  */
+#line 1895 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 32:
 #line 197 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_statement(ctx, STAT_EXITSUB, 0); CHECK_ERROR; }
-#line 1893 "parser.tab.c" /* yacc.c:1646  */
+#line 1901 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 33:
 #line 199 "parser.y" /* yacc.c:1646  */
     { (yyvsp[-3].member)->args = (yyvsp[-2].expression); (yyval.statement) = new_set_statement(ctx, (yyvsp[-3].member), (yyvsp[0].expression)); CHECK_ERROR; }
-#line 1899 "parser.tab.c" /* yacc.c:1646  */
+#line 1907 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 34:
 #line 200 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_statement(ctx, STAT_STOP, 0); CHECK_ERROR; }
-#line 1905 "parser.tab.c" /* yacc.c:1646  */
+#line 1913 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 35:
 #line 201 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_onerror_statement(ctx, TRUE); CHECK_ERROR; }
-#line 1911 "parser.tab.c" /* yacc.c:1646  */
+#line 1919 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 36:
 #line 202 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_onerror_statement(ctx, FALSE); CHECK_ERROR; }
-#line 1917 "parser.tab.c" /* yacc.c:1646  */
+#line 1925 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 37:
 #line 203 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_const_statement(ctx, (yyvsp[0].const_decl)); CHECK_ERROR; }
-#line 1923 "parser.tab.c" /* yacc.c:1646  */
+#line 1931 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 38:
 #line 205 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_forto_statement(ctx, (yyvsp[-8].string), (yyvsp[-6].expression), (yyvsp[-4].expression), (yyvsp[-3].expression), (yyvsp[-1].statement)); CHECK_ERROR; }
-#line 1929 "parser.tab.c" /* yacc.c:1646  */
+#line 1937 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 39:
 #line 207 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_foreach_statement(ctx, (yyvsp[-5].string), (yyvsp[-3].expression), (yyvsp[-1].statement)); }
-#line 1935 "parser.tab.c" /* yacc.c:1646  */
+#line 1943 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 40:
 #line 209 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_select_statement(ctx, (yyvsp[-4].expression), (yyvsp[-2].case_clausule)); }
-#line 1941 "parser.tab.c" /* yacc.c:1646  */
+#line 1949 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 41:
 #line 212 "parser.y" /* yacc.c:1646  */
     { (yyval.member) = new_member_expression(ctx, NULL, (yyvsp[0].string)); CHECK_ERROR; }
-#line 1947 "parser.tab.c" /* yacc.c:1646  */
+#line 1955 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 42:
 #line 213 "parser.y" /* yacc.c:1646  */
     { (yyval.member) = new_member_expression(ctx, (yyvsp[-2].expression), (yyvsp[0].string)); CHECK_ERROR; }
-#line 1953 "parser.tab.c" /* yacc.c:1646  */
+#line 1961 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 43:
 #line 216 "parser.y" /* yacc.c:1646  */
     { (yyval.dim_decl) = (yyvsp[0].dim_decl); }
-#line 1959 "parser.tab.c" /* yacc.c:1646  */
+#line 1967 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 44:
 #line 217 "parser.y" /* yacc.c:1646  */
     { (yyvsp[-2].dim_decl)->next = (yyvsp[0].dim_decl); (yyval.dim_decl) = (yyvsp[-2].dim_decl); }
-#line 1965 "parser.tab.c" /* yacc.c:1646  */
+#line 1973 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 45:
 #line 220 "parser.y" /* yacc.c:1646  */
     { (yyval.dim_decl) = new_dim_decl(ctx, (yyvsp[0].string), FALSE, NULL); CHECK_ERROR; }
-#line 1971 "parser.tab.c" /* yacc.c:1646  */
+#line 1979 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 46:
 #line 221 "parser.y" /* yacc.c:1646  */
     { (yyval.dim_decl) = new_dim_decl(ctx, (yyvsp[-3].string), TRUE, (yyvsp[-1].dim_list)); CHECK_ERROR; }
-#line 1977 "parser.tab.c" /* yacc.c:1646  */
+#line 1985 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 47:
 #line 222 "parser.y" /* yacc.c:1646  */
     { (yyval.dim_decl) = new_dim_decl(ctx, (yyvsp[-1].string), TRUE, NULL); CHECK_ERROR; }
-#line 1983 "parser.tab.c" /* yacc.c:1646  */
+#line 1991 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 48:
 #line 225 "parser.y" /* yacc.c:1646  */
     { (yyval.dim_list) = new_dim(ctx, (yyvsp[0].uint), NULL); }
-#line 1989 "parser.tab.c" /* yacc.c:1646  */
+#line 1997 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 49:
 #line 226 "parser.y" /* yacc.c:1646  */
     { (yyval.dim_list) = new_dim(ctx, (yyvsp[-2].uint), (yyvsp[0].dim_list)); }
-#line 1995 "parser.tab.c" /* yacc.c:1646  */
+#line 2003 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 50:
 #line 229 "parser.y" /* yacc.c:1646  */
     { (yyval.const_decl) = (yyvsp[0].const_decl); }
-#line 2001 "parser.tab.c" /* yacc.c:1646  */
+#line 2009 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 51:
 #line 230 "parser.y" /* yacc.c:1646  */
     { (yyvsp[-2].const_decl)->next = (yyvsp[0].const_decl); (yyval.const_decl) = (yyvsp[-2].const_decl); }
-#line 2007 "parser.tab.c" /* yacc.c:1646  */
+#line 2015 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 52:
 #line 233 "parser.y" /* yacc.c:1646  */
     { (yyval.const_decl) = new_const_decl(ctx, (yyvsp[-2].string), (yyvsp[0].expression)); CHECK_ERROR; }
-#line 2013 "parser.tab.c" /* yacc.c:1646  */
+#line 2021 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 53:
 #line 236 "parser.y" /* yacc.c:1646  */
     { (yyval.expression) = (yyvsp[0].expression); }
-#line 2019 "parser.tab.c" /* yacc.c:1646  */
+#line 2027 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 54:
 #line 237 "parser.y" /* yacc.c:1646  */
     { (yyval.expression) = new_unary_expression(ctx, EXPR_NEG, (yyvsp[0].expression)); CHECK_ERROR; }
-#line 2025 "parser.tab.c" /* yacc.c:1646  */
+#line 2033 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 55:
 #line 240 "parser.y" /* yacc.c:1646  */
     { (yyval.boolean) = TRUE; }
-#line 2031 "parser.tab.c" /* yacc.c:1646  */
+#line 2039 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 56:
 #line 241 "parser.y" /* yacc.c:1646  */
     { (yyval.boolean) = FALSE; }
-#line 2037 "parser.tab.c" /* yacc.c:1646  */
+#line 2045 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 57:
 #line 244 "parser.y" /* yacc.c:1646  */
     { (yyval.expression) = NULL;}
-#line 2043 "parser.tab.c" /* yacc.c:1646  */
+#line 2051 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 58:
 #line 245 "parser.y" /* yacc.c:1646  */
     { (yyval.expression) = (yyvsp[0].expression); }
-#line 2049 "parser.tab.c" /* yacc.c:1646  */
+#line 2057 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 59:
 #line 249 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_if_statement(ctx, (yyvsp[-7].expression), (yyvsp[-4].statement), (yyvsp[-3].elseif), (yyvsp[-2].statement)); CHECK_ERROR; }
-#line 2055 "parser.tab.c" /* yacc.c:1646  */
+#line 2063 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 60:
 #line 250 "parser.y" /* yacc.c:1646  */
-    { (yyval.statement) = new_if_statement(ctx, (yyvsp[-2].expression), (yyvsp[0].statement), NULL, NULL); CHECK_ERROR; }
-#line 2061 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.statement) = new_if_statement(ctx, (yyvsp[-3].expression), (yyvsp[-1].statement), NULL, NULL); CHECK_ERROR; }
+#line 2069 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 61:
 #line 252 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = new_if_statement(ctx, (yyvsp[-5].expression), (yyvsp[-3].statement), NULL, (yyvsp[-1].statement)); CHECK_ERROR; }
-#line 2067 "parser.tab.c" /* yacc.c:1646  */
+#line 2075 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 64:
 #line 259 "parser.y" /* yacc.c:1646  */
     { (yyval.elseif) = NULL; }
-#line 2073 "parser.tab.c" /* yacc.c:1646  */
+#line 2081 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 65:
 #line 260 "parser.y" /* yacc.c:1646  */
     { (yyval.elseif) = (yyvsp[0].elseif); }
-#line 2079 "parser.tab.c" /* yacc.c:1646  */
+#line 2087 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 66:
 #line 263 "parser.y" /* yacc.c:1646  */
     { (yyval.elseif) = (yyvsp[0].elseif); }
-#line 2085 "parser.tab.c" /* yacc.c:1646  */
+#line 2093 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 67:
 #line 264 "parser.y" /* yacc.c:1646  */
     { (yyvsp[-1].elseif)->next = (yyvsp[0].elseif); (yyval.elseif) = (yyvsp[-1].elseif); }
-#line 2091 "parser.tab.c" /* yacc.c:1646  */
+#line 2099 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 68:
 #line 268 "parser.y" /* yacc.c:1646  */
     { (yyval.elseif) = new_elseif_decl(ctx, (yyvsp[-3].expression), (yyvsp[0].statement)); }
-#line 2097 "parser.tab.c" /* yacc.c:1646  */
+#line 2105 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 69:
 #line 271 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = NULL; }
-#line 2103 "parser.tab.c" /* yacc.c:1646  */
+#line 2111 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 70:
 #line 272 "parser.y" /* yacc.c:1646  */
     { (yyval.statement) = (yyvsp[0].statement); }
-#line 2109 "parser.tab.c" /* yacc.c:1646  */
+#line 2117 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 71:
 #line 275 "parser.y" /* yacc.c:1646  */
     { (yyval.case_clausule) = NULL; }
-#line 2115 "parser.tab.c" /* yacc.c:1646  */
+#line 2123 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 72:
 #line 276 "parser.y" /* yacc.c:1646  */
     { (yyval.case_clausule) = new_case_clausule(ctx, NULL, (yyvsp[0].statement), NULL); }
-#line 2121 "parser.tab.c" /* yacc.c:1646  */
+#line 2129 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 73:
 #line 278 "parser.y" /* yacc.c:1646  */
     { (yyval.case_clausule) = new_case_clausule(ctx, (yyvsp[-3].expression), (yyvsp[-1].statement), (yyvsp[0].case_clausule)); }
-#line 2127 "parser.tab.c" /* yacc.c:1646  */
+#line 2135 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 74:
 #line 281 "parser.y" /* yacc.c:1646  */
     { (yyval.expression) = NULL; }
-#line 2133 "parser.tab.c" /* yacc.c:1646  */
+#line 2141 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 75:
 #line 282 "parser.y" /* yacc.c:1646  */
     { (yyval.expression) = (yyvsp[-1].expression); }
-#line 2139 "parser.tab.c" /* yacc.c:1646  */
+#line 2147 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 76:
 #line 285 "parser.y" /* yacc.c:1646  */
     { (yyval.expression) = NULL; }
-#line 2145 "parser.tab.c" /* yacc.c:1646  */
+#line 2153 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 77:
 #line 286 "parser.y" /* yacc.c:1646  */
     { (yyval.expression) = (yyvsp[0].expression); }
-#line 2151 "parser.tab.c" /* yacc.c:1646  */
+#line 2159 "parser.tab.c" /* yacc.c:1646  */
     break;
 
-  case 80:
-#line 293 "parser.y" /* yacc.c:1646  */
+  case 78:
+#line 289 "parser.y" /* yacc.c:1646  */
     { (yyval.expression) = (yyvsp[0].expression); }
-#line 2157 "parser.tab.c" /* yacc.c:1646  */
+#line 2165 "parser.tab.c" /* yacc.c:1646  */
     break;
 
-  case 81:
-#line 294 "parser.y" /* yacc.c:1646  */
+  case 79:
+#line 290 "parser.y" /* yacc.c:1646  */
     { (yyvsp[-2].expression)->next = (yyvsp[0].expression); (yyval.expression) = (yyvsp[-2].expression); }
-#line 2163 "parser.tab.c" /* yacc.c:1646  */
+#line 2171 "parser.tab.c" /* yacc.c:1646  */
     break;
 
-  case 82:
-#line 297 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = (yyvsp[0].expression); }
-#line 2169 "parser.tab.c" /* yacc.c:1646  */
+  case 80:
+#line 291 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = new_expression(ctx, EXPR_NOARG, 0); CHECK_ERROR; (yyval.expression)->next = (yyvsp[0].expression); }
+#line 2177 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 83:
 #line 298 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_binary_expression(ctx, EXPR_IMP, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
-#line 2175 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.expression) = (yyvsp[0].expression); }
+#line 2183 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 84:
-#line 301 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = (yyvsp[0].expression); }
-#line 2181 "parser.tab.c" /* yacc.c:1646  */
+#line 299 "parser.y" /* yacc.c:1646  */
+    { (yyvsp[-2].expression)->next = (yyvsp[0].expression); (yyval.expression) = (yyvsp[-2].expression); }
+#line 2189 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 85:
 #line 302 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_binary_expression(ctx, EXPR_EQV, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
-#line 2187 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.expression) = (yyvsp[0].expression); }
+#line 2195 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 86:
-#line 305 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = (yyvsp[0].expression); }
-#line 2193 "parser.tab.c" /* yacc.c:1646  */
+#line 303 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = new_binary_expression(ctx, EXPR_IMP, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
+#line 2201 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 87:
 #line 306 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_binary_expression(ctx, EXPR_XOR, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
-#line 2199 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.expression) = (yyvsp[0].expression); }
+#line 2207 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 88:
-#line 309 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = (yyvsp[0].expression); }
-#line 2205 "parser.tab.c" /* yacc.c:1646  */
+#line 307 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = new_binary_expression(ctx, EXPR_EQV, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
+#line 2213 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 89:
 #line 310 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_binary_expression(ctx, EXPR_OR, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
-#line 2211 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.expression) = (yyvsp[0].expression); }
+#line 2219 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 90:
-#line 313 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = (yyvsp[0].expression); }
-#line 2217 "parser.tab.c" /* yacc.c:1646  */
+#line 311 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = new_binary_expression(ctx, EXPR_XOR, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
+#line 2225 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 91:
 #line 314 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_binary_expression(ctx, EXPR_AND, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
-#line 2223 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.expression) = (yyvsp[0].expression); }
+#line 2231 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 92:
-#line 317 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = (yyvsp[0].expression); }
-#line 2229 "parser.tab.c" /* yacc.c:1646  */
+#line 315 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = new_binary_expression(ctx, EXPR_OR, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
+#line 2237 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 93:
 #line 318 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_unary_expression(ctx, EXPR_NOT, (yyvsp[0].expression)); CHECK_ERROR; }
-#line 2235 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.expression) = (yyvsp[0].expression); }
+#line 2243 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 94:
-#line 321 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = (yyvsp[0].expression); }
-#line 2241 "parser.tab.c" /* yacc.c:1646  */
+#line 319 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = new_binary_expression(ctx, EXPR_AND, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
+#line 2249 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 95:
 #line 322 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_binary_expression(ctx, EXPR_EQUAL, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
-#line 2247 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.expression) = (yyvsp[0].expression); }
+#line 2255 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 96:
 #line 323 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_binary_expression(ctx, EXPR_NEQUAL, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
-#line 2253 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.expression) = new_unary_expression(ctx, EXPR_NOT, (yyvsp[0].expression)); CHECK_ERROR; }
+#line 2261 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 97:
-#line 324 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_binary_expression(ctx, EXPR_GT, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
-#line 2259 "parser.tab.c" /* yacc.c:1646  */
+#line 326 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = (yyvsp[0].expression); }
+#line 2267 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 98:
-#line 325 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_binary_expression(ctx, EXPR_LT, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
-#line 2265 "parser.tab.c" /* yacc.c:1646  */
+#line 327 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = new_binary_expression(ctx, EXPR_EQUAL, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
+#line 2273 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 99:
-#line 326 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_binary_expression(ctx, EXPR_GTEQ, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
-#line 2271 "parser.tab.c" /* yacc.c:1646  */
+#line 328 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = new_binary_expression(ctx, EXPR_NEQUAL, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
+#line 2279 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 100:
-#line 327 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_binary_expression(ctx, EXPR_LTEQ, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
-#line 2277 "parser.tab.c" /* yacc.c:1646  */
+#line 329 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = new_binary_expression(ctx, EXPR_GT, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
+#line 2285 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 101:
-#line 328 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_binary_expression(ctx, EXPR_IS, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
-#line 2283 "parser.tab.c" /* yacc.c:1646  */
+#line 330 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = new_binary_expression(ctx, EXPR_LT, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
+#line 2291 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 102:
 #line 331 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = (yyvsp[0].expression); }
-#line 2289 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.expression) = new_binary_expression(ctx, EXPR_GTEQ, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
+#line 2297 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 103:
 #line 332 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_binary_expression(ctx, EXPR_CONCAT, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
-#line 2295 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.expression) = new_binary_expression(ctx, EXPR_LTEQ, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
+#line 2303 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 104:
-#line 335 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = (yyvsp[0].expression); }
-#line 2301 "parser.tab.c" /* yacc.c:1646  */
+#line 333 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = new_binary_expression(ctx, EXPR_IS, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
+#line 2309 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 105:
 #line 336 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_binary_expression(ctx, EXPR_ADD, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
-#line 2307 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.expression) = (yyvsp[0].expression); }
+#line 2315 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 106:
 #line 337 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_binary_expression(ctx, EXPR_SUB, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
-#line 2313 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.expression) = new_binary_expression(ctx, EXPR_CONCAT, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
+#line 2321 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 107:
 #line 340 "parser.y" /* yacc.c:1646  */
     { (yyval.expression) = (yyvsp[0].expression); }
-#line 2319 "parser.tab.c" /* yacc.c:1646  */
+#line 2327 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 108:
 #line 341 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_binary_expression(ctx, EXPR_MOD, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
-#line 2325 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.expression) = new_binary_expression(ctx, EXPR_ADD, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
+#line 2333 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 109:
-#line 344 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = (yyvsp[0].expression); }
-#line 2331 "parser.tab.c" /* yacc.c:1646  */
+#line 342 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = new_binary_expression(ctx, EXPR_SUB, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
+#line 2339 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 110:
-#line 346 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_binary_expression(ctx, EXPR_IDIV, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
-#line 2337 "parser.tab.c" /* yacc.c:1646  */
+#line 345 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = (yyvsp[0].expression); }
+#line 2345 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 111:
-#line 349 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = (yyvsp[0].expression); }
-#line 2343 "parser.tab.c" /* yacc.c:1646  */
+#line 346 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = new_binary_expression(ctx, EXPR_MOD, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
+#line 2351 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 112:
-#line 351 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_binary_expression(ctx, EXPR_MUL, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
-#line 2349 "parser.tab.c" /* yacc.c:1646  */
+#line 349 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = (yyvsp[0].expression); }
+#line 2357 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 113:
-#line 353 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_binary_expression(ctx, EXPR_DIV, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
-#line 2355 "parser.tab.c" /* yacc.c:1646  */
+#line 351 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = new_binary_expression(ctx, EXPR_IDIV, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
+#line 2363 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 114:
-#line 356 "parser.y" /* yacc.c:1646  */
+#line 354 "parser.y" /* yacc.c:1646  */
     { (yyval.expression) = (yyvsp[0].expression); }
-#line 2361 "parser.tab.c" /* yacc.c:1646  */
+#line 2369 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 115:
-#line 357 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_binary_expression(ctx, EXPR_EXP, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
-#line 2367 "parser.tab.c" /* yacc.c:1646  */
+#line 356 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = new_binary_expression(ctx, EXPR_MUL, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
+#line 2375 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 116:
-#line 360 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = (yyvsp[0].expression); }
-#line 2373 "parser.tab.c" /* yacc.c:1646  */
+#line 358 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = new_binary_expression(ctx, EXPR_DIV, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
+#line 2381 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 117:
 #line 361 "parser.y" /* yacc.c:1646  */
     { (yyval.expression) = (yyvsp[0].expression); }
-#line 2379 "parser.tab.c" /* yacc.c:1646  */
+#line 2387 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 118:
 #line 362 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_new_expression(ctx, (yyvsp[0].string)); CHECK_ERROR; }
-#line 2385 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.expression) = new_binary_expression(ctx, EXPR_EXP, (yyvsp[-2].expression), (yyvsp[0].expression)); CHECK_ERROR; }
+#line 2393 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 119:
-#line 363 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_unary_expression(ctx, EXPR_NEG, (yyvsp[0].expression)); CHECK_ERROR; }
-#line 2391 "parser.tab.c" /* yacc.c:1646  */
+#line 365 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = (yyvsp[0].expression); }
+#line 2399 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 120:
 #line 366 "parser.y" /* yacc.c:1646  */
     { (yyval.expression) = (yyvsp[0].expression); }
-#line 2397 "parser.tab.c" /* yacc.c:1646  */
+#line 2405 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 121:
 #line 367 "parser.y" /* yacc.c:1646  */
-    { (yyvsp[-1].member)->args = (yyvsp[0].expression); (yyval.expression) = &(yyvsp[-1].member)->expr; }
-#line 2403 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.expression) = new_new_expression(ctx, (yyvsp[0].string)); CHECK_ERROR; }
+#line 2411 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 122:
-#line 370 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_bool_expression(ctx, VARIANT_TRUE); CHECK_ERROR; }
-#line 2409 "parser.tab.c" /* yacc.c:1646  */
+#line 368 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = new_unary_expression(ctx, EXPR_NEG, (yyvsp[0].expression)); CHECK_ERROR; }
+#line 2417 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 123:
 #line 371 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_bool_expression(ctx, VARIANT_FALSE); CHECK_ERROR; }
-#line 2415 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.expression) = (yyvsp[0].expression); }
+#line 2423 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 124:
 #line 372 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_string_expression(ctx, (yyvsp[0].string)); CHECK_ERROR; }
-#line 2421 "parser.tab.c" /* yacc.c:1646  */
+    { (yyvsp[-1].member)->args = (yyvsp[0].expression); (yyval.expression) = &(yyvsp[-1].member)->expr; }
+#line 2429 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 125:
-#line 373 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = (yyvsp[0].expression); }
-#line 2427 "parser.tab.c" /* yacc.c:1646  */
+#line 375 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = new_bool_expression(ctx, VARIANT_TRUE); CHECK_ERROR; }
+#line 2435 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 126:
-#line 374 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_expression(ctx, EXPR_EMPTY, 0); CHECK_ERROR; }
-#line 2433 "parser.tab.c" /* yacc.c:1646  */
+#line 376 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = new_bool_expression(ctx, VARIANT_FALSE); CHECK_ERROR; }
+#line 2441 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 127:
-#line 375 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_expression(ctx, EXPR_NULL, 0); CHECK_ERROR; }
-#line 2439 "parser.tab.c" /* yacc.c:1646  */
+#line 377 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = new_string_expression(ctx, (yyvsp[0].string)); CHECK_ERROR; }
+#line 2447 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 128:
-#line 376 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_expression(ctx, EXPR_NOTHING, 0); CHECK_ERROR; }
-#line 2445 "parser.tab.c" /* yacc.c:1646  */
+#line 378 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = (yyvsp[0].expression); }
+#line 2453 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 129:
 #line 379 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_long_expression(ctx, EXPR_USHORT, (yyvsp[0].lng)); CHECK_ERROR; }
-#line 2451 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.expression) = new_expression(ctx, EXPR_EMPTY, 0); CHECK_ERROR; }
+#line 2459 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 130:
 #line 380 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_long_expression(ctx, EXPR_USHORT, 0); CHECK_ERROR; }
-#line 2457 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.expression) = new_expression(ctx, EXPR_NULL, 0); CHECK_ERROR; }
+#line 2465 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 131:
 #line 381 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_long_expression(ctx, EXPR_ULONG, (yyvsp[0].lng)); CHECK_ERROR; }
-#line 2463 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.expression) = new_expression(ctx, EXPR_NOTHING, 0); CHECK_ERROR; }
+#line 2471 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 132:
-#line 382 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_double_expression(ctx, (yyvsp[0].dbl)); CHECK_ERROR; }
-#line 2469 "parser.tab.c" /* yacc.c:1646  */
+#line 384 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = new_long_expression(ctx, EXPR_USHORT, (yyvsp[0].lng)); CHECK_ERROR; }
+#line 2477 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 133:
 #line 385 "parser.y" /* yacc.c:1646  */
-    { (yyval.uint) = (yyvsp[0].lng); }
-#line 2475 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.expression) = new_long_expression(ctx, EXPR_USHORT, 0); CHECK_ERROR; }
+#line 2483 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 134:
 #line 386 "parser.y" /* yacc.c:1646  */
-    { (yyval.uint) = 0; }
-#line 2481 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.expression) = new_long_expression(ctx, EXPR_ULONG, (yyvsp[0].lng)); CHECK_ERROR; }
+#line 2489 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 135:
 #line 387 "parser.y" /* yacc.c:1646  */
-    { (yyval.uint) = (yyvsp[0].lng); }
-#line 2487 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.expression) = new_double_expression(ctx, (yyvsp[0].dbl)); CHECK_ERROR; }
+#line 2495 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 136:
 #line 390 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_unary_expression(ctx, EXPR_BRACKETS, (yyvsp[-1].expression)); }
-#line 2493 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.uint) = (yyvsp[0].lng); }
+#line 2501 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 137:
 #line 391 "parser.y" /* yacc.c:1646  */
-    { (yyval.expression) = new_expression(ctx, EXPR_ME, 0); CHECK_ERROR; }
-#line 2499 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.uint) = 0; }
+#line 2507 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 138:
-#line 394 "parser.y" /* yacc.c:1646  */
-    { (yyvsp[-3].class_decl)->name = (yyvsp[-5].string); (yyval.class_decl) = (yyvsp[-3].class_decl); }
-#line 2505 "parser.tab.c" /* yacc.c:1646  */
+#line 392 "parser.y" /* yacc.c:1646  */
+    { (yyval.uint) = (yyvsp[0].lng); }
+#line 2513 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 139:
-#line 397 "parser.y" /* yacc.c:1646  */
-    { (yyval.class_decl) = new_class_decl(ctx); }
-#line 2511 "parser.tab.c" /* yacc.c:1646  */
+#line 395 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = new_unary_expression(ctx, EXPR_BRACKETS, (yyvsp[-1].expression)); }
+#line 2519 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 140:
-#line 398 "parser.y" /* yacc.c:1646  */
-    { (yyval.class_decl) = add_class_function(ctx, (yyvsp[0].class_decl), (yyvsp[-2].func_decl)); CHECK_ERROR; }
-#line 2517 "parser.tab.c" /* yacc.c:1646  */
+#line 396 "parser.y" /* yacc.c:1646  */
+    { (yyval.expression) = new_expression(ctx, EXPR_ME, 0); CHECK_ERROR; }
+#line 2525 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 141:
-#line 400 "parser.y" /* yacc.c:1646  */
-    { dim_decl_t *dim_decl = new_dim_decl(ctx, (yyvsp[-2].string), FALSE, NULL); CHECK_ERROR;
-                                                  (yyval.class_decl) = add_dim_prop(ctx, (yyvsp[0].class_decl), dim_decl, (yyvsp[-3].uint)); CHECK_ERROR; }
-#line 2524 "parser.tab.c" /* yacc.c:1646  */
+#line 399 "parser.y" /* yacc.c:1646  */
+    { (yyvsp[-3].class_decl)->name = (yyvsp[-5].string); (yyval.class_decl) = (yyvsp[-3].class_decl); }
+#line 2531 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 142:
 #line 402 "parser.y" /* yacc.c:1646  */
-    { (yyval.class_decl) = add_dim_prop(ctx, (yyvsp[0].class_decl), (yyvsp[-2].dim_decl), 0); CHECK_ERROR; }
-#line 2530 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.class_decl) = new_class_decl(ctx); }
+#line 2537 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 143:
 #line 403 "parser.y" /* yacc.c:1646  */
     { (yyval.class_decl) = add_class_function(ctx, (yyvsp[0].class_decl), (yyvsp[-2].func_decl)); CHECK_ERROR; }
-#line 2536 "parser.tab.c" /* yacc.c:1646  */
+#line 2543 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 144:
-#line 407 "parser.y" /* yacc.c:1646  */
-    { (yyval.func_decl) = new_function_decl(ctx, (yyvsp[-5].string), FUNC_PROPGET, (yyvsp[-8].uint), (yyvsp[-4].arg_decl), (yyvsp[-2].statement)); CHECK_ERROR; }
-#line 2542 "parser.tab.c" /* yacc.c:1646  */
+#line 405 "parser.y" /* yacc.c:1646  */
+    { dim_decl_t *dim_decl = new_dim_decl(ctx, (yyvsp[-2].string), FALSE, NULL); CHECK_ERROR;
+                                                  (yyval.class_decl) = add_dim_prop(ctx, (yyvsp[0].class_decl), dim_decl, (yyvsp[-3].uint)); CHECK_ERROR; }
+#line 2550 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 145:
-#line 409 "parser.y" /* yacc.c:1646  */
-    { (yyval.func_decl) = new_function_decl(ctx, (yyvsp[-7].string), FUNC_PROPLET, (yyvsp[-10].uint), (yyvsp[-5].arg_decl), (yyvsp[-2].statement)); CHECK_ERROR; }
-#line 2548 "parser.tab.c" /* yacc.c:1646  */
+#line 407 "parser.y" /* yacc.c:1646  */
+    { (yyval.class_decl) = add_dim_prop(ctx, (yyvsp[0].class_decl), (yyvsp[-2].dim_decl), 0); CHECK_ERROR; }
+#line 2556 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 146:
-#line 411 "parser.y" /* yacc.c:1646  */
-    { (yyval.func_decl) = new_function_decl(ctx, (yyvsp[-7].string), FUNC_PROPSET, (yyvsp[-10].uint), (yyvsp[-5].arg_decl), (yyvsp[-2].statement)); CHECK_ERROR; }
-#line 2554 "parser.tab.c" /* yacc.c:1646  */
+#line 408 "parser.y" /* yacc.c:1646  */
+    { (yyval.class_decl) = add_class_function(ctx, (yyvsp[0].class_decl), (yyvsp[-2].func_decl)); CHECK_ERROR; }
+#line 2562 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 147:
-#line 415 "parser.y" /* yacc.c:1646  */
-    { (yyval.func_decl) = new_function_decl(ctx, (yyvsp[-5].string), FUNC_SUB, (yyvsp[-7].uint), (yyvsp[-4].arg_decl), (yyvsp[-2].statement)); CHECK_ERROR; }
-#line 2560 "parser.tab.c" /* yacc.c:1646  */
+#line 412 "parser.y" /* yacc.c:1646  */
+    { (yyval.func_decl) = new_function_decl(ctx, (yyvsp[-5].string), FUNC_PROPGET, (yyvsp[-8].uint), (yyvsp[-4].arg_decl), (yyvsp[-2].statement)); CHECK_ERROR; }
+#line 2568 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 148:
-#line 417 "parser.y" /* yacc.c:1646  */
-    { (yyval.func_decl) = new_function_decl(ctx, (yyvsp[-5].string), FUNC_FUNCTION, (yyvsp[-7].uint), (yyvsp[-4].arg_decl), (yyvsp[-2].statement)); CHECK_ERROR; }
-#line 2566 "parser.tab.c" /* yacc.c:1646  */
+#line 414 "parser.y" /* yacc.c:1646  */
+    { (yyval.func_decl) = new_function_decl(ctx, (yyvsp[-7].string), FUNC_PROPLET, (yyvsp[-10].uint), (yyvsp[-5].arg_decl), (yyvsp[-2].statement)); CHECK_ERROR; }
+#line 2574 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 149:
-#line 420 "parser.y" /* yacc.c:1646  */
-    { (yyval.uint) = 0; }
-#line 2572 "parser.tab.c" /* yacc.c:1646  */
+#line 416 "parser.y" /* yacc.c:1646  */
+    { (yyval.func_decl) = new_function_decl(ctx, (yyvsp[-7].string), FUNC_PROPSET, (yyvsp[-10].uint), (yyvsp[-5].arg_decl), (yyvsp[-2].statement)); CHECK_ERROR; }
+#line 2580 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 150:
-#line 421 "parser.y" /* yacc.c:1646  */
-    { (yyval.uint) = (yyvsp[0].uint); }
-#line 2578 "parser.tab.c" /* yacc.c:1646  */
+#line 420 "parser.y" /* yacc.c:1646  */
+    { (yyval.func_decl) = new_function_decl(ctx, (yyvsp[-5].string), FUNC_SUB, (yyvsp[-7].uint), (yyvsp[-4].arg_decl), (yyvsp[-2].statement)); CHECK_ERROR; }
+#line 2586 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 151:
-#line 424 "parser.y" /* yacc.c:1646  */
-    { (yyval.uint) = STORAGE_IS_DEFAULT; }
-#line 2584 "parser.tab.c" /* yacc.c:1646  */
+#line 422 "parser.y" /* yacc.c:1646  */
+    { (yyval.func_decl) = new_function_decl(ctx, (yyvsp[-5].string), FUNC_FUNCTION, (yyvsp[-7].uint), (yyvsp[-4].arg_decl), (yyvsp[-2].statement)); CHECK_ERROR; }
+#line 2592 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 152:
 #line 425 "parser.y" /* yacc.c:1646  */
     { (yyval.uint) = 0; }
-#line 2590 "parser.tab.c" /* yacc.c:1646  */
+#line 2598 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 153:
 #line 426 "parser.y" /* yacc.c:1646  */
-    { (yyval.uint) = STORAGE_IS_PRIVATE; }
-#line 2596 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.uint) = (yyvsp[0].uint); }
+#line 2604 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 154:
 #line 429 "parser.y" /* yacc.c:1646  */
-    { (yyval.arg_decl) = NULL; }
-#line 2602 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.uint) = STORAGE_IS_DEFAULT; }
+#line 2610 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 155:
 #line 430 "parser.y" /* yacc.c:1646  */
-    { (yyval.arg_decl) = (yyvsp[-1].arg_decl); }
-#line 2608 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.uint) = 0; }
+#line 2616 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 156:
-#line 433 "parser.y" /* yacc.c:1646  */
-    { (yyval.arg_decl) = (yyvsp[0].arg_decl); }
-#line 2614 "parser.tab.c" /* yacc.c:1646  */
+#line 431 "parser.y" /* yacc.c:1646  */
+    { (yyval.uint) = STORAGE_IS_PRIVATE; }
+#line 2622 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 157:
 #line 434 "parser.y" /* yacc.c:1646  */
-    { (yyvsp[-2].arg_decl)->next = (yyvsp[0].arg_decl); (yyval.arg_decl) = (yyvsp[-2].arg_decl); }
-#line 2620 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.arg_decl) = NULL; }
+#line 2628 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 158:
-#line 437 "parser.y" /* yacc.c:1646  */
-    { (yyval.arg_decl) = new_argument_decl(ctx, (yyvsp[-1].string), TRUE); }
-#line 2626 "parser.tab.c" /* yacc.c:1646  */
+#line 435 "parser.y" /* yacc.c:1646  */
+    { (yyval.arg_decl) = (yyvsp[-1].arg_decl); }
+#line 2634 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 159:
 #line 438 "parser.y" /* yacc.c:1646  */
-    { (yyval.arg_decl) = new_argument_decl(ctx, (yyvsp[-1].string), TRUE); }
-#line 2632 "parser.tab.c" /* yacc.c:1646  */
+    { (yyval.arg_decl) = (yyvsp[0].arg_decl); }
+#line 2640 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 160:
 #line 439 "parser.y" /* yacc.c:1646  */
-    { (yyval.arg_decl) = new_argument_decl(ctx, (yyvsp[-1].string), FALSE); }
-#line 2638 "parser.tab.c" /* yacc.c:1646  */
+    { (yyvsp[-2].arg_decl)->next = (yyvsp[0].arg_decl); (yyval.arg_decl) = (yyvsp[-2].arg_decl); }
+#line 2646 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 161:
-#line 443 "parser.y" /* yacc.c:1646  */
-    { (yyval.string) = (yyvsp[0].string); }
-#line 2644 "parser.tab.c" /* yacc.c:1646  */
+#line 442 "parser.y" /* yacc.c:1646  */
+    { (yyval.arg_decl) = new_argument_decl(ctx, (yyvsp[-1].string), TRUE); }
+#line 2652 "parser.tab.c" /* yacc.c:1646  */
     break;
 
   case 162:
+#line 443 "parser.y" /* yacc.c:1646  */
+    { (yyval.arg_decl) = new_argument_decl(ctx, (yyvsp[-1].string), TRUE); }
+#line 2658 "parser.tab.c" /* yacc.c:1646  */
+    break;
+
+  case 163:
 #line 444 "parser.y" /* yacc.c:1646  */
+    { (yyval.arg_decl) = new_argument_decl(ctx, (yyvsp[-1].string), FALSE); }
+#line 2664 "parser.tab.c" /* yacc.c:1646  */
+    break;
+
+  case 164:
+#line 448 "parser.y" /* yacc.c:1646  */
+    { (yyval.string) = (yyvsp[0].string); }
+#line 2670 "parser.tab.c" /* yacc.c:1646  */
+    break;
+
+  case 165:
+#line 449 "parser.y" /* yacc.c:1646  */
     { (yyval.string) = propertyW; }
-#line 2650 "parser.tab.c" /* yacc.c:1646  */
+#line 2676 "parser.tab.c" /* yacc.c:1646  */
     break;
 
 
-#line 2654 "parser.tab.c" /* yacc.c:1646  */
+#line 2680 "parser.tab.c" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -2873,7 +2899,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 451 "parser.y" /* yacc.c:1906  */
+#line 456 "parser.y" /* yacc.c:1906  */
 
 
 static int parser_error(parser_ctx_t *ctx, const char *str)
index 681a0c9..9606592 100644 (file)
@@ -128,7 +128,7 @@ static const WCHAR propertyW[] = {'p','r','o','p','e','r','t','y',0};
 %type <expression> NotExpression UnaryExpression AndExpression OrExpression XorExpression EqvExpression
 %type <expression> ConstExpression NumericLiteralExpression
 %type <member> MemberExpression
-%type <expression> Arguments_opt ArgumentList_opt Step_opt ExpressionList
+%type <expression> Arguments_opt ArgumentList ArgumentList_opt Step_opt ExpressionList
 %type <boolean> OptionExplicit_opt DoType
 %type <arg_decl> ArgumentsDecl_opt ArgumentDeclList ArgumentDecl
 %type <func_decl> FunctionDecl PropertyDecl
@@ -246,10 +246,10 @@ Step_opt
 
 IfStatement
     : tIF Expression tTHEN tNL StatementsNl_opt ElseIfs_opt Else_opt tEND tIF
-                                            { $$ = new_if_statement(ctx, $2, $5, $6, $7); CHECK_ERROR; }
-    | tIF Expression tTHEN Statement        { $$ = new_if_statement(ctx, $2, $4, NULL, NULL); CHECK_ERROR; }
+                                               { $$ = new_if_statement(ctx, $2, $5, $6, $7); CHECK_ERROR; }
+    | tIF Expression tTHEN Statement EndIf_opt { $$ = new_if_statement(ctx, $2, $4, NULL, NULL); CHECK_ERROR; }
     | tIF Expression tTHEN Statement tELSE Statement EndIf_opt
-                                            { $$ = new_if_statement(ctx, $2, $4, NULL, $6); CHECK_ERROR; }
+                                               { $$ = new_if_statement(ctx, $2, $4, NULL, $6); CHECK_ERROR; }
 
 EndIf_opt
     : /* empty */
@@ -279,11 +279,16 @@ CaseClausules
 
 Arguments_opt
     : EmptyBrackets_opt             { $$ = NULL; }
-    | '(' ExpressionList ')'        { $$ = $2; }
+    | '(' ArgumentList ')'          { $$ = $2; }
 
 ArgumentList_opt
     : EmptyBrackets_opt             { $$ = NULL; }
-    | ExpressionList                { $$ = $1; }
+    | ArgumentList                  { $$ = $1; }
+
+ArgumentList
+    : Expression                    { $$ = $1; }
+    | Expression ',' ArgumentList   { $1->next = $3; $$ = $1; }
+    | ',' ArgumentList              { $$ = new_expression(ctx, EXPR_NOARG, 0); CHECK_ERROR; $$->next = $2; }
 
 EmptyBrackets_opt
     : /* empty */
index ace5fd3..f4c14dd 100644 (file)
@@ -245,6 +245,7 @@ typedef enum {
     X(empty,          1, 0,           0)          \
     X(enumnext,       0, ARG_ADDR,    ARG_BSTR)   \
     X(equal,          1, 0,           0)          \
+    X(hres,           1, ARG_UINT,    0)          \
     X(errmode,        1, ARG_INT,     0)          \
     X(eqv,            1, 0,           0)          \
     X(exp,            1, 0,           0)          \
index a44a115..6a56dcb 100644 (file)
@@ -198,7 +198,7 @@ reactos/dll/win32/url                 # Synced to Wine-1.7.27
 reactos/dll/win32/urlmon              # Synced to WineStaging-1.7.37
 reactos/dll/win32/usp10               # Synced to WineStaging-1.7.37
 reactos/dll/win32/uxtheme             # Forked
-reactos/dll/win32/vbscript            # Synced to Wine-1.7.27
+reactos/dll/win32/vbscript            # Synced to WineStaging-1.7.37
 reactos/dll/win32/version             # Synced to Wine-1.7.27
 reactos/dll/win32/wbemdisp            # Synced to Wine-1.7.27
 reactos/dll/win32/wbemprox            # Synced to WineStaging-1.7.37