X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=lib%2Fas3%2Fparser.y;h=37ad268b396d14be3cedaa08dc302efb64009b65;hp=4699a9015acecbcab16a6fe297b204a1b97fa804;hb=322a2f4bf5cdb00be99a0fe660372b1596265a4d;hpb=d46619a310dd04066cc117e904b84785d1a0cd51 diff --git a/lib/as3/parser.y b/lib/as3/parser.y index 4699a90..37ad268 100644 --- a/lib/as3/parser.y +++ b/lib/as3/parser.y @@ -573,7 +573,7 @@ void initialize_file(char*filename) if(!state->method) syntaxerror("internal error: skewed tokencount"); function_initvars(state->method, 0, 0, 0, 1); - global->init = abc_initscript(global->file); + global->init = 0; } } @@ -586,9 +586,12 @@ void finish_file() if(as3_pass==2) { dict_del(global->file2token2info, current_filename); code_t*header = method_header(state->method); - code_t*c = wrap_function(header, 0, global->init->method->body->code); - global->init->method->body->code = abc_returnvoid(c); - free(state->method);state->method=0; + //if(global->init->method->body->code || global->init->traits) { + if(global->init) { + code_t*c = wrap_function(header, 0, global->init->method->body->code); + global->init->method->body->code = abc_returnvoid(c); + free(state->method);state->method=0; + } } //free(state->package);state->package=0; // used in registry @@ -1469,6 +1472,7 @@ static abc_method_t* endfunction(modifiers_t*mod, enum yytokentype getset, char* multiname_t mname = {QNAME, &mname_ns, 0, name}; f = abc_method_new(global->file, type2, 1); + if(!global->init) global->init = abc_initscript(global->file); trait_t*t = trait_new_method(&global->init->traits, multiname_clone(&mname), f); //abc_code_t*c = global->init->method->body->code; } @@ -1979,8 +1983,12 @@ CODEBLOCK : CODEPIECE %prec below_semicolon {$$=$1;} /* ------------ package init code ------------------- */ PACKAGE_INITCODE: CODE_STATEMENT { - code_t**cc = &global->init->method->body->code; - *cc = code_append(*cc, $1); + if($1) { + if(!global->init) + global->init = abc_initscript(global->file); + code_t**cc = &global->init->method->body->code; + *cc = code_append(*cc, $1); + } } /* ------------ conditional compilation ------------- */ @@ -2614,6 +2622,7 @@ IDECLARATION : MAYBE_MODIFIERS "function" GETSET T_IDENTIFIER '(' MAYBE_PARAM_LI code_t**code=0; if(!state->cls) { // global variable + if(!global->init) global->init = abc_initscript(global->file); ns.name = state->package; traits = &global->init->traits; code = &global->init->method->body->code;