X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/9814ec39ae60db89cf3f65487e71a48c55bbfa3c..306919689b01f196599cc0c2109a1b589de88e93:/Internal.hpp?ds=sidebyside diff --git a/Internal.hpp b/Internal.hpp index fff510b..e05fa0d 100644 --- a/Internal.hpp +++ b/Internal.hpp @@ -1,4 +1,4 @@ -/* Cycript - Error.hppution Server and Disassembler +/* Cycript - Inlining/Optimizing JavaScript Compiler * Copyright (C) 2009 Jay Freeman (saurik) */ @@ -43,12 +43,14 @@ #include "Pooling.hpp" #include +#include #include #include #include #include +JSGlobalContextRef CYGetJSContext(JSContextRef context); void Structor_(apr_pool_t *pool, sig::Type *&type); struct Type_privateData : @@ -67,9 +69,16 @@ struct Type_privateData : Type_privateData(apr_pool_t *pool, const char *type) : ffi_(NULL) { - if (pool != NULL) - pool_ = pool; + _assert(pool != NULL); + pool_ = pool; + sig::Signature signature; + sig::Parse(pool_, &signature, type, &Structor_); + type_ = signature.elements[0].type; + } + Type_privateData(const char *type) : + ffi_(NULL) + { sig::Signature signature; sig::Parse(pool_, &signature, type, &Structor_); type_ = signature.elements[0].type; @@ -137,15 +146,16 @@ struct CYOwned : CYValue { private: - JSContextRef context_; + JSGlobalContextRef context_; JSObjectRef owner_; public: CYOwned(void *value, JSContextRef context, JSObjectRef owner) : CYValue(value), - context_(context), + context_(CYGetJSContext(context)), owner_(owner) { + //XXX:JSGlobalContextRetain(context_); if (owner_ != NULL) JSValueProtect(context_, owner_); } @@ -153,6 +163,7 @@ struct CYOwned : virtual ~CYOwned() { if (owner_ != NULL) JSValueUnprotect(context_, owner_); + //XXX:JSGlobalContextRelease(context_); } JSObjectRef GetOwner() const { @@ -184,19 +195,21 @@ struct Functor : struct Closure_privateData : cy::Functor { - JSContextRef context_; + JSGlobalContextRef context_; JSObjectRef function_; Closure_privateData(JSContextRef context, JSObjectRef function, const char *type) : cy::Functor(type, NULL), - context_(context), + context_(CYGetJSContext(context)), function_(function) { + //XXX:JSGlobalContextRetain(context_); JSValueProtect(context_, function_); } virtual ~Closure_privateData() { JSValueUnprotect(context_, function_); + //XXX:JSGlobalContextRelease(context_); } };