X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fas3%2Fmklib.c;h=27412449b13bf207a8e4f9289058cf57f9853e47;hb=0be76c34f97fccb5150a45c7ee879d56bad664e8;hp=1a90eb8e3812cc46a107aa5a483bcd15ae5b50ba;hpb=4b4a2c8042c0f274978ca8e89d2fa3b87ffae371;p=swftools.git diff --git a/lib/as3/mklib.c b/lib/as3/mklib.c index 1a90eb8..2741244 100644 --- a/lib/as3/mklib.c +++ b/lib/as3/mklib.c @@ -109,7 +109,7 @@ char* kind2string(int kind) { } -void write_member_info(FILE*fi, char*id2, const char*name, int flags, trait_t*trait) +void write_member_info(FILE*fi, char*parent, char*id2, const char*name, int flags, trait_t*trait) { char*retvalue = 0; char*type="0"; @@ -141,16 +141,28 @@ void write_member_info(FILE*fi, char*id2, const char*name, int flags, trait_t*tr fprintf(fi, ", 0"); else fprintf(fi, ", &%s", retvalue); + + if(!parent) + fprintf(fi, ", 0"); + else + fprintf(fi, ", &%s", parent); // parent + fprintf(fi, "};\n"); } -int access2flags(int access) +int access2flags(multiname_t*m) { + int access = m->ns->access; int flags=0; if(access == ACCESS_PACKAGE) flags|=FLAG_PUBLIC; if(access == ACCESS_PRIVATE) flags|=FLAG_PRIVATE; if(access == ACCESS_PROTECTED) flags|=FLAG_PROTECTED; - if(access == ACCESS_PACKAGEINTERNAL) flags|=FLAG_INTERNAL; + if(access == ACCESS_PACKAGEINTERNAL) flags|=FLAG_PACKAGEINTERNAL; + if(access == ACCESS_NAMESPACE) { + if(!strcmp(m->ns->name, "http://adobe.com/AS3/2006/builtin")) { + flags|=FLAG_NAMESPACE_ADOBE; + } + } return flags; } @@ -252,12 +264,12 @@ void load_libraries(char*filename, int pass, FILE*fi) } int flags = is_static?FLAG_STATIC:0; //flags |= access2flags(access); - flags |= access2flags(trait->name->ns->access); + flags |= access2flags(trait->name); if(pass==0) { fprintf(fi, "static memberinfo_t %s;\n", id2); } if(pass==1) { - write_member_info(fi, id2, name, flags, trait); + write_member_info(fi, id, id2, name, flags, trait); } else if(pass==2) { fprintf(fi, " dict_put(&%s.members, \"%s\", &%s);\n", id, name, id2); } @@ -309,7 +321,7 @@ void load_libraries(char*filename, int pass, FILE*fi) const char*name = trait->name->name; char*pid = mkpid(package); char*id2 = mkid2(trait->name); - int flags = FLAG_STATIC|access2flags(trait->name->ns->access); + int flags = FLAG_STATIC|access2flags(trait->name); NEW(memberinfo_t,m); char np = 0; int clsflags = FLAG_STATIC | FLAG_METHOD; @@ -317,7 +329,7 @@ void load_libraries(char*filename, int pass, FILE*fi) fprintf(fi, "static memberinfo_t %s;\n", id2); fprintf(fi, "static classinfo_t %s_class;\n", id2); } else if(pass==1) { - write_member_info(fi, id2, name, flags, trait); + write_member_info(fi, 0, id2, name, flags, trait); fprintf(fi, "static classinfo_t %s_class = {0x%02x, 0x%02x, \"%s\", \"%s\", &%s, 0, members:{0}};\n", id2, trait->name->ns->access, clsflags,