-
- if(pass>=0)
- for(t=0;t<abc->classes->num;t++) {
- abc_class_t*cls = array_getvalue(abc->classes, index[t]);
- int access = cls->classname->ns->access;
- if(access==ACCESS_PRIVATE ||
- access==ACCESS_PACKAGEINTERNAL)
- continue;
- if(!strncmp(cls->classname->ns->name, "__AS3", 5))
- continue;
-
- const char*package = cls->classname->ns->name;
- const char*name = cls->classname->name;
- const char*superpackage = 0;
- const char*supername = 0;
- char*superid = 0;
- if(cls->superclass) {
- superpackage = cls->superclass->ns->name;
- supername = cls->superclass->name;
- superid = mkid(superpackage, supername);
- }
- char*id = mkid(package, name);
- U8 flags = cls->flags;
-
- if(pass==0) {
- fprintf(fi, "static classinfo_t %s;\n", id);
- } else if(pass==1) {
- fprintf(fi, "static classinfo_t %s = {0x%02x, 0x%02x, \"%s\", \"%s\"", id, access, flags, package, name);
- fprintf(fi, ", (void*)0"); //slot
- if(superid)
- fprintf(fi, ", &%s, interfaces:{", superid);
- else
- fprintf(fi, ", (void*)0, interfaces:{");
- if(cls->interfaces) {
- multiname_list_t*i=cls->interfaces;
- while(i) {
- char*iid = mkid2(i->multiname);
- fprintf(fi, "&%s, ", iid);
- i = i->next;
- }
- }
- fprintf(fi, "(void*)0}};\n");
- } else if(pass==2) {
- trait_list_t*l=cls->traits;
- fprintf(fi, " dict_put(d, &%s, &%s);\n", id, id);
- fprintf(fi, " dict_init(&%s.members, %d);\n", id, list_length(l)+1);
- }
-
-
- trait_list_t*l=0;
- char is_static = 0;
- dict_t*d = dict_new();
- l = cls->traits;
+ }
+}
+void write_initinfo(FILE*fi, slotinfo_t*s, char*prefix)
+{
+ if(s->kind == INFOTYPE_CLASS) {
+ classinfo_t*c = (classinfo_t*)s;
+ fprintf(fi, "%s", prefix);
+ char*id = mkid(c);
+ dict_t*d = &c->members;
+ fprintf(fi, "dict_init(&%s.members, %d);\n", id, d->hashsize);
+ int t;
+ for(t=0;t<d->hashsize;t++) {
+ dictentry_t*l = d->slots[t];