made parser more robust against broken as3
[swftools.git] / lib / as3 / parser.tab.c
index 59fd16d..b5ee375 100644 (file)
@@ -1,21 +1,21 @@
 
-/* A Bison parser, made by GNU Bison 2.4.  */
+/* A Bison parser, made by GNU Bison 2.4.277-62c99-dirty.  */
 
 /* Skeleton implementation for Bison's Yacc-like parsers in C
-   
-      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
-   
+
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free
+   Software Foundation, Inc.
+
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
-   
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
@@ -28,7 +28,7 @@
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    License without this special exception.
-   
+
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
@@ -46,7 +46,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "2.4"
+#define YYBISON_VERSION "2.4.277-62c99-dirty"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "./skeleton.m4"
@@ -74,7 +74,6 @@
 
 
 /* Copy the first part of user declarations.  */
-
 /* Line 198 of skeleton.m4  */
 #line 23 "parser.y"
 
 extern int a3_lex();
 
 
-
 /* Line 198 of skeleton.m4  */
-#line 102 "parser.tab.c"
+#line 100 "parser.tab.c"
 
 /* Enabling traces.  */
 #ifndef YYDEBUG
-# define YYDEBUG 0
+# define YYDEBUG b4_debug_flag
 #endif
 
 /* Enabling verbose error messages.  */
@@ -110,7 +108,7 @@ extern int a3_lex();
 # undef YYERROR_VERBOSE
 # define YYERROR_VERBOSE 1
 #else
-# define YYERROR_VERBOSE 1
+# define YYERROR_VERBOSE b4_error_verbose_flag
 #endif
 
 /* Enabling the token table.  */
@@ -239,12 +237,10 @@ extern int a3_lex();
 
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union 
-/* Line 223 of skeleton.m4  */
+typedef union /* Line 223 of skeleton.m4  */
 #line 47 "parser.y"
 tokenunion
 {
-
 /* Line 223 of skeleton.m4  */
 #line 47 "parser.y"
 
@@ -279,9 +275,8 @@ tokenunion
     } catch_list;
 
 
-
 /* Line 223 of skeleton.m4  */
-#line 285 "parser.tab.c"
+#line 280 "parser.tab.c"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -290,7 +285,6 @@ tokenunion
 
 
 /* Copy the second part of user declarations.  */
-
 /* Line 273 of skeleton.m4  */
 #line 276 "parser.y"
 
@@ -389,6 +383,13 @@ struct _methodstate {
     methodstate_list_t*innerfunctions;
 };
 
+void methodstate_destroy(methodstate_t*m) 
+{
+    dict_destroy(m->unresolved_variables);
+    m->unresolved_variables = 0;
+    list_free(m->innerfunctions);m->innerfunctions=0;
+}
+
 typedef struct _state {
     struct _state*old;
     int level;
@@ -549,8 +550,7 @@ static void old_state()
     state = state->old;
 
     if(as3_pass>1 && leaving->method && leaving->method != state->method && !leaving->method->inner) {
-        free(leaving->method);
-        leaving->method=0;
+        methodstate_destroy(leaving->method);leaving->method=0;
     }
     if(as3_pass>1 && leaving->cls && leaving->cls != state->cls) {
         free(leaving->cls);
@@ -666,10 +666,10 @@ static variable_t* find_variable(state_t*s, char*name)
         return 0;
     }
 }
-static variable_t* find_slot(state_t*s, const char*name)
+static variable_t* find_slot(methodstate_t*m, const char*name)
 {
-    if(s->method && s->method->slots)
-        return dict_lookup(s->method->slots, name);
+    if(m && m->slots)
+        return dict_lookup(m->slots, name);
     return 0;
 }
 
@@ -715,10 +715,10 @@ static int alloc_local()
     return state->method->variable_count++;
 }
 
