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

Side by Side Diff: frog/await/transformation.dart

Issue 8952006: Fix factories in Frog to correspond to the new syntax. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: merged, and update test status Created 9 years 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 | « client/tests/client/client.status ('k') | frog/leg/scanner/token.dart » ('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 (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, 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 /** 5 /**
6 * A phase in the compilation process that processes the entire AST and 6 * A phase in the compilation process that processes the entire AST and
7 * desugars await expressions. 7 * desugars await expressions.
8 */ 8 */
9 awaitTransformation() { 9 awaitTransformation() {
10 for (var lib in world.libraries.getValues()) { 10 for (var lib in world.libraries.getValues()) {
(...skipping 655 matching lines...) Expand 10 before | Expand all | Expand 10 after
666 _desugarAwaitCall(AwaitExpression node, Identifier param) { 666 _desugarAwaitCall(AwaitExpression node, Identifier param) {
667 final thenMethod = new DotExpression(node.body, 667 final thenMethod = new DotExpression(node.body,
668 new Identifier('then', node.span), node.span); 668 new Identifier('then', node.span), node.span);
669 List<Statement> afterAwait = []; 669 List<Statement> afterAwait = [];
670 afterAwait.addAll(continuation); 670 afterAwait.addAll(continuation);
671 final thenArg = new LambdaExpression( 671 final thenArg = new LambdaExpression(
672 new FunctionDefinition([], null, null, 672 new FunctionDefinition([], null, null,
673 [new FormalNode( 673 [new FormalNode(
674 false, false, null /* infer type from body? */, 674 false, false, null /* infer type from body? */,
675 param, null, param.span) 675 param, null, param.span)
676 ], null, null, null, 676 ], null, null,
677 new BlockStatement(afterAwait, node.span), node.span), 677 new BlockStatement(afterAwait, node.span), node.span),
678 node.span); 678 node.span);
679 continuation.clear(); 679 continuation.clear();
680 // TODO(sigmund): insert in new continuation all additional statements that 680 // TODO(sigmund): insert in new continuation all additional statements that
681 // propagate errors. 681 // propagate errors.
682 // this assumes that the normalization ensures await calls are within blocks 682 // this assumes that the normalization ensures await calls are within blocks
683 continuation.addFirst(_returnFuture(node.span)); 683 continuation.addFirst(_returnFuture(node.span));
684 return new CallExpression(thenMethod, 684 return new CallExpression(thenMethod,
685 [new ArgumentNode(null, thenArg, node.span)], node.span); 685 [new ArgumentNode(null, thenArg, node.span)], node.span);
686 } 686 }
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
732 new DotExpression( 732 new DotExpression(
733 new VarExpression(new Identifier(_COMPLETER_NAME, span), span), 733 new VarExpression(new Identifier(_COMPLETER_NAME, span), span),
734 new Identifier("future", span), span), span); 734 new Identifier("future", span), span), span);
735 } 735 }
736 736
737 /** Create a closure that contains the continuation statements. */ 737 /** Create a closure that contains the continuation statements. */
738 _createContinuationClosure(String name, SourceSpan span) { 738 _createContinuationClosure(String name, SourceSpan span) {
739 List<Statement> continuationBlock = []; 739 List<Statement> continuationBlock = [];
740 continuationBlock.addAll(continuation); 740 continuationBlock.addAll(continuation);
741 return new FunctionDefinition([], null, 741 return new FunctionDefinition([], null,
742 new Identifier(name, span), [], null, null, null, 742 new Identifier(name, span), [], null, null,
743 new BlockStatement(continuationBlock, span), span); 743 new BlockStatement(continuationBlock, span), span);
744 } 744 }
745 745
746 /** Make a statement invoking a function in scope. */ 746 /** Make a statement invoking a function in scope. */
747 _makeCallNoArgs(String func, SourceSpan span) { 747 _makeCallNoArgs(String func, SourceSpan span) {
748 return new ExpressionStatement(new CallExpression( 748 return new ExpressionStatement(new CallExpression(
749 new VarExpression(new Identifier(func, span), span), [], span), span); 749 new VarExpression(new Identifier(func, span), span), [], span), span);
750 } 750 }
751 } 751 }
752 752
(...skipping 27 matching lines...) Expand all
780 // if (a) if (b) await t; 2; 780 // if (a) if (b) await t; 2;
781 // becomes: 781 // becomes:
782 // if (a) { if (b) { await t; } } 2; 782 // if (a) { if (b) { await t; } } 2;
783 // which becomes becomes: 783 // which becomes becomes:
784 // _2() { 2; } if (a) { if (b) { t.then((_) { _2(); } } } _2(); 784 // _2() { 2; } if (a) { if (b) { t.then((_) { _2(); } } } _2();
785 // (seems that 'a' doesn't need { }) 785 // (seems that 'a' doesn't need { })
786 // - 'if/while' with only one statement in the continuation (check the 786 // - 'if/while' with only one statement in the continuation (check the
787 // optimization that copies code rather than adding a continuation closure). 787 // optimization that copies code rather than adding a continuation closure).
788 // - await not inside a block (could break error propagation if normalization is 788 // - await not inside a block (could break error propagation if normalization is
789 // done incorrectly). 789 // done incorrectly).
OLDNEW
« no previous file with comments | « client/tests/client/client.status ('k') | frog/leg/scanner/token.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698