/* Cycript - Optimizing JavaScript Compiler/Runtime
- * Copyright (C) 2009-2010 Jay Freeman (saurik)
+ * Copyright (C) 2009-2012 Jay Freeman (saurik)
*/
/* GNU Lesser General Public License, Version 3 {{{ */
return cyon;
}
+ if (JSObjectIsFunction(context, object)) {
+ JSValueRef toString(CYGetProperty(context, object, toString_s));
+ if (CYIsCallable(context, toString)) {
+ JSValueRef arguments[1] = {CYCastJSValue(context, CYJSString(""))};
+ JSValueRef value(CYCallAsFunction(context, (JSObjectRef) toString, object, 1, arguments));
+ _assert(value != NULL);
+ return CYPoolCString(pool, context, value);
+ }
+ }
+
std::ostringstream str;
str << '{';
return CYCallFunction(pool, context, 0, NULL, count, arguments, false, exception, &internal->signature_, &internal->cif_, internal->GetValue());
}
-static JSObjectRef CYMakeType(JSContextRef context, const char *type) {
+JSObjectRef CYMakeType(JSContextRef context, const char *type) {
Type_privateData *internal(new Type_privateData(type));
return JSObjectMake(context, Type_privateData::Class_, internal);
}
-static JSObjectRef CYMakeType(JSContextRef context, sig::Type *type) {
+JSObjectRef CYMakeType(JSContextRef context, sig::Type *type) {
Type_privateData *internal(new Type_privateData(type));
return JSObjectMake(context, Type_privateData::Class_, internal);
}
static JSObjectRef Pointer_new(JSContextRef context, JSObjectRef object, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
if (count != 2)
- throw CYJSError(context, "incorrect number of arguments to Functor constructor");
+ throw CYJSError(context, "incorrect number of arguments to Pointer constructor");
CYPool pool;
}
} CYCatch }
+static JSValueRef Type_getProperty_alignment(JSContextRef context, JSObjectRef object, JSStringRef property, JSValueRef *exception) {
+ Type_privateData *internal(reinterpret_cast<Type_privateData *>(JSObjectGetPrivate(object)));
+ return CYCastJSValue(context, internal->GetFFI()->alignment);
+}
+
+static JSValueRef Type_getProperty_size(JSContextRef context, JSObjectRef object, JSStringRef property, JSValueRef *exception) {
+ Type_privateData *internal(reinterpret_cast<Type_privateData *>(JSObjectGetPrivate(object)));
+ return CYCastJSValue(context, internal->GetFFI()->size);
+}
+
static JSValueRef Type_callAsFunction_toString(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
Type_privateData *internal(reinterpret_cast<Type_privateData *>(JSObjectGetPrivate(_this)));
CYPool pool;
JSStaticFunction const * const Functor::StaticFunctions = Functor_staticFunctions;
}
+static JSStaticValue Type_staticValues[3] = {
+ {"alignment", &Type_getProperty_alignment, NULL, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
+ {"size", &Type_getProperty_size, NULL, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
+ {NULL, NULL, NULL, 0}
+};
+
static JSStaticFunction Type_staticFunctions[4] = {
{"toCYON", &Type_callAsFunction_toCYON, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
{"toJSON", &Type_callAsFunction_toJSON, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
return error;
}
- if (exception != NULL) { error:
- result = CYCastJSValue(context, CYJSString(context, exception));
- exception = NULL;
- }
+ if (exception != NULL) error:
+ return CYPoolCString(pool, context, CYJSString(context, exception));
if (JSValueIsUndefined(context, result))
return NULL;
definition = kJSClassDefinitionEmpty;
definition.className = "Type";
+ definition.staticValues = Type_staticValues;
definition.staticFunctions = Type_staticFunctions;
definition.getProperty = &Type_getProperty;
definition.callAsFunction = &Type_callAsFunction;