Changeset 44705 in webkit for trunk/JavaScriptCore/jit/JITStubs.cpp
- Timestamp:
- Jun 15, 2009, 8:01:12 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/jit/JITStubs.cpp
r44693 r44705 323 323 #if ENABLE(JIT_OPTIMIZE_PROPERTY_ACCESS) 324 324 325 NEVER_INLINE void JITThunks::tryCachePutByID(CallFrame* callFrame, CodeBlock* codeBlock, void*returnAddress, JSValue baseValue, const PutPropertySlot& slot)325 NEVER_INLINE void JITThunks::tryCachePutByID(CallFrame* callFrame, CodeBlock* codeBlock, ReturnAddressPtr returnAddress, JSValue baseValue, const PutPropertySlot& slot) 326 326 { 327 327 // The interpreter checks for recursion here; I do not believe this can occur in CTI. … … 367 367 } 368 368 369 NEVER_INLINE void JITThunks::tryCacheGetByID(CallFrame* callFrame, CodeBlock* codeBlock, void*returnAddress, JSValue baseValue, const Identifier& propertyName, const PropertySlot& slot)369 NEVER_INLINE void JITThunks::tryCacheGetByID(CallFrame* callFrame, CodeBlock* codeBlock, ReturnAddressPtr returnAddress, JSValue baseValue, const Identifier& propertyName, const PropertySlot& slot) 370 370 { 371 371 // FIXME: Write a test that proves we need to check for recursion here just … … 474 474 , savedReturnAddress(*stackFrame.returnAddressSlot()) 475 475 { 476 *stackFrame.returnAddressSlot() = reinterpret_cast<void*>(jscGeneratedNativeCode);476 *stackFrame.returnAddressSlot() = ReturnAddressPtr(FunctionPtr(jscGeneratedNativeCode)); 477 477 } 478 478 … … 483 483 484 484 JITStackFrame& stackFrame; 485 void*savedReturnAddress;485 ReturnAddressPtr savedReturnAddress; 486 486 }; 487 487 488 488 #define STUB_INIT_STACK_FRAME(stackFrame) SETUP_VA_LISTL_ARGS; JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS); StackHack stackHack(stackFrame) 489 #define STUB_SET_RETURN_ADDRESS(returnAddress) stackHack.savedReturnAddress = returnAddress489 #define STUB_SET_RETURN_ADDRESS(returnAddress) stackHack.savedReturnAddress = ReturnAddressPtr(returnAddress) 490 490 #define STUB_RETURN_ADDRESS stackHack.savedReturnAddress 491 491 … … 493 493 494 494 #define STUB_INIT_STACK_FRAME(stackFrame) SETUP_VA_LISTL_ARGS; JITStackFrame& stackFrame = *reinterpret_cast<JITStackFrame*>(STUB_ARGS) 495 #define STUB_SET_RETURN_ADDRESS(returnAddress) *stackFrame.returnAddressSlot() = returnAddress495 #define STUB_SET_RETURN_ADDRESS(returnAddress) *stackFrame.returnAddressSlot() = ReturnAddressPtr(returnAddress) 496 496 #define STUB_RETURN_ADDRESS *stackFrame.returnAddressSlot() 497 497 … … 502 502 // good to keep the code size down by leaving as much of the exception 503 503 // handling code out of line as possible. 504 static NEVER_INLINE void returnToThrowTrampoline(JSGlobalData* globalData, void* exceptionLocation, void*& returnAddressSlot)504 static NEVER_INLINE void returnToThrowTrampoline(JSGlobalData* globalData, ReturnAddressPtr exceptionLocation, ReturnAddressPtr& returnAddressSlot) 505 505 { 506 506 ASSERT(globalData->exception); 507 507 globalData->exceptionLocation = exceptionLocation; 508 returnAddressSlot = reinterpret_cast<void*>(ctiVMThrowTrampoline);509 } 510 511 static NEVER_INLINE void throwStackOverflowError(CallFrame* callFrame, JSGlobalData* globalData, void* exceptionLocation, void*& returnAddressSlot)508 returnAddressSlot = ReturnAddressPtr(FunctionPtr(ctiVMThrowTrampoline)); 509 } 510 511 static NEVER_INLINE void throwStackOverflowError(CallFrame* callFrame, JSGlobalData* globalData, ReturnAddressPtr exceptionLocation, ReturnAddressPtr& returnAddressSlot) 512 512 { 513 513 globalData->exception = createStackOverflowError(callFrame); … … 673 673 CallFrame* oldCallFrame = stackFrame.callFrame->callerFrame(); 674 674 stackFrame.callFrame = oldCallFrame; 675 throwStackOverflowError(oldCallFrame, stackFrame.globalData, oldCallFrame->returnPC(), STUB_RETURN_ADDRESS);675 throwStackOverflowError(oldCallFrame, stackFrame.globalData, ReturnAddressPtr(oldCallFrame->returnPC()), STUB_RETURN_ADDRESS); 676 676 } 677 677 … … 1279 1279 CallFrame* callFrame = CallFrame::create(previousCallFrame->registers() + registerOffset); 1280 1280 1281 callFrame->init(0, static_cast<Instruction*>( STUB_RETURN_ADDRESS), previousCallFrame->scopeChain(), previousCallFrame, 0, argCount, 0);1281 callFrame->init(0, static_cast<Instruction*>((STUB_RETURN_ADDRESS).value()), previousCallFrame->scopeChain(), previousCallFrame, 0, argCount, 0); 1282 1282 stackFrame.callFrame = callFrame; 1283 1283
Note:
See TracChangeset
for help on using the changeset viewer.