-static variable_t* new_variable2(const char*name, classinfo_t*type, char init, char maybeslot)
+static variable_t* new_variable2(methodstate_t*method, const char*name, classinfo_t*type, char init, char maybeslot)
 {
     if(maybeslot) {
-        variable_t*v = find_slot(state, name);
+        variable_t*v = find_slot(method, name);
         if(v) {
             alloc_local(); 
             return v;
@@ -731,13 +731,15 @@ static variable_t* new_variable2(const char*name, classinfo_t*type, char init, c
     v->init = v->kill = init;
  
     if(name) {
-        if(!state->method->no_variable_scoping) 
+        if(!method->no_variable_scoping) 
         {
-            if(dict_contains(state->vars, name))
+            if(dict_contains(state->vars, name)) {
+                *(int*)0=0;
                 syntaxerror("variable %s already defined", name);
+            }
             dict_put(state->vars, name, v);
         }
-        if(state->method->no_variable_scoping && 
+        if(method->no_variable_scoping && 
            as3_pass==2 && 
            dict_contains(state->allvars, name)) 
         {
@@ -751,9 +753,9 @@ static variable_t* new_variable2(const char*name, classinfo_t*type, char init, c
 
     return v;
 }
-static int new_variable(const char*name, classinfo_t*type, char init, char maybeslot)
+static int new_variable(methodstate_t*method, const char*name, classinfo_t*type, char init, char maybeslot)
 {
-    return new_variable2(name, type, init, maybeslot)->index;
+    return new_variable2(method, name, type, init, maybeslot)->index;
 }
 
 #define TEMPVARNAME "__as3_temp__"
@@ -764,7 +766,7 @@ int gettempvar()
     if(v) 
         i = v->index;
     else
-        i = new_variable(TEMPVARNAME, 0, 0, 0);
+        i = new_variable(state->method, TEMPVARNAME, 0, 0, 0);
     parserassert(i);
     return i;
 }
@@ -818,7 +820,7 @@ static void unknown_variable(char*name)
 
 static code_t* add_scope_code(code_t*c, methodstate_t*m, char init)
 {
-    if(m->uses_slots || (m->late_binding && !m->inner)) { //???? especially inner functions need the pushscope
+    if(m->uses_slots || m->innerfunctions || (m->late_binding && !m->inner)) {
         c = abc_getlocal_0(c);
         c = abc_pushscope(c);
     }
@@ -969,7 +971,7 @@ static void innerfunctions2vars(methodstate_t*m)
     while(l) {
         methodstate_t*m = l->methodstate;
         
-        variable_t* v = new_variable2(m->info->name, TYPE_FUNCTION(m->info), 0, 0);
+        variable_t* v = new_variable2(state->method, m->info->name, TYPE_FUNCTION(m->info), 0, 0);
         m->var_index = v->index;
         if(m->is_a_slot)
             m->slot_index = m->is_a_slot;
@@ -983,25 +985,30 @@ static void function_initvars(methodstate_t*m, char has_params, params_t*params,
     if(var0) {
         int index = -1;
         if(m->inner)
-            index = new_variable("this", 0, 0, 0);
+            index = new_variable(m, "this", 0, 0, 0);
         else if(!m->is_global)
-            index = new_variable((flags&FLAG_STATIC)?"class":"this", state->cls?state->cls->info:0, 0, 0);
+            index = new_variable(m, (flags&FLAG_STATIC)?"class":"this", state->cls?state->cls->info:0, 0, 0);
         else
-            index = new_variable("globalscope", 0, 0, 0);
+            index = new_variable(m, "globalscope", 0, 0, 0);
+        if(index) {
+            DICT_ITERATE_ITEMS(state->vars, char*, name, variable_t*, v) {
+                printf("%s %d\n", name, v->index);
+            }
+        }
         parserassert(!index);
     }
 
     if(has_params) {
         param_list_t*p=0;
         for(p=params->list;p;p=p->next) {
-            variable_t*v = new_variable2(p->param->name, p->param->type, 0, 1);
+            variable_t*v = new_variable2(m, p->param->name, p->param->type, 0, 1);
             v->is_parameter = 1;
         }
         if(as3_pass==2 && m->need_arguments) {
             /* arguments can never be used by an innerfunction (the inner functions
                have their own arguments var), so it's ok to  not initialize this until
                pass 2. (We don't know whether we need it before, anyway) */
-            variable_t*v = new_variable2("arguments", TYPE_ARRAY, 0, 0);
+            variable_t*v = new_variable2(m, "arguments", TYPE_ARRAY, 0, 0);
             m->need_arguments = v->index;
         }
     }
@@ -1071,7 +1078,6 @@ static void startclass(modifiers_t* mod, char*classname, classinfo_t*extends, cl
         state->cls->init = rfx_calloc(sizeof(methodstate_t));
         state->cls->static_init = rfx_calloc(sizeof(methodstate_t));
         state->cls->static_init->is_static=FLAG_STATIC;
-        state->cls->static_init->variable_count=1;
         /* notice: we make no effort to initialize the top variable (local0) here,
            even though it has special meaning. We just rely on the fact
            that pass 1 won't do anything with variables */
@@ -1101,10 +1107,12 @@ static void startclass(modifiers_t* mod, char*classname, classinfo_t*extends, cl
     if(as3_pass == 2) {
         state->cls = dict_lookup(global->token2info, (void*)(ptroff_t)as3_tokencount);
     
-        state->method = state->cls->init;
         parserassert(state->cls && state->cls->info);
        
+        state->method = state->cls->static_init;
+
         function_initvars(state->cls->init, 0, 0, 0, 1);
+        state->cls->static_init->variable_count=1;
         function_initvars(state->cls->static_init, 0, 0, 0, 0);
 
         if(extends && (extends->flags & FLAG_FINAL))
@@ -1344,9 +1352,13 @@ static void innerfunction(char*name, params_t*params, classinfo_t*return_type)
     //parserassert(state->method && state->method->info);
 
     methodstate_t*parent_method = state->method;
+    variable_t*v = 0;
 
     if(as3_pass==1) {
         return_type = 0; // not valid in pass 1
+        if(name) {
+            v = new_variable2(parent_method, name, 0, 0, 0);
+        }
     }
 
     new_state();
@@ -1359,6 +1371,9 @@ static void innerfunction(char*name, params_t*params, classinfo_t*return_type)
         state->method->is_static = parent_method->is_static;
         state->method->variable_count = 0;
         state->method->abc = rfx_calloc(sizeof(abc_method_t));
+        if(v) {
+            v->is_inner_method = state->method;
+        }
 
         NEW(methodinfo_t,minfo);
         minfo->kind = INFOTYPE_METHOD;
@@ -1433,51 +1448,57 @@ static void startfunction(modifiers_t*mod, enum yytokentype getset, char*name,
     } 
 }
 
+static void insert_unresolved(methodstate_t*m, dict_t*xvars, dict_t*allvars)
+{
+    parserassert(m->inner);
+    if(m->unresolved_variables) {
+        dict_t*d = m->unresolved_variables;
+        int t;
+        DICT_ITERATE_KEY(d, char*, id) {
+            /* check parent method's variables */
+            variable_t*v;
+            if(dict_contains(allvars, id)) {
+                m->uses_parent_function = 1;
+                state->method->uses_slots = 1;
+                dict_put(xvars, id, 0);
+            }
+        }
+    }
+    methodstate_list_t*ml = m->innerfunctions;
+    while(ml) {
+        insert_unresolved(ml->methodstate, xvars, allvars);
+        ml = ml->next;
+    }
+}
+
 static abc_method_t* endfunction(modifiers_t*mod, enum yytokentype getset, char*name,
                           params_t*params, classinfo_t*return_type, code_t*body)
 {
     if(as3_pass==1) {
-        innerfunctions2vars(state->method);
-
-        methodstate_list_t*ml = state->method->innerfunctions;
-        
         dict_t*xvars = dict_new();
         
         if(state->method->unresolved_variables) {
             DICT_ITERATE_KEY(state->method->unresolved_variables, char*, vname) {
-                if(dict_contains(state->allvars, vname)) {
-                    state->method->no_variable_scoping = 1;
-                    as3_warning("function %s uses forward or outer block variable references (%s): switching into compatiblity mode", name, vname);
-                    break;
+                if(!state->method->no_variable_scoping && dict_contains(state->allvars, vname)) {
+                    variable_t*v = dict_lookup(state->allvars, vname);
+                    if(!v->is_inner_method) {
+                        state->method->no_variable_scoping = 1;
+                        as3_warning("function %s uses forward or outer block variable references (%s): switching into compatiblity mode", name, vname);
+                    }
                 }
             }
         }
 
+        methodstate_list_t*ml = state->method->innerfunctions;
         while(ml) {
-            methodstate_t*m = ml->methodstate;
-            parserassert(m->inner);
-            if(m->unresolved_variables) {
-                dict_t*d = m->unresolved_variables;
-                int t;
-                DICT_ITERATE_KEY(d, char*, id) {
-                    /* check parent method's variables */
-                    variable_t*v;
-                    if((v=find_variable(state, id))) {
-                        m->uses_parent_function = 1;
-                        state->method->uses_slots = 1;
-                        dict_put(xvars, id, 0);
-                    }
-                }
-                dict_destroy(m->unresolved_variables);
-                m->unresolved_variables = 0;
-            }
+            insert_unresolved(ml->methodstate, xvars, state->allvars);
             ml = ml->next;
         }
         
         if(state->method->uses_slots) {
             state->method->slots = dict_new();
             int i = 1;
-            DICT_ITERATE_ITEMS(state->vars, char*, name, variable_t*, v) {
+            DICT_ITERATE_ITEMS(state->allvars, char*, name, variable_t*, v) {
                 if(!name) syntaxerror("internal error");
                 if(v->index && dict_contains(xvars, name)) {
                     v->init = v->kill = 0;
@@ -1953,13 +1974,11 @@ code_t* insert_finally(code_t*c, code_t*finally, int tempvar)
 #define PASS_ALWAYS }} {{
 
 
-
 /* Line 273 of skeleton.m4  */
-#line 1959 "parser.tab.c"
+#line 1979 "parser.tab.c"
 /* Unqualified %code blocks.  */
-
 /* Line 274 of skeleton.m4  */
-#line 2050 "parser.y"
+#line 2077 "parser.y"
 
     char is_subtype_of(classinfo_t*type, classinfo_t*supertype)
     {
@@ -1974,9 +1993,8 @@ code_t* insert_finally(code_t*c, code_t*finally, int tempvar)
         return 1;
     }
 
-
 /* Line 274 of skeleton.m4  */
-#line 2500 "parser.y"
+#line 2528 "parser.y"
 
     static void state_has_imports()
     {
@@ -1997,9 +2015,8 @@ code_t* insert_finally(code_t*c, code_t*finally, int tempvar)
         free(s);
     }
 
-
 /* Line 274 of skeleton.m4  */
-#line 2639 "parser.y"
+#line 2667 "parser.y"
 
     static int slotstate_varconst = 0;
     static modifiers_t*slotstate_flags = 0;
@@ -2059,15 +2076,13 @@ code_t* insert_finally(code_t*c, code_t*finally, int tempvar)
         return trait_new_member(traits, 0, multiname_clone(&mname), 0);
     }
 
-
 /* Line 274 of skeleton.m4  */
-#line 2819 "parser.y"
+#line 2847 "parser.y"
 
     static int xml_level = 0;
 
-
 /* Line 274 of skeleton.m4  */
-#line 3624 "parser.y"
+#line 3655 "parser.y"
 
     node_t* resolve_identifier(char*name)
     {
@@ -2086,7 +2101,7 @@ code_t* insert_finally(code_t*c, code_t*finally, int tempvar)
             o.t = v->type;
             return mkcodenode(o);
         }
-        if((v = find_slot(state, name))) {
+        if((v = find_slot(state->method, name))) {
             o.c = abc_getscopeobject(o.c, 1);
             o.c = abc_getslot(o.c, v->index);
             o.t = v->type;
@@ -2182,9 +2197,8 @@ code_t* insert_finally(code_t*c, code_t*finally, int tempvar)
         }
     }
 
-
 /* Line 274 of skeleton.m4  */
-#line 3764 "parser.y"
+#line 3795 "parser.y"
 
     void add_active_url(const char*url)
     {
@@ -2194,9 +2208,8 @@ code_t* insert_finally(code_t*c, code_t*finally, int tempvar)
     }
 
 
-
 /* Line 274 of skeleton.m4  */
-#line 2200 "parser.tab.c"
+#line 2213 "parser.tab.c"
 
 #ifdef short
 # undef short
@@ -2474,198 +2487,56 @@ static const yytype_uint8 yytranslate[] =
 #if YYDEBUG
 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
    YYRHS.  */
-static const yytype_uint16 yyprhs[] =
+static const int yyprhs[] =
 {
-       0,     0,     3,     5,     6,     8,    10,    13,    15,    17,
-      19,    21,    23,    25,    30,    32,    33,    35,    37,    40,
-      42,    44,    46,    48,    50,    55,    60,    62,    64,    65,
-      68,    70,    72,    74,    76,    78,    80,    82,    84,    86,
-      88,    90,    92,    94,    96,   100,   103,   105,   107,   109,
-     111,   113,   115,   117,   122,   125,   127,   129,   130,   134,
-     137,   138,   141,   144,   146,   150,   154,   155,   158,   159,
-     162,   169,   170,   172,   174,   178,   180,   183,   187,   196,
-     203,   209,   216,   218,   221,   223,   226,   227,   229,   231,
-     234,   236,   239,   244,   248,   249,   258,   259,   269,   270,
-     276,   278,   281,   283,   286,   288,   289,   296,   299,   301,
-     306,   309,   311,   313,   315,   317,   319,   323,   325,   326,
-     333,   334,   340,   343,   346,   351,   352,   354,   356,   359,
-     361,   363,   365,   367,   369,   371,   373,   375,   377,   379,
-     380,   383,   384,   387,   388,   391,   392,   402,   403,   412,
-     413,   415,   417,   420,   422,   427,   429,   431,   433,   434,
-     436,   438,   441,   443,   446,   455,   457,   459,   460,   465,
-     467,   471,   475,   476,   479,   481,   483,   485,   487,   489,
-     491,   493,   495,   497,   499,   501,   503,   504,   505,   510,
-     511,   516,   517,   520,   523,   526,   529,   533,   535,   537,
-     538,   540,   547,   558,   570,   572,   575,   577,   581,   585,
-     589,   593,   594,   596,   599,   604,   608,   610,   615,   618,
-     620,   622,   623,   624,   637,   639,   640,   641,   652,   654,
-     658,   660,   662,   664,   668,   670,   672,   674,   677,   678,
-     679,   683,   684,   686,   688,   690,   693,   696,   697,   702,
-     707,   712,   715,   717,   720,   722,   724,   726,   730,   732,
-     736,   737,   739,   741,   743,   745,   747,   749,   753,   759,
-     761,   763,   765,   767,   769,   771,   773,   775,   777,   779,
-     783,   787,   791,   795,   799,   803,   807,   811,   815,   819,
-     823,   827,   830,   833,   837,   841,   845,   849,   853,   857,
-     861,   865,   869,   873,   877,   881,   885,   889,   893,   896,
-     899,   901,   905,   908,   913,   917,   921,   925,   929,   933,
-     937,   941,   945,   949,   953,   957,   961,   967,   970,   973,
-     976,   979,   983,   986,   987,   994,   996,   998,  1000,  1002,
-    1004,  1010,  1014,  1020,  1025,  1030,  1037,  1044,  1048,  1050,
-    1053,  1058,  1063,  1066,  1071
+  b4_prhs
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
-static const yytype_int16 yyrhs[] =
+static const int yyrhs[] =
 {
-     137,     0,    -1,   138,    -1,    -1,   139,    -1,   140,    -1,
-     139,   140,    -1,   188,    -1,   200,    -1,   198,    -1,   234,
-      -1,   209,    -1,   149,    -1,   151,   128,   138,   134,    -1,
-     101,    -1,    -1,   142,    -1,   143,    -1,   142,   143,    -1,
-     200,    -1,   198,    -1,   234,    -1,   209,    -1,   149,    -1,
-     151,   128,   141,   134,    -1,   126,   150,   261,   127,    -1,
-     101,    -1,   145,    -1,    -1,   145,   147,    -1,   147,    -1,
-     269,    -1,   191,    -1,   163,    -1,   164,    -1,   165,    -1,
-     166,    -1,   173,    -1,   159,    -1,   185,    -1,   181,    -1,
-     257,    -1,   270,    -1,   268,    -1,   128,   145,   134,    -1,
-     128,   134,    -1,   101,    -1,   146,    -1,   153,    -1,   167,
-      -1,   168,    -1,   253,    -1,   183,    -1,   151,   128,   145,
-     134,    -1,   147,   101,    -1,   147,    -1,   146,    -1,    -1,
-       3,    91,     3,    -1,   104,   261,    -1,    -1,    46,   154,
-      -1,    32,   154,    -1,   155,    -1,   154,   102,   155,    -1,
-       3,   244,   152,    -1,    -1,   157,   148,    -1,    -1,    66,
-     156,    -1,    65,   124,   255,   135,   156,   158,    -1,    -1,
-     153,    -1,   257,    -1,    46,     3,   244,    -1,     3,    -1,
-      11,   124,    -1,    11,    50,   124,    -1,   162,   160,   101,
-     255,   101,   257,   135,   156,    -1,   162,   161,    69,   255,
-     135,   156,    -1,    12,   124,   255,   135,   156,    -1,    13,
-     156,    12,   124,   255,   135,    -1,    67,    -1,    67,     3,
-      -1,    30,    -1,    30,     3,    -1,    -1,   170,    -1,   172,
-      -1,   170,   172,    -1,   171,    -1,   170,   171,    -1,    34,
-     261,   106,   144,    -1,    62,   106,   144,    -1,    -1,    14,
-     124,   174,   261,   135,   128,   169,   134,    -1,    -1,    33,
-     124,     3,   244,   135,   176,   128,   144,   134,    -1,    -1,
-      27,   128,   178,   144,   134,    -1,   175,    -1,   179,   175,
-      -1,   179,    -1,   179,   177,    -1,   177,    -1,    -1,    52,
-     128,   182,   144,   134,   180,    -1,    37,   255,    -1,    37,
-      -1,    39,   124,   255,   135,    -1,   184,   148,    -1,     3,
-      -1,    17,    -1,    16,    -1,    29,    -1,     4,    -1,   187,
-     129,   186,    -1,   186,    -1,    -1,    17,   187,   128,   189,
-     141,   134,    -1,    -1,    17,   128,   190,   141,   134,    -1,
-      41,     3,    -1,    41,   240,    -1,    41,   187,   129,   117,
-      -1,    -1,   193,    -1,   194,    -1,   193,   194,    -1,    20,
-      -1,    21,    -1,    18,    -1,    38,    -1,    47,    -1,    49,
-      -1,    48,    -1,    25,    -1,    23,    -1,     4,    -1,    -1,
-      54,   241,    -1,    -1,    54,   242,    -1,    -1,    15,   242,
-      -1,    -1,   192,    31,     3,   195,   197,   128,   199,   202,
-     134,    -1,    -1,   192,    44,     3,   196,   128,   201,   205,
-     134,    -1,    -1,   203,    -1,   204,    -1,   203,   204,    -1,
-     101,    -1,   151,   128,   202,   134,    -1,   209,    -1,   234,
-      -1,   146,    -1,    -1,   206,    -1,   207,    -1,   206,   207,
-      -1,   101,    -1,    46,     3,    -1,   192,    26,   233,     3,
-     124,   230,   135,   244,    -1,    46,    -1,    32,    -1,    -1,
-     192,   208,   210,   211,    -1,   212,    -1,   211,   102,   212,
-      -1,     3,   244,   152,    -1,    -1,   104,   261,    -1,     8,
-      -1,     9,    -1,    10,    -1,     5,    -1,    56,    -1,    55,
-      -1,    45,    -1,    28,    -1,    29,    -1,   227,    -1,   111,
-      -1,   112,    -1,    -1,    -1,   128,   261,   220,   134,    -1,
-      -1,   128,   261,   222,   134,    -1,    -1,   223,   219,    -1,
-     223,     5,    -1,   223,   112,    -1,   227,   223,    -1,   224,
-     227,   223,    -1,     3,    -1,   221,    -1,    -1,   228,    -1,
-     216,   225,   226,   116,   218,   112,    -1,   216,   225,   226,
-     217,   223,   111,   116,   225,   218,   112,    -1,   216,   225,
-     226,   217,   223,   224,   111,   116,   225,   218,   112,    -1,
-     229,    -1,   228,   229,    -1,   221,    -1,   221,   104,     5,
-      -1,   221,   104,   221,    -1,     3,   104,   221,    -1,     3,
-     104,     5,    -1,    -1,   231,    -1,    95,   232,    -1,   231,
-     102,    95,   232,    -1,   231,   102,   232,    -1,   232,    -1,
-       3,   106,   243,   213,    -1,     3,   213,    -1,    51,    -1,
-      35,    -1,    -1,    -1,   192,    26,   233,     3,   124,   230,
-     135,   244,   128,   235,   144,   134,    -1,     3,    -1,    -1,
-      -1,    26,   236,   124,   230,   135,   244,   128,   238,   144,
-     134,    -1,   186,    -1,   187,   129,   186,    -1,   240,    -1,
-     239,    -1,   241,    -1,   242,   102,   241,    -1,   241,    -1,
-     117,    -1,    36,    -1,   106,   243,    -1,    -1,    -1,   124,
-     246,   135,    -1,    -1,   247,    -1,   248,    -1,   254,    -1,
-     247,   102,    -1,   248,   254,    -1,    -1,    24,   261,   249,
-     245,    -1,   261,   124,   246,   135,    -1,    53,   124,   246,
-     135,    -1,    64,   261,    -1,    42,    -1,    42,   255,    -1,
-     261,    -1,   256,    -1,   261,    -1,   256,   102,   261,    -1,
-     261,    -1,   257,   102,   261,    -1,    -1,   260,    -1,     3,
-      -1,     5,    -1,     8,    -1,     9,    -1,    10,    -1,   259,
-     106,   254,    -1,   260,   102,   259,   106,   254,    -1,   237,
-      -1,   265,    -1,   250,    -1,   252,    -1,   251,    -1,   266,
-      -1,   214,    -1,   215,    -1,     6,    -1,    19,    -1,   126,
-     246,   127,    -1,    71,   258,   134,    -1,   261,   111,   261,
-      -1,   261,   112,   261,    -1,   261,    76,   261,    -1,   261,
-      77,   261,    -1,   261,    72,   261,    -1,   261,    73,   261,
-      -1,   261,    75,   261,    -1,   261,    74,   261,    -1,   261,
-      89,   261,    -1,   261,    90,   261,    -1,   120,   261,    -1,
-     119,   261,    -1,   261,   109,   261,    -1,   261,   108,   261,
-      -1,   261,   107,   261,    -1,   261,    98,   261,    -1,   261,
-      97,   261,    -1,   261,    96,   261,    -1,   261,   116,   261,
-      -1,   261,   118,   261,    -1,   261,   115,   261,    -1,   261,
-     114,   261,    -1,   261,   117,   261,    -1,   261,    69,   261,
-      -1,   261,    70,   261,    -1,   261,    40,   261,    -1,   261,
-      68,   261,    -1,    43,   261,    -1,    36,   261,    -1,    36,
-      -1,   124,   256,   135,    -1,   114,   261,    -1,   261,   126,
-     261,   127,    -1,   261,    81,   261,    -1,   261,    80,   261,
-      -1,   261,    87,   261,    -1,   261,    86,   261,    -1,   261,
-      88,   261,    -1,   261,    79,   261,    -1,   261,    78,   261,
-      -1,   261,    85,   261,    -1,   261,    82,   261,    -1,   261,
-      83,   261,    -1,   261,    84,   261,    -1,   261,   104,   261,
-      -1,   261,   105,   261,   106,   261,    -1,   261,    93,    -1,
-     261,    92,    -1,    93,   261,    -1,    92,   261,    -1,    53,
-     129,     3,    -1,   130,     3,    -1,    -1,   261,   129,   124,
-     262,   261,   135,    -1,     3,    -1,   117,    -1,     4,    -1,
-     186,    -1,   117,    -1,   261,   129,   263,    91,   264,    -1,
-     261,    94,   264,    -1,   261,   129,   126,   261,   127,    -1,
-     261,   129,   130,   264,    -1,   261,    94,   130,   264,    -1,
-     261,   129,   130,   126,   261,   127,    -1,   261,    94,   130,
-     126,   261,   127,    -1,   261,   129,   264,    -1,     3,    -1,
-      16,     3,    -1,    16,     3,   104,     3,    -1,    16,     3,
-     104,     5,    -1,   192,   267,    -1,    63,    16,   104,   261,
-      -1,    22,    16,   241,    -1
+  b4_rhs
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,  1941,  1941,  1943,  1943,  1944,  1945,  1947,  1948,  1949,
-    1950,  1951,  1952,  1953,  1954,  1956,  1956,  1957,  1958,  1960,
-    1961,  1962,  1963,  1964,  1965,  1966,  1967,  1969,  1970,  1972,
-    1975,  1978,  1979,  1980,  1981,  1982,  1983,  1984,  1985,  1986,
-    1987,  1988,  1989,  1990,  1991,  1992,  1995,  1996,  1997,  1998,
-    1999,  2000,  2001,  2002,  2014,  2015,  2019,  2030,  2038,  2065,
-    2066,  2068,  2069,  2071,  2072,  2074,  2135,  2135,  2139,  2140,
-    2143,  2159,  2160,  2161,  2166,  2170,  2175,  2176,  2178,  2198,
-    2241,  2257,  2269,  2272,  2275,  2278,  2282,  2283,  2284,  2285,
-    2286,  2287,  2289,  2300,  2303,  2303,  2334,  2334,  2359,  2359,
-    2375,  2376,  2377,  2378,  2386,  2395,  2395,  2444,  2448,  2459,
-    2469,  2486,  2487,  2488,  2489,  2490,  2492,  2493,  2495,  2495,
-    2497,  2497,  2521,  2529,  2540,  2556,  2557,  2558,  2559,  2566,
-    2567,  2568,  2569,  2570,  2571,  2572,  2573,  2574,  2575,  2579,
-    2580,  2582,  2583,  2585,  2586,  2590,  2588,  2596,  2594,  2603,
-    2604,  2605,  2606,  2607,  2608,  2609,  2610,  2612,  2618,  2619,
-    2620,  2621,  2622,  2623,  2626,  2699,  2699,  2701,  2701,  2703,
-    2704,  2706,  2790,  2791,  2800,  2801,  2804,  2805,  2806,  2807,
-    2808,  2809,  2810,  2823,  2834,  2835,  2836,  2838,  2838,  2841,
-    2841,  2844,  2845,  2848,  2853,  2856,  2859,  2862,  2865,  2869,
-    2872,  2876,  2880,  2885,  2891,  2894,  2897,  2900,  2905,  2908,
-    2911,  2921,  2925,  2931,  2937,  2945,  2950,  2956,  2964,  2972,
-    2973,  2974,  2977,  2976,  2993,  2994,  2996,  2995,  3019,  3038,
-    3052,  3053,  3055,  3056,  3058,  3059,  3060,  3069,  3070,  3074,
-    3075,  3077,  3078,  3079,  3081,  3085,  3086,  3091,  3092,  3136,
-    3186,  3207,  3229,  3232,  3239,  3242,  3245,  3248,  3251,  3254,
-    3259,  3260,  3262,  3263,  3264,  3265,  3266,  3268,  3274,  3283,
-    3284,  3285,  3286,  3287,  3288,  3290,  3294,  3299,  3317,  3328,
-    3338,  3347,  3348,  3349,  3350,  3351,  3352,  3353,  3354,  3355,
-    3356,  3357,  3358,  3359,  3360,  3361,  3362,  3363,  3364,  3365,
-    3366,  3367,  3368,  3369,  3370,  3371,  3372,  3373,  3374,  3375,
-    3376,  3377,  3378,  3379,  3380,  3381,  3382,  3383,  3384,  3385,
-    3386,  3387,  3388,  3389,  3390,  3391,  3392,  3394,  3395,  3396,
-    3397,  3399,  3414,  3422,  3422,  3476,  3477,  3478,  3479,  3480,
-    3488,  3506,  3513,  3524,  3531,  3538,  3548,  3559,  3739,  3773,
-    3780,  3787,  3794,  3816,  3822
+       0,  1968,  1968,  1970,  1970,  1971,  1972,  1974,  1975,  1976,
+    1977,  1978,  1979,  1980,  1981,  1983,  1983,  1984,  1985,  1987,
+    1988,  1989,  1990,  1991,  1992,  1993,  1994,  1996,  1997,  1999,
+    2002,  2005,  2006,  2007,  2008,  2009,  2010,  2011,  2012,  2013,
+    2014,  2015,  2016,  2017,  2018,  2019,  2022,  2023,  2024,  2025,
+    2026,  2027,  2028,  2029,  2041,  2042,  2046,  2057,  2065,  2092,
+    2093,  2095,  2096,  2098,  2099,  2101,  2162,  2162,  2166,  2167,
+    2170,  2186,  2187,  2188,  2193,  2197,  2202,  2203,  2205,  2225,
+    2269,  2285,  2297,  2300,  2303,  2306,  2310,  2311,  2312,  2313,
+    2314,  2315,  2317,  2328,  2331,  2331,  2362,  2362,  2387,  2387,
+    2403,  2404,  2405,  2406,  2414,  2423,  2423,  2472,  2476,  2487,
+    2497,  2514,  2515,  2516,  2517,  2518,  2520,  2521,  2523,  2523,
+    2525,  2525,  2549,  2557,  2568,  2584,  2585,  2586,  2587,  2594,
+    2595,  2596,  2597,  2598,  2599,  2600,  2601,  2602,  2603,  2607,
+    2608,  2610,  2611,  2613,  2614,  2618,  2616,  2624,  2622,  2631,
+    2632,  2633,  2634,  2635,  2636,  2637,  2638,  2640,  2646,  2647,
+    2648,  2649,  2650,  2651,  2654,  2727,  2727,  2729,  2729,  2731,
+    2732,  2734,  2818,  2819,  2828,  2829,  2832,  2833,  2834,  2835,
+    2836,  2837,  2838,  2851,  2862,  2863,  2864,  2866,  2866,  2869,
+    2869,  2872,  2873,  2876,  2881,  2884,  2887,  2890,  2893,  2897,
+    2900,  2904,  2908,  2913,  2919,  2922,  2925,  2928,  2933,  2936,
+    2939,  2949,  2953,  2959,  2965,  2973,  2978,  2984,  2992,  3000,
+    3001,  3002,  3005,  3004,  3021,  3022,  3024,  3023,  3047,  3066,
+    3080,  3081,  3083,  3084,  3086,  3087,  3088,  3097,  3098,  3102,
+    3103,  3105,  3106,  3107,  3109,  3113,  3114,  3119,  3120,  3167,
+    3217,  3238,  3260,  3263,  3270,  3273,  3276,  3279,  3282,  3285,
+    3290,  3291,  3293,  3294,  3295,  3296,  3297,  3299,  3305,  3314,
+    3315,  3316,  3317,  3318,  3319,  3321,  3325,  3330,  3348,  3359,
+    3369,  3378,  3379,  3380,  3381,  3382,  3383,  3384,  3385,  3386,
+    3387,  3388,  3389,  3390,  3391,  3392,  3393,  3394,  3395,  3396,
+    3397,  3398,  3399,  3400,  3401,  3402,  3403,  3404,  3405,  3406,
+    3407,  3408,  3409,  3410,  3411,  3412,  3413,  3414,  3415,  3416,
+    3417,  3418,  3419,  3420,  3421,  3422,  3423,  3425,  3426,  3427,
+    3428,  3430,  3445,  3453,  3453,  3507,  3508,  3509,  3510,  3511,
+    3519,  3537,  3544,  3555,  3562,  3569,  3579,  3590,  3770,  3804,
+    3811,  3818,  3825,  3847,  3853
 };
 #endif
 
@@ -4280,7 +4151,6 @@ yydestruct (yymsg, yytype, yyvaluep)
 
   switch (yytype)
     {
-
       default:
        break;
     }
@@ -4288,13 +4158,15 @@ yydestruct (yymsg, yytype, yyvaluep)
 
 /* Prevent warnings from -Wmissing-prototypes.  */
 #ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
 int yyparse (void *YYPARSE_PARAM);
 #else
 int yyparse ();
 #endif
 #else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
 int yyparse (void);
 #else
 int yyparse ();
@@ -4583,9 +4455,8 @@ yyreduce:
         
     case 13:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 1953 "parser.y"
+#line 1980 "parser.y"
     {PASS_ALWAYS as3_pass=(yyvsp[(1) - (4)].number_int);}
     }
     break;
@@ -4594,9 +4465,8 @@ yyreduce:
   
     case 24:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 1965 "parser.y"
+#line 1992 "parser.y"
     {PASS_ALWAYS as3_pass=(yyvsp[(1) - (4)].number_int);}
     }
     break;
@@ -4605,9 +4475,8 @@ yyreduce:
   
     case 25:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 1966 "parser.y"
+#line 1993 "parser.y"
     {PASS_ALWAYS as3_pass=(yyvsp[(2) - (4)].number_int);PASS1 as3_warning("embed command ignored");}
     }
     break;
@@ -4616,9 +4485,8 @@ yyreduce:
   
     case 27:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 1969 "parser.y"
+#line 1996 "parser.y"
     {(yyval.code)=(yyvsp[(1) - (1)].code);}
     }
     break;
@@ -4627,9 +4495,8 @@ yyreduce:
   
     case 28:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 1970 "parser.y"
+#line 1997 "parser.y"
     {(yyval.code)=code_new();}
     }
     break;
@@ -4638,9 +4505,8 @@ yyreduce:
   
     case 29:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 1972 "parser.y"
+#line 1999 "parser.y"
     {
     (yyval.code)=code_append((yyvsp[(1) - (2)].code),(yyvsp[(2) - (2)].code));
 }
@@ -4651,9 +4517,8 @@ yyreduce:
   
     case 30:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 1975 "parser.y"
+#line 2002 "parser.y"
     {(yyval.code)=(yyvsp[(1) - (1)].code);}
     }
     break;
@@ -4662,9 +4527,8 @@ yyreduce:
   
     case 44:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 1991 "parser.y"
+#line 2018 "parser.y"
     {(yyval.code)=(yyvsp[(2) - (3)].code);}
     }
     break;
@@ -4673,9 +4537,8 @@ yyreduce:
   
     case 45:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 1992 "parser.y"
+#line 2019 "parser.y"
     {(yyval.code)=0;}
     }
     break;
@@ -4684,9 +4547,8 @@ yyreduce:
   
     case 46:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 1995 "parser.y"
+#line 2022 "parser.y"
     {(yyval.code)=0;}
     }
     break;
@@ -4695,9 +4557,8 @@ yyreduce:
   
     case 53:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2002 "parser.y"
+#line 2029 "parser.y"
     {
     PASS_ALWAYS 
     if(as3_pass) {
@@ -4714,9 +4575,8 @@ yyreduce:
   
     case 54:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2014 "parser.y"
+#line 2041 "parser.y"
     {(yyval.code)=(yyvsp[(1) - (2)].code);}
     }
     break;
@@ -4725,9 +4585,8 @@ yyreduce:
   
     case 55:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2015 "parser.y"
+#line 2042 "parser.y"
     {(yyval.code)=(yyvsp[(1) - (1)].code);}
     }
     break;
@@ -4736,9 +4595,8 @@ yyreduce:
   
     case 56:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2019 "parser.y"
+#line 2046 "parser.y"
     {
     if((yyvsp[(1) - (1)].code)) {
         if(!global->init) 
@@ -4754,9 +4612,8 @@ yyreduce:
   
     case 57:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2030 "parser.y"
+#line 2057 "parser.y"
     {
     PASS_ALWAYS
     (yyval.number_int) = as3_pass;
@@ -4769,9 +4626,8 @@ yyreduce:
   
     case 58:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2038 "parser.y"
+#line 2065 "parser.y"
     {
     PASS12
     (yyval.number_int)=as3_pass;
@@ -4788,9 +4644,8 @@ yyreduce:
   
     case 59:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2065 "parser.y"
+#line 2092 "parser.y"
     {(yyval.node)=(yyvsp[(2) - (2)].node);}
     }
     break;
@@ -4799,9 +4654,8 @@ yyreduce:
   
     case 60:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2066 "parser.y"
+#line 2093 "parser.y"
     {(yyval.node)=mkdummynode();}
     }
     break;
@@ -4810,9 +4664,8 @@ yyreduce:
   
     case 61:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2068 "parser.y"
+#line 2095 "parser.y"
     {(yyval.code)=(yyvsp[(2) - (2)].code);}
     }
     break;
@@ -4821,9 +4674,8 @@ yyreduce:
   
     case 62:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2069 "parser.y"
+#line 2096 "parser.y"
     {(yyval.code)=(yyvsp[(2) - (2)].code);}
     }
     break;
@@ -4832,9 +4684,8 @@ yyreduce:
   
     case 63:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2071 "parser.y"
+#line 2098 "parser.y"
     {(yyval.code) = (yyvsp[(1) - (1)].code);}
     }
     break;
@@ -4843,9 +4694,8 @@ yyreduce:
   
     case 64:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2072 "parser.y"
+#line 2099 "parser.y"
     {(yyval.code) = code_append((yyvsp[(1) - (3)].code), (yyvsp[(3) - (3)].code));}
     }
     break;
@@ -4854,22 +4704,21 @@ yyreduce:
   
     case 65:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2075 "parser.y"
+#line 2102 "parser.y"
     {
 PASS12
-    if(variable_exists((yyvsp[(1) - (3)].id)))
+    if(variable_exists((yyvsp[(1) - (3)].id))) 
         syntaxerror("Variable %s already defined", (yyvsp[(1) - (3)].id));
 PASS1
-    new_variable((yyvsp[(1) - (3)].id), 0, 1, 0);
+    new_variable(state->method, (yyvsp[(1) - (3)].id), 0, 1, 0);
 PASS2
    
     char slot = 0;
     int index = 0;
     variable_t*v = 0;
     if(state->method->uses_slots) {
-        v = find_slot(state, (yyvsp[(1) - (3)].id));
+        v = find_slot(state->method, (yyvsp[(1) - (3)].id));
         if(v && !v->init) {
             // this variable is stored in a slot
             v->init = 1;
@@ -4878,7 +4727,7 @@ PASS2
         }
     }
     if(!v) {
-        v = new_variable2((yyvsp[(1) - (3)].id), (yyvsp[(2) - (3)].classinfo), 1, 0);
+        v = new_variable2(state->method, (yyvsp[(1) - (3)].id), (yyvsp[(2) - (3)].classinfo), 1, 0);
     }
 
     (yyval.code) = slot?abc_getscopeobject(0, 1):0;
@@ -4921,9 +4770,8 @@ PASS2
   
     case 66:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2135 "parser.y"
+#line 2162 "parser.y"
     {PASS12 new_state();}
     }
     break;
@@ -4932,9 +4780,8 @@ PASS2
   
     case 67:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2135 "parser.y"
+#line 2162 "parser.y"
     {
     (yyval.code) = var_block((yyvsp[(2) - (2)].code), state->vars);
     PASS12 old_state();
@@ -4946,9 +4793,8 @@ PASS2
   
     case 68:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2139 "parser.y"
+#line 2166 "parser.y"
     {(yyval.code) = code_new();}
     }
     break;
@@ -4957,9 +4803,8 @@ PASS2
   
     case 69:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2140 "parser.y"
+#line 2167 "parser.y"
     {(yyval.code)=(yyvsp[(2) - (2)].code);}
     }
     break;
@@ -4968,9 +4813,8 @@ PASS2
   
     case 70:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2143 "parser.y"
+#line 2170 "parser.y"
     {
     (yyval.code) = code_new();
     (yyval.code) = code_append((yyval.code), (yyvsp[(3) - (6)].value).c);
@@ -4993,9 +4837,8 @@ PASS2
   
     case 71:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2159 "parser.y"
+#line 2186 "parser.y"
     {(yyval.code)=code_new();}
     }
     break;
@@ -5004,12 +4847,11 @@ PASS2
   
     case 74:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2166 "parser.y"
+#line 2193 "parser.y"
     {
-    PASS1 (yyval.id)=(yyvsp[(2) - (3)].id);new_variable((yyvsp[(2) - (3)].id),0,1,0);
-    PASS2 (yyval.id)=(yyvsp[(2) - (3)].id);new_variable((yyvsp[(2) - (3)].id),(yyvsp[(3) - (3)].classinfo),1,0);
+    PASS1 (yyval.id)=(yyvsp[(2) - (3)].id);new_variable(state->method, (yyvsp[(2) - (3)].id),0,1,0);
+    PASS2 (yyval.id)=(yyvsp[(2) - (3)].id);new_variable(state->method, (yyvsp[(2) - (3)].id),(yyvsp[(3) - (3)].classinfo),1,0);
 }
     }
     break;
@@ -5018,9 +4860,8 @@ PASS2
   
     case 75:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2170 "parser.y"
+#line 2197 "parser.y"
     {
     PASS12
     (yyval.id)=(yyvsp[(1) - (1)].id);
@@ -5032,9 +4873,8 @@ PASS2
   
     case 76:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2175 "parser.y"
+#line 2202 "parser.y"
     {PASS12 new_state();(yyval.for_start).name=(yyvsp[(1) - (2)].id);(yyval.for_start).each=0;}
     }
     break;
@@ -5043,9 +4883,8 @@ PASS2
   
     case 77:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2176 "parser.y"
+#line 2203 "parser.y"
     {PASS12 new_state();(yyval.for_start).name=(yyvsp[(1) - (3)].id);(yyval.for_start).each=1;}
     }
     break;
@@ -5054,9 +4893,8 @@ PASS2
   
     case 78:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2178 "parser.y"
+#line 2205 "parser.y"
     {
     if((yyvsp[(1) - (8)].for_start).each) syntaxerror("invalid syntax: ; not allowed in for each statement");
     (yyval.code) = code_new();
@@ -5083,9 +4921,8 @@ PASS2
   
     case 79:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2198 "parser.y"
+#line 2225 "parser.y"
     {
     variable_t*var = find_variable(state, (yyvsp[(2) - (6)].id));
     if(!var) {
@@ -5126,6 +4963,7 @@ PASS2
     (yyval.code) = abc_kill((yyval.code), it);
     (yyval.code) = abc_kill((yyval.code), array);
 
+    (yyval.code) = var_block((yyval.code), state->vars);
     PASS12 old_state();
 }
     }
@@ -5135,9 +4973,8 @@ PASS2
   
     case 80:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2241 "parser.y"
+#line 2269 "parser.y"
     {
 
     (yyval.code) = code_new();
@@ -5160,9 +4997,8 @@ PASS2
   
     case 81:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2257 "parser.y"
+#line 2285 "parser.y"
     {
     (yyval.code) = code_new();
     code_t*loopstart = (yyval.code) = abc_label((yyval.code));
@@ -5181,9 +5017,8 @@ PASS2
   
     case 82:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2269 "parser.y"
+#line 2297 "parser.y"
     {
     (yyval.code) = abc___break__(0, "");
 }
@@ -5194,9 +5029,8 @@ PASS2
   
     case 83:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2272 "parser.y"
+#line 2300 "parser.y"
     {
     (yyval.code) = abc___break__(0, (yyvsp[(2) - (2)].id));
 }
@@ -5207,9 +5041,8 @@ PASS2
   
     case 84:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2275 "parser.y"
+#line 2303 "parser.y"
     {
     (yyval.code) = abc___continue__(0, "");
 }
@@ -5220,9 +5053,8 @@ PASS2
   
     case 85:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2278 "parser.y"
+#line 2306 "parser.y"
     {
     (yyval.code) = abc___continue__(0, (yyvsp[(2) - (2)].id));
 }
@@ -5233,9 +5065,8 @@ PASS2
   
     case 86:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2282 "parser.y"
+#line 2310 "parser.y"
     {(yyval.code)=0;}
     }
     break;
@@ -5244,9 +5075,8 @@ PASS2
   
     case 87:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2283 "parser.y"
+#line 2311 "parser.y"
     {(yyval.code)=(yyvsp[(1) - (1)].code);}
     }
     break;
@@ -5255,9 +5085,8 @@ PASS2
   
     case 88:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2284 "parser.y"
+#line 2312 "parser.y"
     {(yyval.code)=(yyvsp[(1) - (1)].code);}
     }
     break;
@@ -5266,9 +5095,8 @@ PASS2
   
     case 89:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2285 "parser.y"
+#line 2313 "parser.y"
     {(yyval.code)=code_append((yyvsp[(1) - (2)].code),(yyvsp[(2) - (2)].code));}
     }
     break;
@@ -5277,9 +5105,8 @@ PASS2
   
     case 90:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2286 "parser.y"
+#line 2314 "parser.y"
     {(yyval.code)=(yyvsp[(1) - (1)].code);}
     }
     break;
@@ -5288,9 +5115,8 @@ PASS2
   
     case 91:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2287 "parser.y"
+#line 2315 "parser.y"
     {(yyval.code)=code_append((yyval.code),(yyvsp[(2) - (2)].code));}
     }
     break;
@@ -5299,9 +5125,8 @@ PASS2
   
     case 92:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2289 "parser.y"
+#line 2317 "parser.y"
     {
     (yyval.code) = abc_getlocal(0, state->switch_var);
     (yyval.code) = code_append((yyval.code), node_read((yyvsp[(2) - (4)].node)).c);
@@ -5320,9 +5145,8 @@ PASS2
   
     case 93:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2300 "parser.y"
+#line 2328 "parser.y"
     {
     (yyval.code) = (yyvsp[(3) - (3)].code);
 }
@@ -5333,9 +5157,8 @@ PASS2
   
     case 94:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2303 "parser.y"
+#line 2331 "parser.y"
     {PASS12 new_state();state->switch_var=alloc_local();}
     }
     break;
@@ -5344,9 +5167,8 @@ PASS2
   
     case 95:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2303 "parser.y"
+#line 2331 "parser.y"
     {
     (yyval.code) = node_read((yyvsp[(4) - (8)].node)).c;
     (yyval.code) = abc_setlocal((yyval.code), state->switch_var);
@@ -5382,13 +5204,12 @@ PASS2
   
     case 96:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2334 "parser.y"
+#line 2362 "parser.y"
     {PASS12 new_state();
                                                       state->exception_name=(yyvsp[(3) - (5)].id);
-                                               PASS1 new_variable((yyvsp[(3) - (5)].id), 0, 0, 0);
-                                               PASS2 new_variable((yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].classinfo), 0, 0);
+                                               PASS1 new_variable(state->method, (yyvsp[(3) - (5)].id), 0, 0, 0);
+                                               PASS2 new_variable(state->method, (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].classinfo), 0, 0);
                                               }
     }
     break;
