#if BINDINGS
#ifndef RUNTIME_ROOT_H_
#define RUNTIME_ROOT_H_
#include "interpreter.h"
#include "protect.h"
namespace KJS {
namespace Bindings {
class RootObject;
typedef RootObject *(*FindRootObjectForNativeHandleFunctionPtr)(void *);
extern CFMutableDictionaryRef findReferenceDictionary(JSObject *imp);
extern const RootObject *rootForImp (JSObject *imp);
extern const RootObject *rootForInterpreter (Interpreter *interpreter);
extern void addNativeReference (const RootObject *root, JSObject *imp);
extern void removeNativeReference (JSObject *imp);
class RootObject
{
friend class JavaJSObject;
public:
RootObject(const void *nativeHandle) : _nativeHandle(nativeHandle), _interpreter(0) {}
void setRootObjectImp(JSObject* i) { _imp = i; }
JSObject *rootObjectImp() const { return _imp.get(); }
void setInterpreter (Interpreter *i);
Interpreter *interpreter() const { return _interpreter; }
void removeAllNativeReferences ();
static void setFindRootObjectForNativeHandleFunction(FindRootObjectForNativeHandleFunctionPtr aFunc);
static FindRootObjectForNativeHandleFunctionPtr findRootObjectForNativeHandleFunction() {
return _findRootObjectForNativeHandleFunctionPtr;
}
static CFRunLoopRef runLoop() { return _runLoop; }
static CFRunLoopSourceRef performJavaScriptSource() { return _performJavaScriptSource; }
const void *nativeHandle() const { return _nativeHandle; }
private:
const void *_nativeHandle;
ProtectedPtr<JSObject> _imp;
Interpreter *_interpreter;
static FindRootObjectForNativeHandleFunctionPtr _findRootObjectForNativeHandleFunctionPtr;
static CFRunLoopRef _runLoop;
static CFRunLoopSourceRef _performJavaScriptSource;
};
}
}
#endif //BINDINGS
#endif