static classinfo_t*resolve_class(char*filename, char*what, multiname_t*n)
{
if(!n) return 0;
- if(!n->name[0] || !strcmp(n->name, "void")) return 0;
+ if(!n->name[0]) return 0;
+ if(!strcmp(n->name, "void"))
+ return &voidclass;
classinfo_t*c = 0;
if(n->ns && n->ns->name) {
if(access==ACCESS_PRIVATE)
goto cont;
const char*name = trait->name->name;
- char* ns= ACCESS_NAMESPACE?strdup(trait->name->ns->name):"";
- if(registry_findmember(c, ns, name, 0))
+ char* ns = access==ACCESS_NAMESPACE?strdup(trait->name->ns->name):"";
+
+ if(registry_findmember(c, ns, name, 0, is_static))
goto cont;
+
name = strdup(name);
memberinfo_t*s = 0;
if(trait->kind == TRAIT_METHOD) {
- s = (memberinfo_t*)methodinfo_register_onclass(c, access, ns, name);
+ s = (memberinfo_t*)methodinfo_register_onclass(c, access, ns, name, is_static);
s->return_type = resolve_class(filename, "return type", trait->method->return_type);
dict_put(names, name, 0);
} else if(trait->kind == TRAIT_SLOT) {
- s = (memberinfo_t*)varinfo_register_onclass(c, access, ns, name);
+ s = (memberinfo_t*)varinfo_register_onclass(c, access, ns, name, is_static);
s->type = resolve_class(filename, "type", trait->type_name);
dict_put(names, name, 0);
} else if(trait->kind == TRAIT_GETTER) {
- s = (memberinfo_t*)varinfo_register_onclass(c, access, ns, name);
+ s = (memberinfo_t*)varinfo_register_onclass(c, access, ns, name, is_static);
s->type = resolve_class(filename, "type", trait->method->return_type);
dict_put(names, name, 0);
} else if(trait->kind == TRAIT_CONST) {
/* some variables (e.g. XML.length) are apparently both a method and a slot.
needs split of static/non-static first */
if(!dict_contains(names, name)) {
- varinfo_t*v = (varinfo_t*)varinfo_register_onclass(c, access, ns, name);
+ varinfo_t*v = (varinfo_t*)varinfo_register_onclass(c, access, ns, name, is_static);
v->type = resolve_class(filename, "type", trait->type_name);
v->flags |= FLAG_CONST;
/* leave this alone for now- it blows up the file too much