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

Side by Side Diff: src/ast.h

Issue 10886010: Slightly simplify declaration of node types. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 8 years, 3 months 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | 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 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 151
152 152
153 // Typedef only introduced to avoid unreadable code. 153 // Typedef only introduced to avoid unreadable code.
154 // Please do appreciate the required space in "> >". 154 // Please do appreciate the required space in "> >".
155 typedef ZoneList<Handle<String> > ZoneStringList; 155 typedef ZoneList<Handle<String> > ZoneStringList;
156 typedef ZoneList<Handle<Object> > ZoneObjectList; 156 typedef ZoneList<Handle<Object> > ZoneObjectList;
157 157
158 158
159 #define DECLARE_NODE_TYPE(type) \ 159 #define DECLARE_NODE_TYPE(type) \
160 virtual void Accept(AstVisitor* v); \ 160 virtual void Accept(AstVisitor* v); \
161 virtual AstNode::Type node_type() const { return AstNode::k##type; } 161 virtual AstNode::Type node_type() const { return AstNode::k##type; } \
162 template<class> friend class AstNodeFactory;
162 163
163 164
164 enum AstPropertiesFlag { 165 enum AstPropertiesFlag {
165 kDontInline, 166 kDontInline,
166 kDontOptimize, 167 kDontOptimize,
167 kDontSelfOptimize, 168 kDontSelfOptimize,
168 kDontSoftInline, 169 kDontSoftInline,
169 kDontCache 170 kDontCache
170 }; 171 };
171 172
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
412 statements_.Add(statement, zone); 413 statements_.Add(statement, zone);
413 } 414 }
414 415
415 ZoneList<Statement*>* statements() { return &statements_; } 416 ZoneList<Statement*>* statements() { return &statements_; }
416 bool is_initializer_block() const { return is_initializer_block_; } 417 bool is_initializer_block() const { return is_initializer_block_; }
417 418
418 Scope* scope() const { return scope_; } 419 Scope* scope() const { return scope_; }
419 void set_scope(Scope* scope) { scope_ = scope; } 420 void set_scope(Scope* scope) { scope_ = scope; }
420 421
421 protected: 422 protected:
422 template<class> friend class AstNodeFactory;
423
424 Block(Isolate* isolate, 423 Block(Isolate* isolate,
425 ZoneStringList* labels, 424 ZoneStringList* labels,
426 int capacity, 425 int capacity,
427 bool is_initializer_block, 426 bool is_initializer_block,
428 Zone* zone) 427 Zone* zone)
429 : BreakableStatement(isolate, labels, TARGET_FOR_NAMED_ONLY), 428 : BreakableStatement(isolate, labels, TARGET_FOR_NAMED_ONLY),
430 statements_(capacity, zone), 429 statements_(capacity, zone),
431 is_initializer_block_(is_initializer_block), 430 is_initializer_block_(is_initializer_block),
432 scope_(NULL) { 431 scope_(NULL) {
433 } 432 }
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 470
472 class VariableDeclaration: public Declaration { 471 class VariableDeclaration: public Declaration {
473 public: 472 public:
474 DECLARE_NODE_TYPE(VariableDeclaration) 473 DECLARE_NODE_TYPE(VariableDeclaration)
475 474
476 virtual InitializationFlag initialization() const { 475 virtual InitializationFlag initialization() const {
477 return mode() == VAR ? kCreatedInitialized : kNeedsInitialization; 476 return mode() == VAR ? kCreatedInitialized : kNeedsInitialization;
478 } 477 }
479 478
480 protected: 479 protected:
481 template<class> friend class AstNodeFactory;
482
483 VariableDeclaration(VariableProxy* proxy, 480 VariableDeclaration(VariableProxy* proxy,
484 VariableMode mode, 481 VariableMode mode,
485 Scope* scope) 482 Scope* scope)
486 : Declaration(proxy, mode, scope) { 483 : Declaration(proxy, mode, scope) {
487 } 484 }
488 }; 485 };
489 486
490 487
491 class FunctionDeclaration: public Declaration { 488 class FunctionDeclaration: public Declaration {
492 public: 489 public:
493 DECLARE_NODE_TYPE(FunctionDeclaration) 490 DECLARE_NODE_TYPE(FunctionDeclaration)
494 491
495 FunctionLiteral* fun() const { return fun_; } 492 FunctionLiteral* fun() const { return fun_; }
496 virtual InitializationFlag initialization() const { 493 virtual InitializationFlag initialization() const {
497 return kCreatedInitialized; 494 return kCreatedInitialized;
498 } 495 }
499 virtual bool IsInlineable() const; 496 virtual bool IsInlineable() const;
500 497
501 protected: 498 protected:
502 template<class> friend class AstNodeFactory;
503
504 FunctionDeclaration(VariableProxy* proxy, 499 FunctionDeclaration(VariableProxy* proxy,
505 VariableMode mode, 500 VariableMode mode,
506 FunctionLiteral* fun, 501 FunctionLiteral* fun,
507 Scope* scope) 502 Scope* scope)
508 : Declaration(proxy, mode, scope), 503 : Declaration(proxy, mode, scope),
509 fun_(fun) { 504 fun_(fun) {
510 // At the moment there are no "const functions" in JavaScript... 505 // At the moment there are no "const functions" in JavaScript...
511 ASSERT(mode == VAR || mode == LET); 506 ASSERT(mode == VAR || mode == LET);
512 ASSERT(fun != NULL); 507 ASSERT(fun != NULL);
513 } 508 }
514 509
515 private: 510 private:
516 FunctionLiteral* fun_; 511 FunctionLiteral* fun_;
517 }; 512 };
518 513
519 514
520 class ModuleDeclaration: public Declaration { 515 class ModuleDeclaration: public Declaration {
521 public: 516 public:
522 DECLARE_NODE_TYPE(ModuleDeclaration) 517 DECLARE_NODE_TYPE(ModuleDeclaration)
523 518
524 Module* module() const { return module_; } 519 Module* module() const { return module_; }
525 virtual InitializationFlag initialization() const { 520 virtual InitializationFlag initialization() const {
526 return kCreatedInitialized; 521 return kCreatedInitialized;
527 } 522 }
528 523
529 protected: 524 protected:
530 template<class> friend class AstNodeFactory;
531
532 ModuleDeclaration(VariableProxy* proxy, 525 ModuleDeclaration(VariableProxy* proxy,
533 Module* module, 526 Module* module,
534 Scope* scope) 527 Scope* scope)
535 : Declaration(proxy, LET, scope), 528 : Declaration(proxy, LET, scope),
536 module_(module) { 529 module_(module) {
537 } 530 }
538 531
539 private: 532 private:
540 Module* module_; 533 Module* module_;
541 }; 534 };
542 535
543 536
544 class ImportDeclaration: public Declaration { 537 class ImportDeclaration: public Declaration {
545 public: 538 public:
546 DECLARE_NODE_TYPE(ImportDeclaration) 539 DECLARE_NODE_TYPE(ImportDeclaration)
547 540
548 Module* module() const { return module_; } 541 Module* module() const { return module_; }
549 virtual InitializationFlag initialization() const { 542 virtual InitializationFlag initialization() const {
550 return kCreatedInitialized; 543 return kCreatedInitialized;
551 } 544 }
552 545
553 protected: 546 protected:
554 template<class> friend class AstNodeFactory;
555
556 ImportDeclaration(VariableProxy* proxy, 547 ImportDeclaration(VariableProxy* proxy,
557 Module* module, 548 Module* module,
558 Scope* scope) 549 Scope* scope)
559 : Declaration(proxy, LET, scope), 550 : Declaration(proxy, LET, scope),
560 module_(module) { 551 module_(module) {
561 } 552 }
562 553
563 private: 554 private:
564 Module* module_; 555 Module* module_;
565 }; 556 };
566 557
567 558
568 class ExportDeclaration: public Declaration { 559 class ExportDeclaration: public Declaration {
569 public: 560 public:
570 DECLARE_NODE_TYPE(ExportDeclaration) 561 DECLARE_NODE_TYPE(ExportDeclaration)
571 562
572 virtual InitializationFlag initialization() const { 563 virtual InitializationFlag initialization() const {
573 return kCreatedInitialized; 564 return kCreatedInitialized;
574 } 565 }
575 566
576 protected: 567 protected:
577 template<class> friend class AstNodeFactory;
578
579 ExportDeclaration(VariableProxy* proxy, Scope* scope) 568 ExportDeclaration(VariableProxy* proxy, Scope* scope)
580 : Declaration(proxy, LET, scope) {} 569 : Declaration(proxy, LET, scope) {}
581 }; 570 };
582 571
583 572
584 class Module: public AstNode { 573 class Module: public AstNode {
585 public: 574 public:
586 Interface* interface() const { return interface_; } 575 Interface* interface() const { return interface_; }
587 Block* body() const { return body_; } 576 Block* body() const { return body_; }
588 577
589 protected: 578 protected:
590 explicit Module(Zone* zone) 579 explicit Module(Zone* zone)
591 : interface_(Interface::NewModule(zone)), 580 : interface_(Interface::NewModule(zone)),
592 body_(NULL) {} 581 body_(NULL) {}
593 explicit Module(Interface* interface, Block* body = NULL) 582 explicit Module(Interface* interface, Block* body = NULL)
594 : interface_(interface), 583 : interface_(interface),
595 body_(body) {} 584 body_(body) {}
596 585
597 private: 586 private:
598 Interface* interface_; 587 Interface* interface_;
599 Block* body_; 588 Block* body_;
600 }; 589 };
601 590
602 591
603 class ModuleLiteral: public Module { 592 class ModuleLiteral: public Module {
604 public: 593 public:
605 DECLARE_NODE_TYPE(ModuleLiteral) 594 DECLARE_NODE_TYPE(ModuleLiteral)
606 595
607 protected: 596 protected:
608 template<class> friend class AstNodeFactory;
609
610 ModuleLiteral(Block* body, Interface* interface) : Module(interface, body) {} 597 ModuleLiteral(Block* body, Interface* interface) : Module(interface, body) {}
611 }; 598 };
612 599
613 600
614 class ModuleVariable: public Module { 601 class ModuleVariable: public Module {
615 public: 602 public:
616 DECLARE_NODE_TYPE(ModuleVariable) 603 DECLARE_NODE_TYPE(ModuleVariable)
617 604
618 VariableProxy* proxy() const { return proxy_; } 605 VariableProxy* proxy() const { return proxy_; }
619 606
620 protected: 607 protected:
621 template<class> friend class AstNodeFactory;
622
623 inline explicit ModuleVariable(VariableProxy* proxy); 608 inline explicit ModuleVariable(VariableProxy* proxy);
624 609
625 private: 610 private:
626 VariableProxy* proxy_; 611 VariableProxy* proxy_;
627 }; 612 };
628 613
629 614
630 class ModulePath: public Module { 615 class ModulePath: public Module {
631 public: 616 public:
632 DECLARE_NODE_TYPE(ModulePath) 617 DECLARE_NODE_TYPE(ModulePath)
633 618
634 Module* module() const { return module_; } 619 Module* module() const { return module_; }
635 Handle<String> name() const { return name_; } 620 Handle<String> name() const { return name_; }
636 621
637 protected: 622 protected:
638 template<class> friend class AstNodeFactory;
639
640 ModulePath(Module* module, Handle<String> name, Zone* zone) 623 ModulePath(Module* module, Handle<String> name, Zone* zone)
641 : Module(zone), 624 : Module(zone),
642 module_(module), 625 module_(module),
643 name_(name) { 626 name_(name) {
644 } 627 }
645 628
646 private: 629 private:
647 Module* module_; 630 Module* module_;
648 Handle<String> name_; 631 Handle<String> name_;
649 }; 632 };
650 633
651 634
652 class ModuleUrl: public Module { 635 class ModuleUrl: public Module {
653 public: 636 public:
654 DECLARE_NODE_TYPE(ModuleUrl) 637 DECLARE_NODE_TYPE(ModuleUrl)
655 638
656 Handle<String> url() const { return url_; } 639 Handle<String> url() const { return url_; }
657 640
658 protected: 641 protected:
659 template<class> friend class AstNodeFactory;
660
661 ModuleUrl(Handle<String> url, Zone* zone) 642 ModuleUrl(Handle<String> url, Zone* zone)
662 : Module(zone), url_(url) { 643 : Module(zone), url_(url) {
663 } 644 }
664 645
665 private: 646 private:
666 Handle<String> url_; 647 Handle<String> url_;
667 }; 648 };
668 649
669 650
670 class IterationStatement: public BreakableStatement { 651 class IterationStatement: public BreakableStatement {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
713 // Position where condition expression starts. We need it to make 694 // Position where condition expression starts. We need it to make
714 // the loop's condition a breakable location. 695 // the loop's condition a breakable location.
715 int condition_position() { return condition_position_; } 696 int condition_position() { return condition_position_; }
716 void set_condition_position(int pos) { condition_position_ = pos; } 697 void set_condition_position(int pos) { condition_position_ = pos; }
717 698
718 virtual BailoutId ContinueId() const { return continue_id_; } 699 virtual BailoutId ContinueId() const { return continue_id_; }
719 virtual BailoutId StackCheckId() const { return back_edge_id_; } 700 virtual BailoutId StackCheckId() const { return back_edge_id_; }
720 BailoutId BackEdgeId() const { return back_edge_id_; } 701 BailoutId BackEdgeId() const { return back_edge_id_; }
721 702
722 protected: 703 protected:
723 template<class> friend class AstNodeFactory;
724
725 DoWhileStatement(Isolate* isolate, ZoneStringList* labels) 704 DoWhileStatement(Isolate* isolate, ZoneStringList* labels)
726 : IterationStatement(isolate, labels), 705 : IterationStatement(isolate, labels),
727 cond_(NULL), 706 cond_(NULL),
728 condition_position_(-1), 707 condition_position_(-1),
729 continue_id_(GetNextId(isolate)), 708 continue_id_(GetNextId(isolate)),
730 back_edge_id_(GetNextId(isolate)) { 709 back_edge_id_(GetNextId(isolate)) {
731 } 710 }
732 711
733 private: 712 private:
734 Expression* cond_; 713 Expression* cond_;
(...skipping 18 matching lines...) Expand all
753 } 732 }
754 void set_may_have_function_literal(bool value) { 733 void set_may_have_function_literal(bool value) {
755 may_have_function_literal_ = value; 734 may_have_function_literal_ = value;
756 } 735 }
757 736
758 virtual BailoutId ContinueId() const { return EntryId(); } 737 virtual BailoutId ContinueId() const { return EntryId(); }
759 virtual BailoutId StackCheckId() const { return body_id_; } 738 virtual BailoutId StackCheckId() const { return body_id_; }
760 BailoutId BodyId() const { return body_id_; } 739 BailoutId BodyId() const { return body_id_; }
761 740
762 protected: 741 protected:
763 template<class> friend class AstNodeFactory;
764
765 WhileStatement(Isolate* isolate, ZoneStringList* labels) 742 WhileStatement(Isolate* isolate, ZoneStringList* labels)
766 : IterationStatement(isolate, labels), 743 : IterationStatement(isolate, labels),
767 cond_(NULL), 744 cond_(NULL),
768 may_have_function_literal_(true), 745 may_have_function_literal_(true),
769 body_id_(GetNextId(isolate)) { 746 body_id_(GetNextId(isolate)) {
770 } 747 }
771 748
772 private: 749 private:
773 Expression* cond_; 750 Expression* cond_;
774 // True if there is a function literal subexpression in the condition. 751 // True if there is a function literal subexpression in the condition.
(...skipping 29 matching lines...) Expand all
804 781
805 virtual BailoutId ContinueId() const { return continue_id_; } 782 virtual BailoutId ContinueId() const { return continue_id_; }
806 virtual BailoutId StackCheckId() const { return body_id_; } 783 virtual BailoutId StackCheckId() const { return body_id_; }
807 BailoutId BodyId() const { return body_id_; } 784 BailoutId BodyId() const { return body_id_; }
808 785
809 bool is_fast_smi_loop() { return loop_variable_ != NULL; } 786 bool is_fast_smi_loop() { return loop_variable_ != NULL; }
810 Variable* loop_variable() { return loop_variable_; } 787 Variable* loop_variable() { return loop_variable_; }
811 void set_loop_variable(Variable* var) { loop_variable_ = var; } 788 void set_loop_variable(Variable* var) { loop_variable_ = var; }
812 789
813 protected: 790 protected:
814 template<class> friend class AstNodeFactory;
815
816 ForStatement(Isolate* isolate, ZoneStringList* labels) 791 ForStatement(Isolate* isolate, ZoneStringList* labels)
817 : IterationStatement(isolate, labels), 792 : IterationStatement(isolate, labels),
818 init_(NULL), 793 init_(NULL),
819 cond_(NULL), 794 cond_(NULL),
820 next_(NULL), 795 next_(NULL),
821 may_have_function_literal_(true), 796 may_have_function_literal_(true),
822 loop_variable_(NULL), 797 loop_variable_(NULL),
823 continue_id_(GetNextId(isolate)), 798 continue_id_(GetNextId(isolate)),
824 body_id_(GetNextId(isolate)) { 799 body_id_(GetNextId(isolate)) {
825 } 800 }
(...skipping 24 matching lines...) Expand all
850 Expression* enumerable() const { return enumerable_; } 825 Expression* enumerable() const { return enumerable_; }
851 826
852 virtual BailoutId ContinueId() const { return EntryId(); } 827 virtual BailoutId ContinueId() const { return EntryId(); }
853 virtual BailoutId StackCheckId() const { return body_id_; } 828 virtual BailoutId StackCheckId() const { return body_id_; }
854 BailoutId BodyId() const { return body_id_; } 829 BailoutId BodyId() const { return body_id_; }
855 BailoutId PrepareId() const { return prepare_id_; } 830 BailoutId PrepareId() const { return prepare_id_; }
856 831
857 TypeFeedbackId ForInFeedbackId() const { return reuse(PrepareId()); } 832 TypeFeedbackId ForInFeedbackId() const { return reuse(PrepareId()); }
858 833
859 protected: 834 protected:
860 template<class> friend class AstNodeFactory;
861
862 ForInStatement(Isolate* isolate, ZoneStringList* labels) 835 ForInStatement(Isolate* isolate, ZoneStringList* labels)
863 : IterationStatement(isolate, labels), 836 : IterationStatement(isolate, labels),
864 each_(NULL), 837 each_(NULL),
865 enumerable_(NULL), 838 enumerable_(NULL),
866 body_id_(GetNextId(isolate)), 839 body_id_(GetNextId(isolate)),
867 prepare_id_(GetNextId(isolate)) { 840 prepare_id_(GetNextId(isolate)) {
868 } 841 }
869 842
870 private: 843 private:
871 Expression* each_; 844 Expression* each_;
872 Expression* enumerable_; 845 Expression* enumerable_;
873 const BailoutId body_id_; 846 const BailoutId body_id_;
874 const BailoutId prepare_id_; 847 const BailoutId prepare_id_;
875 }; 848 };
876 849
877 850
878 class ExpressionStatement: public Statement { 851 class ExpressionStatement: public Statement {
879 public: 852 public:
880 DECLARE_NODE_TYPE(ExpressionStatement) 853 DECLARE_NODE_TYPE(ExpressionStatement)
881 854
882 void set_expression(Expression* e) { expression_ = e; } 855 void set_expression(Expression* e) { expression_ = e; }
883 Expression* expression() const { return expression_; } 856 Expression* expression() const { return expression_; }
884 857
885 protected: 858 protected:
886 template<class> friend class AstNodeFactory;
887
888 explicit ExpressionStatement(Expression* expression) 859 explicit ExpressionStatement(Expression* expression)
889 : expression_(expression) { } 860 : expression_(expression) { }
890 861
891 private: 862 private:
892 Expression* expression_; 863 Expression* expression_;
893 }; 864 };
894 865
895 866
896 class ContinueStatement: public Statement { 867 class ContinueStatement: public Statement {
897 public: 868 public:
898 DECLARE_NODE_TYPE(ContinueStatement) 869 DECLARE_NODE_TYPE(ContinueStatement)
899 870
900 IterationStatement* target() const { return target_; } 871 IterationStatement* target() const { return target_; }
901 872
902 protected: 873 protected:
903 template<class> friend class AstNodeFactory;
904
905 explicit ContinueStatement(IterationStatement* target) 874 explicit ContinueStatement(IterationStatement* target)
906 : target_(target) { } 875 : target_(target) { }
907 876
908 private: 877 private:
909 IterationStatement* target_; 878 IterationStatement* target_;
910 }; 879 };
911 880
912 881
913 class BreakStatement: public Statement { 882 class BreakStatement: public Statement {
914 public: 883 public:
915 DECLARE_NODE_TYPE(BreakStatement) 884 DECLARE_NODE_TYPE(BreakStatement)
916 885
917 BreakableStatement* target() const { return target_; } 886 BreakableStatement* target() const { return target_; }
918 887
919 protected: 888 protected:
920 template<class> friend class AstNodeFactory;
921
922 explicit BreakStatement(BreakableStatement* target) 889 explicit BreakStatement(BreakableStatement* target)
923 : target_(target) { } 890 : target_(target) { }
924 891
925 private: 892 private:
926 BreakableStatement* target_; 893 BreakableStatement* target_;
927 }; 894 };
928 895
929 896
930 class ReturnStatement: public Statement { 897 class ReturnStatement: public Statement {
931 public: 898 public:
932 DECLARE_NODE_TYPE(ReturnStatement) 899 DECLARE_NODE_TYPE(ReturnStatement)
933 900
934 Expression* expression() const { return expression_; } 901 Expression* expression() const { return expression_; }
935 902
936 protected: 903 protected:
937 template<class> friend class AstNodeFactory;
938
939 explicit ReturnStatement(Expression* expression) 904 explicit ReturnStatement(Expression* expression)
940 : expression_(expression) { } 905 : expression_(expression) { }
941 906
942 private: 907 private:
943 Expression* expression_; 908 Expression* expression_;
944 }; 909 };
945 910
946 911
947 class WithStatement: public Statement { 912 class WithStatement: public Statement {
948 public: 913 public:
949 DECLARE_NODE_TYPE(WithStatement) 914 DECLARE_NODE_TYPE(WithStatement)
950 915
951 Expression* expression() const { return expression_; } 916 Expression* expression() const { return expression_; }
952 Statement* statement() const { return statement_; } 917 Statement* statement() const { return statement_; }
953 918
954 protected: 919 protected:
955 template<class> friend class AstNodeFactory;
956
957 WithStatement(Expression* expression, Statement* statement) 920 WithStatement(Expression* expression, Statement* statement)
958 : expression_(expression), 921 : expression_(expression),
959 statement_(statement) { } 922 statement_(statement) { }
960 923
961 private: 924 private:
962 Expression* expression_; 925 Expression* expression_;
963 Statement* statement_; 926 Statement* statement_;
964 }; 927 };
965 928
966 929
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1016 979
1017 void Initialize(Expression* tag, ZoneList<CaseClause*>* cases) { 980 void Initialize(Expression* tag, ZoneList<CaseClause*>* cases) {
1018 tag_ = tag; 981 tag_ = tag;
1019 cases_ = cases; 982 cases_ = cases;
1020 } 983 }
1021 984
1022 Expression* tag() const { return tag_; } 985 Expression* tag() const { return tag_; }
1023 ZoneList<CaseClause*>* cases() const { return cases_; } 986 ZoneList<CaseClause*>* cases() const { return cases_; }
1024 987
1025 protected: 988 protected:
1026 template<class> friend class AstNodeFactory;
1027
1028 SwitchStatement(Isolate* isolate, ZoneStringList* labels) 989 SwitchStatement(Isolate* isolate, ZoneStringList* labels)
1029 : BreakableStatement(isolate, labels, TARGET_FOR_ANONYMOUS), 990 : BreakableStatement(isolate, labels, TARGET_FOR_ANONYMOUS),
1030 tag_(NULL), 991 tag_(NULL),
1031 cases_(NULL) { } 992 cases_(NULL) { }
1032 993
1033 private: 994 private:
1034 Expression* tag_; 995 Expression* tag_;
1035 ZoneList<CaseClause*>* cases_; 996 ZoneList<CaseClause*>* cases_;
1036 }; 997 };
1037 998
(...skipping 12 matching lines...) Expand all
1050 1011
1051 Expression* condition() const { return condition_; } 1012 Expression* condition() const { return condition_; }
1052 Statement* then_statement() const { return then_statement_; } 1013 Statement* then_statement() const { return then_statement_; }
1053 Statement* else_statement() const { return else_statement_; } 1014 Statement* else_statement() const { return else_statement_; }
1054 1015
1055 BailoutId IfId() const { return if_id_; } 1016 BailoutId IfId() const { return if_id_; }
1056 BailoutId ThenId() const { return then_id_; } 1017 BailoutId ThenId() const { return then_id_; }
1057 BailoutId ElseId() const { return else_id_; } 1018 BailoutId ElseId() const { return else_id_; }
1058 1019
1059 protected: 1020 protected:
1060 template<class> friend class AstNodeFactory;
1061
1062 IfStatement(Isolate* isolate, 1021 IfStatement(Isolate* isolate,
1063 Expression* condition, 1022 Expression* condition,
1064 Statement* then_statement, 1023 Statement* then_statement,
1065 Statement* else_statement) 1024 Statement* else_statement)
1066 : condition_(condition), 1025 : condition_(condition),
1067 then_statement_(then_statement), 1026 then_statement_(then_statement),
1068 else_statement_(else_statement), 1027 else_statement_(else_statement),
1069 if_id_(GetNextId(isolate)), 1028 if_id_(GetNextId(isolate)),
1070 then_id_(GetNextId(isolate)), 1029 then_id_(GetNextId(isolate)),
1071 else_id_(GetNextId(isolate)) { 1030 else_id_(GetNextId(isolate)) {
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1131 1090
1132 class TryCatchStatement: public TryStatement { 1091 class TryCatchStatement: public TryStatement {
1133 public: 1092 public:
1134 DECLARE_NODE_TYPE(TryCatchStatement) 1093 DECLARE_NODE_TYPE(TryCatchStatement)
1135 1094
1136 Scope* scope() { return scope_; } 1095 Scope* scope() { return scope_; }
1137 Variable* variable() { return variable_; } 1096 Variable* variable() { return variable_; }
1138 Block* catch_block() const { return catch_block_; } 1097 Block* catch_block() const { return catch_block_; }
1139 1098
1140 protected: 1099 protected:
1141 template<class> friend class AstNodeFactory;
1142
1143 TryCatchStatement(int index, 1100 TryCatchStatement(int index,
1144 Block* try_block, 1101 Block* try_block,
1145 Scope* scope, 1102 Scope* scope,
1146 Variable* variable, 1103 Variable* variable,
1147 Block* catch_block) 1104 Block* catch_block)
1148 : TryStatement(index, try_block), 1105 : TryStatement(index, try_block),
1149 scope_(scope), 1106 scope_(scope),
1150 variable_(variable), 1107 variable_(variable),
1151 catch_block_(catch_block) { 1108 catch_block_(catch_block) {
1152 } 1109 }
1153 1110
1154 private: 1111 private:
1155 Scope* scope_; 1112 Scope* scope_;
1156 Variable* variable_; 1113 Variable* variable_;
1157 Block* catch_block_; 1114 Block* catch_block_;
1158 }; 1115 };
1159 1116
1160 1117
1161 class TryFinallyStatement: public TryStatement { 1118 class TryFinallyStatement: public TryStatement {
1162 public: 1119 public:
1163 DECLARE_NODE_TYPE(TryFinallyStatement) 1120 DECLARE_NODE_TYPE(TryFinallyStatement)
1164 1121
1165 Block* finally_block() const { return finally_block_; } 1122 Block* finally_block() const { return finally_block_; }
1166 1123
1167 protected: 1124 protected:
1168 template<class> friend class AstNodeFactory;
1169
1170 TryFinallyStatement(int index, Block* try_block, Block* finally_block) 1125 TryFinallyStatement(int index, Block* try_block, Block* finally_block)
1171 : TryStatement(index, try_block), 1126 : TryStatement(index, try_block),
1172 finally_block_(finally_block) { } 1127 finally_block_(finally_block) { }
1173 1128
1174 private: 1129 private:
1175 Block* finally_block_; 1130 Block* finally_block_;
1176 }; 1131 };
1177 1132
1178 1133
1179 class DebuggerStatement: public Statement { 1134 class DebuggerStatement: public Statement {
1180 public: 1135 public:
1181 DECLARE_NODE_TYPE(DebuggerStatement) 1136 DECLARE_NODE_TYPE(DebuggerStatement)
1182 1137
1183 protected: 1138 protected:
1184 template<class> friend class AstNodeFactory;
1185
1186 DebuggerStatement() {} 1139 DebuggerStatement() {}
1187 }; 1140 };
1188 1141
1189 1142
1190 class EmptyStatement: public Statement { 1143 class EmptyStatement: public Statement {
1191 public: 1144 public:
1192 DECLARE_NODE_TYPE(EmptyStatement) 1145 DECLARE_NODE_TYPE(EmptyStatement)
1193 1146
1194 protected: 1147 protected:
1195 template<class> friend class AstNodeFactory;
1196
1197 EmptyStatement() {} 1148 EmptyStatement() {}
1198 }; 1149 };
1199 1150
1200 1151
1201 class Literal: public Expression { 1152 class Literal: public Expression {
1202 public: 1153 public:
1203 DECLARE_NODE_TYPE(Literal) 1154 DECLARE_NODE_TYPE(Literal)
1204 1155
1205 virtual bool IsPropertyName() { 1156 virtual bool IsPropertyName() {
1206 if (handle_->IsSymbol()) { 1157 if (handle_->IsSymbol()) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1240 1191
1241 static bool Match(void* literal1, void* literal2) { 1192 static bool Match(void* literal1, void* literal2) {
1242 Handle<String> s1 = static_cast<Literal*>(literal1)->ToString(); 1193 Handle<String> s1 = static_cast<Literal*>(literal1)->ToString();
1243 Handle<String> s2 = static_cast<Literal*>(literal2)->ToString(); 1194 Handle<String> s2 = static_cast<Literal*>(literal2)->ToString();
1244 return s1->Equals(*s2); 1195 return s1->Equals(*s2);
1245 } 1196 }
1246 1197
1247 TypeFeedbackId LiteralFeedbackId() const { return reuse(id()); } 1198 TypeFeedbackId LiteralFeedbackId() const { return reuse(id()); }
1248 1199
1249 protected: 1200 protected:
1250 template<class> friend class AstNodeFactory;
1251
1252 Literal(Isolate* isolate, Handle<Object> handle) 1201 Literal(Isolate* isolate, Handle<Object> handle)
1253 : Expression(isolate), 1202 : Expression(isolate),
1254 handle_(handle) { } 1203 handle_(handle) { }
1255 1204
1256 private: 1205 private:
1257 Handle<String> ToString(); 1206 Handle<String> ToString();
1258 1207
1259 Handle<Object> handle_; 1208 Handle<Object> handle_;
1260 }; 1209 };
1261 1210
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
1359 kHasFunction = 1 << 1 1308 kHasFunction = 1 << 1
1360 }; 1309 };
1361 1310
1362 struct Accessors: public ZoneObject { 1311 struct Accessors: public ZoneObject {
1363 Accessors() : getter(NULL), setter(NULL) { } 1312 Accessors() : getter(NULL), setter(NULL) { }
1364 Expression* getter; 1313 Expression* getter;
1365 Expression* setter; 1314 Expression* setter;
1366 }; 1315 };
1367 1316
1368 protected: 1317 protected:
1369 template<class> friend class AstNodeFactory;
1370
1371 ObjectLiteral(Isolate* isolate, 1318 ObjectLiteral(Isolate* isolate,
1372 Handle<FixedArray> constant_properties, 1319 Handle<FixedArray> constant_properties,
1373 ZoneList<Property*>* properties, 1320 ZoneList<Property*>* properties,
1374 int literal_index, 1321 int literal_index,
1375 bool is_simple, 1322 bool is_simple,
1376 bool fast_elements, 1323 bool fast_elements,
1377 int depth, 1324 int depth,
1378 bool has_function) 1325 bool has_function)
1379 : MaterializedLiteral(isolate, literal_index, is_simple, depth), 1326 : MaterializedLiteral(isolate, literal_index, is_simple, depth),
1380 constant_properties_(constant_properties), 1327 constant_properties_(constant_properties),
(...skipping 11 matching lines...) Expand all
1392 1339
1393 // Node for capturing a regexp literal. 1340 // Node for capturing a regexp literal.
1394 class RegExpLiteral: public MaterializedLiteral { 1341 class RegExpLiteral: public MaterializedLiteral {
1395 public: 1342 public:
1396 DECLARE_NODE_TYPE(RegExpLiteral) 1343 DECLARE_NODE_TYPE(RegExpLiteral)
1397 1344
1398 Handle<String> pattern() const { return pattern_; } 1345 Handle<String> pattern() const { return pattern_; }
1399 Handle<String> flags() const { return flags_; } 1346 Handle<String> flags() const { return flags_; }
1400 1347
1401 protected: 1348 protected:
1402 template<class> friend class AstNodeFactory;
1403
1404 RegExpLiteral(Isolate* isolate, 1349 RegExpLiteral(Isolate* isolate,
1405 Handle<String> pattern, 1350 Handle<String> pattern,
1406 Handle<String> flags, 1351 Handle<String> flags,
1407 int literal_index) 1352 int literal_index)
1408 : MaterializedLiteral(isolate, literal_index, false, 1), 1353 : MaterializedLiteral(isolate, literal_index, false, 1),
1409 pattern_(pattern), 1354 pattern_(pattern),
1410 flags_(flags) {} 1355 flags_(flags) {}
1411 1356
1412 private: 1357 private:
1413 Handle<String> pattern_; 1358 Handle<String> pattern_;
1414 Handle<String> flags_; 1359 Handle<String> flags_;
1415 }; 1360 };
1416 1361
1417 // An array literal has a literals object that is used 1362 // An array literal has a literals object that is used
1418 // for minimizing the work when constructing it at runtime. 1363 // for minimizing the work when constructing it at runtime.
1419 class ArrayLiteral: public MaterializedLiteral { 1364 class ArrayLiteral: public MaterializedLiteral {
1420 public: 1365 public:
1421 DECLARE_NODE_TYPE(ArrayLiteral) 1366 DECLARE_NODE_TYPE(ArrayLiteral)
1422 1367
1423 Handle<FixedArray> constant_elements() const { return constant_elements_; } 1368 Handle<FixedArray> constant_elements() const { return constant_elements_; }
1424 ZoneList<Expression*>* values() const { return values_; } 1369 ZoneList<Expression*>* values() const { return values_; }
1425 1370
1426 // Return an AST id for an element that is used in simulate instructions. 1371 // Return an AST id for an element that is used in simulate instructions.
1427 BailoutId GetIdForElement(int i) { 1372 BailoutId GetIdForElement(int i) {
1428 return BailoutId(first_element_id_.ToInt() + i); 1373 return BailoutId(first_element_id_.ToInt() + i);
1429 } 1374 }
1430 1375
1431 protected: 1376 protected:
1432 template<class> friend class AstNodeFactory;
1433
1434 ArrayLiteral(Isolate* isolate, 1377 ArrayLiteral(Isolate* isolate,
1435 Handle<FixedArray> constant_elements, 1378 Handle<FixedArray> constant_elements,
1436 ZoneList<Expression*>* values, 1379 ZoneList<Expression*>* values,
1437 int literal_index, 1380 int literal_index,
1438 bool is_simple, 1381 bool is_simple,
1439 int depth) 1382 int depth)
1440 : MaterializedLiteral(isolate, literal_index, is_simple, depth), 1383 : MaterializedLiteral(isolate, literal_index, is_simple, depth),
1441 constant_elements_(constant_elements), 1384 constant_elements_(constant_elements),
1442 values_(values), 1385 values_(values),
1443 first_element_id_(ReserveIdRange(isolate, values->length())) {} 1386 first_element_id_(ReserveIdRange(isolate, values->length())) {}
(...skipping 30 matching lines...) Expand all
1474 Interface* interface() const { return interface_; } 1417 Interface* interface() const { return interface_; }
1475 1418
1476 1419
1477 void MarkAsTrivial() { is_trivial_ = true; } 1420 void MarkAsTrivial() { is_trivial_ = true; }
1478 void MarkAsLValue() { is_lvalue_ = true; } 1421 void MarkAsLValue() { is_lvalue_ = true; }
1479 1422
1480 // Bind this proxy to the variable var. 1423 // Bind this proxy to the variable var.
1481 void BindTo(Variable* var); 1424 void BindTo(Variable* var);
1482 1425
1483 protected: 1426 protected:
1484 template<class> friend class AstNodeFactory;
1485
1486 VariableProxy(Isolate* isolate, Variable* var); 1427 VariableProxy(Isolate* isolate, Variable* var);
1487 1428
1488 VariableProxy(Isolate* isolate, 1429 VariableProxy(Isolate* isolate,
1489 Handle<String> name, 1430 Handle<String> name,
1490 bool is_this, 1431 bool is_this,
1491 Interface* interface, 1432 Interface* interface,
1492 int position); 1433 int position);
1493 1434
1494 Handle<String> name_; 1435 Handle<String> name_;
1495 Variable* var_; // resolved variable, or NULL 1436 Variable* var_; // resolved variable, or NULL
(...skipping 25 matching lines...) Expand all
1521 1462
1522 // Type feedback information. 1463 // Type feedback information.
1523 void RecordTypeFeedback(TypeFeedbackOracle* oracle, Zone* zone); 1464 void RecordTypeFeedback(TypeFeedbackOracle* oracle, Zone* zone);
1524 virtual bool IsMonomorphic() { return is_monomorphic_; } 1465 virtual bool IsMonomorphic() { return is_monomorphic_; }
1525 virtual SmallMapList* GetReceiverTypes() { return &receiver_types_; } 1466 virtual SmallMapList* GetReceiverTypes() { return &receiver_types_; }
1526 bool IsArrayLength() { return is_array_length_; } 1467 bool IsArrayLength() { return is_array_length_; }
1527 bool IsUninitialized() { return is_uninitialized_; } 1468 bool IsUninitialized() { return is_uninitialized_; }
1528 TypeFeedbackId PropertyFeedbackId() { return reuse(id()); } 1469 TypeFeedbackId PropertyFeedbackId() { return reuse(id()); }
1529 1470
1530 protected: 1471 protected:
1531 template<class> friend class AstNodeFactory;
1532
1533 Property(Isolate* isolate, 1472 Property(Isolate* isolate,
1534 Expression* obj, 1473 Expression* obj,
1535 Expression* key, 1474 Expression* key,
1536 int pos) 1475 int pos)
1537 : Expression(isolate), 1476 : Expression(isolate),
1538 obj_(obj), 1477 obj_(obj),
1539 key_(key), 1478 key_(key),
1540 pos_(pos), 1479 pos_(pos),
1541 load_id_(GetNextId(isolate)), 1480 load_id_(GetNextId(isolate)),
1542 is_monomorphic_(false), 1481 is_monomorphic_(false),
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1589 bool ComputeGlobalTarget(Handle<GlobalObject> global, LookupResult* lookup); 1528 bool ComputeGlobalTarget(Handle<GlobalObject> global, LookupResult* lookup);
1590 1529
1591 BailoutId ReturnId() const { return return_id_; } 1530 BailoutId ReturnId() const { return return_id_; }
1592 1531
1593 #ifdef DEBUG 1532 #ifdef DEBUG
1594 // Used to assert that the FullCodeGenerator records the return site. 1533 // Used to assert that the FullCodeGenerator records the return site.
1595 bool return_is_recorded_; 1534 bool return_is_recorded_;
1596 #endif 1535 #endif
1597 1536
1598 protected: 1537 protected:
1599 template<class> friend class AstNodeFactory;
1600
1601 Call(Isolate* isolate, 1538 Call(Isolate* isolate,
1602 Expression* expression, 1539 Expression* expression,
1603 ZoneList<Expression*>* arguments, 1540 ZoneList<Expression*>* arguments,
1604 int pos) 1541 int pos)
1605 : Expression(isolate), 1542 : Expression(isolate),
1606 expression_(expression), 1543 expression_(expression),
1607 arguments_(arguments), 1544 arguments_(arguments),
1608 pos_(pos), 1545 pos_(pos),
1609 is_monomorphic_(false), 1546 is_monomorphic_(false),
1610 check_type_(RECEIVER_MAP_CHECK), 1547 check_type_(RECEIVER_MAP_CHECK),
(...skipping 25 matching lines...) Expand all
1636 1573
1637 // Type feedback information. 1574 // Type feedback information.
1638 TypeFeedbackId CallNewFeedbackId() const { return reuse(id()); } 1575 TypeFeedbackId CallNewFeedbackId() const { return reuse(id()); }
1639 void RecordTypeFeedback(TypeFeedbackOracle* oracle); 1576 void RecordTypeFeedback(TypeFeedbackOracle* oracle);
1640 virtual bool IsMonomorphic() { return is_monomorphic_; } 1577 virtual bool IsMonomorphic() { return is_monomorphic_; }
1641 Handle<JSFunction> target() { return target_; } 1578 Handle<JSFunction> target() { return target_; }
1642 1579
1643 BailoutId ReturnId() const { return return_id_; } 1580 BailoutId ReturnId() const { return return_id_; }
1644 1581
1645 protected: 1582 protected:
1646 template<class> friend class AstNodeFactory;
1647
1648 CallNew(Isolate* isolate, 1583 CallNew(Isolate* isolate,
1649 Expression* expression, 1584 Expression* expression,
1650 ZoneList<Expression*>* arguments, 1585 ZoneList<Expression*>* arguments,
1651 int pos) 1586 int pos)
1652 : Expression(isolate), 1587 : Expression(isolate),
1653 expression_(expression), 1588 expression_(expression),
1654 arguments_(arguments), 1589 arguments_(arguments),
1655 pos_(pos), 1590 pos_(pos),
1656 is_monomorphic_(false), 1591 is_monomorphic_(false),
1657 return_id_(GetNextId(isolate)) { } 1592 return_id_(GetNextId(isolate)) { }
(...skipping 19 matching lines...) Expand all
1677 DECLARE_NODE_TYPE(CallRuntime) 1612 DECLARE_NODE_TYPE(CallRuntime)
1678 1613
1679 Handle<String> name() const { return name_; } 1614 Handle<String> name() const { return name_; }
1680 const Runtime::Function* function() const { return function_; } 1615 const Runtime::Function* function() const { return function_; }
1681 ZoneList<Expression*>* arguments() const { return arguments_; } 1616 ZoneList<Expression*>* arguments() const { return arguments_; }
1682 bool is_jsruntime() const { return function_ == NULL; } 1617 bool is_jsruntime() const { return function_ == NULL; }
1683 1618
1684 TypeFeedbackId CallRuntimeFeedbackId() const { return reuse(id()); } 1619 TypeFeedbackId CallRuntimeFeedbackId() const { return reuse(id()); }
1685 1620
1686 protected: 1621 protected:
1687 template<class> friend class AstNodeFactory;
1688
1689 CallRuntime(Isolate* isolate, 1622 CallRuntime(Isolate* isolate,
1690 Handle<String> name, 1623 Handle<String> name,
1691 const Runtime::Function* function, 1624 const Runtime::Function* function,
1692 ZoneList<Expression*>* arguments) 1625 ZoneList<Expression*>* arguments)
1693 : Expression(isolate), 1626 : Expression(isolate),
1694 name_(name), 1627 name_(name),
1695 function_(function), 1628 function_(function),
1696 arguments_(arguments) { } 1629 arguments_(arguments) { }
1697 1630
1698 private: 1631 private:
(...skipping 12 matching lines...) Expand all
1711 Token::Value op() const { return op_; } 1644 Token::Value op() const { return op_; }
1712 Expression* expression() const { return expression_; } 1645 Expression* expression() const { return expression_; }
1713 virtual int position() const { return pos_; } 1646 virtual int position() const { return pos_; }
1714 1647
1715 BailoutId MaterializeTrueId() { return materialize_true_id_; } 1648 BailoutId MaterializeTrueId() { return materialize_true_id_; }
1716 BailoutId MaterializeFalseId() { return materialize_false_id_; } 1649 BailoutId MaterializeFalseId() { return materialize_false_id_; }
1717 1650
1718 TypeFeedbackId UnaryOperationFeedbackId() const { return reuse(id()); } 1651 TypeFeedbackId UnaryOperationFeedbackId() const { return reuse(id()); }
1719 1652
1720 protected: 1653 protected:
1721 template<class> friend class AstNodeFactory;
1722
1723 UnaryOperation(Isolate* isolate, 1654 UnaryOperation(Isolate* isolate,
1724 Token::Value op, 1655 Token::Value op,
1725 Expression* expression, 1656 Expression* expression,
1726 int pos) 1657 int pos)
1727 : Expression(isolate), 1658 : Expression(isolate),
1728 op_(op), 1659 op_(op),
1729 expression_(expression), 1660 expression_(expression),
1730 pos_(pos), 1661 pos_(pos),
1731 materialize_true_id_(GetNextId(isolate)), 1662 materialize_true_id_(GetNextId(isolate)),
1732 materialize_false_id_(GetNextId(isolate)) { 1663 materialize_false_id_(GetNextId(isolate)) {
(...skipping 21 matching lines...) Expand all
1754 Token::Value op() const { return op_; } 1685 Token::Value op() const { return op_; }
1755 Expression* left() const { return left_; } 1686 Expression* left() const { return left_; }
1756 Expression* right() const { return right_; } 1687 Expression* right() const { return right_; }
1757 virtual int position() const { return pos_; } 1688 virtual int position() const { return pos_; }
1758 1689
1759 BailoutId RightId() const { return right_id_; } 1690 BailoutId RightId() const { return right_id_; }
1760 1691
1761 TypeFeedbackId BinaryOperationFeedbackId() const { return reuse(id()); } 1692 TypeFeedbackId BinaryOperationFeedbackId() const { return reuse(id()); }
1762 1693
1763 protected: 1694 protected:
1764 template<class> friend class AstNodeFactory;
1765
1766 BinaryOperation(Isolate* isolate, 1695 BinaryOperation(Isolate* isolate,
1767 Token::Value op, 1696 Token::Value op,
1768 Expression* left, 1697 Expression* left,
1769 Expression* right, 1698 Expression* right,
1770 int pos) 1699 int pos)
1771 : Expression(isolate), 1700 : Expression(isolate),
1772 op_(op), 1701 op_(op),
1773 left_(left), 1702 left_(left),
1774 right_(right), 1703 right_(right),
1775 pos_(pos), 1704 pos_(pos),
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1808 void RecordTypeFeedback(TypeFeedbackOracle* oracle, Zone* znoe); 1737 void RecordTypeFeedback(TypeFeedbackOracle* oracle, Zone* znoe);
1809 virtual bool IsMonomorphic() { return is_monomorphic_; } 1738 virtual bool IsMonomorphic() { return is_monomorphic_; }
1810 virtual SmallMapList* GetReceiverTypes() { return &receiver_types_; } 1739 virtual SmallMapList* GetReceiverTypes() { return &receiver_types_; }
1811 1740
1812 BailoutId AssignmentId() const { return assignment_id_; } 1741 BailoutId AssignmentId() const { return assignment_id_; }
1813 1742
1814 TypeFeedbackId CountBinOpFeedbackId() const { return count_id_; } 1743 TypeFeedbackId CountBinOpFeedbackId() const { return count_id_; }
1815 TypeFeedbackId CountStoreFeedbackId() const { return reuse(id()); } 1744 TypeFeedbackId CountStoreFeedbackId() const { return reuse(id()); }
1816 1745
1817 protected: 1746 protected:
1818 template<class> friend class AstNodeFactory;
1819
1820 CountOperation(Isolate* isolate, 1747 CountOperation(Isolate* isolate,
1821 Token::Value op, 1748 Token::Value op,
1822 bool is_prefix, 1749 bool is_prefix,
1823 Expression* expr, 1750 Expression* expr,
1824 int pos) 1751 int pos)
1825 : Expression(isolate), 1752 : Expression(isolate),
1826 op_(op), 1753 op_(op),
1827 is_prefix_(is_prefix), 1754 is_prefix_(is_prefix),
1828 expression_(expr), 1755 expression_(expr),
1829 pos_(pos), 1756 pos_(pos),
(...skipping 26 matching lines...) Expand all
1856 void RecordTypeFeedback(TypeFeedbackOracle* oracle); 1783 void RecordTypeFeedback(TypeFeedbackOracle* oracle);
1857 bool IsSmiCompare() { return compare_type_ == SMI_ONLY; } 1784 bool IsSmiCompare() { return compare_type_ == SMI_ONLY; }
1858 bool IsObjectCompare() { return compare_type_ == OBJECT_ONLY; } 1785 bool IsObjectCompare() { return compare_type_ == OBJECT_ONLY; }
1859 1786
1860 // Match special cases. 1787 // Match special cases.
1861 bool IsLiteralCompareTypeof(Expression** expr, Handle<String>* check); 1788 bool IsLiteralCompareTypeof(Expression** expr, Handle<String>* check);
1862 bool IsLiteralCompareUndefined(Expression** expr); 1789 bool IsLiteralCompareUndefined(Expression** expr);
1863 bool IsLiteralCompareNull(Expression** expr); 1790 bool IsLiteralCompareNull(Expression** expr);
1864 1791
1865 protected: 1792 protected:
1866 template<class> friend class AstNodeFactory;
1867
1868 CompareOperation(Isolate* isolate, 1793 CompareOperation(Isolate* isolate,
1869 Token::Value op, 1794 Token::Value op,
1870 Expression* left, 1795 Expression* left,
1871 Expression* right, 1796 Expression* right,
1872 int pos) 1797 int pos)
1873 : Expression(isolate), 1798 : Expression(isolate),
1874 op_(op), 1799 op_(op),
1875 left_(left), 1800 left_(left),
1876 right_(right), 1801 right_(right),
1877 pos_(pos), 1802 pos_(pos),
(...skipping 20 matching lines...) Expand all
1898 Expression* then_expression() const { return then_expression_; } 1823 Expression* then_expression() const { return then_expression_; }
1899 Expression* else_expression() const { return else_expression_; } 1824 Expression* else_expression() const { return else_expression_; }
1900 1825
1901 int then_expression_position() const { return then_expression_position_; } 1826 int then_expression_position() const { return then_expression_position_; }
1902 int else_expression_position() const { return else_expression_position_; } 1827 int else_expression_position() const { return else_expression_position_; }
1903 1828
1904 BailoutId ThenId() const { return then_id_; } 1829 BailoutId ThenId() const { return then_id_; }
1905 BailoutId ElseId() const { return else_id_; } 1830 BailoutId ElseId() const { return else_id_; }
1906 1831
1907 protected: 1832 protected:
1908 template<class> friend class AstNodeFactory;
1909
1910 Conditional(Isolate* isolate, 1833 Conditional(Isolate* isolate,
1911 Expression* condition, 1834 Expression* condition,
1912 Expression* then_expression, 1835 Expression* then_expression,
1913 Expression* else_expression, 1836 Expression* else_expression,
1914 int then_expression_position, 1837 int then_expression_position,
1915 int else_expression_position) 1838 int else_expression_position)
1916 : Expression(isolate), 1839 : Expression(isolate),
1917 condition_(condition), 1840 condition_(condition),
1918 then_expression_(then_expression), 1841 then_expression_(then_expression),
1919 else_expression_(else_expression), 1842 else_expression_(else_expression),
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1961 1884
1962 BailoutId AssignmentId() const { return assignment_id_; } 1885 BailoutId AssignmentId() const { return assignment_id_; }
1963 1886
1964 // Type feedback information. 1887 // Type feedback information.
1965 TypeFeedbackId AssignmentFeedbackId() { return reuse(id()); } 1888 TypeFeedbackId AssignmentFeedbackId() { return reuse(id()); }
1966 void RecordTypeFeedback(TypeFeedbackOracle* oracle, Zone* zone); 1889 void RecordTypeFeedback(TypeFeedbackOracle* oracle, Zone* zone);
1967 virtual bool IsMonomorphic() { return is_monomorphic_; } 1890 virtual bool IsMonomorphic() { return is_monomorphic_; }
1968 virtual SmallMapList* GetReceiverTypes() { return &receiver_types_; } 1891 virtual SmallMapList* GetReceiverTypes() { return &receiver_types_; }
1969 1892
1970 protected: 1893 protected:
1971 template<class> friend class AstNodeFactory;
1972
1973 Assignment(Isolate* isolate, 1894 Assignment(Isolate* isolate,
1974 Token::Value op, 1895 Token::Value op,
1975 Expression* target, 1896 Expression* target,
1976 Expression* value, 1897 Expression* value,
1977 int pos); 1898 int pos);
1978 1899
1979 template<class Visitor> 1900 template<class Visitor>
1980 void Init(Isolate* isolate, AstNodeFactory<Visitor>* factory) { 1901 void Init(Isolate* isolate, AstNodeFactory<Visitor>* factory) {
1981 ASSERT(Token::IsAssignmentOp(op_)); 1902 ASSERT(Token::IsAssignmentOp(op_));
1982 if (is_compound()) { 1903 if (is_compound()) {
(...skipping 19 matching lines...) Expand all
2002 1923
2003 1924
2004 class Throw: public Expression { 1925 class Throw: public Expression {
2005 public: 1926 public:
2006 DECLARE_NODE_TYPE(Throw) 1927 DECLARE_NODE_TYPE(Throw)
2007 1928
2008 Expression* exception() const { return exception_; } 1929 Expression* exception() const { return exception_; }
2009 virtual int position() const { return pos_; } 1930 virtual int position() const { return pos_; }
2010 1931
2011 protected: 1932 protected:
2012 template<class> friend class AstNodeFactory;
2013
2014 Throw(Isolate* isolate, Expression* exception, int pos) 1933 Throw(Isolate* isolate, Expression* exception, int pos)
2015 : Expression(isolate), exception_(exception), pos_(pos) {} 1934 : Expression(isolate), exception_(exception), pos_(pos) {}
2016 1935
2017 private: 1936 private:
2018 Expression* exception_; 1937 Expression* exception_;
2019 int pos_; 1938 int pos_;
2020 }; 1939 };
2021 1940
2022 1941
2023 class FunctionLiteral: public Expression { 1942 class FunctionLiteral: public Expression {
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
2103 bitfield_ = IsParenthesized::update(bitfield_, kIsParenthesized); 2022 bitfield_ = IsParenthesized::update(bitfield_, kIsParenthesized);
2104 } 2023 }
2105 2024
2106 int ast_node_count() { return ast_properties_.node_count(); } 2025 int ast_node_count() { return ast_properties_.node_count(); }
2107 AstProperties::Flags* flags() { return ast_properties_.flags(); } 2026 AstProperties::Flags* flags() { return ast_properties_.flags(); }
2108 void set_ast_properties(AstProperties* ast_properties) { 2027 void set_ast_properties(AstProperties* ast_properties) {
2109 ast_properties_ = *ast_properties; 2028 ast_properties_ = *ast_properties;
2110 } 2029 }
2111 2030
2112 protected: 2031 protected:
2113 template<class> friend class AstNodeFactory;
2114
2115 FunctionLiteral(Isolate* isolate, 2032 FunctionLiteral(Isolate* isolate,
2116 Handle<String> name, 2033 Handle<String> name,
2117 Scope* scope, 2034 Scope* scope,
2118 ZoneList<Statement*>* body, 2035 ZoneList<Statement*>* body,
2119 int materialized_literal_count, 2036 int materialized_literal_count,
2120 int expected_property_count, 2037 int expected_property_count,
2121 int handler_count, 2038 int handler_count,
2122 bool has_only_simple_this_property_assignments, 2039 bool has_only_simple_this_property_assignments,
2123 Handle<FixedArray> this_property_assignments, 2040 Handle<FixedArray> this_property_assignments,
2124 int parameter_count, 2041 int parameter_count,
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
2175 2092
2176 class SharedFunctionInfoLiteral: public Expression { 2093 class SharedFunctionInfoLiteral: public Expression {
2177 public: 2094 public:
2178 DECLARE_NODE_TYPE(SharedFunctionInfoLiteral) 2095 DECLARE_NODE_TYPE(SharedFunctionInfoLiteral)
2179 2096
2180 Handle<SharedFunctionInfo> shared_function_info() const { 2097 Handle<SharedFunctionInfo> shared_function_info() const {
2181 return shared_function_info_; 2098 return shared_function_info_;
2182 } 2099 }
2183 2100
2184 protected: 2101 protected:
2185 template<class> friend class AstNodeFactory;
2186
2187 SharedFunctionInfoLiteral( 2102 SharedFunctionInfoLiteral(
2188 Isolate* isolate, 2103 Isolate* isolate,
2189 Handle<SharedFunctionInfo> shared_function_info) 2104 Handle<SharedFunctionInfo> shared_function_info)
2190 : Expression(isolate), 2105 : Expression(isolate),
2191 shared_function_info_(shared_function_info) { } 2106 shared_function_info_(shared_function_info) { }
2192 2107
2193 private: 2108 private:
2194 Handle<SharedFunctionInfo> shared_function_info_; 2109 Handle<SharedFunctionInfo> shared_function_info_;
2195 }; 2110 };
2196 2111
2197 2112
2198 class ThisFunction: public Expression { 2113 class ThisFunction: public Expression {
2199 public: 2114 public:
2200 DECLARE_NODE_TYPE(ThisFunction) 2115 DECLARE_NODE_TYPE(ThisFunction)
2201 2116
2202 protected: 2117 protected:
2203 template<class> friend class AstNodeFactory;
2204
2205 explicit ThisFunction(Isolate* isolate): Expression(isolate) {} 2118 explicit ThisFunction(Isolate* isolate): Expression(isolate) {}
2206 }; 2119 };
2207 2120
2208 #undef DECLARE_NODE_TYPE 2121 #undef DECLARE_NODE_TYPE
2209 2122
2210 2123
2211 // ---------------------------------------------------------------------------- 2124 // ----------------------------------------------------------------------------
2212 // Regular expressions 2125 // Regular expressions
2213 2126
2214 2127
(...skipping 790 matching lines...) Expand 10 before | Expand all | Expand 10 after
3005 private: 2918 private:
3006 Isolate* isolate_; 2919 Isolate* isolate_;
3007 Zone* zone_; 2920 Zone* zone_;
3008 Visitor visitor_; 2921 Visitor visitor_;
3009 }; 2922 };
3010 2923
3011 2924
3012 } } // namespace v8::internal 2925 } } // namespace v8::internal
3013 2926
3014 #endif // V8_AST_H_ 2927 #endif // V8_AST_H_
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698