Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Side by Side Diff: src/frames.h

Issue 1432493003: [turbofan] Fix new.target when a function is inlined to a constructor. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@reland
Patch Set: Test added Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/compiler/linkage.cc ('k') | src/frames.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 358 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 friend class SafeStackFrameIterator; 369 friend class SafeStackFrameIterator;
370 370
371 private: 371 private:
372 void operator=(const StackFrame& original); 372 void operator=(const StackFrame& original);
373 }; 373 };
374 374
375 375
376 // Entry frames are used to enter JavaScript execution from C. 376 // Entry frames are used to enter JavaScript execution from C.
377 class EntryFrame: public StackFrame { 377 class EntryFrame: public StackFrame {
378 public: 378 public:
379 virtual Type type() const { return ENTRY; } 379 Type type() const override { return ENTRY; }
380 380
381 virtual Code* unchecked_code() const; 381 Code* unchecked_code() const override;
382 382
383 // Garbage collection support. 383 // Garbage collection support.
384 virtual void Iterate(ObjectVisitor* v) const; 384 void Iterate(ObjectVisitor* v) const override;
385 385
386 static EntryFrame* cast(StackFrame* frame) { 386 static EntryFrame* cast(StackFrame* frame) {
387 DCHECK(frame->is_entry()); 387 DCHECK(frame->is_entry());
388 return static_cast<EntryFrame*>(frame); 388 return static_cast<EntryFrame*>(frame);
389 } 389 }
390 virtual void SetCallerFp(Address caller_fp); 390 void SetCallerFp(Address caller_fp) override;
391 391
392 protected: 392 protected:
393 inline explicit EntryFrame(StackFrameIteratorBase* iterator); 393 inline explicit EntryFrame(StackFrameIteratorBase* iterator);
394 394
395 // The caller stack pointer for entry frames is always zero. The 395 // The caller stack pointer for entry frames is always zero. The
396 // real information about the caller frame is available through the 396 // real information about the caller frame is available through the
397 // link to the top exit frame. 397 // link to the top exit frame.
398 virtual Address GetCallerStackPointer() const { return 0; } 398 Address GetCallerStackPointer() const override { return 0; }
399 399
400 private: 400 private:
401 virtual void ComputeCallerState(State* state) const; 401 void ComputeCallerState(State* state) const override;
402 virtual Type GetCallerState(State* state) const; 402 Type GetCallerState(State* state) const override;
403 403
404 friend class StackFrameIteratorBase; 404 friend class StackFrameIteratorBase;
405 }; 405 };
406 406
407 407
408 class EntryConstructFrame: public EntryFrame { 408 class EntryConstructFrame: public EntryFrame {
409 public: 409 public:
410 virtual Type type() const { return ENTRY_CONSTRUCT; } 410 Type type() const override { return ENTRY_CONSTRUCT; }
411 411
412 virtual Code* unchecked_code() const; 412 Code* unchecked_code() const override;
413 413
414 static EntryConstructFrame* cast(StackFrame* frame) { 414 static EntryConstructFrame* cast(StackFrame* frame) {
415 DCHECK(frame->is_entry_construct()); 415 DCHECK(frame->is_entry_construct());
416 return static_cast<EntryConstructFrame*>(frame); 416 return static_cast<EntryConstructFrame*>(frame);
417 } 417 }
418 418
419 protected: 419 protected:
420 inline explicit EntryConstructFrame(StackFrameIteratorBase* iterator); 420 inline explicit EntryConstructFrame(StackFrameIteratorBase* iterator);
421 421
422 private: 422 private:
423 friend class StackFrameIteratorBase; 423 friend class StackFrameIteratorBase;
424 }; 424 };
425 425
426 426
427 // Exit frames are used to exit JavaScript execution and go to C. 427 // Exit frames are used to exit JavaScript execution and go to C.
428 class ExitFrame: public StackFrame { 428 class ExitFrame: public StackFrame {
429 public: 429 public:
430 virtual Type type() const { return EXIT; } 430 Type type() const override { return EXIT; }
431 431
432 virtual Code* unchecked_code() const; 432 Code* unchecked_code() const override;
433 433
434 Object*& code_slot() const; 434 Object*& code_slot() const;
435 435
436 // Garbage collection support. 436 // Garbage collection support.
437 virtual void Iterate(ObjectVisitor* v) const; 437 void Iterate(ObjectVisitor* v) const override;
438 438
439 virtual void SetCallerFp(Address caller_fp); 439 void SetCallerFp(Address caller_fp) override;
440 440
441 static ExitFrame* cast(StackFrame* frame) { 441 static ExitFrame* cast(StackFrame* frame) {
442 DCHECK(frame->is_exit()); 442 DCHECK(frame->is_exit());
443 return static_cast<ExitFrame*>(frame); 443 return static_cast<ExitFrame*>(frame);
444 } 444 }
445 445
446 // Compute the state and type of an exit frame given a frame 446 // Compute the state and type of an exit frame given a frame
447 // pointer. Used when constructing the first stack frame seen by an 447 // pointer. Used when constructing the first stack frame seen by an
448 // iterator and the frames following entry frames. 448 // iterator and the frames following entry frames.
449 static Type GetStateForFramePointer(Address fp, State* state); 449 static Type GetStateForFramePointer(Address fp, State* state);
450 static Address ComputeStackPointer(Address fp); 450 static Address ComputeStackPointer(Address fp);
451 static void FillState(Address fp, Address sp, State* state); 451 static void FillState(Address fp, Address sp, State* state);
452 452
453 protected: 453 protected:
454 inline explicit ExitFrame(StackFrameIteratorBase* iterator); 454 inline explicit ExitFrame(StackFrameIteratorBase* iterator);
455 455
456 virtual Address GetCallerStackPointer() const; 456 Address GetCallerStackPointer() const override;
457 457
458 private: 458 private:
459 virtual void ComputeCallerState(State* state) const; 459 void ComputeCallerState(State* state) const override;
460 460
461 friend class StackFrameIteratorBase; 461 friend class StackFrameIteratorBase;
462 }; 462 };
463 463
464 464
465 class StandardFrame: public StackFrame { 465 class StandardFrame: public StackFrame {
466 public: 466 public:
467 // Testers. 467 // Testers.
468 virtual bool is_standard() const { return true; } 468 bool is_standard() const override { return true; }
469 469
470 // Accessors. 470 // Accessors.
471 inline Object* context() const; 471 inline Object* context() const;
472 472
473 // Access the expressions in the stack frame including locals. 473 // Access the expressions in the stack frame including locals.
474 inline Object* GetExpression(int index) const; 474 inline Object* GetExpression(int index) const;
475 inline void SetExpression(int index, Object* value); 475 inline void SetExpression(int index, Object* value);
476 int ComputeExpressionsCount() const; 476 int ComputeExpressionsCount() const;
477 static Object* GetExpression(Address fp, int index); 477 static Object* GetExpression(Address fp, int index);
478 478
479 virtual void SetCallerFp(Address caller_fp); 479 void SetCallerFp(Address caller_fp) override;
480 480
481 static StandardFrame* cast(StackFrame* frame) { 481 static StandardFrame* cast(StackFrame* frame) {
482 DCHECK(frame->is_standard()); 482 DCHECK(frame->is_standard());
483 return static_cast<StandardFrame*>(frame); 483 return static_cast<StandardFrame*>(frame);
484 } 484 }
485 485
486 protected: 486 protected:
487 inline explicit StandardFrame(StackFrameIteratorBase* iterator); 487 inline explicit StandardFrame(StackFrameIteratorBase* iterator);
488 488
489 virtual void ComputeCallerState(State* state) const; 489 void ComputeCallerState(State* state) const override;
490 490
491 // Accessors. 491 // Accessors.
492 inline Address caller_fp() const; 492 inline Address caller_fp() const;
493 inline Address caller_pc() const; 493 inline Address caller_pc() const;
494 494
495 // Computes the address of the PC field in the standard frame given 495 // Computes the address of the PC field in the standard frame given
496 // by the provided frame pointer. 496 // by the provided frame pointer.
497 static inline Address ComputePCAddress(Address fp); 497 static inline Address ComputePCAddress(Address fp);
498 498
499 // Computes the address of the constant pool field in the standard 499 // Computes the address of the constant pool field in the standard
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
543 Handle<Object> receiver_; 543 Handle<Object> receiver_;
544 Handle<JSFunction> function_; 544 Handle<JSFunction> function_;
545 Handle<Code> code_; 545 Handle<Code> code_;
546 int offset_; 546 int offset_;
547 bool is_constructor_; 547 bool is_constructor_;
548 }; 548 };
549 549
550 550
551 class JavaScriptFrame: public StandardFrame { 551 class JavaScriptFrame: public StandardFrame {
552 public: 552 public:
553 virtual Type type() const { return JAVA_SCRIPT; } 553 Type type() const override { return JAVA_SCRIPT; }
554 554
555 // Accessors. 555 // Accessors.
556 inline JSFunction* function() const; 556 inline JSFunction* function() const;
557 inline Object* receiver() const; 557 inline Object* receiver() const;
558 inline void set_receiver(Object* value); 558 inline void set_receiver(Object* value);
559 559
560 // Access the parameters. 560 // Access the parameters.
561 inline Address GetParameterSlot(int index) const; 561 inline Address GetParameterSlot(int index) const;
562 inline Object* GetParameter(int index) const; 562 inline Object* GetParameter(int index) const;
563 inline int ComputeParametersCount() const { 563 inline int ComputeParametersCount() const {
(...skipping 10 matching lines...) Expand all
574 void RestoreOperandStack(FixedArray* store); 574 void RestoreOperandStack(FixedArray* store);
575 575
576 // Debugger access. 576 // Debugger access.
577 void SetParameterValue(int index, Object* value) const; 577 void SetParameterValue(int index, Object* value) const;
578 578
579 // Check if this frame is a constructor frame invoked through 'new'. 579 // Check if this frame is a constructor frame invoked through 'new'.
580 bool IsConstructor() const; 580 bool IsConstructor() const;
581 581
582 // Determines whether this frame includes inlined activations. To get details 582 // Determines whether this frame includes inlined activations. To get details
583 // about the inlined frames use {GetFunctions} and {Summarize}. 583 // about the inlined frames use {GetFunctions} and {Summarize}.
584 bool HasInlinedFrames(); 584 bool HasInlinedFrames() const;
585 585
586 // Returns the original constructor function that was used in the constructor 586 // Returns the original constructor function that was used in the constructor
587 // call to this frame. Note that this is only valid on constructor frames. 587 // call to this frame. Note that this is only valid on constructor frames.
588 Object* GetOriginalConstructor() const; 588 Object* GetOriginalConstructor() const;
589 589
590 // Check if this frame has "adapted" arguments in the sense that the 590 // Check if this frame has "adapted" arguments in the sense that the
591 // actual passed arguments are available in an arguments adaptor 591 // actual passed arguments are available in an arguments adaptor
592 // frame below it on the stack. 592 // frame below it on the stack.
593 inline bool has_adapted_arguments() const; 593 inline bool has_adapted_arguments() const;
594 int GetArgumentsLength() const; 594 int GetArgumentsLength() const;
595 595
596 // Garbage collection support. 596 // Garbage collection support.
597 virtual void Iterate(ObjectVisitor* v) const; 597 void Iterate(ObjectVisitor* v) const override;
598 598
599 // Printing support. 599 // Printing support.
600 virtual void Print(StringStream* accumulator, 600 void Print(StringStream* accumulator, PrintMode mode,
601 PrintMode mode, 601 int index) const override;
602 int index) const;
603 602
604 // Determine the code for the frame. 603 // Determine the code for the frame.
605 virtual Code* unchecked_code() const; 604 Code* unchecked_code() const override;
606 605
607 // Return a list with JSFunctions of this frame. 606 // Return a list with JSFunctions of this frame.
608 virtual void GetFunctions(List<JSFunction*>* functions); 607 virtual void GetFunctions(List<JSFunction*>* functions) const;
609 608
610 // Build a list with summaries for this frame including all inlined frames. 609 // Build a list with summaries for this frame including all inlined frames.
611 virtual void Summarize(List<FrameSummary>* frames); 610 virtual void Summarize(List<FrameSummary>* frames);
612 611
613 // Lookup exception handler for current {pc}, returns -1 if none found. Also 612 // Lookup exception handler for current {pc}, returns -1 if none found. Also
614 // returns the expected number of stack slots at the handler site. 613 // returns the expected number of stack slots at the handler site.
615 virtual int LookupExceptionHandlerInTable( 614 virtual int LookupExceptionHandlerInTable(
616 int* stack_slots, HandlerTable::CatchPrediction* prediction); 615 int* stack_slots, HandlerTable::CatchPrediction* prediction);
617 616
618 // Architecture-specific register description. 617 // Architecture-specific register description.
619 static Register fp_register(); 618 static Register fp_register();
620 static Register context_register(); 619 static Register context_register();
621 static Register constant_pool_pointer_register(); 620 static Register constant_pool_pointer_register();
622 621
623 static JavaScriptFrame* cast(StackFrame* frame) { 622 static JavaScriptFrame* cast(StackFrame* frame) {
624 DCHECK(frame->is_java_script()); 623 DCHECK(frame->is_java_script());
625 return static_cast<JavaScriptFrame*>(frame); 624 return static_cast<JavaScriptFrame*>(frame);
626 } 625 }
627 626
628 static void PrintFunctionAndOffset(JSFunction* function, Code* code, 627 static void PrintFunctionAndOffset(JSFunction* function, Code* code,
629 Address pc, FILE* file, 628 Address pc, FILE* file,
630 bool print_line_number); 629 bool print_line_number);
631 630
632 static void PrintTop(Isolate* isolate, FILE* file, bool print_args, 631 static void PrintTop(Isolate* isolate, FILE* file, bool print_args,
633 bool print_line_number); 632 bool print_line_number);
634 633
635 protected: 634 protected:
636 inline explicit JavaScriptFrame(StackFrameIteratorBase* iterator); 635 inline explicit JavaScriptFrame(StackFrameIteratorBase* iterator);
637 636
638 virtual Address GetCallerStackPointer() const; 637 Address GetCallerStackPointer() const override;
639 638
640 virtual int GetNumberOfIncomingArguments() const; 639 virtual int GetNumberOfIncomingArguments() const;
641 640
642 // Garbage collection support. Iterates over incoming arguments, 641 // Garbage collection support. Iterates over incoming arguments,
643 // receiver, and any callee-saved registers. 642 // receiver, and any callee-saved registers.
644 void IterateArguments(ObjectVisitor* v) const; 643 void IterateArguments(ObjectVisitor* v) const;
645 644
646 private: 645 private:
647 inline Object* function_slot_object() const; 646 inline Object* function_slot_object() const;
648 647
649 friend class StackFrameIteratorBase; 648 friend class StackFrameIteratorBase;
650 }; 649 };
651 650
652 651
653 class StubFrame : public StandardFrame { 652 class StubFrame : public StandardFrame {
654 public: 653 public:
655 virtual Type type() const { return STUB; } 654 Type type() const override { return STUB; }
656 655
657 // GC support. 656 // GC support.
658 virtual void Iterate(ObjectVisitor* v) const; 657 void Iterate(ObjectVisitor* v) const override;
659 658
660 // Determine the code for the frame. 659 // Determine the code for the frame.
661 virtual Code* unchecked_code() const; 660 Code* unchecked_code() const override;
662 661
663 protected: 662 protected:
664 inline explicit StubFrame(StackFrameIteratorBase* iterator); 663 inline explicit StubFrame(StackFrameIteratorBase* iterator);
665 664
666 virtual Address GetCallerStackPointer() const; 665 Address GetCallerStackPointer() const override;
667 666
668 virtual int GetNumberOfIncomingArguments() const; 667 virtual int GetNumberOfIncomingArguments() const;
669 668
670 friend class StackFrameIteratorBase; 669 friend class StackFrameIteratorBase;
671 }; 670 };
672 671
673 672
674 class OptimizedFrame : public JavaScriptFrame { 673 class OptimizedFrame : public JavaScriptFrame {
675 public: 674 public:
676 virtual Type type() const { return OPTIMIZED; } 675 Type type() const override { return OPTIMIZED; }
677 676
678 // GC support. 677 // GC support.
679 virtual void Iterate(ObjectVisitor* v) const; 678 void Iterate(ObjectVisitor* v) const override;
680 679
681 // Return a list with JSFunctions of this frame. 680 // Return a list with JSFunctions of this frame.
682 // The functions are ordered bottom-to-top (i.e. functions.last() 681 // The functions are ordered bottom-to-top (i.e. functions.last()
683 // is the top-most activation) 682 // is the top-most activation)
684 virtual void GetFunctions(List<JSFunction*>* functions); 683 void GetFunctions(List<JSFunction*>* functions) const override;
685 684
686 virtual void Summarize(List<FrameSummary>* frames); 685 void Summarize(List<FrameSummary>* frames) override;
687 686
688 // Lookup exception handler for current {pc}, returns -1 if none found. Also 687 // Lookup exception handler for current {pc}, returns -1 if none found. Also
689 // returns the expected number of stack slots at the handler site. 688 // returns the expected number of stack slots at the handler site.
690 virtual int LookupExceptionHandlerInTable( 689 int LookupExceptionHandlerInTable(
691 int* stack_slots, HandlerTable::CatchPrediction* prediction); 690 int* stack_slots, HandlerTable::CatchPrediction* prediction) override;
692 691
693 DeoptimizationInputData* GetDeoptimizationData(int* deopt_index); 692 DeoptimizationInputData* GetDeoptimizationData(int* deopt_index) const;
694 693
695 static int StackSlotOffsetRelativeToFp(int slot_index); 694 static int StackSlotOffsetRelativeToFp(int slot_index);
696 695
697 protected: 696 protected:
698 inline explicit OptimizedFrame(StackFrameIteratorBase* iterator); 697 inline explicit OptimizedFrame(StackFrameIteratorBase* iterator);
699 698
700 private: 699 private:
701 friend class StackFrameIteratorBase; 700 friend class StackFrameIteratorBase;
702 701
703 Object* StackSlotAt(int index) const; 702 Object* StackSlotAt(int index) const;
704 }; 703 };
705 704
706 705
707 class InterpretedFrame : public JavaScriptFrame { 706 class InterpretedFrame : public JavaScriptFrame {
708 virtual Type type() const { return INTERPRETED; } 707 Type type() const override { return INTERPRETED; }
709 708
710 protected: 709 protected:
711 inline explicit InterpretedFrame(StackFrameIteratorBase* iterator); 710 inline explicit InterpretedFrame(StackFrameIteratorBase* iterator);
712 711
713 private: 712 private:
714 friend class StackFrameIteratorBase; 713 friend class StackFrameIteratorBase;
715 }; 714 };
716 715
717 716
718 // Arguments adaptor frames are automatically inserted below 717 // Arguments adaptor frames are automatically inserted below
719 // JavaScript frames when the actual number of parameters does not 718 // JavaScript frames when the actual number of parameters does not
720 // match the formal number of parameters. 719 // match the formal number of parameters.
721 class ArgumentsAdaptorFrame: public JavaScriptFrame { 720 class ArgumentsAdaptorFrame: public JavaScriptFrame {
722 public: 721 public:
723 virtual Type type() const { return ARGUMENTS_ADAPTOR; } 722 Type type() const override { return ARGUMENTS_ADAPTOR; }
724 723
725 // Determine the code for the frame. 724 // Determine the code for the frame.
726 virtual Code* unchecked_code() const; 725 Code* unchecked_code() const override;
727 726
728 static ArgumentsAdaptorFrame* cast(StackFrame* frame) { 727 static ArgumentsAdaptorFrame* cast(StackFrame* frame) {
729 DCHECK(frame->is_arguments_adaptor()); 728 DCHECK(frame->is_arguments_adaptor());
730 return static_cast<ArgumentsAdaptorFrame*>(frame); 729 return static_cast<ArgumentsAdaptorFrame*>(frame);
731 } 730 }
732 731
733 // Printing support. 732 // Printing support.
734 virtual void Print(StringStream* accumulator, 733 void Print(StringStream* accumulator, PrintMode mode,
735 PrintMode mode, 734 int index) const override;
736 int index) const;
737 735
738 protected: 736 protected:
739 inline explicit ArgumentsAdaptorFrame(StackFrameIteratorBase* iterator); 737 inline explicit ArgumentsAdaptorFrame(StackFrameIteratorBase* iterator);
740 738
741 virtual int GetNumberOfIncomingArguments() const; 739 int GetNumberOfIncomingArguments() const override;
742 740
743 virtual Address GetCallerStackPointer() const; 741 Address GetCallerStackPointer() const override;
744 742
745 private: 743 private:
746 friend class StackFrameIteratorBase; 744 friend class StackFrameIteratorBase;
747 }; 745 };
748 746
749 747
750 class InternalFrame: public StandardFrame { 748 class InternalFrame: public StandardFrame {
751 public: 749 public:
752 virtual Type type() const { return INTERNAL; } 750 Type type() const override { return INTERNAL; }
753 751
754 // Garbage collection support. 752 // Garbage collection support.
755 virtual void Iterate(ObjectVisitor* v) const; 753 void Iterate(ObjectVisitor* v) const override;
756 754
757 // Determine the code for the frame. 755 // Determine the code for the frame.
758 virtual Code* unchecked_code() const; 756 Code* unchecked_code() const override;
759 757
760 static InternalFrame* cast(StackFrame* frame) { 758 static InternalFrame* cast(StackFrame* frame) {
761 DCHECK(frame->is_internal()); 759 DCHECK(frame->is_internal());
762 return static_cast<InternalFrame*>(frame); 760 return static_cast<InternalFrame*>(frame);
763 } 761 }
764 762
765 protected: 763 protected:
766 inline explicit InternalFrame(StackFrameIteratorBase* iterator); 764 inline explicit InternalFrame(StackFrameIteratorBase* iterator);
767 765
768 virtual Address GetCallerStackPointer() const; 766 Address GetCallerStackPointer() const override;
769 767
770 private: 768 private:
771 friend class StackFrameIteratorBase; 769 friend class StackFrameIteratorBase;
772 }; 770 };
773 771
774 772
775 class StubFailureTrampolineFrame: public StandardFrame { 773 class StubFailureTrampolineFrame: public StandardFrame {
776 public: 774 public:
777 // sizeof(Arguments) - sizeof(Arguments*) is 3 * kPointerSize), but the 775 // sizeof(Arguments) - sizeof(Arguments*) is 3 * kPointerSize), but the
778 // presubmit script complains about using sizeof() on a type. 776 // presubmit script complains about using sizeof() on a type.
779 static const int kFirstRegisterParameterFrameOffset = 777 static const int kFirstRegisterParameterFrameOffset =
780 StandardFrameConstants::kMarkerOffset - 3 * kPointerSize; 778 StandardFrameConstants::kMarkerOffset - 3 * kPointerSize;
781 779
782 static const int kCallerStackParameterCountFrameOffset = 780 static const int kCallerStackParameterCountFrameOffset =
783 StandardFrameConstants::kMarkerOffset - 2 * kPointerSize; 781 StandardFrameConstants::kMarkerOffset - 2 * kPointerSize;
784 782
785 virtual Type type() const { return STUB_FAILURE_TRAMPOLINE; } 783 Type type() const override { return STUB_FAILURE_TRAMPOLINE; }
786 784
787 // Get the code associated with this frame. 785 // Get the code associated with this frame.
788 // This method could be called during marking phase of GC. 786 // This method could be called during marking phase of GC.
789 virtual Code* unchecked_code() const; 787 Code* unchecked_code() const override;
790 788
791 virtual void Iterate(ObjectVisitor* v) const; 789 void Iterate(ObjectVisitor* v) const override;
792 790
793 // Architecture-specific register description. 791 // Architecture-specific register description.
794 static Register fp_register(); 792 static Register fp_register();
795 static Register context_register(); 793 static Register context_register();
796 static Register constant_pool_pointer_register(); 794 static Register constant_pool_pointer_register();
797 795
798 protected: 796 protected:
799 inline explicit StubFailureTrampolineFrame( 797 inline explicit StubFailureTrampolineFrame(
800 StackFrameIteratorBase* iterator); 798 StackFrameIteratorBase* iterator);
801 799
802 virtual Address GetCallerStackPointer() const; 800 Address GetCallerStackPointer() const override;
803 801
804 private: 802 private:
805 friend class StackFrameIteratorBase; 803 friend class StackFrameIteratorBase;
806 }; 804 };
807 805
808 806
809 // Construct frames are special trampoline frames introduced to handle 807 // Construct frames are special trampoline frames introduced to handle
810 // function invocations through 'new'. 808 // function invocations through 'new'.
811 class ConstructFrame: public InternalFrame { 809 class ConstructFrame: public InternalFrame {
812 public: 810 public:
813 virtual Type type() const { return CONSTRUCT; } 811 Type type() const override { return CONSTRUCT; }
814 812
815 static ConstructFrame* cast(StackFrame* frame) { 813 static ConstructFrame* cast(StackFrame* frame) {
816 DCHECK(frame->is_construct()); 814 DCHECK(frame->is_construct());
817 return static_cast<ConstructFrame*>(frame); 815 return static_cast<ConstructFrame*>(frame);
818 } 816 }
819 817
820 protected: 818 protected:
821 inline explicit ConstructFrame(StackFrameIteratorBase* iterator); 819 inline explicit ConstructFrame(StackFrameIteratorBase* iterator);
822 820
823 private: 821 private:
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
960 958
961 959
962 // Reads all frames on the current stack and copies them into the current 960 // Reads all frames on the current stack and copies them into the current
963 // zone memory. 961 // zone memory.
964 Vector<StackFrame*> CreateStackMap(Isolate* isolate, Zone* zone); 962 Vector<StackFrame*> CreateStackMap(Isolate* isolate, Zone* zone);
965 963
966 } // namespace internal 964 } // namespace internal
967 } // namespace v8 965 } // namespace v8
968 966
969 #endif // V8_FRAMES_H_ 967 #endif // V8_FRAMES_H_
OLDNEW
« no previous file with comments | « src/compiler/linkage.cc ('k') | src/frames.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698