#include "abc.h"
#include "pool.h"
#include "files.h"
+#include "common.h"
#include "tokenizer.h"
#include "registry.h"
#include "code.h"
/* Line 198 of skeleton.m4 */
-#line 99 "parser.tab.c"
+#line 100 "parser.tab.c"
/* Enabling traces. */
#ifndef YYDEBUG
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union
/* Line 223 of skeleton.m4 */
-#line 44 "parser.y"
+#line 45 "parser.y"
tokenunion
{
/* Line 223 of skeleton.m4 */
-#line 44 "parser.y"
+#line 45 "parser.y"
enum yytokentype token;
/* Line 223 of skeleton.m4 */
-#line 278 "parser.tab.c"
+#line 279 "parser.tab.c"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
/* Copy the second part of user declarations. */
/* Line 273 of skeleton.m4 */
-#line 266 "parser.y"
+#line 267 "parser.y"
static int a3_error(char*s)
return 0; //make gcc happy
}
+static void parsererror(const char*file, int line, const char*f)
+{
+ syntaxerror("internal error in %s, %s:%d", f, file, line);
+}
+
+#define parserassert(b) {if(!(b)) parsererror(__FILE__, __LINE__,__func__);}
+
static char* concat2(const char* t1, const char* t2)
{
typedef struct _import {
char*package;
} import_t;
-
DECLARE_LIST(import);
DECLARE(methodstate);
static namespace_list_t nl1 = {&ns1,&nl2};
static namespace_set_t nopackage_namespace_set = {&nl1};
-dict_t*conditionals=0;
+static dict_t*definitions=0;
void as3_set_definition(const char*c)
{
- if(!conditionals)
- conditionals = dict_new();
- if(!dict_contains(conditionals,c))
- dict_put(conditionals,c,0);
+ if(!definitions)
+ definitions = dict_new();
+ if(!dict_contains(definitions,c))
+ dict_put(definitions,c,0);
}
static void new_state()
if(oldstate)
state->active_namespace_urls = list_clone(oldstate->active_namespace_urls);
}
-static void state_has_imports()
-{
- state->wildcard_imports = list_clone(state->wildcard_imports);
- state->imports = dict_clone(state->imports);
- state->has_own_imports = 1;
-}
-static void import_toplevel(const char*package)
-{
- char* s = strdup(package);
- while(1) {
- dict_put(state->import_toplevel_packages, s, 0);
- char*x = strrchr(s, '.');
- if(!x)
- break;
- *x = 0;
- }
- free(s);
-}
static void state_destroy(state_t*state)
{
void* finish_parser()
{
dict_free_all(global->file2token2info, 1, (void*)dict_destroy);
-
global->token2info=0;
-
return global->file;
}
-
-static void xx_scopetest()
-{
- /* findpropstrict doesn't just return a scope object- it
- also makes it "active" somehow. Push local_0 on the
- scope stack and read it back with findpropstrict, it'll
- contain properties like "trace". Trying to find the same
- property on a "vanilla" local_0 yields only a "undefined" */
- //c = abc_findpropstrict(c, "[package]::trace");
-
- /*c = abc_getlocal_0(c);
- c = abc_findpropstrict(c, "[package]::trace");
- c = abc_coerce_a(c);
- c = abc_setlocal_1(c);
-
- c = abc_pushbyte(c, 0);
- c = abc_setlocal_2(c);
-
- code_t*xx = c = abc_label(c);
- c = abc_findpropstrict(c, "[package]::trace");
- c = abc_pushstring(c, "prop:");
- c = abc_hasnext2(c, 1, 2);
- c = abc_dup(c);
- c = abc_setlocal_3(c);
- c = abc_callpropvoid(c, "[package]::trace", 2);
- c = abc_getlocal_3(c);
- c = abc_kill(c, 3);
- c = abc_iftrue(c,xx);*/
-}
-
typedef struct _variable {
int index;
classinfo_t*type;
syntaxerror("undefined variable: %s", name);
return v;
}
+
static char variable_exists(char*name)
{
return dict_contains(state->vars, name);
}
-code_t*defaultvalue(code_t*c, classinfo_t*type);
+
+static code_t*defaultvalue(code_t*c, classinfo_t*type)
+{
+ if(TYPE_IS_INT(type)) {
+ c = abc_pushbyte(c, 0);
+ } else if(TYPE_IS_UINT(type)) {
+ c = abc_pushuint(c, 0);
+ } else if(TYPE_IS_FLOAT(type)) {
+ c = abc_pushnan(c);
+ } else if(TYPE_IS_BOOLEAN(type)) {
+ c = abc_pushfalse(c);
+ } else if(!type) {
+ //c = abc_pushundefined(c);
+ syntaxerror("internal error: can't generate default value for * type");
+ } else {
+ c = abc_pushnull(c);
+ MULTINAME(m, type);
+ c = abc_coerce2(c, &m);
+ }
+ return c;
+}
static int alloc_local()
{
return new_variable(TEMPVARNAME, 0, 0, 0);
}
-code_t* var_block(code_t*body)
+static code_t* var_block(code_t*body)
{
code_t*c = 0;
code_t*k = 0;
return c;
}
-void unknown_variable(char*name)
+static void unknown_variable(char*name)
{
if(!state->method->unresolved_variables)
state->method->unresolved_variables = dict_new();
dict_put(state->method->unresolved_variables, name, 0);
}
-#define parserassert(b) {if(!(b)) parsererror(__FILE__, __LINE__,__func__);}
-
-static void parsererror(const char*file, int line, const char*f)
-{
- syntaxerror("internal error in %s, %s:%d", f, file, line);
-}
-
-
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
return c;
}
-
static void startpackage(char*name)
{
new_state();
- /*printf("entering package \"%s\"\n", name);*/
state->package = strdup(name);
}
static void endpackage()
{
- /*printf("leaving package \"%s\"\n", state->package);*/
-
//used e.g. in classinfo_register:
//free(state->package);state->package=0;
-
old_state();
}
return registry_findmember_nsset(cls, state->active_namespace_urls, name, recurse);
}
-void add_active_url(const char*url)
-{
- NEW(namespace_t,n);
- n->name = url;
- list_append(state->active_namespace_urls, n);
-}
-
static void function_initvars(methodstate_t*m, params_t*params, int flags, char var0)
{
if(var0) {
}
}
-static int slotstate_varconst = 0;
-static modifiers_t*slotstate_flags = 0;
-static void setslotstate(modifiers_t* flags, int varconst)
-{
- slotstate_varconst = varconst;
- slotstate_flags = flags;
- if(state->cls) {
- if(flags && flags->flags&FLAG_STATIC) {
- state->method = state->cls->static_init;
- } else {
- state->method = state->cls->init;
- }
- } else {
- parserassert(state->method);
- }
-}
-
static void endclass()
{
if(as3_pass == 2) {
char*name = string_cstr(c->data[0]);
syntaxerror("Unresolved \"continue %s\"", name);
}
+ if(c->opcode == OPCODE___RETHROW__) {
+ syntaxerror("Unresolved \"rethrow\"");
+ }
+ if(c->opcode == OPCODE___FALLTHROUGH__) {
+ syntaxerror("Unresolved \"fallthrough\"");
+ }
if(c->opcode == OPCODE___PUSHPACKAGE__) {
char*name = string_cstr(c->data[0]);
syntaxerror("Can't reference a package (%s) as such", name);
}
}
-
static void check_constant_against_type(classinfo_t*t, constant_t*c)
{
- return;
#define xassert(b) if(!(b)) syntaxerror("Invalid default value %s for type '%s'", constant_tostring(c), t->name)
if(TYPE_IS_NUMBER(t)) {
xassert(c->type == CONSTANT_FLOAT
return 0;
}
-char is_subtype_of(classinfo_t*type, classinfo_t*supertype)
-{
- return 1; // FIXME
-}
-
void breakjumpsto(code_t*c, char*name, code_t*jump)
{
while(c) {
}
}
+/* TODO: move this to ast.c */
#define IS_INT(a) (TYPE_IS_INT((a)) || TYPE_IS_UINT((a)))
#define IS_NUMBER_OR_INT(a) (TYPE_IS_INT((a)) || TYPE_IS_UINT((a)) || TYPE_IS_NUMBER((a)))
#define BOTH_INT(a,b) (IS_INT(a) && IS_INT(b))
-
-classinfo_t*join_types(classinfo_t*type1, classinfo_t*type2, char op)
+static classinfo_t*join_types(classinfo_t*type1, classinfo_t*type2, char op)
{
if(!type1 || !type2)
return registry_getanytype();
return type1;
return registry_getanytype();
}
+static char is_getlocal(code_t*c)
+{
+ if(!c || c->prev || c->next)
+ return 0;
+ return(c->opcode == OPCODE_GETLOCAL
+ || c->opcode == OPCODE_GETLOCAL_0
+ || c->opcode == OPCODE_GETLOCAL_1
+ || c->opcode == OPCODE_GETLOCAL_2
+ || c->opcode == OPCODE_GETLOCAL_3);
+}
+static int getlocalnr(code_t*c)
+{
+ if(c->opcode == OPCODE_GETLOCAL) {return (ptroff_t)c->data[0];}
+ else if(c->opcode == OPCODE_GETLOCAL_0) {return 0;}
+ else if(c->opcode == OPCODE_GETLOCAL_1) {return 1;}
+ else if(c->opcode == OPCODE_GETLOCAL_2) {return 2;}
+ else if(c->opcode == OPCODE_GETLOCAL_3) {return 3;}
+ else syntaxerror("Internal error: opcode %02x is not a getlocal call", c->opcode);
+ return 0;
+}
code_t*converttype(code_t*c, classinfo_t*from, classinfo_t*to)
{
if(from==to)
return c;
}
-
-code_t*defaultvalue(code_t*c, classinfo_t*type)
-{
- if(TYPE_IS_INT(type)) {
- c = abc_pushbyte(c, 0);
- } else if(TYPE_IS_UINT(type)) {
- c = abc_pushuint(c, 0);
- } else if(TYPE_IS_FLOAT(type)) {
- c = abc_pushnan(c);
- } else if(TYPE_IS_BOOLEAN(type)) {
- c = abc_pushfalse(c);
- } else if(!type) {
- //c = abc_pushundefined(c);
- } else {
- c = abc_pushnull(c);
- MULTINAME(m, type);
- c = abc_coerce2(c, &m);
- }
- return c;
-}
+/* move to ast.c todo end */
char is_pushundefined(code_t*c)
{
return x;
}
-static char is_getlocal(code_t*c)
-{
- if(!c || c->prev || c->next)
- return 0;
- return(c->opcode == OPCODE_GETLOCAL
- || c->opcode == OPCODE_GETLOCAL_0
- || c->opcode == OPCODE_GETLOCAL_1
- || c->opcode == OPCODE_GETLOCAL_2
- || c->opcode == OPCODE_GETLOCAL_3);
-}
-static int getlocalnr(code_t*c)
-{
- if(c->opcode == OPCODE_GETLOCAL) {return (ptroff_t)c->data[0];}
- else if(c->opcode == OPCODE_GETLOCAL_0) {return 0;}
- else if(c->opcode == OPCODE_GETLOCAL_1) {return 1;}
- else if(c->opcode == OPCODE_GETLOCAL_2) {return 2;}
- else if(c->opcode == OPCODE_GETLOCAL_3) {return 3;}
- else syntaxerror("Internal error: opcode %02x is not a getlocal call", c->opcode);
- return 0;
-}
-static code_t* toreadwrite(code_t*in, code_t*middlepart, char justassign, char readbefore)
+code_t* toreadwrite(code_t*in, code_t*middlepart, char justassign, char readbefore, char pushvalue)
{
/* converts this:
temp = gettempvar();
c = code_append(c, prefix);
c = code_append(c, r);
- if(readbefore) {
+ if(pushvalue && readbefore) {
c = abc_dup(c);
c = abc_setlocal(c, temp);
}
c = code_append(c, middlepart);
- if(!readbefore) {
+ if(pushvalue && !readbefore) {
c = abc_dup(c);
c = abc_setlocal(c, temp);
}
c = code_append(c, write);
- c = abc_getlocal(c, temp);
- c = abc_kill(c, temp);
+ if(pushvalue) {
+ c = abc_getlocal(c, temp);
+ c = abc_kill(c, temp);
+ }
} else {
/* if we're allowed to execute the read code twice *and*
the middlepart doesn't modify the code, things are easier.
*/
- code_t* r2 = code_dup(r);
//c = code_append(c, prefix);
parserassert(!prefix);
+ code_t* r2 = 0;
+ if(pushvalue) {
+ r2 = code_dup(r);
+ }
c = code_append(c, r);
c = code_append(c, middlepart);
c = code_append(c, write);
- c = code_append(c, r2);
+ if(pushvalue) {
+ c = code_append(c, r2);
+ }
}
} else {
/* even smaller version: overwrite the value without reading
}
c = code_append(c, middlepart);
c = code_append(c, write);
- c = code_append(c, r);
+ if(pushvalue) {
+ c = code_append(c, r);
+ }
} else {
code_free(r);r=0;
temp = gettempvar();
c = code_append(c, prefix);
}
c = code_append(c, middlepart);
- c = abc_dup(c);
- c = abc_setlocal(c, temp);
+ if(pushvalue) {
+ c = abc_dup(c);
+ c = abc_setlocal(c, temp);
+ }
c = code_append(c, write);
- c = abc_getlocal(c, temp);
- c = abc_kill(c, temp);
+ if(pushvalue) {
+ c = abc_getlocal(c, temp);
+ c = abc_kill(c, temp);
+ }
}
}
return c;
/* Line 273 of skeleton.m4 */
-#line 2151 "parser.tab.c"
+#line 2085 "parser.tab.c"
+/* Unqualified %code blocks. */
+
+/* Line 274 of skeleton.m4 */
+#line 2149 "parser.y"
+
+ char is_subtype_of(classinfo_t*type, classinfo_t*supertype)
+ {
+ return 1; // FIXME
+ }
+
+
+/* Line 274 of skeleton.m4 */
+#line 2601 "parser.y"
+
+ static void state_has_imports()
+ {
+ state->wildcard_imports = list_clone(state->wildcard_imports);
+ state->imports = dict_clone(state->imports);
+ state->has_own_imports = 1;
+ }
+ static void import_toplevel(const char*package)
+ {
+ char* s = strdup(package);
+ while(1) {
+ dict_put(state->import_toplevel_packages, s, 0);
+ char*x = strrchr(s, '.');
+ if(!x)
+ break;
+ *x = 0;
+ }
+ free(s);
+ }
+
+
+/* Line 274 of skeleton.m4 */
+#line 2734 "parser.y"
+
+ static int slotstate_varconst = 0;
+ static modifiers_t*slotstate_flags = 0;
+ static void setslotstate(modifiers_t* flags, int varconst)
+ {
+ slotstate_varconst = varconst;
+ slotstate_flags = flags;
+ if(state->cls) {
+ if(flags && flags->flags&FLAG_STATIC) {
+ state->method = state->cls->static_init;
+ } else {
+ state->method = state->cls->init;
+ }
+ } else {
+ parserassert(state->method);
+ }
+ }
+
+
+/* Line 274 of skeleton.m4 */
+#line 3899 "parser.y"
+
+ void add_active_url(const char*url)
+ {
+ NEW(namespace_t,n);
+ n->name = url;
+ list_append(state->active_namespace_urls, n);
+ }
+
+
+
+/* Line 274 of skeleton.m4 */
+#line 2154 "parser.tab.c"
#ifdef short
# undef short
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 2130, 2130, 2132, 2132, 2133, 2134, 2136, 2137, 2138,
- 2139, 2140, 2141, 2142, 2143, 2145, 2145, 2146, 2147, 2149,
- 2150, 2151, 2152, 2153, 2154, 2155, 2157, 2158, 2160, 2161,
- 2164, 2165, 2166, 2167, 2168, 2169, 2170, 2171, 2172, 2173,
- 2174, 2175, 2176, 2177, 2180, 2181, 2182, 2183, 2184, 2185,
- 2186, 2187, 2191, 2192, 2196, 2203, 2215, 2216, 2220, 2221,
- 2223, 2224, 2226, 2287, 2288, 2291, 2291, 2310, 2311, 2312,
- 2317, 2321, 2326, 2327, 2329, 2349, 2397, 2397, 2416, 2416,
- 2431, 2434, 2437, 2440, 2444, 2445, 2446, 2447, 2448, 2449,
- 2451, 2462, 2465, 2465, 2496, 2496, 2521, 2521, 2537, 2538,
- 2539, 2540, 2548, 2557, 2557, 2606, 2610, 2621, 2631, 2648,
- 2649, 2650, 2652, 2653, 2655, 2655, 2657, 2657, 2660, 2674,
- 2690, 2691, 2692, 2693, 2700, 2701, 2702, 2703, 2704, 2705,
- 2706, 2707, 2708, 2709, 2713, 2714, 2716, 2717, 2719, 2720,
- 2724, 2722, 2730, 2728, 2737, 2738, 2739, 2740, 2741, 2742,
- 2743, 2744, 2746, 2752, 2753, 2754, 2755, 2756, 2757, 2760,
- 2773, 2773, 2775, 2775, 2777, 2778, 2780, 2865, 2866, 2868,
- 2869, 2870, 2871, 2872, 2874, 2875, 2876, 2877, 2889, 2893,
- 2899, 2905, 2913, 2918, 2924, 2932, 2940, 2941, 2942, 2945,
- 2944, 2961, 2962, 2964, 2963, 2987, 3006, 3020, 3021, 3023,
- 3024, 3026, 3027, 3028, 3037, 3038, 3042, 3043, 3045, 3046,
- 3047, 3049, 3053, 3054, 3059, 3060, 3096, 3142, 3163, 3184,
- 3187, 3194, 3195, 3196, 3202, 3208, 3209, 3210, 3211, 3212,
- 3214, 3216, 3233, 3238, 3241, 3244, 3247, 3250, 3253, 3256,
- 3259, 3262, 3266, 3269, 3272, 3275, 3278, 3281, 3284, 3287,
- 3291, 3302, 3320, 3325, 3330, 3335, 3340, 3345, 3349, 3353,
- 3358, 3362, 3366, 3375, 3384, 3394, 3399, 3411, 3417, 3422,
- 3428, 3434, 3438, 3440, 3451, 3460, 3467, 3468, 3470, 3476,
- 3485, 3492, 3504, 3510, 3516, 3522, 3528, 3534, 3540, 3546,
- 3559, 3570, 3577, 3590, 3617, 3631, 3645, 3659, 3674, 3681,
- 3688, 3695, 3702, 3717, 3774, 3883, 3890, 3897, 3904, 3919
+ 0, 2064, 2064, 2066, 2066, 2067, 2068, 2070, 2071, 2072,
+ 2073, 2074, 2075, 2076, 2077, 2079, 2079, 2080, 2081, 2083,
+ 2084, 2085, 2086, 2087, 2088, 2089, 2091, 2092, 2094, 2095,
+ 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107,
+ 2108, 2109, 2110, 2111, 2114, 2115, 2116, 2117, 2118, 2119,
+ 2120, 2121, 2125, 2126, 2130, 2137, 2156, 2157, 2161, 2162,
+ 2164, 2165, 2167, 2228, 2229, 2232, 2232, 2251, 2252, 2253,
+ 2258, 2262, 2267, 2268, 2270, 2290, 2338, 2338, 2357, 2357,
+ 2372, 2375, 2378, 2381, 2385, 2386, 2387, 2388, 2389, 2390,
+ 2392, 2403, 2406, 2406, 2437, 2437, 2462, 2462, 2478, 2479,
+ 2480, 2481, 2489, 2498, 2498, 2547, 2551, 2562, 2572, 2589,
+ 2590, 2591, 2593, 2594, 2596, 2596, 2598, 2598, 2621, 2635,
+ 2651, 2652, 2653, 2654, 2661, 2662, 2663, 2664, 2665, 2666,
+ 2667, 2668, 2669, 2670, 2674, 2675, 2677, 2678, 2680, 2681,
+ 2685, 2683, 2691, 2689, 2698, 2699, 2700, 2701, 2702, 2703,
+ 2704, 2705, 2707, 2713, 2714, 2715, 2716, 2717, 2718, 2721,
+ 2753, 2753, 2755, 2755, 2757, 2758, 2760, 2845, 2846, 2848,
+ 2849, 2850, 2851, 2852, 2854, 2855, 2856, 2857, 2869, 2873,
+ 2879, 2885, 2893, 2898, 2904, 2912, 2920, 2921, 2922, 2925,
+ 2924, 2941, 2942, 2944, 2943, 2967, 2986, 3000, 3001, 3003,
+ 3004, 3006, 3007, 3008, 3017, 3018, 3022, 3023, 3025, 3026,
+ 3027, 3029, 3033, 3034, 3039, 3040, 3076, 3122, 3143, 3164,
+ 3167, 3174, 3175, 3176, 3182, 3188, 3189, 3190, 3191, 3192,
+ 3194, 3196, 3213, 3218, 3221, 3224, 3227, 3230, 3233, 3236,
+ 3239, 3242, 3246, 3249, 3252, 3255, 3258, 3261, 3264, 3267,
+ 3271, 3282, 3300, 3305, 3310, 3315, 3320, 3325, 3329, 3333,
+ 3338, 3342, 3346, 3355, 3364, 3374, 3379, 3391, 3397, 3402,
+ 3408, 3414, 3418, 3420, 3431, 3440, 3447, 3448, 3450, 3456,
+ 3465, 3472, 3484, 3490, 3496, 3502, 3508, 3514, 3520, 3526,
+ 3539, 3550, 3557, 3570, 3597, 3611, 3625, 3639, 3654, 3661,
+ 3668, 3675, 3682, 3697, 3754, 3863, 3870, 3877, 3884, 3908
};
#endif
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2142 "parser.y"
+#line 2076 "parser.y"
{PASS_ALWAYS as3_pass=(yyvsp[(1) - (4)].number_int);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2154 "parser.y"
+#line 2088 "parser.y"
{PASS_ALWAYS as3_pass=(yyvsp[(1) - (4)].number_int);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2157 "parser.y"
+#line 2091 "parser.y"
{(yyval.code)=(yyvsp[(1) - (1)].code);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2158 "parser.y"
+#line 2092 "parser.y"
{(yyval.code)=code_new();}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2160 "parser.y"
+#line 2094 "parser.y"
{(yyval.code)=code_append((yyvsp[(1) - (2)].code),(yyvsp[(2) - (2)].code));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2161 "parser.y"
+#line 2095 "parser.y"
{(yyval.code)=(yyvsp[(1) - (1)].code);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2176 "parser.y"
+#line 2110 "parser.y"
{(yyval.code)=(yyvsp[(2) - (3)].code);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2177 "parser.y"
+#line 2111 "parser.y"
{(yyval.code)=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2180 "parser.y"
+#line 2114 "parser.y"
{(yyval.code)=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2187 "parser.y"
+#line 2121 "parser.y"
{PASS_ALWAYS as3_pass=(yyvsp[(1) - (4)].number_int);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2191 "parser.y"
+#line 2125 "parser.y"
{(yyval.code)=(yyvsp[(1) - (2)].code);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2192 "parser.y"
+#line 2126 "parser.y"
{(yyval.code)=(yyvsp[(1) - (1)].code);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2196 "parser.y"
+#line 2130 "parser.y"
{
code_t**cc = &global->init->method->body->code;
*cc = code_append(*cc, (yyvsp[(1) - (1)].code));
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2203 "parser.y"
+#line 2137 "parser.y"
{
PASS12
(yyval.number_int)=as3_pass;
char*key = concat3((yyvsp[(1) - (3)].id),"::",(yyvsp[(3) - (3)].id));
- if(!conditionals || !dict_contains(conditionals, key)) {
+ if(!definitions || !dict_contains(definitions, key)) {
as3_pass=0;
}
free(key);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2215 "parser.y"
+#line 2156 "parser.y"
{(yyval.value)=(yyvsp[(2) - (2)].value);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2216 "parser.y"
+#line 2157 "parser.y"
{(yyval.value).c=abc_pushundefined(0);
(yyval.value).t=TYPE_ANY;
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2220 "parser.y"
+#line 2161 "parser.y"
{(yyval.code)=(yyvsp[(2) - (2)].code);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2221 "parser.y"
+#line 2162 "parser.y"
{(yyval.code)=(yyvsp[(2) - (2)].code);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2223 "parser.y"
+#line 2164 "parser.y"
{(yyval.code) = (yyvsp[(1) - (1)].code);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2224 "parser.y"
+#line 2165 "parser.y"
{(yyval.code) = code_append((yyvsp[(1) - (3)].code), (yyvsp[(3) - (3)].code));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2227 "parser.y"
+#line 2168 "parser.y"
{
PASS12
if(variable_exists((yyvsp[(1) - (3)].id)))
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2287 "parser.y"
+#line 2228 "parser.y"
{(yyval.code) = code_new();}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2288 "parser.y"
+#line 2229 "parser.y"
{(yyval.code)=(yyvsp[(2) - (2)].code);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2291 "parser.y"
+#line 2232 "parser.y"
{PASS12 new_state();}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2291 "parser.y"
+#line 2232 "parser.y"
{
(yyval.code) = code_new();
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2310 "parser.y"
+#line 2251 "parser.y"
{(yyval.code)=code_new();}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2317 "parser.y"
+#line 2258 "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);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2321 "parser.y"
+#line 2262 "parser.y"
{
PASS12
(yyval.id)=(yyvsp[(1) - (1)].id);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2326 "parser.y"
+#line 2267 "parser.y"
{PASS12 new_state();(yyval.for_start).name=(yyvsp[(1) - (2)].id);(yyval.for_start).each=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2327 "parser.y"
+#line 2268 "parser.y"
{PASS12 new_state();(yyval.for_start).name=(yyvsp[(1) - (3)].id);(yyval.for_start).each=1;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2329 "parser.y"
+#line 2270 "parser.y"
{
if((yyvsp[(1) - (8)].for_start).each) syntaxerror("invalid syntax: ; not allowed in for each statement");
(yyval.code) = code_new();
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2349 "parser.y"
+#line 2290 "parser.y"
{
variable_t*var = find_variable(state, (yyvsp[(2) - (6)].id));
if(!var) {
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2397 "parser.y"
+#line 2338 "parser.y"
{PASS12 new_state();}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2397 "parser.y"
+#line 2338 "parser.y"
{
(yyval.code) = code_new();
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2416 "parser.y"
+#line 2357 "parser.y"
{PASS12 new_state();}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2416 "parser.y"
+#line 2357 "parser.y"
{
(yyval.code) = code_new();
code_t*loopstart = (yyval.code) = abc_label((yyval.code));
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2431 "parser.y"
+#line 2372 "parser.y"
{
(yyval.code) = abc___break__(0, "");
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2434 "parser.y"
+#line 2375 "parser.y"
{
(yyval.code) = abc___break__(0, (yyvsp[(2) - (2)].id));
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2437 "parser.y"
+#line 2378 "parser.y"
{
(yyval.code) = abc___continue__(0, "");
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2440 "parser.y"
+#line 2381 "parser.y"
{
(yyval.code) = abc___continue__(0, (yyvsp[(2) - (2)].id));
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2444 "parser.y"
+#line 2385 "parser.y"
{(yyval.code)=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2445 "parser.y"
+#line 2386 "parser.y"
{(yyval.code)=(yyvsp[(1) - (1)].code);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2446 "parser.y"
+#line 2387 "parser.y"
{(yyval.code)=(yyvsp[(1) - (1)].code);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2447 "parser.y"
+#line 2388 "parser.y"
{(yyval.code)=code_append((yyvsp[(1) - (2)].code),(yyvsp[(2) - (2)].code));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2448 "parser.y"
+#line 2389 "parser.y"
{(yyval.code)=(yyvsp[(1) - (1)].code);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2449 "parser.y"
+#line 2390 "parser.y"
{(yyval.code)=code_append((yyval.code),(yyvsp[(2) - (2)].code));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2451 "parser.y"
+#line 2392 "parser.y"
{
(yyval.code) = abc_getlocal(0, state->switch_var);
(yyval.code) = code_append((yyval.code), (yyvsp[(2) - (4)].value).c);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2462 "parser.y"
+#line 2403 "parser.y"
{
(yyval.code) = (yyvsp[(3) - (3)].code);
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2465 "parser.y"
+#line 2406 "parser.y"
{PASS12 new_state();state->switch_var=alloc_local();}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2465 "parser.y"
+#line 2406 "parser.y"
{
(yyval.code)=(yyvsp[(4) - (8)].value).c;
(yyval.code) = abc_setlocal((yyval.code), state->switch_var);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2496 "parser.y"
+#line 2437 "parser.y"
{PASS12 new_state();
state->exception_name=(yyvsp[(3) - (5)].id);
PASS1 new_variable((yyvsp[(3) - (5)].id), 0, 0, 0);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2501 "parser.y"
+#line 2442 "parser.y"
{
namespace_t name_ns = {ACCESS_PACKAGE, ""};
multiname_t name = {QNAME, &name_ns, 0, (yyvsp[(3) - (9)].id)};
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2521 "parser.y"
+#line 2462 "parser.y"
{PASS12 new_state();state->exception_name=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2521 "parser.y"
+#line 2462 "parser.y"
{
(yyvsp[(4) - (5)].code) = var_block((yyvsp[(4) - (5)].code));
if(!(yyvsp[(4) - (5)].code)) {
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2537 "parser.y"
+#line 2478 "parser.y"
{(yyval.catch_list).l=list_new();(yyval.catch_list).finally=0;list_append((yyval.catch_list).l,(yyvsp[(1) - (1)].exception));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2538 "parser.y"
+#line 2479 "parser.y"
{(yyval.catch_list)=(yyvsp[(1) - (2)].catch_list);list_append((yyval.catch_list).l,(yyvsp[(2) - (2)].exception));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2539 "parser.y"
+#line 2480 "parser.y"
{(yyval.catch_list)=(yyvsp[(1) - (1)].catch_list);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2540 "parser.y"
+#line 2481 "parser.y"
{
(yyval.catch_list) = (yyvsp[(1) - (2)].catch_list);
(yyval.catch_list).finally = 0;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2548 "parser.y"
+#line 2489 "parser.y"
{
(yyval.catch_list).l=list_new();
(yyval.catch_list).finally = 0;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2557 "parser.y"
+#line 2498 "parser.y"
{PASS12 new_state();
state->method->has_exceptions=1;
state->method->late_binding=1;//for invariant scope_code
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2560 "parser.y"
+#line 2501 "parser.y"
{
code_t*out = abc_nop(0);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2606 "parser.y"
+#line 2547 "parser.y"
{
(yyval.code)=(yyvsp[(2) - (2)].value).c;
(yyval.code)=abc_throw((yyval.code));
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2610 "parser.y"
+#line 2551 "parser.y"
{
if(!state->exception_name)
syntaxerror("re-throw only possible within a catch block");
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2621 "parser.y"
+#line 2562 "parser.y"
{
new_state();
if(state->method->has_exceptions) {
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2631 "parser.y"
+#line 2572 "parser.y"
{
/* remove getlocal;pushwith from scope code again */
state->method->scope_code = code_cutlast(code_cutlast(state->method->scope_code));
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2649 "parser.y"
+#line 2590 "parser.y"
{PASS12 (yyval.id)="package";}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2650 "parser.y"
+#line 2591 "parser.y"
{PASS12 (yyval.id)=(yyvsp[(1) - (1)].id);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2652 "parser.y"
+#line 2593 "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;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2653 "parser.y"
+#line 2594 "parser.y"
{PASS12 (yyval.id)=strdup((yyvsp[(1) - (1)].id));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2655 "parser.y"
+#line 2596 "parser.y"
{PASS12 startpackage((yyvsp[(2) - (3)].id));free((yyvsp[(2) - (3)].id));(yyvsp[(2) - (3)].id)=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2656 "parser.y"
+#line 2597 "parser.y"
{PASS12 endpackage();(yyval.code)=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2657 "parser.y"
+#line 2598 "parser.y"
{PASS12 startpackage("");}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2658 "parser.y"
+#line 2599 "parser.y"
{PASS12 endpackage();(yyval.code)=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2660 "parser.y"
+#line 2621 "parser.y"
{
PASS12
slotinfo_t*s = registry_find((yyvsp[(2) - (2)].classinfo)->package, (yyvsp[(2) - (2)].classinfo)->name);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2674 "parser.y"
+#line 2635 "parser.y"
{
PASS12
if(strncmp("flash.", (yyvsp[(2) - (4)].id), 6) && as3_pass==1) {
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2690 "parser.y"
+#line 2651 "parser.y"
{PASS12 (yyval.flags).flags=0;(yyval.flags).ns=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2691 "parser.y"
+#line 2652 "parser.y"
{PASS12 (yyval.flags)=(yyvsp[(1) - (1)].flags);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2692 "parser.y"
+#line 2653 "parser.y"
{PASS12 (yyval.flags)=(yyvsp[(1) - (1)].flags);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2693 "parser.y"
+#line 2654 "parser.y"
{
PASS12
(yyval.flags).flags=(yyvsp[(1) - (2)].flags).flags|(yyvsp[(2) - (2)].flags).flags;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2700 "parser.y"
+#line 2661 "parser.y"
{PASS12 (yyval.flags).flags=FLAG_PUBLIC;(yyval.flags).ns=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2701 "parser.y"
+#line 2662 "parser.y"
{PASS12 (yyval.flags).flags=FLAG_PRIVATE;(yyval.flags).ns=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2702 "parser.y"
+#line 2663 "parser.y"
{PASS12 (yyval.flags).flags=FLAG_PROTECTED;(yyval.flags).ns=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2703 "parser.y"
+#line 2664 "parser.y"
{PASS12 (yyval.flags).flags=FLAG_STATIC;(yyval.flags).ns=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2704 "parser.y"
+#line 2665 "parser.y"
{PASS12 (yyval.flags).flags=FLAG_DYNAMIC;(yyval.flags).ns=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2705 "parser.y"
+#line 2666 "parser.y"
{PASS12 (yyval.flags).flags=FLAG_FINAL;(yyval.flags).ns=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2706 "parser.y"
+#line 2667 "parser.y"
{PASS12 (yyval.flags).flags=FLAG_OVERRIDE;(yyval.flags).ns=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2707 "parser.y"
+#line 2668 "parser.y"
{PASS12 (yyval.flags).flags=FLAG_NATIVE;(yyval.flags).ns=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2708 "parser.y"
+#line 2669 "parser.y"
{PASS12 (yyval.flags).flags=FLAG_PACKAGEINTERNAL;(yyval.flags).ns=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2709 "parser.y"
+#line 2670 "parser.y"
{PASS12 (yyval.flags).flags=FLAG_NAMESPACE;
(yyval.flags).ns=(yyvsp[(1) - (1)].id);
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2713 "parser.y"
+#line 2674 "parser.y"
{PASS12 (yyval.classinfo)=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2714 "parser.y"
+#line 2675 "parser.y"
{PASS12 (yyval.classinfo)=(yyvsp[(2) - (2)].classinfo);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2716 "parser.y"
+#line 2677 "parser.y"
{PASS12 (yyval.classinfo_list)=list_new();}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2717 "parser.y"
+#line 2678 "parser.y"
{PASS12 (yyval.classinfo_list)=(yyvsp[(2) - (2)].classinfo_list);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2719 "parser.y"
+#line 2680 "parser.y"
{PASS12 (yyval.classinfo_list)=list_new();}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2720 "parser.y"
+#line 2681 "parser.y"
{PASS12 (yyval.classinfo_list)=(yyvsp[(2) - (2)].classinfo_list);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2724 "parser.y"
+#line 2685 "parser.y"
{PASS12 startclass(&(yyvsp[(1) - (6)].flags),(yyvsp[(3) - (6)].id),(yyvsp[(4) - (6)].classinfo),(yyvsp[(5) - (6)].classinfo_list));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2726 "parser.y"
+#line 2687 "parser.y"
{PASS12 endclass();(yyval.code)=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2730 "parser.y"
+#line 2691 "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));}
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2733 "parser.y"
+#line 2694 "parser.y"
{PASS12 endclass();(yyval.code)=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2742 "parser.y"
+#line 2703 "parser.y"
{PASS_ALWAYS as3_pass=(yyvsp[(1) - (4)].number_int);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2746 "parser.y"
+#line 2707 "parser.y"
{
code_t*c = state->cls->static_init->header;
c = code_append(c, (yyvsp[(1) - (1)].code));
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2757 "parser.y"
+#line 2718 "parser.y"
{
syntaxerror("variable declarations not allowed in interfaces");
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2760 "parser.y"
+#line 2721 "parser.y"
{
PASS12
(yyvsp[(1) - (8)].flags).flags |= FLAG_PUBLIC;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2775 "parser.y"
+#line 2755 "parser.y"
{PASS12 setslotstate(&(yyvsp[(1) - (2)].flags),(yyvsp[(2) - (2)].token));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2775 "parser.y"
+#line 2755 "parser.y"
{PASS12 (yyval.code)=(yyvsp[(4) - (4)].code);setslotstate(0, 0);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2777 "parser.y"
+#line 2757 "parser.y"
{PASS12 (yyval.code)=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2778 "parser.y"
+#line 2758 "parser.y"
{PASS12 (yyval.code)=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2781 "parser.y"
+#line 2761 "parser.y"
{
PASS12
int flags = slotstate_flags->flags;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2865 "parser.y"
+#line 2845 "parser.y"
{(yyval.constant)=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2866 "parser.y"
+#line 2846 "parser.y"
{(yyval.constant)=(yyvsp[(2) - (2)].constant);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2868 "parser.y"
+#line 2848 "parser.y"
{(yyval.constant) = constant_new_int((yyvsp[(1) - (1)].number_uint));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2869 "parser.y"
+#line 2849 "parser.y"
{(yyval.constant) = constant_new_int((yyvsp[(1) - (1)].number_int));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2870 "parser.y"
+#line 2850 "parser.y"
{(yyval.constant) = constant_new_uint((yyvsp[(1) - (1)].number_uint));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2871 "parser.y"
+#line 2851 "parser.y"
{(yyval.constant) = constant_new_float((yyvsp[(1) - (1)].number_float));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2872 "parser.y"
+#line 2852 "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;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2874 "parser.y"
+#line 2854 "parser.y"
{(yyval.constant) = constant_new_true((yyvsp[(1) - (1)].token));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2875 "parser.y"
+#line 2855 "parser.y"
{(yyval.constant) = constant_new_false((yyvsp[(1) - (1)].token));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2876 "parser.y"
+#line 2856 "parser.y"
{(yyval.constant) = constant_new_null((yyvsp[(1) - (1)].token));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2877 "parser.y"
+#line 2857 "parser.y"
{
if(!strcmp((yyvsp[(1) - (1)].id), "NaN")) {
(yyval.constant) = constant_new_float(__builtin_nan(""));
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2889 "parser.y"
+#line 2869 "parser.y"
{
PASS12
memset(&(yyval.params),0,sizeof((yyval.params)));
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2893 "parser.y"
+#line 2873 "parser.y"
{
PASS12
(yyval.params)=(yyvsp[(1) - (1)].params);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2899 "parser.y"
+#line 2879 "parser.y"
{
PASS12
memset(&(yyval.params),0,sizeof((yyval.params)));
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2905 "parser.y"
+#line 2885 "parser.y"
{
PASS12
(yyval.params) =(yyvsp[(1) - (4)].params);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2913 "parser.y"
+#line 2893 "parser.y"
{
PASS12
(yyval.params) = (yyvsp[(1) - (3)].params);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2918 "parser.y"
+#line 2898 "parser.y"
{
PASS12
memset(&(yyval.params),0,sizeof((yyval.params)));
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2924 "parser.y"
+#line 2904 "parser.y"
{
PASS12
(yyval.param) = rfx_calloc(sizeof(param_t));
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2932 "parser.y"
+#line 2912 "parser.y"
{
PASS12
(yyval.param) = rfx_calloc(sizeof(param_t));
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2942 "parser.y"
+#line 2922 "parser.y"
{PASS12 (yyval.token)=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2945 "parser.y"
+#line 2925 "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;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2946 "parser.y"
+#line 2926 "parser.y"
{
PASS1
endfunction(&(yyvsp[(1) - (12)].flags),(yyvsp[(3) - (12)].token),(yyvsp[(4) - (12)].id),&(yyvsp[(6) - (12)].params),0,0);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2962 "parser.y"
+#line 2942 "parser.y"
{PASS12 (yyval.id)=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2964 "parser.y"
+#line 2944 "parser.y"
{PASS12 innerfunction((yyvsp[(2) - (7)].id),&(yyvsp[(4) - (7)].params),(yyvsp[(6) - (7)].classinfo));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2965 "parser.y"
+#line 2945 "parser.y"
{
PASS1
endfunction(0,0,(yyvsp[(2) - (10)].id),&(yyvsp[(4) - (10)].params),0,0);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 2987 "parser.y"
+#line 2967 "parser.y"
{
PASS1 NEW(unresolvedinfo_t,c);
memset(c, 0, sizeof(*c));
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3006 "parser.y"
+#line 2986 "parser.y"
{
PASS1 NEW(unresolvedinfo_t,c);
memset(c, 0, sizeof(*c));
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3023 "parser.y"
+#line 3003 "parser.y"
{PASS12 (yyval.classinfo_list)=list_new();list_append((yyval.classinfo_list), (yyvsp[(1) - (1)].classinfo));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3024 "parser.y"
+#line 3004 "parser.y"
{PASS12 (yyval.classinfo_list)=(yyvsp[(1) - (3)].classinfo_list);list_append((yyval.classinfo_list),(yyvsp[(3) - (3)].classinfo));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3026 "parser.y"
+#line 3006 "parser.y"
{PASS12 (yyval.classinfo)=(yyvsp[(1) - (1)].classinfo);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3027 "parser.y"
+#line 3007 "parser.y"
{PASS12 (yyval.classinfo)=registry_getanytype();}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3028 "parser.y"
+#line 3008 "parser.y"
{PASS12 (yyval.classinfo)=registry_getanytype();}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3037 "parser.y"
+#line 3017 "parser.y"
{PASS12 (yyval.classinfo)=(yyvsp[(2) - (2)].classinfo);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3038 "parser.y"
+#line 3018 "parser.y"
{PASS12 (yyval.classinfo)=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3042 "parser.y"
+#line 3022 "parser.y"
{(yyval.value_list).cc=0;(yyval.value_list).number=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3043 "parser.y"
+#line 3023 "parser.y"
{(yyval.value_list)=(yyvsp[(2) - (3)].value_list);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3045 "parser.y"
+#line 3025 "parser.y"
{(yyval.value_list).cc=0;(yyval.value_list).number=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3049 "parser.y"
+#line 3029 "parser.y"
{(yyval.value_list).number=1;
(yyval.value_list).cc = (yyvsp[(1) - (1)].value).c;
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3053 "parser.y"
+#line 3033 "parser.y"
{(yyval.value_list) = (yyvsp[(1) - (2)].value_list);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3054 "parser.y"
+#line 3034 "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);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3060 "parser.y"
+#line 3040 "parser.y"
{
(yyval.value).c = (yyvsp[(2) - (4)].value).c;
if((yyval.value).c->opcode == OPCODE_COERCE_A) (yyval.value).c = code_cutlast((yyval.value).c);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3096 "parser.y"
+#line 3076 "parser.y"
{
(yyval.value).c = (yyvsp[(1) - (4)].value).c;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3142 "parser.y"
+#line 3122 "parser.y"
{
if(!state->cls) syntaxerror("super() not allowed outside of a class");
if(!state->method) syntaxerror("super() not allowed outside of a function");
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3163 "parser.y"
+#line 3143 "parser.y"
{
(yyval.value).c = (yyvsp[(2) - (2)].value).c;
if((yyval.value).c->opcode == OPCODE_COERCE_A) {
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3184 "parser.y"
+#line 3164 "parser.y"
{
(yyval.code) = abc_returnvoid(0);
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3187 "parser.y"
+#line 3167 "parser.y"
{
(yyval.code) = (yyvsp[(2) - (2)].value).c;
(yyval.code) = abc_returnvalue((yyval.code));
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3194 "parser.y"
+#line 3174 "parser.y"
{(yyval.value)=(yyvsp[(1) - (1)].value);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3195 "parser.y"
+#line 3175 "parser.y"
{(yyval.value) = (yyvsp[(1) - (1)].value);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3196 "parser.y"
+#line 3176 "parser.y"
{
(yyval.value).c = (yyvsp[(1) - (3)].value).c;
(yyval.value).c = cut_last_push((yyval.value).c);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3202 "parser.y"
+#line 3182 "parser.y"
{
(yyval.code)=cut_last_push((yyvsp[(1) - (1)].value).c);
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3208 "parser.y"
+#line 3188 "parser.y"
{(yyval.value) = (yyvsp[(1) - (1)].value);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3210 "parser.y"
+#line 3190 "parser.y"
{(yyval.value) = (yyvsp[(1) - (1)].value);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3211 "parser.y"
+#line 3191 "parser.y"
{(yyval.value) = (yyvsp[(1) - (1)].value);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3212 "parser.y"
+#line 3192 "parser.y"
{(yyval.value) = (yyvsp[(1) - (1)].value);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3216 "parser.y"
+#line 3196 "parser.y"
{
(yyval.value).c = 0;
namespace_t ns = {ACCESS_PACKAGE, ""};
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3233 "parser.y"
+#line 3213 "parser.y"
{(yyval.value).c = abc_pushbyte(0, (yyvsp[(1) - (1)].number_uint));
//MULTINAME(m, registry_getintclass());
//$$.c = abc_coerce2($$.c, &m); // FIXME
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3238 "parser.y"
+#line 3218 "parser.y"
{(yyval.value).c = abc_pushshort(0, (yyvsp[(1) - (1)].number_uint));
(yyval.value).t = TYPE_INT;
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3241 "parser.y"
+#line 3221 "parser.y"
{(yyval.value).c = abc_pushint(0, (yyvsp[(1) - (1)].number_int));
(yyval.value).t = TYPE_INT;
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3244 "parser.y"
+#line 3224 "parser.y"
{(yyval.value).c = abc_pushuint(0, (yyvsp[(1) - (1)].number_uint));
(yyval.value).t = TYPE_UINT;
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3247 "parser.y"
+#line 3227 "parser.y"
{(yyval.value).c = abc_pushdouble(0, (yyvsp[(1) - (1)].number_float));
(yyval.value).t = TYPE_FLOAT;
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3250 "parser.y"
+#line 3230 "parser.y"
{(yyval.value).c = abc_pushstring2(0, &(yyvsp[(1) - (1)].str));free((char*)(yyvsp[(1) - (1)].str).str);
(yyval.value).t = TYPE_STRING;
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3253 "parser.y"
+#line 3233 "parser.y"
{(yyval.value).c = abc_pushundefined(0);
(yyval.value).t = TYPE_ANY;
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3256 "parser.y"
+#line 3236 "parser.y"
{(yyval.value).c = abc_pushtrue(0);
(yyval.value).t = TYPE_BOOLEAN;
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3259 "parser.y"
+#line 3239 "parser.y"
{(yyval.value).c = abc_pushfalse(0);
(yyval.value).t = TYPE_BOOLEAN;
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3262 "parser.y"
+#line 3242 "parser.y"
{(yyval.value).c = abc_pushnull(0);
(yyval.value).t = TYPE_NULL;
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3266 "parser.y"
+#line 3246 "parser.y"
{(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);(yyval.value).c = abc_greaterequals((yyval.value).c);(yyval.value).c=abc_not((yyval.value).c);
(yyval.value).t = TYPE_BOOLEAN;
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3269 "parser.y"
+#line 3249 "parser.y"
{(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);(yyval.value).c = abc_greaterthan((yyval.value).c);
(yyval.value).t = TYPE_BOOLEAN;
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3272 "parser.y"
+#line 3252 "parser.y"
{(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);(yyval.value).c = abc_greaterthan((yyval.value).c);(yyval.value).c=abc_not((yyval.value).c);
(yyval.value).t = TYPE_BOOLEAN;
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3275 "parser.y"
+#line 3255 "parser.y"
{(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);(yyval.value).c = abc_greaterequals((yyval.value).c);
(yyval.value).t = TYPE_BOOLEAN;
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3278 "parser.y"
+#line 3258 "parser.y"
{(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);(yyval.value).c = abc_equals((yyval.value).c);
(yyval.value).t = TYPE_BOOLEAN;
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3281 "parser.y"
+#line 3261 "parser.y"
{(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);(yyval.value).c = abc_strictequals((yyval.value).c);
(yyval.value).t = TYPE_BOOLEAN;
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3284 "parser.y"
+#line 3264 "parser.y"
{(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);(yyval.value).c = abc_strictequals((yyval.value).c);(yyval.value).c = abc_not((yyval.value).c);
(yyval.value).t = TYPE_BOOLEAN;
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3287 "parser.y"
+#line 3267 "parser.y"
{(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);(yyval.value).c = abc_equals((yyval.value).c);(yyval.value).c = abc_not((yyval.value).c);
(yyval.value).t = TYPE_BOOLEAN;
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3291 "parser.y"
+#line 3271 "parser.y"
{(yyval.value).t = join_types((yyvsp[(1) - (3)].value).t, (yyvsp[(3) - (3)].value).t, 'O');
(yyval.value).c = (yyvsp[(1) - (3)].value).c;
(yyval.value).c = converttype((yyval.value).c, (yyvsp[(1) - (3)].value).t, (yyval.value).t);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3302 "parser.y"
+#line 3282 "parser.y"
{
(yyval.value).t = join_types((yyvsp[(1) - (3)].value).t, (yyvsp[(3) - (3)].value).t, 'A');
/*printf("%08x:\n",$1.t);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3320 "parser.y"
+#line 3300 "parser.y"
{(yyval.value).c=(yyvsp[(2) - (2)].value).c;
(yyval.value).c = abc_not((yyval.value).c);
(yyval.value).t = TYPE_BOOLEAN;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3325 "parser.y"
+#line 3305 "parser.y"
{(yyval.value).c=(yyvsp[(2) - (2)].value).c;
(yyval.value).c = abc_bitnot((yyval.value).c);
(yyval.value).t = TYPE_INT;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3330 "parser.y"
+#line 3310 "parser.y"
{(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);
(yyval.value).c = abc_bitand((yyval.value).c);
(yyval.value).t = TYPE_INT;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3335 "parser.y"
+#line 3315 "parser.y"
{(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);
(yyval.value).c = abc_bitxor((yyval.value).c);
(yyval.value).t = TYPE_INT;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3340 "parser.y"
+#line 3320 "parser.y"
{(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);
(yyval.value).c = abc_bitor((yyval.value).c);
(yyval.value).t = TYPE_INT;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3345 "parser.y"
+#line 3325 "parser.y"
{(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);
(yyval.value).c = abc_rshift((yyval.value).c);
(yyval.value).t = TYPE_INT;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3349 "parser.y"
+#line 3329 "parser.y"
{(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);
(yyval.value).c = abc_urshift((yyval.value).c);
(yyval.value).t = TYPE_INT;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3353 "parser.y"
+#line 3333 "parser.y"
{(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);
(yyval.value).c = abc_lshift((yyval.value).c);
(yyval.value).t = TYPE_INT;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3358 "parser.y"
+#line 3338 "parser.y"
{(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);
(yyval.value).c = abc_divide((yyval.value).c);
(yyval.value).t = TYPE_NUMBER;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3362 "parser.y"
+#line 3342 "parser.y"
{(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);
(yyval.value).c = abc_modulo((yyval.value).c);
(yyval.value).t = TYPE_NUMBER;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3366 "parser.y"
+#line 3346 "parser.y"
{(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);
if(BOTH_INT((yyvsp[(1) - (3)].value).t, (yyvsp[(3) - (3)].value).t)) {
(yyval.value).c = abc_add_i((yyval.value).c);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3375 "parser.y"
+#line 3355 "parser.y"
{(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);
if(BOTH_INT((yyvsp[(1) - (3)].value).t,(yyvsp[(3) - (3)].value).t)) {
(yyval.value).c = abc_subtract_i((yyval.value).c);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3384 "parser.y"
+#line 3364 "parser.y"
{(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);
if(BOTH_INT((yyvsp[(1) - (3)].value).t,(yyvsp[(3) - (3)].value).t)) {
(yyval.value).c = abc_multiply_i((yyval.value).c);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3394 "parser.y"
+#line 3374 "parser.y"
{(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c,(yyvsp[(3) - (3)].value).c);
(yyval.value).c = abc_in((yyval.value).c);
(yyval.value).t = TYPE_BOOLEAN;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3399 "parser.y"
+#line 3379 "parser.y"
{char use_astype=0; // flash player's astype works differently than astypelate
if(use_astype && TYPE_IS_CLASS((yyvsp[(3) - (3)].value).t) && (yyvsp[(3) - (3)].value).t->data) {
MULTINAME(m, (classinfo_t*)((yyvsp[(3) - (3)].value).t->data));
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3412 "parser.y"
+#line 3392 "parser.y"
{(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c, (yyvsp[(3) - (3)].value).c);
(yyval.value).c = abc_instanceof((yyval.value).c);
(yyval.value).t = TYPE_BOOLEAN;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3417 "parser.y"
+#line 3397 "parser.y"
{(yyval.value).c = code_append((yyvsp[(1) - (3)].value).c, (yyvsp[(3) - (3)].value).c);
(yyval.value).c = abc_istypelate((yyval.value).c);
(yyval.value).t = TYPE_BOOLEAN;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3422 "parser.y"
+#line 3402 "parser.y"
{
(yyval.value).c = (yyvsp[(3) - (4)].value).c;
(yyval.value).c = abc_typeof((yyval.value).c);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3428 "parser.y"
+#line 3408 "parser.y"
{
(yyval.value).c = cut_last_push((yyvsp[(2) - (2)].value).c);
(yyval.value).c = abc_pushundefined((yyval.value).c);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3434 "parser.y"
+#line 3414 "parser.y"
{ (yyval.value).c = abc_pushundefined(0);
(yyval.value).t = TYPE_ANY;
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3438 "parser.y"
+#line 3418 "parser.y"
{(yyval.value)=(yyvsp[(2) - (3)].value);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3440 "parser.y"
+#line 3420 "parser.y"
{
- (yyval.value)=(yyvsp[(2) - (2)].value);
+ (yyval.value).c = (yyvsp[(2) - (2)].value).c;
if(IS_INT((yyvsp[(2) - (2)].value).t)) {
(yyval.value).c=abc_negate_i((yyval.value).c);
(yyval.value).t = TYPE_INT;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3451 "parser.y"
+#line 3431 "parser.y"
{
(yyval.value).c = (yyvsp[(1) - (4)].value).c;
(yyval.value).c = code_append((yyval.value).c, (yyvsp[(3) - (4)].value).c);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3460 "parser.y"
+#line 3440 "parser.y"
{
(yyval.value).c = code_new();
(yyval.value).c = code_append((yyval.value).c, (yyvsp[(2) - (3)].value_list).cc);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3467 "parser.y"
+#line 3447 "parser.y"
{(yyval.value_list).cc=0;(yyval.value_list).number=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3468 "parser.y"
+#line 3448 "parser.y"
{(yyval.value_list)=(yyvsp[(1) - (1)].value_list);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3470 "parser.y"
+#line 3450 "parser.y"
{
(yyval.value_list).cc = 0;
(yyval.value_list).cc = code_append((yyval.value_list).cc, (yyvsp[(1) - (3)].value).c);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3476 "parser.y"
+#line 3456 "parser.y"
{
(yyval.value_list).cc = (yyvsp[(1) - (5)].value_list).cc;
(yyval.value_list).number = (yyvsp[(1) - (5)].value_list).number+2;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3485 "parser.y"
+#line 3465 "parser.y"
{
(yyval.value).c = code_new();
(yyval.value).c = code_append((yyval.value).c, (yyvsp[(2) - (3)].value_list).cc);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3492 "parser.y"
+#line 3472 "parser.y"
{
code_t*c = (yyvsp[(3) - (3)].value).c;
if(BOTH_INT((yyvsp[(1) - (3)].value).t,(yyvsp[(3) - (3)].value).t)) {
c=abc_multiply(c);
}
c=converttype(c, join_types((yyvsp[(1) - (3)].value).t, (yyvsp[(3) - (3)].value).t, '*'), (yyvsp[(1) - (3)].value).t);
- (yyval.value).c = toreadwrite((yyvsp[(1) - (3)].value).c, c, 0, 0);
+ (yyval.value).c = toreadwrite((yyvsp[(1) - (3)].value).c, c, 0, 0, 1);
(yyval.value).t = (yyvsp[(1) - (3)].value).t;
}
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3504 "parser.y"
+#line 3484 "parser.y"
{
code_t*c = abc_modulo((yyvsp[(3) - (3)].value).c);
c=converttype(c, join_types((yyvsp[(1) - (3)].value).t, (yyvsp[(3) - (3)].value).t, '%'), (yyvsp[(1) - (3)].value).t);
- (yyval.value).c = toreadwrite((yyvsp[(1) - (3)].value).c, c, 0, 0);
+ (yyval.value).c = toreadwrite((yyvsp[(1) - (3)].value).c, c, 0, 0, 1);
(yyval.value).t = (yyvsp[(1) - (3)].value).t;
}
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3510 "parser.y"
+#line 3490 "parser.y"
{
code_t*c = abc_lshift((yyvsp[(3) - (3)].value).c);
c=converttype(c, join_types((yyvsp[(1) - (3)].value).t, (yyvsp[(3) - (3)].value).t, '<'), (yyvsp[(1) - (3)].value).t);
- (yyval.value).c = toreadwrite((yyvsp[(1) - (3)].value).c, c, 0, 0);
+ (yyval.value).c = toreadwrite((yyvsp[(1) - (3)].value).c, c, 0, 0, 1);
(yyval.value).t = (yyvsp[(1) - (3)].value).t;
}
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3516 "parser.y"
+#line 3496 "parser.y"
{
code_t*c = abc_rshift((yyvsp[(3) - (3)].value).c);
c=converttype(c, join_types((yyvsp[(1) - (3)].value).t, (yyvsp[(3) - (3)].value).t, '>'), (yyvsp[(1) - (3)].value).t);
- (yyval.value).c = toreadwrite((yyvsp[(1) - (3)].value).c, c, 0, 0);
+ (yyval.value).c = toreadwrite((yyvsp[(1) - (3)].value).c, c, 0, 0, 1);
(yyval.value).t = (yyvsp[(1) - (3)].value).t;
}
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3522 "parser.y"
+#line 3502 "parser.y"
{
code_t*c = abc_urshift((yyvsp[(3) - (3)].value).c);
c=converttype(c, join_types((yyvsp[(1) - (3)].value).t, (yyvsp[(3) - (3)].value).t, 'U'), (yyvsp[(1) - (3)].value).t);
- (yyval.value).c = toreadwrite((yyvsp[(1) - (3)].value).c, c, 0, 0);
+ (yyval.value).c = toreadwrite((yyvsp[(1) - (3)].value).c, c, 0, 0, 1);
(yyval.value).t = (yyvsp[(1) - (3)].value).t;
}
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3528 "parser.y"
+#line 3508 "parser.y"
{
code_t*c = abc_divide((yyvsp[(3) - (3)].value).c);
c=converttype(c, join_types((yyvsp[(1) - (3)].value).t, (yyvsp[(3) - (3)].value).t, '/'), (yyvsp[(1) - (3)].value).t);
- (yyval.value).c = toreadwrite((yyvsp[(1) - (3)].value).c, c, 0, 0);
+ (yyval.value).c = toreadwrite((yyvsp[(1) - (3)].value).c, c, 0, 0, 1);
(yyval.value).t = (yyvsp[(1) - (3)].value).t;
}
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3534 "parser.y"
+#line 3514 "parser.y"
{
code_t*c = abc_bitor((yyvsp[(3) - (3)].value).c);
c=converttype(c, TYPE_INT, (yyvsp[(1) - (3)].value).t);
- (yyval.value).c = toreadwrite((yyvsp[(1) - (3)].value).c, c, 0, 0);
+ (yyval.value).c = toreadwrite((yyvsp[(1) - (3)].value).c, c, 0, 0, 1);
(yyval.value).t = (yyvsp[(1) - (3)].value).t;
}
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3540 "parser.y"
+#line 3520 "parser.y"
{
code_t*c = abc_bitxor((yyvsp[(3) - (3)].value).c);
c=converttype(c, TYPE_INT, (yyvsp[(1) - (3)].value).t);
- (yyval.value).c = toreadwrite((yyvsp[(1) - (3)].value).c, c, 0, 0);
+ (yyval.value).c = toreadwrite((yyvsp[(1) - (3)].value).c, c, 0, 0, 1);
(yyval.value).t = (yyvsp[(1) - (3)].value).t;
}
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3546 "parser.y"
+#line 3526 "parser.y"
{
code_t*c = (yyvsp[(3) - (3)].value).c;
c=converttype(c, join_types((yyvsp[(1) - (3)].value).t, (yyvsp[(3) - (3)].value).t, '+'), (yyvsp[(1) - (3)].value).t);
}
- (yyval.value).c = toreadwrite((yyvsp[(1) - (3)].value).c, c, 0, 0);
+ (yyval.value).c = toreadwrite((yyvsp[(1) - (3)].value).c, c, 0, 0, 1);
(yyval.value).t = (yyvsp[(1) - (3)].value).t;
}
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3559 "parser.y"
+#line 3539 "parser.y"
{ code_t*c = (yyvsp[(3) - (3)].value).c;
if(TYPE_IS_INT((yyvsp[(1) - (3)].value).t)) {
c=abc_subtract_i(c);
c=converttype(c, join_types((yyvsp[(1) - (3)].value).t, (yyvsp[(3) - (3)].value).t, '-'), (yyvsp[(1) - (3)].value).t);
}
- (yyval.value).c = toreadwrite((yyvsp[(1) - (3)].value).c, c, 0, 0);
+ (yyval.value).c = toreadwrite((yyvsp[(1) - (3)].value).c, c, 0, 0, 1);
(yyval.value).t = (yyvsp[(1) - (3)].value).t;
}
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3570 "parser.y"
+#line 3550 "parser.y"
{ code_t*c = 0;
c = code_append(c, (yyvsp[(3) - (3)].value).c);
c = converttype(c, (yyvsp[(3) - (3)].value).t, (yyvsp[(1) - (3)].value).t);
- (yyval.value).c = toreadwrite((yyvsp[(1) - (3)].value).c, c, 1, 0);
+ (yyval.value).c = toreadwrite((yyvsp[(1) - (3)].value).c, c, 1, 0, 1);
(yyval.value).t = (yyvsp[(1) - (3)].value).t;
}
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3577 "parser.y"
+#line 3557 "parser.y"
{
(yyval.value).t = join_types((yyvsp[(3) - (5)].value).t,(yyvsp[(5) - (5)].value).t,'?');
(yyval.value).c = (yyvsp[(1) - (5)].value).c;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3590 "parser.y"
+#line 3570 "parser.y"
{ code_t*c = 0;
classinfo_t*type = (yyvsp[(1) - (2)].value).t;
if(is_getlocal((yyvsp[(1) - (2)].value).c) && (TYPE_IS_INT((yyvsp[(1) - (2)].value).t) || TYPE_IS_NUMBER((yyvsp[(1) - (2)].value).t))) {
type = TYPE_NUMBER;
}
c=converttype(c, type, (yyvsp[(1) - (2)].value).t);
- (yyval.value).c = toreadwrite((yyvsp[(1) - (2)].value).c, c, 0, 1);
+ (yyval.value).c = toreadwrite((yyvsp[(1) - (2)].value).c, c, 0, 1, 1);
(yyval.value).t = (yyvsp[(1) - (2)].value).t;
}
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3617 "parser.y"
+#line 3597 "parser.y"
{ code_t*c = 0;
classinfo_t*type = (yyvsp[(1) - (2)].value).t;
if(TYPE_IS_INT(type) || TYPE_IS_UINT(type)) {
type = TYPE_NUMBER;
}
c=converttype(c, type, (yyvsp[(1) - (2)].value).t);
- (yyval.value).c = toreadwrite((yyvsp[(1) - (2)].value).c, c, 0, 1);
+ (yyval.value).c = toreadwrite((yyvsp[(1) - (2)].value).c, c, 0, 1, 1);
(yyval.value).t = (yyvsp[(1) - (2)].value).t;
}
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3631 "parser.y"
+#line 3611 "parser.y"
{ code_t*c = 0;
classinfo_t*type = (yyvsp[(2) - (2)].value).t;
if(TYPE_IS_INT(type) || TYPE_IS_UINT(type)) {
type = TYPE_NUMBER;
}
c=converttype(c, type, (yyvsp[(2) - (2)].value).t);
- (yyval.value).c = toreadwrite((yyvsp[(2) - (2)].value).c, c, 0, 0);
+ (yyval.value).c = toreadwrite((yyvsp[(2) - (2)].value).c, c, 0, 0, 1);
(yyval.value).t = (yyvsp[(2) - (2)].value).t;
}
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3645 "parser.y"
+#line 3625 "parser.y"
{ code_t*c = 0;
classinfo_t*type = (yyvsp[(2) - (2)].value).t;
if(TYPE_IS_INT(type) || TYPE_IS_UINT(type)) {
type = TYPE_NUMBER;
}
c=converttype(c, type, (yyvsp[(2) - (2)].value).t);
- (yyval.value).c = toreadwrite((yyvsp[(2) - (2)].value).c, c, 0, 0);
+ (yyval.value).c = toreadwrite((yyvsp[(2) - (2)].value).c, c, 0, 0, 1);
(yyval.value).t = (yyvsp[(2) - (2)].value).t;
}
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3660 "parser.y"
+#line 3640 "parser.y"
{ if(!state->cls->info)
syntaxerror("super keyword not allowed outside a class");
classinfo_t*t = state->cls->info->superclass;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3674 "parser.y"
+#line 3654 "parser.y"
{
// attribute TODO
(yyval.value).c = abc_pushundefined(0);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3681 "parser.y"
+#line 3661 "parser.y"
{
// child attribute TODO
(yyval.value).c = abc_pushundefined(0);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3688 "parser.y"
+#line 3668 "parser.y"
{
// namespace declaration TODO
(yyval.value).c = abc_pushundefined(0);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3695 "parser.y"
+#line 3675 "parser.y"
{
// descendants TODO
(yyval.value).c = abc_pushundefined(0);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3702 "parser.y"
+#line 3682 "parser.y"
{
// filter TODO
(yyval.value).c = abc_pushundefined(0);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3717 "parser.y"
+#line 3697 "parser.y"
{
(yyval.value).c = (yyvsp[(1) - (3)].value).c;
classinfo_t*t = (yyvsp[(1) - (3)].value).t;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3774 "parser.y"
+#line 3754 "parser.y"
{
PASS1
/* Queue unresolved identifiers for checking against the parent
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3883 "parser.y"
+#line 3863 "parser.y"
{
PASS12
NEW(namespace_decl_t,n);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3890 "parser.y"
+#line 3870 "parser.y"
{
PASS12
NEW(namespace_decl_t,n);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3897 "parser.y"
+#line 3877 "parser.y"
{
PASS12
NEW(namespace_decl_t,n);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3904 "parser.y"
+#line 3884 "parser.y"
{
PASS12
trie_put(active_namespaces, (yyvsp[(2) - (2)].namespace_decl)->name, (void*)(yyvsp[(2) - (2)].namespace_decl)->url);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3919 "parser.y"
+#line 3908 "parser.y"
{
PASS12
const char*url = (yyvsp[(3) - (3)].classinfo)->name;
/* Line 1464 of skeleton.m4 */
-#line 8350 "parser.tab.c"
+#line 8353 "parser.tab.c"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
#include "abc.h"
#include "pool.h"
#include "files.h"
+#include "common.h"
#include "tokenizer.h"
#include "registry.h"
#include "code.h"
return 0; //make gcc happy
}
+static void parsererror(const char*file, int line, const char*f)
+{
+ syntaxerror("internal error in %s, %s:%d", f, file, line);
+}
+
+#define parserassert(b) {if(!(b)) parsererror(__FILE__, __LINE__,__func__);}
+
static char* concat2(const char* t1, const char* t2)
{
typedef struct _import {
char*package;
} import_t;
-
DECLARE_LIST(import);
DECLARE(methodstate);
static namespace_list_t nl1 = {&ns1,&nl2};
static namespace_set_t nopackage_namespace_set = {&nl1};
-dict_t*conditionals=0;
+static dict_t*definitions=0;
void as3_set_definition(const char*c)
{
- if(!conditionals)
- conditionals = dict_new();
- if(!dict_contains(conditionals,c))
- dict_put(conditionals,c,0);
+ if(!definitions)
+ definitions = dict_new();
+ if(!dict_contains(definitions,c))
+ dict_put(definitions,c,0);
}
static void new_state()
if(oldstate)
state->active_namespace_urls = list_clone(oldstate->active_namespace_urls);
}
-static void state_has_imports()
-{
- state->wildcard_imports = list_clone(state->wildcard_imports);
- state->imports = dict_clone(state->imports);
- state->has_own_imports = 1;
-}
-static void import_toplevel(const char*package)
-{
- char* s = strdup(package);
- while(1) {
- dict_put(state->import_toplevel_packages, s, 0);
- char*x = strrchr(s, '.');
- if(!x)
- break;
- *x = 0;
- }
- free(s);
-}
static void state_destroy(state_t*state)
{
void* finish_parser()
{
dict_free_all(global->file2token2info, 1, (void*)dict_destroy);
-
global->token2info=0;
-
return global->file;
}
-
-static void xx_scopetest()
-{
- /* findpropstrict doesn't just return a scope object- it
- also makes it "active" somehow. Push local_0 on the
- scope stack and read it back with findpropstrict, it'll
- contain properties like "trace". Trying to find the same
- property on a "vanilla" local_0 yields only a "undefined" */
- //c = abc_findpropstrict(c, "[package]::trace");
-
- /*c = abc_getlocal_0(c);
- c = abc_findpropstrict(c, "[package]::trace");
- c = abc_coerce_a(c);
- c = abc_setlocal_1(c);
-
- c = abc_pushbyte(c, 0);
- c = abc_setlocal_2(c);
-
- code_t*xx = c = abc_label(c);
- c = abc_findpropstrict(c, "[package]::trace");
- c = abc_pushstring(c, "prop:");
- c = abc_hasnext2(c, 1, 2);
- c = abc_dup(c);
- c = abc_setlocal_3(c);
- c = abc_callpropvoid(c, "[package]::trace", 2);
- c = abc_getlocal_3(c);
- c = abc_kill(c, 3);
- c = abc_iftrue(c,xx);*/
-}
-
typedef struct _variable {
int index;
classinfo_t*type;
syntaxerror("undefined variable: %s", name);
return v;
}
+
static char variable_exists(char*name)
{
return dict_contains(state->vars, name);
}
-code_t*defaultvalue(code_t*c, classinfo_t*type);
+
+static code_t*defaultvalue(code_t*c, classinfo_t*type)
+{
+ if(TYPE_IS_INT(type)) {
+ c = abc_pushbyte(c, 0);
+ } else if(TYPE_IS_UINT(type)) {
+ c = abc_pushuint(c, 0);
+ } else if(TYPE_IS_FLOAT(type)) {
+ c = abc_pushnan(c);
+ } else if(TYPE_IS_BOOLEAN(type)) {
+ c = abc_pushfalse(c);
+ } else if(!type) {
+ //c = abc_pushundefined(c);
+ syntaxerror("internal error: can't generate default value for * type");
+ } else {
+ c = abc_pushnull(c);
+ MULTINAME(m, type);
+ c = abc_coerce2(c, &m);
+ }
+ return c;
+}
static int alloc_local()
{
return new_variable(TEMPVARNAME, 0, 0, 0);
}
-code_t* var_block(code_t*body)
+static code_t* var_block(code_t*body)
{
code_t*c = 0;
code_t*k = 0;
return c;
}
-void unknown_variable(char*name)
+static void unknown_variable(char*name)
{
if(!state->method->unresolved_variables)
state->method->unresolved_variables = dict_new();
dict_put(state->method->unresolved_variables, name, 0);
}
-#define parserassert(b) {if(!(b)) parsererror(__FILE__, __LINE__,__func__);}
-
-static void parsererror(const char*file, int line, const char*f)
-{
- syntaxerror("internal error in %s, %s:%d", f, file, line);
-}
-
-
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
return c;
}
-
static void startpackage(char*name)
{
new_state();
- /*printf("entering package \"%s\"\n", name);*/
state->package = strdup(name);
}
static void endpackage()
{
- /*printf("leaving package \"%s\"\n", state->package);*/
-
//used e.g. in classinfo_register:
//free(state->package);state->package=0;
-
old_state();
}
return registry_findmember_nsset(cls, state->active_namespace_urls, name, recurse);
}
-void add_active_url(const char*url)
-{
- NEW(namespace_t,n);
- n->name = url;
- list_append(state->active_namespace_urls, n);
-}
-
static void function_initvars(methodstate_t*m, params_t*params, int flags, char var0)
{
if(var0) {
}
}
-static int slotstate_varconst = 0;
-static modifiers_t*slotstate_flags = 0;
-static void setslotstate(modifiers_t* flags, int varconst)
-{
- slotstate_varconst = varconst;
- slotstate_flags = flags;
- if(state->cls) {
- if(flags && flags->flags&FLAG_STATIC) {
- state->method = state->cls->static_init;
- } else {
- state->method = state->cls->init;
- }
- } else {
- parserassert(state->method);
- }
-}
-
static void endclass()
{
if(as3_pass == 2) {
char*name = string_cstr(c->data[0]);
syntaxerror("Unresolved \"continue %s\"", name);
}
+ if(c->opcode == OPCODE___RETHROW__) {
+ syntaxerror("Unresolved \"rethrow\"");
+ }
+ if(c->opcode == OPCODE___FALLTHROUGH__) {
+ syntaxerror("Unresolved \"fallthrough\"");
+ }
if(c->opcode == OPCODE___PUSHPACKAGE__) {
char*name = string_cstr(c->data[0]);
syntaxerror("Can't reference a package (%s) as such", name);
}
}
-
static void check_constant_against_type(classinfo_t*t, constant_t*c)
{
- return;
#define xassert(b) if(!(b)) syntaxerror("Invalid default value %s for type '%s'", constant_tostring(c), t->name)
if(TYPE_IS_NUMBER(t)) {
xassert(c->type == CONSTANT_FLOAT
return 0;
}
-char is_subtype_of(classinfo_t*type, classinfo_t*supertype)
-{
- return 1; // FIXME
-}
-
void breakjumpsto(code_t*c, char*name, code_t*jump)
{
while(c) {
}
}
+/* TODO: move this to ast.c */
#define IS_INT(a) (TYPE_IS_INT((a)) || TYPE_IS_UINT((a)))
#define IS_NUMBER_OR_INT(a) (TYPE_IS_INT((a)) || TYPE_IS_UINT((a)) || TYPE_IS_NUMBER((a)))
#define BOTH_INT(a,b) (IS_INT(a) && IS_INT(b))
-
-classinfo_t*join_types(classinfo_t*type1, classinfo_t*type2, char op)
+static classinfo_t*join_types(classinfo_t*type1, classinfo_t*type2, char op)
{
if(!type1 || !type2)
return registry_getanytype();
return type1;
return registry_getanytype();
}
+static char is_getlocal(code_t*c)
+{
+ if(!c || c->prev || c->next)
+ return 0;
+ return(c->opcode == OPCODE_GETLOCAL
+ || c->opcode == OPCODE_GETLOCAL_0
+ || c->opcode == OPCODE_GETLOCAL_1
+ || c->opcode == OPCODE_GETLOCAL_2
+ || c->opcode == OPCODE_GETLOCAL_3);
+}
+static int getlocalnr(code_t*c)
+{
+ if(c->opcode == OPCODE_GETLOCAL) {return (ptroff_t)c->data[0];}
+ else if(c->opcode == OPCODE_GETLOCAL_0) {return 0;}
+ else if(c->opcode == OPCODE_GETLOCAL_1) {return 1;}
+ else if(c->opcode == OPCODE_GETLOCAL_2) {return 2;}
+ else if(c->opcode == OPCODE_GETLOCAL_3) {return 3;}
+ else syntaxerror("Internal error: opcode %02x is not a getlocal call", c->opcode);
+ return 0;
+}
code_t*converttype(code_t*c, classinfo_t*from, classinfo_t*to)
{
if(from==to)
return c;
}
-
-code_t*defaultvalue(code_t*c, classinfo_t*type)
-{
- if(TYPE_IS_INT(type)) {
- c = abc_pushbyte(c, 0);
- } else if(TYPE_IS_UINT(type)) {
- c = abc_pushuint(c, 0);
- } else if(TYPE_IS_FLOAT(type)) {
- c = abc_pushnan(c);
- } else if(TYPE_IS_BOOLEAN(type)) {
- c = abc_pushfalse(c);
- } else if(!type) {
- //c = abc_pushundefined(c);
- } else {
- c = abc_pushnull(c);
- MULTINAME(m, type);
- c = abc_coerce2(c, &m);
- }
- return c;
-}
+/* move to ast.c todo end */
char is_pushundefined(code_t*c)
{
return x;
}
-static char is_getlocal(code_t*c)
-{
- if(!c || c->prev || c->next)
- return 0;
- return(c->opcode == OPCODE_GETLOCAL
- || c->opcode == OPCODE_GETLOCAL_0
- || c->opcode == OPCODE_GETLOCAL_1
- || c->opcode == OPCODE_GETLOCAL_2
- || c->opcode == OPCODE_GETLOCAL_3);
-}
-static int getlocalnr(code_t*c)
-{
- if(c->opcode == OPCODE_GETLOCAL) {return (ptroff_t)c->data[0];}
- else if(c->opcode == OPCODE_GETLOCAL_0) {return 0;}
- else if(c->opcode == OPCODE_GETLOCAL_1) {return 1;}
- else if(c->opcode == OPCODE_GETLOCAL_2) {return 2;}
- else if(c->opcode == OPCODE_GETLOCAL_3) {return 3;}
- else syntaxerror("Internal error: opcode %02x is not a getlocal call", c->opcode);
- return 0;
-}
-static code_t* toreadwrite(code_t*in, code_t*middlepart, char justassign, char readbefore)
+code_t* toreadwrite(code_t*in, code_t*middlepart, char justassign, char readbefore, char pushvalue)
{
/* converts this:
temp = gettempvar();
c = code_append(c, prefix);
c = code_append(c, r);
- if(readbefore) {
+ if(pushvalue && readbefore) {
c = abc_dup(c);
c = abc_setlocal(c, temp);
}
c = code_append(c, middlepart);
- if(!readbefore) {
+ if(pushvalue && !readbefore) {
c = abc_dup(c);
c = abc_setlocal(c, temp);
}
c = code_append(c, write);
- c = abc_getlocal(c, temp);
- c = abc_kill(c, temp);
+ if(pushvalue) {
+ c = abc_getlocal(c, temp);
+ c = abc_kill(c, temp);
+ }
} else {
/* if we're allowed to execute the read code twice *and*
the middlepart doesn't modify the code, things are easier.
*/
- code_t* r2 = code_dup(r);
//c = code_append(c, prefix);
parserassert(!prefix);
+ code_t* r2 = 0;
+ if(pushvalue) {
+ r2 = code_dup(r);
+ }
c = code_append(c, r);
c = code_append(c, middlepart);
c = code_append(c, write);
- c = code_append(c, r2);
+ if(pushvalue) {
+ c = code_append(c, r2);
+ }
}
} else {
/* even smaller version: overwrite the value without reading
}
c = code_append(c, middlepart);
c = code_append(c, write);
- c = code_append(c, r);
+ if(pushvalue) {
+ c = code_append(c, r);
+ }
} else {
code_free(r);r=0;
temp = gettempvar();
c = code_append(c, prefix);
}
c = code_append(c, middlepart);
- c = abc_dup(c);
- c = abc_setlocal(c, temp);
+ if(pushvalue) {
+ c = abc_dup(c);
+ c = abc_setlocal(c, temp);
+ }
c = code_append(c, write);
- c = abc_getlocal(c, temp);
- c = abc_kill(c, temp);
+ if(pushvalue) {
+ c = abc_getlocal(c, temp);
+ c = abc_kill(c, temp);
+ }
}
}
return c;
PASS12
$$=as3_pass;
char*key = concat3($1,"::",$3);
- if(!conditionals || !dict_contains(conditionals, key)) {
+ if(!definitions || !dict_contains(definitions, key)) {
as3_pass=0;
}
free(key);
/* ------------ variables --------------------------- */
+%code {
+ char is_subtype_of(classinfo_t*type, classinfo_t*supertype)
+ {
+ return 1; // FIXME
+ }
+};
+
MAYBEEXPRESSION : '=' NONCOMMAEXPRESSION {$$=$2;}
| {$$.c=abc_pushundefined(0);
$$.t=TYPE_ANY;
PACKAGE_DECLARATION : "package" '{' {PASS12 startpackage("");}
MAYBE_INPACKAGE_CODE_LIST '}' {PASS12 endpackage();$$=0;}
+%code {
+ static void state_has_imports()
+ {
+ state->wildcard_imports = list_clone(state->wildcard_imports);
+ state->imports = dict_clone(state->imports);
+ state->has_own_imports = 1;
+ }
+ static void import_toplevel(const char*package)
+ {
+ char* s = strdup(package);
+ while(1) {
+ dict_put(state->import_toplevel_packages, s, 0);
+ char*x = strrchr(s, '.');
+ if(!x)
+ break;
+ *x = 0;
+ }
+ free(s);
+ }
+};
IMPORT : "import" PACKAGEANDCLASS {
PASS12
slotinfo_t*s = registry_find($2->package, $2->name);
/* ------------ classes and interfaces (body, slots ) ------- */
+%code {
+ static int slotstate_varconst = 0;
+ static modifiers_t*slotstate_flags = 0;
+ static void setslotstate(modifiers_t* flags, int varconst)
+ {
+ slotstate_varconst = varconst;
+ slotstate_flags = flags;
+ if(state->cls) {
+ if(flags && flags->flags&FLAG_STATIC) {
+ state->method = state->cls->static_init;
+ } else {
+ state->method = state->cls->init;
+ }
+ } else {
+ parserassert(state->method);
+ }
+ }
+};
+
VARCONST: "var" | "const"
SLOT_DECLARATION: MAYBE_MODIFIERS VARCONST {PASS12 setslotstate(&$1,$2);} SLOT_LIST {PASS12 $$=$4;setslotstate(0, 0);}
E : '(' EXPRESSION ')' {$$=$2;} //allow commas in here, too
E : '-' E {
- $$=$2;
+ $$.c = $2.c;
if(IS_INT($2.t)) {
$$.c=abc_negate_i($$.c);
$$.t = TYPE_INT;
c=abc_multiply(c);
}
c=converttype(c, join_types($1.t, $3.t, '*'), $1.t);
- $$.c = toreadwrite($1.c, c, 0, 0);
+ $$.c = toreadwrite($1.c, c, 0, 0, 1);
$$.t = $1.t;
}
E : E "%=" E {
code_t*c = abc_modulo($3.c);
c=converttype(c, join_types($1.t, $3.t, '%'), $1.t);
- $$.c = toreadwrite($1.c, c, 0, 0);
+ $$.c = toreadwrite($1.c, c, 0, 0, 1);
$$.t = $1.t;
}
E : E "<<=" E {
code_t*c = abc_lshift($3.c);
c=converttype(c, join_types($1.t, $3.t, '<'), $1.t);
- $$.c = toreadwrite($1.c, c, 0, 0);
+ $$.c = toreadwrite($1.c, c, 0, 0, 1);
$$.t = $1.t;
}
E : E ">>=" E {
code_t*c = abc_rshift($3.c);
c=converttype(c, join_types($1.t, $3.t, '>'), $1.t);
- $$.c = toreadwrite($1.c, c, 0, 0);
+ $$.c = toreadwrite($1.c, c, 0, 0, 1);
$$.t = $1.t;
}
E : E ">>>=" E {
code_t*c = abc_urshift($3.c);
c=converttype(c, join_types($1.t, $3.t, 'U'), $1.t);
- $$.c = toreadwrite($1.c, c, 0, 0);
+ $$.c = toreadwrite($1.c, c, 0, 0, 1);
$$.t = $1.t;
}
E : E "/=" E {
code_t*c = abc_divide($3.c);
c=converttype(c, join_types($1.t, $3.t, '/'), $1.t);
- $$.c = toreadwrite($1.c, c, 0, 0);
+ $$.c = toreadwrite($1.c, c, 0, 0, 1);
$$.t = $1.t;
}
E : E "|=" E {
code_t*c = abc_bitor($3.c);
c=converttype(c, TYPE_INT, $1.t);
- $$.c = toreadwrite($1.c, c, 0, 0);
+ $$.c = toreadwrite($1.c, c, 0, 0, 1);
$$.t = $1.t;
}
E : E "^=" E {
code_t*c = abc_bitxor($3.c);
c=converttype(c, TYPE_INT, $1.t);
- $$.c = toreadwrite($1.c, c, 0, 0);
+ $$.c = toreadwrite($1.c, c, 0, 0, 1);
$$.t = $1.t;
}
E : E "+=" E {
c=converttype(c, join_types($1.t, $3.t, '+'), $1.t);
}
- $$.c = toreadwrite($1.c, c, 0, 0);
+ $$.c = toreadwrite($1.c, c, 0, 0, 1);
$$.t = $1.t;
}
E : E "-=" E { code_t*c = $3.c;
c=converttype(c, join_types($1.t, $3.t, '-'), $1.t);
}
- $$.c = toreadwrite($1.c, c, 0, 0);
+ $$.c = toreadwrite($1.c, c, 0, 0, 1);
$$.t = $1.t;
}
E : E '=' E { code_t*c = 0;
c = code_append(c, $3.c);
c = converttype(c, $3.t, $1.t);
- $$.c = toreadwrite($1.c, c, 1, 0);
+ $$.c = toreadwrite($1.c, c, 1, 0, 1);
$$.t = $1.t;
}
type = TYPE_NUMBER;
}
c=converttype(c, type, $1.t);
- $$.c = toreadwrite($1.c, c, 0, 1);
+ $$.c = toreadwrite($1.c, c, 0, 1, 1);
$$.t = $1.t;
}
}
type = TYPE_NUMBER;
}
c=converttype(c, type, $1.t);
- $$.c = toreadwrite($1.c, c, 0, 1);
+ $$.c = toreadwrite($1.c, c, 0, 1, 1);
$$.t = $1.t;
}
type = TYPE_NUMBER;
}
c=converttype(c, type, $2.t);
- $$.c = toreadwrite($2.c, c, 0, 0);
+ $$.c = toreadwrite($2.c, c, 0, 0, 1);
$$.t = $2.t;
}
type = TYPE_NUMBER;
}
c=converttype(c, type, $2.t);
- $$.c = toreadwrite($2.c, c, 0, 0);
+ $$.c = toreadwrite($2.c, c, 0, 0, 1);
$$.t = $2.t;
}
$$=0;
}
+%code {
+ void add_active_url(const char*url)
+ {
+ NEW(namespace_t,n);
+ n->name = url;
+ list_append(state->active_namespace_urls, n);
+ }
+};
+
USE_NAMESPACE : "use" "namespace" CLASS_SPEC {
PASS12
const char*url = $3->name;
#include <stdio.h>
#include <stdarg.h>
#include "../utf8.h"
+#include "common.h"
#include "tokenizer.h"
#include "files.h"
-int as3_pass = 0;
-int as3_verbosity = 1;
unsigned int as3_tokencount = 0;
-void as3_error(const char*format, ...)
-{
- char buf[1024];
- int l;
- va_list arglist;
- if(as3_verbosity<0)
- exit(1);
- va_start(arglist, format);
- vsprintf(buf, format, arglist);
- va_end(arglist);
- fprintf(stderr, "%s:%d:%d: error: %s\n", current_filename, current_line, current_column, buf);
- fflush(stderr);
- exit(1);
-}
-void as3_warning(const char*format, ...)
-{
- char buf[1024];
- int l;
- va_list arglist;
- if(as3_verbosity<1)
- return;
- va_start(arglist, format);
- vsprintf(buf, format, arglist);
- va_end(arglist);
- fprintf(stderr, "%s:%d:%d: warning: %s\n", current_filename, current_line, current_column, buf);
- fflush(stderr);
-}
-void as3_softwarning(const char*format, ...)
-{
- char buf[1024];
- int l;
- va_list arglist;
- if(as3_verbosity<2)
- return;
- va_start(arglist, format);
- vsprintf(buf, format, arglist);
- va_end(arglist);
- fprintf(stderr, "%s:%d:%d: warning: %s\n", current_filename, current_line, current_column, buf);
- fflush(stderr);
-}
static void dbg(const char*format, ...)
{
char buf[1024];
-#line 1869 "tokenizer.yy.c"
+#line 1828 "tokenizer.yy.c"
#define INITIAL 0
#define REGEXPOK 1
register char *yy_cp, *yy_bp;
register int yy_act;
-#line 575 "tokenizer.lex"
+#line 534 "tokenizer.lex"
-#line 2060 "tokenizer.yy.c"
+#line 2019 "tokenizer.yy.c"
if ( !(yy_init) )
{
case 1:
/* rule 1 can match eol */
YY_RULE_SETUP
-#line 578 "tokenizer.lex"
+#line 537 "tokenizer.lex"
{l(); /* single line comment */}
YY_BREAK
case 2:
/* rule 2 can match eol */
YY_RULE_SETUP
-#line 579 "tokenizer.lex"
+#line 538 "tokenizer.lex"
{l(); /* multi line comment */}
YY_BREAK
case 3:
YY_RULE_SETUP
-#line 580 "tokenizer.lex"
+#line 539 "tokenizer.lex"
{syntaxerror("syntax error: unterminated comment", as3_text);}
YY_BREAK
case 4:
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up as3_text again */
YY_RULE_SETUP
-#line 582 "tokenizer.lex"
+#line 541 "tokenizer.lex"
{l();handleInclude(as3_text, as3_leng, 1);}
YY_BREAK
case 5:
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up as3_text again */
YY_RULE_SETUP
-#line 583 "tokenizer.lex"
+#line 542 "tokenizer.lex"
{l();handleInclude(as3_text, as3_leng, 0);}
YY_BREAK
case 6:
/* rule 6 can match eol */
YY_RULE_SETUP
-#line 584 "tokenizer.lex"
+#line 543 "tokenizer.lex"
{l(); BEGIN(INITIAL);handleString(as3_text, as3_leng);return T_STRING;}
YY_BREAK
case 7:
/* rule 7 can match eol */
YY_RULE_SETUP
-#line 585 "tokenizer.lex"
+#line 544 "tokenizer.lex"
{l(); BEGIN(INITIAL);handleCData(as3_text, as3_leng);return T_STRING;}
YY_BREAK
case 8:
YY_RULE_SETUP
-#line 588 "tokenizer.lex"
+#line 547 "tokenizer.lex"
{c(); BEGIN(INITIAL);return handleregexp();}
YY_BREAK
case 9:
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up as3_text again */
YY_RULE_SETUP
-#line 589 "tokenizer.lex"
+#line 548 "tokenizer.lex"
{c(); BEGIN(INITIAL);return handlehex();}
YY_BREAK
case 10:
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up as3_text again */
YY_RULE_SETUP
-#line 590 "tokenizer.lex"
+#line 549 "tokenizer.lex"
{c(); BEGIN(INITIAL);return handlehexfloat();}
YY_BREAK
case 11:
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up as3_text again */
YY_RULE_SETUP
-#line 591 "tokenizer.lex"
+#line 550 "tokenizer.lex"
{c(); BEGIN(INITIAL);return handleint();}
YY_BREAK
case 12:
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up as3_text again */
YY_RULE_SETUP
-#line 592 "tokenizer.lex"
+#line 551 "tokenizer.lex"
{c(); BEGIN(INITIAL);return handlefloat();}
YY_BREAK
case 13:
YY_RULE_SETUP
-#line 595 "tokenizer.lex"
+#line 554 "tokenizer.lex"
{c(); BEGIN(REGEXPOK);return m(T_DICTSTART);}
YY_BREAK
case 14:
YY_RULE_SETUP
-#line 596 "tokenizer.lex"
+#line 555 "tokenizer.lex"
{c(); BEGIN(INITIAL); return m('{');}
YY_BREAK
case 15:
YY_RULE_SETUP
-#line 598 "tokenizer.lex"
+#line 557 "tokenizer.lex"
{/* utf 8 bom */}
YY_BREAK
case 16:
/* rule 16 can match eol */
YY_RULE_SETUP
-#line 599 "tokenizer.lex"
+#line 558 "tokenizer.lex"
{l();}
YY_BREAK
case 17:
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up as3_text again */
YY_RULE_SETUP
-#line 601 "tokenizer.lex"
+#line 560 "tokenizer.lex"
{c(); BEGIN(INITIAL);return handlehex();}
YY_BREAK
case 18:
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up as3_text again */
YY_RULE_SETUP
-#line 602 "tokenizer.lex"
+#line 561 "tokenizer.lex"
{c(); BEGIN(INITIAL);return handlehexfloat();}
YY_BREAK
case 19:
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up as3_text again */
YY_RULE_SETUP
-#line 603 "tokenizer.lex"
+#line 562 "tokenizer.lex"
{c(); BEGIN(INITIAL);return handleint();}
YY_BREAK
case 20:
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up as3_text again */
YY_RULE_SETUP
-#line 604 "tokenizer.lex"
+#line 563 "tokenizer.lex"
{c(); BEGIN(INITIAL);return handlefloat();}
YY_BREAK
case 21:
YY_RULE_SETUP
-#line 606 "tokenizer.lex"
+#line 565 "tokenizer.lex"
{/* for debugging: generates a tokenizer-level error */
syntaxerror("3rr0r");}
YY_BREAK
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up as3_text again */
YY_RULE_SETUP
-#line 609 "tokenizer.lex"
+#line 568 "tokenizer.lex"
{l();BEGIN(INITIAL);handleLabel(as3_text, as3_leng-3);return T_FOR;}
YY_BREAK
case 23:
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up as3_text again */
YY_RULE_SETUP
-#line 610 "tokenizer.lex"
+#line 569 "tokenizer.lex"
{l();BEGIN(INITIAL);handleLabel(as3_text, as3_leng-2);return T_DO;}
YY_BREAK
case 24:
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up as3_text again */
YY_RULE_SETUP
-#line 611 "tokenizer.lex"
+#line 570 "tokenizer.lex"
{l();BEGIN(INITIAL);handleLabel(as3_text, as3_leng-5);return T_WHILE;}
YY_BREAK
case 25:
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up as3_text again */
YY_RULE_SETUP
-#line 612 "tokenizer.lex"
+#line 571 "tokenizer.lex"
{l();BEGIN(INITIAL);handleLabel(as3_text, as3_leng-6);return T_SWITCH;}
YY_BREAK
case 26:
YY_RULE_SETUP
-#line 613 "tokenizer.lex"
+#line 572 "tokenizer.lex"
{c();BEGIN(INITIAL);a3_lval.id="";return T_FOR;}
YY_BREAK
case 27:
YY_RULE_SETUP
-#line 614 "tokenizer.lex"
+#line 573 "tokenizer.lex"
{c();BEGIN(INITIAL);a3_lval.id="";return T_DO;}
YY_BREAK
case 28:
YY_RULE_SETUP
-#line 615 "tokenizer.lex"
+#line 574 "tokenizer.lex"
{c();BEGIN(INITIAL);a3_lval.id="";return T_WHILE;}
YY_BREAK
case 29:
YY_RULE_SETUP
-#line 616 "tokenizer.lex"
+#line 575 "tokenizer.lex"
{c();BEGIN(INITIAL);a3_lval.id="";return T_SWITCH;}
YY_BREAK
case 30:
YY_RULE_SETUP
-#line 618 "tokenizer.lex"
+#line 577 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(T_ANDAND);}
YY_BREAK
case 31:
YY_RULE_SETUP
-#line 619 "tokenizer.lex"
+#line 578 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(T_OROR);}
YY_BREAK
case 32:
YY_RULE_SETUP
-#line 620 "tokenizer.lex"
+#line 579 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(T_NE);}
YY_BREAK
case 33:
YY_RULE_SETUP
-#line 621 "tokenizer.lex"
+#line 580 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(T_NEE);}
YY_BREAK
case 34:
YY_RULE_SETUP
-#line 622 "tokenizer.lex"
+#line 581 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(T_EQEQEQ);}
YY_BREAK
case 35:
YY_RULE_SETUP
-#line 623 "tokenizer.lex"
+#line 582 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(T_EQEQ);}
YY_BREAK
case 36:
YY_RULE_SETUP
-#line 624 "tokenizer.lex"
+#line 583 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(T_GE);}
YY_BREAK
case 37:
YY_RULE_SETUP
-#line 625 "tokenizer.lex"
+#line 584 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(T_LE);}
YY_BREAK
case 38:
YY_RULE_SETUP
-#line 626 "tokenizer.lex"
+#line 585 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(T_MINUSMINUS);}
YY_BREAK
case 39:
YY_RULE_SETUP
-#line 627 "tokenizer.lex"
+#line 586 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(T_PLUSPLUS);}
YY_BREAK
case 40:
YY_RULE_SETUP
-#line 628 "tokenizer.lex"
+#line 587 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(T_PLUSBY);}
YY_BREAK
case 41:
YY_RULE_SETUP
-#line 629 "tokenizer.lex"
+#line 588 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(T_XORBY);}
YY_BREAK
case 42:
YY_RULE_SETUP
-#line 630 "tokenizer.lex"
+#line 589 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(T_MINUSBY);}
YY_BREAK
case 43:
YY_RULE_SETUP
-#line 631 "tokenizer.lex"
+#line 590 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(T_DIVBY);}
YY_BREAK
case 44:
YY_RULE_SETUP
-#line 632 "tokenizer.lex"
+#line 591 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(T_MODBY);}
YY_BREAK
case 45:
YY_RULE_SETUP
-#line 633 "tokenizer.lex"
+#line 592 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(T_MULBY);}
YY_BREAK
case 46:
YY_RULE_SETUP
-#line 634 "tokenizer.lex"
+#line 593 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(T_ORBY);}
YY_BREAK
case 47:
YY_RULE_SETUP
-#line 635 "tokenizer.lex"
+#line 594 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(T_SHRBY);}
YY_BREAK
case 48:
YY_RULE_SETUP
-#line 636 "tokenizer.lex"
+#line 595 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(T_SHLBY);}
YY_BREAK
case 49:
YY_RULE_SETUP
-#line 637 "tokenizer.lex"
+#line 596 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(T_USHRBY);}
YY_BREAK
case 50:
YY_RULE_SETUP
-#line 638 "tokenizer.lex"
+#line 597 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(T_SHL);}
YY_BREAK
case 51:
YY_RULE_SETUP
-#line 639 "tokenizer.lex"
+#line 598 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(T_USHR);}
YY_BREAK
case 52:
YY_RULE_SETUP
-#line 640 "tokenizer.lex"
+#line 599 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(T_SHR);}
YY_BREAK
case 53:
YY_RULE_SETUP
-#line 641 "tokenizer.lex"
+#line 600 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(T_DOTDOTDOT);}
YY_BREAK
case 54:
YY_RULE_SETUP
-#line 642 "tokenizer.lex"
+#line 601 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(T_DOTDOT);}
YY_BREAK
case 55:
YY_RULE_SETUP
-#line 643 "tokenizer.lex"
+#line 602 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m('.');}
YY_BREAK
case 56:
YY_RULE_SETUP
-#line 644 "tokenizer.lex"
+#line 603 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(T_COLONCOLON);}
YY_BREAK
case 57:
YY_RULE_SETUP
-#line 645 "tokenizer.lex"
+#line 604 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(':');}
YY_BREAK
case 58:
YY_RULE_SETUP
-#line 646 "tokenizer.lex"
+#line 605 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(KW_INSTANCEOF);}
YY_BREAK
case 59:
YY_RULE_SETUP
-#line 647 "tokenizer.lex"
+#line 606 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(KW_IMPLEMENTS);}
YY_BREAK
case 60:
YY_RULE_SETUP
-#line 648 "tokenizer.lex"
+#line 607 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_INTERFACE);}
YY_BREAK
case 61:
YY_RULE_SETUP
-#line 649 "tokenizer.lex"
+#line 608 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_NAMESPACE);}
YY_BREAK
case 62:
YY_RULE_SETUP
-#line 650 "tokenizer.lex"
+#line 609 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_PROTECTED);}
YY_BREAK
case 63:
YY_RULE_SETUP
-#line 651 "tokenizer.lex"
+#line 610 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_UNDEFINED);}
YY_BREAK
case 64:
YY_RULE_SETUP
-#line 652 "tokenizer.lex"
+#line 611 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_CONTINUE);}
YY_BREAK
case 65:
YY_RULE_SETUP
-#line 653 "tokenizer.lex"
+#line 612 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_OVERRIDE);}
YY_BREAK
case 66:
YY_RULE_SETUP
-#line 654 "tokenizer.lex"
+#line 613 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_INTERNAL);}
YY_BREAK
case 67:
YY_RULE_SETUP
-#line 655 "tokenizer.lex"
+#line 614 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_FUNCTION);}
YY_BREAK
case 68:
YY_RULE_SETUP
-#line 656 "tokenizer.lex"
+#line 615 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_FINALLY);}
YY_BREAK
case 69:
YY_RULE_SETUP
-#line 657 "tokenizer.lex"
+#line 616 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_DEFAULT);}
YY_BREAK
case 70:
YY_RULE_SETUP
-#line 658 "tokenizer.lex"
+#line 617 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_PACKAGE);}
YY_BREAK
case 71:
YY_RULE_SETUP
-#line 659 "tokenizer.lex"
+#line 618 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_PRIVATE);}
YY_BREAK
case 72:
YY_RULE_SETUP
-#line 660 "tokenizer.lex"
+#line 619 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_DYNAMIC);}
YY_BREAK
case 73:
YY_RULE_SETUP
-#line 661 "tokenizer.lex"
+#line 620 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_EXTENDS);}
YY_BREAK
case 74:
YY_RULE_SETUP
-#line 662 "tokenizer.lex"
+#line 621 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(KW_DELETE);}
YY_BREAK
case 75:
YY_RULE_SETUP
-#line 663 "tokenizer.lex"
+#line 622 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(KW_RETURN);}
YY_BREAK
case 76:
YY_RULE_SETUP
-#line 664 "tokenizer.lex"
+#line 623 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_PUBLIC);}
YY_BREAK
case 77:
YY_RULE_SETUP
-#line 665 "tokenizer.lex"
+#line 624 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_NATIVE);}
YY_BREAK
case 78:
YY_RULE_SETUP
-#line 666 "tokenizer.lex"
+#line 625 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_STATIC);}
YY_BREAK
case 79:
YY_RULE_SETUP
-#line 667 "tokenizer.lex"
+#line 626 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(KW_IMPORT);}
YY_BREAK
case 80:
YY_RULE_SETUP
-#line 668 "tokenizer.lex"
+#line 627 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(KW_TYPEOF);}
YY_BREAK
case 81:
YY_RULE_SETUP
-#line 669 "tokenizer.lex"
+#line 628 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(KW_THROW);}
YY_BREAK
case 82:
YY_RULE_SETUP
-#line 670 "tokenizer.lex"
+#line 629 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_CLASS);}
YY_BREAK
case 83:
YY_RULE_SETUP
-#line 671 "tokenizer.lex"
+#line 630 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_CONST);}
YY_BREAK
case 84:
YY_RULE_SETUP
-#line 672 "tokenizer.lex"
+#line 631 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_CATCH);}
YY_BREAK
case 85:
YY_RULE_SETUP
-#line 673 "tokenizer.lex"
+#line 632 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_FINAL);}
YY_BREAK
case 86:
YY_RULE_SETUP
-#line 674 "tokenizer.lex"
+#line 633 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_FALSE);}
YY_BREAK
case 87:
YY_RULE_SETUP
-#line 675 "tokenizer.lex"
+#line 634 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_BREAK);}
YY_BREAK
case 88:
YY_RULE_SETUP
-#line 676 "tokenizer.lex"
+#line 635 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_SUPER);}
YY_BREAK
case 89:
YY_RULE_SETUP
-#line 677 "tokenizer.lex"
+#line 636 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_EACH);}
YY_BREAK
case 90:
YY_RULE_SETUP
-#line 678 "tokenizer.lex"
+#line 637 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_VOID);}
YY_BREAK
case 91:
YY_RULE_SETUP
-#line 679 "tokenizer.lex"
+#line 638 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_TRUE);}
YY_BREAK
case 92:
YY_RULE_SETUP
-#line 680 "tokenizer.lex"
+#line 639 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_NULL);}
YY_BREAK
case 93:
YY_RULE_SETUP
-#line 681 "tokenizer.lex"
+#line 640 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_ELSE);}
YY_BREAK
case 94:
YY_RULE_SETUP
-#line 682 "tokenizer.lex"
+#line 641 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(KW_CASE);}
YY_BREAK
case 95:
YY_RULE_SETUP
-#line 683 "tokenizer.lex"
+#line 642 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(KW_WITH);}
YY_BREAK
case 96:
YY_RULE_SETUP
-#line 684 "tokenizer.lex"
+#line 643 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(KW_USE);}
YY_BREAK
case 97:
YY_RULE_SETUP
-#line 685 "tokenizer.lex"
+#line 644 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(KW_NEW);}
YY_BREAK
case 98:
YY_RULE_SETUP
-#line 686 "tokenizer.lex"
+#line 645 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_GET);}
YY_BREAK
case 99:
YY_RULE_SETUP
-#line 687 "tokenizer.lex"
+#line 646 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_SET);}
YY_BREAK
case 100:
YY_RULE_SETUP
-#line 688 "tokenizer.lex"
+#line 647 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_VAR);}
YY_BREAK
case 101:
YY_RULE_SETUP
-#line 689 "tokenizer.lex"
+#line 648 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_TRY);}
YY_BREAK
case 102:
YY_RULE_SETUP
-#line 690 "tokenizer.lex"
+#line 649 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(KW_IS) ;}
YY_BREAK
case 103:
YY_RULE_SETUP
-#line 691 "tokenizer.lex"
+#line 650 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(KW_IN) ;}
YY_BREAK
case 104:
YY_RULE_SETUP
-#line 692 "tokenizer.lex"
+#line 651 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(KW_IF) ;}
YY_BREAK
case 105:
YY_RULE_SETUP
-#line 693 "tokenizer.lex"
+#line 652 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(KW_AS);}
YY_BREAK
case 106:
YY_RULE_SETUP
-#line 694 "tokenizer.lex"
+#line 653 "tokenizer.lex"
{c();BEGIN(INITIAL);return handleIdentifier();}
YY_BREAK
case 107:
YY_RULE_SETUP
-#line 696 "tokenizer.lex"
+#line 655 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(as3_text[0]);}
YY_BREAK
case 108:
YY_RULE_SETUP
-#line 697 "tokenizer.lex"
+#line 656 "tokenizer.lex"
{c();BEGIN(REGEXPOK);return m(as3_text[0]);}
YY_BREAK
case 109:
YY_RULE_SETUP
-#line 698 "tokenizer.lex"
+#line 657 "tokenizer.lex"
{c();BEGIN(INITIAL);return m(as3_text[0]);}
YY_BREAK
case 110:
YY_RULE_SETUP
-#line 700 "tokenizer.lex"
+#line 659 "tokenizer.lex"
{/* ERROR */
char c1=as3_text[0];
char buf[128];
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(REGEXPOK):
case YY_STATE_EOF(BEGINNING):
-#line 720 "tokenizer.lex"
+#line 679 "tokenizer.lex"
{l();
void*b = leave_file();
if (!b) {
YY_BREAK
case 111:
YY_RULE_SETUP
-#line 732 "tokenizer.lex"
+#line 691 "tokenizer.lex"
ECHO;
YY_BREAK
-#line 2794 "tokenizer.yy.c"
+#line 2753 "tokenizer.yy.c"
case YY_END_OF_BUFFER:
{
#define YYTABLES_NAME "yytables"
-#line 732 "tokenizer.lex"
+#line 691 "tokenizer.lex"