s = s->superclass;
while(s) {
+ if(s->kind == INFOTYPE_UNRESOLVED)
+ break;
+
m = (slotinfo_t*)dict_lookup(&s->members, &tmp);
if(m) {
return (memberinfo_t*)m;
m = registry_findmember(cls, "", name, superclasses);
if(m) return m;
/* TODO: it maybe would be faster to just store the builtin namespace as "" in
- builtins.c */
+ builtins.c (update: some members (e.g. XML.length) are present both for
+ "" and "http:...builtin") */
m = registry_findmember(cls, "http://adobe.com/AS3/2006/builtin", name, superclasses);
if(m) return m;
return 0;
if(!c) c = (classinfo_t*)registry_safefind("", "RegExp");
return c;
}
+classinfo_t* registry_getdateclass() {
+ static classinfo_t*c = 0;
+ if(!c) c = (classinfo_t*)registry_safefind("", "Date");
+ return c;
+}
+classinfo_t* registry_getxmlclass() {
+ static classinfo_t*c = 0;
+ if(!c) c = (classinfo_t*)registry_safefind("", "XML");
+ return c;
+}
+classinfo_t* registry_getxmllistclass() {
+ static classinfo_t*c = 0;
+ if(!c) c = (classinfo_t*)registry_safefind("", "XMLList");
+ return c;
+}
classinfo_t* registry_getnamespaceclass() {
static classinfo_t*c = 0;
if(!c) c = (classinfo_t*)registry_safefind("", "Namespace");
classinfo_t* registry_getnullclass() {
return &nullclass;
}
+classinfo_t voidclass = {
+ INFOTYPE_CLASS,0,0,ACCESS_PACKAGE, "", "void", 0, 0, 0
+};
+classinfo_t* registry_getvoidclass() {
+ return &voidclass;
+}
namespace_t access2namespace(U8 access, char*package)
{
char* infotypename(slotinfo_t*s)
{
if(s->kind == INFOTYPE_CLASS) return "class";
- else if(s->kind == INFOTYPE_VAR) return "member";
- else if(s->kind == INFOTYPE_METHOD) return "method";
+ else if(s->kind == INFOTYPE_VAR) return "var";
+ else if(s->kind == INFOTYPE_METHOD) return "function";
else return "object";
}
+void slotinfo_dump(slotinfo_t*s)
+{
+ if(s->package[0]) {
+ printf("%s %s.%s", infotypename(s), s->package, s->name);
+ } else {
+ printf("%s %s", infotypename(s), s->name);
+ }
+ if(s->kind == INFOTYPE_CLASS) {
+ classinfo_t*c = (classinfo_t*)s;
+ }
+ else if(s->kind == INFOTYPE_VAR) {
+ varinfo_t*v = (varinfo_t*)s;
+ printf(":%s", v->type?v->type->name:"*");
+ if(v->value)
+ printf("=%s", constant_tostring(v->value));
+ if(v->slot)
+ printf(" (slot:%d)", v->slot);
+ }
+ else if(s->kind == INFOTYPE_METHOD) {
+ methodinfo_t*m = (methodinfo_t*)s;
+ }
+ else {
+ }
+ printf("\n");
+}
+