#include "JSBase.h"
#include "JSObject.h"
#include "JSRun.h"
+#include <JavaScriptCore/Completion.h>
+#include <JavaScriptCore/InitializeThreading.h>
static CFTypeRef sJSCFNullRef = 0;
*/
JSRunRef JSRunCreate(CFStringRef jsSource, JSFlags inFlags)
{
+ initializeThreading();
+
JSRunRef result = 0;
if (jsSource)
{
- JSLock lock;
+ JSLock lock(LockForReal);
result = (JSRunRef) new JSRun(jsSource, inFlags);
}
return result;
JSRun* ptr = (JSRun*)ref;
if (ptr)
{
- JSLock lock;
+ JSLock lock(LockForReal);
Completion completion = ptr->Evaluate();
if (completion.isValueCompletion())
{
JSRun* ptr = (JSRun*)ref;
if (ptr)
{
- JSLock lock;
+ JSLock lock(LockForReal);
result = ptr->CheckSyntax();
}
return result;
/*
JSCollect - trigger garbage collection
*/
-void JSCollect(void)
+void JSCollect()
{
- JSLock lock;
- Collector::collect();
+ initializeThreading();
+
+ JSLock lock(LockForReal);
+ getThreadGlobalExecState()->heap()->collect();
}
/*
CFMutableArrayRef JSCreateJSArrayFromCFArray(CFArrayRef array)
{
+ initializeThreading();
+
CFIndex count = array ? CFArrayGetCount(array) : 0;
CFArrayCallBacks arrayCallbacks;
CFMutableArrayRef jsArray;
void JSLockInterpreter()
{
- JSLock::lock();
- JSLock::registerThread();
+ initializeThreading();
+ JSLock::lock(LockForReal);
}
void JSUnlockInterpreter()
{
- JSLock::unlock();
+ JSLock::unlock(LockForReal);
}