]> git.saurik.com Git - cycript.git/commitdiff
Split JavaScript Array utility functions into Library.
authorJay Freeman (saurik) <saurik@saurik.com>
Sun, 3 Jun 2012 15:19:04 +0000 (08:19 -0700)
committerJay Freeman (saurik) <saurik@saurik.com>
Sun, 3 Jun 2012 15:19:04 +0000 (08:19 -0700)
JavaScript.hpp
Library.cpp
ObjectiveC/Library.mm

index ebb5281d19c57102d06741d6fc2f2b098d36cf54..5e76bb49cbda95a9346651d179693dbfff470f98 100644 (file)
@@ -125,6 +125,10 @@ JSObjectRef CYMakePointer(JSContextRef context, void *pointer, size_t length, si
 
 void CYFinalize(JSObjectRef object);
 
+size_t CYArrayLength(JSContextRef context, JSObjectRef array);
+JSValueRef CYArrayGet(JSContextRef context, JSObjectRef array, size_t index);
+void CYArrayPush(JSContextRef context, JSObjectRef array, JSValueRef value);
+
 const char *CYPoolCString(apr_pool_t *pool, JSContextRef context, JSValueRef value);
 
 JSStringRef CYCopyJSString(const char *value);
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;
 
index 957c80ce28a1607c7805a550e4587899d96ba0d4..5ccb90e2a9a8d826902a8c6f6627d82d743917f0 100644 (file)
@@ -1227,7 +1227,7 @@ JSValueRef CYCastJSValue(JSContextRef context, NSObject *value) { CYPoolTry {
 } CYObjectiveCatch }
 
 - (NSUInteger) count { CYObjectiveTry {
-    return CYCastDouble(context_, CYGetProperty(context_, object_, length_s));
+    return CYArrayLength(context_, object_);
 } CYObjectiveCatch }
 
 - (id) objectAtIndex:(NSUInteger)index { CYObjectiveTry {
@@ -1241,12 +1241,7 @@ JSValueRef CYCastJSValue(JSContextRef context, NSObject *value) { CYPoolTry {
 } CYObjectiveCatch }
 
 - (void) addObject:(id)object { CYObjectiveTry {
-    JSValueRef exception(NULL);
-    JSValueRef arguments[1];
-    arguments[0] = CYCastJSValue(context_, (NSObject *) object);
-    JSObjectRef Array(CYGetCachedObject(context_, CYJSString("Array_prototype")));
-    JSObjectCallAsFunction(context_, CYCastJSObject(context_, CYGetProperty(context_, Array, push_s)), object_, 1, arguments, &exception);
-    CYThrow(context_, exception);
+    CYArrayPush(context_, object_, CYCastJSValue(context_, (NSObject *) object));
 } CYObjectiveCatch }
 
 - (void) insertObject:(id)object atIndex:(NSUInteger)index { CYObjectiveTry {