added cleanup code
[swftools.git] / lib / as3 / main.c
index cfc7bbe..7e318b4 100644 (file)
@@ -49,6 +49,7 @@ int main(int argn, char*argv[])
 {
     char*filename = 0;
     char buf[512];
+    void*code=0;
     
     if(argn<=1) {
         fprintf(stderr, "please supply a filename\n");
@@ -56,25 +57,27 @@ int main(int argn, char*argv[])
     }
     filename=argv[1];
     
-    registry_init();
-    
     add_include_dir(getcwd(buf, 512));
+    
     char*fullfilename = enter_file(filename, 0);
-
     FILE*fi = fopen(fullfilename, "rb");
     if(!fi) {
         perror(fullfilename);
         return 1;
     }
-    initialize_state();
     avm2_set_in(fi);
 
+    registry_init();
+    initialize_state();
+
     if(argn>2 && !strcmp(argv[2], "-lex")) {
         test_lexer();
         return 0;
     }
     avm2_parse();
-    void*code = finalize_state();
+    code = finalize_state();
+    avm2_lex_destroy();
+    fclose(fi);
 
     SWF swf;
     memset(&swf, 0, sizeof(swf));
@@ -91,6 +94,7 @@ int main(int argn, char*argv[])
         swf_SetU16(tag, 1);
         swf_SetU16(tag, 0);
         swf_SetString(tag, globalclass);
+        free(globalclass);globalclass=0;
     } else {
         printf("Warning: no global public MovieClip subclass\n");
     }
@@ -104,5 +108,7 @@ int main(int argn, char*argv[])
     swf_WriteSWF(f,&swf);
     close(f);
 
+    swf_FreeTags(&swf);
+
     return 0;
 }