- }
-
-
- trait_list_t*l=0;
- char is_static = 0;
- dict_t*d = dict_new();
- l = cls->traits;
- while(l) {
- trait_t*trait = l->trait;
- if(trait->name->ns->access==ACCESS_PRIVATE)
- goto cont;
- const char*name = trait->name->name;
- char id2[1024];
- sprintf(id2, "%s_%s", id, name);
- char*retvalue = 0;
-
- if(dict_lookup(d, name)) {
- goto cont;
- } else {
- dict_put(d, (char*)name, (char*)name);
- }
- 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);
- }
- if(pass==0) {
- fprintf(fi, "static memberinfo_t %s;\n", id2);
- } if(pass==1) {
- fprintf(fi, "static memberinfo_t %s = {%s, \"%s\"", id2, type, name);
- if(!retvalue)
- fprintf(fi, ", 0");
- else
- fprintf(fi, ", &%s", retvalue);
- fprintf(fi, "};\n");
- } else if(pass==2) {
- fprintf(fi, " dict_put(&%s.members, \"%s\", &%s);\n", id, name, id2);
+ int j;
+ dict_t*d = dict_new();
+ for(;l;l=l->next) {
+ trait_t*trait = l->trait;
+ if(trait->name->ns->access==ACCESS_PRIVATE)
+ continue;
+ char*type="something";
+ const char*name = trait->name->name;
+ if(dict_lookup(d, name)) {
+ continue;
+ } else {
+ dict_put(d, (char*)name, (char*)name);
+ }
+ switch(trait->kind) {
+ case TRAIT_METHOD: type="method";break;
+ case TRAIT_CONST: type="const";break;
+ case TRAIT_FUNCTION: type="function";break;
+ case TRAIT_GETTER: type="member";break;
+ case TRAIT_SETTER: type="member";break;
+ case TRAIT_SLOT: type="member";break;
+ case TRAIT_CLASS: type="subclass";break;
+ }
+ fprintf(fi, " dict_put(&%s.members, \"%s\", \"%s\");\n",
+ id, name, type);