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

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

Issue 1530403004: [es6] Mark tail Call nodes (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years 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/parsing/parser.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 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 int position_; 244 int position_;
245 }; 245 };
246 246
247 247
248 class Statement : public AstNode { 248 class Statement : public AstNode {
249 public: 249 public:
250 explicit Statement(Zone* zone, int position) : AstNode(position) {} 250 explicit Statement(Zone* zone, int position) : AstNode(position) {}
251 251
252 bool IsEmpty() { return AsEmptyStatement() != NULL; } 252 bool IsEmpty() { return AsEmptyStatement() != NULL; }
253 virtual bool IsJump() const { return false; } 253 virtual bool IsJump() const { return false; }
254 virtual void MarkTail() {}
254 }; 255 };
255 256
256 257
257 class SmallMapList final { 258 class SmallMapList final {
258 public: 259 public:
259 SmallMapList() {} 260 SmallMapList() {}
260 SmallMapList(int capacity, Zone* zone) : list_(capacity, zone) {} 261 SmallMapList(int capacity, Zone* zone) : list_(capacity, zone) {}
261 262
262 void Reserve(int capacity, Zone* zone) { list_.Reserve(capacity, zone); } 263 void Reserve(int capacity, Zone* zone) { list_.Reserve(capacity, zone); }
263 void Clear() { list_.Clear(); } 264 void Clear() { list_.Clear(); }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 // code generation. 309 // code generation.
309 kUninitialized, 310 kUninitialized,
310 // Evaluated for its side effects. 311 // Evaluated for its side effects.
311 kEffect, 312 kEffect,
312 // Evaluated for its value (and side effects). 313 // Evaluated for its value (and side effects).
313 kValue, 314 kValue,
314 // Evaluated for control flow (and side effects). 315 // Evaluated for control flow (and side effects).
315 kTest 316 kTest
316 }; 317 };
317 318
319 // Mark this expression as being in tail position.
320 virtual void MarkTail() {}
321
318 // True iff the expression is a valid reference expression. 322 // True iff the expression is a valid reference expression.
319 virtual bool IsValidReferenceExpression() const { return false; } 323 virtual bool IsValidReferenceExpression() const { return false; }
320 324
321 // Helpers for ToBoolean conversion. 325 // Helpers for ToBoolean conversion.
322 virtual bool ToBooleanIsTrue() const { return false; } 326 virtual bool ToBooleanIsTrue() const { return false; }
323 virtual bool ToBooleanIsFalse() const { return false; } 327 virtual bool ToBooleanIsFalse() const { return false; }
324 328
325 // Symbols that cannot be parsed as array indices are considered property 329 // Symbols that cannot be parsed as array indices are considered property
326 // names. We do not treat symbols that can be array indexes as property 330 // names. We do not treat symbols that can be array indexes as property
327 // names because [] for string objects is handled only by keyed ICs. 331 // names because [] for string objects is handled only by keyed ICs.
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 bool ignore_completion_value() const { return ignore_completion_value_; } 468 bool ignore_completion_value() const { return ignore_completion_value_; }
465 469
466 static int num_ids() { return parent_num_ids() + 1; } 470 static int num_ids() { return parent_num_ids() + 1; }
467 BailoutId DeclsId() const { return BailoutId(local_id(0)); } 471 BailoutId DeclsId() const { return BailoutId(local_id(0)); }
468 472
469 bool IsJump() const override { 473 bool IsJump() const override {
470 return !statements_.is_empty() && statements_.last()->IsJump() 474 return !statements_.is_empty() && statements_.last()->IsJump()
471 && labels() == NULL; // Good enough as an approximation... 475 && labels() == NULL; // Good enough as an approximation...
472 } 476 }
473 477
478 void MarkTail() override {
479 if (!statements_.is_empty()) statements_.last()->MarkTail();
480 }
481
474 Scope* scope() const { return scope_; } 482 Scope* scope() const { return scope_; }
475 void set_scope(Scope* scope) { scope_ = scope; } 483 void set_scope(Scope* scope) { scope_ = scope; }
476 484
477 protected: 485 protected:
478 Block(Zone* zone, ZoneList<const AstRawString*>* labels, int capacity, 486 Block(Zone* zone, ZoneList<const AstRawString*>* labels, int capacity,
479 bool ignore_completion_value, int pos) 487 bool ignore_completion_value, int pos)
480 : BreakableStatement(zone, labels, TARGET_FOR_NAMED_ONLY, pos), 488 : BreakableStatement(zone, labels, TARGET_FOR_NAMED_ONLY, pos),
481 statements_(capacity, zone), 489 statements_(capacity, zone),
482 ignore_completion_value_(ignore_completion_value), 490 ignore_completion_value_(ignore_completion_value),
483 scope_(NULL) {} 491 scope_(NULL) {}
484 static int parent_num_ids() { return BreakableStatement::num_ids(); } 492 static int parent_num_ids() { return BreakableStatement::num_ids(); }
485 493
486 private: 494 private:
487 int local_id(int n) const { return base_id() + parent_num_ids() + n; } 495 int local_id(int n) const { return base_id() + parent_num_ids() + n; }
488 496
489 ZoneList<Statement*> statements_; 497 ZoneList<Statement*> statements_;
490 bool ignore_completion_value_; 498 bool ignore_completion_value_;
491 Scope* scope_; 499 Scope* scope_;
492 }; 500 };
493 501
494 502
495 class DoExpression final : public Expression { 503 class DoExpression final : public Expression {
496 public: 504 public:
497 DECLARE_NODE_TYPE(DoExpression) 505 DECLARE_NODE_TYPE(DoExpression)
498 506
499 Block* block() { return block_; } 507 Block* block() { return block_; }
500 VariableProxy* result() { return result_; } 508 VariableProxy* result() { return result_; }
501 509
510 void MarkTail() override { block_->MarkTail(); }
511
502 protected: 512 protected:
503 DoExpression(Zone* zone, Block* block, VariableProxy* result, int pos) 513 DoExpression(Zone* zone, Block* block, VariableProxy* result, int pos)
504 : Expression(zone, pos), block_(block), result_(result) { 514 : Expression(zone, pos), block_(block), result_(result) {
505 DCHECK_NOT_NULL(block_); 515 DCHECK_NOT_NULL(block_);
506 DCHECK_NOT_NULL(result_); 516 DCHECK_NOT_NULL(result_);
507 } 517 }
508 static int parent_num_ids() { return Expression::num_ids(); } 518 static int parent_num_ids() { return Expression::num_ids(); }
509 519
510 private: 520 private:
511 int local_id(int n) const { return base_id() + parent_num_ids() + n; } 521 int local_id(int n) const { return base_id() + parent_num_ids() + n; }
(...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after
927 }; 937 };
928 938
929 939
930 class ExpressionStatement final : public Statement { 940 class ExpressionStatement final : public Statement {
931 public: 941 public:
932 DECLARE_NODE_TYPE(ExpressionStatement) 942 DECLARE_NODE_TYPE(ExpressionStatement)
933 943
934 void set_expression(Expression* e) { expression_ = e; } 944 void set_expression(Expression* e) { expression_ = e; }
935 Expression* expression() const { return expression_; } 945 Expression* expression() const { return expression_; }
936 bool IsJump() const override { return expression_->IsThrow(); } 946 bool IsJump() const override { return expression_->IsThrow(); }
947 void MarkTail() override { expression_->MarkTail(); }
937 948
938 protected: 949 protected:
939 ExpressionStatement(Zone* zone, Expression* expression, int pos) 950 ExpressionStatement(Zone* zone, Expression* expression, int pos)
940 : Statement(zone, pos), expression_(expression) { } 951 : Statement(zone, pos), expression_(expression) { }
941 952
942 private: 953 private:
943 Expression* expression_; 954 Expression* expression_;
944 }; 955 };
945 956
946 957
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1005 Scope* scope() { return scope_; } 1016 Scope* scope() { return scope_; }
1006 Expression* expression() const { return expression_; } 1017 Expression* expression() const { return expression_; }
1007 Statement* statement() const { return statement_; } 1018 Statement* statement() const { return statement_; }
1008 void set_statement(Statement* s) { statement_ = s; } 1019 void set_statement(Statement* s) { statement_ = s; }
1009 1020
1010 void set_base_id(int id) { base_id_ = id; } 1021 void set_base_id(int id) { base_id_ = id; }
1011 static int num_ids() { return parent_num_ids() + 2; } 1022 static int num_ids() { return parent_num_ids() + 2; }
1012 BailoutId ToObjectId() const { return BailoutId(local_id(0)); } 1023 BailoutId ToObjectId() const { return BailoutId(local_id(0)); }
1013 BailoutId EntryId() const { return BailoutId(local_id(1)); } 1024 BailoutId EntryId() const { return BailoutId(local_id(1)); }
1014 1025
1026 void MarkTail() override { statement_->MarkTail(); }
1027
1015 protected: 1028 protected:
1016 WithStatement(Zone* zone, Scope* scope, Expression* expression, 1029 WithStatement(Zone* zone, Scope* scope, Expression* expression,
1017 Statement* statement, int pos) 1030 Statement* statement, int pos)
1018 : Statement(zone, pos), 1031 : Statement(zone, pos),
1019 scope_(scope), 1032 scope_(scope),
1020 expression_(expression), 1033 expression_(expression),
1021 statement_(statement), 1034 statement_(statement),
1022 base_id_(BailoutId::None().ToInt()) {} 1035 base_id_(BailoutId::None().ToInt()) {}
1023 static int parent_num_ids() { return 0; } 1036 static int parent_num_ids() { return 0; }
1024 1037
(...skipping 21 matching lines...) Expand all
1046 CHECK(!is_default()); 1059 CHECK(!is_default());
1047 return label_; 1060 return label_;
1048 } 1061 }
1049 Label* body_target() { return &body_target_; } 1062 Label* body_target() { return &body_target_; }
1050 ZoneList<Statement*>* statements() const { return statements_; } 1063 ZoneList<Statement*>* statements() const { return statements_; }
1051 1064
1052 static int num_ids() { return parent_num_ids() + 2; } 1065 static int num_ids() { return parent_num_ids() + 2; }
1053 BailoutId EntryId() const { return BailoutId(local_id(0)); } 1066 BailoutId EntryId() const { return BailoutId(local_id(0)); }
1054 TypeFeedbackId CompareId() { return TypeFeedbackId(local_id(1)); } 1067 TypeFeedbackId CompareId() { return TypeFeedbackId(local_id(1)); }
1055 1068
1069 void MarkTail() override {
1070 if (!statements_->is_empty()) statements_->last()->MarkTail();
1071 }
1072
1056 Type* compare_type() { return compare_type_; } 1073 Type* compare_type() { return compare_type_; }
1057 void set_compare_type(Type* type) { compare_type_ = type; } 1074 void set_compare_type(Type* type) { compare_type_ = type; }
1058 1075
1059 protected: 1076 protected:
1060 static int parent_num_ids() { return Expression::num_ids(); } 1077 static int parent_num_ids() { return Expression::num_ids(); }
1061 1078
1062 private: 1079 private:
1063 CaseClause(Zone* zone, Expression* label, ZoneList<Statement*>* statements, 1080 CaseClause(Zone* zone, Expression* label, ZoneList<Statement*>* statements,
1064 int pos); 1081 int pos);
1065 int local_id(int n) const { return base_id() + parent_num_ids() + n; } 1082 int local_id(int n) const { return base_id() + parent_num_ids() + n; }
(...skipping 10 matching lines...) Expand all
1076 DECLARE_NODE_TYPE(SwitchStatement) 1093 DECLARE_NODE_TYPE(SwitchStatement)
1077 1094
1078 void Initialize(Expression* tag, ZoneList<CaseClause*>* cases) { 1095 void Initialize(Expression* tag, ZoneList<CaseClause*>* cases) {
1079 tag_ = tag; 1096 tag_ = tag;
1080 cases_ = cases; 1097 cases_ = cases;
1081 } 1098 }
1082 1099
1083 Expression* tag() const { return tag_; } 1100 Expression* tag() const { return tag_; }
1084 ZoneList<CaseClause*>* cases() const { return cases_; } 1101 ZoneList<CaseClause*>* cases() const { return cases_; }
1085 1102
1103 void MarkTail() override {
1104 if (!cases_->is_empty()) cases_->last()->MarkTail();
1105 }
1106
1086 protected: 1107 protected:
1087 SwitchStatement(Zone* zone, ZoneList<const AstRawString*>* labels, int pos) 1108 SwitchStatement(Zone* zone, ZoneList<const AstRawString*>* labels, int pos)
1088 : BreakableStatement(zone, labels, TARGET_FOR_ANONYMOUS, pos), 1109 : BreakableStatement(zone, labels, TARGET_FOR_ANONYMOUS, pos),
1089 tag_(NULL), 1110 tag_(NULL),
1090 cases_(NULL) {} 1111 cases_(NULL) {}
1091 1112
1092 private: 1113 private:
1093 Expression* tag_; 1114 Expression* tag_;
1094 ZoneList<CaseClause*>* cases_; 1115 ZoneList<CaseClause*>* cases_;
1095 }; 1116 };
(...skipping 16 matching lines...) Expand all
1112 Statement* else_statement() const { return else_statement_; } 1133 Statement* else_statement() const { return else_statement_; }
1113 1134
1114 void set_then_statement(Statement* s) { then_statement_ = s; } 1135 void set_then_statement(Statement* s) { then_statement_ = s; }
1115 void set_else_statement(Statement* s) { else_statement_ = s; } 1136 void set_else_statement(Statement* s) { else_statement_ = s; }
1116 1137
1117 bool IsJump() const override { 1138 bool IsJump() const override {
1118 return HasThenStatement() && then_statement()->IsJump() 1139 return HasThenStatement() && then_statement()->IsJump()
1119 && HasElseStatement() && else_statement()->IsJump(); 1140 && HasElseStatement() && else_statement()->IsJump();
1120 } 1141 }
1121 1142
1143 void MarkTail() override {
1144 then_statement_->MarkTail();
1145 else_statement_->MarkTail();
1146 }
1147
1122 void set_base_id(int id) { base_id_ = id; } 1148 void set_base_id(int id) { base_id_ = id; }
1123 static int num_ids() { return parent_num_ids() + 3; } 1149 static int num_ids() { return parent_num_ids() + 3; }
1124 BailoutId IfId() const { return BailoutId(local_id(0)); } 1150 BailoutId IfId() const { return BailoutId(local_id(0)); }
1125 BailoutId ThenId() const { return BailoutId(local_id(1)); } 1151 BailoutId ThenId() const { return BailoutId(local_id(1)); }
1126 BailoutId ElseId() const { return BailoutId(local_id(2)); } 1152 BailoutId ElseId() const { return BailoutId(local_id(2)); }
1127 1153
1128 protected: 1154 protected:
1129 IfStatement(Zone* zone, Expression* condition, Statement* then_statement, 1155 IfStatement(Zone* zone, Expression* condition, Statement* then_statement,
1130 Statement* else_statement, int pos) 1156 Statement* else_statement, int pos)
1131 : Statement(zone, pos), 1157 : Statement(zone, pos),
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1181 1207
1182 class TryCatchStatement final : public TryStatement { 1208 class TryCatchStatement final : public TryStatement {
1183 public: 1209 public:
1184 DECLARE_NODE_TYPE(TryCatchStatement) 1210 DECLARE_NODE_TYPE(TryCatchStatement)
1185 1211
1186 Scope* scope() { return scope_; } 1212 Scope* scope() { return scope_; }
1187 Variable* variable() { return variable_; } 1213 Variable* variable() { return variable_; }
1188 Block* catch_block() const { return catch_block_; } 1214 Block* catch_block() const { return catch_block_; }
1189 void set_catch_block(Block* b) { catch_block_ = b; } 1215 void set_catch_block(Block* b) { catch_block_ = b; }
1190 1216
1217 void MarkTail() override { catch_block_->MarkTail(); }
1218
1191 protected: 1219 protected:
1192 TryCatchStatement(Zone* zone, Block* try_block, Scope* scope, 1220 TryCatchStatement(Zone* zone, Block* try_block, Scope* scope,
1193 Variable* variable, Block* catch_block, int pos) 1221 Variable* variable, Block* catch_block, int pos)
1194 : TryStatement(zone, try_block, pos), 1222 : TryStatement(zone, try_block, pos),
1195 scope_(scope), 1223 scope_(scope),
1196 variable_(variable), 1224 variable_(variable),
1197 catch_block_(catch_block) {} 1225 catch_block_(catch_block) {}
1198 1226
1199 private: 1227 private:
1200 Scope* scope_; 1228 Scope* scope_;
1201 Variable* variable_; 1229 Variable* variable_;
1202 Block* catch_block_; 1230 Block* catch_block_;
1203 }; 1231 };
1204 1232
1205 1233
1206 class TryFinallyStatement final : public TryStatement { 1234 class TryFinallyStatement final : public TryStatement {
1207 public: 1235 public:
1208 DECLARE_NODE_TYPE(TryFinallyStatement) 1236 DECLARE_NODE_TYPE(TryFinallyStatement)
1209 1237
1210 Block* finally_block() const { return finally_block_; } 1238 Block* finally_block() const { return finally_block_; }
1211 void set_finally_block(Block* b) { finally_block_ = b; } 1239 void set_finally_block(Block* b) { finally_block_ = b; }
1212 1240
1241 void MarkTail() override { finally_block_->MarkTail(); }
1242
1213 protected: 1243 protected:
1214 TryFinallyStatement(Zone* zone, Block* try_block, Block* finally_block, 1244 TryFinallyStatement(Zone* zone, Block* try_block, Block* finally_block,
1215 int pos) 1245 int pos)
1216 : TryStatement(zone, try_block, pos), finally_block_(finally_block) {} 1246 : TryStatement(zone, try_block, pos), finally_block_(finally_block) {}
1217 1247
1218 private: 1248 private:
1219 Block* finally_block_; 1249 Block* finally_block_;
1220 }; 1250 };
1221 1251
1222 1252
(...skipping 680 matching lines...) Expand 10 before | Expand all | Expand 10 after
1903 BailoutId LookupId() const { return BailoutId(local_id(2)); } 1933 BailoutId LookupId() const { return BailoutId(local_id(2)); }
1904 BailoutId CallId() const { return BailoutId(local_id(3)); } 1934 BailoutId CallId() const { return BailoutId(local_id(3)); }
1905 1935
1906 bool is_uninitialized() const { 1936 bool is_uninitialized() const {
1907 return IsUninitializedField::decode(bit_field_); 1937 return IsUninitializedField::decode(bit_field_);
1908 } 1938 }
1909 void set_is_uninitialized(bool b) { 1939 void set_is_uninitialized(bool b) {
1910 bit_field_ = IsUninitializedField::update(bit_field_, b); 1940 bit_field_ = IsUninitializedField::update(bit_field_, b);
1911 } 1941 }
1912 1942
1943 bool is_tail() const { return IsTailField::decode(bit_field_); }
1944 void MarkTail() override {
1945 bit_field_ = IsTailField::update(bit_field_, true);
1946 }
1947
1913 enum CallType { 1948 enum CallType {
1914 POSSIBLY_EVAL_CALL, 1949 POSSIBLY_EVAL_CALL,
1915 GLOBAL_CALL, 1950 GLOBAL_CALL,
1916 LOOKUP_SLOT_CALL, 1951 LOOKUP_SLOT_CALL,
1917 NAMED_PROPERTY_CALL, 1952 NAMED_PROPERTY_CALL,
1918 KEYED_PROPERTY_CALL, 1953 KEYED_PROPERTY_CALL,
1919 NAMED_SUPER_PROPERTY_CALL, 1954 NAMED_SUPER_PROPERTY_CALL,
1920 KEYED_SUPER_PROPERTY_CALL, 1955 KEYED_SUPER_PROPERTY_CALL,
1921 SUPER_CALL, 1956 SUPER_CALL,
1922 OTHER_CALL 1957 OTHER_CALL
(...skipping 25 matching lines...) Expand all
1948 private: 1983 private:
1949 int local_id(int n) const { return base_id() + parent_num_ids() + n; } 1984 int local_id(int n) const { return base_id() + parent_num_ids() + n; }
1950 1985
1951 FeedbackVectorSlot ic_slot_; 1986 FeedbackVectorSlot ic_slot_;
1952 FeedbackVectorSlot stub_slot_; 1987 FeedbackVectorSlot stub_slot_;
1953 Expression* expression_; 1988 Expression* expression_;
1954 ZoneList<Expression*>* arguments_; 1989 ZoneList<Expression*>* arguments_;
1955 Handle<JSFunction> target_; 1990 Handle<JSFunction> target_;
1956 Handle<AllocationSite> allocation_site_; 1991 Handle<AllocationSite> allocation_site_;
1957 class IsUninitializedField : public BitField8<bool, 0, 1> {}; 1992 class IsUninitializedField : public BitField8<bool, 0, 1> {};
1993 class IsTailField : public BitField8<bool, 1, 1> {};
1958 uint8_t bit_field_; 1994 uint8_t bit_field_;
1959 }; 1995 };
1960 1996
1961 1997
1962 class CallNew final : public Expression { 1998 class CallNew final : public Expression {
1963 public: 1999 public:
1964 DECLARE_NODE_TYPE(CallNew) 2000 DECLARE_NODE_TYPE(CallNew)
1965 2001
1966 Expression* expression() const { return expression_; } 2002 Expression* expression() const { return expression_; }
1967 ZoneList<Expression*>* arguments() const { return arguments_; } 2003 ZoneList<Expression*>* arguments() const { return arguments_; }
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
2104 DECLARE_NODE_TYPE(BinaryOperation) 2140 DECLARE_NODE_TYPE(BinaryOperation)
2105 2141
2106 Token::Value op() const { return static_cast<Token::Value>(op_); } 2142 Token::Value op() const { return static_cast<Token::Value>(op_); }
2107 Expression* left() const { return left_; } 2143 Expression* left() const { return left_; }
2108 Expression* right() const { return right_; } 2144 Expression* right() const { return right_; }
2109 Handle<AllocationSite> allocation_site() const { return allocation_site_; } 2145 Handle<AllocationSite> allocation_site() const { return allocation_site_; }
2110 void set_allocation_site(Handle<AllocationSite> allocation_site) { 2146 void set_allocation_site(Handle<AllocationSite> allocation_site) {
2111 allocation_site_ = allocation_site; 2147 allocation_site_ = allocation_site;
2112 } 2148 }
2113 2149
2150 void MarkTail() override {
2151 switch (op()) {
2152 case Token::COMMA:
2153 case Token::AND:
2154 case Token::OR:
2155 right_->MarkTail();
2156 default:
2157 break;
2158 }
2159 }
2160
2114 // The short-circuit logical operations need an AST ID for their 2161 // The short-circuit logical operations need an AST ID for their
2115 // right-hand subexpression. 2162 // right-hand subexpression.
2116 static int num_ids() { return parent_num_ids() + 2; } 2163 static int num_ids() { return parent_num_ids() + 2; }
2117 BailoutId RightId() const { return BailoutId(local_id(0)); } 2164 BailoutId RightId() const { return BailoutId(local_id(0)); }
2118 2165
2119 TypeFeedbackId BinaryOperationFeedbackId() const { 2166 TypeFeedbackId BinaryOperationFeedbackId() const {
2120 return TypeFeedbackId(local_id(1)); 2167 return TypeFeedbackId(local_id(1));
2121 } 2168 }
2122 Maybe<int> fixed_right_arg() const { 2169 Maybe<int> fixed_right_arg() const {
2123 return has_fixed_right_arg_ ? Just(fixed_right_arg_value_) : Nothing<int>(); 2170 return has_fixed_right_arg_ ? Just(fixed_right_arg_value_) : Nothing<int>();
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
2295 2342
2296 2343
2297 class Conditional final : public Expression { 2344 class Conditional final : public Expression {
2298 public: 2345 public:
2299 DECLARE_NODE_TYPE(Conditional) 2346 DECLARE_NODE_TYPE(Conditional)
2300 2347
2301 Expression* condition() const { return condition_; } 2348 Expression* condition() const { return condition_; }
2302 Expression* then_expression() const { return then_expression_; } 2349 Expression* then_expression() const { return then_expression_; }
2303 Expression* else_expression() const { return else_expression_; } 2350 Expression* else_expression() const { return else_expression_; }
2304 2351
2352 void MarkTail() override {
2353 then_expression_->MarkTail();
2354 else_expression_->MarkTail();
2355 }
2356
2305 static int num_ids() { return parent_num_ids() + 2; } 2357 static int num_ids() { return parent_num_ids() + 2; }
2306 BailoutId ThenId() const { return BailoutId(local_id(0)); } 2358 BailoutId ThenId() const { return BailoutId(local_id(0)); }
2307 BailoutId ElseId() const { return BailoutId(local_id(1)); } 2359 BailoutId ElseId() const { return BailoutId(local_id(1)); }
2308 2360
2309 protected: 2361 protected:
2310 Conditional(Zone* zone, Expression* condition, Expression* then_expression, 2362 Conditional(Zone* zone, Expression* condition, Expression* then_expression,
2311 Expression* else_expression, int position) 2363 Expression* else_expression, int position)
2312 : Expression(zone, position), 2364 : Expression(zone, position),
2313 condition_(condition), 2365 condition_(condition),
2314 then_expression_(then_expression), 2366 then_expression_(then_expression),
(...skipping 1395 matching lines...) Expand 10 before | Expand all | Expand 10 after
3710 // the parser-level zone. 3762 // the parser-level zone.
3711 Zone* parser_zone_; 3763 Zone* parser_zone_;
3712 AstValueFactory* ast_value_factory_; 3764 AstValueFactory* ast_value_factory_;
3713 }; 3765 };
3714 3766
3715 3767
3716 } // namespace internal 3768 } // namespace internal
3717 } // namespace v8 3769 } // namespace v8
3718 3770
3719 #endif // V8_AST_AST_H_ 3771 #endif // V8_AST_AST_H_
OLDNEW
« no previous file with comments | « no previous file | src/parsing/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698