+ assert(classes);
+ classinfo_t tmp;
+ tmp.package = package;
+ tmp.name = name;
+ classinfo_t* c = (classinfo_t*)dict_lookup(classes, &tmp);
+ /*if(c)
+ printf("%s.%s->%08x (%s.%s)\n", package, name, c, c->package, c->name);*/
+ return c;
+}
+memberinfo_t* registry_findmember(classinfo_t*cls, const char*name)
+{
+ return (memberinfo_t*)dict_lookup(&cls->members, name);
+}
+void registry_fill_multiname(multiname_t*m, namespace_t*n, classinfo_t*c)
+{
+ m->type = QNAME;
+ m->ns = n;
+ m->ns->access = c->access;
+ m->ns->name = (char*)c->package;
+ m->name = c->name;
+ m->namespace_set = 0;
+}
+multiname_t* classinfo_to_multiname(classinfo_t*cls)
+{
+ if(!cls)
+ return 0;
+ multiname_t*m=0;
+ namespace_t*ns = namespace_new(cls->access, cls->package);
+ return multiname_new(ns,cls->name);
+}
+
+// ----------------------- builtin types ------------------------------
+classinfo_t* registry_getanytype() {return 0;/*FIXME*/}
+
+classinfo_t* registry_getobjectclass() {return registry_safefindclass("", "Object");}
+classinfo_t* registry_getstringclass() {return registry_safefindclass("", "String");}
+classinfo_t* registry_getintclass() {return registry_safefindclass("", "int");}
+classinfo_t* registry_getuintclass() {return registry_safefindclass("", "uint");}
+classinfo_t* registry_getbooleanclass() {return registry_safefindclass("", "Boolean");}
+classinfo_t* registry_getnumberclass() {return registry_safefindclass("", "Number");}
+classinfo_t* registry_getMovieClip() {return registry_safefindclass("flash.display", "MovieClip");}
+
+// ----------------------- builtin dummy types -------------------------
+classinfo_t nullclass = {
+ ACCESS_PACKAGE, 0, "", "null", 0, 0, 0,
+};
+classinfo_t* registry_getnullclass() {
+ return &nullclass;