@@ -5397,9 +5218,8 @@ PASS2
   
     case 97:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2339 "parser.y"
+#line 2367 "parser.y"
     {
     namespace_t name_ns = {ACCESS_PACKAGE, ""};
     multiname_t name = {QNAME, &name_ns, 0, (yyvsp[(3) - (9)].id)};
@@ -5427,9 +5247,8 @@ PASS2
   
     case 98:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2359 "parser.y"
+#line 2387 "parser.y"
     {PASS12 new_state();state->exception_name=0;}
     }
     break;
@@ -5438,9 +5257,8 @@ PASS2
   
     case 99:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2359 "parser.y"
+#line 2387 "parser.y"
     {
     (yyvsp[(4) - (5)].code) = var_block((yyvsp[(4) - (5)].code), state->vars);
     if(!(yyvsp[(4) - (5)].code)) {
@@ -5463,9 +5281,8 @@ PASS2
   
     case 100:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2375 "parser.y"
+#line 2403 "parser.y"
     {(yyval.catch_list).l=list_new();(yyval.catch_list).finally=0;list_append((yyval.catch_list).l,(yyvsp[(1) - (1)].exception));}
     }
     break;
@@ -5474,9 +5291,8 @@ PASS2
   
     case 101:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2376 "parser.y"
+#line 2404 "parser.y"
     {(yyval.catch_list)=(yyvsp[(1) - (2)].catch_list);list_append((yyval.catch_list).l,(yyvsp[(2) - (2)].exception));}
     }
     break;
