]> git.saurik.com Git - cycript.git/blobdiff - Execute.cpp
Add a new ?gc to run GC without running a script.
[cycript.git] / Execute.cpp
index 61acaf2e8a05f36ca1c3b6114bae8d1c0ab594c5..a71d29f29ef9268aeeb67eb1845eb95ae2801318 100644 (file)
@@ -342,8 +342,13 @@ static JSValueRef $cyq(JSContextRef context, JSObjectRef object, JSObjectRef _th
     return CYCastJSValue(context, name);
 } CYCatch(NULL) }
 
-static JSValueRef Cycript_gc_callAsFunction(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
+
+void CYGarbageCollect(JSContextRef context) {
     JSGarbageCollect(context);
+}
+
+static JSValueRef Cycript_gc_callAsFunction(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
+    CYGarbageCollect(context);
     return CYJSUndefined(context);
 } CYCatch(NULL) }
 
@@ -1763,11 +1768,11 @@ extern "C" void CYSetupContext(JSGlobalContextRef context) {
     CYRunSetups(context);
 }
 
+static JSGlobalContextRef context_;
+
 JSGlobalContextRef CYGetJSContext() {
     CYInitializeDynamic();
 
-    static JSGlobalContextRef context_;
-
     if (context_ == NULL) {
         context_ = JSGlobalContextCreate(Global_);
         CYSetupContext(context_);
@@ -1775,3 +1780,10 @@ JSGlobalContextRef CYGetJSContext() {
 
     return context_;
 }
+
+void CYDestroyContext() {
+    if (context_ == NULL)
+        return;
+    JSGlobalContextRelease(context_);
+    context_ = NULL;
+}