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

Side by Side Diff: src/ast/ast.h

Issue 1666183002: [es6] Fix tail Call nodes marking. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 10 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
« no previous file with comments | « no previous file | src/ast/prettyprinter.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_AST_AST_H_ 5 #ifndef V8_AST_AST_H_
6 #define V8_AST_AST_H_ 6 #define V8_AST_AST_H_
7 7
8 #include "src/assembler.h" 8 #include "src/assembler.h"
9 #include "src/ast/ast-value-factory.h" 9 #include "src/ast/ast-value-factory.h"
10 #include "src/ast/modules.h" 10 #include "src/ast/modules.h"
(...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 476
477 static int num_ids() { return parent_num_ids() + 1; } 477 static int num_ids() { return parent_num_ids() + 1; }
478 BailoutId DeclsId() const { return BailoutId(local_id(0)); } 478 BailoutId DeclsId() const { return BailoutId(local_id(0)); }
479 479
480 bool IsJump() const override { 480 bool IsJump() const override {
481 return !statements_.is_empty() && statements_.last()->IsJump() 481 return !statements_.is_empty() && statements_.last()->IsJump()
482 && labels() == NULL; // Good enough as an approximation... 482 && labels() == NULL; // Good enough as an approximation...
483 } 483 }
484 484
485 void MarkTail() override { 485 void MarkTail() override {
486 if (!statements_.is_empty()) statements_.last()->MarkTail(); 486 for (int i = 0; i < statements_.length(); i++) {
487 Statement* stmt = statements_.at(i);
488 stmt->MarkTail();
489 }
487 } 490 }
488 491
489 Scope* scope() const { return scope_; } 492 Scope* scope() const { return scope_; }
490 void set_scope(Scope* scope) { scope_ = scope; } 493 void set_scope(Scope* scope) { scope_ = scope; }
491 494
492 protected: 495 protected:
493 Block(Zone* zone, ZoneList<const AstRawString*>* labels, int capacity, 496 Block(Zone* zone, ZoneList<const AstRawString*>* labels, int capacity,
494 bool ignore_completion_value, int pos) 497 bool ignore_completion_value, int pos)
495 : BreakableStatement(zone, labels, TARGET_FOR_NAMED_ONLY, pos), 498 : BreakableStatement(zone, labels, TARGET_FOR_NAMED_ONLY, pos),
496 statements_(capacity, zone), 499 statements_(capacity, zone),
(...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after
961 }; 964 };
962 965
963 966
964 class ExpressionStatement final : public Statement { 967 class ExpressionStatement final : public Statement {
965 public: 968 public:
966 DECLARE_NODE_TYPE(ExpressionStatement) 969 DECLARE_NODE_TYPE(ExpressionStatement)
967 970
968 void set_expression(Expression* e) { expression_ = e; } 971 void set_expression(Expression* e) { expression_ = e; }
969 Expression* expression() const { return expression_; } 972 Expression* expression() const { return expression_; }
970 bool IsJump() const override { return expression_->IsThrow(); } 973 bool IsJump() const override { return expression_->IsThrow(); }
971 void MarkTail() override { expression_->MarkTail(); }
972 974
973 protected: 975 protected:
974 ExpressionStatement(Zone* zone, Expression* expression, int pos) 976 ExpressionStatement(Zone* zone, Expression* expression, int pos)
975 : Statement(zone, pos), expression_(expression) { } 977 : Statement(zone, pos), expression_(expression) { }
976 978
977 private: 979 private:
978 Expression* expression_; 980 Expression* expression_;
979 }; 981 };
980 982
981 983
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1019 1021
1020 1022
1021 class ReturnStatement final : public JumpStatement { 1023 class ReturnStatement final : public JumpStatement {
1022 public: 1024 public:
1023 DECLARE_NODE_TYPE(ReturnStatement) 1025 DECLARE_NODE_TYPE(ReturnStatement)
1024 1026
1025 Expression* expression() const { return expression_; } 1027 Expression* expression() const { return expression_; }
1026 1028
1027 void set_expression(Expression* e) { expression_ = e; } 1029 void set_expression(Expression* e) { expression_ = e; }
1028 1030
1031 void MarkTail() override { expression_->MarkTail(); }
1032
1029 protected: 1033 protected:
1030 explicit ReturnStatement(Zone* zone, Expression* expression, int pos) 1034 explicit ReturnStatement(Zone* zone, Expression* expression, int pos)
1031 : JumpStatement(zone, pos), expression_(expression) { } 1035 : JumpStatement(zone, pos), expression_(expression) { }
1032 1036
1033 private: 1037 private:
1034 Expression* expression_; 1038 Expression* expression_;
1035 }; 1039 };
1036 1040
1037 1041
1038 class WithStatement final : public Statement { 1042 class WithStatement final : public Statement {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1088 } 1092 }
1089 void set_label(Expression* e) { label_ = e; } 1093 void set_label(Expression* e) { label_ = e; }
1090 Label* body_target() { return &body_target_; } 1094 Label* body_target() { return &body_target_; }
1091 ZoneList<Statement*>* statements() const { return statements_; } 1095 ZoneList<Statement*>* statements() const { return statements_; }
1092 1096
1093 static int num_ids() { return parent_num_ids() + 2; } 1097 static int num_ids() { return parent_num_ids() + 2; }
1094 BailoutId EntryId() const { return BailoutId(local_id(0)); } 1098 BailoutId EntryId() const { return BailoutId(local_id(0)); }
1095 TypeFeedbackId CompareId() { return TypeFeedbackId(local_id(1)); } 1099 TypeFeedbackId CompareId() { return TypeFeedbackId(local_id(1)); }
1096 1100
1097 void MarkTail() override { 1101 void MarkTail() override {
1098 if (!statements_->is_empty()) statements_->last()->MarkTail(); 1102 for (int i = 0; i < statements_->length(); i++) {
1103 Statement* stmt = statements_->at(i);
1104 stmt->MarkTail();
1105 }
1099 } 1106 }
1100 1107
1101 Type* compare_type() { return compare_type_; } 1108 Type* compare_type() { return compare_type_; }
1102 void set_compare_type(Type* type) { compare_type_ = type; } 1109 void set_compare_type(Type* type) { compare_type_ = type; }
1103 1110
1104 protected: 1111 protected:
1105 static int parent_num_ids() { return Expression::num_ids(); } 1112 static int parent_num_ids() { return Expression::num_ids(); }
1106 1113
1107 private: 1114 private:
1108 CaseClause(Zone* zone, Expression* label, ZoneList<Statement*>* statements, 1115 CaseClause(Zone* zone, Expression* label, ZoneList<Statement*>* statements,
(...skipping 15 matching lines...) Expand all
1124 tag_ = tag; 1131 tag_ = tag;
1125 cases_ = cases; 1132 cases_ = cases;
1126 } 1133 }
1127 1134
1128 Expression* tag() const { return tag_; } 1135 Expression* tag() const { return tag_; }
1129 ZoneList<CaseClause*>* cases() const { return cases_; } 1136 ZoneList<CaseClause*>* cases() const { return cases_; }
1130 1137
1131 void set_tag(Expression* t) { tag_ = t; } 1138 void set_tag(Expression* t) { tag_ = t; }
1132 1139
1133 void MarkTail() override { 1140 void MarkTail() override {
1134 if (!cases_->is_empty()) cases_->last()->MarkTail(); 1141 for (int i = 0; i < cases_->length(); i++) {
1142 CaseClause* clause = cases_->at(i);
1143 clause->MarkTail();
1144 }
1135 } 1145 }
1136 1146
1137 protected: 1147 protected:
1138 SwitchStatement(Zone* zone, ZoneList<const AstRawString*>* labels, int pos) 1148 SwitchStatement(Zone* zone, ZoneList<const AstRawString*>* labels, int pos)
1139 : BreakableStatement(zone, labels, TARGET_FOR_ANONYMOUS, pos), 1149 : BreakableStatement(zone, labels, TARGET_FOR_ANONYMOUS, pos),
1140 tag_(NULL), 1150 tag_(NULL),
1141 cases_(NULL) {} 1151 cases_(NULL) {}
1142 1152
1143 private: 1153 private:
1144 Expression* tag_; 1154 Expression* tag_;
(...skipping 2416 matching lines...) Expand 10 before | Expand all | Expand 10 after
3561 // the parser-level zone. 3571 // the parser-level zone.
3562 Zone* parser_zone_; 3572 Zone* parser_zone_;
3563 AstValueFactory* ast_value_factory_; 3573 AstValueFactory* ast_value_factory_;
3564 }; 3574 };
3565 3575
3566 3576
3567 } // namespace internal 3577 } // namespace internal
3568 } // namespace v8 3578 } // namespace v8
3569 3579
3570 #endif // V8_AST_AST_H_ 3580 #endif // V8_AST_AST_H_
OLDNEW
« no previous file with comments | « no previous file | src/ast/prettyprinter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698