X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/0ced2e47fe333ec4a4b1222fa298561c5479696c..80ba20535cde899ede99eb3c38e98be0fe4bcf9a:/Execute.cpp diff --git a/Execute.cpp b/Execute.cpp index e8ea4ae..99dbda8 100644 --- a/Execute.cpp +++ b/Execute.cpp @@ -166,6 +166,7 @@ JSStringRef splice_s; JSStringRef toCYON_s; JSStringRef toJSON_s; JSStringRef toPointer_s; +JSStringRef toString_s; static JSStringRef Result_; @@ -484,6 +485,17 @@ static JSValueRef Array_callAsFunction_toCYON(JSContextRef context, JSObjectRef return CYCastJSValue(context, CYJSString(CYUTF8String(value.c_str(), value.size()))); } CYCatch } +static JSValueRef String_callAsFunction_toCYON(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry { + CYPool pool; + std::ostringstream str; + + CYUTF8String string(CYPoolUTF8String(pool, context, CYJSString(context, _this))); + CYStringify(str, string.data, string.size); + + std::string value(str.str()); + return CYCastJSValue(context, CYJSString(CYUTF8String(value.c_str(), value.size()))); +} CYCatch } + JSObjectRef CYMakePointer(JSContextRef context, void *pointer, size_t length, sig::Type *type, ffi_type *ffi, JSObjectRef owner) { Pointer *internal(new Pointer(pointer, context, owner, length, type)); return JSObjectMake(context, Pointer_, internal); @@ -1318,6 +1330,7 @@ void CYInitializeDynamic() { toCYON_s = JSStringCreateWithUTF8CString("toCYON"); toJSON_s = JSStringCreateWithUTF8CString("toJSON"); toPointer_s = JSStringCreateWithUTF8CString("toPointer"); + toString_s = JSStringCreateWithUTF8CString("toString"); Result_ = JSStringCreateWithUTF8CString("_"); @@ -1405,9 +1418,13 @@ extern "C" void CYSetupContext(JSGlobalContextRef context) { JSObjectRef String(CYCastJSObject(context, CYGetProperty(context, global, CYJSString("String")))); CYSetProperty(context, cy, CYJSString("String"), String); + + JSObjectRef String_prototype(CYCastJSObject(context, CYGetProperty(context, String, prototype_s))); + CYSetProperty(context, cy, CYJSString("String_prototype"), String_prototype); /* }}} */ CYSetProperty(context, Array_prototype, toCYON_s, &Array_callAsFunction_toCYON, kJSPropertyAttributeDontEnum); + CYSetProperty(context, String_prototype, toCYON_s, &String_callAsFunction_toCYON, kJSPropertyAttributeDontEnum); JSObjectRef cycript(JSObjectMake(context, NULL, NULL)); CYSetProperty(context, global, CYJSString("Cycript"), cycript);