@@ -5485,9 +5301,8 @@ PASS2
   
     case 102:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2377 "parser.y"
+#line 2405 "parser.y"
     {(yyval.catch_list)=(yyvsp[(1) - (1)].catch_list);}
     }
     break;
@@ -5496,9 +5311,8 @@ PASS2
   
     case 103:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2378 "parser.y"
+#line 2406 "parser.y"
     {
     (yyval.catch_list) = (yyvsp[(1) - (2)].catch_list);
     (yyval.catch_list).finally = 0;
@@ -5514,9 +5328,8 @@ PASS2
   
     case 104:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2386 "parser.y"
+#line 2414 "parser.y"
     {
     (yyval.catch_list).l=list_new();
     (yyval.catch_list).finally = 0;
@@ -5532,9 +5345,8 @@ PASS2
   
     case 105:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2395 "parser.y"
+#line 2423 "parser.y"
     {PASS12 new_state();
                  state->method->has_exceptions=1;
                  state->method->late_binding=1;//for invariant scope_code
@@ -5546,9 +5358,8 @@ PASS2
   
     case 106:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2398 "parser.y"
+#line 2426 "parser.y"
     {
     code_t*out = abc_nop(0);
 
@@ -5599,9 +5410,8 @@ PASS2
   
     case 107:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2444 "parser.y"
+#line 2472 "parser.y"
     {
     (yyval.code)=(yyvsp[(2) - (2)].value).c;
     (yyval.code)=abc_throw((yyval.code));
@@ -5613,9 +5423,8 @@ PASS2
   
     case 108:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2448 "parser.y"
+#line 2476 "parser.y"
     {
     if(!state->exception_name)
         syntaxerror("re-throw only possible within a catch block");
@@ -5631,9 +5440,8 @@ PASS2
   
     case 109:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2459 "parser.y"
+#line 2487 "parser.y"
     {
      new_state();
      if(state->method->has_exceptions) {
@@ -5651,9 +5459,8 @@ PASS2
   
     case 110:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2469 "parser.y"
+#line 2497 "parser.y"
     {
      /* remove getlocal;pushwith from scope code again */
      state->method->scope_code = code_cutlast(code_cutlast(state->method->scope_code));
@@ -5675,9 +5482,8 @@ PASS2
   
     case 112:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2487 "parser.y"
+#line 2515 "parser.y"
     {PASS12 (yyval.id)="package";}
     }
     break;
@@ -5686,9 +5492,8 @@ PASS2
   
     case 113:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2488 "parser.y"
+#line 2516 "parser.y"
     {PASS12 (yyval.id)="namespace";}
     }
     break;
@@ -5697,9 +5502,8 @@ PASS2
   
     case 114:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2489 "parser.y"
+#line 2517 "parser.y"
     {PASS12 (yyval.id)="NaN";}
     }
     break;
@@ -5708,9 +5512,8 @@ PASS2
   
     case 115:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2490 "parser.y"
+#line 2518 "parser.y"
     {PASS12 (yyval.id)=(yyvsp[(1) - (1)].id);}
     }
     break;
@@ -5719,9 +5522,8 @@ PASS2
   
     case 116:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2492 "parser.y"
+#line 2520 "parser.y"
     {PASS12 (yyval.id) = concat3((yyvsp[(1) - (3)].id),".",(yyvsp[(3) - (3)].id));free((yyvsp[(1) - (3)].id));(yyvsp[(1) - (3)].id)=0;}
     }
     break;
@@ -5730,9 +5532,8 @@ PASS2
   
     case 117:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2493 "parser.y"
+#line 2521 "parser.y"
     {PASS12 (yyval.id)=strdup((yyvsp[(1) - (1)].id));}
     }
     break;
@@ -5741,9 +5542,8 @@ PASS2
   
     case 118:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2495 "parser.y"
+#line 2523 "parser.y"
     {PASS12 startpackage((yyvsp[(2) - (3)].id));free((yyvsp[(2) - (3)].id));(yyvsp[(2) - (3)].id)=0;}
     }
     break;
@@ -5752,9 +5552,8 @@ PASS2
   
     case 119:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2496 "parser.y"
+#line 2524 "parser.y"
     {PASS12 endpackage();(yyval.code)=0;}
     }
     break;
@@ -5763,9 +5562,8 @@ PASS2
   
     case 120:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2497 "parser.y"
+#line 2525 "parser.y"
     {PASS12 startpackage("");}
     }
     break;
