X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fas3%2Fcompiler.c;h=049d15832a80a66d3d4c7d7aecba5f38689efa0a;hb=e0be76c5568d0482705912669c0a91be21755fcd;hp=af418cbbc2f2bfbec319d544b46d58afe019a7d7;hpb=e531f5204757feafa7e09630e4c6b66dd6be6147;p=swftools.git diff --git a/lib/as3/compiler.c b/lib/as3/compiler.c index af418cb..049d158 100644 --- a/lib/as3/compiler.c +++ b/lib/as3/compiler.c @@ -29,9 +29,10 @@ #include /* flex/bison definitions */ -extern void avm2_set_in (FILE * in_str ); -extern int avm2_parse(); -extern int avm2_lex_destroy(); +extern void as3_set_in (FILE * in_str ); +extern int a3_parse(); +extern int as3_lex(); +extern int as3_lex_destroy(); void as3_setverbosity(int level) { @@ -45,6 +46,11 @@ void as3_add_include_dir(char*dir) static char registry_initialized = 0; static char parser_initialized = 0; +void a3_lex() +{ + as3_lex(); +} + void as3_parse_file(char*filename) { if(!registry_initialized) { @@ -56,17 +62,34 @@ void as3_parse_file(char*filename) initialize_parser(); } + as3_pass = 0; + char*fullfilename = enter_file(filename, 0); FILE*fi = fopen(fullfilename, "rb"); if(!fi) { syntaxerror("Couldn't find file %s: %s", fullfilename, strerror(errno)); } - avm2_set_in(fi); + /* pass 1 */ + as3_pass = 1; + as3_set_in(fi); initialize_file(filename); - avm2_parse(); - avm2_lex_destroy(); - fclose(fi); + a3_parse(); + as3_lex_destroy(); + finish_file(); + + /* pass 2 */ + // TODO: this should re-use tokens! + enter_file(filename, 0); + as3_pass = 2; + fseek(fi, 0, SEEK_SET); + as3_set_in(fi); + initialize_file(filename); + a3_parse(); + as3_lex_destroy(); finish_file(); + + fclose(fi); + } static void*as3code = 0;