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

Side by Side Diff: src/data-flow.cc

Issue 668257: Have the flow graph builder collect definitions. (Closed)
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
« no previous file with comments | « src/data-flow.h ('k') | no next file » | 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 413 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 graph_.AppendInstruction(expr); 424 graph_.AppendInstruction(expr);
425 } 425 }
426 426
427 427
428 void FlowGraphBuilder::VisitAssignment(Assignment* expr) { 428 void FlowGraphBuilder::VisitAssignment(Assignment* expr) {
429 Variable* var = expr->target()->AsVariableProxy()->AsVariable(); 429 Variable* var = expr->target()->AsVariableProxy()->AsVariable();
430 Property* prop = expr->target()->AsProperty(); 430 Property* prop = expr->target()->AsProperty();
431 // Left-hand side can be a variable or property (or reference error) but 431 // Left-hand side can be a variable or property (or reference error) but
432 // not both. 432 // not both.
433 ASSERT(var == NULL || prop == NULL); 433 ASSERT(var == NULL || prop == NULL);
434 if (prop != NULL) { 434 if (var != NULL) {
435 Visit(expr->value());
436 Slot* slot = var->slot();
437 if (slot != NULL &&
fschneider 2010/03/09 09:23:05 I'm also checking for stack locals and parameters
438 (slot->type() == Slot::LOCAL || slot->type() == Slot::PARAMETER)) {
439 definitions_.Add(expr);
440 }
441
442 } else if (prop != NULL) {
435 Visit(prop->obj()); 443 Visit(prop->obj());
436 if (!prop->key()->IsPropertyName()) Visit(prop->key()); 444 if (!prop->key()->IsPropertyName()) Visit(prop->key());
437 }
438 if (var != NULL || prop != NULL) {
439 Visit(expr->value()); 445 Visit(expr->value());
440 } 446 }
441 graph_.AppendInstruction(expr); 447 graph_.AppendInstruction(expr);
442 } 448 }
443 449
444 450
445 void FlowGraphBuilder::VisitThrow(Throw* expr) { 451 void FlowGraphBuilder::VisitThrow(Throw* expr) {
446 Visit(expr->exception()); 452 Visit(expr->exception());
447 graph_.AppendInstruction(expr); 453 graph_.AppendInstruction(expr);
448 } 454 }
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
485 491
486 492
487 void FlowGraphBuilder::VisitUnaryOperation(UnaryOperation* expr) { 493 void FlowGraphBuilder::VisitUnaryOperation(UnaryOperation* expr) {
488 Visit(expr->expression()); 494 Visit(expr->expression());
489 graph_.AppendInstruction(expr); 495 graph_.AppendInstruction(expr);
490 } 496 }
491 497
492 498
493 void FlowGraphBuilder::VisitCountOperation(CountOperation* expr) { 499 void FlowGraphBuilder::VisitCountOperation(CountOperation* expr) {
494 Visit(expr->expression()); 500 Visit(expr->expression());
501 Variable* var = expr->expression()->AsVariableProxy()->AsVariable();
fschneider 2010/03/09 09:23:05 Sometimes we use ...->AsVariableProxy()->var()
502 if (var != NULL) {
503 Slot* slot = var->slot();
504 if (slot != NULL &&
505 (slot->type() == Slot::LOCAL || slot->type() == Slot::PARAMETER)) {
506 definitions_.Add(expr);
507 }
508 }
495 graph_.AppendInstruction(expr); 509 graph_.AppendInstruction(expr);
496 } 510 }
497 511
498 512
499 void FlowGraphBuilder::VisitBinaryOperation(BinaryOperation* expr) { 513 void FlowGraphBuilder::VisitBinaryOperation(BinaryOperation* expr) {
500 Visit(expr->left()); 514 Visit(expr->left());
501 515
502 switch (expr->op()) { 516 switch (expr->op()) {
503 case Token::COMMA: 517 case Token::COMMA:
504 Visit(expr->right()); 518 Visit(expr->right());
(...skipping 947 matching lines...) Expand 10 before | Expand all | Expand 10 after
1452 for (int i = postorder->length() - 1; i >= 0; i--) { 1466 for (int i = postorder->length() - 1; i >= 0; i--) {
1453 postorder->at(i)->PrintText(); 1467 postorder->at(i)->PrintText();
1454 } 1468 }
1455 } 1469 }
1456 1470
1457 1471
1458 #endif // defined(DEBUG) 1472 #endif // defined(DEBUG)
1459 1473
1460 1474
1461 } } // namespace v8::internal 1475 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/data-flow.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698