+void as3_parse_scheduled()
+{
+ DEBUG printf("[pass %d] parse scheduled\n", as3_pass);
+
+ while(scheduled) {
+ scheduled_file_t*s = scheduled;
+ scheduled = 0;
+ while(s) {
+ scheduled_file_t*old = s;
+ as3_parse_file_or_array(s->name, s->filename, 0,0);
+ s = s->next;
+
+ free(old->filename);
+ free(old->name);
+ old->filename = old->name = 0;
+ free(old);
+ }
+ }
+ if(scheduled_dict) {
+ dict_destroy(scheduled_dict);
+ scheduled_dict=0;
+ }
+}
+
+void as3_schedule_file(const char*name, const char*filename)
+{
+ if(!scheduled_dict) {
+ scheduled_dict = dict_new();
+ }
+
+ filename = normalize_path(filename);
+
+ if(dict_contains(scheduled_dict, filename)) {
+ return; //already processed
+ } else {
+ dict_put(scheduled_dict, filename, 0);
+ }
+ DEBUG printf("[pass %d] schedule %s %s\n", as3_pass, name, filename);
+
+ NEW(scheduled_file_t, f);
+ f->name = strdup(name);
+ f->filename = strdup(filename);
+ f->next = scheduled; // dfs
+ scheduled = f;
+}
+
+void as3_parse_list()
+{
+ while(compile_list) {
+ as3_parse_file_or_array(compile_list->name, compile_list->filename, 0,0);
+ compile_list = compile_list->next;
+ }
+}
+
+void as3_parse_bytearray(const char*name, const void*mem, int length)
+{
+ as3_pass = 1;
+ as3_parse_file_or_array(name, 0, mem, length);
+ as3_parse_scheduled();
+
+ registry_resolve_all();
+