| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/ast_transformer.h" | 5 #include "vm/ast_transformer.h" |
| 6 | 6 |
| 7 #include "vm/object_store.h" | 7 #include "vm/object_store.h" |
| 8 #include "vm/parser.h" | 8 #include "vm/parser.h" |
| 9 #include "vm/thread.h" | 9 #include "vm/thread.h" |
| 10 | 10 |
| (...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 533 new(Z) StaticSetterNode(node->token_pos(), | 533 new(Z) StaticSetterNode(node->token_pos(), |
| 534 new_receiver, | 534 new_receiver, |
| 535 node->cls(), | 535 node->cls(), |
| 536 node->field_name(), | 536 node->field_name(), |
| 537 new_value)); | 537 new_value)); |
| 538 result_ = new(Z) LoadLocalNode(Scanner::kNoSourcePos, result); | 538 result_ = new(Z) LoadLocalNode(Scanner::kNoSourcePos, result); |
| 539 } | 539 } |
| 540 | 540 |
| 541 | 541 |
| 542 void AwaitTransformer::VisitLoadLocalNode(LoadLocalNode* node) { | 542 void AwaitTransformer::VisitLoadLocalNode(LoadLocalNode* node) { |
| 543 LocalVariable* result = AddToPreambleNewTempVar( | 543 result_ = node; |
| 544 new(Z) LoadLocalNode(node->token_pos(), &node->local())); | |
| 545 result_ = new(Z) LoadLocalNode(Scanner::kNoSourcePos, result); | |
| 546 } | 544 } |
| 547 | 545 |
| 548 | 546 |
| 549 void AwaitTransformer::VisitStoreLocalNode(StoreLocalNode* node) { | 547 void AwaitTransformer::VisitStoreLocalNode(StoreLocalNode* node) { |
| 550 AstNode* new_value = Transform(node->value()); | 548 AstNode* new_value = Transform(node->value()); |
| 551 LocalVariable* result = AddToPreambleNewTempVar( | 549 result_ = new(Z) StoreLocalNode(node->token_pos(), &node->local(), new_value); |
| 552 new(Z) StoreLocalNode(node->token_pos(), | |
| 553 &node->local(), | |
| 554 new_value)); | |
| 555 result_ = new(Z) LoadLocalNode(Scanner::kNoSourcePos, result); | |
| 556 } | 550 } |
| 557 | 551 |
| 558 | 552 |
| 559 void AwaitTransformer::VisitLoadStaticFieldNode(LoadStaticFieldNode* node) { | 553 void AwaitTransformer::VisitLoadStaticFieldNode(LoadStaticFieldNode* node) { |
| 560 LocalVariable* result = AddToPreambleNewTempVar( | 554 result_ = node; |
| 561 new(Z) LoadStaticFieldNode(node->token_pos(), | |
| 562 node->field())); | |
| 563 result_ = new(Z) LoadLocalNode(Scanner::kNoSourcePos, result); | |
| 564 } | 555 } |
| 565 | 556 |
| 566 | 557 |
| 567 void AwaitTransformer::VisitStoreStaticFieldNode(StoreStaticFieldNode* node) { | 558 void AwaitTransformer::VisitStoreStaticFieldNode(StoreStaticFieldNode* node) { |
| 568 AstNode* new_value = Transform(node->value()); | 559 AstNode* new_value = Transform(node->value()); |
| 569 LocalVariable* result = AddToPreambleNewTempVar( | 560 result_ = new(Z) StoreStaticFieldNode(node->token_pos(), |
| 570 new(Z) StoreStaticFieldNode(node->token_pos(), | 561 node->field(), |
| 571 node->field(), | 562 new_value); |
| 572 new_value)); | |
| 573 result_ = new(Z) LoadLocalNode(Scanner::kNoSourcePos, result); | |
| 574 } | 563 } |
| 575 | 564 |
| 576 | 565 |
| 577 void AwaitTransformer::VisitLoadIndexedNode(LoadIndexedNode* node) { | 566 void AwaitTransformer::VisitLoadIndexedNode(LoadIndexedNode* node) { |
| 578 AstNode* new_array = Transform(node->array()); | 567 AstNode* new_array = Transform(node->array()); |
| 579 AstNode* new_index = Transform(node->index_expr()); | 568 AstNode* new_index = Transform(node->index_expr()); |
| 580 LocalVariable* result = AddToPreambleNewTempVar( | 569 LocalVariable* result = AddToPreambleNewTempVar( |
| 581 new(Z) LoadIndexedNode(node->token_pos(), | 570 new(Z) LoadIndexedNode(node->token_pos(), |
| 582 new_array, | 571 new_array, |
| 583 new_index, | 572 new_index, |
| (...skipping 21 matching lines...) Expand all Loading... |
| 605 LocalVariable* result = AddToPreambleNewTempVar( | 594 LocalVariable* result = AddToPreambleNewTempVar( |
| 606 new(Z) AssignableNode(node->token_pos(), | 595 new(Z) AssignableNode(node->token_pos(), |
| 607 new_expr, | 596 new_expr, |
| 608 node->type(), | 597 node->type(), |
| 609 node->dst_name())); | 598 node->dst_name())); |
| 610 result_ = new(Z) LoadLocalNode(Scanner::kNoSourcePos, result); | 599 result_ = new(Z) LoadLocalNode(Scanner::kNoSourcePos, result); |
| 611 } | 600 } |
| 612 | 601 |
| 613 | 602 |
| 614 void AwaitTransformer::VisitLetNode(LetNode* node) { | 603 void AwaitTransformer::VisitLetNode(LetNode* node) { |
| 615 // TODO(mlippautz): Check initializers and their temps. | 604 // Add all the initializer nodes and their temporary variables |
| 605 // to the preamble. The temporary variables will be captured |
| 606 // as a side effect of being added to a scope, and the subsequent |
| 607 // nodes that are added to the preample can access them. |
| 608 for (intptr_t i = 0; i < node->num_temps(); i++) { |
| 609 preamble_->scope()->AddVariable(node->TempAt(i)); |
| 610 AstNode* new_init_val = Transform(node->InitializerAt(i)); |
| 611 preamble_->Add(new(Z) StoreLocalNode(node->token_pos(), |
| 612 node->TempAt(i), |
| 613 new_init_val)); |
| 614 } |
| 615 // The transformed LetNode does not have any temporary variables. |
| 616 LetNode* result = new(Z) LetNode(node->token_pos()); | 616 LetNode* result = new(Z) LetNode(node->token_pos()); |
| 617 for (intptr_t i = 0; i < node->nodes().length(); i++) { | 617 for (intptr_t i = 0; i < node->nodes().length(); i++) { |
| 618 result->AddNode(Transform(node->nodes()[i])); | 618 result->AddNode(Transform(node->nodes()[i])); |
| 619 } | 619 } |
| 620 result_ = result; | 620 result_ = result; |
| 621 } | 621 } |
| 622 | 622 |
| 623 | 623 |
| 624 void AwaitTransformer::VisitThrowNode(ThrowNode* node) { | 624 void AwaitTransformer::VisitThrowNode(ThrowNode* node) { |
| 625 AstNode* new_exception = Transform(node->exception()); | 625 AstNode* new_exception = Transform(node->exception()); |
| 626 result_ = new(Z) ThrowNode(node->token_pos(), | 626 result_ = new(Z) ThrowNode(node->token_pos(), |
| 627 new_exception, | 627 new_exception, |
| 628 node->stacktrace()); | 628 node->stacktrace()); |
| 629 } | 629 } |
| 630 | 630 |
| 631 } // namespace dart | 631 } // namespace dart |
| OLD | NEW |