Ignore:
Timestamp:
Mar 3, 2011, 2:30:59 PM (14 years ago)
Author:
[email protected]
Message:

2011-03-03 Oliver Hunt <[email protected]>

Reviewed by Geoffrey Garen.

JSVariableObject needs to use WriteBarrier for symboltable property storage
https://bugs.webkit.org/show_bug.cgi?id=55698

Replace the direct usage of Register in JSVariableObject (and descendents)
with WriteBarrier. This requires updating the Arguments object to use
WriteBarrier as well.

  • interpreter/Interpreter.cpp: (JSC::Interpreter::unwindCallFrame): (JSC::Interpreter::privateExecute): (JSC::Interpreter::retrieveArguments):
  • jit/JITStubs.cpp: (JSC::DEFINE_STUB_FUNCTION):
  • runtime/ArgList.h: (JSC::MarkedArgumentBuffer::initialize):
  • runtime/Arguments.cpp: (JSC::Arguments::markChildren): (JSC::Arguments::copyToRegisters): (JSC::Arguments::fillArgList): (JSC::Arguments::getOwnPropertySlot): (JSC::Arguments::getOwnPropertyDescriptor): (JSC::Arguments::put):
  • runtime/Arguments.h: (JSC::Arguments::setActivation): (JSC::Arguments::Arguments): (JSC::Arguments::copyRegisters): (JSC::JSActivation::copyRegisters):
  • runtime/JSActivation.cpp: (JSC::JSActivation::markChildren): (JSC::JSActivation::symbolTableGet): (JSC::JSActivation::symbolTablePut): (JSC::JSActivation::symbolTablePutWithAttributes): (JSC::JSActivation::put): (JSC::JSActivation::putWithAttributes): (JSC::JSActivation::argumentsGetter):
  • runtime/JSActivation.h:
  • runtime/JSGlobalObject.cpp: (JSC::JSGlobalObject::put): (JSC::JSGlobalObject::putWithAttributes): (JSC::JSGlobalObject::markChildren): (JSC::JSGlobalObject::copyGlobalsFrom): (JSC::JSGlobalObject::copyGlobalsTo): (JSC::JSGlobalObject::resizeRegisters):
  • runtime/JSGlobalObject.h: (JSC::JSGlobalObject::setRegisters): (JSC::JSGlobalObject::addStaticGlobals):
  • runtime/JSStaticScopeObject.cpp: (JSC::JSStaticScopeObject::put): (JSC::JSStaticScopeObject::putWithAttributes):
  • runtime/JSVariableObject.cpp: (JSC::JSVariableObject::symbolTableGet):
  • runtime/JSVariableObject.h: (JSC::JSVariableObject::registerAt): (JSC::JSVariableObject::JSVariableObjectData::JSVariableObjectData): (JSC::JSVariableObject::symbolTableGet): (JSC::JSVariableObject::symbolTablePut): (JSC::JSVariableObject::symbolTablePutWithAttributes): (JSC::JSVariableObject::copyRegisterArray): (JSC::JSVariableObject::setRegisters):

2011-03-03 Oliver Hunt <[email protected]>

Reviewed by Geoffrey Garen.

JSVariableObject needs to use WriteBarrier for symboltable property storage
https://bugs.webkit.org/show_bug.cgi?id=55698

