X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/b3378a02d0a811be38e530933fb9a57a3012a823..bc3080fdd24b9858d9c9dcbd3d8dd78ae010962a:/Library.cpp?ds=sidebyside diff --git a/Library.cpp b/Library.cpp index 8ff066a..1ed182e 100644 --- a/Library.cpp +++ b/Library.cpp @@ -1,5 +1,5 @@ /* Cycript - Optimizing JavaScript Compiler/Runtime - * Copyright (C) 2009-2010 Jay Freeman (saurik) + * Copyright (C) 2009-2012 Jay Freeman (saurik) */ /* GNU Lesser General Public License, Version 3 {{{ */ @@ -42,6 +42,7 @@ #include "Error.hpp" #include "String.hpp" #include "Execute.hpp" +#include "JavaScript.hpp" /* C Strings {{{ */ template @@ -222,17 +223,34 @@ 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; - CYDriver driver; - cy::parser parser(driver); - CYUTF8String utf8(CYPoolUTF8String(local, CYUTF16String(*data, *size))); + CYStream stream(utf8.data, utf8.data + utf8.size); + CYDriver driver(stream); - driver.data_ = utf8.data; - driver.size_ = utf8.size; - + cy::parser parser(driver); if (parser.parse() != 0 || !driver.errors_.empty()) return;