X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fas3%2Fimport.c;h=62c515203428900639a59a60c83972d01eee49b7;hb=daf5378d1edb818b1f9afae973cd16a13272a127;hp=43532021ddec46a025e5c30490d6c9214f69f01e;hpb=b8aa0577aae67db4da5221459102202febc5c103;p=swftools.git diff --git a/lib/as3/import.c b/lib/as3/import.c index 4353202..62c5152 100644 --- a/lib/as3/import.c +++ b/lib/as3/import.c @@ -103,7 +103,9 @@ static int compare_traits(const void*v1, const void*v2) static classinfo_t*resolve_class(char*filename, char*what, multiname_t*n) { if(!n) return 0; - if(!n->name[0] || !strcmp(n->name, "void")) return 0; + if(!n->name[0]) return 0; + if(!strcmp(n->name, "void")) + return &voidclass; classinfo_t*c = 0; if(n->ns && n->ns->name) { @@ -188,29 +190,31 @@ static void import_code(void*_abc, char*filename, int pass) if(access==ACCESS_PRIVATE) goto cont; const char*name = trait->name->name; - char* ns= ACCESS_NAMESPACE?strdup(trait->name->ns->name):""; - if(registry_findmember(c, ns, name, 0)) + char* ns = access==ACCESS_NAMESPACE?strdup(trait->name->ns->name):""; + + if(registry_findmember(c, ns, name, 0, is_static)) goto cont; + name = strdup(name); memberinfo_t*s = 0; if(trait->kind == TRAIT_METHOD) { - s = (memberinfo_t*)methodinfo_register_onclass(c, access, ns, name); + s = (memberinfo_t*)methodinfo_register_onclass(c, access, ns, name, is_static); s->return_type = resolve_class(filename, "return type", trait->method->return_type); dict_put(names, name, 0); } else if(trait->kind == TRAIT_SLOT) { - s = (memberinfo_t*)varinfo_register_onclass(c, access, ns, name); + s = (memberinfo_t*)varinfo_register_onclass(c, access, ns, name, is_static); s->type = resolve_class(filename, "type", trait->type_name); dict_put(names, name, 0); } else if(trait->kind == TRAIT_GETTER) { - s = (memberinfo_t*)varinfo_register_onclass(c, access, ns, name); + s = (memberinfo_t*)varinfo_register_onclass(c, access, ns, name, is_static); s->type = resolve_class(filename, "type", trait->method->return_type); dict_put(names, name, 0); } else if(trait->kind == TRAIT_CONST) { /* some variables (e.g. XML.length) are apparently both a method and a slot. needs split of static/non-static first */ if(!dict_contains(names, name)) { - varinfo_t*v = (varinfo_t*)varinfo_register_onclass(c, access, ns, name); + varinfo_t*v = (varinfo_t*)varinfo_register_onclass(c, access, ns, name, is_static); v->type = resolve_class(filename, "type", trait->type_name); v->flags |= FLAG_CONST; /* leave this alone for now- it blows up the file too much