| 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_AST_H_ | 5 #ifndef V8_AST_H_ |
| 6 #define V8_AST_H_ | 6 #define V8_AST_H_ |
| 7 | 7 |
| 8 #include "src/v8.h" | 8 #include "src/v8.h" |
| 9 | 9 |
| 10 #include "src/assembler.h" | 10 #include "src/assembler.h" |
| (...skipping 811 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 822 class WhileStatement FINAL : public IterationStatement { | 822 class WhileStatement FINAL : public IterationStatement { |
| 823 public: | 823 public: |
| 824 DECLARE_NODE_TYPE(WhileStatement) | 824 DECLARE_NODE_TYPE(WhileStatement) |
| 825 | 825 |
| 826 void Initialize(Expression* cond, Statement* body) { | 826 void Initialize(Expression* cond, Statement* body) { |
| 827 IterationStatement::Initialize(body); | 827 IterationStatement::Initialize(body); |
| 828 cond_ = cond; | 828 cond_ = cond; |
| 829 } | 829 } |
| 830 | 830 |
| 831 Expression* cond() const { return cond_; } | 831 Expression* cond() const { return cond_; } |
| 832 bool may_have_function_literal() const { | |
| 833 return may_have_function_literal_; | |
| 834 } | |
| 835 void set_may_have_function_literal(bool value) { | |
| 836 may_have_function_literal_ = value; | |
| 837 } | |
| 838 | 832 |
| 839 static int num_ids() { return parent_num_ids() + 1; } | 833 static int num_ids() { return parent_num_ids() + 1; } |
| 840 virtual BailoutId ContinueId() const OVERRIDE { return EntryId(); } | 834 virtual BailoutId ContinueId() const OVERRIDE { return EntryId(); } |
| 841 virtual BailoutId StackCheckId() const OVERRIDE { return BodyId(); } | 835 virtual BailoutId StackCheckId() const OVERRIDE { return BodyId(); } |
| 842 BailoutId BodyId() const { return BailoutId(local_id(0)); } | 836 BailoutId BodyId() const { return BailoutId(local_id(0)); } |
| 843 | 837 |
| 844 protected: | 838 protected: |
| 845 WhileStatement(Zone* zone, ZoneList<const AstRawString*>* labels, int pos) | 839 WhileStatement(Zone* zone, ZoneList<const AstRawString*>* labels, int pos) |
| 846 : IterationStatement(zone, labels, pos), | 840 : IterationStatement(zone, labels, pos), cond_(NULL) {} |
| 847 cond_(NULL), | |
| 848 may_have_function_literal_(true) {} | |
| 849 static int parent_num_ids() { return IterationStatement::num_ids(); } | 841 static int parent_num_ids() { return IterationStatement::num_ids(); } |
| 850 | 842 |
| 851 private: | 843 private: |
| 852 int local_id(int n) const { return base_id() + parent_num_ids() + n; } | 844 int local_id(int n) const { return base_id() + parent_num_ids() + n; } |
| 853 | 845 |
| 854 Expression* cond_; | 846 Expression* cond_; |
| 855 | |
| 856 // True if there is a function literal subexpression in the condition. | |
| 857 bool may_have_function_literal_; | |
| 858 }; | 847 }; |
| 859 | 848 |
| 860 | 849 |
| 861 class ForStatement FINAL : public IterationStatement { | 850 class ForStatement FINAL : public IterationStatement { |
| 862 public: | 851 public: |
| 863 DECLARE_NODE_TYPE(ForStatement) | 852 DECLARE_NODE_TYPE(ForStatement) |
| 864 | 853 |
| 865 void Initialize(Statement* init, | 854 void Initialize(Statement* init, |
| 866 Expression* cond, | 855 Expression* cond, |
| 867 Statement* next, | 856 Statement* next, |
| 868 Statement* body) { | 857 Statement* body) { |
| 869 IterationStatement::Initialize(body); | 858 IterationStatement::Initialize(body); |
| 870 init_ = init; | 859 init_ = init; |
| 871 cond_ = cond; | 860 cond_ = cond; |
| 872 next_ = next; | 861 next_ = next; |
| 873 } | 862 } |
| 874 | 863 |
| 875 Statement* init() const { return init_; } | 864 Statement* init() const { return init_; } |
| 876 Expression* cond() const { return cond_; } | 865 Expression* cond() const { return cond_; } |
| 877 Statement* next() const { return next_; } | 866 Statement* next() const { return next_; } |
| 878 | 867 |
| 879 bool may_have_function_literal() const { | |
| 880 return may_have_function_literal_; | |
| 881 } | |
| 882 void set_may_have_function_literal(bool value) { | |
| 883 may_have_function_literal_ = value; | |
| 884 } | |
| 885 | |
| 886 static int num_ids() { return parent_num_ids() + 2; } | 868 static int num_ids() { return parent_num_ids() + 2; } |
| 887 virtual BailoutId ContinueId() const OVERRIDE { | 869 virtual BailoutId ContinueId() const OVERRIDE { |
| 888 return BailoutId(local_id(0)); | 870 return BailoutId(local_id(0)); |
| 889 } | 871 } |
| 890 virtual BailoutId StackCheckId() const OVERRIDE { return BodyId(); } | 872 virtual BailoutId StackCheckId() const OVERRIDE { return BodyId(); } |
| 891 BailoutId BodyId() const { return BailoutId(local_id(1)); } | 873 BailoutId BodyId() const { return BailoutId(local_id(1)); } |
| 892 | 874 |
| 893 bool is_fast_smi_loop() { return loop_variable_ != NULL; } | |
| 894 Variable* loop_variable() { return loop_variable_; } | |
| 895 void set_loop_variable(Variable* var) { loop_variable_ = var; } | |
| 896 | |
| 897 protected: | 875 protected: |
| 898 ForStatement(Zone* zone, ZoneList<const AstRawString*>* labels, int pos) | 876 ForStatement(Zone* zone, ZoneList<const AstRawString*>* labels, int pos) |
| 899 : IterationStatement(zone, labels, pos), | 877 : IterationStatement(zone, labels, pos), |
| 900 init_(NULL), | 878 init_(NULL), |
| 901 cond_(NULL), | 879 cond_(NULL), |
| 902 next_(NULL), | 880 next_(NULL) {} |
| 903 may_have_function_literal_(true), | |
| 904 loop_variable_(NULL) {} | |
| 905 static int parent_num_ids() { return IterationStatement::num_ids(); } | 881 static int parent_num_ids() { return IterationStatement::num_ids(); } |
| 906 | 882 |
| 907 private: | 883 private: |
| 908 int local_id(int n) const { return base_id() + parent_num_ids() + n; } | 884 int local_id(int n) const { return base_id() + parent_num_ids() + n; } |
| 909 | 885 |
| 910 Statement* init_; | 886 Statement* init_; |
| 911 Expression* cond_; | 887 Expression* cond_; |
| 912 Statement* next_; | 888 Statement* next_; |
| 913 | |
| 914 // True if there is a function literal subexpression in the condition. | |
| 915 bool may_have_function_literal_; | |
| 916 Variable* loop_variable_; | |
| 917 }; | 889 }; |
| 918 | 890 |
| 919 | 891 |
| 920 class ForEachStatement : public IterationStatement { | 892 class ForEachStatement : public IterationStatement { |
| 921 public: | 893 public: |
| 922 enum VisitMode { | 894 enum VisitMode { |
| 923 ENUMERATE, // for (each in subject) body; | 895 ENUMERATE, // for (each in subject) body; |
| 924 ITERATE // for (each of subject) body; | 896 ITERATE // for (each of subject) body; |
| 925 }; | 897 }; |
| 926 | 898 |
| (...skipping 2777 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3704 private: | 3676 private: |
| 3705 Zone* zone_; | 3677 Zone* zone_; |
| 3706 Visitor visitor_; | 3678 Visitor visitor_; |
| 3707 AstValueFactory* ast_value_factory_; | 3679 AstValueFactory* ast_value_factory_; |
| 3708 }; | 3680 }; |
| 3709 | 3681 |
| 3710 | 3682 |
| 3711 } } // namespace v8::internal | 3683 } } // namespace v8::internal |
| 3712 | 3684 |
| 3713 #endif // V8_AST_H_ | 3685 #endif // V8_AST_H_ |
| OLD | NEW |