#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>
+JSGlobalContextRef CYGetJSContext(JSContextRef context);
void Structor_(apr_pool_t *pool, sig::Type *&type);
struct Type_privateData :
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_);
}
};
- (id) initWithJSObject:(JSObjectRef)object inContext:(JSContextRef)context { CYObjectiveTry {
if ((self = [super init]) != nil) {
object_ = object;
- context_ = context;
+ context_ = CYGetJSContext(context);
+ //XXX:JSGlobalContextRetain(context_);
JSValueProtect(context_, object_);
} return self;
} CYObjectiveCatch }
- (void) dealloc { CYObjectiveTry {
JSValueUnprotect(context_, object_);
+ //XXX:JSGlobalContextRelease(context_);
[super dealloc];
} CYObjectiveCatch }
- (id) initWithJSObject:(JSObjectRef)object inContext:(JSContextRef)context { CYObjectiveTry {
if ((self = [super init]) != nil) {
object_ = object;
- context_ = context;
+ context_ = CYGetJSContext(context);
+ //XXX:JSGlobalContextRetain(context_);
JSValueProtect(context_, object_);
} return self;
} CYObjectiveCatch }
- (void) dealloc { CYObjectiveTry {
JSValueUnprotect(context_, object_);
+ //XXX:JSGlobalContextRelease(context_);
[super dealloc];
} CYObjectiveCatch }
errors in another process aren't displayed; to fix this, parse errors should get converted to exceptions and thrown
CYPoolTry/Catch now carefully save the exception after it /no longer needs the exception/... uhh... wtf?
throw CYJSError should probably be replaced with CYThrow() across the board
+figure out what to do about global context refs: I really really want to retain the bastards