@@ -5774,9 +5572,8 @@ PASS2
   
     case 121:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2498 "parser.y"
+#line 2526 "parser.y"
     {PASS12 endpackage();(yyval.code)=0;}
     }
     break;
@@ -5785,9 +5582,8 @@ PASS2
   
     case 122:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2521 "parser.y"
+#line 2549 "parser.y"
     {
        PASS12
        slotinfo_t*s = registry_find(state->package, (yyvsp[(2) - (2)].id));
@@ -5803,9 +5599,8 @@ PASS2
   
     case 123:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2529 "parser.y"
+#line 2557 "parser.y"
     {
        PASS12
        slotinfo_t*s = registry_find((yyvsp[(2) - (2)].classinfo)->package, (yyvsp[(2) - (2)].classinfo)->name);
@@ -5824,9 +5619,8 @@ PASS2
   
     case 124:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2540 "parser.y"
+#line 2568 "parser.y"
     {
        PASS12
        if(strncmp("flash.", (yyvsp[(2) - (4)].id), 6) && as3_pass==1) {
@@ -5847,9 +5641,8 @@ PASS2
   
     case 125:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2556 "parser.y"
+#line 2584 "parser.y"
     {PASS12 (yyval.flags).flags=0;(yyval.flags).ns=0;}
     }
     break;
@@ -5858,9 +5651,8 @@ PASS2
   
     case 126:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2557 "parser.y"
+#line 2585 "parser.y"
     {PASS12 (yyval.flags)=(yyvsp[(1) - (1)].flags);}
     }
     break;
@@ -5869,9 +5661,8 @@ PASS2
   
     case 127:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2558 "parser.y"
+#line 2586 "parser.y"
     {PASS12 (yyval.flags)=(yyvsp[(1) - (1)].flags);}
     }
     break;
@@ -5880,9 +5671,8 @@ PASS2
   
     case 128:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2559 "parser.y"
+#line 2587 "parser.y"
     {
     PASS12 
     (yyval.flags).flags=(yyvsp[(1) - (2)].flags).flags|(yyvsp[(2) - (2)].flags).flags;
@@ -5897,9 +5687,8 @@ PASS2
   
     case 129:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2566 "parser.y"
+#line 2594 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_PUBLIC;(yyval.flags).ns=0;}
     }
     break;
@@ -5908,9 +5697,8 @@ PASS2
   
     case 130:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2567 "parser.y"
+#line 2595 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_PRIVATE;(yyval.flags).ns=0;}
     }
     break;
@@ -5919,9 +5707,8 @@ PASS2
   
     case 131:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2568 "parser.y"
+#line 2596 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_PROTECTED;(yyval.flags).ns=0;}
     }
     break;
@@ -5930,9 +5717,8 @@ PASS2
   
     case 132:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2569 "parser.y"
+#line 2597 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_STATIC;(yyval.flags).ns=0;}
     }
     break;
@@ -5941,9 +5727,8 @@ PASS2
   
     case 133:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2570 "parser.y"
+#line 2598 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_DYNAMIC;(yyval.flags).ns=0;}
     }
     break;
@@ -5952,9 +5737,8 @@ PASS2
   
     case 134:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2571 "parser.y"
+#line 2599 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_FINAL;(yyval.flags).ns=0;}
     }
     break;
@@ -5963,9 +5747,8 @@ PASS2
   
     case 135:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2572 "parser.y"
+#line 2600 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_OVERRIDE;(yyval.flags).ns=0;}
     }
     break;
@@ -5974,9 +5757,8 @@ PASS2
   
     case 136:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2573 "parser.y"
+#line 2601 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_NATIVE;(yyval.flags).ns=0;}
     }
     break;
@@ -5985,9 +5767,8 @@ PASS2
   
     case 137:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2574 "parser.y"
+#line 2602 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_PACKAGEINTERNAL;(yyval.flags).ns=0;}
     }
     break;
@@ -5996,9 +5777,8 @@ PASS2
   
     case 138:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2575 "parser.y"
+#line 2603 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_NAMESPACE;
                                (yyval.flags).ns=(yyvsp[(1) - (1)].id);
                        }
@@ -6009,9 +5789,8 @@ PASS2
   
     case 139:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2579 "parser.y"
+#line 2607 "parser.y"
     {PASS12 (yyval.classinfo)=0;}
     }
     break;
@@ -6020,9 +5799,8 @@ PASS2
   
     case 140:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2580 "parser.y"
+#line 2608 "parser.y"
     {PASS12 (yyval.classinfo)=(yyvsp[(2) - (2)].classinfo);}
     }
     break;
@@ -6031,9 +5809,8 @@ PASS2
   
     case 141:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2582 "parser.y"
+#line 2610 "parser.y"
     {PASS12 (yyval.classinfo_list)=list_new();}
     }
     break;
@@ -6042,9 +5819,8 @@ PASS2
   
     case 142:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2583 "parser.y"
+#line 2611 "parser.y"
     {PASS12 (yyval.classinfo_list)=(yyvsp[(2) - (2)].classinfo_list);}
     }
     break;
@@ -6053,9 +5829,8 @@ PASS2
   
     case 143:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2585 "parser.y"
+#line 2613 "parser.y"
     {PASS12 (yyval.classinfo_list)=list_new();}
     }
     break;
@@ -6064,9 +5839,8 @@ PASS2
   
     case 144:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2586 "parser.y"
+#line 2614 "parser.y"
     {PASS12 (yyval.classinfo_list)=(yyvsp[(2) - (2)].classinfo_list);}
     }
     break;
@@ -6075,9 +5849,8 @@ PASS2
   
     case 145:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2590 "parser.y"
+#line 2618 "parser.y"
     {PASS12 startclass(&(yyvsp[(1) - (6)].flags),(yyvsp[(3) - (6)].id),(yyvsp[(4) - (6)].classinfo),(yyvsp[(5) - (6)].classinfo_list));}
     }
     break;
@@ -6086,9 +5859,8 @@ PASS2
   
     case 146:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2592 "parser.y"
+#line 2620 "parser.y"
     {PASS12 endclass();(yyval.code)=0;}
     }
     break;
@@ -6097,9 +5869,8 @@ PASS2
   
     case 147:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2596 "parser.y"
+#line 2624 "parser.y"
     {PASS12 (yyvsp[(1) - (5)].flags).flags|=FLAG_INTERFACE;
                                           startclass(&(yyvsp[(1) - (5)].flags),(yyvsp[(3) - (5)].id),0,(yyvsp[(4) - (5)].classinfo_list));}
     }
@@ -6109,9 +5880,8 @@ PASS2
   
     case 148:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2599 "parser.y"
+#line 2627 "parser.y"
     {PASS12 endclass();(yyval.code)=0;}
     }
     break;
@@ -6120,9 +5890,8 @@ PASS2
   
     case 154:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2608 "parser.y"
+#line 2636 "parser.y"
     {PASS_ALWAYS as3_pass=(yyvsp[(1) - (4)].number_int);}
     }
     break;
@@ -6131,9 +5900,8 @@ PASS2
   
     case 157:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2612 "parser.y"
+#line 2640 "parser.y"
     {
     code_t*c = state->cls->static_init->header;
     c = code_append(c, (yyvsp[(1) - (1)].code));  
@@ -6146,9 +5914,8 @@ PASS2
   
     case 163:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2623 "parser.y"
+#line 2651 "parser.y"
     {
     syntaxerror("variable declarations not allowed in interfaces");
 }
@@ -6159,9 +5926,8 @@ PASS2
   
     case 164:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2626 "parser.y"
+#line 2654 "parser.y"
     {
     PASS12
     (yyvsp[(1) - (8)].flags).flags |= FLAG_PUBLIC;
@@ -6179,9 +5945,8 @@ PASS2
   
     case 167:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2701 "parser.y"
+#line 2729 "parser.y"
     {PASS12 setslotstate(&(yyvsp[(1) - (2)].flags),(yyvsp[(2) - (2)].token));}
     }
     break;
@@ -6190,9 +5955,8 @@ PASS2
   
     case 168:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2701 "parser.y"
+#line 2729 "parser.y"
     {PASS12 (yyval.code)=(yyvsp[(4) - (4)].code);setslotstate(0, 0);}
     }
     break;
@@ -6201,9 +5965,8 @@ PASS2
   
     case 169:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2703 "parser.y"
+#line 2731 "parser.y"
     {PASS12 (yyval.code)=0;}
     }
     break;
@@ -6212,9 +5975,8 @@ PASS2
   
     case 170:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2704 "parser.y"
+#line 2732 "parser.y"
     {PASS12 (yyval.code)=0;}
     }
     break;
@@ -6223,9 +5985,8 @@ PASS2
   
     case 171:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2707 "parser.y"
+#line 2735 "parser.y"
     {
 PASS12
     int flags = slotstate_flags->flags;
@@ -6313,9 +6074,8 @@ PASS12
   
     case 172:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2790 "parser.y"
+#line 2818 "parser.y"
     {(yyval.constant)=0;}
     }
     break;
@@ -6324,9 +6084,8 @@ PASS12
   
     case 173:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2791 "parser.y"
+#line 2819 "parser.y"
     {
   (yyval.constant) = malloc(sizeof(constant_t));
   *(yyval.constant) = node_eval((yyvsp[(2) - (2)].node));
@@ -6341,9 +6100,8 @@ PASS12
   
     case 174:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2800 "parser.y"
+#line 2828 "parser.y"
     {(yyval.constant) = constant_new_int((yyvsp[(1) - (1)].number_int));}
     }
     break;
@@ -6352,9 +6110,8 @@ PASS12
   
     case 175:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2801 "parser.y"
+#line 2829 "parser.y"
     {
     (yyval.constant) = constant_new_uint((yyvsp[(1) - (1)].number_uint));
 }
@@ -6365,9 +6122,8 @@ PASS12
   
     case 176:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2804 "parser.y"
+#line 2832 "parser.y"
     {(yyval.constant) = constant_new_float((yyvsp[(1) - (1)].number_float));}
     }
     break;
@@ -6376,9 +6132,8 @@ PASS12
   
     case 177:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2805 "parser.y"
+#line 2833 "parser.y"
     {(yyval.constant) = constant_new_string2((yyvsp[(1) - (1)].str).str,(yyvsp[(1) - (1)].str).len);free((char*)(yyvsp[(1) - (1)].str).str);}
     }
     break;
@@ -6387,9 +6142,8 @@ PASS12
   
     case 178:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2806 "parser.y"
+#line 2834 "parser.y"
     {(yyval.constant) = constant_new_true((yyvsp[(1) - (1)].token));}
     }
     break;
@@ -6398,9 +6152,8 @@ PASS12
   
     case 179:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2807 "parser.y"
