Changeset 35291 in webkit for trunk/JavaScriptCore/VM/Machine.cpp


Ignore:
Timestamp:
Jul 22, 2008, 10:10:05 PM (17 years ago)
Author:
[email protected]
Message:

JavaScriptCore:

2008-07-22 Geoffrey Garen <[email protected]>

Reviewed by Oliver Hunt and Sam Weinig.

Next step toward putting doubles in registers: Prepare the Register class
and its clients for registers that don't contain JSValue*s.


This means a few things:


  1. Register::jsValue() clients, including ArgList clients, must now supply an ExecState* when accessing an entry in an ArgList, in case the entry will need to create a JSValue* on the fly.


  1. Register clients that definitely don't want to create a JSValue* on the fly now use different APIs: getJSValue() for clients that know the register contains a JSValue*, and v() for clients who just want a void*.


  1. I had to change some headers around in order to resolve dependency problems created by using a Register in the ArgList header.


SunSpider reports no change.

JavaScriptGlue:

2008-07-22 Geoffrey Garen <[email protected]>

Reviewed by Oliver Hunt and Sam Weinig.

Next step toward putting doubles in registers: Prepare the Register class
and its clients for registers that don't contain JSValue*s.

WebCore:

2008-07-22 Geoffrey Garen <[email protected]>

Reviewed by Oliver Hunt and Sam Weinig.

