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

Side by Side Diff: src/ast.h

Issue 805005: Revert changes 4088 and 4087 to fix build. (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 10 years, 9 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 | « src/arm/virtual-frame-arm.h ('k') | src/ast.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 2010 the V8 project authors. All rights reserved. 1 // Copyright 2010 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 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 virtual Expression* AsExpression() { return NULL; } 130 virtual Expression* AsExpression() { return NULL; }
131 virtual Literal* AsLiteral() { return NULL; } 131 virtual Literal* AsLiteral() { return NULL; }
132 virtual Slot* AsSlot() { return NULL; } 132 virtual Slot* AsSlot() { return NULL; }
133 virtual VariableProxy* AsVariableProxy() { return NULL; } 133 virtual VariableProxy* AsVariableProxy() { return NULL; }
134 virtual Property* AsProperty() { return NULL; } 134 virtual Property* AsProperty() { return NULL; }
135 virtual Call* AsCall() { return NULL; } 135 virtual Call* AsCall() { return NULL; }
136 virtual TargetCollector* AsTargetCollector() { return NULL; } 136 virtual TargetCollector* AsTargetCollector() { return NULL; }
137 virtual BreakableStatement* AsBreakableStatement() { return NULL; } 137 virtual BreakableStatement* AsBreakableStatement() { return NULL; }
138 virtual IterationStatement* AsIterationStatement() { return NULL; } 138 virtual IterationStatement* AsIterationStatement() { return NULL; }
139 virtual UnaryOperation* AsUnaryOperation() { return NULL; } 139 virtual UnaryOperation* AsUnaryOperation() { return NULL; }
140 virtual CountOperation* AsCountOperation() { return NULL; }
141 virtual BinaryOperation* AsBinaryOperation() { return NULL; } 140 virtual BinaryOperation* AsBinaryOperation() { return NULL; }
142 virtual Assignment* AsAssignment() { return NULL; } 141 virtual Assignment* AsAssignment() { return NULL; }
143 virtual FunctionLiteral* AsFunctionLiteral() { return NULL; } 142 virtual FunctionLiteral* AsFunctionLiteral() { return NULL; }
144 virtual MaterializedLiteral* AsMaterializedLiteral() { return NULL; } 143 virtual MaterializedLiteral* AsMaterializedLiteral() { return NULL; }
145 virtual ObjectLiteral* AsObjectLiteral() { return NULL; } 144 virtual ObjectLiteral* AsObjectLiteral() { return NULL; }
146 virtual ArrayLiteral* AsArrayLiteral() { return NULL; } 145 virtual ArrayLiteral* AsArrayLiteral() { return NULL; }
147 virtual CompareOperation* AsCompareOperation() { return NULL; } 146 virtual CompareOperation* AsCompareOperation() { return NULL; }
148 147
149 int num() { return num_; } 148 int num() { return num_; }
150 void set_num(int n) { num_ = n; } 149 void set_num(int n) { num_ = n; }
151 150
152 private: 151 private:
153 // Support for ast node numbering. 152 // Support for ast node numbering.
154 int num_; 153 int num_;
155 }; 154 };
156 155
157 156
158 class Statement: public AstNode { 157 class Statement: public AstNode {
159 public: 158 public:
160 Statement() : statement_pos_(RelocInfo::kNoPosition) {} 159 Statement() : statement_pos_(RelocInfo::kNoPosition) {}
161 160
162 virtual Statement* AsStatement() { return this; } 161 virtual Statement* AsStatement() { return this; }
163 virtual ReturnStatement* AsReturnStatement() { return NULL; } 162 virtual ReturnStatement* AsReturnStatement() { return NULL; }
164 163
165 virtual Assignment* StatementAsSimpleAssignment() { return NULL; }
166 virtual CountOperation* StatementAsCountOperation() { return NULL; }
167
168 bool IsEmpty() { return AsEmptyStatement() != NULL; } 164 bool IsEmpty() { return AsEmptyStatement() != NULL; }
169 165
170 void set_statement_pos(int statement_pos) { statement_pos_ = statement_pos; } 166 void set_statement_pos(int statement_pos) { statement_pos_ = statement_pos; }
171 int statement_pos() const { return statement_pos_; } 167 int statement_pos() const { return statement_pos_; }
172 168
173 private: 169 private:
174 int statement_pos_; 170 int statement_pos_;
175 }; 171 };
176 172
177 173
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 314
319 class Block: public BreakableStatement { 315 class Block: public BreakableStatement {
320 public: 316 public:
321 Block(ZoneStringList* labels, int capacity, bool is_initializer_block) 317 Block(ZoneStringList* labels, int capacity, bool is_initializer_block)
322 : BreakableStatement(labels, TARGET_FOR_NAMED_ONLY), 318 : BreakableStatement(labels, TARGET_FOR_NAMED_ONLY),
323 statements_(capacity), 319 statements_(capacity),
324 is_initializer_block_(is_initializer_block) { } 320 is_initializer_block_(is_initializer_block) { }
325 321
326 virtual void Accept(AstVisitor* v); 322 virtual void Accept(AstVisitor* v);
327 323
328 virtual Assignment* StatementAsSimpleAssignment() {
329 if (statements_.length() != 1) return NULL;
330 return statements_[0]->StatementAsSimpleAssignment();
331 }
332
333 virtual CountOperation* StatementAsCountOperation() {
334 if (statements_.length() != 1) return NULL;
335 return statements_[0]->StatementAsCountOperation();
336 }
337
338 void AddStatement(Statement* statement) { statements_.Add(statement); } 324 void AddStatement(Statement* statement) { statements_.Add(statement); }
339 325
340 ZoneList<Statement*>* statements() { return &statements_; } 326 ZoneList<Statement*>* statements() { return &statements_; }
341 bool is_initializer_block() const { return is_initializer_block_; } 327 bool is_initializer_block() const { return is_initializer_block_; }
342 328
343 private: 329 private:
344 ZoneList<Statement*> statements_; 330 ZoneList<Statement*> statements_;
345 bool is_initializer_block_; 331 bool is_initializer_block_;
346 }; 332 };
347 333
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 }; 435 };
450 436
451 437
452 class ForStatement: public IterationStatement { 438 class ForStatement: public IterationStatement {
453 public: 439 public:
454 explicit ForStatement(ZoneStringList* labels) 440 explicit ForStatement(ZoneStringList* labels)
455 : IterationStatement(labels), 441 : IterationStatement(labels),
456 init_(NULL), 442 init_(NULL),
457 cond_(NULL), 443 cond_(NULL),
458 next_(NULL), 444 next_(NULL),
459 may_have_function_literal_(true), 445 may_have_function_literal_(true) {
460 loop_variable_(NULL) {} 446 }
461 447
462 void Initialize(Statement* init, 448 void Initialize(Statement* init,
463 Expression* cond, 449 Expression* cond,
464 Statement* next, 450 Statement* next,
465 Statement* body) { 451 Statement* body) {
466 IterationStatement::Initialize(body); 452 IterationStatement::Initialize(body);
467 init_ = init; 453 init_ = init;
468 cond_ = cond; 454 cond_ = cond;
469 next_ = next; 455 next_ = next;
470 } 456 }
471 457
472 virtual void Accept(AstVisitor* v); 458 virtual void Accept(AstVisitor* v);
473 459
474 Statement* init() const { return init_; } 460 Statement* init() const { return init_; }
475 Expression* cond() const { return cond_; } 461 Expression* cond() const { return cond_; }
476 Statement* next() const { return next_; } 462 Statement* next() const { return next_; }
477 bool may_have_function_literal() const { 463 bool may_have_function_literal() const {
478 return may_have_function_literal_; 464 return may_have_function_literal_;
479 } 465 }
480 466
481 bool is_fast_smi_loop() { return loop_variable_ != NULL; }
482 Variable* loop_variable() { return loop_variable_; }
483 void set_loop_variable(Variable* var) { loop_variable_ = var; }
484
485 private: 467 private:
486 Statement* init_; 468 Statement* init_;
487 Expression* cond_; 469 Expression* cond_;
488 Statement* next_; 470 Statement* next_;
489 // True if there is a function literal subexpression in the condition. 471 // True if there is a function literal subexpression in the condition.
490 bool may_have_function_literal_; 472 bool may_have_function_literal_;
491 Variable* loop_variable_;
492 473
493 friend class AstOptimizer; 474 friend class AstOptimizer;
494 }; 475 };
495 476
496 477
497 class ForInStatement: public IterationStatement { 478 class ForInStatement: public IterationStatement {
498 public: 479 public:
499 explicit ForInStatement(ZoneStringList* labels) 480 explicit ForInStatement(ZoneStringList* labels)
500 : IterationStatement(labels), each_(NULL), enumerable_(NULL) { } 481 : IterationStatement(labels), each_(NULL), enumerable_(NULL) { }
501 482
(...skipping 17 matching lines...) Expand all
519 class ExpressionStatement: public Statement { 500 class ExpressionStatement: public Statement {
520 public: 501 public:
521 explicit ExpressionStatement(Expression* expression) 502 explicit ExpressionStatement(Expression* expression)
522 : expression_(expression) { } 503 : expression_(expression) { }
523 504
524 virtual void Accept(AstVisitor* v); 505 virtual void Accept(AstVisitor* v);
525 506
526 // Type testing & conversion. 507 // Type testing & conversion.
527 virtual ExpressionStatement* AsExpressionStatement() { return this; } 508 virtual ExpressionStatement* AsExpressionStatement() { return this; }
528 509
529 virtual Assignment* StatementAsSimpleAssignment();
530 virtual CountOperation* StatementAsCountOperation();
531
532 void set_expression(Expression* e) { expression_ = e; } 510 void set_expression(Expression* e) { expression_ = e; }
533 Expression* expression() { return expression_; } 511 Expression* expression() { return expression_; }
534 512
535 private: 513 private:
536 Expression* expression_; 514 Expression* expression_;
537 }; 515 };
538 516
539 517
540 class ContinueStatement: public Statement { 518 class ContinueStatement: public Statement {
541 public: 519 public:
(...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after
979 return var_ == NULL ? true : var_->IsValidLeftHandSide(); 957 return var_ == NULL ? true : var_->IsValidLeftHandSide();
980 } 958 }
981 959
982 virtual bool IsLeaf() { 960 virtual bool IsLeaf() {
983 ASSERT(var_ != NULL); // Variable must be resolved. 961 ASSERT(var_ != NULL); // Variable must be resolved.
984 return var()->is_global() || var()->rewrite()->IsLeaf(); 962 return var()->is_global() || var()->rewrite()->IsLeaf();
985 } 963 }
986 964
987 // Reading from a mutable variable is a side effect, but 'this' is 965 // Reading from a mutable variable is a side effect, but 'this' is
988 // immutable. 966 // immutable.
989 virtual bool IsTrivial() { return is_trivial_; } 967 virtual bool IsTrivial() { return is_this(); }
990 968
991 bool IsVariable(Handle<String> n) { 969 bool IsVariable(Handle<String> n) {
992 return !is_this() && name().is_identical_to(n); 970 return !is_this() && name().is_identical_to(n);
993 } 971 }
994 972
995 bool IsArguments() { 973 bool IsArguments() {
996 Variable* variable = AsVariable(); 974 Variable* variable = AsVariable();
997 return (variable == NULL) ? false : variable->is_arguments(); 975 return (variable == NULL) ? false : variable->is_arguments();
998 } 976 }
999 977
1000 Handle<String> name() const { return name_; } 978 Handle<String> name() const { return name_; }
1001 Variable* var() const { return var_; } 979 Variable* var() const { return var_; }
1002 bool is_this() const { return is_this_; } 980 bool is_this() const { return is_this_; }
1003 bool inside_with() const { return inside_with_; } 981 bool inside_with() const { return inside_with_; }
1004 bool is_trivial() { return is_trivial_; }
1005 void set_is_trivial(bool b) { is_trivial_ = b; }
1006 982
1007 // Bind this proxy to the variable var. 983 // Bind this proxy to the variable var.
1008 void BindTo(Variable* var); 984 void BindTo(Variable* var);
1009 985
1010 protected: 986 protected:
1011 Handle<String> name_; 987 Handle<String> name_;
1012 Variable* var_; // resolved variable, or NULL 988 Variable* var_; // resolved variable, or NULL
1013 bool is_this_; 989 bool is_this_;
1014 bool inside_with_; 990 bool inside_with_;
1015 bool is_trivial_;
1016 991
1017 VariableProxy(Handle<String> name, bool is_this, bool inside_with); 992 VariableProxy(Handle<String> name, bool is_this, bool inside_with);
1018 explicit VariableProxy(bool is_this); 993 explicit VariableProxy(bool is_this);
1019 994
1020 friend class Scope; 995 friend class Scope;
1021 }; 996 };
1022 997
1023 998
1024 class VariableProxySentinel: public VariableProxy { 999 class VariableProxySentinel: public VariableProxy {
1025 public: 1000 public:
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
1264 1239
1265 class CountOperation: public Expression { 1240 class CountOperation: public Expression {
1266 public: 1241 public:
1267 CountOperation(bool is_prefix, Token::Value op, Expression* expression) 1242 CountOperation(bool is_prefix, Token::Value op, Expression* expression)
1268 : is_prefix_(is_prefix), op_(op), expression_(expression) { 1243 : is_prefix_(is_prefix), op_(op), expression_(expression) {
1269 ASSERT(Token::IsCountOp(op)); 1244 ASSERT(Token::IsCountOp(op));
1270 } 1245 }
1271 1246
1272 virtual void Accept(AstVisitor* v); 1247 virtual void Accept(AstVisitor* v);
1273 1248
1274 virtual CountOperation* AsCountOperation() { return this; }
1275
1276 bool is_prefix() const { return is_prefix_; } 1249 bool is_prefix() const { return is_prefix_; }
1277 bool is_postfix() const { return !is_prefix_; } 1250 bool is_postfix() const { return !is_prefix_; }
1278 Token::Value op() const { return op_; } 1251 Token::Value op() const { return op_; }
1279 Token::Value binary_op() { 1252 Token::Value binary_op() {
1280 return op_ == Token::INC ? Token::ADD : Token::SUB; 1253 return op_ == Token::INC ? Token::ADD : Token::SUB;
1281 } 1254 }
1282 Expression* expression() const { return expression_; } 1255 Expression* expression() const { return expression_; }
1283 1256
1284 virtual void MarkAsStatement() { is_prefix_ = true; } 1257 virtual void MarkAsStatement() { is_prefix_ = true; }
1285 1258
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1344 public: 1317 public:
1345 Assignment(Token::Value op, Expression* target, Expression* value, int pos) 1318 Assignment(Token::Value op, Expression* target, Expression* value, int pos)
1346 : op_(op), target_(target), value_(value), pos_(pos), 1319 : op_(op), target_(target), value_(value), pos_(pos),
1347 block_start_(false), block_end_(false) { 1320 block_start_(false), block_end_(false) {
1348 ASSERT(Token::IsAssignmentOp(op)); 1321 ASSERT(Token::IsAssignmentOp(op));
1349 } 1322 }
1350 1323
1351 virtual void Accept(AstVisitor* v); 1324 virtual void Accept(AstVisitor* v);
1352 virtual Assignment* AsAssignment() { return this; } 1325 virtual Assignment* AsAssignment() { return this; }
1353 1326
1354 Assignment* AsSimpleAssignment() { return !is_compound() ? this : NULL; }
1355
1356 Token::Value binary_op() const; 1327 Token::Value binary_op() const;
1357 1328
1358 Token::Value op() const { return op_; } 1329 Token::Value op() const { return op_; }
1359 Expression* target() const { return target_; } 1330 Expression* target() const { return target_; }
1360 Expression* value() const { return value_; } 1331 Expression* value() const { return value_; }
1361 int position() { return pos_; } 1332 int position() { return pos_; }
1362 // This check relies on the definition order of token in token.h. 1333 // This check relies on the definition order of token in token.h.
1363 bool is_compound() const { return op() > Token::ASSIGN; } 1334 bool is_compound() const { return op() > Token::ASSIGN; }
1364 1335
1365 // An initialization block is a series of statments of the form 1336 // An initialization block is a series of statments of the form
(...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after
1905 #undef DEF_VISIT 1876 #undef DEF_VISIT
1906 1877
1907 private: 1878 private:
1908 bool stack_overflow_; 1879 bool stack_overflow_;
1909 }; 1880 };
1910 1881
1911 1882
1912 } } // namespace v8::internal 1883 } } // namespace v8::internal
1913 1884
1914 #endif // V8_AST_H_ 1885 #endif // V8_AST_H_
OLDNEW
« no previous file with comments | « src/arm/virtual-frame-arm.h ('k') | src/ast.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698