]> git.saurik.com Git - cycript.git/blobdiff - Library.cpp
New syntax: let declarations, initialised arguments.
[cycript.git] / Library.cpp
index 8ff066accf35c74d1f704ba2371ba3d68766e81b..881506dfcdd2418e51938021792f73b740c5370c 100644 (file)
@@ -42,6 +42,7 @@
 #include "Error.hpp"
 #include "String.hpp"
 #include "Execute.hpp"
+#include "JavaScript.hpp"
 
 /* C Strings {{{ */
 template <typename Type_>
@@ -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;