+#line 2835 "parser.y"
     {(yyval.constant) = constant_new_false((yyvsp[(1) - (1)].token));}
     }
     break;
@@ -6409,9 +6162,8 @@ PASS12
   
     case 180:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2808 "parser.y"
+#line 2836 "parser.y"
     {(yyval.constant) = constant_new_null((yyvsp[(1) - (1)].token));}
     }
     break;
@@ -6420,9 +6172,8 @@ PASS12
   
     case 181:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2809 "parser.y"
+#line 2837 "parser.y"
     {(yyval.constant) = constant_new_undefined((yyvsp[(1) - (1)].token));}
     }
     break;
@@ -6431,9 +6182,8 @@ PASS12
   
     case 182:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2810 "parser.y"
+#line 2838 "parser.y"
     {(yyval.constant) = constant_new_float(__builtin_nan(""));}
     }
     break;
@@ -6442,9 +6192,8 @@ PASS12
   
     case 183:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2823 "parser.y"
+#line 2851 "parser.y"
     {
    multiname_t m = {QNAME, &stdns, 0, "XML"};
    typedcode_t v;
@@ -6462,9 +6211,8 @@ PASS12
   
     case 184:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2834 "parser.y"
+#line 2862 "parser.y"
     {PASS_ALWAYS if(!xml_level++) tokenizer_begin_xml();}
     }
     break;
@@ -6473,9 +6221,8 @@ PASS12
   
     case 185:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2835 "parser.y"
+#line 2863 "parser.y"
     {PASS_ALWAYS tokenizer_begin_xmltext();}
     }
     break;
@@ -6484,9 +6231,8 @@ PASS12
   
     case 186:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2836 "parser.y"
+#line 2864 "parser.y"
     {PASS_ALWAYS if(!--xml_level) tokenizer_end_xml(); else tokenizer_begin_xmltext();}
     }
     break;
@@ -6495,9 +6241,8 @@ PASS12
   
     case 187:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2838 "parser.y"
+#line 2866 "parser.y"
     {PASS_ALWAYS tokenizer_begin_xmltext();}
     }
     break;
@@ -6506,9 +6251,8 @@ PASS12
   
     case 188:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2838 "parser.y"
+#line 2866 "parser.y"
     {
     (yyval.node) = (yyvsp[(2) - (4)].node);
 }
@@ -6519,9 +6263,8 @@ PASS12
   
     case 189:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2841 "parser.y"
+#line 2869 "parser.y"
     {PASS_ALWAYS tokenizer_begin_xml();}
     }
     break;
@@ -6530,9 +6273,8 @@ PASS12
   
     case 190:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2841 "parser.y"
+#line 2869 "parser.y"
     {
     (yyval.node) = (yyvsp[(2) - (4)].node);
 }
@@ -6543,9 +6285,8 @@ PASS12
   
     case 191:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2844 "parser.y"
+#line 2872 "parser.y"
     {(yyval.node)=mkstringnode("");}
     }
     break;
@@ -6554,9 +6295,8 @@ PASS12
   
     case 192:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2845 "parser.y"
+#line 2873 "parser.y"
     {
     (yyval.node) = mkaddnode((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node));
 }
@@ -6567,9 +6307,8 @@ PASS12
   
     case 193:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2848 "parser.y"
