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("_");
CYSetProperty(context, global, CYJSString("$cyq"), &$cyq);
JSObjectRef System(JSObjectMake(context, NULL, NULL));
- CYSetProperty(context, cy, CYJSString("System"), Function);
+ CYSetProperty(context, cy, CYJSString("System"), System);
CYSetProperty(context, global, CYJSString("system"), System);
CYSetProperty(context, System, CYJSString("args"), CYJSNull(context));