Next step toward putting doubles in registers: Prepare the Register class
and its clients for registers that don't contain JSValue*s.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/VM/Machine.cpp

    r35245 r35291  
    370370    callFrame[RegisterFile::CalledAsConstructor] = calledAsConstructor;
    371371    callFrame[RegisterFile::Callee] = function;
    372     callFrame[RegisterFile::OptionalCalleeActivation] = static_cast<intptr_t>(0);
     372    callFrame[RegisterFile::OptionalCalleeActivation] = nullJSValue;
    373373}
    374374
     
    444444        return jsUndefined();
    445445
    446     JSValue* program = r[argv + 1].jsValue();
     446    JSValue* program = r[argv + 1].jsValue(exec);
    447447
    448448    if (!program->isString())
     
    519519        end = it + registerFile->numGlobals();
    520520        while (it != end) {
    521             printf("[global var]               | %10p | %10p \n", it, (*it).jsValue());
     521            printf("[global var]               | %10p | %10p \n", it, (*it).v());
    522522            ++it;
    523523        }
     
    526526   
    527527    it = r - codeBlock->numLocals - RegisterFile::CallFrameHeaderSize;
    528     printf("[CallerCodeBlock]          | %10p | %10p \n", it, (*it).jsValue()); ++it;
    529     printf("[ReturnVPC]                | %10p | %10p \n", it, (*it).jsValue()); ++it;
    530     printf("[CallerScopeChain]         | %10p | %10p \n", it, (*it).jsValue()); ++it;
    531     printf("[CallerRegisterOffset]     | %10p | %10p \n", it, (*it).jsValue()); ++it;
    532     printf("[ReturnValueRegister]      | %10p | %10p \n", it, (*it).jsValue()); ++it;
    533     printf("[ArgumentStartRegister]    | %10p | %10p \n", it, (*it).jsValue()); ++it;
    534     printf("[ArgumentCount]            | %10p | %10p \n", it, (*it).jsValue()); ++it;
    535     printf("[CalledAsConstructor]      | %10p | %10p \n", it, (*it).jsValue()); ++it;
    536     printf("[Callee]                   | %10p | %10p \n", it, (*it).jsValue()); ++it;
    537     printf("[OptionalCalleeActivation] | %10p | %10p \n", it, (*it).jsValue()); ++it;
     528    printf("[CallerCodeBlock]          | %10p | %10p \n", it, (*it).v()); ++it;
     529    printf("[ReturnVPC]                | %10p | %10p \n", it, (*it).v()); ++it;
     530    printf("[CallerScopeChain]         | %10p | %10p \n", it, (*it).v()); ++it;
     531    printf("[CallerRegisterOffset]     | %10p | %10p \n", it, (*it).v()); ++it;
     532    printf("[ReturnValueRegister]      | %10p | %10p \n", it, (*it).v()); ++it;
     533    printf("[ArgumentStartRegister]    | %10p | %10p \n", it, (*it).v()); ++it;
     534    printf("[ArgumentCount]            | %10p | %10p \n", it, (*it).v()); ++it;
     535    printf("[CalledAsConstructor]      | %10p | %10p \n", it, (*it).v()); ++it;
     536    printf("[Callee]                   | %10p | %10p \n", it, (*it).v()); ++it;
     537    printf("[OptionalCalleeActivation] | %10p | %10p \n", it, (*it).v()); ++it;
    538538    printf("----------------------------------------------------\n");
    539539
    540     printf("[this]                     | %10p | %10p \n", it, (*it).jsValue()); ++it;
     540    printf("[this]                     | %10p | %10p \n", it, (*it).v()); ++it;
    541541    end = it + max(codeBlock->numParameters - 1, 0); // - 1 to skip "this"
    542542    if (it != end) {
    543543        do {
    544             printf("[param]                    | %10p | %10p \n", it, (*it).jsValue());
     544            printf("[param]                    | %10p | %10p \n", it, (*it).v());
    545545            ++it;
    546546        } while (it != end);
     
    552552        if (it != end) {
    553553            do {
    554                 printf("[var]                      | %10p | %10p \n", it, (*it).jsValue());
     554                printf("[var]                      | %10p | %10p \n", it, (*it).v());
    555555                ++it;
    556556            } while (it != end);
     
    562562    if (it != end) {
    563563        do {
    564             printf("[temp]                     | %10p | %10p \n", it, (*it).jsValue());
     564            printf("[temp]                     | %10p | %10p \n", it, (*it).v());
    565565            ++it;
    566566        } while (it != end);
     
    586586    if (Debugger* debugger = exec->dynamicGlobalObject()->debugger()) {
    587587        DebuggerCallFrame debuggerCallFrame(exec->dynamicGlobalObject(), codeBlock, scopeChain, r, exceptionValue);
    588         if (callFrame[RegisterFile::Callee].jsValue())
     588        if (callFrame[RegisterFile::Callee].jsValue(exec))
    589589            debugger->returnEvent(debuggerCallFrame, codeBlock->ownerNode->sourceId(), codeBlock->ownerNode->lastLine());
    590590        else
     
    593593
    594594    if (Profiler* profiler = *Profiler::enabledProfilerReference()) {
    595         if (callFrame[RegisterFile::Callee].jsValue())
    596             profiler->didExecute(exec, static_cast<JSObject*>(callFrame[RegisterFile::Callee].jsValue()));
     595        if (callFrame[RegisterFile::Callee].jsValue(exec))
     596            profiler->didExecute(exec, static_cast<JSObject*>(callFrame[RegisterFile::Callee].jsValue(exec)));
    597597        else
    598598            profiler->didExecute(exec, codeBlock->ownerNode->sourceURL(), codeBlock->ownerNode->lineNo());
     
    603603
    604604    // If this call frame created an activation, tear it off.
    605     if (JSActivation* activation = static_cast<JSActivation*>(callFrame[RegisterFile::OptionalCalleeActivation].jsValue())) {
     605    if (JSActivation* activation = static_cast<JSActivation*>(callFrame[RegisterFile::OptionalCalleeActivation].jsValue(exec))) {
    606606        ASSERT(activation->isActivationObject());
    607607        activation->copyRegisters();
     
    11221122        */
    11231123        int dst = (++vPC)->u.operand;
    1124         JSValue* src1 = r[(++vPC)->u.operand].jsValue();
    1125         JSValue* src2 = r[(++vPC)->u.operand].jsValue();
     1124        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
     1125        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
    11261126        if (JSImmediate::areBothImmediateNumbers(src1, src2))
    11271127            r[dst] = jsBoolean(reinterpret_cast<intptr_t>(src1) == reinterpret_cast<intptr_t>(src2));
     
    11431143        */
    11441144        int dst = (++vPC)->u.operand;
    1145         JSValue* src1 = r[(++vPC)->u.operand].jsValue();
    1146         JSValue* src2 = r[(++vPC)->u.operand].jsValue();
     1145        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
     1146        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
    11471147        if (JSImmediate::areBothImmediateNumbers(src1, src2))
    11481148            r[dst] = jsBoolean(reinterpret_cast<intptr_t>(src1) != reinterpret_cast<intptr_t>(src2));
     
    11641164        */
    11651165        int dst = (++vPC)->u.operand;
    1166         JSValue* src1 = r[(++vPC)->u.operand].jsValue();
    1167         JSValue* src2 = r[(++vPC)->u.operand].jsValue();
     1166        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
     1167        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
    11681168        if (JSImmediate::areBothImmediateNumbers(src1, src2))
    11691169            r[dst] = jsBoolean(reinterpret_cast<intptr_t>(src1) == reinterpret_cast<intptr_t>(src2));
     
    11821182        */
    11831183        int dst = (++vPC)->u.operand;
    1184         JSValue* src1 = r[(++vPC)->u.operand].jsValue();
    1185         JSValue* src2 = r[(++vPC)->u.operand].jsValue();
     1184        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
     1185        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
    11861186        if (JSImmediate::areBothImmediateNumbers(src1, src2))
    11871187            r[dst] = jsBoolean(reinterpret_cast<intptr_t>(src1) != reinterpret_cast<intptr_t>(src2));
     
    12001200        */
    12011201        int dst = (++vPC)->u.operand;
    1202         JSValue* src1 = r[(++vPC)->u.operand].jsValue();
    1203         JSValue* src2 = r[(++vPC)->u.operand].jsValue();
     1202        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
     1203        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
    12041204        JSValue* result = jsBoolean(jsLess(exec, src1, src2));
    12051205        VM_CHECK_EXCEPTION();
     
    12171217        */
    12181218        int dst = (++vPC)->u.operand;
    1219         JSValue* src1 = r[(++vPC)->u.operand].jsValue();
    1220         JSValue* src2 = r[(++vPC)->u.operand].jsValue();
     1219        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
     1220        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
    12211221        JSValue* result = jsBoolean(jsLessEq(exec, src1, src2));
    12221222        VM_CHECK_EXCEPTION();
     
    12331233        */
    12341234        int srcDst = (++vPC)->u.operand;
    1235         JSValue* v = r[srcDst].jsValue();
     1235        JSValue* v = r[srcDst].jsValue(exec);
    12361236        if (JSImmediate::canDoFastAdditiveOperations(v))
    12371237            r[srcDst] = JSImmediate::incImmediateNumber(v);
     
    12521252        */
    12531253        int srcDst = (++vPC)->u.operand;
    1254         JSValue* v = r[srcDst].jsValue();
     1254        JSValue* v = r[srcDst].jsValue(exec);
    12551255        if (JSImmediate::canDoFastAdditiveOperations(v))
    12561256            r[srcDst] = JSImmediate::decImmediateNumber(v);
     
    12731273        int dst = (++vPC)->u.operand;
    12741274        int srcDst = (++vPC)->u.operand;
    1275         JSValue* v = r[srcDst].jsValue();
     1275        JSValue* v = r[srcDst].jsValue(exec);
    12761276        if (JSImmediate::canDoFastAdditiveOperations(v)) {
    12771277            r[dst] = v;
    12781278            r[srcDst] = JSImmediate::incImmediateNumber(v);
    12791279        } else {
    1280             JSValue* number = r[srcDst].jsValue()->toJSNumber(exec);
     1280            JSValue* number = r[srcDst].jsValue(exec)->toJSNumber(exec);
    12811281            VM_CHECK_EXCEPTION();
    12821282            r[dst] = number;
     
    12961296        int dst = (++vPC)->u.operand;
    12971297        int srcDst = (++vPC)->u.operand;
    1298         JSValue* v = r[srcDst].jsValue();
     1298        JSValue* v = r[srcDst].jsValue(exec);
    12991299        if (JSImmediate::canDoFastAdditiveOperations(v)) {
    13001300            r[dst] = v;
    13011301            r[srcDst] = JSImmediate::decImmediateNumber(v);
    13021302        } else {
    1303             JSValue* number = r[srcDst].jsValue()->toJSNumber(exec);
     1303            JSValue* number = r[srcDst].jsValue(exec)->toJSNumber(exec);
    13041304            VM_CHECK_EXCEPTION();
    13051305            r[dst] = number;
     
    13181318        int dst = (++vPC)->u.operand;
    13191319        int src = (++vPC)->u.operand;
    1320         JSValue* result = r[src].jsValue()->toJSNumber(exec);
     1320        JSValue* result = r[src].jsValue(exec)->toJSNumber(exec);
    13211321        VM_CHECK_EXCEPTION();
    13221322
     
    13341334        int dst = (++vPC)->u.operand;
    13351335        int src = (++vPC)->u.operand;
    1336         JSValue* result = jsNumber(exec, -r[src].jsValue()->toNumber(exec));
     1336        JSValue* result = jsNumber(exec, -r[src].jsValue(exec)->toNumber(exec));
    13371337        VM_CHECK_EXCEPTION();
    13381338        r[dst] = result;
     
    13491349        */
    13501350        int dst = (++vPC)->u.operand;
    1351         JSValue* src1 = r[(++vPC)->u.operand].jsValue();
    1352         JSValue* src2 = r[(++vPC)->u.operand].jsValue();
     1351        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
     1352        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
    13531353        if (JSImmediate::canDoFastAdditiveOperations(src1) && JSImmediate::canDoFastAdditiveOperations(src2))
    13541354            r[dst] = JSImmediate::addImmediateNumbers(src1, src2);
     
    13681368        */
    13691369        int dst = (++vPC)->u.operand;
    1370         JSValue* src1 = r[(++vPC)->u.operand].jsValue();
    1371         JSValue* src2 = r[(++vPC)->u.operand].jsValue();
     1370        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
     1371        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
    13721372        JSValue* result = jsNumber(exec, src1->toNumber(exec) * src2->toNumber(exec));
    13731373        VM_CHECK_EXCEPTION();
     
    13871387        int dividend = (++vPC)->u.operand;
    13881388        int divisor = (++vPC)->u.operand;
    1389         JSValue* result = jsNumber(exec, r[dividend].jsValue()->toNumber(exec) / r[divisor].jsValue()->toNumber(exec));
     1389        JSValue* result = jsNumber(exec, r[dividend].jsValue(exec)->toNumber(exec) / r[divisor].jsValue(exec)->toNumber(exec));
    13901390        VM_CHECK_EXCEPTION();
    13911391        r[dst] = result;
     
    14031403        int dividend = (++vPC)->u.operand;
    14041404        int divisor = (++vPC)->u.operand;
    1405         double d = r[dividend].jsValue()->toNumber(exec);
    1406         JSValue* result = jsNumber(exec, fmod(d, r[divisor].jsValue()->toNumber(exec)));
     1405        double d = r[dividend].jsValue(exec)->toNumber(exec);
     1406        JSValue* result = jsNumber(exec, fmod(d, r[divisor].jsValue(exec)->toNumber(exec)));
    14071407        VM_CHECK_EXCEPTION();
    14081408        r[dst] = result;
     
    14181418        */
    14191419        int dst = (++vPC)->u.operand;
    1420         JSValue* src1 = r[(++vPC)->u.operand].jsValue();
    1421         JSValue* src2 = r[(++vPC)->u.operand].jsValue();
     1420        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
     1421        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
    14221422        if (JSImmediate::canDoFastAdditiveOperations(src1) && JSImmediate::canDoFastAdditiveOperations(src2))
    14231423            r[dst] = JSImmediate::subImmediateNumbers(src1, src2);
     
    14381438        */
    14391439        int dst = (++vPC)->u.operand;
    1440         JSValue* val = r[(++vPC)->u.operand].jsValue();
    1441         JSValue* shift = r[(++vPC)->u.operand].jsValue();
     1440        JSValue* val = r[(++vPC)->u.operand].jsValue(exec);
     1441        JSValue* shift = r[(++vPC)->u.operand].jsValue(exec);
    14421442        if (JSImmediate::areBothImmediateNumbers(val, shift))
    14431443            r[dst] = jsNumber(exec, JSImmediate::getTruncatedInt32(val) << (JSImmediate::toTruncatedUInt32(shift) & 0x1f));
     
    14591459        */
    14601460        int dst = (++vPC)->u.operand;
    1461         JSValue* val = r[(++vPC)->u.operand].jsValue();
    1462         JSValue* shift = r[(++vPC)->u.operand].jsValue();
     1461        JSValue* val = r[(++vPC)->u.operand].jsValue(exec);
     1462        JSValue* shift = r[(++vPC)->u.operand].jsValue(exec);
    14631463        if (JSImmediate::areBothImmediateNumbers(val, shift))
    14641464            r[dst] = JSImmediate::rightShiftImmediateNumbers(val, shift);
     
    14801480        */
    14811481        int dst = (++vPC)->u.operand;
    1482         JSValue* val = r[(++vPC)->u.operand].jsValue();
    1483         JSValue* shift = r[(++vPC)->u.operand].jsValue();
     1482        JSValue* val = r[(++vPC)->u.operand].jsValue(exec);
     1483        JSValue* shift = r[(++vPC)->u.operand].jsValue(exec);
    14841484        if (JSImmediate::areBothImmediateNumbers(val, shift) && !JSImmediate::isNegative(val))
    14851485            r[dst] = JSImmediate::rightShiftImmediateNumbers(val, shift);
     
    15011501        */
    15021502        int dst = (++vPC)->u.operand;
    1503         JSValue* src1 = r[(++vPC)->u.operand].jsValue();
    1504         JSValue* src2 = r[(++vPC)->u.operand].jsValue();
     1503        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
     1504        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
    15051505        if (JSImmediate::areBothImmediateNumbers(src1, src2))
    15061506            r[dst] = JSImmediate::andImmediateNumbers(src1, src2);
     
    15221522        */
    15231523        int dst = (++vPC)->u.operand;
    1524         JSValue* src1 = r[(++vPC)->u.operand].jsValue();
    1525         JSValue* src2 = r[(++vPC)->u.operand].jsValue();
     1524        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
     1525        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
    15261526        if (JSImmediate::areBothImmediateNumbers(src1, src2))
    15271527            r[dst] = JSImmediate::xorImmediateNumbers(src1, src2);
     
    15431543        */
    15441544        int dst = (++vPC)->u.operand;
    1545         JSValue* src1 = r[(++vPC)->u.operand].jsValue();
    1546         JSValue* src2 = r[(++vPC)->u.operand].jsValue();
     1545        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
     1546        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
    15471547        if (JSImmediate::areBothImmediateNumbers(src1, src2))
    15481548            r[dst] = JSImmediate::orImmediateNumbers(src1, src2);
     
    15641564        int dst = (++vPC)->u.operand;
    15651565        int src = (++vPC)->u.operand;
    1566         JSValue* result = jsNumber(exec, ~r[src].jsValue()->toInt32(exec));
     1566        JSValue* result = jsNumber(exec, ~r[src].jsValue(exec)->toInt32(exec));
    15671567        VM_CHECK_EXCEPTION();
    15681568        r[dst] = result;
     
    15791579        int dst = (++vPC)->u.operand;
    15801580        int src = (++vPC)->u.operand;
    1581         JSValue* result = jsBoolean(!r[src].jsValue()->toBoolean(exec));
     1581        JSValue* result = jsBoolean(!r[src].jsValue(exec)->toBoolean(exec));
    15821582        VM_CHECK_EXCEPTION();
    15831583        r[dst] = result;
     
    15991599        int base = (++vPC)->u.operand;
    16001600
    1601         JSValue* baseVal = r[base].jsValue();
     1601        JSValue* baseVal = r[base].jsValue(exec);
    16021602
    16031603        if (isNotObject(exec, true, codeBlock, vPC, baseVal, exceptionValue))
     
    16051605
    16061606        JSObject* baseObj = static_cast<JSObject*>(baseVal);
    1607         r[dst] = jsBoolean(baseObj->implementsHasInstance() ? baseObj->hasInstance(exec, r[value].jsValue()) : false);
     1607        r[dst] = jsBoolean(baseObj->implementsHasInstance() ? baseObj->hasInstance(exec, r[value].jsValue(exec)) : false);
    16081608
    16091609        ++vPC;
     
    16181618        int dst = (++vPC)->u.operand;
    16191619        int src = (++vPC)->u.operand;
    1620         r[dst] = jsTypeStringForValue(exec, r[src].jsValue());
     1620        r[dst] = jsTypeStringForValue(exec, r[src].jsValue(exec));
    16211621
    16221622        ++vPC;
     
    16361636        int base = (++vPC)->u.operand;
    16371637
    1638         JSValue* baseVal = r[base].jsValue();
     1638        JSValue* baseVal = r[base].jsValue(exec);
    16391639        if (isNotObject(exec, false, codeBlock, vPC, baseVal, exceptionValue))
    16401640            goto vm_throw;
     
    16421642        JSObject* baseObj = static_cast<JSObject*>(baseVal);
    16431643
    1644         JSValue* propName = r[property].jsValue();
     1644        JSValue* propName = r[property].jsValue(exec);
    16451645
    16461646        uint32_t i;
     
    17251725        ASSERT((*iter)->isVariableObject());
    17261726        JSVariableObject* scope = static_cast<JSVariableObject*>(*iter);
    1727         scope->registerAt(index) = r[value].jsValue();
     1727        scope->registerAt(index) = r[value].jsValue(exec);
    17281728        ++vPC;
    17291729        NEXT_OPCODE;
     
    17931793
    17941794        Identifier& ident = codeBlock->identifiers[property];
    1795         JSValue *result = r[base].jsValue()->get(exec, ident);
     1795        JSValue *result = r[base].jsValue(exec)->get(exec, ident);
    17961796        VM_CHECK_EXCEPTION();
    17971797        r[dst] = result;
     
    18131813
    18141814        Identifier& ident = codeBlock->identifiers[property];
    1815         r[base].jsValue()->put(exec, ident, r[value].jsValue());
     1815        r[base].jsValue(exec)->put(exec, ident, r[value].jsValue(exec));
    18161816
    18171817        VM_CHECK_EXCEPTION();
     
    18311831        int property = (++vPC)->u.operand;
    18321832
    1833         JSObject* baseObj = r[base].jsValue()->toObject(exec);
     1833        JSObject* baseObj = r[base].jsValue(exec)->toObject(exec);
    18341834
    18351835        Identifier& ident = codeBlock->identifiers[property];
     
    18521852        int property = (++vPC)->u.operand;
    18531853
    1854         JSValue* baseValue = r[base].jsValue();
    1855         JSValue* subscript = r[property].jsValue();
     1854        JSValue* baseValue = r[base].jsValue(exec);
     1855        JSValue* subscript = r[property].jsValue(exec);
    18561856
    18571857        JSValue* result;
     
    18951895        int value = (++vPC)->u.operand;
    18961896
    1897         JSValue* baseValue = r[base].jsValue();
    1898         JSValue* subscript = r[property].jsValue();
     1897        JSValue* baseValue = r[base].jsValue(exec);
     1898        JSValue* subscript = r[property].jsValue(exec);
    18991899
    19001900        unsigned i;
     
    19051905                JSArray* jsArray = static_cast<JSArray*>(baseValue);
    19061906                if (jsArray->canSetIndex(i))
    1907                     jsArray->setIndex(i, r[value].jsValue());
     1907                    jsArray->setIndex(i, r[value].jsValue(exec));
    19081908                else
    1909                     jsArray->JSArray::put(exec, i, r[value].jsValue());
     1909                    jsArray->JSArray::put(exec, i, r[value].jsValue(exec));
    19101910            } else
    1911                 baseValue->put(exec, i, r[value].jsValue());
     1911                baseValue->put(exec, i, r[value].jsValue(exec));
    19121912        } else {
    19131913            Identifier property(exec, subscript->toString(exec));
    19141914            if (!exec->hadException()) // Don't put to an object if toString threw an exception.
    1915                 baseValue->put(exec, property, r[value].jsValue());
     1915                baseValue->put(exec, property, r[value].jsValue(exec));
    19161916        }
    19171917
     
    19321932        int property = (++vPC)->u.operand;
    19331933
    1934         JSObject* baseObj = r[base].jsValue()->toObject(exec); // may throw
    1935 
    1936         JSValue* subscript = r[property].jsValue();
     1934        JSObject* baseObj = r[base].jsValue(exec)->toObject(exec); // may throw
     1935
     1936        JSValue* subscript = r[property].jsValue(exec);
    19371937        JSValue* result;
    19381938        uint32_t i;
     
    19671967        int value = (++vPC)->u.operand;
    19681968
    1969         r[base].jsValue()->put(exec, property, r[value].jsValue());
     1969        r[base].jsValue(exec)->put(exec, property, r[value].jsValue(exec));
    19701970
    19711971        ++vPC;
     
    20142014        int cond = (++vPC)->u.operand;
    20152015        int target = (++vPC)->u.operand;
    2016         if (r[cond].jsValue()->toBoolean(exec)) {
     2016        if (r[cond].jsValue(exec)->toBoolean(exec)) {
    20172017            vPC += target;
    20182018            CHECK_FOR_TIMEOUT();
     
    20312031        int cond = (++vPC)->u.operand;
    20322032        int target = (++vPC)->u.operand;
    2033         if (r[cond].jsValue()->toBoolean(exec)) {
     2033        if (r[cond].jsValue(exec)->toBoolean(exec)) {
    20342034            vPC += target;
    20352035            NEXT_OPCODE;
     
    20472047        int cond = (++vPC)->u.operand;
    20482048        int target = (++vPC)->u.operand;
    2049         if (!r[cond].jsValue()->toBoolean(exec)) {
     2049        if (!r[cond].jsValue(exec)->toBoolean(exec)) {
    20502050            vPC += target;
    20512051            NEXT_OPCODE;
     
    20662066           the JS timeout is reached.
    20672067         */
    2068         JSValue* src1 = r[(++vPC)->u.operand].jsValue();
    2069         JSValue* src2 = r[(++vPC)->u.operand].jsValue();
     2068        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
     2069        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
    20702070        int target = (++vPC)->u.operand;
    20712071       
     
    20902090           result of the comparison is true.
    20912091        */
    2092         JSValue* src1 = r[(++vPC)->u.operand].jsValue();
    2093         JSValue* src2 = r[(++vPC)->u.operand].jsValue();
     2092        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
     2093        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
    20942094        int target = (++vPC)->u.operand;
    20952095
     
    21132113           result of the comparison is false.
    21142114        */
    2115         JSValue* src1 = r[(++vPC)->u.operand].jsValue();
    2116         JSValue* src2 = r[(++vPC)->u.operand].jsValue();
     2115        JSValue* src1 = r[(++vPC)->u.operand].jsValue(exec);
     2116        JSValue* src2 = r[(++vPC)->u.operand].jsValue(exec);
    21172117        int target = (++vPC)->u.operand;
    21182118
     
    21782178        int argCount = (++vPC)->u.operand;
    21792179
    2180         JSValue* funcVal = r[func].jsValue();
    2181         JSValue* baseVal = r[thisVal].jsValue();
     2180        JSValue* funcVal = r[func].jsValue(exec);
     2181        JSValue* baseVal = r[thisVal].jsValue(exec);
    21822182
    21832183        if (baseVal == scopeChain->globalObject() && funcVal == scopeChain->globalObject()->evalFunction()) {
    2184             JSObject* thisObject = static_cast<JSObject*>(r[codeBlock->thisRegister].jsValue());
     2184            JSObject* thisObject = static_cast<JSObject*>(r[codeBlock->thisRegister].jsValue(exec));
    21852185            JSValue* result = callEval(exec, thisObject, scopeChain, registerFile, r, firstArg, argCount, exceptionValue);
    21862186            if (exceptionValue)
     
    22502250        int argCount = (++vPC)->u.operand;
    22512251
    2252         JSValue* v = r[func].jsValue();
     2252        JSValue* v = r[func].jsValue(exec);
    22532253
    22542254        CallData callData;
     
    22632263            CodeBlock* newCodeBlock = &functionBodyNode->byteCode(callDataScopeChain);
    22642264
    2265             r[firstArg] = thisVal == missingThisObjectMarker() ? exec->globalThisValue() : r[thisVal].jsValue();
     2265            r[firstArg] = thisVal == missingThisObjectMarker() ? exec->globalThisValue() : r[thisVal].jsValue(exec);
    22662266
    22672267            Register* callFrame = r + firstArg - RegisterFile::CallFrameHeaderSize;
     
    22892289                (*enabledProfilerReference)->willExecute(exec, static_cast<JSObject*>(v));
    22902290
    2291             JSValue* thisValue = thisVal == missingThisObjectMarker() ? exec->globalThisValue() : r[thisVal].jsValue();
     2291            JSValue* thisValue = thisVal == missingThisObjectMarker() ? exec->globalThisValue() : r[thisVal].jsValue(exec);
    22922292            ArgList args(r + firstArg + 1, argCount - 1);
    22932293
     
    23222322
    23232323        Register* callFrame = r - codeBlock->numLocals - RegisterFile::CallFrameHeaderSize;
    2324         if (JSActivation* activation = static_cast<JSActivation*>(callFrame[RegisterFile::OptionalCalleeActivation].jsValue())) {
     2324        if (JSActivation* activation = static_cast<JSActivation*>(callFrame[RegisterFile::OptionalCalleeActivation].jsValue(exec))) {
    23252325            ASSERT(!codeBlock->needsFullScopeChain || scopeChain->object == activation);
    23262326            ASSERT(activation->isActivationObject());
     
    23292329
    23302330        if (*enabledProfilerReference)
    2331             (*enabledProfilerReference)->didExecute(exec, static_cast<JSObject*>(callFrame[RegisterFile::Callee].jsValue()));
     2331            (*enabledProfilerReference)->didExecute(exec, static_cast<JSObject*>(callFrame[RegisterFile::Callee].jsValue(exec)));
    23322332
    23332333        if (codeBlock->needsFullScopeChain)
    23342334            scopeChain->deref();
    23352335
    2336         JSValue* returnValue = r[result].jsValue();
     2336        JSValue* returnValue = r[result].jsValue(exec);
    23372337        if (callFrame[RegisterFile::CalledAsConstructor].i() && !returnValue->isObject()) {
    2338             JSValue* thisObject = callFrame[RegisterFile::CallFrameHeaderSize].jsValue();
     2338            JSValue* thisObject = callFrame[RegisterFile::CallFrameHeaderSize].jsValue(exec);
    23392339            returnValue = thisObject;
    23402340        }
     
    23702370        int argCount = (++vPC)->u.operand;
    23712371
    2372         JSValue* constrVal = r[constr].jsValue();
     2372        JSValue* constrVal = r[constr].jsValue(exec);
    23732373
    23742374        ConstructData constructData;
     
    24412441        */
    24422442        int scope = (++vPC)->u.operand;
    2443         JSValue* v = r[scope].jsValue();
     2443        JSValue* v = r[scope].jsValue(exec);
    24442444        JSObject* o = v->toObject(exec);
    24452445        VM_CHECK_EXCEPTION();
     
    24712471        int base = (++vPC)->u.operand;
    24722472
    2473         r[dst] = JSPropertyNameIterator::create(exec, r[base].jsValue());
     2473        r[dst] = JSPropertyNameIterator::create(exec, r[base].jsValue(exec));
    24742474        ++vPC;
    24752475        NEXT_OPCODE;
     
    25462546
    25472547        int ex = (++vPC)->u.operand;
    2548         exceptionValue = r[ex].jsValue();
     2548        exceptionValue = r[ex].jsValue(exec);
    25492549
    25502550        handlerVPC = throwException(exec, exceptionValue, vPC, codeBlock, k, scopeChain, r, true);
     
    25782578        int message = (++vPC)->u.operand;
    25792579
    2580         r[dst] = Error::create(exec, (ErrorType)type, k[message].toString(exec), codeBlock->lineNumberForVPC(vPC), codeBlock->ownerNode->sourceId(), codeBlock->ownerNode->sourceURL());
     2580        r[dst] = Error::create(exec, (ErrorType)type, k[message].jsValue(exec)->toString(exec), codeBlock->lineNumberForVPC(vPC), codeBlock->ownerNode->sourceId(), codeBlock->ownerNode->sourceURL());
    25812581
    25822582        ++vPC;
     
    25952595        }
    25962596        int result = (++vPC)->u.operand;
    2597         return r[result].jsValue();
     2597        return r[result].jsValue(exec);
    25982598    }
    25992599    BEGIN_OPCODE(op_put_getter) {
     
    26122612        int function = (++vPC)->u.operand;
    26132613
    2614         ASSERT(r[base].jsValue()->isObject());
    2615         JSObject* baseObj = static_cast<JSObject*>(r[base].jsValue());
     2614        ASSERT(r[base].jsValue(exec)->isObject());
     2615        JSObject* baseObj = static_cast<JSObject*>(r[base].jsValue(exec));
    26162616        Identifier& ident = codeBlock->identifiers[property];
    2617         ASSERT(r[function].jsValue()->isObject());
    2618         baseObj->defineGetter(exec, ident, static_cast<JSObject*>(r[function].jsValue()));
     2617        ASSERT(r[function].jsValue(exec)->isObject());
     2618        baseObj->defineGetter(exec, ident, static_cast<JSObject*>(r[function].jsValue(exec)));
    26192619
    26202620        ++vPC;
     
    26362636        int function = (++vPC)->u.operand;
    26372637
    2638         ASSERT(r[base].jsValue()->isObject());
    2639         JSObject* baseObj = static_cast<JSObject*>(r[base].jsValue());
     2638        ASSERT(r[base].jsValue(exec)->isObject());
     2639        JSObject* baseObj = static_cast<JSObject*>(r[base].jsValue(exec));
    26402640        Identifier& ident = codeBlock->identifiers[property];
    2641         ASSERT(r[function].jsValue()->isObject());
    2642         baseObj->defineSetter(exec, ident, static_cast<JSObject*>(r[function].jsValue()));
     2641        ASSERT(r[function].jsValue(exec)->isObject());
     2642        baseObj->defineSetter(exec, ident, static_cast<JSObject*>(r[function].jsValue(exec)));
    26432643
    26442644        ++vPC;
     
    27082708        return jsNull();
    27092709
    2710     JSActivation* activation = static_cast<JSActivation*>(callFrame[RegisterFile::OptionalCalleeActivation].jsValue());
     2710    JSActivation* activation = static_cast<JSActivation*>(callFrame[RegisterFile::OptionalCalleeActivation].jsValue(exec));
    27112711    if (!activation) {
    27122712        CodeBlock* codeBlock = &function->m_body->generatedByteCode();
     
    27292729
    27302730    Register* callerCallFrame = callFrame[RegisterFile::CallerRegisters].r() - callerCodeBlock->numLocals - RegisterFile::CallFrameHeaderSize;
    2731     if (JSValue* caller = callerCallFrame[RegisterFile::Callee].jsValue())
     2731    if (JSValue* caller = callerCallFrame[RegisterFile::Callee].jsValue(exec))
    27322732        return caller;
    27332733
     
    27472747        }
    27482748
    2749         if (callFrame[RegisterFile::Callee].jsValue() == function)
     2749        if (callFrame[RegisterFile::Callee].jsValue(exec) == function)
    27502750            return callFrame;
    27512751
     
    27622762void Machine::getArgumentsData(Register* callFrame, JSFunction*& function, Register*& argv, int& argc)
    27632763{
    2764     function = static_cast<JSFunction*>(callFrame[RegisterFile::Callee].jsValue());
     2764    function = static_cast<JSFunction*>(callFrame[RegisterFile::Callee].getJSValue());
    27652765    ASSERT(function->inherits(&JSFunction::info));
    27662766
Note: See TracChangeset for help on using the changeset viewer.