X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/b3378a02d0a811be38e530933fb9a57a3012a823..c8a0500b2fc78101e1a7f3b2c99939f88a33aa4d:/Library.cpp diff --git a/Library.cpp b/Library.cpp index 8ff066a..881506d 100644 --- a/Library.cpp +++ b/Library.cpp @@ -42,6 +42,7 @@ #include "Error.hpp" #include "String.hpp" #include "Execute.hpp" +#include "JavaScript.hpp" /* C Strings {{{ */ template @@ -222,6 +223,26 @@ double CYCastDouble(const char *value) { return CYCastDouble(value, strlen(value)); } +size_t CYArrayLength(JSContextRef context, JSObjectRef array) { + return CYCastDouble(context, CYGetProperty(context, array, length_s)); +} + +JSValueRef CYArrayGet(JSContextRef context, JSObjectRef array, size_t index) { + JSValueRef exception(NULL); + JSValueRef value(JSObjectGetPropertyAtIndex(context, array, index, &exception)); + CYThrow(context, exception); + return value; +} + +void CYArrayPush(JSContextRef context, JSObjectRef array, JSValueRef value) { + JSValueRef exception(NULL); + JSValueRef arguments[1]; + arguments[0] = value; + JSObjectRef Array(CYGetCachedObject(context, CYJSString("Array_prototype"))); + JSObjectCallAsFunction(context, CYCastJSObject(context, CYGetProperty(context, Array, push_s)), array, 1, arguments, &exception); + CYThrow(context, exception); +} + extern "C" void CydgetPoolParse(apr_pool_t *remote, const uint16_t **data, size_t *size) { CYLocalPool local;