OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_FRAMES_H_ | 5 #ifndef V8_FRAMES_H_ |
6 #define V8_FRAMES_H_ | 6 #define V8_FRAMES_H_ |
7 | 7 |
8 #include "src/allocation.h" | 8 #include "src/allocation.h" |
9 #include "src/handles.h" | 9 #include "src/handles.h" |
10 #include "src/safepoint-table.h" | 10 #include "src/safepoint-table.h" |
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
322 static const int kArgumentsPointerOffset = TYPED_FRAME_PUSHED_VALUE_OFFSET(2); | 322 static const int kArgumentsPointerOffset = TYPED_FRAME_PUSHED_VALUE_OFFSET(2); |
323 static const int kFixedHeaderBottomOffset = kArgumentsPointerOffset; | 323 static const int kFixedHeaderBottomOffset = kArgumentsPointerOffset; |
324 DEFINE_TYPED_FRAME_SIZES(3); | 324 DEFINE_TYPED_FRAME_SIZES(3); |
325 }; | 325 }; |
326 | 326 |
327 // Behaves like an exit frame but with target and new target args. | 327 // Behaves like an exit frame but with target and new target args. |
328 class BuiltinExitFrameConstants : public CommonFrameConstants { | 328 class BuiltinExitFrameConstants : public CommonFrameConstants { |
329 public: | 329 public: |
330 static const int kNewTargetOffset = kCallerPCOffset + 1 * kPointerSize; | 330 static const int kNewTargetOffset = kCallerPCOffset + 1 * kPointerSize; |
331 static const int kTargetOffset = kNewTargetOffset + 1 * kPointerSize; | 331 static const int kTargetOffset = kNewTargetOffset + 1 * kPointerSize; |
| 332 static const int kArgcOffset = kTargetOffset + 1 * kPointerSize; |
332 }; | 333 }; |
333 | 334 |
334 class InterpreterFrameConstants : public AllStatic { | 335 class InterpreterFrameConstants : public AllStatic { |
335 public: | 336 public: |
336 // Fixed frame includes new.target and bytecode offset. | 337 // Fixed frame includes new.target and bytecode offset. |
337 static const int kFixedFrameSize = | 338 static const int kFixedFrameSize = |
338 StandardFrameConstants::kFixedFrameSize + 3 * kPointerSize; | 339 StandardFrameConstants::kFixedFrameSize + 3 * kPointerSize; |
339 static const int kFixedFrameSizeFromFp = | 340 static const int kFixedFrameSizeFromFp = |
340 StandardFrameConstants::kFixedFrameSizeFromFp + 3 * kPointerSize; | 341 StandardFrameConstants::kFixedFrameSizeFromFp + 3 * kPointerSize; |
341 | 342 |
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
657 // to allow such builtins to appear in stack traces. | 658 // to allow such builtins to appear in stack traces. |
658 class BuiltinExitFrame : public ExitFrame { | 659 class BuiltinExitFrame : public ExitFrame { |
659 public: | 660 public: |
660 Type type() const override { return BUILTIN_EXIT; } | 661 Type type() const override { return BUILTIN_EXIT; } |
661 | 662 |
662 static BuiltinExitFrame* cast(StackFrame* frame) { | 663 static BuiltinExitFrame* cast(StackFrame* frame) { |
663 DCHECK(frame->is_builtin_exit()); | 664 DCHECK(frame->is_builtin_exit()); |
664 return static_cast<BuiltinExitFrame*>(frame); | 665 return static_cast<BuiltinExitFrame*>(frame); |
665 } | 666 } |
666 | 667 |
667 virtual JSFunction* function() const; | 668 JSFunction* function() const; |
| 669 Object* receiver() const; |
| 670 |
| 671 bool IsConstructor() const; |
668 | 672 |
669 protected: | 673 protected: |
670 inline explicit BuiltinExitFrame(StackFrameIteratorBase* iterator); | 674 inline explicit BuiltinExitFrame(StackFrameIteratorBase* iterator); |
671 | 675 |
672 private: | 676 private: |
673 inline Object* function_slot_object() const; | 677 inline Object* target_slot_object() const; |
| 678 inline Object* new_target_slot_object() const; |
| 679 inline Object* receiver_slot_object() const; |
674 | 680 |
675 friend class StackFrameIteratorBase; | 681 friend class StackFrameIteratorBase; |
676 }; | 682 }; |
677 | 683 |
678 class JavaScriptFrame; | 684 class JavaScriptFrame; |
679 | 685 |
680 class FrameSummary BASE_EMBEDDED { | 686 class FrameSummary BASE_EMBEDDED { |
681 public: | 687 public: |
682 // Mode for JavaScriptFrame::Summarize. Exact summary is required to produce | 688 // Mode for JavaScriptFrame::Summarize. Exact summary is required to produce |
683 // an exact stack trace. It will trigger an assertion failure if that is not | 689 // an exact stack trace. It will trigger an assertion failure if that is not |
(...skipping 616 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1300 | 1306 |
1301 | 1307 |
1302 // Reads all frames on the current stack and copies them into the current | 1308 // Reads all frames on the current stack and copies them into the current |
1303 // zone memory. | 1309 // zone memory. |
1304 Vector<StackFrame*> CreateStackMap(Isolate* isolate, Zone* zone); | 1310 Vector<StackFrame*> CreateStackMap(Isolate* isolate, Zone* zone); |
1305 | 1311 |
1306 } // namespace internal | 1312 } // namespace internal |
1307 } // namespace v8 | 1313 } // namespace v8 |
1308 | 1314 |
1309 #endif // V8_FRAMES_H_ | 1315 #endif // V8_FRAMES_H_ |
OLD | NEW |