- qsort(traits, num_methods, sizeof(trait_t*), compare_traits);
- const char*last_package = "-xxx-";
- for(t=0;t<num_methods;t++) {
- trait_t*trait = traits[t];
- if(IS_PUBLIC_MEMBER(trait)) {
- const char*package = trait->name->ns->name;
- const char*name = trait->name->name;
- char*pid = mkpid(package);
- char*id2 = mkid2(trait->name);
- int flags = FLAG_STATIC|access2flags(trait->name);
- NEW(memberinfo_t,m);
- char np = 0;
- int clsflags = FLAG_STATIC | FLAG_METHOD;
- if(pass==0) {
- 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, 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,
- package, name,
- id2);
- } else if(pass==3) {
- /*if(np) {
- fprintf(fi, " dict_init(%s.classes, 1); //not used yet\n", pid);
- fprintf(fi, " dict_init(%s.functions, 1);\n", pid);
- }
- fprintf(fi, " dict_put(&%s.functions, \"%s\", &%s);\n", pid, name, id2);*/
- fprintf(fi, " dict_put(d, &%s_class, &%s_class);\n", id2, id2);
- }
- } else if(trait->kind == TRAIT_CLASS) {
- // ignore classes, these are treated above
- } else {
- printf("%02x %s\n", trait->kind, multiname_tostring(trait->name));
+ fprintf(fi, "0}};\n");
+ }
+ if(s->kind == INFOTYPE_METHOD) {
+ methodinfo_t*m = (methodinfo_t*)s;
+ fprintf(fi, "%s, ", mkptr(m->return_type));
+ fprintf(fi, "%s, ", mkptr(m->parent));
+ fprintf(fi, "0"); // params TODO
+ fprintf(fi, "};\n");
+ }
+ if(s->kind == INFOTYPE_SLOT) {
+ varinfo_t*m = (varinfo_t*)s;
+ fprintf(fi, "%s, ", mkptr(m->type));
+ fprintf(fi, "%s, ", mkptr(m->parent));
+ fprintf(fi, "0"); // value TODO
+ fprintf(fi, "};\n");
+ }
+
+ if(s->kind == INFOTYPE_CLASS) {
+ classinfo_t*c = (classinfo_t*)s;
+ dict_t*d = &c->members;
+ int t;
+ for(t=0;t<d->hashsize;t++) {
+ dictentry_t*l = d->slots[t];
+ while(l) {
+ slotinfo_t*s2 = (slotinfo_t*)l->data;
+ write_slotinfo(fi, s2, mkid2(id,s2->name), prefix);
+ l = l->next;