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");
return JSContextGetGlobalObject(context);
}
-const char *CYExecute(apr_pool_t *pool, const char *code) {
+const char *CYExecute(apr_pool_t *pool, CYUTF8String code) {
JSContextRef context(CYGetJSContext());
JSValueRef exception(NULL), result;
Type_privateData::Class_ = JSClassCreate(&definition);
definition = kJSClassDefinitionEmpty;
+ definition.className = "Global";
//definition.getProperty = &Global_getProperty;
Global_ = JSClassCreate(&definition);
splice_s = JSStringCreateWithUTF8CString("splice");
toCYON_s = JSStringCreateWithUTF8CString("toCYON");
toJSON_s = JSStringCreateWithUTF8CString("toJSON");
+ toPointer_s = JSStringCreateWithUTF8CString("toPointer");
Result_ = JSStringCreateWithUTF8CString("_");
JSObjectRef all(JSObjectMake(context, All_, NULL));
CYSetProperty(context, cycript, CYJSString("all"), all);
- JSObjectRef last(NULL), curr(global);
+ if (true) {
+ JSObjectRef last(NULL), curr(global);
- goto next; for (JSValueRef next;;) {
- if (JSValueIsNull(context, next))
- break;
- last = curr;
- curr = CYCastJSObject(context, next);
- next:
- next = JSObjectGetPrototype(context, curr);
- }
+ goto next; for (JSValueRef next;;) {
+ if (JSValueIsNull(context, next))
+ break;
+ last = curr;
+ curr = CYCastJSObject(context, next);
+ next:
+ next = JSObjectGetPrototype(context, curr);
+ }
- JSObjectSetPrototype(context, last, all);
+ JSObjectSetPrototype(context, last, all);
+ }
- CYSetProperty(context, global, CYJSString("$cyq"), &$cyq);
+ CYSetProperty(context, global, CYJSString("$cyq"), &$cyq, kJSPropertyAttributeDontEnum);
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));