Update to pass JSGlobalData for the symbol table write used
to set the document property.

  • bindings/js/JSDOMWindowBase.cpp: (WebCore::JSDOMWindowBase::updateDocument):
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/runtime/Arguments.cpp

    r80179 r80285  
    4949
    5050    if (d->registerArray)
    51         markStack.deprecatedAppendValues(d->registerArray.get(), d->numParameters);
     51        markStack.appendValues(d->registerArray.get(), d->numParameters);
    5252
    5353    if (d->extraArguments) {
    5454        unsigned numExtraArguments = d->numArguments - d->numParameters;
    55         markStack.deprecatedAppendValues(d->extraArguments, numExtraArguments);
     55        markStack.appendValues(d->extraArguments, numExtraArguments);
    5656    }
    5757
     
    7575        unsigned i = 0;
    7676        for (; i < parametersLength; ++i)
    77             buffer[i] = d->registers[d->firstParameterIndex + i].jsValue();
     77            buffer[i] = d->registers[d->firstParameterIndex + i].get();
    7878        for (; i < d->numArguments; ++i)
    79             buffer[i] = d->extraArguments[i - d->numParameters].jsValue();
     79            buffer[i] = d->extraArguments[i - d->numParameters].get();
    8080        return;
    8181    }
     
    8585    for (; i < parametersLength; ++i) {
    8686        if (!d->deletedArguments[i])
    87             buffer[i] = d->registers[d->firstParameterIndex + i].jsValue();
     87            buffer[i] = d->registers[d->firstParameterIndex + i].get();
    8888        else
    8989            buffer[i] = get(exec, i);
     
    9191    for (; i < d->numArguments; ++i) {
    9292        if (!d->deletedArguments[i])
    93             buffer[i] = d->extraArguments[i - d->numParameters].jsValue();
     93            buffer[i] = d->extraArguments[i - d->numParameters].get();
    9494        else
    9595            buffer[i] = get(exec, i);
     
    120120        unsigned i = 0;
    121121        for (; i < parametersLength; ++i)
    122             args.append(d->registers[d->firstParameterIndex + i].jsValue());
     122            args.append(d->registers[d->firstParameterIndex + i].get());
    123123        for (; i < d->numArguments; ++i)
    124             args.append(d->extraArguments[i - d->numParameters].jsValue());
     124            args.append(d->extraArguments[i - d->numParameters].get());
    125125        return;
    126126    }
     
    130130    for (; i < parametersLength; ++i) {
    131131        if (!d->deletedArguments[i])
    132             args.append(d->registers[d->firstParameterIndex + i].jsValue());
     132            args.append(d->registers[d->firstParameterIndex + i].get());
    133133        else
    134134            args.append(get(exec, i));
     
    136136    for (; i < d->numArguments; ++i) {
    137137        if (!d->deletedArguments[i])
    138             args.append(d->extraArguments[i - d->numParameters].jsValue());
     138            args.append(d->extraArguments[i - d->numParameters].get());
    139139        else
    140140            args.append(get(exec, i));
     
    146146    if (i < d->numArguments && (!d->deletedArguments || !d->deletedArguments[i])) {
    147147        if (i < d->numParameters) {
    148             slot.setValue(d->registers[d->firstParameterIndex + i].jsValue());
     148            slot.setValue(d->registers[d->firstParameterIndex + i].get());
    149149        } else
    150             slot.setValue(d->extraArguments[i - d->numParameters].jsValue());
     150            slot.setValue(d->extraArguments[i - d->numParameters].get());
    151151        return true;
    152152    }
     
    185185    if (isArrayIndex && i < d->numArguments && (!d->deletedArguments || !d->deletedArguments[i])) {
    186186        if (i < d->numParameters) {
    187             slot.setValue(d->registers[d->firstParameterIndex + i].jsValue());
     187            slot.setValue(d->registers[d->firstParameterIndex + i].get());
    188188        } else
    189             slot.setValue(d->extraArguments[i - d->numParameters].jsValue());
     189            slot.setValue(d->extraArguments[i - d->numParameters].get());
    190190        return true;
    191191    }
     
    216216    if (isArrayIndex && i < d->numArguments && (!d->deletedArguments || !d->deletedArguments[i])) {
    217217        if (i < d->numParameters) {
    218             descriptor.setDescriptor(d->registers[d->firstParameterIndex + i].jsValue(), DontEnum);
     218            descriptor.setDescriptor(d->registers[d->firstParameterIndex + i].get(), DontEnum);
    219219        } else
    220             descriptor.setDescriptor(d->extraArguments[i - d->numParameters].jsValue(), DontEnum);
     220            descriptor.setDescriptor(d->extraArguments[i - d->numParameters].get(), DontEnum);
    221221        return true;
    222222    }
     
    258258    if (i < d->numArguments && (!d->deletedArguments || !d->deletedArguments[i])) {
    259259        if (i < d->numParameters)
    260             d->registers[d->firstParameterIndex + i] = JSValue(value);
    261         else
    262             d->extraArguments[i - d->numParameters] = JSValue(value);
     260            d->registers[d->firstParameterIndex + i].set(exec->globalData(), d->activation ? static_cast<JSCell*>(d->activation.get()) : static_cast<JSCell*>(this), value);
     261        else
     262            d->extraArguments[i - d->numParameters].set(exec->globalData(), this, value);
    263263        return;
    264264    }
     
    274274    if (isArrayIndex && i < d->numArguments && (!d->deletedArguments || !d->deletedArguments[i])) {
    275275        if (i < d->numParameters)
    276             d->registers[d->firstParameterIndex + i] = JSValue(value);
    277         else
    278             d->extraArguments[i - d->numParameters] = JSValue(value);
     276            d->registers[d->firstParameterIndex + i].set(exec->globalData(), d->activation ? static_cast<JSCell*>(d->activation.get()) : static_cast<JSCell*>(this), value);
     277        else
     278            d->extraArguments[i - d->numParameters].set(exec->globalData(), this, value);
    279279        return;
    280280    }
Note: See TracChangeset for help on using the changeset viewer.