+#line 2876 "parser.y"
     {
     char* str = string_cstr(&(yyvsp[(2) - (2)].str));
     (yyval.node) = mkaddnode((yyvsp[(1) - (2)].node),mkstringnode(str));
@@ -6582,9 +6321,8 @@ PASS12
   
     case 194:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2853 "parser.y"
+#line 2881 "parser.y"
     {
     (yyval.node) = mkaddnode((yyvsp[(1) - (2)].node), mkstringnode(">"));
 }
@@ -6595,9 +6333,8 @@ PASS12
   
     case 195:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2856 "parser.y"
+#line 2884 "parser.y"
     {
     (yyval.node) = mkaddnode((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node));
 }
@@ -6608,9 +6345,8 @@ PASS12
   
     case 196:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2859 "parser.y"
+#line 2887 "parser.y"
     {
     (yyval.node) = mkaddnode((yyvsp[(1) - (3)].node), mkaddnode((yyvsp[(2) - (3)].node),(yyvsp[(3) - (3)].node)));
 }
@@ -6621,9 +6357,8 @@ PASS12
   
     case 197:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2862 "parser.y"
+#line 2890 "parser.y"
     {
     (yyval.node) = mkstringnode((yyvsp[(1) - (1)].id));
 }
@@ -6634,9 +6369,8 @@ PASS12
   
     case 198:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2865 "parser.y"
+#line 2893 "parser.y"
     {
     (yyval.node) = (yyvsp[(1) - (1)].node);
 }
@@ -6647,9 +6381,8 @@ PASS12
   
     case 199:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2869 "parser.y"
+#line 2897 "parser.y"
     {
     (yyval.node) = mkstringnode("");
 }
@@ -6660,9 +6393,8 @@ PASS12
   
     case 200:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2872 "parser.y"
+#line 2900 "parser.y"
     {
     (yyval.node) = mkaddnode(mkstringnode(" "),(yyvsp[(1) - (1)].node));
 }
@@ -6673,9 +6405,8 @@ PASS12
   
     case 201:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2876 "parser.y"
+#line 2904 "parser.y"
     {
     //$$ = allocprintf("<%s%s/>", $2, $3, $5, $8);
     (yyval.node) = mkaddnode(mkaddnode(mkaddnode(mkstringnode("<"),(yyvsp[(2) - (6)].node)),(yyvsp[(3) - (6)].node)),mkstringnode("/>"));
@@ -6687,9 +6418,8 @@ PASS12
   
     case 202:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2880 "parser.y"
+#line 2908 "parser.y"
     {
     //$$ = allocprintf("<%s%s>%s</%s>", $2, $3, $5, $8);
     (yyval.node) = mkaddnode(mkaddnode(mkaddnode(mkaddnode(mkaddnode(mkaddnode(mkaddnode(
@@ -6702,9 +6432,8 @@ PASS12
   
     case 203:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2885 "parser.y"
+#line 2913 "parser.y"
     {
     //$$ = allocprintf("<%s%s>%s%s</%s>", $2, $3, $5, $6, $9);
     (yyval.node) = mkaddnode(mkaddnode(mkaddnode(mkaddnode(mkaddnode(mkaddnode(mkaddnode(mkaddnode(
@@ -6717,9 +6446,8 @@ PASS12
   
     case 204:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2891 "parser.y"
+#line 2919 "parser.y"
     {
     (yyval.node) = (yyvsp[(1) - (1)].node);
 }
@@ -6730,9 +6458,8 @@ PASS12
   
     case 205:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2894 "parser.y"
+#line 2922 "parser.y"
     {
     (yyval.node) = mkaddnode((yyvsp[(1) - (2)].node), mkaddnode(mkstringnode(" "),(yyvsp[(2) - (2)].node)));
 }
@@ -6743,9 +6470,8 @@ PASS12
   
     case 206:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2897 "parser.y"
+#line 2925 "parser.y"
     {
     (yyval.node) = (yyvsp[(1) - (1)].node);
 }
@@ -6756,9 +6482,8 @@ PASS12
   
     case 207:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2900 "parser.y"
+#line 2928 "parser.y"
     {
     char* str = string_cstr(&(yyvsp[(3) - (3)].str));
     (yyval.node) = mkaddnode((yyvsp[(1) - (3)].node), mkstringnode(concat2("=",str)));
@@ -6771,9 +6496,8 @@ PASS12
   
     case 208:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2905 "parser.y"
+#line 2933 "parser.y"
     {
     (yyval.node) = mkaddnode((yyvsp[(1) - (3)].node), mkaddnode(mkstringnode("=\""), mkaddnode((yyvsp[(3) - (3)].node), mkstringnode("\""))));
 }
@@ -6784,9 +6508,8 @@ PASS12
   
     case 209:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2908 "parser.y"
+#line 2936 "parser.y"
     {
     (yyval.node) = mkaddnode(mkaddnode(mkstringnode(concat2((yyvsp[(1) - (3)].id),"=\"")), (yyvsp[(3) - (3)].node)), mkstringnode("\""));
 }
@@ -6797,9 +6520,8 @@ PASS12
   
     case 210:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2911 "parser.y"
+#line 2939 "parser.y"
     {
     char* str = string_cstr(&(yyvsp[(3) - (3)].str));
     (yyval.node)=mkstringnode(allocprintf("%s=%s", (yyvsp[(1) - (3)].id),str));
@@ -6813,9 +6535,8 @@ PASS12
   
     case 211:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2921 "parser.y"
+#line 2949 "parser.y"
     {
     PASS12
     memset(&(yyval.params),0,sizeof((yyval.params)));
@@ -6827,9 +6548,8 @@ PASS12
   
     case 212:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2925 "parser.y"
+#line 2953 "parser.y"
     {
     PASS12
     (yyval.params)=(yyvsp[(1) - (1)].params);
@@ -6841,9 +6561,8 @@ PASS12
   
     case 213:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2931 "parser.y"
+#line 2959 "parser.y"
     {
     PASS12
     memset(&(yyval.params),0,sizeof((yyval.params)));
@@ -6857,9 +6576,8 @@ PASS12
   
     case 214:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2937 "parser.y"
+#line 2965 "parser.y"
     {
     PASS12
     (yyval.params) =(yyvsp[(1) - (4)].params);
@@ -6873,9 +6591,8 @@ PASS12
   
     case 215:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2945 "parser.y"
+#line 2973 "parser.y"
     {
     PASS12
     (yyval.params) = (yyvsp[(1) - (3)].params);
@@ -6888,9 +6605,8 @@ PASS12
   
     case 216:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2950 "parser.y"
+#line 2978 "parser.y"
     {
     PASS12
     memset(&(yyval.params),0,sizeof((yyval.params)));
@@ -6903,9 +6619,8 @@ PASS12
   
     case 217:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2956 "parser.y"
+#line 2984 "parser.y"
     {
      PASS12
      (yyval.param) = rfx_calloc(sizeof(param_t));
@@ -6921,9 +6636,8 @@ PASS12
   
     case 218:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2964 "parser.y"
+#line 2992 "parser.y"
     {
      PASS12
      (yyval.param) = rfx_calloc(sizeof(param_t));
@@ -6939,9 +6653,8 @@ PASS12
   
     case 221:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2974 "parser.y"
+#line 3002 "parser.y"
     {PASS12 (yyval.token)=0;}
     }
     break;
@@ -6950,9 +6663,8 @@ PASS12
   
     case 222:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2977 "parser.y"
+#line 3005 "parser.y"
     {PASS12 startfunction(&(yyvsp[(1) - (9)].flags),(yyvsp[(3) - (9)].token),(yyvsp[(4) - (9)].id),&(yyvsp[(6) - (9)].params),(yyvsp[(8) - (9)].classinfo));}
     }
     break;
@@ -6961,9 +6673,8 @@ PASS12
   
     case 223:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2978 "parser.y"
+#line 3006 "parser.y"
     {
     PASS1 
     endfunction(&(yyvsp[(1) - (12)].flags),(yyvsp[(3) - (12)].token),(yyvsp[(4) - (12)].id),&(yyvsp[(6) - (12)].params),0,0);
@@ -6985,9 +6696,8 @@ PASS12
   
     case 225:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2994 "parser.y"
+#line 3022 "parser.y"
     {PASS12 (yyval.id)=0;}
     }
     break;
@@ -6996,9 +6706,8 @@ PASS12
   
     case 226:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2996 "parser.y"
+#line 3024 "parser.y"
     {PASS12 innerfunction((yyvsp[(2) - (7)].id),&(yyvsp[(4) - (7)].params),(yyvsp[(6) - (7)].classinfo));}
     }
     break;
@@ -7007,9 +6716,8 @@ PASS12
   
     case 227:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 2997 "parser.y"
+#line 3025 "parser.y"
     {
     PASS1
     endfunction(0,0,(yyvsp[(2) - (10)].id),&(yyvsp[(4) - (10)].params),0,0);
@@ -7035,9 +6743,8 @@ PASS12
   
     case 228:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3019 "parser.y"
+#line 3047 "parser.y"
     {
     PASS1 NEW(unresolvedinfo_t,c);
           memset(c, 0, sizeof(*c));
@@ -7063,9 +6770,8 @@ PASS12
   
     case 229:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3038 "parser.y"
+#line 3066 "parser.y"
     {
     PASS1 NEW(unresolvedinfo_t,c);
           memset(c, 0, sizeof(*c));
@@ -7086,9 +6792,8 @@ PASS12
   
     case 232:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3055 "parser.y"
+#line 3083 "parser.y"
     {PASS12 (yyval.classinfo_list)=list_new();list_append((yyval.classinfo_list), (yyvsp[(1) - (1)].classinfo));}
     }
     break;
@@ -7097,9 +6802,8 @@ PASS12
   
     case 233:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3056 "parser.y"
+#line 3084 "parser.y"
     {PASS12 (yyval.classinfo_list)=(yyvsp[(1) - (3)].classinfo_list);list_append((yyval.classinfo_list),(yyvsp[(3) - (3)].classinfo));}
     }
     break;
@@ -7108,9 +6812,8 @@ PASS12
   
     case 234:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3058 "parser.y"
+#line 3086 "parser.y"
     {PASS12 (yyval.classinfo)=(yyvsp[(1) - (1)].classinfo);}
     }
     break;
@@ -7119,9 +6822,8 @@ PASS12
   
     case 235:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3059 "parser.y"
+#line 3087 "parser.y"
     {PASS12 (yyval.classinfo)=TYPE_ANY;}
     }
     break;
@@ -7130,9 +6832,8 @@ PASS12
   
     case 236:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3060 "parser.y"
+#line 3088 "parser.y"
     {PASS12 (yyval.classinfo)=TYPE_VOID;}
     }
     break;
@@ -7141,9 +6842,8 @@ PASS12
   
     case 237:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3069 "parser.y"
+#line 3097 "parser.y"
     {PASS12 (yyval.classinfo)=(yyvsp[(2) - (2)].classinfo);}
     }
     break;
@@ -7152,9 +6852,8 @@ PASS12
   
     case 238:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3070 "parser.y"
+#line 3098 "parser.y"
     {PASS12 (yyval.classinfo)=0;}
     }
     break;
@@ -7163,9 +6862,8 @@ PASS12
   
     case 239:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3074 "parser.y"
+#line 3102 "parser.y"
     {(yyval.value_list).cc=0;(yyval.value_list).number=0;}
     }
     break;
@@ -7174,9 +6872,8 @@ PASS12
   
     case 240:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3075 "parser.y"
+#line 3103 "parser.y"
     {(yyval.value_list)=(yyvsp[(2) - (3)].value_list);}
     }
     break;
@@ -7185,9 +6882,8 @@ PASS12
   
     case 241:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3077 "parser.y"
+#line 3105 "parser.y"
     {(yyval.value_list).cc=0;(yyval.value_list).number=0;}
     }
     break;
@@ -7196,9 +6892,8 @@ PASS12
   
     case 244:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3081 "parser.y"
+#line 3109 "parser.y"
     {(yyval.value_list).number=1;
                                                   (yyval.value_list).cc = (yyvsp[(1) - (1)].value).c;
                                                  }
@@ -7209,9 +6904,8 @@ PASS12
   
     case 245:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3085 "parser.y"
+#line 3113 "parser.y"
     {(yyval.value_list) = (yyvsp[(1) - (2)].value_list);}
     }
     break;
@@ -7220,9 +6914,8 @@ PASS12
   
     case 246:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3086 "parser.y"
+#line 3114 "parser.y"
     {
                                                   (yyval.value_list).number= (yyvsp[(1) - (2)].value_list).number+1;
                                                   (yyval.value_list).cc = code_append((yyvsp[(1) - (2)].value_list).cc, (yyvsp[(2) - (2)].value).c);
@@ -7234,9 +6927,8 @@ PASS12
   
     case 248:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3092 "parser.y"
+#line 3120 "parser.y"
     {
     typedcode_t v = node_read((yyvsp[(2) - (4)].node));
     (yyval.value).c = v.c;
@@ -7249,6 +6941,9 @@ PASS12
         (yyval.value).c = code_append((yyval.value).c, paramcode);
         (yyval.value).c = abc_constructprop2((yyval.value).c, name, (yyvsp[(4) - (4)].value_list).number);
         multiname_destroy(name);
+    } else if(is_getlocal((yyval.value).c)) {
+        (yyval.value).c = code_append((yyval.value).c, paramcode);
+        (yyval.value).c = abc_construct((yyval.value).c, (yyvsp[(4) - (4)].value_list).number);
     } else if(TYPE_IS_CLASS(v.t) && v.t->data) {
         code_free((yyval.value).c);
         classinfo_t*c = v.t->data;
@@ -7283,9 +6978,8 @@ PASS12
   
     case 249:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3136 "parser.y"
+#line 3167 "parser.y"
     {
    
     typedcode_t v = node_read((yyvsp[(1) - (4)].node));
@@ -7342,9 +7036,8 @@ PASS12
   
     case 250:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3186 "parser.y"
+#line 3217 "parser.y"
     {
     if(!state->cls) syntaxerror("super() not allowed outside of a class");
     if(!state->method) syntaxerror("super() not allowed outside of a function");
@@ -7372,9 +7065,8 @@ PASS12
   
     case 251:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3207 "parser.y"
+#line 3238 "parser.y"
     {
     typedcode_t v = node_read((yyvsp[(2) - (2)].node));
     (yyval.value).c = v.c;
@@ -7403,9 +7095,8 @@ PASS12
   
     case 252:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3229 "parser.y"
+#line 3260 "parser.y"
     {
     (yyval.code) = abc_returnvoid(0);
 }
@@ -7416,9 +7107,8 @@ PASS12
   
     case 253:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3232 "parser.y"
+#line 3263 "parser.y"
     {
     (yyval.code) = (yyvsp[(2) - (2)].value).c;
     (yyval.code) = abc_returnvalue((yyval.code));
@@ -7430,9 +7120,8 @@ PASS12
   
     case 254:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3239 "parser.y"
+#line 3270 "parser.y"
     {
     (yyval.value) = node_read((yyvsp[(1) - (1)].node));
 }
@@ -7443,9 +7132,8 @@ PASS12
   
     case 255:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3242 "parser.y"
+#line 3273 "parser.y"
     {
     (yyval.value) = node_read((yyvsp[(1) - (1)].node));
 }
@@ -7456,9 +7144,8 @@ PASS12
   
     case 256:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3245 "parser.y"
+#line 3276 "parser.y"
     {
     (yyval.node) = mkmultinode(&node_comma, (yyvsp[(1) - (1)].node));
 }
@@ -7469,9 +7156,8 @@ PASS12
   
     case 257:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3248 "parser.y"
+#line 3279 "parser.y"
     {
     (yyval.node) = multinode_extend((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
 }
@@ -7482,9 +7168,8 @@ PASS12
   
     case 258:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3251 "parser.y"
+#line 3282 "parser.y"
     { 
     (yyval.code) = node_exec((yyvsp[(1) - (1)].node)); 
 }
@@ -7495,9 +7180,8 @@ PASS12
   
     case 259:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3254 "parser.y"
+#line 3285 "parser.y"
     { 
     (yyval.code) = (yyvsp[(1) - (3)].code);
     (yyval.code) = code_append((yyval.code), node_exec((yyvsp[(3) - (3)].node))); 
@@ -7509,9 +7193,8 @@ PASS12
   
     case 260:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3259 "parser.y"
+#line 3290 "parser.y"
     {(yyval.value_list).cc=0;(yyval.value_list).number=0;}
     }
     break;
@@ -7520,9 +7203,8 @@ PASS12
   
     case 261:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3260 "parser.y"
+#line 3291 "parser.y"
     {(yyval.value_list)=(yyvsp[(1) - (1)].value_list);}
     }
     break;
@@ -7531,9 +7213,8 @@ PASS12
   
     case 262:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3262 "parser.y"
+#line 3293 "parser.y"
     {(yyval.code)=abc_pushstring(0,(yyvsp[(1) - (1)].id));}
     }
     break;
@@ -7542,9 +7223,8 @@ PASS12
   
     case 263:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3263 "parser.y"
+#line 3294 "parser.y"
     {(yyval.code)=abc_pushstring2(0,&(yyvsp[(1) - (1)].str));}
     }
     break;
@@ -7553,9 +7233,8 @@ PASS12
   
     case 264:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3264 "parser.y"
+#line 3295 "parser.y"
     {syntaxerror("dictionary keys must be strings");}
     }
     break;
@@ -7564,9 +7243,8 @@ PASS12
   
     case 265:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3265 "parser.y"
+#line 3296 "parser.y"
     {syntaxerror("dictionary keys must be strings");}
     }
     break;
@@ -7575,9 +7253,8 @@ PASS12
   
     case 266:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3266 "parser.y"
+#line 3297 "parser.y"
     {syntaxerror("dictionary keys must be strings");}
     }
     break;
@@ -7586,9 +7263,8 @@ PASS12
   
     case 267:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3268 "parser.y"
+#line 3299 "parser.y"
     {
     (yyval.value_list).cc = 0;
     (yyval.value_list).cc = code_append((yyval.value_list).cc, (yyvsp[(1) - (3)].code));
@@ -7602,9 +7278,8 @@ PASS12
   
     case 268:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3274 "parser.y"
+#line 3305 "parser.y"
     {
     (yyval.value_list).cc = (yyvsp[(1) - (5)].value_list).cc;
     (yyval.value_list).number = (yyvsp[(1) - (5)].value_list).number+2;
@@ -7618,9 +7293,8 @@ PASS12
   
     case 269:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3283 "parser.y"
+#line 3314 "parser.y"
     {(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));}
     }
     break;
@@ -7629,9 +7303,8 @@ PASS12
   
     case 270:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3284 "parser.y"
+#line 3315 "parser.y"
     {(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));}
     }
     break;
@@ -7640,9 +7313,8 @@ PASS12
   
     case 271:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3285 "parser.y"
+#line 3316 "parser.y"
     {(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));}
     }
     break;
@@ -7651,9 +7323,8 @@ PASS12
   
     case 272:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3286 "parser.y"
+#line 3317 "parser.y"
     {(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));}
     }
     break;
@@ -7662,9 +7333,8 @@ PASS12
   
     case 273:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3287 "parser.y"
+#line 3318 "parser.y"
     {(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));}
     }
     break;
@@ -7673,9 +7343,8 @@ PASS12
   
     case 274:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3288 "parser.y"
+#line 3319 "parser.y"
     {(yyval.node) = (yyvsp[(1) - (1)].node);}
     }
     break;
@@ -7684,9 +7353,8 @@ PASS12
   
     case 275:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3290 "parser.y"
+#line 3321 "parser.y"
     { 
     (yyval.node) = mkconstnode((yyvsp[(1) - (1)].constant));
 }
@@ -7697,9 +7365,8 @@ PASS12
   
     case 276:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3294 "parser.y"
+#line 3325 "parser.y"
     {
     (yyval.node) = (yyvsp[(1) - (1)].node);
 }
@@ -7710,9 +7377,8 @@ PASS12
   
     case 277:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3299 "parser.y"
+#line 3330 "parser.y"
     {
     typedcode_t v;
     v.c = 0;
@@ -7737,9 +7403,8 @@ PASS12
   
     case 278:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3317 "parser.y"
+#line 3348 "parser.y"
     {
     PASS1
     state->method->need_arguments = 1;
@@ -7756,9 +7421,8 @@ PASS12
   
     case 279:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3328 "parser.y"
+#line 3359 "parser.y"
     {
     typedcode_t v;
     v.c = code_new();
@@ -7774,9 +7438,8 @@ PASS12
   
     case 280:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3338 "parser.y"
+#line 3369 "parser.y"
     {
     typedcode_t v;
     v.c = code_new();
@@ -7792,9 +7455,8 @@ PASS12
   
     case 281:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3347 "parser.y"
+#line 3378 "parser.y"
     {(yyval.node) = mknode2(&node_lt,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
     }
     break;
@@ -7803,9 +7465,8 @@ PASS12
   
     case 282:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3348 "parser.y"
+#line 3379 "parser.y"
     {(yyval.node) = mknode2(&node_gt,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
     }
     break;
@@ -7814,9 +7475,8 @@ PASS12
   
     case 283:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3349 "parser.y"
+#line 3380 "parser.y"
     {(yyval.node) = mknode2(&node_le,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
     }
     break;
@@ -7825,9 +7485,8 @@ PASS12
   
     case 284:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3350 "parser.y"
+#line 3381 "parser.y"
     {(yyval.node) = mknode2(&node_ge,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
     }
     break;
@@ -7836,9 +7495,8 @@ PASS12
   
     case 285:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3351 "parser.y"
+#line 3382 "parser.y"
     {(yyval.node) = mknode2(&node_eqeq,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
     }
     break;
@@ -7847,9 +7505,8 @@ PASS12
   
     case 286:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3352 "parser.y"
+#line 3383 "parser.y"
     {(yyval.node) = mknode2(&node_eqeqeq,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
     }
     break;
@@ -7858,9 +7515,8 @@ PASS12
   
     case 287:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3353 "parser.y"
+#line 3384 "parser.y"
     {(yyval.node) = mknode2(&node_noteqeq,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
     }
     break;
@@ -7869,9 +7525,8 @@ PASS12
   
     case 288:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3354 "parser.y"
+#line 3385 "parser.y"
     {(yyval.node) = mknode2(&node_noteq,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
     }
     break;
@@ -7880,9 +7535,8 @@ PASS12
   
     case 289:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3355 "parser.y"
+#line 3386 "parser.y"
     {(yyval.node) = mknode2(&node_oror,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
     }
     break;
@@ -7891,9 +7545,8 @@ PASS12
   
     case 290:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3356 "parser.y"
+#line 3387 "parser.y"
     {(yyval.node) = mknode2(&node_andand,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
     }
     break;
@@ -7902,9 +7555,8 @@ PASS12
   
     case 291:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3357 "parser.y"
+#line 3388 "parser.y"
     {(yyval.node) = mknode1(&node_not, (yyvsp[(2) - (2)].node));}
     }
     break;
@@ -7913,9 +7565,8 @@ PASS12
   
     case 292:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3358 "parser.y"
+#line 3389 "parser.y"
     {(yyval.node) = mknode1(&node_bitnot, (yyvsp[(2) - (2)].node));}
     }
     break;
@@ -7924,9 +7575,8 @@ PASS12
   
     case 293:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3359 "parser.y"
+#line 3390 "parser.y"
     {(yyval.node) = mknode2(&node_bitand, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
@@ -7935,9 +7585,8 @@ PASS12
   
     case 294:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3360 "parser.y"
+#line 3391 "parser.y"
     {(yyval.node) = mknode2(&node_bitxor, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
@@ -7946,9 +7595,8 @@ PASS12
   
     case 295:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3361 "parser.y"
+#line 3392 "parser.y"
     {(yyval.node) = mknode2(&node_bitor, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
@@ -7957,9 +7605,8 @@ PASS12
   
     case 296:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3362 "parser.y"
+#line 3393 "parser.y"
     {(yyval.node) = mknode2(&node_shr, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
@@ -7968,9 +7615,8 @@ PASS12
   
     case 297:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3363 "parser.y"
+#line 3394 "parser.y"
     {(yyval.node) = mknode2(&node_ushr, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
@@ -7979,9 +7625,8 @@ PASS12
   
     case 298:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3364 "parser.y"
+#line 3395 "parser.y"
     {(yyval.node) = mknode2(&node_shl, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
@@ -7990,9 +7635,8 @@ PASS12
   
     case 299:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3365 "parser.y"
+#line 3396 "parser.y"
     {(yyval.node) = mknode2(&node_div, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
@@ -8001,9 +7645,8 @@ PASS12
   
     case 300:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3366 "parser.y"
+#line 3397 "parser.y"
     {(yyval.node) = mknode2(&node_mod, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
@@ -8012,9 +7655,8 @@ PASS12
   
     case 301:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3367 "parser.y"
+#line 3398 "parser.y"
     {(yyval.node) = mknode2(&node_plus, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
@@ -8023,9 +7665,8 @@ PASS12
   
     case 302:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3368 "parser.y"
+#line 3399 "parser.y"
     {(yyval.node) = mknode2(&node_minus, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
@@ -8034,9 +7675,8 @@ PASS12
   
     case 303:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3369 "parser.y"
+#line 3400 "parser.y"
     {(yyval.node) = mknode2(&node_multiply, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
@@ -8045,9 +7685,8 @@ PASS12
   
     case 304:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3370 "parser.y"
+#line 3401 "parser.y"
     {(yyval.node) = mknode2(&node_in, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
@@ -8056,9 +7695,8 @@ PASS12
   
     case 305:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3371 "parser.y"
+#line 3402 "parser.y"
     {(yyval.node) = mknode2(&node_as, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
@@ -8067,9 +7705,8 @@ PASS12
   
     case 306:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3372 "parser.y"
+#line 3403 "parser.y"
     {(yyval.node) = mknode2(&node_instanceof, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
@@ -8078,9 +7715,8 @@ PASS12
   
     case 307:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3373 "parser.y"
+#line 3404 "parser.y"
     {(yyval.node) = mknode2(&node_is, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
@@ -8089,9 +7725,8 @@ PASS12
   
     case 308:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3374 "parser.y"
+#line 3405 "parser.y"
     {(yyval.node) = mknode1(&node_typeof, (yyvsp[(2) - (2)].node));}
     }
     break;
@@ -8100,9 +7735,8 @@ PASS12
   
     case 309:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3375 "parser.y"
+#line 3406 "parser.y"
     {(yyval.node) = mknode1(&node_void, (yyvsp[(2) - (2)].node));}
     }
     break;
@@ -8111,9 +7745,8 @@ PASS12
   
     case 310:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3376 "parser.y"
+#line 3407 "parser.y"
     { (yyval.node) = mkconstnode(constant_new_undefined());}
     }
     break;
@@ -8122,9 +7755,8 @@ PASS12
   
     case 311:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3377 "parser.y"
+#line 3408 "parser.y"
     { (yyval.node)=(yyvsp[(2) - (3)].node);}
     }
     break;
@@ -8133,9 +7765,8 @@ PASS12
   
     case 312:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3378 "parser.y"
+#line 3409 "parser.y"
     {(yyval.node) = mknode1(&node_neg, (yyvsp[(2) - (2)].node));}
     }
     break;
@@ -8144,9 +7775,8 @@ PASS12
   
     case 313:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3379 "parser.y"
+#line 3410 "parser.y"
     {(yyval.node) = mknode2(&node_arraylookup, (yyvsp[(1) - (4)].node),(yyvsp[(3) - (4)].node));}
     }
     break;
@@ -8155,9 +7785,8 @@ PASS12
   
     case 314:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3380 "parser.y"
+#line 3411 "parser.y"
     {(yyval.node) = mknode2(&node_muleq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
@@ -8166,9 +7795,8 @@ PASS12
   
     case 315:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3381 "parser.y"
+#line 3412 "parser.y"
     {(yyval.node) = mknode2(&node_modeq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
@@ -8177,9 +7805,8 @@ PASS12
   
     case 316:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3382 "parser.y"
+#line 3413 "parser.y"
     {(yyval.node) = mknode2(&node_shleq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
@@ -8188,9 +7815,8 @@ PASS12
   
     case 317:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3383 "parser.y"
+#line 3414 "parser.y"
     {(yyval.node) = mknode2(&node_shreq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
@@ -8199,9 +7825,8 @@ PASS12
   
     case 318:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3384 "parser.y"
+#line 3415 "parser.y"
     {(yyval.node) = mknode2(&node_ushreq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
@@ -8210,9 +7835,8 @@ PASS12
   
     case 319:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3385 "parser.y"
+#line 3416 "parser.y"
     { (yyval.node) = mknode2(&node_diveq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
@@ -8221,9 +7845,8 @@ PASS12
   
     case 320:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3386 "parser.y"
+#line 3417 "parser.y"
     { (yyval.node) = mknode2(&node_bitoreq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
@@ -8232,9 +7855,8 @@ PASS12
   
     case 321:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3387 "parser.y"
+#line 3418 "parser.y"
     { (yyval.node) = mknode2(&node_bitxoreq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
@@ -8243,9 +7865,8 @@ PASS12
   
     case 322:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3388 "parser.y"
+#line 3419 "parser.y"
     { (yyval.node) = mknode2(&node_bitandeq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
@@ -8254,9 +7875,8 @@ PASS12
   
     case 323:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3389 "parser.y"
+#line 3420 "parser.y"
     { (yyval.node) = mknode2(&node_pluseq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
@@ -8265,9 +7885,8 @@ PASS12
   
     case 324:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3390 "parser.y"
+#line 3421 "parser.y"
     { (yyval.node) = mknode2(&node_minuseq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
@@ -8276,9 +7895,8 @@ PASS12
   
     case 325:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3391 "parser.y"
+#line 3422 "parser.y"
     { (yyval.node) = mknode2(&node_assign, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
     }
     break;
@@ -8287,9 +7905,8 @@ PASS12
   
     case 326:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3392 "parser.y"
+#line 3423 "parser.y"
     { (yyval.node) = mknode3(&node_tenary, (yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node));}
     }
     break;
@@ -8298,9 +7915,8 @@ PASS12
   
     case 327:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3394 "parser.y"
+#line 3425 "parser.y"
     { (yyval.node) = mknode1(&node_rplusplus, (yyvsp[(1) - (2)].node));}
     }
     break;
@@ -8309,9 +7925,8 @@ PASS12
   
     case 328:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3395 "parser.y"
+#line 3426 "parser.y"
     { (yyval.node) = mknode1(&node_rminusminus, (yyvsp[(1) - (2)].node));}
     }
     break;
@@ -8320,9 +7935,8 @@ PASS12
   
     case 329:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3396 "parser.y"
+#line 3427 "parser.y"
     {(yyval.node) = mknode1(&node_lplusplus, (yyvsp[(2) - (2)].node)); }
     }
     break;
@@ -8331,9 +7945,8 @@ PASS12
   
     case 330:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3397 "parser.y"
+#line 3428 "parser.y"
     {(yyval.node) = mknode1(&node_lminusminus, (yyvsp[(2) - (2)].node)); }
     }
     break;
@@ -8342,9 +7955,8 @@ PASS12
   
     case 331:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3400 "parser.y"
+#line 3431 "parser.y"
     { if(!state->cls->info)
                   syntaxerror("super keyword not allowed outside a class");
               classinfo_t*t = state->cls->info->superclass;
@@ -8365,9 +7977,8 @@ PASS12
   
     case 332:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3414 "parser.y"
+#line 3445 "parser.y"
     {
     typedcode_t v;
     multiname_t m = {MULTINAMEA, 0, &nopackage_namespace_set, (yyvsp[(2) - (2)].id)};
@@ -8382,9 +7993,8 @@ PASS12
   
     case 333:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3422 "parser.y"
+#line 3453 "parser.y"
     {PASS12 new_state();state->xmlfilter=1;}
     }
     break;
@@ -8393,9 +8003,8 @@ PASS12
   
     case 334:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3422 "parser.y"
+#line 3453 "parser.y"
     {
     PASS1 old_state();
     PASS2
@@ -8456,9 +8065,8 @@ PASS12
   
     case 335:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3476 "parser.y"
+#line 3507 "parser.y"
     {(yyval.id)=(yyvsp[(1) - (1)].id);}
     }
     break;
@@ -8467,9 +8075,8 @@ PASS12
   
     case 336:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3477 "parser.y"
+#line 3508 "parser.y"
     {(yyval.id)="*";}
     }
     break;
@@ -8478,9 +8085,8 @@ PASS12
   
     case 337:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3478 "parser.y"
+#line 3509 "parser.y"
     {(yyval.id)=(char*)(yyvsp[(1) - (1)].id);}
     }
     break;
@@ -8489,9 +8095,8 @@ PASS12
   
     case 339:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3480 "parser.y"
+#line 3511 "parser.y"
     {(yyval.id)="*";}
     }
     break;
@@ -8500,9 +8105,8 @@ PASS12
   
     case 340:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3488 "parser.y"
+#line 3519 "parser.y"
     {
     typedcode_t v = node_read((yyvsp[(1) - (5)].node));
     typedcode_t w = node_read(resolve_identifier((yyvsp[(3) - (5)].id)));
@@ -8528,9 +8132,8 @@ PASS12
   
     case 341:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3506 "parser.y"
+#line 3537 "parser.y"
     {
     typedcode_t v = node_read((yyvsp[(1) - (3)].node));
     multiname_t m = {MULTINAME, 0, &nopackage_namespace_set, (yyvsp[(3) - (3)].id)};
@@ -8545,9 +8148,8 @@ PASS12
   
     case 342:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3513 "parser.y"
+#line 3544 "parser.y"
     {
     typedcode_t v = node_read((yyvsp[(1) - (5)].node));
     typedcode_t w = node_read((yyvsp[(4) - (5)].node));
@@ -8565,9 +8167,8 @@ PASS12
   
     case 343:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3524 "parser.y"
+#line 3555 "parser.y"
     {
     typedcode_t v = node_read((yyvsp[(1) - (4)].node));
     multiname_t m = {MULTINAMEA, 0, &nopackage_namespace_set, (yyvsp[(4) - (4)].id)};
@@ -8582,9 +8183,8 @@ PASS12
   
     case 344:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3531 "parser.y"
+#line 3562 "parser.y"
     {
     typedcode_t v = node_read((yyvsp[(1) - (4)].node));
     multiname_t m = {MULTINAMEA, 0, &nopackage_namespace_set, (yyvsp[(4) - (4)].id)};
@@ -8599,9 +8199,8 @@ PASS12
   
     case 345:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3538 "parser.y"
+#line 3569 "parser.y"
     {
     typedcode_t v = node_read((yyvsp[(1) - (6)].node));
     typedcode_t w = node_read((yyvsp[(5) - (6)].node));
@@ -8619,9 +8218,8 @@ PASS12
   
     case 346:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3548 "parser.y"
+#line 3579 "parser.y"
     {
     typedcode_t v = node_read((yyvsp[(1) - (6)].node));
     typedcode_t w = node_read((yyvsp[(5) - (6)].node));
@@ -8639,9 +8237,8 @@ PASS12
   
     case 347:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3559 "parser.y"
+#line 3590 "parser.y"
     {
     typedcode_t v1 = node_read((yyvsp[(1) - (3)].node));
     (yyval.value).c = v1.c;
@@ -8713,9 +8310,8 @@ PASS12
   
     case 348:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3739 "parser.y"
+#line 3770 "parser.y"
     {
     PASS1
     /* Queue unresolved identifiers for checking against the parent
@@ -8745,9 +8341,8 @@ PASS12
   
     case 349:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3773 "parser.y"
+#line 3804 "parser.y"
     {
     PASS12
     NEW(namespace_decl_t,n);
@@ -8762,9 +8357,8 @@ PASS12
   
     case 350:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3780 "parser.y"
+#line 3811 "parser.y"
     {
     PASS12
     NEW(namespace_decl_t,n);
@@ -8779,9 +8373,8 @@ PASS12
   
     case 351:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3787 "parser.y"
+#line 3818 "parser.y"
     {
     PASS12
     NEW(namespace_decl_t,n);
@@ -8796,9 +8389,8 @@ PASS12
   
     case 352:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3794 "parser.y"
+#line 3825 "parser.y"
     {
     PASS12
     trie_put(active_namespaces, (yyvsp[(2) - (2)].namespace_decl)->name, (void*)(yyvsp[(2) - (2)].namespace_decl)->url);
@@ -8827,9 +8419,8 @@ PASS12
   
     case 353:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3817 "parser.y"
+#line 3848 "parser.y"
     {
     as3_warning("default xml namespaces not supported yet");
     (yyval.code) = 0;
@@ -8841,9 +8432,8 @@ PASS12
   
     case 354:
     if(as3_pass==2) {
-
 /* Line 1464 of skeleton.m4  */
-#line 3822 "parser.y"
+#line 3853 "parser.y"
     {
     PASS12
     const char*url = (yyvsp[(3) - (3)].classinfo)->name;
@@ -8870,9 +8460,8 @@ PASS12
 
 
 
-
 /* Line 1464 of skeleton.m4  */
-#line 8876 "parser.tab.c"
+#line 8465 "parser.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);