Changeset 37213 in webkit for trunk/JavaScriptCore/VM/Machine.cpp
- Timestamp:
- Oct 2, 2008, 3:19:05 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/VM/Machine.cpp
r37191 r37213 533 533 } 534 534 535 ALWAYS_INLINE Register* slideRegisterWindowForCall(ExecState* exec, CodeBlock* newCodeBlock, RegisterFile* registerFile, Register* r egisterBase, Register* r, size_t registerOffset, int argc, JSValue*& exceptionValue)536 { 537 size_t size = r - registerBase+ registerOffset + newCodeBlock->numCalleeRegisters;535 ALWAYS_INLINE Register* slideRegisterWindowForCall(ExecState* exec, CodeBlock* newCodeBlock, RegisterFile* registerFile, Register* r, size_t registerOffset, int argc, JSValue*& exceptionValue) 536 { 537 Register* newEnd = r + registerOffset + newCodeBlock->numCalleeRegisters; 538 538 539 539 if (argc == newCodeBlock->numParameters) { // correct number of arguments 540 if (!registerFile->grow( size)) {540 if (!registerFile->grow(newEnd)) { 541 541 exceptionValue = createStackOverflowError(exec); 542 542 return r; … … 546 546 size_t omittedArgCount = newCodeBlock->numParameters - argc; 547 547 registerOffset += omittedArgCount; 548 size+= omittedArgCount;549 if (!registerFile->grow( size)) {548 newEnd += omittedArgCount; 549 if (!registerFile->grow(newEnd)) { 550 550 exceptionValue = createStackOverflowError(exec); 551 551 return r; … … 559 559 size_t numParameters = newCodeBlock->numParameters; 560 560 registerOffset += numParameters; 561 size+= numParameters;562 563 if (!registerFile->grow( size)) {561 newEnd += numParameters; 562 563 if (!registerFile->grow(newEnd)) { 564 564 exceptionValue = createStackOverflowError(exec); 565 565 return r; … … 604 604 JSValue* result = 0; 605 605 if (evalNode) 606 result = exec->globalData().machine->execute(evalNode.get(), exec, thisObj, r - registerFile-> base() + argv + 1 + RegisterFile::CallFrameHeaderSize, scopeChain, &exceptionValue);606 result = exec->globalData().machine->execute(evalNode.get(), exec, thisObj, r - registerFile->start() + argv + 1 + RegisterFile::CallFrameHeaderSize, scopeChain, &exceptionValue); 607 607 608 608 if (*profiler) … … 887 887 CodeBlock* codeBlock = &programNode->byteCode(scopeChain); 888 888 889 size_t oldSize = m_registerFile.size();890 size_t newSize = oldSize+ codeBlock->numParameters + RegisterFile::CallFrameHeaderSize + codeBlock->numCalleeRegisters;891 if (!m_registerFile.grow(new Size)) {889 Register* oldEnd = m_registerFile.end(); 890 Register* newEnd = oldEnd + codeBlock->numParameters + RegisterFile::CallFrameHeaderSize + codeBlock->numCalleeRegisters; 891 if (!m_registerFile.grow(newEnd)) { 892 892 *exception = createStackOverflowError(exec); 893 893 return jsNull(); … … 898 898 globalObject->copyGlobalsTo(m_registerFile); 899 899 900 Register* r = m_registerFile.base() + oldSize+ codeBlock->numParameters + RegisterFile::CallFrameHeaderSize;900 Register* r = oldEnd + codeBlock->numParameters + RegisterFile::CallFrameHeaderSize; 901 901 r[codeBlock->thisRegister] = thisObj; 902 902 initializeCallFrame(r, codeBlock, 0, scopeChain, makeHostCallFramePointer(0), 0, 0, 0); … … 929 929 lastGlobalObject->copyGlobalsTo(m_registerFile); 930 930 931 m_registerFile.shrink(old Size);931 m_registerFile.shrink(oldEnd); 932 932 return result; 933 933 } … … 942 942 } 943 943 944 size_t oldSize = m_registerFile.size();944 Register* oldEnd = m_registerFile.end(); 945 945 int argc = 1 + args.size(); // implicit "this" parameter 946 946 947 if (!m_registerFile.grow(old Size+ argc)) {947 if (!m_registerFile.grow(oldEnd + argc)) { 948 948 *exception = createStackOverflowError(exec); 949 949 return jsNull(); 950 950 } 951 951 952 Register* argv = m_registerFile.base() + oldSize;952 Register* argv = oldEnd; 953 953 size_t dst = 0; 954 954 argv[dst] = thisObj; … … 959 959 960 960 CodeBlock* codeBlock = &functionBodyNode->byteCode(scopeChain); 961 Register* r = slideRegisterWindowForCall(exec, codeBlock, &m_registerFile, m_registerFile.base(),argv, argc + RegisterFile::CallFrameHeaderSize, argc, *exception);961 Register* r = slideRegisterWindowForCall(exec, codeBlock, &m_registerFile, argv, argc + RegisterFile::CallFrameHeaderSize, argc, *exception); 962 962 if (UNLIKELY(*exception != 0)) { 963 m_registerFile.shrink(old Size);963 m_registerFile.shrink(oldEnd); 964 964 return jsNull(); 965 965 } … … 985 985 MACHINE_SAMPLING_privateExecuteReturned(); 986 986 987 m_registerFile.shrink(old Size);987 m_registerFile.shrink(oldEnd); 988 988 return result; 989 989 } … … 1037 1037 } 1038 1038 1039 size_t oldSize = m_registerFile.size();1040 size_t newSize =registerOffset + codeBlock->numCalleeRegisters;1041 if (!m_registerFile.grow(new Size)) {1039 Register* oldEnd = m_registerFile.end(); 1040 Register* newEnd = m_registerFile.start() + registerOffset + codeBlock->numCalleeRegisters; 1041 if (!m_registerFile.grow(newEnd)) { 1042 1042 *exception = createStackOverflowError(exec); 1043 1043 return jsNull(); 1044 1044 } 1045 1045 1046 Register* r = m_registerFile. base() + registerOffset;1046 Register* r = m_registerFile.start() + registerOffset; 1047 1047 1048 1048 // a 0 codeBlock indicates a built-in caller … … 1074 1074 (*profiler)->didExecute(exec, evalNode->sourceURL(), evalNode->lineNo()); 1075 1075 1076 m_registerFile.shrink(old Size);1076 m_registerFile.shrink(oldEnd); 1077 1077 return result; 1078 1078 } … … 1447 1447 Instruction* handlerVPC = 0; 1448 1448 1449 Register* registerBase = registerFile->base();1450 1449 Instruction* vPC = this->codeBlock(r)->instructions.begin(); 1451 1450 Profiler** enabledProfilerReference = Profiler::enabledProfilerReference(); … … 3285 3284 Register* savedR = r; 3286 3285 3287 r = slideRegisterWindowForCall(exec, newCodeBlock, registerFile, r egisterBase, r, registerOffset, argCount, exceptionValue);3286 r = slideRegisterWindowForCall(exec, newCodeBlock, registerFile, r, registerOffset, argCount, exceptionValue); 3288 3287 exec->m_callFrame = r; 3289 3288 if (UNLIKELY(exceptionValue != 0)) … … 3468 3467 Register* savedR = r; 3469 3468 3470 r = slideRegisterWindowForCall(exec, newCodeBlock, registerFile, r egisterBase, r, registerOffset, argCount, exceptionValue);3469 r = slideRegisterWindowForCall(exec, newCodeBlock, registerFile, r, registerOffset, argCount, exceptionValue); 3471 3470 exec->m_callFrame = r; 3472 3471 if (UNLIKELY(exceptionValue != 0)) … … 4490 4489 Register* r = ARG_r; 4491 4490 4492 Register* registerBase = registerFile->base();4493 4494 4491 JSValue* funcVal = ARG_src1; 4495 4492 int registerOffset = ARG_int2; … … 4512 4509 4513 4510 JSValue* exceptionValue = 0; 4514 r = slideRegisterWindowForCall(exec, newCodeBlock, registerFile, r egisterBase, r, registerOffset, argCount, exceptionValue);4511 r = slideRegisterWindowForCall(exec, newCodeBlock, registerFile, r, registerOffset, argCount, exceptionValue); 4515 4512 JSVALUE_VM_CHECK_EXCEPTION_ARG(exceptionValue); 4516 4513 … … 4691 4688 Register* r = ARG_r; 4692 4689 4693 Register* registerBase = registerFile->base();4694 4695 4690 JSValue* constrVal = ARG_src1; 4696 4691 JSValue* constrProtoVal = ARG_src2; … … 4725 4720 4726 4721 JSValue* exceptionValue = 0; 4727 r = slideRegisterWindowForCall(exec, newCodeBlock, registerFile, r egisterBase, r, registerOffset, argCount, exceptionValue);4722 r = slideRegisterWindowForCall(exec, newCodeBlock, registerFile, r, registerOffset, argCount, exceptionValue); 4728 4723 JSVALUE_VM_CHECK_EXCEPTION_ARG(exceptionValue); 4729 4724
Note:
See TracChangeset
for help on using the changeset viewer.