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

Side by Side Diff: pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart

Issue 1353843002: dart2js cps: Support sync* and yield. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years, 3 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
OLDNEW
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 library tree_ir_builder; 5 library tree_ir_builder;
6 6
7 import '../diagnostics/invariant.dart' show 7 import '../diagnostics/invariant.dart' show
8 InternalErrorFunction; 8 InternalErrorFunction;
9 import '../diagnostics/spannable.dart' show 9 import '../diagnostics/spannable.dart' show
10 CURRENT_ELEMENT_SPANNABLE; 10 CURRENT_ELEMENT_SPANNABLE;
(...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 } 429 }
430 } 430 }
431 431
432 NodeCallback visitGetLazyStatic(cps_ir.GetLazyStatic node) { 432 NodeCallback visitGetLazyStatic(cps_ir.GetLazyStatic node) {
433 // In the tree IR, GetStatic handles lazy fields because we do not need 433 // In the tree IR, GetStatic handles lazy fields because we do not need
434 // as fine-grained control over side effects. 434 // as fine-grained control over side effects.
435 GetStatic value = new GetStatic(node.element, node.sourceInformation); 435 GetStatic value = new GetStatic(node.element, node.sourceInformation);
436 return makeCallExpression(node, value); 436 return makeCallExpression(node, value);
437 } 437 }
438 438
439 @override
440 NodeCallback visitYield(cps_ir.Yield node) {
441 return (Statement next) {
442 return new Yield(getVariableUse(node.input), node.hasStar, next);
443 };
444 }
445
446 @override
447 NodeCallback visitAwait(cps_ir.Await node) {
448 Expression value = new Await(getVariableUse(node.input));
449 return makeCallExpression(node, value);
450 }
451
439 452
440 /************************** TAIL EXPRESSIONS **************************/ 453 /************************** TAIL EXPRESSIONS **************************/
441 // 454 //
442 // Visit methods for tail expressions must return a statement directly 455 // Visit methods for tail expressions must return a statement directly
443 // (not a function like interior and call expressions). 456 // (not a function like interior and call expressions).
444 457
445 Statement visitThrow(cps_ir.Throw node) { 458 Statement visitThrow(cps_ir.Throw node) {
446 Expression value = getVariableUse(node.value); 459 Expression value = getVariableUse(node.value);
447 return new Throw(value); 460 return new Throw(value);
448 } 461 }
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
663 getVariableUse(node.index)); 676 getVariableUse(node.index));
664 } 677 }
665 678
666 Expression visitSetIndex(cps_ir.SetIndex node) { 679 Expression visitSetIndex(cps_ir.SetIndex node) {
667 return new SetIndex(getVariableUse(node.object), 680 return new SetIndex(getVariableUse(node.object),
668 getVariableUse(node.index), 681 getVariableUse(node.index),
669 getVariableUse(node.value)); 682 getVariableUse(node.value));
670 } 683 }
671 684
672 @override 685 @override
673 NodeCallback visitAwait(cps_ir.Await node) {
674 Expression value = new Await(getVariableUse(node.input));
675 return makeCallExpression(node, value);
676 }
677
678 @override
679 Expression visitRefinement(cps_ir.Refinement node) { 686 Expression visitRefinement(cps_ir.Refinement node) {
680 throw 'Unexpected Refinement node in tree builder'; 687 throw 'Unexpected Refinement node in tree builder';
681 } 688 }
682 689
683 /********** UNUSED VISIT METHODS *************/ 690 /********** UNUSED VISIT METHODS *************/
684 691
685 unexpectedNode(cps_ir.Node node) { 692 unexpectedNode(cps_ir.Node node) {
686 internalError(CURRENT_ELEMENT_SPANNABLE, 'Unexpected IR node: $node'); 693 internalError(CURRENT_ELEMENT_SPANNABLE, 'Unexpected IR node: $node');
687 } 694 }
688 695
689 visitFunctionDefinition(cps_ir.FunctionDefinition node) { 696 visitFunctionDefinition(cps_ir.FunctionDefinition node) {
690 unexpectedNode(node); 697 unexpectedNode(node);
691 } 698 }
692 visitParameter(cps_ir.Parameter node) => unexpectedNode(node); 699 visitParameter(cps_ir.Parameter node) => unexpectedNode(node);
693 visitContinuation(cps_ir.Continuation node) => unexpectedNode(node); 700 visitContinuation(cps_ir.Continuation node) => unexpectedNode(node);
694 visitMutableVariable(cps_ir.MutableVariable node) => unexpectedNode(node); 701 visitMutableVariable(cps_ir.MutableVariable node) => unexpectedNode(node);
695 } 702 }
696 703
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/tree_ir/optimization/statement_rewriter.dart ('k') | pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698