#include "tokenizer.h"
#include "assets.h"
#include "../os.h"
+#include "../xml.h"
+#ifdef HAVE_ZZIP
+#include "zzip/lib.h"
+#endif
static void import_code(void*_abc, char*filename, int pass, asset_bundle_t*a);
free(tag);
}
-void as3_import_swf(char*filename)
+typedef struct _deps {
+ const char*name;
+ struct _deps*next;
+} deps_t;
+
+void as3_import_swf2(reader_t*r, char*filename, dict_t*deps)
{
- SWF* swf = swf_OpenSWF(filename);
- if(!swf)
+ SWF _swf,*swf=&_swf;
+ if(swf_ReadSWF2(r, &_swf)<0)
return;
swf_FoldAll(swf);
asset_resolver_t* assets = swf_ParseAssets(swf);
+ asset_bundle_list_t* asset_bundles = list_new();
+
+ dict_t*name2bundle = dict_new();
/* pass 1 */
while(tag) {
if(tag->id == ST_DOABC || tag->id == ST_RAWABC) {
abc_file_t*abc = swf_ReadABC(tag);
import_code(abc, filename, 0, 0);
- swf_FreeABC(abc);
+ NEW(asset_bundle_t, a);
+ a->file = abc;
+ if(abc->name) {
+ dict_put(name2bundle, abc->name, a);
+ }
+ list_append(asset_bundles, a);
}
tag = tag->next;
}
tag = swf->firstTag;
+ asset_bundle_list_t*b = asset_bundles;
/* pass 2 */
while(tag) {
if(tag->id == ST_DOABC || tag->id == ST_RAWABC) {
- abc_file_t*abc = swf_ReadABC(tag); //FIXME: mem leak
+ asset_bundle_t*a = b->asset_bundle;
+ abc_file_t*abc = a->file;
swf_ResolveAssets(assets, abc);
- NEW(asset_bundle_t, a);
- a->file = abc;
+ if(deps && abc->name) {
+ deps_t*d = dict_lookup(deps, abc->name);
+ while(d) {
+ if(d->name) {
+ asset_bundle_t*other = dict_lookup(name2bundle, d->name);
+ list_append(a->dependencies, other);
+ }
+ d = d->next;
+ }
+ }
registry_add_asset(a);
import_code(abc, filename, 1, a);
+ b=b->next;
}
tag = tag->next;
}
+ dict_destroy(name2bundle);
+ list_free(asset_bundles);
+
//swf_FreeTags(swf); // FIXME: mem leak
- free(swf);
+}
+
+void as3_import_swf(char*filename)
+{
+ reader_t reader;
+ reader_init_filereader2(&reader, filename);
+ as3_import_swf2(&reader, filename, 0);
+ reader.dealloc(&reader);
+}
+
+#ifdef HAVE_ZZIP
+typedef struct _catalog_state {
+ char*xml_filename;
+ char in_libraries;
+ char*library;
+ char*script;
+ dict_t*deps;
+ deps_t*current_deps;
+ dict_t*name2deps;
+ dict_t*id2script;
+ ZZIP_DIR*dir;
+} catalog_state_t;
+
+const char* fa(catalog_state_t*state, xmlattribute_t*attr, const char*name)
+{
+ while(attr) {
+ if(!strcmp(attr->name, name)) return attr->value;
+ attr = attr->next;
+ }
+ syntaxerror("error parsing %s: attribute %s missing", state->xml_filename, name);
+}
+void catalog_start_tag(xmlconsumer_t*c, char*name, xmlattribute_t*attr)
+{
+ catalog_state_t*state = (catalog_state_t*)c->internal;
+ if(!strcmp(name, "libraries")) {
+ state->in_libraries = 1;
+ } else if(!strcmp(name, "library")) {
+ state->library = strdup(fa(state, attr, "path"));
+ } else if(!strcmp(name, "script")) {
+ state->script = strdup(fa(state, attr, "name"));
+ } else if(!strcmp(name, "def")) {
+ dict_put(state->id2script, strdup(fa(state, attr, "id")), strdup(state->script));
+ } else if(!strcmp(name, "dep")) {
+ NEW(deps_t,d);
+ d->name = strdup(fa(state, attr, "id"));
+ d->next = state->current_deps;
+ state->current_deps = d;
+ }
+}
+void catalog_data(xmlconsumer_t*c, char*data, int len)
+{
+ catalog_state_t*state = (catalog_state_t*)c->internal;
+}
+void catalog_end_tag(xmlconsumer_t*c, char*name)
+{
+ catalog_state_t*state = (catalog_state_t*)c->internal;
+ if(!strcmp(name, "libraries")) {
+ state->in_libraries = 0;
+ } else if(!strcmp(name, "library")) {
+ ZZIP_FILE*file = zzip_file_open(state->dir, state->library, 0);
+
+ DICT_ITERATE_DATA(state->deps,deps_t*,deps) {
+ while(deps) {
+ char*script = dict_lookup(state->id2script, deps->name);
+ if(!script) {
+ //as3_warning("when importing %s: depencency %s referenced in catalog.xml, but not found.", state->xml_filename, deps->name);
+ }
+ deps->name = script;
+ deps = deps->next;
+ }
+ }
+
+ if(!file) {
+ as3_warning("when importing %s: %s referenced in catalog.xml, but not found.", state->xml_filename, state->library);
+ } else {
+ reader_t r;
+ reader_init_zzipreader(&r, file);
+ as3_import_swf2(&r, state->library, state->deps);
+ r.dealloc(&r);
+ zzip_file_close(file);
+ }
+ dict_destroy(state->deps);
+ state->deps = 0;
+ free(state->library);
+ state->library = 0;
+ } else if(!strcmp(name, "script")) {
+ dict_put(state->deps, state->script, state->current_deps);
+ free(state->script);
+ state->current_deps = 0;
+ state->script = 0;
+ }
+}
+void as3_import_zipfile(char*filename)
+{
+ ZZIP_DIR*dir = zzip_opendir(filename);
+ if(!dir) as3_error("Error reading %s\n", filename);
+ ZZIP_FILE*file = zzip_file_open(dir, "catalog.xml", 0);
+ reader_t r;
+ reader_init_zzipreader(&r, file);
+
+ xmlconsumer_t c;
+ catalog_state_t state;
+ memset(&state, 0, sizeof(state));
+ state.dir = dir;
+ state.xml_filename = filename;
+ state.name2deps = dict_new();
+ state.id2script = dict_new();
+ state.deps = dict_new();
+ c.start_tag = catalog_start_tag;
+ c.data= catalog_data;
+ c.end_tag = catalog_end_tag;
+ c.internal = &state;
+
+ xml_parse(&r, &c);
+
+ r.dealloc(&r);
+}
+#else
+void as3_import_zipfile(char*filename)
+{
+ as3_warning("No zipfile support compiled in- can't import %s\n", filename);
}
+#endif
void as3_import_file(char*filename)
{
if(!strncmp(head, "FWS", 3) ||
!strncmp(head, "CWS", 3)) {
as3_import_swf(filename);
+ } else if(!strncmp(head, "PK", 2)) {
+ as3_import_zipfile(filename);
} else {
as3_import_abc(filename);
}
/* Line 274 of skeleton.m4 */
-#line 3539 "parser.y"
+#line 3541 "parser.y"
node_t* resolve_identifier(const char*name);
node_t* get_descendants(node_t*e,const char*ns,const char*subnode,char multi, char attr)
/* Line 274 of skeleton.m4 */
-#line 3710 "parser.y"
+#line 3712 "parser.y"
node_t* var_read(variable_t*v)
{
/* look at actual classes, in the current package and imported */
if(!state->xmlfilter && (a = find_class(name))) {
+ registry_use(a);
if(state->cls && state->cls->info == (classinfo_t*)a && i_am_static) {
o.c = abc_getlocal_0(0);
o.t = TYPE_CLASS((classinfo_t*)a);
/* Line 274 of skeleton.m4 */
-#line 3866 "parser.y"
+#line 3869 "parser.y"
void add_active_url(const char*url)
{
/* Line 274 of skeleton.m4 */
-#line 2314 "parser.tab.c"
+#line 2315 "parser.tab.c"
#ifdef short
# undef short
2896, 2899, 2900, 2903, 2908, 2911, 2914, 2917, 2920, 2924,
2927, 2931, 2935, 2940, 2946, 2949, 2952, 2955, 2960, 2963,
2966, 2976, 2980, 2986, 2992, 3000, 3005, 3011, 3019, 3027,
- 3028, 3029, 3032, 3031, 3048, 3049, 3051, 3050, 3074, 3093,
- 3107, 3108, 3110, 3111, 3113, 3114, 3115, 3124, 3125, 3129,
- 3130, 3132, 3133, 3134, 3136, 3140, 3141, 3146, 3147, 3194,
- 3244, 3265, 3287, 3290, 3297, 3300, 3303, 3306, 3309, 3312,
- 3317, 3318, 3320, 3321, 3322, 3323, 3324, 3326, 3332, 3341,
- 3342, 3343, 3344, 3345, 3346, 3348, 3352, 3357, 3375, 3386,
- 3396, 3405, 3406, 3407, 3408, 3409, 3410, 3411, 3412, 3413,
- 3414, 3415, 3416, 3417, 3418, 3419, 3420, 3421, 3422, 3423,
- 3424, 3425, 3426, 3427, 3428, 3429, 3430, 3431, 3432, 3433,
- 3434, 3435, 3436, 3437, 3438, 3439, 3440, 3441, 3442, 3443,
- 3444, 3445, 3446, 3447, 3448, 3449, 3450, 3452, 3453, 3454,
- 3455, 3457, 3472, 3480, 3480, 3534, 3535, 3536, 3537, 3577,
- 3580, 3587, 3590, 3601, 3609, 3613, 3620, 3624, 3634, 3645,
- 3841, 3875, 3882, 3889, 3896, 3918, 3925
+ 3028, 3029, 3032, 3031, 3048, 3049, 3051, 3050, 3074, 3094,
+ 3109, 3110, 3112, 3113, 3115, 3116, 3117, 3126, 3127, 3131,
+ 3132, 3134, 3135, 3136, 3138, 3142, 3143, 3148, 3149, 3196,
+ 3246, 3267, 3289, 3292, 3299, 3302, 3305, 3308, 3311, 3314,
+ 3319, 3320, 3322, 3323, 3324, 3325, 3326, 3328, 3334, 3343,
+ 3344, 3345, 3346, 3347, 3348, 3350, 3354, 3359, 3377, 3388,
+ 3398, 3407, 3408, 3409, 3410, 3411, 3412, 3413, 3414, 3415,
+ 3416, 3417, 3418, 3419, 3420, 3421, 3422, 3423, 3424, 3425,
+ 3426, 3427, 3428, 3429, 3430, 3431, 3432, 3433, 3434, 3435,
+ 3436, 3437, 3438, 3439, 3440, 3441, 3442, 3443, 3444, 3445,
+ 3446, 3447, 3448, 3449, 3450, 3451, 3452, 3454, 3455, 3456,
+ 3457, 3459, 3474, 3482, 3482, 3536, 3537, 3538, 3539, 3579,
+ 3582, 3589, 3592, 3603, 3611, 3615, 3622, 3626, 3636, 3647,
+ 3844, 3878, 3885, 3892, 3899, 3921, 3928
};
#endif
{
PASS12
slotinfo_t*s = registry_find((yyvsp[(2) - (2)].classinfo)->package, (yyvsp[(2) - (2)].classinfo)->name);
- if(!s && as3_pass==1) {// || !(s->flags&FLAG_BUILTIN)) {
+ if(!s && as3_pass==1) {
as3_schedule_class((yyvsp[(2) - (2)].classinfo)->package, (yyvsp[(2) - (2)].classinfo)->name);
}
/*if(s && s->kind == INFOTYPE_VAR && TYPE_IS_NAMESPACE(s->type)) {
slotinfo_t*s = find_class((yyvsp[(1) - (1)].id));
if(!s) syntaxerror("Could not find class/method %s (current package: %s)\n", (yyvsp[(1) - (1)].id), state->package);
(yyval.classinfo) = (classinfo_t*)s;
+ registry_use(s);
}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3093 "parser.y"
+#line 3094 "parser.y"
{
PASS1 NEW(unresolvedinfo_t,c);
memset(c, 0, sizeof(*c));
if(!s) syntaxerror("Couldn't find class/method %s.%s\n", (yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].id));
free((yyvsp[(1) - (3)].id));(yyvsp[(1) - (3)].id)=0;
(yyval.classinfo) = (classinfo_t*)s;
+ registry_use(s);
}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3110 "parser.y"
+#line 3112 "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 3111 "parser.y"
+#line 3113 "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 3113 "parser.y"
+#line 3115 "parser.y"
{PASS12 (yyval.classinfo)=(yyvsp[(1) - (1)].classinfo);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3114 "parser.y"
+#line 3116 "parser.y"
{PASS12 (yyval.classinfo)=TYPE_ANY;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3115 "parser.y"
+#line 3117 "parser.y"
{PASS12 (yyval.classinfo)=TYPE_VOID;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3124 "parser.y"
+#line 3126 "parser.y"
{PASS12 (yyval.classinfo)=(yyvsp[(2) - (2)].classinfo);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3125 "parser.y"
+#line 3127 "parser.y"
{PASS12 (yyval.classinfo)=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3129 "parser.y"
+#line 3131 "parser.y"
{(yyval.value_list).cc=0;(yyval.value_list).number=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3130 "parser.y"
+#line 3132 "parser.y"
{(yyval.value_list)=(yyvsp[(2) - (3)].value_list);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3132 "parser.y"
+#line 3134 "parser.y"
{(yyval.value_list).cc=0;(yyval.value_list).number=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3136 "parser.y"
+#line 3138 "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 3140 "parser.y"
+#line 3142 "parser.y"
{(yyval.value_list) = (yyvsp[(1) - (2)].value_list);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3141 "parser.y"
+#line 3143 "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 3147 "parser.y"
+#line 3149 "parser.y"
{
typedcode_t v = node_read((yyvsp[(2) - (4)].node));
(yyval.value).c = v.c;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3194 "parser.y"
+#line 3196 "parser.y"
{
typedcode_t v = node_read((yyvsp[(1) - (4)].node));
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3244 "parser.y"
+#line 3246 "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 3265 "parser.y"
+#line 3267 "parser.y"
{
typedcode_t v = node_read((yyvsp[(2) - (2)].node));
(yyval.value).c = v.c;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3287 "parser.y"
+#line 3289 "parser.y"
{
(yyval.code) = abc_returnvoid(0);
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3290 "parser.y"
+#line 3292 "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 3297 "parser.y"
+#line 3299 "parser.y"
{
(yyval.value) = node_read((yyvsp[(1) - (1)].node));
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3300 "parser.y"
+#line 3302 "parser.y"
{
(yyval.value) = node_read((yyvsp[(1) - (1)].node));
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3303 "parser.y"
+#line 3305 "parser.y"
{
(yyval.node) = mkmultinode(&node_comma, (yyvsp[(1) - (1)].node));
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3306 "parser.y"
+#line 3308 "parser.y"
{
(yyval.node) = multinode_extend((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3309 "parser.y"
+#line 3311 "parser.y"
{
(yyval.code) = node_exec((yyvsp[(1) - (1)].node));
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3312 "parser.y"
+#line 3314 "parser.y"
{
(yyval.code) = (yyvsp[(1) - (3)].code);
(yyval.code) = code_append((yyval.code), node_exec((yyvsp[(3) - (3)].node)));
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3317 "parser.y"
+#line 3319 "parser.y"
{(yyval.value_list).cc=0;(yyval.value_list).number=0;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3318 "parser.y"
+#line 3320 "parser.y"
{(yyval.value_list)=(yyvsp[(1) - (1)].value_list);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3320 "parser.y"
+#line 3322 "parser.y"
{(yyval.code)=abc_pushstring(0,(yyvsp[(1) - (1)].id));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3321 "parser.y"
+#line 3323 "parser.y"
{(yyval.code)=abc_pushstring2(0,&(yyvsp[(1) - (1)].str));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3322 "parser.y"
+#line 3324 "parser.y"
{syntaxerror("dictionary keys must be strings");}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3323 "parser.y"
+#line 3325 "parser.y"
{syntaxerror("dictionary keys must be strings");}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3324 "parser.y"
+#line 3326 "parser.y"
{syntaxerror("dictionary keys must be strings");}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3326 "parser.y"
+#line 3328 "parser.y"
{
(yyval.value_list).cc = 0;
(yyval.value_list).cc = code_append((yyval.value_list).cc, (yyvsp[(1) - (3)].code));
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3332 "parser.y"
+#line 3334 "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 3341 "parser.y"
+#line 3343 "parser.y"
{(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3342 "parser.y"
+#line 3344 "parser.y"
{(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3343 "parser.y"
+#line 3345 "parser.y"
{(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3344 "parser.y"
+#line 3346 "parser.y"
{(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3345 "parser.y"
+#line 3347 "parser.y"
{(yyval.node) = mkcodenode((yyvsp[(1) - (1)].value));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3346 "parser.y"
+#line 3348 "parser.y"
{(yyval.node) = (yyvsp[(1) - (1)].node);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3348 "parser.y"
+#line 3350 "parser.y"
{
(yyval.node) = mkconstnode((yyvsp[(1) - (1)].constant));
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3352 "parser.y"
+#line 3354 "parser.y"
{
(yyval.node) = (yyvsp[(1) - (1)].node);
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3357 "parser.y"
+#line 3359 "parser.y"
{
typedcode_t v;
v.c = 0;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3375 "parser.y"
+#line 3377 "parser.y"
{
PASS1
state->method->need_arguments = 1;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3386 "parser.y"
+#line 3388 "parser.y"
{
typedcode_t v;
v.c = code_new();
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3396 "parser.y"
+#line 3398 "parser.y"
{
typedcode_t v;
v.c = code_new();
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3405 "parser.y"
+#line 3407 "parser.y"
{(yyval.node) = mknode2(&node_lt,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3406 "parser.y"
+#line 3408 "parser.y"
{(yyval.node) = mknode2(&node_gt,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3407 "parser.y"
+#line 3409 "parser.y"
{(yyval.node) = mknode2(&node_le,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3408 "parser.y"
+#line 3410 "parser.y"
{(yyval.node) = mknode2(&node_ge,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3409 "parser.y"
+#line 3411 "parser.y"
{(yyval.node) = mknode2(&node_eqeq,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3410 "parser.y"
+#line 3412 "parser.y"
{(yyval.node) = mknode2(&node_eqeqeq,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3411 "parser.y"
+#line 3413 "parser.y"
{(yyval.node) = mknode2(&node_noteqeq,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3412 "parser.y"
+#line 3414 "parser.y"
{(yyval.node) = mknode2(&node_noteq,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3413 "parser.y"
+#line 3415 "parser.y"
{(yyval.node) = mknode2(&node_oror,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3414 "parser.y"
+#line 3416 "parser.y"
{(yyval.node) = mknode2(&node_andand,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3415 "parser.y"
+#line 3417 "parser.y"
{(yyval.node) = mknode1(&node_not, (yyvsp[(2) - (2)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3416 "parser.y"
+#line 3418 "parser.y"
{(yyval.node) = mknode1(&node_bitnot, (yyvsp[(2) - (2)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3417 "parser.y"
+#line 3419 "parser.y"
{(yyval.node) = mknode2(&node_bitand, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3418 "parser.y"
+#line 3420 "parser.y"
{(yyval.node) = mknode2(&node_bitxor, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3419 "parser.y"
+#line 3421 "parser.y"
{(yyval.node) = mknode2(&node_bitor, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3420 "parser.y"
+#line 3422 "parser.y"
{(yyval.node) = mknode2(&node_shr, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3421 "parser.y"
+#line 3423 "parser.y"
{(yyval.node) = mknode2(&node_ushr, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3422 "parser.y"
+#line 3424 "parser.y"
{(yyval.node) = mknode2(&node_shl, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3423 "parser.y"
+#line 3425 "parser.y"
{(yyval.node) = mknode2(&node_div, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3424 "parser.y"
+#line 3426 "parser.y"
{(yyval.node) = mknode2(&node_mod, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3425 "parser.y"
+#line 3427 "parser.y"
{(yyval.node) = mknode2(&node_plus, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3426 "parser.y"
+#line 3428 "parser.y"
{(yyval.node) = mknode2(&node_minus, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3427 "parser.y"
+#line 3429 "parser.y"
{(yyval.node) = mknode2(&node_multiply, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3428 "parser.y"
+#line 3430 "parser.y"
{(yyval.node) = mknode2(&node_in, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3429 "parser.y"
+#line 3431 "parser.y"
{(yyval.node) = mknode2(&node_as, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3430 "parser.y"
+#line 3432 "parser.y"
{(yyval.node) = mknode2(&node_instanceof, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3431 "parser.y"
+#line 3433 "parser.y"
{(yyval.node) = mknode2(&node_is, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3432 "parser.y"
+#line 3434 "parser.y"
{(yyval.node) = mknode1(&node_typeof, (yyvsp[(2) - (2)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3433 "parser.y"
+#line 3435 "parser.y"
{(yyval.node) = mknode1(&node_void, (yyvsp[(2) - (2)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3434 "parser.y"
+#line 3436 "parser.y"
{ (yyval.node) = mkconstnode(constant_new_undefined());}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3435 "parser.y"
+#line 3437 "parser.y"
{ (yyval.node)=(yyvsp[(2) - (3)].node);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3436 "parser.y"
+#line 3438 "parser.y"
{(yyval.node) = mknode1(&node_neg, (yyvsp[(2) - (2)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3437 "parser.y"
+#line 3439 "parser.y"
{(yyval.node) = mknode2(&node_arraylookup, (yyvsp[(1) - (4)].node),(yyvsp[(3) - (4)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3438 "parser.y"
+#line 3440 "parser.y"
{(yyval.node) = mknode2(&node_muleq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3439 "parser.y"
+#line 3441 "parser.y"
{(yyval.node) = mknode2(&node_modeq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3440 "parser.y"
+#line 3442 "parser.y"
{(yyval.node) = mknode2(&node_shleq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3441 "parser.y"
+#line 3443 "parser.y"
{(yyval.node) = mknode2(&node_shreq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3442 "parser.y"
+#line 3444 "parser.y"
{(yyval.node) = mknode2(&node_ushreq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3443 "parser.y"
+#line 3445 "parser.y"
{ (yyval.node) = mknode2(&node_diveq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3444 "parser.y"
+#line 3446 "parser.y"
{ (yyval.node) = mknode2(&node_bitoreq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3445 "parser.y"
+#line 3447 "parser.y"
{ (yyval.node) = mknode2(&node_bitxoreq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3446 "parser.y"
+#line 3448 "parser.y"
{ (yyval.node) = mknode2(&node_bitandeq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3447 "parser.y"
+#line 3449 "parser.y"
{ (yyval.node) = mknode2(&node_pluseq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3448 "parser.y"
+#line 3450 "parser.y"
{ (yyval.node) = mknode2(&node_minuseq, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3449 "parser.y"
+#line 3451 "parser.y"
{ (yyval.node) = mknode2(&node_assign, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3450 "parser.y"
+#line 3452 "parser.y"
{ (yyval.node) = mknode3(&node_tenary, (yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3452 "parser.y"
+#line 3454 "parser.y"
{ (yyval.node) = mknode1(&node_rplusplus, (yyvsp[(1) - (2)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3453 "parser.y"
+#line 3455 "parser.y"
{ (yyval.node) = mknode1(&node_rminusminus, (yyvsp[(1) - (2)].node));}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3454 "parser.y"
+#line 3456 "parser.y"
{(yyval.node) = mknode1(&node_lplusplus, (yyvsp[(2) - (2)].node)); }
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3455 "parser.y"
+#line 3457 "parser.y"
{(yyval.node) = mknode1(&node_lminusminus, (yyvsp[(2) - (2)].node)); }
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3458 "parser.y"
+#line 3460 "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 3472 "parser.y"
+#line 3474 "parser.y"
{
typedcode_t v;
multiname_t m = {MULTINAMEA, 0, &nopackage_namespace_set, (yyvsp[(2) - (2)].id)};
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3480 "parser.y"
+#line 3482 "parser.y"
{PASS12 new_state();state->xmlfilter=1;}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3480 "parser.y"
+#line 3482 "parser.y"
{
PASS1 old_state();
PASS2
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3534 "parser.y"
+#line 3536 "parser.y"
{(yyval.id)=(yyvsp[(1) - (1)].id);}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3535 "parser.y"
+#line 3537 "parser.y"
{(yyval.id)="*";}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3537 "parser.y"
+#line 3539 "parser.y"
{(yyval.id)="*";}
}
break;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3577 "parser.y"
+#line 3579 "parser.y"
{
(yyval.node) = get_descendants((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(5) - (5)].id), 0, 0);
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3580 "parser.y"
+#line 3582 "parser.y"
{
typedcode_t v = node_read((yyvsp[(1) - (3)].node));
multiname_t m = {MULTINAME, 0, &nopackage_namespace_set, (yyvsp[(3) - (3)].id)};
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3587 "parser.y"
+#line 3589 "parser.y"
{
(yyval.node) = get_descendants((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(5) - (5)].id), 1, 0);
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3590 "parser.y"
+#line 3592 "parser.y"
{
typedcode_t v = node_read((yyvsp[(1) - (5)].node));
typedcode_t w = node_read((yyvsp[(4) - (5)].node));
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3601 "parser.y"
+#line 3603 "parser.y"
{
typedcode_t v = node_read((yyvsp[(1) - (4)].node));
multiname_t m = {MULTINAMEA, 0, &nopackage_namespace_set, (yyvsp[(4) - (4)].id)};
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3609 "parser.y"
+#line 3611 "parser.y"
{
(yyval.node) = get_descendants((yyvsp[(1) - (6)].node), (yyvsp[(4) - (6)].id), (yyvsp[(6) - (6)].id), 0, 1);
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3613 "parser.y"
+#line 3615 "parser.y"
{
typedcode_t v = node_read((yyvsp[(1) - (4)].node));
multiname_t m = {MULTINAMEA, 0, &nopackage_namespace_set, (yyvsp[(4) - (4)].id)};
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3620 "parser.y"
+#line 3622 "parser.y"
{
(yyval.node) = get_descendants((yyvsp[(1) - (6)].node), (yyvsp[(4) - (6)].id), (yyvsp[(6) - (6)].id), 1, 1);
}
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3624 "parser.y"
+#line 3626 "parser.y"
{
typedcode_t v = node_read((yyvsp[(1) - (6)].node));
typedcode_t w = node_read((yyvsp[(5) - (6)].node));
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3634 "parser.y"
+#line 3636 "parser.y"
{
typedcode_t v = node_read((yyvsp[(1) - (6)].node));
typedcode_t w = node_read((yyvsp[(5) - (6)].node));
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3645 "parser.y"
+#line 3647 "parser.y"
{
typedcode_t v1 = node_read((yyvsp[(1) - (3)].node));
(yyval.value).c = v1.c;
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3841 "parser.y"
+#line 3844 "parser.y"
{
PASS1
/* Queue unresolved identifiers for checking against the parent
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3875 "parser.y"
+#line 3878 "parser.y"
{
PASS12
NEW(namespace_decl_t,n);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3882 "parser.y"
+#line 3885 "parser.y"
{
PASS12
NEW(namespace_decl_t,n);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3889 "parser.y"
+#line 3892 "parser.y"
{
PASS12
NEW(namespace_decl_t,n);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3896 "parser.y"
+#line 3899 "parser.y"
{
PASS12
dict_put(state->namespaces, (unsigned char*)(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 3922 "parser.y"
{
(yyval.code) = 0;
(yyval.code) = code_append((yyval.code), node_read((yyvsp[(4) - (4)].node)).c);
if(as3_pass==2) {
/* Line 1464 of skeleton.m4 */
-#line 3925 "parser.y"
+#line 3928 "parser.y"
{
PASS12
/* Line 1464 of skeleton.m4 */
-#line 9008 "parser.tab.c"
+#line 9011 "parser.tab.c"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);