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

Side by Side Diff: lib/src/js/template.dart

Issue 1183033004: js_ast: implement rest/spread parsing (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 5 years, 6 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 | « lib/src/js/printer.dart ('k') | tool/input_sdk/private/js_mirrors.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) 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 part of js_ast; 5 part of js_ast;
6 6
7 class TemplateManager { 7 class TemplateManager {
8 Map<String, Template> expressionTemplates = new Map<String, Template>(); 8 Map<String, Template> expressionTemplates = new Map<String, Template>();
9 Map<String, Template> statementTemplates = new Map<String, Template>(); 9 Map<String, Template> statementTemplates = new Map<String, Template>();
10 10
(...skipping 621 matching lines...) Expand 10 before | Expand all | Expand 10 after
632 String op = node.op; 632 String op = node.op;
633 return (arguments) => new Postfix(op, makeOperand(arguments)); 633 return (arguments) => new Postfix(op, makeOperand(arguments));
634 } 634 }
635 635
636 Instantiator visitThis(This node) => (arguments) => new This(); 636 Instantiator visitThis(This node) => (arguments) => new This();
637 Instantiator visitSuper(Super node) => (arguments) => new Super(); 637 Instantiator visitSuper(Super node) => (arguments) => new Super();
638 638
639 Instantiator visitIdentifier(Identifier node) => 639 Instantiator visitIdentifier(Identifier node) =>
640 (arguments) => new Identifier(node.name); 640 (arguments) => new Identifier(node.name);
641 641
642 Instantiator visitSpread(Spread node) =>
643 (args) => new Spread(visit(node.argument)(args));
644
645 Instantiator visitRestParameter(RestParameter node) =>
646 (args) => new RestParameter(visit(node.parameter)(args));
647
642 Instantiator visitAccess(PropertyAccess node) { 648 Instantiator visitAccess(PropertyAccess node) {
643 Instantiator makeReceiver = visit(node.receiver); 649 Instantiator makeReceiver = visit(node.receiver);
644 Instantiator makeSelector = visit(node.selector); 650 Instantiator makeSelector = visit(node.selector);
645 return (arguments) => 651 return (arguments) =>
646 new PropertyAccess(makeReceiver(arguments), makeSelector(arguments)); 652 new PropertyAccess(makeReceiver(arguments), makeSelector(arguments));
647 } 653 }
648 654
649 Instantiator visitNamedFunction(NamedFunction node) { 655 Instantiator visitNamedFunction(NamedFunction node) {
650 Instantiator makeDeclaration = visit(node.name); 656 Instantiator makeDeclaration = visit(node.name);
651 Instantiator makeFunction = visit(node.function); 657 Instantiator makeFunction = visit(node.function);
652 return (arguments) => 658 return (arguments) =>
653 new NamedFunction(makeDeclaration(arguments), makeFunction(arguments)); 659 new NamedFunction(makeDeclaration(arguments), makeFunction(arguments));
654 } 660 }
655 661
656 Instantiator visitFunctionExpression(FunctionExpression node) { 662 Instantiator visitFunctionExpression(FunctionExpression node) {
657 List<Instantiator> paramMakers = node.params.map(visitSplayable).toList(); 663 List<Instantiator> paramMakers = node.params.map(visitSplayable).toList();
658 Instantiator makeBody = visit(node.body); 664 Instantiator makeBody = visit(node.body);
659 // TODO(sra): Avoid copying params if no interpolation or forced copying. 665 // TODO(sra): Avoid copying params if no interpolation or forced copying.
660 return (arguments) { 666 return (arguments) {
661 List<Identifier> params = <Identifier>[]; 667 List<Parameter> params = <Parameter>[];
662 for (Instantiator instantiator in paramMakers) { 668 for (Instantiator instantiator in paramMakers) {
663 var result = instantiator(arguments); 669 var result = instantiator(arguments);
664 if (result is Iterable) { 670 if (result is Iterable) {
665 params.addAll(result); 671 params.addAll(result);
666 } else { 672 } else {
667 params.add(result); 673 params.add(result);
668 } 674 }
669 } 675 }
670 var body = makeBody(arguments); 676 var body = makeBody(arguments);
671 if (node is ArrowFun) { 677 if (node is ArrowFun) {
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
840 if (count != before) containsInterpolatedNode.add(node); 846 if (count != before) containsInterpolatedNode.add(node);
841 return null; 847 return null;
842 } 848 }
843 849
844 visitInterpolatedNode(InterpolatedNode node) { 850 visitInterpolatedNode(InterpolatedNode node) {
845 containsInterpolatedNode.add(node); 851 containsInterpolatedNode.add(node);
846 if (node.isNamed) holeNames.add(node.nameOrPosition); 852 if (node.isNamed) holeNames.add(node.nameOrPosition);
847 ++count; 853 ++count;
848 } 854 }
849 } 855 }
OLDNEW
« no previous file with comments | « lib/src/js/printer.dart ('k') | tool/input_sdk/private/js_mirrors.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698