Commit a46b0002 authored by ap@webkit.org's avatar ap@webkit.org

Reviewed by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=18826
        Make JavaScript heap per-thread



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@32807 268f45cc-cd09-0410-ab3c-d52691b4dbfc
parent bd9e825d
......@@ -79,8 +79,12 @@ bool JSCheckScriptSyntax(JSContextRef ctx, JSStringRef script, JSStringRef sourc
void JSGarbageCollect(JSContextRef)
{
JSLock lock;
if (!Collector::isBusy())
Collector::collect();
// It might seem that we have a context passed to this function, and can use toJS(ctx)->heap(), but the parameter is likely to be NULL.
// The performance difference should be negligible anyway.
Heap* heap = Heap::threadHeap();
if (!heap->isBusy())
heap->collect();
// FIXME: Perhaps we should trigger a second mark and sweep
// once the garbage collector is done if this is called when
// the collector is busy.
......
......@@ -466,7 +466,7 @@ JSValue* JSCallbackObject<Base>::staticFunctionGetter(ExecState* exec, JSObject*
if (OpaqueJSClass::StaticFunctionsTable* staticFunctions = jsClass->staticFunctions) {
if (StaticFunctionEntry* entry = staticFunctions->get(propertyName.ustring().rep())) {
if (JSObjectCallAsFunctionCallback callAsFunction = entry->callAsFunction) {
JSObject* o = new JSCallbackFunction(exec, callAsFunction, propertyName);
JSObject* o = new (exec) JSCallbackFunction(exec, callAsFunction, propertyName);
thisObj->putDirect(propertyName, o, entry->attributes);
return o;
}
......
......@@ -162,7 +162,7 @@ JSObject* OpaqueJSClass::prototype(JSContextRef ctx)
parentPrototype = parentClass->prototype(ctx); // can be null
if (!parentPrototype)
parentPrototype = exec->dynamicGlobalObject()->objectPrototype();
cachedPrototype = new JSCallbackObject<JSObject>(exec, prototypeClass, parentPrototype, this); // set ourself as the object's private data, so it can clear our reference on destruction
cachedPrototype = new (exec) JSCallbackObject<JSObject>(exec, prototypeClass, parentPrototype, this); // set ourself as the object's private data, so it can clear our reference on destruction
}
return cachedPrototype;
}
......@@ -74,13 +74,13 @@ JSObjectRef JSObjectMake(JSContextRef ctx, JSClassRef jsClass, void* data)
ExecState* exec = toJS(ctx);
if (!jsClass)
return toRef(new JSObject(exec->lexicalGlobalObject()->objectPrototype())); // slightly more efficient
return toRef(new (exec) JSObject(exec->lexicalGlobalObject()->objectPrototype())); // slightly more efficient
JSValue* jsPrototype = jsClass->prototype(ctx);
if (!jsPrototype)
jsPrototype = exec->lexicalGlobalObject()->objectPrototype();
return toRef(new JSCallbackObject<JSObject>(exec, jsClass, jsPrototype, data));
return toRef(new (exec) JSCallbackObject<JSObject>(exec, jsClass, jsPrototype, data));
}
JSObjectRef JSObjectMakeFunctionWithCallback(JSContextRef ctx, JSStringRef name, JSObjectCallAsFunctionCallback callAsFunction)
......@@ -89,7 +89,7 @@ JSObjectRef JSObjectMakeFunctionWithCallback(JSContextRef ctx, JSStringRef name,
ExecState* exec = toJS(ctx);
Identifier nameID = name ? Identifier(toJS(name)) : Identifier("anonymous");
return toRef(new JSCallbackFunction(exec, callAsFunction, nameID));
return toRef(new (exec) JSCallbackFunction(exec, callAsFunction, nameID));
}
JSObjectRef JSObjectMakeConstructor(JSContextRef ctx, JSClassRef jsClass, JSObjectCallAsConstructorCallback callAsConstructor)
......@@ -101,7 +101,7 @@ JSObjectRef JSObjectMakeConstructor(JSContextRef ctx, JSClassRef jsClass, JSObje
? jsClass->prototype(ctx)
: exec->dynamicGlobalObject()->objectPrototype();
JSCallbackConstructor* constructor = new JSCallbackConstructor(exec, jsClass, callAsConstructor);
JSCallbackConstructor* constructor = new (exec) JSCallbackConstructor(exec, jsClass, callAsConstructor);
constructor->putDirect(exec->propertyNames().prototype, jsPrototype, DontEnum | DontDelete | ReadOnly);
return toRef(constructor);
}
......@@ -118,8 +118,8 @@ JSObjectRef JSObjectMakeFunction(JSContextRef ctx, JSStringRef name, unsigned pa
List args;
for (unsigned i = 0; i < parameterCount; i++)
args.append(jsString(UString(toJS(parameterNames[i]))));
args.append(jsString(UString(bodyRep)));
args.append(jsString(exec, UString(toJS(parameterNames[i]))));
args.append(jsString(exec, UString(bodyRep)));
JSObject* result = exec->dynamicGlobalObject()->functionConstructor()->construct(exec, args, nameID, UString(sourceURLRep), startingLineNumber);
if (exec->hadException()) {
......
......@@ -176,17 +176,17 @@ JSValueRef JSValueMakeBoolean(JSContextRef, bool value)
return toRef(jsBoolean(value));
}
JSValueRef JSValueMakeNumber(JSContextRef, double value)
JSValueRef JSValueMakeNumber(JSContextRef ctx, double value)
{
JSLock lock;
return toRef(jsNumber(value));
return toRef(jsNumber(toJS(ctx), value));
}
JSValueRef JSValueMakeString(JSContextRef, JSStringRef string)
JSValueRef JSValueMakeString(JSContextRef ctx, JSStringRef string)
{
JSLock lock;
UString::Rep* rep = toJS(string);
return toRef(jsString(UString(rep)));
return toRef(jsString(toJS(ctx), UString(rep)));
}
bool JSValueToBoolean(JSContextRef ctx, JSValueRef value)
......
2008-05-02 Alexey Proskuryakov <ap@webkit.org>
Reviewed by Geoffrey Garen.
https://bugs.webkit.org/show_bug.cgi?id=18826
Make JavaScript heap per-thread
* wtf/ThreadSpecific.h: Make sure to initialize POD thread-specific varaibles, too
(replaced "new T" with "new T()").
* kjs/collector.h: Renamed Collector to Heap, made the heap per-thread. Removed support for
multithreaded access to a heap.
(KJS::CollectorBlock): Removed collectOnMainThreadOnly bitmap, added a reference to owner heap.
(KJS::SmallCellCollectorBlock): Ditto.
(KJS::Heap::markListSet): Moved from a static variable in List.cpp to a per-thread one here.
(KJS::Heap::heap): Added a method to find which heap a JSValue is allocated in.
* kjs/collector.cpp: Changed "const size_t" constants to #defines, to avoid a PIC branch
(gcc was using one to access a constant used in std::max(), because it takes a reference,
even though std::max() itself was inlined).
(KJS::Heap::threadHeap): JS heap is now per-thread.
(KJS::Heap::Heap): Zero-initialize the heap.
(KJS::allocateBlock): Added NEVER_INLINE, because this function uses a PIC branch, so
inlining it in Heap::heapAllocate() is bad for performance, now that the latter doesn't
use any global data.
(KJS::Heap::heapAllocate): Initialize Block::heap.
(KJS::Heap::markCurrentThreadConservatively): Moved into markStackObjectsConservatively(),
as GC only works with a current thread's heap now.
(KJS::Heap::sweep): Removed collectOnMainThreadOnly checks.
(KJS::Heap::collect): Ditto.
* kjs/JSLock.cpp:
* kjs/JSLock.h:
(KJS::JSLock::JSLock):
Removed registerThread(), as the heap no longer cares.
* kjs/InitializeThreading.cpp: (KJS::initializeThreading): Initialize new per-thread
variables in Heap and JSGlobalObject.
* kjs/ExecState.h: (KJS::ExecState::heap): Added a heap pointer for faster access to
per-thread heap, and an accessor for it.
* kjs/JSGlobalObject.h: Made JSGlobalObject linked list per-thread.
* kjs/JSGlobalObject.cpp:
(KJS::JSGlobalObject::~JSGlobalObject): Fixed a bug in linked list handling. It only worked
right if the removed object was the head one!
(KJS::JSGlobalObject::head): Return a per-thread list head.
(KJS::JSGlobalObject::init): Store a reference to per-thread heap.
(KJS::JSGlobalObject::reset): Pass ExecState to functions that need it.
(KJS::JSGlobalObject::tearOffActivation): Ditto.
(KJS::JSGlobalObject::operator new): JSGlobalObject allocation cannot use an ExecState,
so it needs a custom operator new that directly accesses per-thread heap.
* kjs/list.h:
(KJS::List::List): Replaced m_isInMarkSet boolean with an actual pointer to the set, since it
is no longer a single static object.
(KJS::List::~List): Ditto.
* kjs/list.cpp:
(KJS::List::markSet): Removed, this is now stored in Heap.
(KJS::List::markProtectedLists): Take a reference to the list.
(KJS::List::expandAndAppend): Ask the current thread heap for a mark set reference.
* kjs/protect.h:
(KJS::gcProtect):
(KJS::gcUnprotect):
Use the newly added Heap::heap() method to find out which heap the value to be (un)protected
belongs to.
* kjs/property_map.h: Removed unused SavedProperty class.
* JavaScriptCore.exp:
* API/JSBase.cpp:
(JSGarbageCollect):
* API/JSCallbackObjectFunctions.h:
(KJS::::staticFunctionGetter):
* API/JSClassRef.cpp:
(OpaqueJSClass::prototype):
* API/JSObjectRef.cpp:
(JSObjectMake):
(JSObjectMakeFunctionWithCallback):
(JSObjectMakeConstructor):
(JSObjectMakeFunction):
* API/JSValueRef.cpp:
(JSValueMakeNumber):
(JSValueMakeString):
* kjs/array_instance.cpp:
(KJS::ArrayInstance::ArrayInstance):
(KJS::ArrayInstance::lengthGetter):
* kjs/array_object.cpp:
(KJS::arrayProtoFuncToString):
(KJS::arrayProtoFuncToLocaleString):
(KJS::arrayProtoFuncJoin):
(KJS::arrayProtoFuncConcat):
(KJS::arrayProtoFuncPop):
(KJS::arrayProtoFuncPush):
(KJS::arrayProtoFuncShift):
(KJS::arrayProtoFuncSlice):
(KJS::arrayProtoFuncSplice):
(KJS::arrayProtoFuncUnShift):
(KJS::arrayProtoFuncFilter):
(KJS::arrayProtoFuncMap):
(KJS::arrayProtoFuncEvery):
(KJS::arrayProtoFuncForEach):
(KJS::arrayProtoFuncSome):
(KJS::arrayProtoFuncIndexOf):
(KJS::arrayProtoFuncLastIndexOf):
(KJS::ArrayObjectImp::ArrayObjectImp):
(KJS::ArrayObjectImp::construct):
* kjs/bool_object.cpp:
(KJS::BooleanPrototype::BooleanPrototype):
(KJS::booleanProtoFuncToString):
(KJS::BooleanObjectImp::BooleanObjectImp):
(KJS::BooleanObjectImp::construct):
* kjs/date_object.cpp:
(KJS::formatLocaleDate):
(KJS::DatePrototype::DatePrototype):
(KJS::DateObjectImp::DateObjectImp):
(KJS::DateObjectImp::construct):
(KJS::DateObjectImp::callAsFunction):
(KJS::DateObjectFuncImp::DateObjectFuncImp):
(KJS::DateObjectFuncImp::callAsFunction):
(KJS::dateProtoFuncToString):
(KJS::dateProtoFuncToUTCString):
(KJS::dateProtoFuncToDateString):
(KJS::dateProtoFuncToTimeString):
(KJS::dateProtoFuncToLocaleString):
(KJS::dateProtoFuncToLocaleDateString):
(KJS::dateProtoFuncToLocaleTimeString):
(KJS::dateProtoFuncValueOf):
(KJS::dateProtoFuncGetTime):
(KJS::dateProtoFuncGetFullYear):
(KJS::dateProtoFuncGetUTCFullYear):
(KJS::dateProtoFuncToGMTString):
(KJS::dateProtoFuncGetMonth):
(KJS::dateProtoFuncGetUTCMonth):
(KJS::dateProtoFuncGetDate):
(KJS::dateProtoFuncGetUTCDate):
(KJS::dateProtoFuncGetDay):
(KJS::dateProtoFuncGetUTCDay):
(KJS::dateProtoFuncGetHours):
(KJS::dateProtoFuncGetUTCHours):
(KJS::dateProtoFuncGetMinutes):
(KJS::dateProtoFuncGetUTCMinutes):
(KJS::dateProtoFuncGetSeconds):
(KJS::dateProtoFuncGetUTCSeconds):
(KJS::dateProtoFuncGetMilliSeconds):
(KJS::dateProtoFuncGetUTCMilliseconds):
(KJS::dateProtoFuncGetTimezoneOffset):
(KJS::dateProtoFuncSetTime):
(KJS::setNewValueFromTimeArgs):
(KJS::setNewValueFromDateArgs):
(KJS::dateProtoFuncSetYear):
(KJS::dateProtoFuncGetYear):
* kjs/error_object.cpp:
(KJS::ErrorPrototype::ErrorPrototype):
(KJS::errorProtoFuncToString):
(KJS::ErrorObjectImp::ErrorObjectImp):
(KJS::ErrorObjectImp::construct):
(KJS::NativeErrorPrototype::NativeErrorPrototype):
(KJS::NativeErrorImp::NativeErrorImp):
(KJS::NativeErrorImp::construct):
* kjs/function.cpp:
(KJS::FunctionImp::lengthGetter):
(KJS::FunctionImp::construct):
(KJS::Arguments::Arguments):
(KJS::ActivationImp::createArgumentsObject):
(KJS::encode):
(KJS::decode):
(KJS::globalFuncParseInt):
(KJS::globalFuncParseFloat):
(KJS::globalFuncEscape):
(KJS::globalFuncUnescape):
(KJS::PrototypeFunction::PrototypeFunction):
(KJS::PrototypeReflexiveFunction::PrototypeReflexiveFunction):
* kjs/function_object.cpp:
(KJS::FunctionPrototype::FunctionPrototype):
(KJS::functionProtoFuncToString):
(KJS::FunctionObjectImp::FunctionObjectImp):
(KJS::FunctionObjectImp::construct):
* kjs/internal.cpp:
(KJS::StringImp::toObject):
* kjs/internal.h:
(KJS::StringImp::StringImp):
(KJS::NumberImp::operator new):
* kjs/lookup.h:
(KJS::staticFunctionGetter):
(KJS::cacheGlobalObject):
* kjs/math_object.cpp:
(KJS::MathObjectImp::getValueProperty):
(KJS::mathProtoFuncAbs):
(KJS::mathProtoFuncACos):
(KJS::mathProtoFuncASin):
(KJS::mathProtoFuncATan):
(KJS::mathProtoFuncATan2):
(KJS::mathProtoFuncCeil):
(KJS::mathProtoFuncCos):
(KJS::mathProtoFuncExp):
(KJS::mathProtoFuncFloor):
(KJS::mathProtoFuncLog):
(KJS::mathProtoFuncMax):
(KJS::mathProtoFuncMin):
(KJS::mathProtoFuncPow):
(KJS::mathProtoFuncRandom):
(KJS::mathProtoFuncRound):
(KJS::mathProtoFuncSin):
(KJS::mathProtoFuncSqrt):
(KJS::mathProtoFuncTan):
* kjs/nodes.cpp:
(KJS::Node::handleException):
(KJS::NumberNode::evaluate):
(KJS::StringNode::evaluate):
(KJS::ArrayNode::evaluate):
(KJS::PostIncResolveNode::evaluate):
(KJS::PostIncLocalVarNode::evaluate):
(KJS::PostDecResolveNode::evaluate):
(KJS::PostDecLocalVarNode::evaluate):
(KJS::PostDecLocalVarNode::inlineEvaluateToNumber):
(KJS::PostIncBracketNode::evaluate):
(KJS::PostDecBracketNode::evaluate):
(KJS::PostIncDotNode::evaluate):
(KJS::PostDecDotNode::evaluate):
(KJS::typeStringForValue):
(KJS::LocalVarTypeOfNode::evaluate):
(KJS::TypeOfResolveNode::evaluate):
(KJS::TypeOfValueNode::evaluate):
(KJS::PreIncLocalVarNode::evaluate):
(KJS::PreIncResolveNode::evaluate):
(KJS::PreDecLocalVarNode::evaluate):
(KJS::PreDecResolveNode::evaluate):
(KJS::PreIncConstNode::evaluate):
(KJS::PreDecConstNode::evaluate):
(KJS::PostIncConstNode::evaluate):
(KJS::PostDecConstNode::evaluate):
(KJS::PreIncBracketNode::evaluate):
(KJS::PreDecBracketNode::evaluate):
(KJS::PreIncDotNode::evaluate):
(KJS::PreDecDotNode::evaluate):
(KJS::NegateNode::evaluate):
(KJS::BitwiseNotNode::evaluate):
(KJS::MultNode::evaluate):
(KJS::DivNode::evaluate):
(KJS::ModNode::evaluate):
(KJS::addSlowCase):
(KJS::add):
(KJS::AddNumbersNode::evaluate):
(KJS::AddStringsNode::evaluate):
(KJS::AddStringLeftNode::evaluate):
(KJS::AddStringRightNode::evaluate):
(KJS::SubNode::evaluate):
(KJS::LeftShiftNode::evaluate):
(KJS::RightShiftNode::evaluate):
(KJS::UnsignedRightShiftNode::evaluate):
(KJS::BitXOrNode::evaluate):
(KJS::BitOrNode::evaluate):
(KJS::valueForReadModifyAssignment):
(KJS::ForInNode::execute):
(KJS::TryNode::execute):
(KJS::FuncDeclNode::makeFunction):
(KJS::FuncExprNode::evaluate):
* kjs/number_object.cpp:
(KJS::NumberPrototype::NumberPrototype):
(KJS::numberProtoFuncToString):
(KJS::numberProtoFuncToLocaleString):
(KJS::numberProtoFuncToFixed):
(KJS::numberProtoFuncToExponential):
(KJS::numberProtoFuncToPrecision):
(KJS::NumberObjectImp::NumberObjectImp):
(KJS::NumberObjectImp::getValueProperty):
(KJS::NumberObjectImp::construct):
(KJS::NumberObjectImp::callAsFunction):
* kjs/object.cpp:
(KJS::JSObject::defineGetter):
(KJS::JSObject::defineSetter):
(KJS::JSObject::putDirect):
(KJS::Error::create):
* kjs/object.h:
* kjs/object_object.cpp:
(KJS::ObjectPrototype::ObjectPrototype):
(KJS::objectProtoFuncToLocaleString):
(KJS::objectProtoFuncToString):
(KJS::ObjectObjectImp::ObjectObjectImp):
(KJS::ObjectObjectImp::construct):
* kjs/regexp_object.cpp:
(KJS::RegExpPrototype::RegExpPrototype):
(KJS::regExpProtoFuncToString):
(KJS::RegExpImp::getValueProperty):
(KJS::RegExpObjectImp::RegExpObjectImp):
(KJS::RegExpObjectImp::arrayOfMatches):
(KJS::RegExpObjectImp::getBackref):
(KJS::RegExpObjectImp::getLastParen):
(KJS::RegExpObjectImp::getLeftContext):
(KJS::RegExpObjectImp::getRightContext):
(KJS::RegExpObjectImp::getValueProperty):
(KJS::RegExpObjectImp::createRegExpImp):
* kjs/regexp_object.h:
* kjs/string_object.cpp:
(KJS::StringInstance::StringInstance):
(KJS::StringInstance::lengthGetter):
(KJS::StringInstance::indexGetter):
(KJS::stringInstanceNumericPropertyGetter):
(KJS::StringPrototype::StringPrototype):
(KJS::replace):
(KJS::stringProtoFuncCharAt):
(KJS::stringProtoFuncCharCodeAt):
(KJS::stringProtoFuncConcat):
(KJS::stringProtoFuncIndexOf):
(KJS::stringProtoFuncLastIndexOf):
(KJS::stringProtoFuncMatch):
(KJS::stringProtoFuncSearch):
(KJS::stringProtoFuncReplace):
(KJS::stringProtoFuncSlice):
(KJS::stringProtoFuncSplit):
(KJS::stringProtoFuncSubstr):
(KJS::stringProtoFuncSubstring):
(KJS::stringProtoFuncToLowerCase):
(KJS::stringProtoFuncToUpperCase):
(KJS::stringProtoFuncToLocaleLowerCase):
(KJS::stringProtoFuncToLocaleUpperCase):
(KJS::stringProtoFuncLocaleCompare):
(KJS::stringProtoFuncBig):
(KJS::stringProtoFuncSmall):
(KJS::stringProtoFuncBlink):
(KJS::stringProtoFuncBold):
(KJS::stringProtoFuncFixed):
(KJS::stringProtoFuncItalics):
(KJS::stringProtoFuncStrike):
(KJS::stringProtoFuncSub):
(KJS::stringProtoFuncSup):
(KJS::stringProtoFuncFontcolor):
(KJS::stringProtoFuncFontsize):
(KJS::stringProtoFuncAnchor):
(KJS::stringProtoFuncLink):
(KJS::StringObjectImp::StringObjectImp):
(KJS::StringObjectImp::construct):
(KJS::StringObjectImp::callAsFunction):
(KJS::StringObjectFuncImp::StringObjectFuncImp):
(KJS::StringObjectFuncImp::callAsFunction):
* kjs/string_object.h:
(KJS::StringInstanceThatMasqueradesAsUndefined::StringInstanceThatMasqueradesAsUndefined):
* kjs/testkjs.cpp:
(GlobalObject::GlobalObject):
(functionGC):
(functionRun):
(functionReadline):
(kjsmain):
* kjs/ustring.h:
* kjs/value.cpp:
(KJS::JSCell::operator new):
(KJS::jsString):
(KJS::jsOwnedString):
(KJS::jsNumberCell):
* kjs/value.h:
(KJS::jsNaN):
(KJS::jsNumber):
(KJS::jsNumberFromAnd):
(KJS::JSCell::marked):
(KJS::JSCell::mark):
(KJS::JSValue::toJSNumber):
Removed collectOnMainThreadOnly, as this is the only way to collect now. Replaced calls to
static Collector methods with calls to per-thread Heap ones.
2008-05-02 Dan Bernstein <mitz@apple.com>
Reviewed by Maciej Stachowiak.
......
_JSCheckScriptSyntax
_JSClassCreate
_JSClassRelease
_JSClassRetain
_JSContextGetGlobalObject
_JSEvaluateScript
_JSGarbageCollect
_JSGlobalContextCreate
_JSGlobalContextRelease
_JSGlobalContextRetain
_JSObjectCallAsConstructor
_JSObjectCallAsFunction
_JSObjectCopyPropertyNames
_JSObjectDeleteProperty
_JSObjectGetPrivate
_JSObjectGetProperty
_JSObjectGetPropertyAtIndex
_JSObjectGetPrototype
_JSObjectHasProperty
_JSObjectIsConstructor
_JSObjectIsFunction
_JSObjectMake
_JSObjectMakeConstructor
_JSObjectMakeFunction
_JSObjectMakeFunctionWithCallback
_JSObjectSetPrivate
_JSObjectSetProperty
_JSObjectSetPropertyAtIndex
_JSObjectSetPrototype
_JSPropertyNameAccumulatorAddName
_JSPropertyNameArrayGetCount
_JSPropertyNameArrayGetNameAtIndex
_JSPropertyNameArrayRelease
_JSPropertyNameArrayRetain
_JSStringCopyCFString
_JSStringCreateWithCFString
_JSStringCreateWithCharacters
_JSStringCreateWithUTF8CString
_JSStringGetCharactersPtr
_JSStringGetLength
_JSStringGetMaximumUTF8CStringSize
_JSStringGetUTF8CString
_JSStringIsEqual
_JSStringIsEqualToUTF8CString
_JSStringRelease
_JSStringRetain
_JSValueGetType
_JSValueIsBoolean
_JSValueIsEqual
_JSValueIsInstanceOfConstructor
_JSValueIsNull
_JSValueIsNumber
_JSValueIsObject
_JSValueIsObjectOfClass
_JSValueIsStrictEqual
_JSValueIsString
_JSValueIsUndefined
_JSValueMakeBoolean
_JSValueMakeNull
_JSValueMakeNumber
_JSValueMakeString
_JSValueMakeUndefined
_JSValueProtect
_JSValueToBoolean
_JSValueToNumber
_JSValueToObject
_JSValueToStringCopy
_JSValueUnprotect
_WTFLog
_WTFLogVerbose
_WTFReportArgumentAssertionFailure
_WTFReportAssertionFailure
_WTFReportAssertionFailureWithMessage
_WTFReportError
_WTFReportFatalError
__Z12jsRegExpFreeP8JSRegExp
__Z15jsRegExpCompilePKti24JSRegExpIgnoreCaseOption23JSRegExpMultilineOptionPjPPKc
__Z15jsRegExpExecutePK8JSRegExpPKtiiPii
......@@ -96,11 +21,11 @@ __ZN3KJS11PropertyMap11getLocationERKNS_10IdentifierE
__ZN3KJS11PropertyMap5clearEv
__ZN3KJS11PropertyMapD1Ev
__ZN3KJS12DateInstance4infoE
__ZN3KJS12jsNumberCellEPNS_9ExecStateEd
__ZN3KJS12PropertySlot15undefinedGetterEPNS_9ExecStateEPNS_8JSObjectERKNS_10IdentifierERKS0_
__ZN3KJS12jsNumberCellEd
__ZN3KJS13ArrayInstance4infoE
__ZN3KJS13jsOwnedStringEPNS_9ExecStateERKNS_7UStringE
__ZN3KJS13StatementNode6setLocEii
__ZN3KJS13jsOwnedStringERKNS_7UStringE
__ZN3KJS14JSGlobalObject10globalExecEv
__ZN3KJS14JSGlobalObject16stopTimeoutCheckEv
__ZN3KJS14JSGlobalObject17putWithAttributesEPNS_9ExecStateERKNS_10IdentifierEPNS_7JSValueEj
......@@ -111,14 +36,14 @@ __ZN3KJS14JSGlobalObject4initEPNS_8JSObjectE
__ZN3KJS14JSGlobalObject4markEv
__ZN3KJS14JSGlobalObject5resetEPNS_7JSValueE
__ZN3KJS14JSGlobalObjectD2Ev
__ZN3KJS14JSGlobalObjectnwEm
__ZN3KJS14StringInstance14deletePropertyEPNS_9ExecStateERKNS_10IdentifierE
__ZN3KJS14StringInstance16getPropertyNamesEPNS_9ExecStateERNS_17PropertyNameArrayE
__ZN3KJS14StringInstance18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE
__ZN3KJS14StringInstance18getOwnPropertySlotEPNS_9ExecStateEjRNS_12PropertySlotE
__ZN3KJS14StringInstance18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE
__ZN3KJS14StringInstance3putEPNS_9ExecStateERKNS_10IdentifierEPNS_7JSValueE
__ZN3KJS14StringInstance4infoE
__ZN3KJS14StringInstanceC1EPNS_8JSObjectERKNS_7UStringE
__ZN3KJS14StringInstanceC2EPNS_8JSObjectERKNS_7UStringE
__ZN3KJS14StringInstanceC2EPNS_9ExecStateEPNS_8JSObjectERKNS_7UStringE
__ZN3KJS15GlobalExecStateC1EPNS_14JSGlobalObjectEPNS_8JSObjectE
__ZN3KJS15GlobalExecStateD1Ev
__ZN3KJS15JSWrapperObject4markEv
......@@ -127,37 +52,47 @@ __ZN3KJS16JSVariableObject16getPropertyNamesEPNS_9ExecStateERNS_17PropertyNameAr
__ZN3KJS16ParserRefCounted3refEv
__ZN3KJS16ParserRefCounted5derefEv
__ZN3KJS17PropertyNameArray3addEPNS_7UString3RepE
__ZN3KJS17PrototypeFunctionC1EPNS_9ExecStateEPNS_17FunctionPrototypeEiRKNS_10IdentifierEPFPNS_7JSValueES2_PNS_8JSObjectERKNS_4ListEE
__ZN3KJS17PrototypeFunctionC1EPNS_9ExecStateEiRKNS_10IdentifierEPFPNS_7JSValueES2_PNS_8JSObjectERKNS_4ListEE
__ZN3KJS17PrototypeFunctionC1EPNS_9ExecStateEPNS_17FunctionPrototypeEiRKNS_10IdentifierEPFPNS_7JSValueES2_PNS_8JSObjectERKNS_4ListEE
__ZN3KJS19initializeThreadingEv
__ZN3KJS19InternalFunctionImp4infoE
__ZN3KJS19InternalFunctionImpC2EPNS_17FunctionPrototypeERKNS_10IdentifierE
__ZN3KJS19initializeThreadingEv
__ZN3KJS23objectProtoFuncToStringEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE
__ZN3KJS4Heap10threadHeapEv
__ZN3KJS4Heap15recordExtraCostEm
__ZN3KJS4Heap17globalObjectCountEv
__ZN3KJS4Heap20protectedObjectCountEv
__ZN3KJS4Heap25protectedObjectTypeCountsEv
__ZN3KJS4Heap26protectedGlobalObjectCountEv
__ZN3KJS4Heap4heapEPKNS_7JSValueE
__ZN3KJS4Heap4sizeEv
__ZN3KJS4Heap7collectEv
__ZN3KJS4Heap7protectEPNS_7JSValueE
__ZN3KJS4Heap8allocateEm
__ZN3KJS4Heap9unprotectEPNS_7JSValueE
__ZN3KJS4List15expandAndAppendEPNS_7JSValueE
__ZN3KJS4List7markSetEv
__ZN3KJS6JSCell9getObjectEv
__ZN3KJS6JSCellnwEm
__ZN3KJS6JSCellnwEmPNS_9ExecStateE
__ZN3KJS6JSLock12DropAllLocksC1Ev
__ZN3KJS6JSLock12DropAllLocksD1Ev
__ZN3KJS6JSLock14registerThreadEv
__ZN3KJS6JSLock4lockEv
__ZN3KJS6JSLock6unlockEv
__ZN3KJS6JSLock9lockCountEv