From b6ebc39257e2814f08a17d8c179c3991c16053ba Mon Sep 17 00:00:00 2001 From: Matthias Kramm Date: Fri, 1 Jan 2010 21:53:51 -0800 Subject: [PATCH] introduced cross-asset dependencies --- lib/as3/import.c | 4 +--- lib/as3/registry.c | 15 ++++++++++++++- lib/as3/registry.h | 1 + 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/lib/as3/import.c b/lib/as3/import.c index fdb4a12..59dbac0 100644 --- a/lib/as3/import.c +++ b/lib/as3/import.c @@ -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; diff --git a/lib/as3/registry.c b/lib/as3/registry.c index 05d275e..5c947e5 100644 --- a/lib/as3/registry.c +++ b/lib/as3/registry.c @@ -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]); diff --git a/lib/as3/registry.h b/lib/as3/registry.h index 9e6f058..c9a21b0 100644 --- a/lib/as3/registry.h +++ b/lib/as3/registry.h @@ -117,6 +117,7 @@ struct _varinfo /*extends memberinfo*/ { struct _asset_bundle { abc_file_t*file; + asset_bundle_list_t*dependencies; char used; }; -- 1.7.10.4