Changeset 172867 in webkit for trunk/Source/JavaScriptCore/interpreter
- Timestamp:
- Aug 22, 2014, 12:54:30 PM (11 years ago)
- Location:
- trunk/Source/JavaScriptCore/interpreter
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/interpreter/Interpreter.cpp
r172665 r172867 646 646 class UnwindFunctor { 647 647 public: 648 UnwindFunctor(CallFrame*& callFrame, bool isTermination, CodeBlock*& codeBlock, HandlerInfo*& handler) 649 : m_callFrame(callFrame) 648 UnwindFunctor(VMEntryFrame*& vmEntryFrame, CallFrame*& callFrame, bool isTermination, CodeBlock*& codeBlock, HandlerInfo*& handler) 649 : m_vmEntryFrame(vmEntryFrame) 650 , m_callFrame(callFrame) 650 651 , m_isTermination(isTermination) 651 652 , m_codeBlock(codeBlock) … … 657 658 { 658 659 VM& vm = m_callFrame->vm(); 660 m_vmEntryFrame = visitor->vmEntryFrame(); 659 661 m_callFrame = visitor->callFrame(); 660 662 m_codeBlock = visitor->codeBlock(); … … 674 676 675 677 private: 678 VMEntryFrame*& m_vmEntryFrame; 676 679 CallFrame*& m_callFrame; 677 680 bool m_isTermination; … … 680 683 }; 681 684 682 NEVER_INLINE HandlerInfo* Interpreter::unwind( CallFrame*& callFrame, JSValue& exceptionValue)685 NEVER_INLINE HandlerInfo* Interpreter::unwind(VMEntryFrame*& vmEntryFrame, CallFrame*& callFrame, JSValue& exceptionValue) 683 686 { 684 687 CodeBlock* codeBlock = callFrame->codeBlock(); … … 725 728 VM& vm = callFrame->vm(); 726 729 ASSERT(callFrame == vm.topCallFrame); 727 UnwindFunctor functor( callFrame, isTermination, codeBlock, handler);730 UnwindFunctor functor(vmEntryFrame, callFrame, isTermination, codeBlock, handler); 728 731 callFrame->iterate(functor); 729 732 if (!handler) -
trunk/Source/JavaScriptCore/interpreter/Interpreter.h
r172792 r172867 176 176 ASSERT(vm); 177 177 ASSERT(callFrame); 178 ASSERT(callFrame < vm->topVMEntryFrame);179 178 vm->topCallFrame = callFrame; 180 179 } 181 182 ALWAYS_INLINE NativeCallFrameTracer(VM* vm, VMEntryFrame* vmEntryFrame, CallFrame* callFrame) 180 }; 181 182 class NativeCallFrameTracerWithRestore { 183 public: 184 ALWAYS_INLINE NativeCallFrameTracerWithRestore(VM* vm, VMEntryFrame* vmEntryFrame, CallFrame* callFrame) 185 : m_vm(vm) 183 186 { 184 187 ASSERT(vm); 185 188 ASSERT(callFrame); 186 ASSERT(callFrame < vmEntryFrame); 189 m_savedTopVMEntryFrame = vm->topVMEntryFrame; 190 m_savedTopCallFrame = vm->topCallFrame; 187 191 vm->topVMEntryFrame = vmEntryFrame; 188 192 vm->topCallFrame = callFrame; 189 193 } 194 195 ALWAYS_INLINE ~NativeCallFrameTracerWithRestore() 196 { 197 m_vm->topVMEntryFrame = m_savedTopVMEntryFrame; 198 m_vm->topCallFrame = m_savedTopCallFrame; 199 } 200 201 private: 202 VM* m_vm; 203 VMEntryFrame* m_savedTopVMEntryFrame; 204 CallFrame* m_savedTopCallFrame; 190 205 }; 191 206 … … 237 252 SamplingTool* sampler() { return m_sampler.get(); } 238 253 239 NEVER_INLINE HandlerInfo* unwind( CallFrame*&, JSValue&);254 NEVER_INLINE HandlerInfo* unwind(VMEntryFrame*&, CallFrame*&, JSValue&); 240 255 NEVER_INLINE void debug(CallFrame*, DebugHookID); 241 256 JSString* stackTraceAsString(ExecState*, Vector<StackFrame>); -
trunk/Source/JavaScriptCore/interpreter/StackVisitor.cpp
r172807 r172867 62 62 CodeOrigin* callerCodeOrigin = &inlineCallFrame->caller; 63 63 readInlinedFrame(m_frame.callFrame(), callerCodeOrigin); 64 65 } else64 return; 65 } 66 66 #endif // ENABLE(DFG_JIT) 67 readFrame(m_frame.callerFrame()); 67 m_frame.m_VMEntryFrame = m_frame.m_CallerVMEntryFrame; 68 readFrame(m_frame.callerFrame()); 68 69 } 69 70 … … 117 118 m_frame.m_callFrame = callFrame; 118 119 m_frame.m_argumentCountIncludingThis = callFrame->argumentCountIncludingThis(); 119 VMEntryFrame* currentVMEntryFrame = m_frame.m_VMEntryFrame;120 m_frame.m_callerFrame = callFrame->callerFrame(m_frame.m_ VMEntryFrame);121 m_frame.m_callerIsVMEntryFrame = currentVMEntryFrame != m_frame.m_VMEntryFrame;120 m_frame.m_CallerVMEntryFrame = m_frame.m_VMEntryFrame; 121 m_frame.m_callerFrame = callFrame->callerFrame(m_frame.m_CallerVMEntryFrame); 122 m_frame.m_callerIsVMEntryFrame = m_frame.m_CallerVMEntryFrame != m_frame.m_VMEntryFrame; 122 123 m_frame.m_callee = callFrame->callee(); 123 124 m_frame.m_scope = callFrame->scope(); -
trunk/Source/JavaScriptCore/interpreter/StackVisitor.h
r172665 r172867 82 82 Arguments* createArguments(); 83 83 Arguments* existingArguments(); 84 VMEntryFrame* vmEntryFrame() const { return m_VMEntryFrame; } 84 85 CallFrame* callFrame() const { return m_callFrame; } 85 86 … … 98 99 size_t m_argumentCountIncludingThis; 99 100 VMEntryFrame* m_VMEntryFrame; 101 VMEntryFrame* m_CallerVMEntryFrame; 100 102 CallFrame* m_callerFrame; 101 103 JSObject* m_callee;
Note:
See TracChangeset
for help on using the changeset viewer.