fixed some compiler warnings, fixed as3compile spec for-in.as
authorMatthias Kramm <kramm@quiss.org>
Sun, 15 Nov 2009 02:55:02 +0000 (18:55 -0800)
committerMatthias Kramm <kramm@quiss.org>
Sun, 15 Nov 2009 02:55:02 +0000 (18:55 -0800)
15 files changed:
lib/MD5.c
lib/as3/Makefile
lib/as3/common.h
lib/as3/expr.c
lib/as3/expr.h
lib/as3/optimizations.txt [new file with mode: 0644]
lib/as3/parser.tab.c
lib/as3/parser.tab.h
lib/as3/parser.y
lib/as3/pool.c
lib/as3/scripts.c
lib/as3/tokenizer.h
lib/as3/tokenizer.lex
lib/as3/tokenizer.yy.c
lib/q.c

index 42bd0a9..23ada81 100644 (file)
--- a/lib/MD5.c
+++ b/lib/MD5.c
@@ -32,6 +32,7 @@
 
 #include "../config.h"
 
+#include <stdlib.h>
 #include <string.h>
 #include <memory.h>
 
 #endif
 #endif
 
-typedef long unsigned int u_int32_t;
-typedef long long unsigned int u_int64_t;
-typedef unsigned char u_int8_t;
+#include "types.h"
+
 typedef unsigned int u_int;
 typedef unsigned long u_long;
 typedef unsigned char u_char;
 
 typedef struct {
        union {
-               u_int32_t       md5_state32[4];
-               u_int8_t        md5_state8[16];
+               U32     md5_state32[4];
+               U8      md5_state8[16];
        } md5_st;
 
 #define md5_sta                md5_st.md5_state32[0]
@@ -74,20 +74,20 @@ typedef struct {
 #define md5_st8                md5_st.md5_state8
 
        union {
-               u_int64_t       md5_count64;
-               u_int8_t        md5_count8[8];
+               U64     md5_count64;
+               U8      md5_count8[8];
        } md5_count;
 #define md5_n  md5_count.md5_count64
 #define md5_n8 md5_count.md5_count8
 
        u_int   md5_i;
-       u_int8_t        md5_buf[MD5_BUFLEN];
+       U8      md5_buf[MD5_BUFLEN];
 } md5_ctxt;
 
 static void md5_init(md5_ctxt *);
-static void md5_loop(md5_ctxt *, const u_int8_t *, u_int);
+static void md5_loop(md5_ctxt *, const U8 *, u_int);
 static void md5_pad(md5_ctxt *);
-static void md5_result(u_int8_t *, md5_ctxt *);
+static void md5_result(U8 *, md5_ctxt *);
 
 /* compatibility */
 #define MD5_CTX                md5_ctxt
@@ -391,7 +391,7 @@ char * crypt_md5(const char *pw, const char *salt)
 #define MD5_D0 0x10325476
 
 /* Integer part of 4294967296 times abs(sin(i)), where i is in radians. */
-static const u_int32_t T[65] = {
+static const U32 T[65] = {
        0,
        0xd76aa478,     0xe8c7b756,     0x242070db,     0xc1bdceee,
        0xf57c0faf,     0x4787c62a,     0xa8304613,     0xfd469501,
@@ -414,7 +414,7 @@ static const u_int32_t T[65] = {
        0xf7537e82,     0xbd3af235,     0x2ad7d2bb,     0xeb86d391,
 };
 
-static const u_int8_t md5_paddat[MD5_BUFLEN] = {
+static const U8 md5_paddat[MD5_BUFLEN] = {
        0x80,   0,      0,      0,      0,      0,      0,      0,
        0,      0,      0,      0,      0,      0,      0,      0,
        0,      0,      0,      0,      0,      0,      0,      0,
@@ -425,7 +425,7 @@ static const u_int8_t md5_paddat[MD5_BUFLEN] = {
        0,      0,      0,      0,      0,      0,      0,      0,      
 };
 
-static void md5_calc(u_int8_t *, md5_ctxt *);
+static void md5_calc(U8 *, md5_ctxt *);
 
 static void md5_init(md5_ctxt *ctxt)
 {
@@ -438,7 +438,7 @@ static void md5_init(md5_ctxt *ctxt)
        bzero(ctxt->md5_buf, sizeof(ctxt->md5_buf));
 }
 
-static void md5_loop(md5_ctxt *ctxt, const u_int8_t *input, u_int len)
+static void md5_loop(md5_ctxt *ctxt, const U8 *input, u_int len)
 {
        u_int gap, i;
 
@@ -451,7 +451,7 @@ static void md5_loop(md5_ctxt *ctxt, const u_int8_t *input, u_int len)
                md5_calc(ctxt->md5_buf, ctxt);
 
                for (i = gap; i + MD5_BUFLEN <= len; i += MD5_BUFLEN) {
-                       md5_calc((u_int8_t *)(input + i), ctxt);
+                       md5_calc((U8 *)(input + i), ctxt);
                }
                
                ctxt->md5_i = len - i;
@@ -501,7 +501,7 @@ static void md5_pad(md5_ctxt *ctxt)
        md5_calc(ctxt->md5_buf, ctxt);
 }
 
-static void md5_result(u_int8_t *digest, md5_ctxt *ctxt)
+static void md5_result(U8 *digest, md5_ctxt *ctxt)
 {
        /* 4 byte words */
 #if BYTE_ORDER == LITTLE_ENDIAN
@@ -519,20 +519,20 @@ static void md5_result(u_int8_t *digest, md5_ctxt *ctxt)
 #endif
 }
 
-static void md5_calc(u_int8_t *b64, md5_ctxt *ctxt)
+static void md5_calc(U8 *b64, md5_ctxt *ctxt)
 {
-       u_int32_t A = ctxt->md5_sta;
-       u_int32_t B = ctxt->md5_stb;
-       u_int32_t C = ctxt->md5_stc;
-       u_int32_t D = ctxt->md5_std;
+       U32 A = ctxt->md5_sta;
+       U32 B = ctxt->md5_stb;
+       U32 C = ctxt->md5_stc;
+       U32 D = ctxt->md5_std;
 #if BYTE_ORDER == LITTLE_ENDIAN
-       u_int32_t *X = (u_int32_t *)b64;
+       U32 *X = (U32 *)b64;
 #endif 
 #if BYTE_ORDER == BIG_ENDIAN
-       u_int32_t X[16];
+       U32 X[16];
        /* 4 byte words */
        /* what a brute force but fast! */
-       u_int8_t *y = (u_int8_t *)X;
+       U8 *y = (U8 *)X;
        y[ 0] = b64[ 3]; y[ 1] = b64[ 2]; y[ 2] = b64[ 1]; y[ 3] = b64[ 0];
        y[ 4] = b64[ 7]; y[ 5] = b64[ 6]; y[ 6] = b64[ 5]; y[ 7] = b64[ 4];
        y[ 8] = b64[11]; y[ 9] = b64[10]; y[10] = b64[ 9]; y[11] = b64[ 8];
index 865ddbe..be18901 100644 (file)
@@ -20,7 +20,7 @@ main.o: main.c parser.tab.h parser.h
 mklib.o: mklib.c parser.tab.h parser.h
        $(C) mklib.c -o mklib.o
 
-parser: main.o tokenizer.yy.o ../librfxswf.a ../libbase.a parser.tab.h 
+parser: main.o tokenizer.yy.c ../librfxswf.a ../libbase.a parser.tab.h 
        $(L) main.o ../librfxswf.a ../libbase.a -o parser -lz
 
 rfxswf_modules=../drawer.o ../rfxswf.o ../modules/*.o ../lame/*.o ../action/*.o ../MD5.o $(MODULES)
index 35601cc..d0b4adf 100644 (file)
@@ -24,7 +24,7 @@
 #ifndef __as3_common_h__
 #define __as3_common_h__
 
-
+extern int as3_lex();
 extern int as3_verbosity;
 extern int as3_pass;
 #define syntaxerror as3_error
index 33491d3..7a6d32c 100644 (file)
@@ -2636,7 +2636,16 @@ exec: node_const_exec
 
 typedcode_t node_code_write(node_t*n)
 {
-    syntaxerror("not implemented yet");
+    typedcode_t t;
+    t.c = 0;
+    int tmp = gettempvar();
+    t.c = abc_setlocal(t.c, tmp);
+    code_t*w = toreadwrite(n->code.c, abc_getlocal(0,tmp), 1, 0, 0);
+    t.c = code_append(t.c, w);
+    t.c = abc_kill(t.c, tmp);
+    n->code.c=0;
+    t.t = n->code.t;
+    return t;
 }
 typedcode_t node_code_read(node_t*n)
 {
@@ -2822,6 +2831,12 @@ typedcode_t node_read(node_t*n)
         return t;
     }
 }
+typedcode_t node_write(node_t*n)
+{
+    typedcode_t t = n->type->write(n);
+    node_free(n);
+    return t;
+}
 code_t* node_exec(node_t*n)
 {
     code_t*c = n->type->exec(n);
index 2125872..d216c2c 100644 (file)
@@ -141,6 +141,7 @@ node_t* mknode2(nodetype_t*t, node_t*left, node_t*right);
 node_t* mknode3(nodetype_t*t, node_t*one, node_t*two, node_t*three);
 void node_free(node_t*n);
 typedcode_t node_read(node_t*n); //read and free
+typedcode_t node_write(node_t*n); //write and free
 code_t* node_exec(node_t*n); //exec and free
 constant_t node_eval(node_t*n); //eval and free
 void node_dump(node_t*n);
diff --git a/lib/as3/optimizations.txt b/lib/as3/optimizations.txt
new file mode 100644 (file)
index 0000000..4c37b9f
--- /dev/null
@@ -0,0 +1,19 @@
+* "push<anything>;pop" can be removed (if there's no jumppoint)
+* "push<anything>;coerce;pop" can be removed (if there's no jumppoint)
+* "getlocal_i;pop" can be removed
+* "goto next;next:" can be removed (if there's no jumppoint)
+* "setlocal_i;getlocal_i" can be changed to "dup;setlocal_i"
+* for a variable without any getlocal_i, all dup;setlocal_i can be removed
+* getlocal <i> can be changed to getlocal_i for i<4, same for setlocal
+* greater followed by iftrue can be reduced to ifgt
+* equals followed by iffalse can be reduced to ifne (etc.)
+* callproperty;(coerce);pop can changed to callpropvoid
+* label can be removed
+* "getlocal_i;setlocal_i" can be removed
+* "dup;xxx;pop" can be reduced to xxx (xxx=setlocal_i, setglobalslot, pushscope)
+* "getlocal_i;increment;setlocal_i" can be replaced by inclocal_i
+* [iffalse xx;jump yy;xx: -> iftrue yy]
+* a jump to a jump can be redirected
+* sort variable indices by usage
+* coerce*;returnvalue can be reduced to returnvalue
+* setlocal_i;getlocal_j;getlocal_i can be changed to dup;setlocal_i;getlocal_j,swap (makes it possible to remove i if not otherwise used)
index b5ee375..5e6b060 100644 (file)
@@ -1,21 +1,21 @@
 
-/* A Bison parser, made by GNU Bison 2.4.277-62c99-dirty.  */
+/* A Bison parser, made by GNU Bison 2.4.1.  */
 
 /* 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.277-62c99-dirty"
+#define YYBISON_VERSION "2.4.1"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "./skeleton.m4"
@@ -74,6 +74,7 @@
 
 
 /* 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 100 "parser.tab.c"
+#line 102 "parser.tab.c"
 
 /* Enabling traces.  */
 #ifndef YYDEBUG
-# define YYDEBUG b4_debug_flag
+# define YYDEBUG 0
 #endif
 
 /* Enabling verbose error messages.  */
@@ -108,7 +110,7 @@ extern int a3_lex();
 # undef YYERROR_VERBOSE
 # define YYERROR_VERBOSE 1
 #else
-# define YYERROR_VERBOSE b4_error_verbose_flag
+# define YYERROR_VERBOSE 1
 #endif
 
 /* Enabling the token table.  */
@@ -237,10 +239,12 @@ 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"
 
@@ -275,8 +279,9 @@ tokenunion
     } catch_list;
 
 
+
 /* Line 223 of skeleton.m4  */
-#line 280 "parser.tab.c"
+#line 285 "parser.tab.c"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -285,6 +290,7 @@ tokenunion
 
 
 /* Copy the second part of user declarations.  */
+
 /* Line 273 of skeleton.m4  */
 #line 276 "parser.y"
 
@@ -933,7 +939,7 @@ static namespace_t modifiers2access(modifiers_t*mod)
             syntaxerror("invalid combination of access levels and namespaces");
         ns.access = ACCESS_NAMESPACE;
         state_t*s = state;
-        const char*url = (const char*)trie_lookup(active_namespaces, mod->ns);
+        const char*url = (const char*)trie_lookup(active_namespaces, (unsigned char*)mod->ns);
         if(!url) {
             /* shouldn't happen- the tokenizer only reports something as a namespace
                if it was already registered */
@@ -1974,9 +1980,11 @@ code_t* insert_finally(code_t*c, code_t*finally, int tempvar)
 #define PASS_ALWAYS }} {{
 
 
+
 /* Line 273 of skeleton.m4  */
-#line 1979 "parser.tab.c"
+#line 1986 "parser.tab.c"
 /* Unqualified %code blocks.  */
+
 /* Line 274 of skeleton.m4  */
 #line 2077 "parser.y"
 
@@ -1993,6 +2001,7 @@ code_t* insert_finally(code_t*c, code_t*finally, int tempvar)
         return 1;
     }
 
+
 /* Line 274 of skeleton.m4  */
 #line 2528 "parser.y"
 
@@ -2015,6 +2024,7 @@ code_t* insert_finally(code_t*c, code_t*finally, int tempvar)
         free(s);
     }
 
+
 /* Line 274 of skeleton.m4  */
 #line 2667 "parser.y"
 
@@ -2076,14 +2086,24 @@ 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 2847 "parser.y"
 
     static int xml_level = 0;
 
+
 /* Line 274 of skeleton.m4  */
 #line 3655 "parser.y"
 
+    node_t* var_read(variable_t*v)
+    {
+        typedcode_t o;
+       o.c = abc_getlocal(0, v->index);
+       o.t = v->type;
+       return mkcodenode(o);
+    }
+
     node_t* resolve_identifier(char*name)
     {
         typedcode_t o;
@@ -2097,9 +2117,7 @@ code_t* insert_finally(code_t*c, code_t*finally, int tempvar)
         /* look at variables */
         if((v = find_variable(state, name))) {
             // name is a local variable
-            o.c = abc_getlocal(o.c, v->index);
-            o.t = v->type;
-            return mkcodenode(o);
+           return var_read(v);
         }
         if((v = find_slot(state->method, name))) {
             o.c = abc_getscopeobject(o.c, 1);
@@ -2197,8 +2215,9 @@ code_t* insert_finally(code_t*c, code_t*finally, int tempvar)
         }
     }
 
+
 /* Line 274 of skeleton.m4  */
-#line 3795 "parser.y"
+#line 3801 "parser.y"
 
     void add_active_url(const char*url)
     {
@@ -2208,8 +2227,9 @@ code_t* insert_finally(code_t*c, code_t*finally, int tempvar)
     }
 
 
+
 /* Line 274 of skeleton.m4  */
-#line 2213 "parser.tab.c"
+#line 2233 "parser.tab.c"
 
 #ifdef short
 # undef short
@@ -2487,15 +2507,157 @@ static const yytype_uint8 yytranslate[] =
 #if YYDEBUG
 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
    YYRHS.  */
-static const int yyprhs[] =
+static const yytype_uint16 yyprhs[] =
 {
-  b4_prhs
+       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
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
-static const int yyrhs[] =
+static const yytype_int16 yyrhs[] =
 {
-  b4_rhs
+     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
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -2535,8 +2697,8 @@ static const yytype_uint16 yyrline[] =
     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
+    3519,  3537,  3544,  3555,  3562,  3569,  3579,  3590,  3776,  3810,
+    3817,  3824,  3831,  3853,  3859
 };
 #endif
 
@@ -4151,6 +4313,7 @@ yydestruct (yymsg, yytype, yyvaluep)
 
   switch (yytype)
     {
+
       default:
        break;
     }
@@ -4158,15 +4321,13 @@ yydestruct (yymsg, yytype, yyvaluep)
 
 /* Prevent warnings from -Wmissing-prototypes.  */
 #ifdef YYPARSE_PARAM
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+#if defined __STDC__ || defined __cplusplus
 int yyparse (void *YYPARSE_PARAM);
 #else
 int yyparse ();
 #endif
 #else /* ! YYPARSE_PARAM */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
+#if defined __STDC__ || defined __cplusplus
 int yyparse (void);
 #else
 int yyparse ();
@@ -4455,6 +4616,7 @@ yyreduce:
         
     case 13:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 1980 "parser.y"
     {PASS_ALWAYS as3_pass=(yyvsp[(1) - (4)].number_int);}
@@ -4465,6 +4627,7 @@ yyreduce:
   
     case 24:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 1992 "parser.y"
     {PASS_ALWAYS as3_pass=(yyvsp[(1) - (4)].number_int);}
@@ -4475,6 +4638,7 @@ yyreduce:
   
     case 25:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 1993 "parser.y"
     {PASS_ALWAYS as3_pass=(yyvsp[(2) - (4)].number_int);PASS1 as3_warning("embed command ignored");}
@@ -4485,6 +4649,7 @@ yyreduce:
   
     case 27:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 1996 "parser.y"
     {(yyval.code)=(yyvsp[(1) - (1)].code);}
@@ -4495,6 +4660,7 @@ yyreduce:
   
     case 28:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 1997 "parser.y"
     {(yyval.code)=code_new();}
@@ -4505,6 +4671,7 @@ yyreduce:
   
     case 29:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 1999 "parser.y"
     {
@@ -4517,6 +4684,7 @@ yyreduce:
   
     case 30:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2002 "parser.y"
     {(yyval.code)=(yyvsp[(1) - (1)].code);}
@@ -4527,6 +4695,7 @@ yyreduce:
   
     case 44:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2018 "parser.y"
     {(yyval.code)=(yyvsp[(2) - (3)].code);}
@@ -4537,6 +4706,7 @@ yyreduce:
   
     case 45:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2019 "parser.y"
     {(yyval.code)=0;}
@@ -4547,6 +4717,7 @@ yyreduce:
   
     case 46:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2022 "parser.y"
     {(yyval.code)=0;}
@@ -4557,6 +4728,7 @@ yyreduce:
   
     case 53:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2029 "parser.y"
     {
@@ -4575,6 +4747,7 @@ yyreduce:
   
     case 54:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2041 "parser.y"
     {(yyval.code)=(yyvsp[(1) - (2)].code);}
@@ -4585,6 +4758,7 @@ yyreduce:
   
     case 55:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2042 "parser.y"
     {(yyval.code)=(yyvsp[(1) - (1)].code);}
@@ -4595,6 +4769,7 @@ yyreduce:
   
     case 56:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2046 "parser.y"
     {
@@ -4612,6 +4787,7 @@ yyreduce:
   
     case 57:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2057 "parser.y"
     {
@@ -4626,6 +4802,7 @@ yyreduce:
   
     case 58:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2065 "parser.y"
     {
@@ -4644,6 +4821,7 @@ yyreduce:
   
     case 59:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2092 "parser.y"
     {(yyval.node)=(yyvsp[(2) - (2)].node);}
@@ -4654,6 +4832,7 @@ yyreduce:
   
     case 60:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2093 "parser.y"
     {(yyval.node)=mkdummynode();}
@@ -4664,6 +4843,7 @@ yyreduce:
   
     case 61:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2095 "parser.y"
     {(yyval.code)=(yyvsp[(2) - (2)].code);}
@@ -4674,6 +4854,7 @@ yyreduce:
   
     case 62:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2096 "parser.y"
     {(yyval.code)=(yyvsp[(2) - (2)].code);}
@@ -4684,6 +4865,7 @@ yyreduce:
   
     case 63:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2098 "parser.y"
     {(yyval.code) = (yyvsp[(1) - (1)].code);}
@@ -4694,6 +4876,7 @@ yyreduce:
   
     case 64:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2099 "parser.y"
     {(yyval.code) = code_append((yyvsp[(1) - (3)].code), (yyvsp[(3) - (3)].code));}
@@ -4704,6 +4887,7 @@ yyreduce:
   
     case 65:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2102 "parser.y"
     {
@@ -4770,6 +4954,7 @@ PASS2
   
     case 66:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2162 "parser.y"
     {PASS12 new_state();}
@@ -4780,6 +4965,7 @@ PASS2
   
     case 67:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2162 "parser.y"
     {
@@ -4793,6 +4979,7 @@ PASS2
   
     case 68:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2166 "parser.y"
     {(yyval.code) = code_new();}
@@ -4803,6 +4990,7 @@ PASS2
   
     case 69:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2167 "parser.y"
     {(yyval.code)=(yyvsp[(2) - (2)].code);}
@@ -4813,6 +5001,7 @@ PASS2
   
     case 70:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2170 "parser.y"
     {
@@ -4837,6 +5026,7 @@ PASS2
   
     case 71:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2186 "parser.y"
     {(yyval.code)=code_new();}
@@ -4847,6 +5037,7 @@ PASS2
   
     case 74:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2193 "parser.y"
     {
@@ -4860,6 +5051,7 @@ PASS2
   
     case 75:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2197 "parser.y"
     {
@@ -4873,6 +5065,7 @@ PASS2
   
     case 76:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2202 "parser.y"
     {PASS12 new_state();(yyval.for_start).name=(yyvsp[(1) - (2)].id);(yyval.for_start).each=0;}
@@ -4883,6 +5076,7 @@ PASS2
   
     case 77:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2203 "parser.y"
     {PASS12 new_state();(yyval.for_start).name=(yyvsp[(1) - (3)].id);(yyval.for_start).each=1;}
@@ -4893,6 +5087,7 @@ PASS2
   
     case 78:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2205 "parser.y"
     {
@@ -4921,13 +5116,13 @@ PASS2
   
     case 79:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2225 "parser.y"
     {
-    variable_t*var = find_variable(state, (yyvsp[(2) - (6)].id));
-    if(!var) {
-        syntaxerror("variable %s not known in this scope", (yyvsp[(2) - (6)].id));
-    }
+    node_t*n = resolve_identifier((yyvsp[(2) - (6)].id));
+    typedcode_t w = node_write(n);
+    
     int it = alloc_local();
     int array = alloc_local();
 
@@ -4948,8 +5143,9 @@ PASS2
         (yyval.code) = abc_nextname((yyval.code));
     else
         (yyval.code) = abc_nextvalue((yyval.code));
-    (yyval.code) = converttype((yyval.code), 0, var->type);
-    (yyval.code) = abc_setlocal((yyval.code), var->index);
+
+    (yyval.code) = converttype((yyval.code), 0, w.t);
+    (yyval.code) = code_append((yyval.code), w.c);
 
     (yyval.code) = code_append((yyval.code), (yyvsp[(6) - (6)].code));
     (yyval.code) = abc_jump((yyval.code), loopstart);
@@ -4973,6 +5169,7 @@ PASS2
   
     case 80:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2269 "parser.y"
     {
@@ -4997,6 +5194,7 @@ PASS2
   
     case 81:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2285 "parser.y"
     {
@@ -5017,6 +5215,7 @@ PASS2
   
     case 82:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2297 "parser.y"
     {
@@ -5029,6 +5228,7 @@ PASS2
   
     case 83:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2300 "parser.y"
     {
@@ -5041,6 +5241,7 @@ PASS2
   
     case 84:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2303 "parser.y"
     {
@@ -5053,6 +5254,7 @@ PASS2
   
     case 85:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2306 "parser.y"
     {
@@ -5065,6 +5267,7 @@ PASS2
   
     case 86:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2310 "parser.y"
     {(yyval.code)=0;}
@@ -5075,6 +5278,7 @@ PASS2
   
     case 87:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2311 "parser.y"
     {(yyval.code)=(yyvsp[(1) - (1)].code);}
@@ -5085,6 +5289,7 @@ PASS2
   
     case 88:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2312 "parser.y"
     {(yyval.code)=(yyvsp[(1) - (1)].code);}
@@ -5095,6 +5300,7 @@ PASS2
   
     case 89:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2313 "parser.y"
     {(yyval.code)=code_append((yyvsp[(1) - (2)].code),(yyvsp[(2) - (2)].code));}
@@ -5105,6 +5311,7 @@ PASS2
   
     case 90:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2314 "parser.y"
     {(yyval.code)=(yyvsp[(1) - (1)].code);}
@@ -5115,6 +5322,7 @@ PASS2
   
     case 91:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2315 "parser.y"
     {(yyval.code)=code_append((yyval.code),(yyvsp[(2) - (2)].code));}
@@ -5125,6 +5333,7 @@ PASS2
   
     case 92:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2317 "parser.y"
     {
@@ -5145,6 +5354,7 @@ PASS2
   
     case 93:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2328 "parser.y"
     {
@@ -5157,6 +5367,7 @@ PASS2
   
     case 94:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2331 "parser.y"
     {PASS12 new_state();state->switch_var=alloc_local();}
@@ -5167,6 +5378,7 @@ PASS2
   
     case 95:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2331 "parser.y"
     {
@@ -5204,6 +5416,7 @@ PASS2
   
     case 96:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2362 "parser.y"
     {PASS12 new_state();
@@ -5218,6 +5431,7 @@ PASS2
   
     case 97:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2367 "parser.y"
     {
@@ -5247,6 +5461,7 @@ PASS2
   
     case 98:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2387 "parser.y"
     {PASS12 new_state();state->exception_name=0;}
@@ -5257,6 +5472,7 @@ PASS2
   
     case 99:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2387 "parser.y"
     {
@@ -5281,6 +5497,7 @@ PASS2
   
     case 100:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #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));}
@@ -5291,6 +5508,7 @@ PASS2
   
     case 101:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2404 "parser.y"
     {(yyval.catch_list)=(yyvsp[(1) - (2)].catch_list);list_append((yyval.catch_list).l,(yyvsp[(2) - (2)].exception));}
@@ -5301,6 +5519,7 @@ PASS2
   
     case 102:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2405 "parser.y"
     {(yyval.catch_list)=(yyvsp[(1) - (1)].catch_list);}
@@ -5311,6 +5530,7 @@ PASS2
   
     case 103:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2406 "parser.y"
     {
@@ -5328,6 +5548,7 @@ PASS2
   
     case 104:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2414 "parser.y"
     {
@@ -5345,6 +5566,7 @@ PASS2
   
     case 105:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2423 "parser.y"
     {PASS12 new_state();
@@ -5358,6 +5580,7 @@ PASS2
   
     case 106:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2426 "parser.y"
     {
@@ -5410,6 +5633,7 @@ PASS2
   
     case 107:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2472 "parser.y"
     {
@@ -5423,6 +5647,7 @@ PASS2
   
     case 108:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2476 "parser.y"
     {
@@ -5440,6 +5665,7 @@ PASS2
   
     case 109:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2487 "parser.y"
     {
@@ -5459,6 +5685,7 @@ PASS2
   
     case 110:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2497 "parser.y"
     {
@@ -5482,6 +5709,7 @@ PASS2
   
     case 112:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2515 "parser.y"
     {PASS12 (yyval.id)="package";}
@@ -5492,6 +5720,7 @@ PASS2
   
     case 113:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2516 "parser.y"
     {PASS12 (yyval.id)="namespace";}
@@ -5502,6 +5731,7 @@ PASS2
   
     case 114:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2517 "parser.y"
     {PASS12 (yyval.id)="NaN";}
@@ -5512,6 +5742,7 @@ PASS2
   
     case 115:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2518 "parser.y"
     {PASS12 (yyval.id)=(yyvsp[(1) - (1)].id);}
@@ -5522,6 +5753,7 @@ PASS2
   
     case 116:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #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;}
@@ -5532,6 +5764,7 @@ PASS2
   
     case 117:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2521 "parser.y"
     {PASS12 (yyval.id)=strdup((yyvsp[(1) - (1)].id));}
@@ -5542,6 +5775,7 @@ PASS2
   
     case 118:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2523 "parser.y"
     {PASS12 startpackage((yyvsp[(2) - (3)].id));free((yyvsp[(2) - (3)].id));(yyvsp[(2) - (3)].id)=0;}
@@ -5552,6 +5786,7 @@ PASS2
   
     case 119:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2524 "parser.y"
     {PASS12 endpackage();(yyval.code)=0;}
@@ -5562,6 +5797,7 @@ PASS2
   
     case 120:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2525 "parser.y"
     {PASS12 startpackage("");}
@@ -5572,6 +5808,7 @@ PASS2
   
     case 121:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2526 "parser.y"
     {PASS12 endpackage();(yyval.code)=0;}
@@ -5582,6 +5819,7 @@ PASS2
   
     case 122:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2549 "parser.y"
     {
@@ -5599,6 +5837,7 @@ PASS2
   
     case 123:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2557 "parser.y"
     {
@@ -5619,6 +5858,7 @@ PASS2
   
     case 124:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2568 "parser.y"
     {
@@ -5641,6 +5881,7 @@ PASS2
   
     case 125:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2584 "parser.y"
     {PASS12 (yyval.flags).flags=0;(yyval.flags).ns=0;}
@@ -5651,6 +5892,7 @@ PASS2
   
     case 126:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2585 "parser.y"
     {PASS12 (yyval.flags)=(yyvsp[(1) - (1)].flags);}
@@ -5661,6 +5903,7 @@ PASS2
   
     case 127:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2586 "parser.y"
     {PASS12 (yyval.flags)=(yyvsp[(1) - (1)].flags);}
@@ -5671,6 +5914,7 @@ PASS2
   
     case 128:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2587 "parser.y"
     {
@@ -5687,6 +5931,7 @@ PASS2
   
     case 129:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2594 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_PUBLIC;(yyval.flags).ns=0;}
@@ -5697,6 +5942,7 @@ PASS2
   
     case 130:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2595 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_PRIVATE;(yyval.flags).ns=0;}
@@ -5707,6 +5953,7 @@ PASS2
   
     case 131:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2596 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_PROTECTED;(yyval.flags).ns=0;}
@@ -5717,6 +5964,7 @@ PASS2
   
     case 132:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2597 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_STATIC;(yyval.flags).ns=0;}
@@ -5727,6 +5975,7 @@ PASS2
   
     case 133:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2598 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_DYNAMIC;(yyval.flags).ns=0;}
@@ -5737,6 +5986,7 @@ PASS2
   
     case 134:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2599 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_FINAL;(yyval.flags).ns=0;}
@@ -5747,6 +5997,7 @@ PASS2
   
     case 135:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2600 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_OVERRIDE;(yyval.flags).ns=0;}
@@ -5757,6 +6008,7 @@ PASS2
   
     case 136:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2601 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_NATIVE;(yyval.flags).ns=0;}
@@ -5767,6 +6019,7 @@ PASS2
   
     case 137:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2602 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_PACKAGEINTERNAL;(yyval.flags).ns=0;}
@@ -5777,6 +6030,7 @@ PASS2
   
     case 138:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2603 "parser.y"
     {PASS12 (yyval.flags).flags=FLAG_NAMESPACE;
@@ -5789,6 +6043,7 @@ PASS2
   
     case 139:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2607 "parser.y"
     {PASS12 (yyval.classinfo)=0;}
@@ -5799,6 +6054,7 @@ PASS2
   
     case 140:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2608 "parser.y"
     {PASS12 (yyval.classinfo)=(yyvsp[(2) - (2)].classinfo);}
@@ -5809,6 +6065,7 @@ PASS2
   
     case 141:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2610 "parser.y"
     {PASS12 (yyval.classinfo_list)=list_new();}
@@ -5819,6 +6076,7 @@ PASS2
   
     case 142:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2611 "parser.y"
     {PASS12 (yyval.classinfo_list)=(yyvsp[(2) - (2)].classinfo_list);}
@@ -5829,6 +6087,7 @@ PASS2
   
     case 143:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2613 "parser.y"
     {PASS12 (yyval.classinfo_list)=list_new();}
@@ -5839,6 +6098,7 @@ PASS2
   
     case 144:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2614 "parser.y"
     {PASS12 (yyval.classinfo_list)=(yyvsp[(2) - (2)].classinfo_list);}
@@ -5849,6 +6109,7 @@ PASS2
   
     case 145:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2618 "parser.y"
     {PASS12 startclass(&(yyvsp[(1) - (6)].flags),(yyvsp[(3) - (6)].id),(yyvsp[(4) - (6)].classinfo),(yyvsp[(5) - (6)].classinfo_list));}
@@ -5859,6 +6120,7 @@ PASS2
   
     case 146:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2620 "parser.y"
     {PASS12 endclass();(yyval.code)=0;}
@@ -5869,6 +6131,7 @@ PASS2
   
     case 147:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2624 "parser.y"
     {PASS12 (yyvsp[(1) - (5)].flags).flags|=FLAG_INTERFACE;
@@ -5880,6 +6143,7 @@ PASS2
   
     case 148:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2627 "parser.y"
     {PASS12 endclass();(yyval.code)=0;}
@@ -5890,6 +6154,7 @@ PASS2
   
     case 154:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2636 "parser.y"
     {PASS_ALWAYS as3_pass=(yyvsp[(1) - (4)].number_int);}
@@ -5900,6 +6165,7 @@ PASS2
   
     case 157:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2640 "parser.y"
     {
@@ -5914,6 +6180,7 @@ PASS2
   
     case 163:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2651 "parser.y"
     {
@@ -5926,6 +6193,7 @@ PASS2
   
     case 164:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2654 "parser.y"
     {
@@ -5945,6 +6213,7 @@ PASS2
   
     case 167:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2729 "parser.y"
     {PASS12 setslotstate(&(yyvsp[(1) - (2)].flags),(yyvsp[(2) - (2)].token));}
@@ -5955,6 +6224,7 @@ PASS2
   
     case 168:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2729 "parser.y"
     {PASS12 (yyval.code)=(yyvsp[(4) - (4)].code);setslotstate(0, 0);}
@@ -5965,6 +6235,7 @@ PASS2
   
     case 169:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2731 "parser.y"
     {PASS12 (yyval.code)=0;}
@@ -5975,6 +6246,7 @@ PASS2
   
     case 170:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2732 "parser.y"
     {PASS12 (yyval.code)=0;}
@@ -5985,6 +6257,7 @@ PASS2
   
     case 171:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2735 "parser.y"
     {
@@ -6074,6 +6347,7 @@ PASS12
   
     case 172:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2818 "parser.y"
     {(yyval.constant)=0;}
@@ -6084,6 +6358,7 @@ PASS12
   
     case 173:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2819 "parser.y"
     {
@@ -6100,6 +6375,7 @@ PASS12
   
     case 174:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2828 "parser.y"
     {(yyval.constant) = constant_new_int((yyvsp[(1) - (1)].number_int));}
@@ -6110,6 +6386,7 @@ PASS12
   
     case 175:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2829 "parser.y"
     {
@@ -6122,6 +6399,7 @@ PASS12
   
     case 176:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2832 "parser.y"
     {(yyval.constant) = constant_new_float((yyvsp[(1) - (1)].number_float));}
@@ -6132,6 +6410,7 @@ PASS12
   
     case 177:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #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);}
@@ -6142,6 +6421,7 @@ PASS12
   
     case 178:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2834 "parser.y"
     {(yyval.constant) = constant_new_true((yyvsp[(1) - (1)].token));}
@@ -6152,6 +6432,7 @@ PASS12
   
     case 179:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2835 "parser.y"
     {(yyval.constant) = constant_new_false((yyvsp[(1) - (1)].token));}
@@ -6162,6 +6443,7 @@ PASS12
   
     case 180:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2836 "parser.y"
     {(yyval.constant) = constant_new_null((yyvsp[(1) - (1)].token));}
@@ -6172,6 +6454,7 @@ PASS12
   
     case 181:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2837 "parser.y"
     {(yyval.constant) = constant_new_undefined((yyvsp[(1) - (1)].token));}
@@ -6182,6 +6465,7 @@ PASS12
   
     case 182:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2838 "parser.y"
     {(yyval.constant) = constant_new_float(__builtin_nan(""));}
@@ -6192,6 +6476,7 @@ PASS12
   
     case 183:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2851 "parser.y"
     {
@@ -6211,6 +6496,7 @@ PASS12
   
     case 184:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2862 "parser.y"
     {PASS_ALWAYS if(!xml_level++) tokenizer_begin_xml();}
@@ -6221,6 +6507,7 @@ PASS12
   
     case 185:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2863 "parser.y"
     {PASS_ALWAYS tokenizer_begin_xmltext();}
@@ -6231,6 +6518,7 @@ PASS12
   
     case 186:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2864 "parser.y"
     {PASS_ALWAYS if(!--xml_level) tokenizer_end_xml(); else tokenizer_begin_xmltext();}
@@ -6241,6 +6529,7 @@ PASS12
   
     case 187:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2866 "parser.y"
     {PASS_ALWAYS tokenizer_begin_xmltext();}
@@ -6251,6 +6540,7 @@ PASS12
   
     case 188:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2866 "parser.y"
     {
@@ -6263,6 +6553,7 @@ PASS12
   
     case 189:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2869 "parser.y"
     {PASS_ALWAYS tokenizer_begin_xml();}
@@ -6273,6 +6564,7 @@ PASS12
   
     case 190:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2869 "parser.y"
     {
@@ -6285,6 +6577,7 @@ PASS12
   
     case 191:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2872 "parser.y"
     {(yyval.node)=mkstringnode("");}
@@ -6295,6 +6588,7 @@ PASS12
   
     case 192:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2873 "parser.y"
     {
@@ -6307,6 +6601,7 @@ PASS12
   
     case 193:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2876 "parser.y"
     {
@@ -6321,6 +6616,7 @@ PASS12
   
     case 194:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2881 "parser.y"
     {
@@ -6333,6 +6629,7 @@ PASS12
   
     case 195:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2884 "parser.y"
     {
@@ -6345,6 +6642,7 @@ PASS12
   
     case 196:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2887 "parser.y"
     {
@@ -6357,6 +6655,7 @@ PASS12
   
     case 197:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2890 "parser.y"
     {
@@ -6369,6 +6668,7 @@ PASS12
   
     case 198:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2893 "parser.y"
     {
@@ -6381,6 +6681,7 @@ PASS12
   
     case 199:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2897 "parser.y"
     {
@@ -6393,6 +6694,7 @@ PASS12
   
     case 200:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2900 "parser.y"
     {
@@ -6405,6 +6707,7 @@ PASS12
   
     case 201:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2904 "parser.y"
     {
@@ -6418,6 +6721,7 @@ PASS12
   
     case 202:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2908 "parser.y"
     {
@@ -6432,6 +6736,7 @@ PASS12
   
     case 203:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2913 "parser.y"
     {
@@ -6446,6 +6751,7 @@ PASS12
   
     case 204:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2919 "parser.y"
     {
@@ -6458,6 +6764,7 @@ PASS12
   
     case 205:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2922 "parser.y"
     {
@@ -6470,6 +6777,7 @@ PASS12
   
     case 206:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2925 "parser.y"
     {
@@ -6482,6 +6790,7 @@ PASS12
   
     case 207:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2928 "parser.y"
     {
@@ -6496,6 +6805,7 @@ PASS12
   
     case 208:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2933 "parser.y"
     {
@@ -6508,6 +6818,7 @@ PASS12
   
     case 209:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2936 "parser.y"
     {
@@ -6520,6 +6831,7 @@ PASS12
   
     case 210:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2939 "parser.y"
     {
@@ -6535,6 +6847,7 @@ PASS12
   
     case 211:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2949 "parser.y"
     {
@@ -6548,6 +6861,7 @@ PASS12
   
     case 212:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2953 "parser.y"
     {
@@ -6561,6 +6875,7 @@ PASS12
   
     case 213:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2959 "parser.y"
     {
@@ -6576,6 +6891,7 @@ PASS12
   
     case 214:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2965 "parser.y"
     {
@@ -6591,6 +6907,7 @@ PASS12
   
     case 215:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2973 "parser.y"
     {
@@ -6605,6 +6922,7 @@ PASS12
   
     case 216:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2978 "parser.y"
     {
@@ -6619,6 +6937,7 @@ PASS12
   
     case 217:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2984 "parser.y"
     {
@@ -6636,6 +6955,7 @@ PASS12
   
     case 218:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 2992 "parser.y"
     {
@@ -6653,6 +6973,7 @@ PASS12
   
     case 221:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3002 "parser.y"
     {PASS12 (yyval.token)=0;}
@@ -6663,6 +6984,7 @@ PASS12
   
     case 222:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #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));}
@@ -6673,6 +6995,7 @@ PASS12
   
     case 223:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3006 "parser.y"
     {
@@ -6696,6 +7019,7 @@ PASS12
   
     case 225:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3022 "parser.y"
     {PASS12 (yyval.id)=0;}
@@ -6706,6 +7030,7 @@ PASS12
   
     case 226:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3024 "parser.y"
     {PASS12 innerfunction((yyvsp[(2) - (7)].id),&(yyvsp[(4) - (7)].params),(yyvsp[(6) - (7)].classinfo));}
@@ -6716,6 +7041,7 @@ PASS12
   
     case 227:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3025 "parser.y"
     {
@@ -6743,6 +7069,7 @@ PASS12
   
     case 228:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3047 "parser.y"
     {
@@ -6770,6 +7097,7 @@ PASS12
   
     case 229:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3066 "parser.y"
     {
@@ -6792,6 +7120,7 @@ PASS12
   
     case 232:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3083 "parser.y"
     {PASS12 (yyval.classinfo_list)=list_new();list_append((yyval.classinfo_list), (yyvsp[(1) - (1)].classinfo));}
@@ -6802,6 +7131,7 @@ PASS12
   
     case 233:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3084 "parser.y"
     {PASS12 (yyval.classinfo_list)=(yyvsp[(1) - (3)].classinfo_list);list_append((yyval.classinfo_list),(yyvsp[(3) - (3)].classinfo));}
@@ -6812,6 +7142,7 @@ PASS12
   
     case 234:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3086 "parser.y"
     {PASS12 (yyval.classinfo)=(yyvsp[(1) - (1)].classinfo);}
@@ -6822,6 +7153,7 @@ PASS12
   
     case 235:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3087 "parser.y"
     {PASS12 (yyval.classinfo)=TYPE_ANY;}
@@ -6832,6 +7164,7 @@ PASS12
   
     case 236:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3088 "parser.y"
     {PASS12 (yyval.classinfo)=TYPE_VOID;}
@@ -6842,6 +7175,7 @@ PASS12
   
     case 237:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3097 "parser.y"
     {PASS12 (yyval.classinfo)=(yyvsp[(2) - (2)].classinfo);}
@@ -6852,6 +7186,7 @@ PASS12
   
     case 238:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3098 "parser.y"
     {PASS12 (yyval.classinfo)=0;}
@@ -6862,6 +7197,7 @@ PASS12
   
     case 239:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3102 "parser.y"
     {(yyval.value_list).cc=0;(yyval.value_list).number=0;}
@@ -6872,6 +7208,7 @@ PASS12
   
     case 240:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3103 "parser.y"
     {(yyval.value_list)=(yyvsp[(2) - (3)].value_list);}
@@ -6882,6 +7219,7 @@ PASS12
   
     case 241:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3105 "parser.y"
     {(yyval.value_list).cc=0;(yyval.value_list).number=0;}
@@ -6892,6 +7230,7 @@ PASS12
   
     case 244:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3109 "parser.y"
     {(yyval.value_list).number=1;
@@ -6904,6 +7243,7 @@ PASS12
   
     case 245:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3113 "parser.y"
     {(yyval.value_list) = (yyvsp[(1) - (2)].value_list);}
@@ -6914,6 +7254,7 @@ PASS12
   
     case 246:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3114 "parser.y"
     {
@@ -6927,6 +7268,7 @@ PASS12
   
     case 248:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3120 "parser.y"
     {
@@ -6978,6 +7320,7 @@ PASS12
   
     case 249:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3167 "parser.y"
     {
@@ -7036,6 +7379,7 @@ PASS12
   
     case 250:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3217 "parser.y"
     {
@@ -7065,6 +7409,7 @@ PASS12
   
     case 251:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3238 "parser.y"
     {
@@ -7095,6 +7440,7 @@ PASS12
   
     case 252:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3260 "parser.y"
     {
@@ -7107,6 +7453,7 @@ PASS12
   
     case 253:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3263 "parser.y"
     {
@@ -7120,6 +7467,7 @@ PASS12
   
     case 254:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3270 "parser.y"
     {
@@ -7132,6 +7480,7 @@ PASS12
   
     case 255:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3273 "parser.y"
     {
@@ -7144,6 +7493,7 @@ PASS12
   
     case 256:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3276 "parser.y"
     {
@@ -7156,6 +7506,7 @@ PASS12
   
     case 257:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3279 "parser.y"
     {
@@ -7168,6 +7519,7 @@ PASS12
   
     case 258:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3282 "parser.y"
     { 
@@ -7180,6 +7532,7 @@ PASS12
   
     case 259:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3285 "parser.y"
     { 
@@ -7193,6 +7546,7 @@ PASS12
   
     case 260:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3290 "parser.y"
     {(yyval.value_list).cc=0;(yyval.value_list).number=0;}
@@ -7203,6 +7557,7 @@ PASS12
   
     case 261:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3291 "parser.y"
     {(yyval.value_list)=(yyvsp[(1) - (1)].value_list);}
@@ -7213,6 +7568,7 @@ PASS12
   
     case 262:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3293 "parser.y"
     {(yyval.code)=abc_pushstring(0,(yyvsp[(1) - (1)].id));}
@@ -7223,6 +7579,7 @@ PASS12
   
     case 263:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3294 "parser.y"
     {(yyval.code)=abc_pushstring2(0,&(yyvsp[(1) - (1)].str));}
@@ -7233,6 +7590,7 @@ PASS12
   
     case 264:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3295 "parser.y"
     {syntaxerror("dictionary keys must be strings");}
@@ -7243,6 +7601,7 @@ PASS12
   
     case 265:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3296 "parser.y"
     {syntaxerror("dictionary keys must be strings");}
@@ -7253,6 +7612,7 @@ PASS12
   
     case 266:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3297 "parser.y"
     {syntaxerror("dictionary keys must be strings");}
@@ -7263,6 +7623,7 @@ PASS12
   
     case 267:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3299 "parser.y"
     {
@@ -7278,6 +7639,7 @@ PASS12
   
     case 268:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3305 "parser.y"
     {
@@ -7293,6 +7655,7 @@ PASS12
   
     case 269:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3314 "parser.y"
     {(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));}
@@ -7303,6 +7666,7 @@ PASS12
   
     case 270:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3315 "parser.y"
     {(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));}
@@ -7313,6 +7677,7 @@ PASS12
   
     case 271:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3316 "parser.y"
     {(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));}
@@ -7323,6 +7688,7 @@ PASS12
   
     case 272:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3317 "parser.y"
     {(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));}
@@ -7333,6 +7699,7 @@ PASS12
   
     case 273:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3318 "parser.y"
     {(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));}
@@ -7343,6 +7710,7 @@ PASS12
   
     case 274:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3319 "parser.y"
     {(yyval.node) = (yyvsp[(1) - (1)].node);}
@@ -7353,6 +7721,7 @@ PASS12
   
     case 275:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3321 "parser.y"
     { 
@@ -7365,6 +7734,7 @@ PASS12
   
     case 276:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3325 "parser.y"
     {
@@ -7377,6 +7747,7 @@ PASS12
   
     case 277:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3330 "parser.y"
     {
@@ -7403,6 +7774,7 @@ PASS12
   
     case 278:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3348 "parser.y"
     {
@@ -7421,6 +7793,7 @@ PASS12
   
     case 279:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3359 "parser.y"
     {
@@ -7438,6 +7811,7 @@ PASS12
   
     case 280:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3369 "parser.y"
     {
@@ -7455,6 +7829,7 @@ PASS12
   
     case 281:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3378 "parser.y"
     {(yyval.node) = mknode2(&node_lt,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
@@ -7465,6 +7840,7 @@ PASS12
   
     case 282:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3379 "parser.y"
     {(yyval.node) = mknode2(&node_gt,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
@@ -7475,6 +7851,7 @@ PASS12
   
     case 283:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3380 "parser.y"
     {(yyval.node) = mknode2(&node_le,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
@@ -7485,6 +7862,7 @@ PASS12
   
     case 284:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3381 "parser.y"
     {(yyval.node) = mknode2(&node_ge,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
@@ -7495,6 +7873,7 @@ PASS12
   
     case 285:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3382 "parser.y"
     {(yyval.node) = mknode2(&node_eqeq,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
@@ -7505,6 +7884,7 @@ PASS12
   
     case 286:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3383 "parser.y"
     {(yyval.node) = mknode2(&node_eqeqeq,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
@@ -7515,6 +7895,7 @@ PASS12
   
     case 287:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3384 "parser.y"
     {(yyval.node) = mknode2(&node_noteqeq,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
@@ -7525,6 +7906,7 @@ PASS12
   
     case 288:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3385 "parser.y"
     {(yyval.node) = mknode2(&node_noteq,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
@@ -7535,6 +7917,7 @@ PASS12
   
     case 289:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3386 "parser.y"
     {(yyval.node) = mknode2(&node_oror,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
@@ -7545,6 +7928,7 @@ PASS12
   
     case 290:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3387 "parser.y"
     {(yyval.node) = mknode2(&node_andand,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
@@ -7555,6 +7939,7 @@ PASS12
   
     case 291:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3388 "parser.y"
     {(yyval.node) = mknode1(&node_not, (yyvsp[(2) - (2)].node));}
@@ -7565,6 +7950,7 @@ PASS12
   
     case 292:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3389 "parser.y"
     {(yyval.node) = mknode1(&node_bitnot, (yyvsp[(2) - (2)].node));}
@@ -7575,6 +7961,7 @@ PASS12
   
     case 293:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3390 "parser.y"
     {(yyval.node) = mknode2(&node_bitand, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
@@ -7585,6 +7972,7 @@ PASS12
   
     case 294:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3391 "parser.y"
     {(yyval.node) = mknode2(&node_bitxor, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
@@ -7595,6 +7983,7 @@ PASS12
   
     case 295:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3392 "parser.y"
     {(yyval.node) = mknode2(&node_bitor, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
@@ -7605,6 +7994,7 @@ PASS12
   
     case 296:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3393 "parser.y"
     {(yyval.node) = mknode2(&node_shr, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
@@ -7615,6 +8005,7 @@ PASS12
   
     case 297:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3394 "parser.y"
     {(yyval.node) = mknode2(&node_ushr, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
@@ -7625,6 +8016,7 @@ PASS12
   
     case 298:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3395 "parser.y"
     {(yyval.node) = mknode2(&node_shl, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
@@ -7635,6 +8027,7 @@ PASS12
   
     case 299:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3396 "parser.y"
     {(yyval.node) = mknode2(&node_div, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
@@ -7645,6 +8038,7 @@ PASS12
   
     case 300:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3397 "parser.y"
     {(yyval.node) = mknode2(&node_mod, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
@@ -7655,6 +8049,7 @@ PASS12
   
     case 301:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3398 "parser.y"
     {(yyval.node) = mknode2(&node_plus, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
@@ -7665,6 +8060,7 @@ PASS12
   
     case 302:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3399 "parser.y"
     {(yyval.node) = mknode2(&node_minus, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
@@ -7675,6 +8071,7 @@ PASS12
   
     case 303:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3400 "parser.y"
     {(yyval.node) = mknode2(&node_multiply, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
@@ -7685,6 +8082,7 @@ PASS12
   
     case 304:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3401 "parser.y"
     {(yyval.node) = mknode2(&node_in, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
@@ -7695,6 +8093,7 @@ PASS12
   
     case 305:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3402 "parser.y"
     {(yyval.node) = mknode2(&node_as, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
@@ -7705,6 +8104,7 @@ PASS12
   
     case 306:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3403 "parser.y"
     {(yyval.node) = mknode2(&node_instanceof, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
@@ -7715,6 +8115,7 @@ PASS12
   
     case 307:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3404 "parser.y"
     {(yyval.node) = mknode2(&node_is, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
@@ -7725,6 +8126,7 @@ PASS12
   
     case 308:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3405 "parser.y"
     {(yyval.node) = mknode1(&node_typeof, (yyvsp[(2) - (2)].node));}
@@ -7735,6 +8137,7 @@ PASS12
   
     case 309:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3406 "parser.y"
     {(yyval.node) = mknode1(&node_void, (yyvsp[(2) - (2)].node));}
@@ -7745,6 +8148,7 @@ PASS12
   
     case 310:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3407 "parser.y"
     { (yyval.node) = mkconstnode(constant_new_undefined());}
@@ -7755,6 +8159,7 @@ PASS12
   
     case 311:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3408 "parser.y"
     { (yyval.node)=(yyvsp[(2) - (3)].node);}
@@ -7765,6 +8170,7 @@ PASS12
   
     case 312:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3409 "parser.y"
     {(yyval.node) = mknode1(&node_neg, (yyvsp[(2) - (2)].node));}
@@ -7775,6 +8181,7 @@ PASS12
   
     case 313:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3410 "parser.y"
     {(yyval.node) = mknode2(&node_arraylookup, (yyvsp[(1) - (4)].node),(yyvsp[(3) - (4)].node));}
@@ -7785,6 +8192,7 @@ PASS12
   
     case 314:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3411 "parser.y"
     {(yyval.node) = mknode2(&node_muleq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
@@ -7795,6 +8203,7 @@ PASS12
   
     case 315:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3412 "parser.y"
     {(yyval.node) = mknode2(&node_modeq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
@@ -7805,6 +8214,7 @@ PASS12
   
     case 316:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3413 "parser.y"
     {(yyval.node) = mknode2(&node_shleq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
@@ -7815,6 +8225,7 @@ PASS12
   
     case 317:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3414 "parser.y"
     {(yyval.node) = mknode2(&node_shreq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
@@ -7825,6 +8236,7 @@ PASS12
   
     case 318:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3415 "parser.y"
     {(yyval.node) = mknode2(&node_ushreq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
@@ -7835,6 +8247,7 @@ PASS12
   
     case 319:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3416 "parser.y"
     { (yyval.node) = mknode2(&node_diveq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
@@ -7845,6 +8258,7 @@ PASS12
   
     case 320:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3417 "parser.y"
     { (yyval.node) = mknode2(&node_bitoreq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
@@ -7855,6 +8269,7 @@ PASS12
   
     case 321:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3418 "parser.y"
     { (yyval.node) = mknode2(&node_bitxoreq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
@@ -7865,6 +8280,7 @@ PASS12
   
     case 322:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3419 "parser.y"
     { (yyval.node) = mknode2(&node_bitandeq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
@@ -7875,6 +8291,7 @@ PASS12
   
     case 323:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3420 "parser.y"
     { (yyval.node) = mknode2(&node_pluseq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
@@ -7885,6 +8302,7 @@ PASS12
   
     case 324:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3421 "parser.y"
     { (yyval.node) = mknode2(&node_minuseq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
@@ -7895,6 +8313,7 @@ PASS12
   
     case 325:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3422 "parser.y"
     { (yyval.node) = mknode2(&node_assign, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
@@ -7905,6 +8324,7 @@ PASS12
   
     case 326:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3423 "parser.y"
     { (yyval.node) = mknode3(&node_tenary, (yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node));}
@@ -7915,6 +8335,7 @@ PASS12
   
     case 327:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3425 "parser.y"
     { (yyval.node) = mknode1(&node_rplusplus, (yyvsp[(1) - (2)].node));}
@@ -7925,6 +8346,7 @@ PASS12
   
     case 328:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3426 "parser.y"
     { (yyval.node) = mknode1(&node_rminusminus, (yyvsp[(1) - (2)].node));}
@@ -7935,6 +8357,7 @@ PASS12
   
     case 329:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3427 "parser.y"
     {(yyval.node) = mknode1(&node_lplusplus, (yyvsp[(2) - (2)].node)); }
@@ -7945,6 +8368,7 @@ PASS12
   
     case 330:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3428 "parser.y"
     {(yyval.node) = mknode1(&node_lminusminus, (yyvsp[(2) - (2)].node)); }
@@ -7955,6 +8379,7 @@ PASS12
   
     case 331:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3431 "parser.y"
     { if(!state->cls->info)
@@ -7977,6 +8402,7 @@ PASS12
   
     case 332:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3445 "parser.y"
     {
@@ -7993,6 +8419,7 @@ PASS12
   
     case 333:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3453 "parser.y"
     {PASS12 new_state();state->xmlfilter=1;}
@@ -8003,6 +8430,7 @@ PASS12
   
     case 334:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3453 "parser.y"
     {
@@ -8065,6 +8493,7 @@ PASS12
   
     case 335:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3507 "parser.y"
     {(yyval.id)=(yyvsp[(1) - (1)].id);}
@@ -8075,6 +8504,7 @@ PASS12
   
     case 336:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3508 "parser.y"
     {(yyval.id)="*";}
@@ -8085,6 +8515,7 @@ PASS12
   
     case 337:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3509 "parser.y"
     {(yyval.id)=(char*)(yyvsp[(1) - (1)].id);}
@@ -8095,6 +8526,7 @@ PASS12
   
     case 339:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3511 "parser.y"
     {(yyval.id)="*";}
@@ -8105,6 +8537,7 @@ PASS12
   
     case 340:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3519 "parser.y"
     {
@@ -8132,6 +8565,7 @@ PASS12
   
     case 341:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3537 "parser.y"
     {
@@ -8148,6 +8582,7 @@ PASS12
   
     case 342:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3544 "parser.y"
     {
@@ -8167,6 +8602,7 @@ PASS12
   
     case 343:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3555 "parser.y"
     {
@@ -8183,6 +8619,7 @@ PASS12
   
     case 344:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3562 "parser.y"
     {
@@ -8199,6 +8636,7 @@ PASS12
   
     case 345:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3569 "parser.y"
     {
@@ -8218,6 +8656,7 @@ PASS12
   
     case 346:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3579 "parser.y"
     {
@@ -8237,6 +8676,7 @@ PASS12
   
     case 347:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
 #line 3590 "parser.y"
     {
@@ -8310,8 +8750,9 @@ PASS12
   
     case 348:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
-#line 3770 "parser.y"
+#line 3776 "parser.y"
     {
     PASS1
     /* Queue unresolved identifiers for checking against the parent
@@ -8341,8 +8782,9 @@ PASS12
   
     case 349:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
-#line 3804 "parser.y"
+#line 3810 "parser.y"
     {
     PASS12
     NEW(namespace_decl_t,n);
@@ -8357,8 +8799,9 @@ PASS12
   
     case 350:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
-#line 3811 "parser.y"
+#line 3817 "parser.y"
     {
     PASS12
     NEW(namespace_decl_t,n);
@@ -8373,8 +8816,9 @@ PASS12
   
     case 351:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
-#line 3818 "parser.y"
+#line 3824 "parser.y"
     {
     PASS12
     NEW(namespace_decl_t,n);
@@ -8389,11 +8833,12 @@ PASS12
   
     case 352:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
-#line 3825 "parser.y"
+#line 3831 "parser.y"
     {
     PASS12
-    trie_put(active_namespaces, (yyvsp[(2) - (2)].namespace_decl)->name, (void*)(yyvsp[(2) - (2)].namespace_decl)->url);
+    trie_put(active_namespaces, (unsigned char*)(yyvsp[(2) - (2)].namespace_decl)->name, (void*)(yyvsp[(2) - (2)].namespace_decl)->url);
 
     namespace_t access = modifiers2access(&(yyvsp[(1) - (2)].flags));
     varinfo_t* var = varinfo_register_global(access.access, state->package, (yyvsp[(2) - (2)].namespace_decl)->name);
@@ -8419,8 +8864,9 @@ PASS12
   
     case 353:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
-#line 3848 "parser.y"
+#line 3854 "parser.y"
     {
     as3_warning("default xml namespaces not supported yet");
     (yyval.code) = 0;
@@ -8432,8 +8878,9 @@ PASS12
   
     case 354:
     if(as3_pass==2) {
+
 /* Line 1464 of skeleton.m4  */
-#line 3853 "parser.y"
+#line 3859 "parser.y"
     {
     PASS12
     const char*url = (yyvsp[(3) - (3)].classinfo)->name;
@@ -8451,7 +8898,7 @@ PASS12
         syntaxerror("%s.%s is not a namespace", (yyvsp[(3) - (3)].classinfo)->package, (yyvsp[(3) - (3)].classinfo)->name);
     url = s->value->ns->name;
 
-    trie_put(active_namespaces, (yyvsp[(3) - (3)].classinfo)->name, (void*)url);
+    trie_put(active_namespaces, (unsigned char*)(yyvsp[(3) - (3)].classinfo)->name, (void*)url);
     add_active_url(url);
     (yyval.code)=0;
 }
@@ -8460,8 +8907,9 @@ PASS12
 
 
 
+
 /* Line 1464 of skeleton.m4  */
-#line 8465 "parser.tab.c"
+#line 8913 "parser.tab.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
index 99a8fcb..d90479f 100644 (file)
@@ -1,21 +1,21 @@
 
-/* A Bison parser, made by GNU Bison 2.4.277-62c99-dirty.  */
+/* A Bison parser, made by GNU Bison 2.4.1.  */
 
 /* Skeleton interface 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.  */
 
 
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union /* Line 1685 of skeleton.m4  */
+typedef union 
+/* Line 1685 of skeleton.m4  */
 #line 47 "parser.y"
 tokenunion
 {
+
 /* Line 1685 of skeleton.m4  */
 #line 47 "parser.y"
 
@@ -191,8 +193,9 @@ tokenunion
     } catch_list;
 
 
+
 /* Line 1685 of skeleton.m4  */
-#line 196 "parser.tab.h"
+#line 199 "parser.tab.h"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
index b377ba2..e93f73b 100644 (file)
@@ -919,7 +919,7 @@ static namespace_t modifiers2access(modifiers_t*mod)
             syntaxerror("invalid combination of access levels and namespaces");
         ns.access = ACCESS_NAMESPACE;
         state_t*s = state;
-        const char*url = (const char*)trie_lookup(active_namespaces, mod->ns);
+        const char*url = (const char*)trie_lookup(active_namespaces, (unsigned char*)mod->ns);
         if(!url) {
             /* shouldn't happen- the tokenizer only reports something as a namespace
                if it was already registered */
@@ -2223,10 +2223,9 @@ FOR : FOR_START FOR_INIT ';' EXPRESSION ';' VOIDEXPRESSION ')' IF_CODEBLOCK {
 }
 
 FOR_IN : FOR_START FOR_IN_INIT "in" EXPRESSION ')' IF_CODEBLOCK {
-    variable_t*var = find_variable(state, $2);
-    if(!var) {
-        syntaxerror("variable %s not known in this scope", $2);
-    }
+    node_t*n = resolve_identifier($2);
+    typedcode_t w = node_write(n);
+    
     int it = alloc_local();
     int array = alloc_local();
 
@@ -2247,8 +2246,9 @@ FOR_IN : FOR_START FOR_IN_INIT "in" EXPRESSION ')' IF_CODEBLOCK {
         $$ = abc_nextname($$);
     else
         $$ = abc_nextvalue($$);
-    $$ = converttype($$, 0, var->type);
-    $$ = abc_setlocal($$, var->index);
+
+    $$ = converttype($$, 0, w.t);
+    $$ = code_append($$, w.c);
 
     $$ = code_append($$, $6);
     $$ = abc_jump($$, loopstart);
@@ -3653,6 +3653,14 @@ MEMBER : E '.' SUBNODE {
 }
 
 %code {
+    node_t* var_read(variable_t*v)
+    {
+        typedcode_t o;
+       o.c = abc_getlocal(0, v->index);
+       o.t = v->type;
+       return mkcodenode(o);
+    }
+
     node_t* resolve_identifier(char*name)
     {
         typedcode_t o;
@@ -3666,9 +3674,7 @@ MEMBER : E '.' SUBNODE {
         /* look at variables */
         if((v = find_variable(state, name))) {
             // name is a local variable
-            o.c = abc_getlocal(o.c, v->index);
-            o.t = v->type;
-            return mkcodenode(o);
+           return var_read(v);
         }
         if((v = find_slot(state->method, name))) {
             o.c = abc_getscopeobject(o.c, 1);
@@ -3824,7 +3830,7 @@ NAMESPACE_ID : "namespace" T_IDENTIFIER '=' T_STRING {
 }
 NAMESPACE_DECLARATION : MAYBE_MODIFIERS NAMESPACE_ID {
     PASS12
-    trie_put(active_namespaces, $2->name, (void*)$2->url);
+    trie_put(active_namespaces, (unsigned char*)$2->name, (void*)$2->url);
 
     namespace_t access = modifiers2access(&$1);
     varinfo_t* var = varinfo_register_global(access.access, state->package, $2->name);
@@ -3867,7 +3873,7 @@ USE_NAMESPACE : "use" "namespace" CLASS_SPEC {
         syntaxerror("%s.%s is not a namespace", $3->package, $3->name);
     url = s->value->ns->name;
 
-    trie_put(active_namespaces, $3->name, (void*)url);
+    trie_put(active_namespaces, (unsigned char*)$3->name, (void*)url);
     add_active_url(url);
     $$=0;
 }
index 2402328..9568d5f 100644 (file)
@@ -136,7 +136,7 @@ char*escape_string(const char*str)
     if(!str)
         return strdup("NULL");
     int len=0;
-    unsigned const char*s=str;
+    unsigned const char*s=(unsigned const char*)str;
     while(*s) {
         if(*s<10) {
             len+=2; // \d
@@ -151,7 +151,7 @@ char*escape_string(const char*str)
     }
     char*newstr = malloc(len+1);
     char*dest = newstr;
-    s=str;
+    s=(unsigned const char*)str;
     while(*s) {
         if(*s<9) {
             dest+=sprintf(dest, "\\%d", *s);
@@ -1117,7 +1117,7 @@ void pool_read(pool_t*pool, TAG*tag)
     DEBUG printf("%d strings\n", num_strings);
     for(t=1;t<num_strings;t++) {
        int len = swf_GetU30(tag);
-        string_t s = string_new(&tag->data[tag->pos], len);
+        string_t s = string_new((char*)&tag->data[tag->pos], len);
        swf_GetBlock(tag, 0, len);
        array_append(pool->x_strings, &s, 0);
        DEBUG printf("%d) \"%s\"\n", t, ((string_t*)array_getkey(pool->x_strings, t))->str);
index 8bcd9de..57b2da1 100644 (file)
@@ -47,8 +47,11 @@ void swf_AddButtonLinks(SWF*swf, char stop_each_frame, char events)
     unsigned char h[16];
     unsigned char file_signature[33];
     finish_md5(md5, h);
-    sprintf(file_signature, "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
-           h[0],h[1],h[2],h[3],h[4],h[5],h[6],h[7],h[8],h[9],h[10],h[11],h[12],h[13],h[14],h[15]);
+    sprintf((char*)file_signature, "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
+           h[0],h[1],h[2],h[3],
+           h[4],h[5],h[6],h[7],
+           h[8],h[9],h[10],h[11],
+           h[12],h[13],h[14],h[15]);
 
     char scenename1[80], scenename2[80];
     sprintf(scenename1, "rfx.MainTimeline_%s", file_signature);
@@ -174,7 +177,7 @@ void swf_AddButtonLinks(SWF*swf, char stop_each_frame, char events)
                         __ findpropstrict(h,"flash.net::navigateToURL");
                         __ findpropstrict(h,"flash.net::URLRequest");
                         // TODO: target _blank
-                        __ pushstring(h,oldaction->data); //url
+                        __ pushstring(h,(char*)oldaction->data); //url
                         __ constructprop(h,"flash.net::URLRequest", 1);
                         __ callpropvoid(h,"flash.net::navigateToURL", 1);
                     } else {
@@ -183,7 +186,7 @@ void swf_AddButtonLinks(SWF*swf, char stop_each_frame, char events)
                         __ pushstring(h, "link");
                         __ pushtrue(h);
                         __ pushtrue(h);
-                        __ pushstring(h,oldaction->data); //url
+                        __ pushstring(h,(char*)oldaction->data); //url
                         __ constructprop(h,"[package]flash.events::TextEvent", 4);
                         __ callpropvoid(h,"[package]::dispatchEvent", 1);
                     }
index 6d6e147..e80ba61 100644 (file)
@@ -81,6 +81,7 @@ extern trie_t*active_namespaces;
 
 #include "parser.tab.h"
 
+extern char*token2string(enum yytokentype nr, YYSTYPE v);
 extern unsigned int as3_tokencount;
 
 void as3_buffer_input(void*buffer, int len);
index ece94d0..c4de1e3 100644 (file)
@@ -481,7 +481,7 @@ void tokenizer_unregister_namespace(const char*id)
 }*/
 static inline char tokenizer_is_namespace(const char*id)
 {
-    return trie_contains(active_namespaces, id);
+    return trie_contains(active_namespaces, (const unsigned char*)id);
 }
 
 static inline int handleIdentifier()
index e883194..782d3eb 100644 (file)
@@ -1914,7 +1914,7 @@ void tokenizer_unregister_namespace(const char*id)
 }*/
 static inline char tokenizer_is_namespace(const char*id)
 {
-    return trie_contains(active_namespaces, id);
+    return trie_contains(active_namespaces, (const unsigned char*)id);
 }
 
 static inline int handleIdentifier()
diff --git a/lib/q.c b/lib/q.c
index 63794e0..67597df 100644 (file)
--- a/lib/q.c
+++ b/lib/q.c
@@ -374,7 +374,7 @@ static char _trie_put(trielayer_t**t, unsigned const char*id, void*data)
 {
     if(!*t) {
         (*t) = rfx_calloc(sizeof(trielayer_t));
-        (*t)->rest = (unsigned char*)strdup(id);
+        (*t)->rest = (unsigned char*)strdup((char*)id);
         (*t)->data = data;
         return 0;
     } 
@@ -389,7 +389,7 @@ static char _trie_put(trielayer_t**t, unsigned const char*id, void*data)
         char overwrite = 0;
         if((*t)->rest) 
             overwrite = 1;
-        (*t)->rest = strdup("");
+        (*t)->rest = (unsigned char*)strdup("");
         (*t)->data = data;
         return overwrite;
     }
@@ -397,7 +397,7 @@ static char _trie_put(trielayer_t**t, unsigned const char*id, void*data)
 static char _trie_remove(trielayer_t*t, unsigned const char*id)
 {
     while(t) {
-        if(t->rest && !strcmp(t->rest, id)) {
+        if(t->rest && !strcmp((char*)t->rest, (char*)id)) {
             free(t->rest);
             t->rest = 0;
             return 1;
@@ -443,7 +443,7 @@ int trie_contains(trie_t*trie, unsigned const char*id)
 {
     trielayer_t*t = trie->start;
     while(t) {
-        if(t->rest && !strcmp(t->rest, id))
+        if(t->rest && !strcmp((char*)t->rest, (char*)id))
             return 1;
         if(!*id) 
             return 0;
@@ -455,7 +455,7 @@ void* trie_lookup(trie_t*trie, unsigned const char*id)
 {
     trielayer_t*t = trie->start;
     while(t) {
-        if(t->rest && !strcmp(t->rest, id))
+        if(t->rest && !strcmp((char*)t->rest, (char*)id))
             return t->data;
         if(!*id) 
             return 0;