]> git.saurik.com Git - cycript.git/blobdiff - Library.cpp
Implement (modified) ECMA6 array comprehensions.
[cycript.git] / Library.cpp
index 8ff066accf35c74d1f704ba2371ba3d68766e81b..84cac4df06f91cc05c42eb030c21e01e79a39b7d 100644 (file)
@@ -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 <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;