+static int compare_traits(const void*v1, const void*v2)
+{
+ trait_t* x1 = *(trait_t**)v1;
+ trait_t* x2 = *(trait_t**)v2;
+ int i = strcmp(x1->name->ns->name, x2->name->ns->name);
+ if(i)
+ return i;
+ return strcmp(x1->name->name, x2->name->name);
+}
+
+char* kind2string(int kind)
+{
+}
+
+void write_member_info(FILE*fi, char*parent, char*id2, const char*name, int flags, trait_t*trait)
+{
+ char*retvalue = 0;
+ char*type="0";
+ switch(trait->kind) {
+ case TRAIT_METHOD: {
+ multiname_t*ret = trait->method->return_type;
+
+ if(!ret)
+ retvalue = 0;
+ else
+ retvalue = mkid(ret->ns->name, ret->name);
+ if(ret && !strcmp(ret->name, "void"))
+ retvalue = 0;
+ } //fallthrough
+ case TRAIT_FUNCTION:
+ type = "MEMBER_METHOD";
+ break;
+ case TRAIT_CONST:
+ case TRAIT_GETTER:
+ case TRAIT_SETTER:
+ case TRAIT_SLOT:
+ type = "MEMBER_SLOT";
+ break;
+ default:
+ fprintf(stderr, "Unknown trait type %d\n", trait->kind);
+ }
+ fprintf(fi, "static memberinfo_t %s = {%s, 0x%02x, \"%s\"", id2, type, flags, name);
+ if(!retvalue)
+ fprintf(fi, ", 0");
+ else
+ fprintf(fi, ", &%s", retvalue);
+
+ if(!parent)
+ fprintf(fi, ", 0");
+ else
+ fprintf(fi, ", &%s", parent); // parent
+
+ fprintf(fi, ", 0,0,0};\n");
+}
+
+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_PACKAGEINTERNAL;
+ if(access == ACCESS_NAMESPACE) {
+ if(!strcmp(m->ns->name, "http://adobe.com/AS3/2006/builtin")) {
+ flags|=FLAG_NAMESPACE_ADOBE;
+ }
+ }
+ return flags;
+}
+