introduced cross-asset dependencies
authorMatthias Kramm <kramm@quiss.org>
Sat, 2 Jan 2010 05:53:51 +0000 (21:53 -0800)
committerMatthias Kramm <kramm@quiss.org>
Sat, 2 Jan 2010 05:53:51 +0000 (21:53 -0800)
lib/as3/import.c
lib/as3/registry.c
lib/as3/registry.h

index fdb4a12..59dbac0 100644 (file)
@@ -175,9 +175,7 @@ static void import_code(void*_abc, char*filename, int pass, asset_bundle_t*asset
         classinfo_t*c = (classinfo_t*)registry_find(package, name);
         if(!c) continue;
 
-       if(cls->asset) {
-           c->assets = asset_bundle;
-       }
+       c->assets = asset_bundle;
 
         int nr = 0;
         multiname_list_t*i = cls->interfaces;
index 05d275e..5c947e5 100644 (file)
@@ -73,6 +73,17 @@ type_t memberinfo_type = {
 };
 
 // ----------------------- assets -------------------------------------
+static void use_asset(asset_bundle_t*a)
+{
+    a->used = 1;
+    asset_bundle_list_t*l = a->dependencies;
+    while(l) {
+       if(!l->asset_bundle->used) {
+           use_asset(l->asset_bundle);
+       }
+       l = l->next;
+    }
+}
 void registry_use(slotinfo_t*s)
 {
     if(!s) return;
@@ -80,7 +91,9 @@ void registry_use(slotinfo_t*s)
        s->flags |= FLAG_USED;
        if(s->kind == INFOTYPE_CLASS) {
            classinfo_t*c=(classinfo_t*)s;
-           if(c->assets) c->assets->used = 1;
+           if(c->assets) {
+               use_asset(c->assets);
+           }
            int t=0;
            while(c->interfaces[t]) {
                registry_use((slotinfo_t*)c->interfaces[t]);
index 9e6f058..c9a21b0 100644 (file)
@@ -117,6 +117,7 @@ struct _varinfo /*extends memberinfo*/ {
 
 struct _asset_bundle {
     abc_file_t*file;
+    asset_bundle_list_t*dependencies;
     char used;
 };