-/* Cycript - Error.hppution Server and Disassembler
+/* Cycript - Inlining/Optimizing JavaScript Compiler
* Copyright (C) 2009 Jay Freeman (saurik)
*/
#include "Pooling.hpp"
#include <JavaScriptCore/JSBase.h>
+#include <JavaScriptCore/JSContextRef.h>
#include <JavaScriptCore/JSObjectRef.h>
#include <JavaScriptCore/JSValueRef.h>
#include <sig/parse.hpp>
#include <sig/ffi_type.hpp>
-void Structor_(apr_pool_t *pool, const char *name, const char *types, sig::Type *&type);
+JSGlobalContextRef CYGetJSContext(JSContextRef context);
+void Structor_(apr_pool_t *pool, sig::Type *&type);
struct Type_privateData :
CYData
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;
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_);
}
virtual ~CYOwned() {
if (owner_ != NULL)
JSValueUnprotect(context_, owner_);
+ //XXX:JSGlobalContextRelease(context_);
}
JSObjectRef GetOwner() const {
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_);
}
};