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

Side by Side Diff: src/ast.h

Issue 876001: Initialize reaching definitions state for all flow graph nodes. (Closed)
Patch Set: Incorporated review comments. 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
« no previous file with comments | « no previous file | src/compiler.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 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 197
198 Expression() 198 Expression()
199 : bitfields_(0), 199 : bitfields_(0),
200 def_(NULL), 200 def_(NULL),
201 defined_vars_(NULL) {} 201 defined_vars_(NULL) {}
202 202
203 virtual Expression* AsExpression() { return this; } 203 virtual Expression* AsExpression() { return this; }
204 204
205 virtual bool IsValidLeftHandSide() { return false; } 205 virtual bool IsValidLeftHandSide() { return false; }
206 206
207 virtual Variable* AssignedVar() { return NULL; }
208
207 // Symbols that cannot be parsed as array indices are considered property 209 // Symbols that cannot be parsed as array indices are considered property
208 // names. We do not treat symbols that can be array indexes as property 210 // names. We do not treat symbols that can be array indexes as property
209 // names because [] for string objects is handled only by keyed ICs. 211 // names because [] for string objects is handled only by keyed ICs.
210 virtual bool IsPropertyName() { return false; } 212 virtual bool IsPropertyName() { return false; }
211 213
212 // True if the expression does not have (evaluated) subexpressions. 214 // True if the expression does not have (evaluated) subexpressions.
213 // Function literals are leaves because their subexpressions are not 215 // Function literals are leaves because their subexpressions are not
214 // evaluated. 216 // evaluated.
215 virtual bool IsLeaf() { return false; } 217 virtual bool IsLeaf() { return false; }
216 218
(...skipping 1054 matching lines...) Expand 10 before | Expand all | Expand 10 after
1271 public: 1273 public:
1272 CountOperation(bool is_prefix, Token::Value op, Expression* expression) 1274 CountOperation(bool is_prefix, Token::Value op, Expression* expression)
1273 : is_prefix_(is_prefix), op_(op), expression_(expression) { 1275 : is_prefix_(is_prefix), op_(op), expression_(expression) {
1274 ASSERT(Token::IsCountOp(op)); 1276 ASSERT(Token::IsCountOp(op));
1275 } 1277 }
1276 1278
1277 virtual void Accept(AstVisitor* v); 1279 virtual void Accept(AstVisitor* v);
1278 1280
1279 virtual CountOperation* AsCountOperation() { return this; } 1281 virtual CountOperation* AsCountOperation() { return this; }
1280 1282
1283 virtual Variable* AssignedVar() {
1284 return expression()->AsVariableProxy()->AsVariable();
1285 }
1286
1281 bool is_prefix() const { return is_prefix_; } 1287 bool is_prefix() const { return is_prefix_; }
1282 bool is_postfix() const { return !is_prefix_; } 1288 bool is_postfix() const { return !is_prefix_; }
1283 Token::Value op() const { return op_; } 1289 Token::Value op() const { return op_; }
1284 Token::Value binary_op() { 1290 Token::Value binary_op() {
1285 return op_ == Token::INC ? Token::ADD : Token::SUB; 1291 return op_ == Token::INC ? Token::ADD : Token::SUB;
1286 } 1292 }
1287 Expression* expression() const { return expression_; } 1293 Expression* expression() const { return expression_; }
1288 1294
1289 virtual void MarkAsStatement() { is_prefix_ = true; } 1295 virtual void MarkAsStatement() { is_prefix_ = true; }
1290 1296
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
1351 : op_(op), target_(target), value_(value), pos_(pos), 1357 : op_(op), target_(target), value_(value), pos_(pos),
1352 block_start_(false), block_end_(false) { 1358 block_start_(false), block_end_(false) {
1353 ASSERT(Token::IsAssignmentOp(op)); 1359 ASSERT(Token::IsAssignmentOp(op));
1354 } 1360 }
1355 1361
1356 virtual void Accept(AstVisitor* v); 1362 virtual void Accept(AstVisitor* v);
1357 virtual Assignment* AsAssignment() { return this; } 1363 virtual Assignment* AsAssignment() { return this; }
1358 1364
1359 Assignment* AsSimpleAssignment() { return !is_compound() ? this : NULL; } 1365 Assignment* AsSimpleAssignment() { return !is_compound() ? this : NULL; }
1360 1366
1367 virtual Variable* AssignedVar() {
1368 return target()->AsVariableProxy()->AsVariable();
1369 }
1370
1361 Token::Value binary_op() const; 1371 Token::Value binary_op() const;
1362 1372
1363 Token::Value op() const { return op_; } 1373 Token::Value op() const { return op_; }
1364 Expression* target() const { return target_; } 1374 Expression* target() const { return target_; }
1365 Expression* value() const { return value_; } 1375 Expression* value() const { return value_; }
1366 int position() { return pos_; } 1376 int position() { return pos_; }
1367 // This check relies on the definition order of token in token.h. 1377 // This check relies on the definition order of token in token.h.
1368 bool is_compound() const { return op() > Token::ASSIGN; } 1378 bool is_compound() const { return op() > Token::ASSIGN; }
1369 1379
1370 // An initialization block is a series of statments of the form 1380 // An initialization block is a series of statments of the form
(...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after
1910 #undef DEF_VISIT 1920 #undef DEF_VISIT
1911 1921
1912 private: 1922 private:
1913 bool stack_overflow_; 1923 bool stack_overflow_;
1914 }; 1924 };
1915 1925
1916 1926
1917 } } // namespace v8::internal 1927 } } // namespace v8::internal
1918 1928
1919 #endif // V8_AST_H_ 1929 #endif // V8_AST_H_
OLDNEW
« no previous file with comments | « no previous file | src/compiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698