JSStringRef splice_s;
JSStringRef toCYON_s;
JSStringRef toJSON_s;
+JSStringRef toPointer_s;
static JSStringRef Result_;
switch (JSValueGetType(context, value)) {
case kJSTypeNull:
return NULL;
- /*case kJSTypeObject:
+ case kJSTypeObject: {
+ JSObjectRef object((JSObjectRef) value);
if (JSValueIsObjectOfClass(context, value, Pointer_)) {
- Pointer *internal(reinterpret_cast<Pointer *>(JSObjectGetPrivate((JSObjectRef) value)));
+ Pointer *internal(reinterpret_cast<Pointer *>(JSObjectGetPrivate(object)));
return internal->value_;
- }*/
- default:
+ }
+ JSValueRef toPointer(CYGetProperty(context, object, toPointer_s));
+ if (CYIsCallable(context, toPointer)) {
+ JSValueRef value(CYCallAsFunction(context, (JSObjectRef) toPointer, object, 0, NULL));
+ _assert(value != NULL);
+ return CYCastPointer_(context, value);
+ }
+ } default:
double number(CYCastDouble(context, value));
if (std::isnan(number))
throw CYJSError(context, "cannot convert value to pointer");
splice_s = JSStringCreateWithUTF8CString("splice");
toCYON_s = JSStringCreateWithUTF8CString("toCYON");
toJSON_s = JSStringCreateWithUTF8CString("toJSON");
+ toPointer_s = JSStringCreateWithUTF8CString("toPointer");
Result_ = JSStringCreateWithUTF8CString("_");
} CYPoolCatch(NULL)
} CYCatch return /*XXX*/ NULL; }
+#if 0
static JSValueRef Instance_callAsFunction_valueOf(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
if (!JSValueIsObjectOfClass(context, _this, Instance_))
return NULL;
Instance *internal(reinterpret_cast<Instance *>(JSObjectGetPrivate(_this)));
return CYCastJSValue(context, reinterpret_cast<uintptr_t>(internal->GetValue()));
} CYCatch return /*XXX*/ NULL; }
+#endif
+
+static JSValueRef Instance_callAsFunction_toPointer(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
+ if (!JSValueIsObjectOfClass(context, _this, Instance_))
+ return NULL;
+
+ Instance *internal(reinterpret_cast<Instance *>(JSObjectGetPrivate(_this)));
+ // XXX: but... but... THIS ISN'T A POINTER! :(
+ return CYCastJSValue(context, reinterpret_cast<uintptr_t>(internal->GetValue()));
+} CYCatch return /*XXX*/ NULL; }
static JSValueRef Instance_callAsFunction_toString(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
if (!JSValueIsObjectOfClass(context, _this, Instance_))
{"$cya", &CYValue_callAsFunction_$cya, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
{"toCYON", &Instance_callAsFunction_toCYON, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
{"toJSON", &Instance_callAsFunction_toJSON, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
- {"valueOf", &Instance_callAsFunction_valueOf, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
+ //{"valueOf", &Instance_callAsFunction_valueOf, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
+ {"toPointer", &Instance_callAsFunction_toPointer, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
{"toString", &Instance_callAsFunction_toString, kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete},
{NULL, NULL, 0}
};