Skip to content
  • oliver@apple.com's avatar
    2011-01-27 Oliver Hunt <oliver@apple.com> · c975423a
    oliver@apple.com authored
            Reviewed by Geoffrey Garen.
    
            Convert markstack to a slot visitor API
            https://bugs.webkit.org/show_bug.cgi?id=53219
    
            Move the MarkStack over to a slot based marking API.
    
            In order to avoiding aliasing concerns there are two new types
            that need to be used when holding on to JSValues and JSCell that
            need to be marked: WriteBarrier and DeprecatedPtr.  WriteBarrier
            is expected to be used for any JSValue or Cell that's lifetime and
            marking is controlled by another GC object.  DeprecatedPtr is used
            for any value that we need to rework ownership for.
    
            The change over to this model has produced a large amount of
            code changes, but they are mostly mechanical (forwarding JSGlobalData,
            etc).
    
            * API/JSCallbackObject.h:
            (JSC::JSCallbackObjectData::setPrivateProperty):
            (JSC::JSCallbackObjectData::JSPrivatePropertyMap::getPrivateProperty):
            (JSC::JSCallbackObjectData::JSPrivatePropertyMap::setPrivateProperty):
            (JSC::JSCallbackObjectData::JSPrivatePropertyMap::markChildren):
            (JSC::JSCallbackObject::setPrivateProperty):
            * API/JSCallbackObjectFunctions.h:
            (JSC::::put):
            (JSC::::staticFunctionGetter):
            * API/JSObjectRef.cpp:
            (JSObjectMakeConstructor):
            (JSObjectSetPrivateProperty):
            * API/JSWeakObjectMapRefInternal.h:
            * JavaScriptCore.exp:
            * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
            * JavaScriptCore.xcodeproj/project.pbxproj:
            * bytecode/CodeBlock.cpp:
            (JSC::CodeBlock::markAggregate):
            * bytecode/CodeBlock.h:
            (JSC::CodeBlock::globalObject):
            * bytecompiler/BytecodeGenerator.cpp:
            (JSC::BytecodeGenerator::BytecodeGenerator):
            (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall):
            (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply):
            (JSC::BytecodeGenerator::findScopedProperty):
            * debugger/DebuggerActivation.cpp:
            (JSC::DebuggerActivation::DebuggerActivation):
            (JSC::DebuggerActivation::markChildren):
            * debugger/DebuggerActivation.h:
            * interpreter/Interpreter.cpp:
            (JSC::Interpreter::resolve):
            (JSC::Interpreter::resolveSkip):
            (JSC::Interpreter::resolveGlobalDynamic):
            (JSC::Interpreter::resolveBaseAndProperty):
            (JSC::Interpreter::unwindCallFrame):
            (JSC::appendSourceToError):
            (JSC::Interpreter::execute):
            (JSC::Interpreter::privateExecute):
            * interpreter/Register.h:
            (JSC::Register::jsValueSlot):
            * jit/JITStubs.cpp:
            (JSC::JITThunks::tryCacheGetByID):
            (JSC::DEFINE_STUB_FUNCTION):
            * jsc.cpp:
            (GlobalObject::GlobalObject):
            * runtime/Arguments.cpp:
            (JSC::Arguments::markChildren):
            (JSC::Arguments::getOwnPropertySlot):
            (JSC::Arguments::getOwnPropertyDescriptor):
            (JSC::Arguments::put):
            * runtime/Arguments.h:
            (JSC::Arguments::setActivation):
            (JSC::Arguments::Arguments):
            * runtime/ArrayConstructor.cpp:
            (JSC::ArrayConstructor::ArrayConstructor):
            (JSC::constructArrayWithSizeQuirk):
            * runtime/ArrayPrototype.cpp:
            (JSC::arrayProtoFuncSplice):
            * runtime/BatchedTransitionOptimizer.h:
            (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer):
            (JSC::BatchedTransitionOptimizer::~BatchedTransitionOptimizer):
            * runtime/BooleanConstructor.cpp:
            (JSC::BooleanConstructor::BooleanConstructor):
            (JSC::constructBoolean):
            (JSC::constructBooleanFromImmediateBoolean):
            * runtime/BooleanPrototype.cpp:
            (JSC::BooleanPrototype::BooleanPrototype):
            * runtime/ConservativeSet.h:
            (JSC::ConservativeSet::mark):
            * runtime/DateConstructor.cpp:
            (JSC::DateConstructor::DateConstructor):
            * runtime/DateInstance.cpp:
            (JSC::DateInstance::DateInstance):
            * runtime/DatePrototype.cpp:
            (JSC::dateProtoFuncSetTime):
            (JSC::setNewValueFromTimeArgs):
            (JSC::setNewValueFromDateArgs):
            (JSC::dateProtoFuncSetYear):
            * runtime/ErrorConstructor.cpp:
            (JSC::ErrorConstructor::ErrorConstructor):
            * runtime/ErrorInstance.cpp:
            (JSC::ErrorInstance::ErrorInstance):
            * runtime/ErrorPrototype.cpp:
            (JSC::ErrorPrototype::ErrorPrototype):
            * runtime/FunctionConstructor.cpp:
            (JSC::FunctionConstructor::FunctionConstructor):
            * runtime/FunctionPrototype.cpp:
            (JSC::FunctionPrototype::FunctionPrototype):
            * runtime/GetterSetter.cpp:
            (JSC::GetterSetter::markChildren):
            * runtime/GetterSetter.h:
            (JSC::GetterSetter::GetterSetter):
            (JSC::GetterSetter::getter):
            (JSC::GetterSetter::setGetter):
            (JSC::GetterSetter::setter):
            (JSC::GetterSetter::setSetter):
            * runtime/GlobalEvalFunction.cpp:
            (JSC::GlobalEvalFunction::GlobalEvalFunction):
            (JSC::GlobalEvalFunction::markChildren):
            * runtime/GlobalEvalFunction.h:
            (JSC::GlobalEvalFunction::cachedGlobalObject):
            * runtime/Heap.cpp:
            (JSC::Heap::markProtectedObjects):
            (JSC::Heap::markTempSortVectors):
            (JSC::Heap::markRoots):
            * runtime/InternalFunction.cpp:
            (JSC::InternalFunction::InternalFunction):
            * runtime/JSAPIValueWrapper.h:
            (JSC::JSAPIValueWrapper::value):
            (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
            * runtime/JSActivation.cpp:
            (JSC::JSActivation::put):
            * runtime/JSArray.cpp:
            (JSC::JSArray::JSArray):
            (JSC::JSArray::getOwnPropertySlot):
            (JSC::JSArray::getOwnPropertyDescriptor):
            (JSC::JSArray::put):
            (JSC::JSArray::putSlowCase):
            (JSC::JSArray::deleteProperty):
            (JSC::JSArray::increaseVectorLength):
            (JSC::JSArray::setLength):
            (JSC::JSArray::pop):
            (JSC::JSArray::push):
            (JSC::JSArray::unshiftCount):
            (JSC::JSArray::sort):
            (JSC::JSArray::fillArgList):
            (JSC::JSArray::copyToRegisters):
            (JSC::JSArray::compactForSorting):
            * runtime/JSArray.h:
            (JSC::JSArray::getIndex):
            (JSC::JSArray::setIndex):
            (JSC::JSArray::uncheckedSetIndex):
            (JSC::JSArray::markChildrenDirect):
            * runtime/JSByteArray.cpp:
            (JSC::JSByteArray::JSByteArray):
            * runtime/JSCell.h:
            (JSC::JSCell::MarkStack::append):
            (JSC::JSCell::MarkStack::appendCell):
            * runtime/JSFunction.cpp:
            (JSC::JSFunction::JSFunction):
            (JSC::JSFunction::getOwnPropertySlot):
            * runtime/JSGlobalObject.cpp:
            (JSC::markIfNeeded):
            (JSC::JSGlobalObject::reset):
            (JSC::JSGlobalObject::resetPrototype):
            (JSC::JSGlobalObject::markChildren):
            * runtime/JSGlobalObject.h:
            (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
            (JSC::JSGlobalObject::regExpConstructor):
            (JSC::JSGlobalObject::errorConstructor):
            (JSC::JSGlobalObject::evalErrorConstructor):
            (JSC::JSGlobalObject::rangeErrorConstructor):
            (JSC::JSGlobalObject::referenceErrorConstructor):
            (JSC::JSGlobalObject::syntaxErrorConstructor):
            (JSC::JSGlobalObject::typeErrorConstructor):
            (JSC::JSGlobalObject::URIErrorConstructor):
            (JSC::JSGlobalObject::evalFunction):
            (JSC::JSGlobalObject::objectPrototype):
            (JSC::JSGlobalObject::functionPrototype):
            (JSC::JSGlobalObject::arrayPrototype):
            (JSC::JSGlobalObject::booleanPrototype):
            (JSC::JSGlobalObject::stringPrototype):
            (JSC::JSGlobalObject::numberPrototype):
            (JSC::JSGlobalObject::datePrototype):
            (JSC::JSGlobalObject::regExpPrototype):
            (JSC::JSGlobalObject::methodCallDummy):
            (JSC::constructArray):
            * runtime/JSONObject.cpp:
            (JSC::Stringifier::Holder::object):
            (JSC::Stringifier::Holder::objectSlot):
            (JSC::Stringifier::markAggregate):
            (JSC::Stringifier::stringify):
            (JSC::Stringifier::Holder::appendNextProperty):
            (JSC::Walker::callReviver):
            (JSC::Walker::walk):
            * runtime/JSObject.cpp:
            (JSC::JSObject::defineGetter):
            (JSC::JSObject::defineSetter):
            (JSC::JSObject::removeDirect):
            (JSC::JSObject::putDirectFunction):
            (JSC::JSObject::putDirectFunctionWithoutTransition):
            (JSC::putDescriptor):
            (JSC::JSObject::defineOwnProperty):
            * runtime/JSObject.h:
            (JSC::JSObject::putDirectOffset):
            (JSC::JSObject::putUndefinedAtDirectOffset):
            (JSC::JSObject::flattenDictionaryObject):
            (JSC::JSObject::putDirectInternal):
            (JSC::JSObject::putDirect):
            (JSC::JSObject::putDirectFunction):
            (JSC::JSObject::putDirectWithoutTransition):
            (JSC::JSObject::putDirectFunctionWithoutTransition):
            (JSC::JSValue::putDirect):
            (JSC::JSObject::allocatePropertyStorageInline):
            (JSC::JSObject::markChildrenDirect):
            * runtime/JSStaticScopeObject.cpp:
            (JSC::JSStaticScopeObject::markChildren):
            * runtime/JSString.cpp:
            (JSC::StringObject::create):
            * runtime/JSValue.h:
            * runtime/JSWrapperObject.cpp:
            (JSC::JSWrapperObject::markChildren):
            * runtime/JSWrapperObject.h:
            (JSC::JSWrapperObject::internalValue):
            (JSC::JSWrapperObject::setInternalValue):
            * runtime/LiteralParser.cpp:
            (JSC::LiteralParser::parse):
            * runtime/Lookup.cpp:
            (JSC::setUpStaticFunctionSlot):
            * runtime/Lookup.h:
            (JSC::lookupPut):
            * runtime/MarkStack.h:
            * runtime/MathObject.cpp:
            (JSC::MathObject::MathObject):
            * runtime/NativeErrorConstructor.cpp:
            (JSC::NativeErrorConstructor::NativeErrorConstructor):
            * runtime/NativeErrorPrototype.cpp:
            (JSC::NativeErrorPrototype::NativeErrorPrototype):
            * runtime/NumberConstructor.cpp:
            (JSC::NumberConstructor::NumberConstructor):
            (JSC::constructWithNumberConstructor):
            * runtime/NumberObject.cpp:
            (JSC::constructNumber):
            * runtime/NumberPrototype.cpp:
            (JSC::NumberPrototype::NumberPrototype):
            * runtime/ObjectConstructor.cpp:
            (JSC::ObjectConstructor::ObjectConstructor):
            (JSC::objectConstructorGetOwnPropertyDescriptor):
            * runtime/Operations.h:
            (JSC::normalizePrototypeChain):
            (JSC::resolveBase):
            * runtime/PrototypeFunction.cpp:
            (JSC::PrototypeFunction::PrototypeFunction):
            * runtime/PutPropertySlot.h:
            (JSC::PutPropertySlot::setExistingProperty):
            (JSC::PutPropertySlot::setNewProperty):
            (JSC::PutPropertySlot::base):
            * runtime/RegExpConstructor.cpp:
            (JSC::RegExpConstructor::RegExpConstructor):
            * runtime/ScopeChain.cpp:
            (JSC::ScopeChainNode::print):
            * runtime/ScopeChain.h:
            (JSC::ScopeChainNode::~ScopeChainNode):
            (JSC::ScopeChainIterator::operator*):
            (JSC::ScopeChainIterator::operator->):
            (JSC::ScopeChain::top):
            * runtime/ScopeChainMark.h:
            (JSC::ScopeChain::markAggregate):
            * runtime/SmallStrings.cpp:
            (JSC::isMarked):
            (JSC::SmallStrings::markChildren):
            * runtime/SmallStrings.h:
            (JSC::SmallStrings::emptyString):
            (JSC::SmallStrings::singleCharacterString):
            (JSC::SmallStrings::singleCharacterStrings):
            * runtime/StringConstructor.cpp:
            (JSC::StringConstructor::StringConstructor):
            * runtime/StringObject.cpp:
            (JSC::StringObject::StringObject):
            * runtime/StringObject.h:
            * runtime/StringPrototype.cpp:
            (JSC::StringPrototype::StringPrototype):
            * runtime/Structure.cpp:
            (JSC::Structure::flattenDictionaryStructure):
            * runtime/Structure.h:
            (JSC::Structure::storedPrototypeSlot):
            * runtime/WeakGCMap.h:
            (JSC::WeakGCMap::uncheckedGet):
            (JSC::WeakGCMap::uncheckedGetSlot):
            (JSC::::get):
            (JSC::::take):
            (JSC::::set):
            (JSC::::uncheckedRemove):
            * runtime/WriteBarrier.h: Added.
            (JSC::DeprecatedPtr::DeprecatedPtr):
            (JSC::DeprecatedPtr::get):
            (JSC::DeprecatedPtr::operator*):
            (JSC::DeprecatedPtr::operator->):
            (JSC::DeprecatedPtr::slot):
            (JSC::DeprecatedPtr::operator UnspecifiedBoolType*):
            (JSC::DeprecatedPtr::operator!):
            (JSC::WriteBarrierBase::set):
            (JSC::WriteBarrierBase::get):
            (JSC::WriteBarrierBase::operator*):
            (JSC::WriteBarrierBase::operator->):
            (JSC::WriteBarrierBase::slot):
            (JSC::WriteBarrierBase::operator UnspecifiedBoolType*):
            (JSC::WriteBarrierBase::operator!):
            (JSC::WriteBarrier::WriteBarrier):
            (JSC::operator==):
    2011-01-27  Oliver Hunt  <oliver@apple.com>
    
            Reviewed by Geoffrey Garen.
    
            Convert markstack to a slot visitor API
            https://bugs.webkit.org/show_bug.cgi?id=53219
    
            There's no reason to recurse here, the value we
            were marking was protected.
    
            * JSValueWrapper.cpp:
            (JSValueWrapper::JSObjectMark):
    2011-01-27  Oliver Hunt  <oliver@apple.com>
    
            Reviewed by Geoffrey Garen.
    
            Convert markstack to a slot visitor API
            https://bugs.webkit.org/show_bug.cgi?id=53219
    
            Update WebCore to the new marking apis, correct bindings
            codegen.
    
            * ForwardingHeaders/runtime/WriteBarrier.h: Added.
            * WebCore.exp.in:
            * bindings/js/DOMWrapperWorld.h:
            (WebCore::DOMWrapperWorld::globalData):
            * bindings/js/JSAudioConstructor.cpp:
            (WebCore::JSAudioConstructor::JSAudioConstructor):
            * bindings/js/JSDOMBinding.cpp:
            (WebCore::markDOMNodesForDocument):
            (WebCore::markDOMObjectWrapper):
            (WebCore::markDOMNodeWrapper):
            * bindings/js/JSDOMGlobalObject.cpp:
            (WebCore::JSDOMGlobalObject::markChildren):
            (WebCore::JSDOMGlobalObject::setInjectedScript):
            (WebCore::JSDOMGlobalObject::injectedScript):
            * bindings/js/JSDOMGlobalObject.h:
            (WebCore::JSDOMGlobalObject::JSDOMGlobalObjectData::JSDOMGlobalObjectData):
            (WebCore::getDOMConstructor):
            * bindings/js/JSDOMWindowCustom.cpp:
            (WebCore::JSDOMWindow::setLocation):
            (WebCore::DialogHandler::dialogCreated):
            * bindings/js/JSDOMWindowShell.cpp:
            (WebCore::JSDOMWindowShell::JSDOMWindowShell):
            (WebCore::JSDOMWindowShell::setWindow):
            (WebCore::JSDOMWindowShell::markChildren):
            (WebCore::JSDOMWindowShell::unwrappedObject):
            * bindings/js/JSDOMWindowShell.h:
            (WebCore::JSDOMWindowShell::window):
            (WebCore::JSDOMWindowShell::setWindow):
            * bindings/js/JSEventListener.cpp:
            (WebCore::JSEventListener::JSEventListener):
            (WebCore::JSEventListener::markJSFunction):
            * bindings/js/JSEventListener.h:
            (WebCore::JSEventListener::jsFunction):
            * bindings/js/JSHTMLDocumentCustom.cpp:
            (WebCore::JSHTMLDocument::setAll):
            * bindings/js/JSImageConstructor.cpp:
            (WebCore::JSImageConstructor::JSImageConstructor):
            * bindings/js/JSImageDataCustom.cpp:
            (WebCore::toJS):
            * bindings/js/JSJavaScriptCallFrameCustom.cpp:
            (WebCore::JSJavaScriptCallFrame::scopeChain):
            (WebCore::JSJavaScriptCallFrame::scopeType):
            * bindings/js/JSNodeFilterCondition.cpp:
            (WebCore::JSNodeFilterCondition::markAggregate):
            (WebCore::JSNodeFilterCondition::acceptNode):
            * bindings/js/JSNodeFilterCondition.h:
            * bindings/js/JSNodeFilterCustom.cpp:
            * bindings/js/JSOptionConstructor.cpp:
            (WebCore::JSOptionConstructor::JSOptionConstructor):
            * bindings/js/JSSQLResultSetRowListCustom.cpp:
            (WebCore::JSSQLResultSetRowList::item):
            * bindings/js/ScriptCachedFrameData.cpp:
            (WebCore::ScriptCachedFrameData::restore):
            * bindings/js/ScriptObject.cpp:
            (WebCore::ScriptGlobalObject::set):
            * bindings/js/SerializedScriptValue.cpp:
            (WebCore::CloneDeserializer::putProperty):
            * bindings/scripts/CodeGeneratorJS.pm:
            * dom/Document.h:
    2011-01-27  Oliver Hunt  <oliver@apple.com>
    
            Reviewed by Geoffrey Garen.
    
            Convert markstack to a slot visitor API
            https://bugs.webkit.org/show_bug.cgi?id=53219
    
            Update to new marking api
    
            * WebView/WebScriptDebugDelegate.mm:
            (-[WebScriptCallFrame scopeChain]):
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@77006 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    c975423a