Show
Ignore:
Timestamp:
07/18/08 14:43:08 (2 years ago)
Author:
mbensi
Message:

merge with webkit revision 35231

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/JavaScriptCore/VM/Machine.cpp

    r387 r402  
    215215            if (exceptionValue) 
    216216                return false; 
    217             r[dst].u.jsValue = result; 
     217            r[dst] = result; 
    218218            return true; 
    219219        } 
     
    245245            if (exceptionValue) 
    246246                return false; 
    247             r[dst].u.jsValue = result; 
     247            r[dst] = result; 
    248248            return true; 
    249249        } 
     
    270270        base = *iter; 
    271271        if (next == end || base->getPropertySlot(exec, ident, slot)) { 
    272             r[dst].u.jsValue = base; 
     272            r[dst] = base; 
    273273            return; 
    274274        } 
     
    301301            if (exceptionValue) 
    302302                return false; 
    303             r[propDst].u.jsValue = result; 
    304             r[baseDst].u.jsValue = base; 
     303            r[propDst] = result; 
     304            r[baseDst] = base; 
    305305            return true; 
    306306        } 
     
    344344                return false; 
    345345 
    346             r[baseDst].u.jsValue = thisObj; 
    347             r[funcDst].u.jsValue = result; 
     346            r[baseDst] = thisObj; 
     347            r[funcDst] = result; 
    348348            return true; 
    349349        } 
     
    355355} 
    356356 
    357 ALWAYS_INLINE void initializeCallFrame(Register* callFrame, CodeBlock* codeBlock, Instruction* vPC, ScopeChainNode* scopeChain, Register* r, int returnValueRegister, int argv, int argc, int calledAsConstructor, JSValue* function) 
    358 { 
    359     callFrame[RegisterFile::CallerCodeBlock].u.codeBlock = codeBlock; 
    360     callFrame[RegisterFile::ReturnVPC].u.vPC = vPC + 1; 
    361     callFrame[RegisterFile::CallerScopeChain].u.scopeChain = scopeChain; 
    362     callFrame[RegisterFile::CallerRegisters].u.r = r; 
    363     callFrame[RegisterFile::ReturnValueRegister].u.i = returnValueRegister; 
    364     callFrame[RegisterFile::ArgumentStartRegister].u.i = argv; // original argument vector (for the sake of the "arguments" object) 
    365     callFrame[RegisterFile::ArgumentCount].u.i = argc; // original argument count (for the sake of the "arguments" object) 
    366     callFrame[RegisterFile::CalledAsConstructor].u.i = calledAsConstructor; 
    367     callFrame[RegisterFile::Callee].u.jsValue = function; 
    368     callFrame[RegisterFile::OptionalCalleeActivation].u.jsValue = 0
     357ALWAYS_INLINE void Machine::initializeCallFrame(Register* callFrame, CodeBlock* codeBlock, Instruction* vPC, ScopeChainNode* scopeChain, Register* r, int returnValueRegister, int argv, int argc, int calledAsConstructor, JSValue* function) 
     358{ 
     359    callFrame[RegisterFile::CallerCodeBlock] = codeBlock; 
     360    callFrame[RegisterFile::ReturnVPC] = vPC + 1; 
     361    callFrame[RegisterFile::CallerScopeChain] = scopeChain; 
     362    callFrame[RegisterFile::CallerRegisters] = r; 
     363    callFrame[RegisterFile::ReturnValueRegister] = returnValueRegister; 
     364    callFrame[RegisterFile::ArgumentStartRegister] = argv; // original argument vector (for the sake of the "arguments" object) 
     365    callFrame[RegisterFile::ArgumentCount] = argc; // original argument count (for the sake of the "arguments" object) 
     366    callFrame[RegisterFile::CalledAsConstructor] = calledAsConstructor; 
     367    callFrame[RegisterFile::Callee] = function; 
     368    callFrame[RegisterFile::OptionalCalleeActivation] = intptr_t(0L)
    369369} 
    370370 
     
    390390        Register* endOfParams = r - newCodeBlock->numVars; 
    391391        for (Register* it = endOfParams - omittedArgCount; it != endOfParams; ++it) 
    392             (*it).u.jsValue = jsUndefined(); 
     392            (*it) = jsUndefined(); 
    393393    } else { // too many arguments -- copy return info and expected arguments, leaving the extra arguments behind 
    394394        int shift = argc + RegisterFile::CallFrameHeaderSize; 
     
    410410    // initialize local variable slots 
    411411    for (Register* it = r - newCodeBlock->numVars; it != r; ++it) 
    412         (*it).u.jsValue = jsUndefined(); 
     412        (*it) = jsUndefined(); 
    413413 
    414414    return r; 
     
    419419    if (newCodeBlock->needsFullScopeChain) { 
    420420        JSActivation* activation = new (exec) JSActivation(functionBodyNode, r); 
    421         r[RegisterFile::OptionalCalleeActivation - RegisterFile::CallFrameHeaderSize - newCodeBlock->numLocals].u.jsValue = activation; 
     421        r[RegisterFile::OptionalCalleeActivation - RegisterFile::CallFrameHeaderSize - newCodeBlock->numLocals] = activation; 
    422422 
    423423        return callDataScopeChain->copy()->push(activation); 
     
    435435} 
    436436 
    437 NEVER_INLINE JSValue* callEval(ExecState* exec, JSObject* thisObj, ScopeChainNode* scopeChain, RegisterFile* registerFile, Register* r, int argv, int argc, JSValue*& exceptionValue) 
     437NEVER_INLINE JSValue* Machine::callEval(ExecState* exec, JSObject* thisObj, ScopeChainNode* scopeChain, RegisterFile* registerFile, Register* r, int argv, int argc, JSValue*& exceptionValue) 
    438438{ 
    439439    if (argc < 2) 
    440440        return jsUndefined(); 
    441441 
    442     JSValue* program = r[argv + 1].u.jsValue
     442    JSValue* program = r[argv + 1].jsValue()
    443443 
    444444    if (!program->isString()) 
     
    515515        end = it + registerFile->numGlobals(); 
    516516        while (it != end) { 
    517             printf("[global var]               | %10p | %10p \n", it, (*it).u.jsValue); 
     517            printf("[global var]               | %10p | %10p \n", it, (*it).jsValue()); 
    518518            ++it; 
    519519        } 
     
    522522     
    523523    it = r - codeBlock->numLocals - RegisterFile::CallFrameHeaderSize; 
    524     printf("[CallerCodeBlock]          | %10p | %10p \n", it, (*it).u.jsValue); ++it; 
    525     printf("[ReturnVPC]                | %10p | %10p \n", it, (*it).u.jsValue); ++it; 
    526     printf("[CallerScopeChain]         | %10p | %10p \n", it, (*it).u.jsValue); ++it; 
    527     printf("[CallerRegisterOffset]     | %10p | %10p \n", it, (*it).u.jsValue); ++it; 
    528     printf("[ReturnValueRegister]      | %10p | %10p \n", it, (*it).u.jsValue); ++it; 
    529     printf("[ArgumentStartRegister]    | %10p | %10p \n", it, (*it).u.jsValue); ++it; 
    530     printf("[ArgumentCount]            | %10p | %10p \n", it, (*it).u.jsValue); ++it; 
    531     printf("[CalledAsConstructor]      | %10p | %10p \n", it, (*it).u.jsValue); ++it; 
    532     printf("[Callee]                   | %10p | %10p \n", it, (*it).u.jsValue); ++it; 
    533     printf("[OptionalCalleeActivation] | %10p | %10p \n", it, (*it).u.jsValue); ++it; 
     524    printf("[CallerCodeBlock]          | %10p | %10p \n", it, (*it).jsValue()); ++it; 
     525    printf("[ReturnVPC]                | %10p | %10p \n", it, (*it).jsValue()); ++it; 
     526    printf("[CallerScopeChain]         | %10p | %10p \n", it, (*it).jsValue()); ++it; 
     527    printf("[CallerRegisterOffset]     | %10p | %10p \n", it, (*it).jsValue()); ++it; 
     528    printf("[ReturnValueRegister]      | %10p | %10p \n", it, (*it).jsValue()); ++it; 
     529    printf("[ArgumentStartRegister]    | %10p | %10p \n", it, (*it).jsValue()); ++it; 
     530    printf("[ArgumentCount]            | %10p | %10p \n", it, (*it).jsValue()); ++it; 
     531    printf("[CalledAsConstructor]      | %10p | %10p \n", it, (*it).jsValue()); ++it; 
     532    printf("[Callee]                   | %10p | %10p \n", it, (*it).jsValue()); ++it; 
     533    printf("[OptionalCalleeActivation] | %10p | %10p \n", it, (*it).jsValue()); ++it; 
    534534    printf("----------------------------------------------------\n"); 
    535535 
    536     printf("[this]                     | %10p | %10p \n", it, (*it).u.jsValue); ++it; 
     536    printf("[this]                     | %10p | %10p \n", it, (*it).jsValue()); ++it; 
    537537    end = it + max(codeBlock->numParameters - 1, 0); // - 1 to skip "this" 
    538538    if (it != end) { 
    539539        do { 
    540             printf("[param]                    | %10p | %10p \n", it, (*it).u.jsValue); 
     540            printf("[param]                    | %10p | %10p \n", it, (*it).jsValue()); 
    541541            ++it; 
    542542        } while (it != end); 
     
    548548        if (it != end) { 
    549549            do { 
    550                 printf("[var]                      | %10p | %10p \n", it, (*it).u.jsValue); 
     550                printf("[var]                      | %10p | %10p \n", it, (*it).jsValue()); 
    551551                ++it; 
    552552            } while (it != end); 
     
    558558    if (it != end) { 
    559559        do { 
    560             printf("[temp]                     | %10p | %10p \n", it, (*it).u.jsValue); 
     560            printf("[temp]                     | %10p | %10p \n", it, (*it).jsValue()); 
    561561            ++it; 
    562562        } while (it != end); 
     
    575575} 
    576576 
    577 NEVER_INLINE bool Machine::unwindCallFrame(ExecState* exec, JSValue* exceptionValue, const Instruction*& vPC, CodeBlock*& codeBlock, JSValue**& k, ScopeChainNode*& scopeChain, Register*& r) 
     577NEVER_INLINE bool Machine::unwindCallFrame(ExecState* exec, JSValue* exceptionValue, const Instruction*& vPC, CodeBlock*& codeBlock, Register*& k, ScopeChainNode*& scopeChain, Register*& r) 
    578578{ 
    579579    CodeBlock* oldCodeBlock = codeBlock; 
     
    582582    if (Debugger* debugger = exec->dynamicGlobalObject()->debugger()) { 
    583583        DebuggerCallFrame debuggerCallFrame(exec->dynamicGlobalObject(), codeBlock, scopeChain, r, exceptionValue); 
    584         if (callFrame[RegisterFile::Callee].u.jsObject
     584        if (callFrame[RegisterFile::Callee].jsValue()
    585585            debugger->returnEvent(debuggerCallFrame, codeBlock->ownerNode->sourceId(), codeBlock->ownerNode->lastLine()); 
    586586        else 
     
    589589 
    590590    if (Profiler* profiler = *Profiler::enabledProfilerReference()) { 
    591         if (callFrame[RegisterFile::Callee].u.jsObject
    592             profiler->didExecute(exec, callFrame[RegisterFile::Callee].u.jsObject); 
     591        if (callFrame[RegisterFile::Callee].jsValue()
     592            profiler->didExecute(exec, static_cast<JSObject*>(callFrame[RegisterFile::Callee].jsValue())); 
    593593        else 
    594594            profiler->didExecute(exec, codeBlock->ownerNode->sourceURL(), codeBlock->ownerNode->lineNo()); 
     
    599599 
    600600    // If this call frame created an activation, tear it off. 
    601     if (JSActivation* activation = static_cast<JSActivation*>(callFrame[RegisterFile::OptionalCalleeActivation].u.jsValue)) { 
     601    if (JSActivation* activation = static_cast<JSActivation*>(callFrame[RegisterFile::OptionalCalleeActivation].jsValue())) { 
    602602        ASSERT(activation->isActivationObject()); 
    603603        activation->copyRegisters(); 
    604604    } 
    605605     
    606     codeBlock = callFrame[RegisterFile::CallerCodeBlock].u.codeBlock
     606    codeBlock = callFrame[RegisterFile::CallerCodeBlock].codeBlock()
    607607    if (!codeBlock) 
    608608        return false; 
    609609 
    610     k = codeBlock->jsValues.data(); 
    611     scopeChain = callFrame[RegisterFile::CallerScopeChain].u.scopeChain
    612     r = callFrame[RegisterFile::CallerRegisters].u.r
     610    k = codeBlock->registers.data(); 
     611    scopeChain = callFrame[RegisterFile::CallerScopeChain].scopeChain()
     612    r = callFrame[RegisterFile::CallerRegisters].r()
    613613    exec->m_callFrame = r - oldCodeBlock->numLocals - RegisterFile::CallFrameHeaderSize; 
    614     vPC = callFrame[RegisterFile::ReturnVPC].u.vPC
     614    vPC = callFrame[RegisterFile::ReturnVPC].vPC()
    615615 
    616616    return true; 
    617617} 
    618618 
    619 NEVER_INLINE Instruction* Machine::throwException(ExecState* exec, JSValue* exceptionValue, const Instruction* vPC, CodeBlock*& codeBlock, JSValue**& k, ScopeChainNode*& scopeChain, Register*& r) 
     619NEVER_INLINE Instruction* Machine::throwException(ExecState* exec, JSValue* exceptionValue, const Instruction* vPC, CodeBlock*& codeBlock, Register*& k, ScopeChainNode*& scopeChain, Register*& r) 
    620620{ 
    621621    // Set up the exception object 
     
    689689 
    690690    Register* r = callFrame + RegisterFile::CallFrameHeaderSize + codeBlock->numVars; 
    691     r[codeBlock->thisRegister].u.jsValue = thisObj; 
     691    r[codeBlock->thisRegister] = thisObj; 
    692692 
    693693    if (codeBlock->needsFullScopeChain) 
     
    737737    // put args in place, including "this" 
    738738    Register* dst = callFrame + RegisterFile::CallFrameHeaderSize; 
    739     (*dst).u.jsValue = thisObj; 
     739    (*dst) = thisObj; 
    740740 
    741741    ArgList::const_iterator end = args.end(); 
    742742    for (ArgList::const_iterator it = args.begin(); it != end; ++it) 
    743         (*++dst).u.jsValue = *it; 
     743        (*++dst) = *it; 
    744744 
    745745    // a 0 codeBlock indicates a built-in caller 
     
    816816 
    817817    Register* r = callFrame + RegisterFile::CallFrameHeaderSize + codeBlock->numVars; 
    818     r[codeBlock->thisRegister].u.jsValue = thisObj; 
     818    r[codeBlock->thisRegister] = thisObj; 
    819819 
    820820    if (codeBlock->needsFullScopeChain) 
     
    978978    Register* registerBase = registerFile->base(); 
    979979    Instruction* vPC = codeBlock->instructions.begin(); 
    980     JSValue** k = codeBlock->jsValues.data(); 
     980    Register* k = codeBlock->registers.data(); 
    981981    Profiler** enabledProfilerReference = Profiler::enabledProfilerReference(); 
    982982    unsigned tickCount = m_ticksUntilNextTimeoutCheck + 1; 
     
    10271027        int dst = (++vPC)->u.operand; 
    10281028        int src = (++vPC)->u.operand; 
    1029         r[dst].u.jsValue = k[src]; 
     1029        r[dst] = k[src]; 
    10301030 
    10311031        ++vPC; 
     
    10391039        */ 
    10401040        int dst = (++vPC)->u.operand; 
    1041         r[dst].u.jsValue = constructEmptyObject(exec); 
     1041        r[dst] = constructEmptyObject(exec); 
    10421042 
    10431043        ++vPC; 
     
    10551055        int firstArg = (++vPC)->u.operand; 
    10561056        int argCount = (++vPC)->u.operand; 
    1057         ArgList args(reinterpret_cast<JSValue**>(r) + firstArg, argCount); 
    1058         r[dst].u.jsValue = constructArray(exec, args); 
     1057        ArgList args(r + firstArg, argCount); 
     1058        r[dst] = constructArray(exec, args); 
    10591059 
    10601060        ++vPC; 
     
    10701070        int dst = (++vPC)->u.operand; 
    10711071        int regExp = (++vPC)->u.operand; 
    1072         r[dst].u.jsValue = new (exec) RegExpObject(scopeChain->globalObject()->regExpPrototype(), codeBlock->regexps[regExp]); 
     1072        r[dst] = new (exec) RegExpObject(scopeChain->globalObject()->regExpPrototype(), codeBlock->regexps[regExp]); 
    10731073 
    10741074        ++vPC; 
     
    10941094           as a boolean in register dst. 
    10951095        */ 
    1096         JSValue*& dst = r[(++vPC)->u.operand].u.jsValue; 
    1097         JSValue* src1 = r[(++vPC)->u.operand].u.jsValue; 
    1098         JSValue* src2 = r[(++vPC)->u.operand].u.jsValue; 
    1099         JSValue* result; 
     1096        int dst = (++vPC)->u.operand; 
     1097        JSValue* src1 = r[(++vPC)->u.operand].jsValue(); 
     1098        JSValue* src2 = r[(++vPC)->u.operand].jsValue(); 
    11001099        if (JSImmediate::areBothImmediateNumbers(src1, src2)) 
    1101             result = jsBoolean(reinterpret_cast<intptr_t>(src1) == reinterpret_cast<intptr_t>(src2)); 
     1100            r[dst] = jsBoolean(reinterpret_cast<intptr_t>(src1) == reinterpret_cast<intptr_t>(src2)); 
    11021101        else { 
    1103             result = jsBoolean(equal(exec, src1, src2)); 
     1102            JSValue* result = jsBoolean(equal(exec, src1, src2)); 
    11041103            VM_CHECK_EXCEPTION(); 
    1105         } 
    1106         dst = result; 
     1104            r[dst] = result; 
     1105        } 
    11071106 
    11081107        ++vPC; 
     
    11161115           result as a boolean in register dst. 
    11171116        */ 
    1118         JSValue*& dst = r[(++vPC)->u.operand].u.jsValue; 
    1119         JSValue* src1 = r[(++vPC)->u.operand].u.jsValue; 
    1120         JSValue* src2 = r[(++vPC)->u.operand].u.jsValue; 
    1121         JSValue* result; 
     1117        int dst = (++vPC)->u.operand; 
     1118        JSValue* src1 = r[(++vPC)->u.operand].jsValue(); 
     1119        JSValue* src2 = r[(++vPC)->u.operand].jsValue(); 
    11221120        if (JSImmediate::areBothImmediateNumbers(src1, src2)) 
    1123             result = jsBoolean(reinterpret_cast<intptr_t>(src1) != reinterpret_cast<intptr_t>(src2)); 
     1121            r[dst] = jsBoolean(reinterpret_cast<intptr_t>(src1) != reinterpret_cast<intptr_t>(src2)); 
    11241122        else { 
    1125             result = jsBoolean(!equal(exec, src1, src2)); 
     1123            JSValue* result = jsBoolean(!equal(exec, src1, src2)); 
    11261124            VM_CHECK_EXCEPTION(); 
    1127         } 
    1128         dst = result; 
     1125            r[dst] = result; 
     1126        } 
    11291127 
    11301128        ++vPC; 
     
    11381136           result as a boolean in register dst. 
    11391137        */ 
    1140         JSValue*& dst = r[(++vPC)->u.operand].u.jsValue
    1141         JSValue* src1 = r[(++vPC)->u.operand].u.jsValue
    1142         JSValue* src2 = r[(++vPC)->u.operand].u.jsValue
     1138        int dst = (++vPC)->u.operand
     1139        JSValue* src1 = r[(++vPC)->u.operand].jsValue()
     1140        JSValue* src2 = r[(++vPC)->u.operand].jsValue()
    11431141        if (JSImmediate::areBothImmediateNumbers(src1, src2)) 
    1144             dst = jsBoolean(reinterpret_cast<intptr_t>(src1) == reinterpret_cast<intptr_t>(src2)); 
     1142            r[dst] = jsBoolean(reinterpret_cast<intptr_t>(src1) == reinterpret_cast<intptr_t>(src2)); 
    11451143        else 
    1146             dst = jsBoolean(strictEqual(src1, src2)); 
     1144            r[dst] = jsBoolean(strictEqual(src1, src2)); 
    11471145 
    11481146        ++vPC; 
     
    11561154           puts the result as a boolean in register dst. 
    11571155        */ 
    1158         JSValue*& dst = r[(++vPC)->u.operand].u.jsValue
    1159         JSValue* src1 = r[(++vPC)->u.operand].u.jsValue
    1160         JSValue* src2 = r[(++vPC)->u.operand].u.jsValue
     1156        int dst = (++vPC)->u.operand
     1157        JSValue* src1 = r[(++vPC)->u.operand].jsValue()
     1158        JSValue* src2 = r[(++vPC)->u.operand].jsValue()
    11611159        if (JSImmediate::areBothImmediateNumbers(src1, src2)) 
    1162             dst = jsBoolean(reinterpret_cast<intptr_t>(src1) != reinterpret_cast<intptr_t>(src2)); 
     1160            r[dst] = jsBoolean(reinterpret_cast<intptr_t>(src1) != reinterpret_cast<intptr_t>(src2)); 
    11631161        else 
    1164             dst = jsBoolean(!strictEqual(src1, src2)); 
     1162            r[dst] = jsBoolean(!strictEqual(src1, src2)); 
    11651163 
    11661164        ++vPC; 
     
    11741172           a boolean in register dst. 
    11751173        */ 
    1176         JSValue*& dst = r[(++vPC)->u.operand].u.jsValue
    1177         JSValue* src1 = r[(++vPC)->u.operand].u.jsValue
    1178         JSValue* src2 = r[(++vPC)->u.operand].u.jsValue
     1174        int dst = (++vPC)->u.operand
     1175        JSValue* src1 = r[(++vPC)->u.operand].jsValue()
     1176        JSValue* src2 = r[(++vPC)->u.operand].jsValue()
    11791177        JSValue* result = jsBoolean(jsLess(exec, src1, src2)); 
    11801178        VM_CHECK_EXCEPTION(); 
    1181         dst = result; 
     1179        r[dst] = result; 
    11821180 
    11831181        ++vPC; 
     
    11911189           puts the result as a boolean in register dst. 
    11921190        */ 
    1193         JSValue*& dst = r[(++vPC)->u.operand].u.jsValue
    1194         JSValue* src1 = r[(++vPC)->u.operand].u.jsValue
    1195         JSValue* src2 = r[(++vPC)->u.operand].u.jsValue
     1191        int dst = (++vPC)->u.operand
     1192        JSValue* src1 = r[(++vPC)->u.operand].jsValue()
     1193        JSValue* src2 = r[(++vPC)->u.operand].jsValue()
    11961194        JSValue* result = jsBoolean(jsLessEq(exec, src1, src2)); 
    11971195        VM_CHECK_EXCEPTION(); 
    1198         dst = result; 
     1196        r[dst] = result; 
    11991197 
    12001198        ++vPC; 
     
    12081206        */ 
    12091207        int srcDst = (++vPC)->u.operand; 
    1210         JSValue* v = r[srcDst].u.jsValue; 
    1211         JSValue* result; 
     1208        JSValue* v = r[srcDst].jsValue(); 
    12121209        if (JSImmediate::canDoFastAdditiveOperations(v)) 
    1213             result = JSImmediate::incImmediateNumber(v); 
    1214         else 
    1215             result = jsNumber(exec, v->toNumber(exec) + 1); 
    1216         VM_CHECK_EXCEPTION(); 
    1217         r[srcDst].u.jsValue = result; 
     1210            r[srcDst] = JSImmediate::incImmediateNumber(v); 
     1211        else { 
     1212            JSValue* result = jsNumber(exec, v->toNumber(exec) + 1); 
     1213            VM_CHECK_EXCEPTION(); 
     1214            r[srcDst] = result; 
     1215        } 
    12181216 
    12191217        ++vPC; 
     
    12271225        */ 
    12281226        int srcDst = (++vPC)->u.operand; 
    1229         JSValue* v = r[srcDst].u.jsValue; 
    1230         JSValue* result; 
     1227        JSValue* v = r[srcDst].jsValue(); 
    12311228        if (JSImmediate::canDoFastAdditiveOperations(v)) 
    1232             result = JSImmediate::decImmediateNumber(v); 
    1233         else 
    1234             result = jsNumber(exec, v->toNumber(exec) - 1); 
    1235         VM_CHECK_EXCEPTION(); 
    1236         r[srcDst].u.jsValue = result; 
     1229            r[srcDst] = JSImmediate::decImmediateNumber(v); 
     1230        else { 
     1231            JSValue* result = jsNumber(exec, v->toNumber(exec) - 1); 
     1232            VM_CHECK_EXCEPTION(); 
     1233            r[srcDst] = result; 
     1234        } 
    12371235 
    12381236        ++vPC; 
     
    12481246        int dst = (++vPC)->u.operand; 
    12491247        int srcDst = (++vPC)->u.operand; 
    1250         JSValue* v = r[srcDst].u.jsValue; 
    1251         JSValue* result; 
    1252         JSValue* number; 
     1248        JSValue* v = r[srcDst].jsValue(); 
    12531249        if (JSImmediate::canDoFastAdditiveOperations(v)) { 
    1254             number = v; 
    1255             result = JSImmediate::incImmediateNumber(v); 
     1250            r[dst] = v; 
     1251            r[srcDst] = JSImmediate::incImmediateNumber(v); 
    12561252        } else { 
    1257             number = r[srcDst].u.jsValue->toJSNumber(exec); 
    1258             result = jsNumber(exec, number->uncheckedGetNumber() + 1); 
    1259         } 
    1260         VM_CHECK_EXCEPTION(); 
    1261  
    1262         r[dst].u.jsValue = number; 
    1263         r[srcDst].u.jsValue = result; 
     1253            JSValue* number = r[srcDst].jsValue()->toJSNumber(exec); 
     1254            VM_CHECK_EXCEPTION(); 
     1255            r[dst] = number; 
     1256            r[srcDst] = jsNumber(exec, number->uncheckedGetNumber() + 1); 
     1257        } 
    12641258 
    12651259        ++vPC; 
     
    12751269        int dst = (++vPC)->u.operand; 
    12761270        int srcDst = (++vPC)->u.operand; 
    1277         JSValue* v = r[srcDst].u.jsValue; 
    1278         JSValue* result; 
    1279         JSValue* number; 
     1271        JSValue* v = r[srcDst].jsValue(); 
    12801272        if (JSImmediate::canDoFastAdditiveOperations(v)) { 
    1281             number = v; 
    1282             result = JSImmediate::decImmediateNumber(v); 
     1273            r[dst] = v; 
     1274            r[srcDst] = JSImmediate::decImmediateNumber(v); 
    12831275        } else { 
    1284             number = r[srcDst].u.jsValue->toJSNumber(exec); 
    1285             result = jsNumber(exec, number->uncheckedGetNumber() - 1); 
    1286         } 
    1287         VM_CHECK_EXCEPTION(); 
    1288  
    1289         r[dst].u.jsValue = number; 
    1290         r[srcDst].u.jsValue = result; 
     1276            JSValue* number = r[srcDst].jsValue()->toJSNumber(exec); 
     1277            VM_CHECK_EXCEPTION(); 
     1278            r[dst] = number; 
     1279            r[srcDst] = jsNumber(exec, number->uncheckedGetNumber() - 1); 
     1280        } 
    12911281 
    12921282        ++vPC; 
     
    13011291        int dst = (++vPC)->u.operand; 
    13021292        int src = (++vPC)->u.operand; 
    1303         JSValue* result = r[src].u.jsValue->toJSNumber(exec); 
     1293        JSValue* result = r[src].jsValue()->toJSNumber(exec); 
    13041294        VM_CHECK_EXCEPTION(); 
    13051295 
    1306         r[dst].u.jsValue = result; 
     1296        r[dst] = result; 
    13071297 
    13081298        ++vPC; 
     
    13171307        int dst = (++vPC)->u.operand; 
    13181308        int src = (++vPC)->u.operand; 
    1319         JSValue* result = jsNumber(exec, -r[src].u.jsValue->toNumber(exec)); 
     1309        JSValue* result = jsNumber(exec, -r[src].jsValue()->toNumber(exec)); 
    13201310        VM_CHECK_EXCEPTION(); 
    1321         r[dst].u.jsValue = result; 
     1311        r[dst] = result; 
    13221312 
    13231313        ++vPC; 
     
    13311321           numeric add, depending on the types of the operands.) 
    13321322        */ 
    1333         JSValue*& dst = r[(++vPC)->u.operand].u.jsValue; 
    1334         JSValue* src1 = r[(++vPC)->u.operand].u.jsValue; 
    1335         JSValue* src2 = r[(++vPC)->u.operand].u.jsValue; 
    1336         JSValue* result; 
     1323        int dst = (++vPC)->u.operand; 
     1324        JSValue* src1 = r[(++vPC)->u.operand].jsValue(); 
     1325        JSValue* src2 = r[(++vPC)->u.operand].jsValue(); 
    13371326        if (JSImmediate::canDoFastAdditiveOperations(src1) && JSImmediate::canDoFastAdditiveOperations(src2)) 
    1338             result = JSImmediate::addImmediateNumbers(src1, src2); 
     1327            r[dst] = JSImmediate::addImmediateNumbers(src1, src2); 
    13391328        else { 
    1340             result = jsAdd(exec, src1, src2); 
     1329            JSValue* result = jsAdd(exec, src1, src2); 
    13411330            VM_CHECK_EXCEPTION(); 
    1342         } 
    1343         dst = result; 
     1331            r[dst] = result; 
     1332        } 
    13441333        ++vPC; 
    13451334        NEXT_OPCODE; 
     
    13511340           numbers), and puts the product in register dst. 
    13521341        */ 
    1353         JSValue*& dst = r[(++vPC)->u.operand].u.jsValue
    1354         JSValue* src1 = r[(++vPC)->u.operand].u.jsValue
    1355         JSValue* src2 = r[(++vPC)->u.operand].u.jsValue
     1342        int dst = (++vPC)->u.operand
     1343        JSValue* src1 = r[(++vPC)->u.operand].jsValue()
     1344        JSValue* src2 = r[(++vPC)->u.operand].jsValue()
    13561345        JSValue* result = jsNumber(exec, src1->toNumber(exec) * src2->toNumber(exec)); 
    13571346        VM_CHECK_EXCEPTION(); 
    1358         dst = result; 
     1347        r[dst] = result; 
    13591348 
    13601349        ++vPC; 
     
    13711360        int dividend = (++vPC)->u.operand; 
    13721361        int divisor = (++vPC)->u.operand; 
    1373         JSValue* result = jsNumber(exec, r[dividend].u.jsValue->toNumber(exec) / r[divisor].u.jsValue->toNumber(exec)); 
     1362        JSValue* result = jsNumber(exec, r[dividend].jsValue()->toNumber(exec) / r[divisor].jsValue()->toNumber(exec)); 
    13741363        VM_CHECK_EXCEPTION(); 
    1375         r[dst].u.jsValue = result; 
     1364        r[dst] = result; 
    13761365        ++vPC; 
    13771366        NEXT_OPCODE; 
     
    13871376        int dividend = (++vPC)->u.operand; 
    13881377        int divisor = (++vPC)->u.operand; 
    1389         double d = r[dividend].u.jsValue->toNumber(exec); 
    1390         JSValue* result = jsNumber(exec, fmod(d, r[divisor].u.jsValue->toNumber(exec))); 
     1378        double d = r[dividend].jsValue()->toNumber(exec); 
     1379        JSValue* result = jsNumber(exec, fmod(d, r[divisor].jsValue()->toNumber(exec))); 
    13911380        VM_CHECK_EXCEPTION(); 
    1392         r[dst].u.jsValue = result; 
     1381        r[dst] = result; 
    13931382        ++vPC; 
    13941383        NEXT_OPCODE; 
     
    14011390           register dst. 
    14021391        */ 
    1403         JSValue*& dst = r[(++vPC)->u.operand].u.jsValue; 
    1404         JSValue* src1 = r[(++vPC)->u.operand].u.jsValue; 
    1405         JSValue* src2 = r[(++vPC)->u.operand].u.jsValue; 
    1406         JSValue* result; 
     1392        int dst = (++vPC)->u.operand; 
     1393        JSValue* src1 = r[(++vPC)->u.operand].jsValue(); 
     1394        JSValue* src2 = r[(++vPC)->u.operand].jsValue(); 
    14071395        if (JSImmediate::canDoFastAdditiveOperations(src1) && JSImmediate::canDoFastAdditiveOperations(src2)) 
    1408             result = JSImmediate::subImmediateNumbers(src1, src2); 
     1396            r[dst] = JSImmediate::subImmediateNumbers(src1, src2); 
    14091397        else { 
    1410             result = jsNumber(exec, src1->toNumber(exec) - src2->toNumber(exec)); 
     1398            JSValue* result = jsNumber(exec, src1->toNumber(exec) - src2->toNumber(exec)); 
    14111399            VM_CHECK_EXCEPTION(); 
    1412         } 
    1413         dst = result; 
     1400            r[dst] = result; 
     1401        } 
    14141402        ++vPC; 
    14151403        NEXT_OPCODE; 
     
    14221410           in register dst. 
    14231411        */ 
    1424         JSValue*& dst = r[(++vPC)->u.operand].u.jsValue; 
    1425         JSValue* val = r[(++vPC)->u.operand].u.jsValue; 
    1426         JSValue* shift = r[(++vPC)->u.operand].u.jsValue; 
    1427         JSValue* result; 
     1412        int dst = (++vPC)->u.operand; 
     1413        JSValue* val = r[(++vPC)->u.operand].jsValue(); 
     1414        JSValue* shift = r[(++vPC)->u.operand].jsValue(); 
    14281415        if (JSImmediate::areBothImmediateNumbers(val, shift)) 
    1429             result = jsNumber(exec, JSImmediate::getTruncatedInt32(val) << (JSImmediate::toTruncatedUInt32(shift) & 0x1f)); 
     1416            r[dst] = jsNumber(exec, JSImmediate::getTruncatedInt32(val) << (JSImmediate::toTruncatedUInt32(shift) & 0x1f)); 
    14301417        else { 
    1431             result = jsNumber(exec, (val->toInt32(exec)) << (shift->toUInt32(exec) & 0x1f)); 
     1418            JSValue* result = jsNumber(exec, (val->toInt32(exec)) << (shift->toUInt32(exec) & 0x1f)); 
    14321419            VM_CHECK_EXCEPTION(); 
    1433         } 
    1434         dst = result; 
     1420            r[dst] = result; 
     1421        } 
    14351422 
    14361423        ++vPC; 
     
    14441431           uint32), and puts the result in register dst. 
    14451432        */ 
    1446         JSValue*& dst = r[(++vPC)->u.operand].u.jsValue; 
    1447         JSValue* val = r[(++vPC)->u.operand].u.jsValue; 
    1448         JSValue* shift = r[(++vPC)->u.operand].u.jsValue; 
    1449         JSValue* result; 
     1433        int dst = (++vPC)->u.operand; 
     1434        JSValue* val = r[(++vPC)->u.operand].jsValue(); 
     1435        JSValue* shift = r[(++vPC)->u.operand].jsValue(); 
    14501436        if (JSImmediate::areBothImmediateNumbers(val, shift)) 
    1451             result = JSImmediate::rightShiftImmediateNumbers(val, shift); 
     1437            r[dst] = JSImmediate::rightShiftImmediateNumbers(val, shift); 
    14521438        else { 
    1453             result = jsNumber(exec, (val->toInt32(exec)) >> (shift->toUInt32(exec) & 0x1f)); 
     1439            JSValue* result = jsNumber(exec, (val->toInt32(exec)) >> (shift->toUInt32(exec) & 0x1f)); 
    14541440            VM_CHECK_EXCEPTION(); 
    1455         } 
    1456         dst = result; 
     1441            r[dst] = result; 
     1442        } 
    14571443 
    14581444        ++vPC; 
     
    14661452           uint32), and puts the result in register dst. 
    14671453        */ 
    1468         JSValue*& dst = r[(++vPC)->u.operand].u.jsValue; 
    1469         JSValue* val = r[(++vPC)->u.operand].u.jsValue; 
    1470         JSValue* shift = r[(++vPC)->u.operand].u.jsValue; 
    1471         JSValue* result; 
     1454        int dst = (++vPC)->u.operand; 
     1455        JSValue* val = r[(++vPC)->u.operand].jsValue(); 
     1456        JSValue* shift = r[(++vPC)->u.operand].jsValue(); 
    14721457        if (JSImmediate::areBothImmediateNumbers(val, shift) && !JSImmediate::isNegative(val)) 
    1473             result = JSImmediate::rightShiftImmediateNumbers(val, shift); 
     1458            r[dst] = JSImmediate::rightShiftImmediateNumbers(val, shift); 
    14741459        else { 
    1475             result = jsNumber(exec, (val->toUInt32(exec)) >> (shift->toUInt32(exec) & 0x1f)); 
     1460            JSValue* result = jsNumber(exec, (val->toUInt32(exec)) >> (shift->toUInt32(exec) & 0x1f)); 
    14761461            VM_CHECK_EXCEPTION(); 
    1477         } 
    1478         dst = result; 
     1462            r[dst] = result; 
     1463        } 
    14791464 
    14801465        ++vPC; 
     
    14881473           in register dst. 
    14891474        */ 
    1490         JSValue*& dst = r[(++vPC)->u.operand].u.jsValue; 
    1491         JSValue* src1 = r[(++vPC)->u.operand].u.jsValue; 
    1492         JSValue* src2 = r[(++vPC)->u.operand].u.jsValue; 
    1493         JSValue* result; 
     1475        int dst = (++vPC)->u.operand; 
     1476        JSValue* src1 = r[(++vPC)->u.operand].jsValue(); 
     1477        JSValue* src2 = r[(++vPC)->u.operand].jsValue(); 
    14941478        if (JSImmediate::areBothImmediateNumbers(src1, src2)) 
    1495             result = JSImmediate::andImmediateNumbers(src1, src2); 
     1479            r[dst] = JSImmediate::andImmediateNumbers(src1, src2); 
    14961480        else { 
    1497             result = jsNumber(exec, src1->toInt32(exec) & src2->toInt32(exec)); 
     1481            JSValue* result = jsNumber(exec, src1->toInt32(exec) & src2->toInt32(exec)); 
    14981482            VM_CHECK_EXCEPTION(); 
    1499         } 
    1500         dst = result; 
     1483            r[dst] = result; 
     1484        } 
    15011485 
    15021486        ++vPC; 
     
    15101494           in register dst. 
    15111495        */ 
    1512         JSValue*& dst = r[(++vPC)->u.operand].u.jsValue; 
    1513         JSValue* src1 = r[(++vPC)->u.operand].u.jsValue; 
    1514         JSValue* src2 = r[(++vPC)->u.operand].u.jsValue; 
    1515         JSValue* result; 
     1496        int dst = (++vPC)->u.operand; 
     1497        JSValue* src1 = r[(++vPC)->u.operand].jsValue(); 
     1498        JSValue* src2 = r[(++vPC)->u.operand].jsValue(); 
    15161499        if (JSImmediate::areBothImmediateNumbers(src1, src2)) 
    1517             result = JSImmediate::xorImmediateNumbers(src1, src2); 
     1500            r[dst] = JSImmediate::xorImmediateNumbers(src1, src2); 
    15181501        else { 
    1519             result = jsNumber(exec, src1->toInt32(exec) ^ src2->toInt32(exec)); 
     1502            JSValue* result = jsNumber(exec, src1->toInt32(exec) ^ src2->toInt32(exec)); 
    15201503            VM_CHECK_EXCEPTION(); 
    1521         } 
    1522         dst = result; 
     1504            r[dst] = result; 
     1505        } 
    15231506 
    15241507        ++vPC; 
     
    15321515           result in register dst. 
    15331516        */ 
    1534         JSValue*& dst = r[(++vPC)->u.operand].u.jsValue; 
    1535         JSValue* src1 = r[(++vPC)->u.operand].u.jsValue; 
    1536         JSValue* src2 = r[(++vPC)->u.operand].u.jsValue; 
    1537         JSValue* result; 
     1517        int dst = (++vPC)->u.operand; 
     1518        JSValue* src1 = r[(++vPC)->u.operand].jsValue(); 
     1519        JSValue* src2 = r[(++vPC)->u.operand].jsValue(); 
    15381520        if (JSImmediate::areBothImmediateNumbers(src1, src2)) 
    1539             result = JSImmediate::orImmediateNumbers(src1, src2); 
     1521            r[dst] = JSImmediate::orImmediateNumbers(src1, src2); 
    15401522        else { 
    1541             result = jsNumber(exec, src1->toInt32(exec) | src2->toInt32(exec)); 
     1523            JSValue* result = jsNumber(exec, src1->toInt32(exec) | src2->toInt32(exec)); 
    15421524            VM_CHECK_EXCEPTION(); 
    1543         } 
    1544         dst = result; 
     1525            r[dst] = result; 
     1526        } 
    15451527 
    15461528        ++vPC; 
     
    15551537        int dst = (++vPC)->u.operand; 
    15561538        int src = (++vPC)->u.operand; 
    1557         JSValue* result = jsNumber(exec, ~r[src].u.jsValue->toInt32(exec)); 
     1539        JSValue* result = jsNumber(exec, ~r[src].jsValue()->toInt32(exec)); 
    15581540        VM_CHECK_EXCEPTION(); 
    1559         r[dst].u.jsValue = result; 
     1541        r[dst] = result; 
    15601542 
    15611543        ++vPC; 
     
    15701552        int dst = (++vPC)->u.operand; 
    15711553        int src = (++vPC)->u.operand; 
    1572         JSValue* result = jsBoolean(!r[src].u.jsValue->toBoolean(exec)); 
     1554        JSValue* result = jsBoolean(!r[src].jsValue()->toBoolean(exec)); 
    15731555        VM_CHECK_EXCEPTION(); 
    1574         r[dst].u.jsValue = result; 
     1556        r[dst] = result; 
    15751557 
    15761558        ++vPC; 
     
    15901572        int base = (++vPC)->u.operand; 
    15911573 
    1592         JSValue* baseVal = r[base].u.jsValue
     1574        JSValue* baseVal = r[base].jsValue()
    15931575 
    15941576        if (isNotObject(exec, vPC, codeBlock, baseVal, exceptionValue)) 
     
    15961578 
    15971579        JSObject* baseObj = static_cast<JSObject*>(baseVal); 
    1598         r[dst].u.jsValue = jsBoolean(baseObj->implementsHasInstance() ? baseObj->hasInstance(exec, r[value].u.jsValue) : false); 
     1580        r[dst] = jsBoolean(baseObj->implementsHasInstance() ? baseObj->hasInstance(exec, r[value].jsValue()) : false); 
    15991581 
    16001582        ++vPC; 
     
    16091591        int dst = (++vPC)->u.operand; 
    16101592        int src = (++vPC)->u.operand; 
    1611         r[dst].u.jsValue = jsTypeStringForValue(exec, r[src].u.jsValue); 
     1593        r[dst] = jsTypeStringForValue(exec, r[src].jsValue()); 
    16121594 
    16131595        ++vPC; 
     
    16271609        int base = (++vPC)->u.operand; 
    16281610 
    1629         JSValue* baseVal = r[base].u.jsValue
     1611        JSValue* baseVal = r[base].jsValue()
    16301612        if (isNotObject(exec, vPC, codeBlock, baseVal, exceptionValue)) 
    16311613            goto vm_throw; 
     
    16331615        JSObject* baseObj = static_cast<JSObject*>(baseVal); 
    16341616 
    1635         JSValue* propName = r[property].u.jsValue
     1617        JSValue* propName = r[property].jsValue()
    16361618 
    16371619        uint32_t i; 
    16381620        if (propName->getUInt32(i)) 
    1639             r[dst].u.jsValue = jsBoolean(baseObj->hasProperty(exec, i)); 
     1621            r[dst] = jsBoolean(baseObj->hasProperty(exec, i)); 
    16401622        else { 
    16411623            Identifier property(exec, propName->toString(exec)); 
    16421624            VM_CHECK_EXCEPTION(); 
    1643             r[dst].u.jsValue = jsBoolean(baseObj->hasProperty(exec, property)); 
     1625            r[dst] = jsBoolean(baseObj->hasProperty(exec, property)); 
    16441626        } 
    16451627 
     
    16941676        ASSERT((*iter)->isVariableObject()); 
    16951677        JSVariableObject* scope = static_cast<JSVariableObject*>(*iter); 
    1696         r[dst].u.jsValue = scope->valueAt(index); 
     1678        r[dst] = scope->registerAt(index); 
    16971679        ++vPC; 
    16981680        NEXT_OPCODE; 
     
    17161698        ASSERT((*iter)->isVariableObject()); 
    17171699        JSVariableObject* scope = static_cast<JSVariableObject*>(*iter); 
    1718         scope->valueAt(index) = r[value].u.jsValue
     1700        scope->registerAt(index) = r[value].jsValue()
    17191701        ++vPC; 
    17201702        NEXT_OPCODE; 
     
    17841766 
    17851767        Identifier& ident = codeBlock->identifiers[property]; 
    1786         JSValue *result = r[base].u.jsValue->get(exec, ident); 
     1768        JSValue *result = r[base].jsValue()->get(exec, ident); 
    17871769        VM_CHECK_EXCEPTION(); 
    1788         r[dst].u.jsValue = result; 
     1770        r[dst] = result; 
    17891771        ++vPC; 
    17901772        NEXT_OPCODE; 
     
    18041786 
    18051787        Identifier& ident = codeBlock->identifiers[property]; 
    1806         r[base].u.jsValue->put(exec, ident, r[value].u.jsValue); 
     1788        r[base].jsValue()->put(exec, ident, r[value].jsValue()); 
    18071789 
    18081790        VM_CHECK_EXCEPTION(); 
     
    18221804        int property = (++vPC)->u.operand; 
    18231805 
    1824         JSObject* baseObj = r[base].u.jsValue->toObject(exec); 
     1806        JSObject* baseObj = r[base].jsValue()->toObject(exec); 
    18251807 
    18261808        Identifier& ident = codeBlock->identifiers[property]; 
    18271809        JSValue* result = jsBoolean(baseObj->deleteProperty(exec, ident)); 
    18281810        VM_CHECK_EXCEPTION(); 
    1829         r[dst].u.jsValue = result; 
     1811        r[dst] = result; 
    18301812        ++vPC; 
    18311813        NEXT_OPCODE; 
     
    18431825        int property = (++vPC)->u.operand; 
    18441826 
    1845         JSValue* baseValue = r[base].u.jsValue
    1846         JSValue* subscript = r[property].u.jsValue
     1827        JSValue* baseValue = r[base].jsValue()
     1828        JSValue* subscript = r[property].jsValue()
    18471829 
    18481830        JSValue* result; 
     
    18671849 
    18681850        VM_CHECK_EXCEPTION(); 
    1869         r[dst].u.jsValue = result; 
     1851        r[dst] = result; 
    18701852        ++vPC; 
    18711853        NEXT_OPCODE; 
     
    18861868        int value = (++vPC)->u.operand; 
    18871869 
    1888         JSValue* baseValue = r[base].u.jsValue
    1889         JSValue* subscript = r[property].u.jsValue
     1870        JSValue* baseValue = r[base].jsValue()
     1871        JSValue* subscript = r[property].jsValue()
    18901872 
    18911873        unsigned i; 
     
    18961878                JSArray* jsArray = static_cast<JSArray*>(baseValue); 
    18971879                if (jsArray->canSetIndex(i)) 
    1898                     jsArray->setIndex(i, r[value].u.jsValue); 
     1880                    jsArray->setIndex(i, r[value].jsValue()); 
    18991881                else 
    1900                     jsArray->JSArray::put(exec, i, r[value].u.jsValue); 
     1882                    jsArray->JSArray::put(exec, i, r[value].jsValue()); 
    19011883            } else 
    1902                 baseValue->put(exec, i, r[value].u.jsValue); 
     1884                baseValue->put(exec, i, r[value].jsValue()); 
    19031885        } else { 
    19041886            Identifier property(exec, subscript->toString(exec)); 
    19051887            if (!exec->hadException()) // Don't put to an object if toString threw an exception. 
    1906                 baseValue->put(exec, property, r[value].u.jsValue); 
     1888                baseValue->put(exec, property, r[value].jsValue()); 
    19071889        } 
    19081890 
     
    19231905        int property = (++vPC)->u.operand; 
    19241906 
    1925         JSObject* baseObj = r[base].u.jsValue->toObject(exec); // may throw 
    1926  
    1927         JSValue* subscript = r[property].u.jsValue
     1907        JSObject* baseObj = r[base].jsValue()->toObject(exec); // may throw 
     1908 
     1909        JSValue* subscript = r[property].jsValue()
    19281910        JSValue* result; 
    19291911        uint32_t i; 
     
    19381920 
    19391921        VM_CHECK_EXCEPTION(); 
    1940         r[dst].u.jsValue = result; 
     1922        r[dst] = result; 
    19411923        ++vPC; 
    19421924        NEXT_OPCODE; 
     
    19581940        int value = (++vPC)->u.operand; 
    19591941 
    1960         r[base].u.jsObject->put(exec, property, r[value].u.jsValue); 
     1942        r[base].jsValue()->put(exec, property, r[value].jsValue()); 
    19611943 
    19621944        ++vPC; 
     
    20051987        int cond = (++vPC)->u.operand; 
    20061988        int target = (++vPC)->u.operand; 
    2007         if (r[cond].u.jsValue->toBoolean(exec)) { 
     1989        if (r[cond].jsValue()->toBoolean(exec)) { 
    20081990            vPC += target; 
    20091991            CHECK_FOR_TIMEOUT(); 
     
    20222004        int cond = (++vPC)->u.operand; 
    20232005        int target = (++vPC)->u.operand; 
    2024         if (r[cond].u.jsValue->toBoolean(exec)) { 
     2006        if (r[cond].jsValue()->toBoolean(exec)) { 
    20252007            vPC += target; 
    20262008            NEXT_OPCODE; 
     
    20382020        int cond = (++vPC)->u.operand; 
    20392021        int target = (++vPC)->u.operand; 
    2040         if (!r[cond].u.jsValue->toBoolean(exec)) { 
     2022        if (!r[cond].jsValue()->toBoolean(exec)) { 
    20412023            vPC += target; 
    20422024            NEXT_OPCODE; 
     
    20572039           the JS timeout is reached. 
    20582040         */ 
    2059         JSValue* src1 = r[(++vPC)->u.operand].u.jsValue
    2060         JSValue* src2 = r[(++vPC)->u.operand].u.jsValue
     2041        JSValue* src1 = r[(++vPC)->u.operand].jsValue()
     2042        JSValue* src2 = r[(++vPC)->u.operand].jsValue()
    20612043        int target = (++vPC)->u.operand; 
    20622044         
     
    20812063           result of the comparison is true. 
    20822064        */ 
    2083         JSValue* src1 = r[(++vPC)->u.operand].u.jsValue
    2084         JSValue* src2 = r[(++vPC)->u.operand].u.jsValue
     2065        JSValue* src1 = r[(++vPC)->u.operand].jsValue()
     2066        JSValue* src2 = r[(++vPC)->u.operand].jsValue()
    20852067        int target = (++vPC)->u.operand; 
    20862068 
     
    21042086           result of the comparison is false. 
    21052087        */ 
    2106         JSValue* src1 = r[(++vPC)->u.operand].u.jsValue
    2107         JSValue* src2 = r[(++vPC)->u.operand].u.jsValue
     2088        JSValue* src1 = r[(++vPC)->u.operand].jsValue()
     2089        JSValue* src2 = r[(++vPC)->u.operand].jsValue()
    21082090        int target = (++vPC)->u.operand; 
    21092091 
     
    21302112        int func = (++vPC)->u.operand; 
    21312113 
    2132         r[dst].u.jsValue = codeBlock->functions[func]->makeFunction(exec, scopeChain); 
     2114        r[dst] = codeBlock->functions[func]->makeFunction(exec, scopeChain); 
    21332115 
    21342116        ++vPC; 
     
    21462128        int func = (++vPC)->u.operand; 
    21472129 
    2148         r[dst].u.jsValue = codeBlock->functionExpressions[func]->makeFunction(exec, scopeChain); 
     2130        r[dst] = codeBlock->functionExpressions[func]->makeFunction(exec, scopeChain); 
    21492131 
    21502132        ++vPC; 
     
    21692151        int argCount = (++vPC)->u.operand; 
    21702152 
    2171         JSValue* funcVal = r[func].u.jsValue
    2172         JSValue* baseVal = r[thisVal].u.jsValue
     2153        JSValue* funcVal = r[func].jsValue()
     2154        JSValue* baseVal = r[thisVal].jsValue()
    21732155 
    21742156        if (baseVal == scopeChain->globalObject() && funcVal == scopeChain->globalObject()->evalFunction()) { 
    2175             JSObject* thisObject = r[codeBlock->thisRegister].u.jsObject
     2157            JSObject* thisObject = static_cast<JSObject*>(r[codeBlock->thisRegister].jsValue())
    21762158            JSValue* result = callEval(exec, thisObject, scopeChain, registerFile, r, firstArg, argCount, exceptionValue); 
    21772159            if (exceptionValue) 
    21782160                goto vm_throw; 
    21792161 
    2180             r[dst].u.jsValue = result; 
     2162            r[dst] = result; 
    21812163 
    21822164            ++vPC; 
     
    21882170        // value. 
    21892171        vPC -= 5; 
    2190         r[thisVal].u.jsValue = baseVal->toThisObject(exec); 
     2172        r[thisVal] = baseVal->toThisObject(exec); 
    21912173 
    21922174#if HAVE(COMPUTED_GOTO) 
     
    22412223        int argCount = (++vPC)->u.operand; 
    22422224 
    2243         JSValue* v = r[func].u.jsValue
     2225        JSValue* v = r[func].jsValue()
    22442226 
    22452227        CallData callData; 
     
    22542236            CodeBlock* newCodeBlock = &functionBodyNode->code(callDataScopeChain); 
    22552237 
    2256             r[firstArg].u.jsValue = thisVal == missingThisObjectMarker() ? exec->globalThisValue() : r[thisVal].u.jsValue
     2238            r[firstArg] = thisVal == missingThisObjectMarker() ? exec->globalThisValue() : r[thisVal].jsValue()
    22572239 
    22582240            Register* callFrame = r + firstArg - RegisterFile::CallFrameHeaderSize; 
     
    22662248            codeBlock = newCodeBlock; 
    22672249            setScopeChain(exec, scopeChain, scopeChainForCall(exec, functionBodyNode, codeBlock, callDataScopeChain, r)); 
    2268             k = codeBlock->jsValues.data(); 
     2250            k = codeBlock->registers.data(); 
    22692251            vPC = codeBlock->instructions.begin(); 
    22702252 
     
    22802262                (*enabledProfilerReference)->willExecute(exec, static_cast<JSObject*>(v)); 
    22812263 
    2282             JSValue* thisValue = thisVal == missingThisObjectMarker() ? exec->globalThisValue() : r[thisVal].u.jsValue
    2283             ArgList args(reinterpret_cast<JSValue**>(r) + firstArg + 1, argCount - 1); 
     2264            JSValue* thisValue = thisVal == missingThisObjectMarker() ? exec->globalThisValue() : r[thisVal].jsValue()
     2265            ArgList args(r + firstArg + 1, argCount - 1); 
    22842266 
    22852267            JSValue* returnValue = callData.native.function(exec, static_cast<JSObject*>(v), thisValue, args); 
    22862268            VM_CHECK_EXCEPTION(); 
    22872269 
    2288             r[dst].u.jsValue = returnValue; 
     2270            r[dst] = returnValue; 
    22892271 
    22902272            if (*enabledProfilerReference) 
     
    23132295 
    23142296        Register* callFrame = r - codeBlock->numLocals - RegisterFile::CallFrameHeaderSize; 
    2315         if (JSActivation* activation = static_cast<JSActivation*>(callFrame[RegisterFile::OptionalCalleeActivation].u.jsValue)) { 
     2297        if (JSActivation* activation = static_cast<JSActivation*>(callFrame[RegisterFile::OptionalCalleeActivation].jsValue())) { 
    23162298            ASSERT(!codeBlock->needsFullScopeChain || scopeChain->object == activation); 
    23172299            ASSERT(activation->isActivationObject()); 
     
    23202302 
    23212303        if (*enabledProfilerReference) 
    2322             (*enabledProfilerReference)->didExecute(exec, callFrame[RegisterFile::Callee].u.jsObject); 
     2304            (*enabledProfilerReference)->didExecute(exec, static_cast<JSObject*>(callFrame[RegisterFile::Callee].jsValue())); 
    23232305 
    23242306        if (codeBlock->needsFullScopeChain) 
    23252307            scopeChain->deref(); 
    23262308 
    2327         JSValue* returnValue = r[result].u.jsValue
    2328         if (callFrame[RegisterFile::CalledAsConstructor].u.i && !returnValue->isObject()) { 
    2329             JSValue* thisObject = callFrame[RegisterFile::CallFrameHeaderSize].u.jsValue
     2309        JSValue* returnValue = r[result].jsValue()
     2310        if (callFrame[RegisterFile::CalledAsConstructor].i() && !returnValue->isObject()) { 
     2311            JSValue* thisObject = callFrame[RegisterFile::CallFrameHeaderSize].jsValue()
    23302312            returnValue = thisObject; 
    23312313        } 
    23322314 
    2333         codeBlock = callFrame[RegisterFile::CallerCodeBlock].u.codeBlock
     2315        codeBlock = callFrame[RegisterFile::CallerCodeBlock].codeBlock()
    23342316        if (!codeBlock) 
    23352317            return returnValue; 
    23362318 
    2337         k = codeBlock->jsValues.data(); 
    2338         vPC = callFrame[RegisterFile::ReturnVPC].u.vPC
    2339         setScopeChain(exec, scopeChain, callFrame[RegisterFile::CallerScopeChain].u.scopeChain); 
    2340         r = callFrame[RegisterFile::CallerRegisters].u.r
     2319        k = codeBlock->registers.data(); 
     2320        vPC = callFrame[RegisterFile::ReturnVPC].vPC()
     2321        setScopeChain(exec, scopeChain, callFrame[RegisterFile::CallerScopeChain].scopeChain()); 
     2322        r = callFrame[RegisterFile::CallerRegisters].r()
    23412323        exec->m_callFrame = r - codeBlock->numLocals - RegisterFile::CallFrameHeaderSize; 
    2342         int dst = callFrame[RegisterFile::ReturnValueRegister].u.i
    2343         r[dst].u.jsValue = returnValue; 
     2324        int dst = callFrame[RegisterFile::ReturnValueRegister].i()
     2325        r[dst] = returnValue; 
    23442326 
    23452327        NEXT_OPCODE; 
     
    23612343        int argCount = (++vPC)->u.operand; 
    23622344 
    2363         JSValue* constrVal = r[constr].u.jsValue
     2345        JSValue* constrVal = r[constr].jsValue()
    23642346 
    23652347        ConstructData constructData; 
     
    23852367            CodeBlock* newCodeBlock = &functionBodyNode->code(callDataScopeChain); 
    23862368 
    2387             r[firstArg].u.jsValue = newObject; // "this" value 
     2369            r[firstArg] = newObject; // "this" value 
    23882370 
    23892371            Register* callFrame = r + firstArg - RegisterFile::CallFrameHeaderSize; 
     
    23972379            codeBlock = newCodeBlock; 
    23982380            setScopeChain(exec, scopeChain, scopeChainForCall(exec, functionBodyNode, codeBlock, callDataScopeChain, r)); 
    2399             k = codeBlock->jsValues.data(); 
     2381            k = codeBlock->registers.data(); 
    24002382            vPC = codeBlock->instructions.begin(); 
    24012383 
     
    24072389                (*enabledProfilerReference)->willExecute(exec, constructor); 
    24082390 
    2409             ArgList args(reinterpret_cast<JSValue**>(r) + firstArg + 1, argCount - 1); 
     2391            ArgList args(r + firstArg + 1, argCount - 1); 
    24102392            JSValue* returnValue = constructData.native.function(exec, constructor, args); 
    24112393 
    24122394            VM_CHECK_EXCEPTION(); 
    2413             r[dst].u.jsValue = returnValue; 
     2395            r[dst] = returnValue; 
    24142396 
    24152397            if (*enabledProfilerReference) 
     
    24322414        */ 
    24332415        int scope = (++vPC)->u.operand; 
    2434         JSValue* v = r[scope].u.jsValue
     2416        JSValue* v = r[scope].jsValue()
    24352417        JSObject* o = v->toObject(exec); 
    24362418        VM_CHECK_EXCEPTION(); 
     
    24622444        int base = (++vPC)->u.operand; 
    24632445 
    2464         r[dst].u.jsPropertyNameIterator = JSPropertyNameIterator::create(exec, r[base].u.jsValue); 
     2446        r[dst] = JSPropertyNameIterator::create(exec, r[base].jsValue()); 
    24652447        ++vPC; 
    24662448        NEXT_OPCODE; 
     
    24792461        int target = (++vPC)->u.operand; 
    24802462 
    2481         JSPropertyNameIterator* it = r[iter].u.jsPropertyNameIterator
     2463        JSPropertyNameIterator* it = r[iter].jsPropertyNameIterator()
    24822464        if (JSValue* temp = it->next(exec)) { 
    24832465            CHECK_FOR_TIMEOUT(); 
    2484             r[dst].u.jsValue = temp; 
     2466            r[dst] = temp; 
    24852467            vPC += target; 
    24862468            NEXT_OPCODE; 
     
    25192501        ASSERT(!exec->hadException()); 
    25202502        int ex = (++vPC)->u.operand; 
    2521         r[ex].u.jsValue = exceptionValue; 
     2503        r[ex] = exceptionValue; 
    25222504        exceptionValue = 0; 
    25232505 
     
    25372519 
    25382520        int ex = (++vPC)->u.operand; 
    2539         exceptionValue = r[ex].u.jsValue
     2521        exceptionValue = r[ex].jsValue()
    25402522        handlerVPC = throwException(exec, exceptionValue, vPC, codeBlock, k, scopeChain, r); 
    25412523        if (!handlerVPC) { 
     
    25682550        int message = (++vPC)->u.operand; 
    25692551 
    2570         r[dst].u.jsValue = Error::create(exec, (ErrorType)type, k[message]->toString(exec), codeBlock->lineNumberForVPC(vPC), codeBlock->ownerNode->sourceId(), codeBlock->ownerNode->sourceURL()); 
     2552        r[dst] = Error::create(exec, (ErrorType)type, k[message].toString(exec), codeBlock->lineNumberForVPC(vPC), codeBlock->ownerNode->sourceId(), codeBlock->ownerNode->sourceURL()); 
    25712553 
    25722554        ++vPC; 
     
    25852567        } 
    25862568        int result = (++vPC)->u.operand; 
    2587         return r[result].u.jsValue
     2569        return r[result].jsValue()
    25882570    } 
    25892571    BEGIN_OPCODE(op_put_getter) { 
     
    26022584        int function = (++vPC)->u.operand; 
    26032585 
    2604         ASSERT(r[base].u.jsValue->isObject()); 
    2605         JSObject* baseObj = static_cast<JSObject*>(r[base].u.jsValue); 
     2586        ASSERT(r[base].jsValue()->isObject()); 
     2587        JSObject* baseObj = static_cast<JSObject*>(r[base].jsValue()); 
    26062588        Identifier& ident = codeBlock->identifiers[property]; 
    2607         ASSERT(r[function].u.jsValue->isObject()); 
    2608         baseObj->defineGetter(exec, ident, static_cast<JSObject* >(r[function].u.jsValue)); 
     2589        ASSERT(r[function].jsValue()->isObject()); 
     2590        baseObj->defineGetter(exec, ident, static_cast<JSObject*>(r[function].jsValue())); 
    26092591 
    26102592        ++vPC; 
     
    26262608        int function = (++vPC)->u.operand; 
    26272609 
    2628         ASSERT(r[base].u.jsValue->isObject()); 
    2629         JSObject* baseObj = static_cast<JSObject*>(r[base].u.jsValue); 
     2610        ASSERT(r[base].jsValue()->isObject()); 
     2611        JSObject* baseObj = static_cast<JSObject*>(r[base].jsValue()); 
    26302612        Identifier& ident = codeBlock->identifiers[property]; 
    2631         ASSERT(r[function].u.jsValue->isObject()); 
    2632         baseObj->defineSetter(exec, ident, static_cast<JSObject* >(r[function].u.jsValue)); 
     2613        ASSERT(r[function].jsValue()->isObject()); 
     2614        baseObj->defineSetter(exec, ident, static_cast<JSObject*>(r[function].jsValue())); 
    26332615 
    26342616        ++vPC; 
     
    26432625        int retAddrDst = (++vPC)->u.operand; 
    26442626        int target = (++vPC)->u.operand; 
    2645         r[retAddrDst].u.vPC = vPC + 1; 
     2627        r[retAddrDst] = vPC + 1; 
    26462628 
    26472629        vPC += target; 
     
    26562638        */ 
    26572639        int retAddrSrc = (++vPC)->u.operand; 
    2658         vPC = r[retAddrSrc].u.vPC
     2640        vPC = r[retAddrSrc].vPC()
    26592641        NEXT_OPCODE; 
    26602642    } 
     
    26982680        return jsNull(); 
    26992681 
    2700     JSActivation* activation = static_cast<JSActivation*>(callFrame[RegisterFile::OptionalCalleeActivation].u.jsValue); 
     2682    JSActivation* activation = static_cast<JSActivation*>(callFrame[RegisterFile::OptionalCalleeActivation].jsValue()); 
    27012683    if (!activation) { 
    27022684        CodeBlock* codeBlock = &function->m_body->generatedCode(); 
    27032685        activation = new (exec) JSActivation(function->m_body, callFrame + RegisterFile::CallFrameHeaderSize + codeBlock->numLocals); 
    2704         callFrame[RegisterFile::OptionalCalleeActivation].u.jsValue = activation; 
     2686        callFrame[RegisterFile::OptionalCalleeActivation] = activation; 
    27052687    } 
    27062688 
     
    27142696        return jsNull(); 
    27152697 
    2716     CodeBlock* callerCodeBlock = callFrame[RegisterFile::CallerCodeBlock].u.codeBlock
     2698    CodeBlock* callerCodeBlock = callFrame[RegisterFile::CallerCodeBlock].codeBlock()
    27172699    if (!callerCodeBlock) 
    27182700        return jsNull(); 
    27192701 
    2720     Register* callerCallFrame = callFrame[RegisterFile::CallerRegisters].u.r - callerCodeBlock->numLocals - RegisterFile::CallFrameHeaderSize; 
    2721     if (JSValue* caller = callerCallFrame[RegisterFile::Callee].u.jsValue
     2702    Register* callerCallFrame = callFrame[RegisterFile::CallerRegisters].r() - callerCodeBlock->numLocals - RegisterFile::CallFrameHeaderSize; 
     2703    if (JSValue* caller = callerCallFrame[RegisterFile::Callee].jsValue()
    27222704        return caller; 
    27232705 
     
    27372719        } 
    27382720 
    2739         if (callFrame[RegisterFile::Callee].u.jsValue == function) 
     2721        if (callFrame[RegisterFile::Callee].jsValue() == function) 
    27402722            return callFrame; 
    27412723 
    2742         CodeBlock* callerCodeBlock = callFrame[RegisterFile::CallerCodeBlock].u.codeBlock
     2724        CodeBlock* callerCodeBlock = callFrame[RegisterFile::CallerCodeBlock].codeBlock()
    27432725        if (!callerCodeBlock) { 
    27442726            callFrame = 0; 
     
    27462728        } 
    27472729         
    2748         callFrame = callFrame[RegisterFile::CallerRegisters].u.r - callerCodeBlock->numLocals - RegisterFile::CallFrameHeaderSize; 
     2730        callFrame = callFrame[RegisterFile::CallerRegisters].r() - callerCodeBlock->numLocals - RegisterFile::CallFrameHeaderSize; 
    27492731    } 
    27502732} 
     
    27522734void Machine::getArgumentsData(Register* callFrame, JSFunction*& function, Register*& argv, int& argc) 
    27532735{ 
    2754     function = static_cast<JSFunction*>(callFrame[RegisterFile::Callee].u.jsValue); 
     2736    function = static_cast<JSFunction*>(callFrame[RegisterFile::Callee].jsValue()); 
    27552737    ASSERT(function->inherits(&JSFunction::info)); 
    27562738 
    2757     argv = callFrame[RegisterFile::CallerRegisters].u.r + callFrame[RegisterFile::ArgumentStartRegister].u.i + 1; //  + 1 to skip "this" 
    2758     argc = callFrame[RegisterFile::ArgumentCount].u.i - 1; // - 1 to skip "this" 
     2739    argv = callFrame[RegisterFile::CallerRegisters].r() + callFrame[RegisterFile::ArgumentStartRegister].i() + 1; //  + 1 to skip "this" 
     2740    argc = callFrame[RegisterFile::ArgumentCount].i() - 1; // - 1 to skip "this" 
    27592741} 
    27602742