flex and bison now have different prefixes
[swftools.git] / lib / as3 / compiler.c
index af418cb..049d158 100644 (file)
 #include <errno.h>
 
 /* 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;