CYSetProperty(context, cycript, CYJSString("Functor"), Functor);
CYSetProperty(context, cycript, CYJSString("Pointer"), JSObjectMakeConstructor(context, Pointer_, &Pointer_new));
- CYSetProperty(context, cycript, CYJSString("Type"), JSObjectMakeConstructor(context, Type_privateData::Class_, &Type_new));
+
+ JSObjectRef Type(JSObjectMakeConstructor(context, Type_privateData::Class_, &Type_new));
+ CYSetProperty(context, cycript, CYJSString("Type"), Type);
+
+ JSObjectRef Type_prototype(CYCastJSObject(context, CYGetProperty(context, Type, prototype_s)));
+ CYSetProperty(context, cy, CYJSString("Type_prototype"), Type_prototype);
JSObjectRef all(JSObjectMake(context, All_, NULL));
CYSetProperty(context, cycript, CYJSString("all"), all);
static JSClassRef FunctionInstance_;
static JSClassRef ObjectInstance_;
static JSClassRef StringInstance_;
+static JSClassRef TypeInstance_;
static JSClassRef Internal_;
static JSClassRef Message_;
static JSValueRef Instance_callAsFunction_toString(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception);
-JSValueRef CYGetClassPrototype(JSContextRef context, id self) {
+JSValueRef CYGetClassPrototype(JSContextRef context, Class self, bool meta) {
if (self == nil)
return CYGetCachedObject(context, CYJSString("Instance_prototype"));
+ else if (meta && !class_isMetaClass(self))
+ return CYGetCachedObject(context, CYJSString("TypeInstance_prototype"));
JSObjectRef global(CYGetGlobalObject(context));
JSObjectRef cy(CYCastJSObject(context, CYGetProperty(context, global, cy_s)));
else if (self == NSString_)
prototype = CYGetCachedObject(context, CYJSString("StringInstance_prototype"));
else
- prototype = CYGetClassPrototype(context, class_getSuperclass(self));
+ prototype = CYGetClassPrototype(context, class_getSuperclass(self), meta);
JSObjectRef object(JSObjectMake(context, _class, NULL));
JSObjectSetPrototype(context, object, prototype);
return object;
}
+_finline JSValueRef CYGetClassPrototype(JSContextRef context, Class self) {
+ return CYGetClassPrototype(context, self, class_isMetaClass(self));
+}
+
JSObjectRef Messages::Make(JSContextRef context, Class _class) {
JSObjectRef value(JSObjectMake(context, Messages_, new Messages(_class)));
if (Class super = class_getSuperclass(_class))
definition.className = "StringInstance";
StringInstance_ = JSClassCreate(&definition);
+ definition.className = "TypeInstance";
+ TypeInstance_ = JSClassCreate(&definition);
+
definition.className = "FunctionInstance";
FunctionInstance_ = JSClassCreate(&definition);
JSObjectRef String_prototype(CYGetCachedObject(context, CYJSString("String_prototype")));
JSObjectSetPrototype(context, StringInstance_prototype, String_prototype);
+ JSObjectRef TypeInstance(JSObjectMakeConstructor(context, TypeInstance_, NULL));
+ JSObjectRef TypeInstance_prototype(CYCastJSObject(context, CYGetProperty(context, TypeInstance, prototype_s)));
+ CYSetProperty(context, cy, CYJSString("TypeInstance_prototype"), TypeInstance_prototype);
+ JSObjectRef Type_prototype(CYGetCachedObject(context, CYJSString("Type_prototype")));
+ JSObjectSetPrototype(context, TypeInstance_prototype, Type_prototype);
+
CYSetProperty(context, cycript, CYJSString("Instance"), Instance);
CYSetProperty(context, cycript, CYJSString("Selector"), Selector);
CYSetProperty(context, cycript, CYJSString("Super"), Super);