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 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 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
222 if (value is Literal) return value; | 222 if (value is Literal) return value; |
223 error('Interpolated value #$nameOrPosition is not a Literal: $value'); | 223 error('Interpolated value #$nameOrPosition is not a Literal: $value'); |
224 }; | 224 }; |
225 } | 225 } |
226 | 226 |
227 Instantiator visitInterpolatedParameter(InterpolatedParameter node) { | 227 Instantiator visitInterpolatedParameter(InterpolatedParameter node) { |
228 var nameOrPosition = node.nameOrPosition; | 228 var nameOrPosition = node.nameOrPosition; |
229 return (arguments) { | 229 return (arguments) { |
230 var value = arguments[nameOrPosition]; | 230 var value = arguments[nameOrPosition]; |
231 | 231 |
232 Identifier toIdentifier(item) { | 232 Parameter toIdentifier(item) { |
233 if (item is Identifier) return item; | 233 if (item is Parameter) return item; |
234 if (item is String) return new Identifier(item); | 234 if (item is String) return new Identifier(item); |
235 return error('Interpolated value #$nameOrPosition is not an Identifier' | 235 return error('Interpolated value #$nameOrPosition ($item: ${item?.runtim eType}) is not an Identifier' |
Jennifer Messerly
2015/12/01 02:10:27
long line.
also, printing the item & runtime type
ochafik
2015/12/02 20:05:47
Done.
| |
236 ' or List of Identifiers: $value'); | 236 ' or List of Identifiers: $value'); |
237 } | 237 } |
238 if (value is Iterable) return value.map(toIdentifier); | 238 if (value is Iterable) return value.map(toIdentifier); |
239 return toIdentifier(value); | 239 return toIdentifier(value); |
240 }; | 240 }; |
241 } | 241 } |
242 | 242 |
243 Instantiator visitInterpolatedSelector(InterpolatedSelector node) { | 243 Instantiator visitInterpolatedSelector(InterpolatedSelector node) { |
244 // A selector is an expression, as in `a[selector]`. | 244 // A selector is an expression, as in `a[selector]`. |
245 // A String argument converted into a LiteralString, so `a.#` with argument | 245 // A String argument converted into a LiteralString, so `a.#` with argument |
(...skipping 571 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
817 return new CommentExpression(node.comment, makeExpr(arguments)); | 817 return new CommentExpression(node.comment, makeExpr(arguments)); |
818 }; | 818 }; |
819 } | 819 } |
820 | 820 |
821 Instantiator visitAwait(Await node) { | 821 Instantiator visitAwait(Await node) { |
822 Instantiator makeExpression = visit(node.expression); | 822 Instantiator makeExpression = visit(node.expression); |
823 return (arguments) { | 823 return (arguments) { |
824 return new Await(makeExpression(arguments)); | 824 return new Await(makeExpression(arguments)); |
825 }; | 825 }; |
826 } | 826 } |
827 | |
828 @override | |
829 Instantiator visitDestructuredVariable(DestructuredVariable node) { | |
830 Instantiator makeName = visit(node.name); | |
831 Instantiator makeStructure = visit(node.structure); | |
832 Instantiator makeDefaultValue = visit(node.defaultValue); | |
833 return (arguments) { | |
834 return new DestructuredVariable( | |
835 makeName(arguments), | |
836 makeStructure(arguments), | |
837 makeDefaultValue(arguments)); | |
838 }; | |
839 } | |
840 | |
841 @override | |
842 Instantiator visitArrayDestructuring(ArrayDestructuring node) { | |
843 List<Instantiator> makeVars = node.variables.map(this.visit).toList(); | |
844 return (arguments) { | |
845 return new ArrayDestructuring(makeVars.map((m) => m(arguments)).toList()); | |
846 }; | |
847 } | |
848 | |
849 @override | |
850 Instantiator visitObjectDestructuring(ObjectDestructuring node) { | |
851 List<Instantiator> makeVars = node.variables.map(this.visit).toList(); | |
852 return (arguments) { | |
853 return new ObjectDestructuring(makeVars.map((m) => m(arguments)).toList()) ; | |
Jennifer Messerly
2015/12/01 02:10:28
long line
ochafik
2015/12/02 20:05:47
Done.
| |
854 }; | |
855 } | |
827 } | 856 } |
828 | 857 |
829 /** | 858 /** |
830 * InterpolatedNodeAnalysis determines which AST trees contain | 859 * InterpolatedNodeAnalysis determines which AST trees contain |
831 * [InterpolatedNode]s, and the names of the named interpolated nodes. | 860 * [InterpolatedNode]s, and the names of the named interpolated nodes. |
832 */ | 861 */ |
833 class InterpolatedNodeAnalysis extends BaseVisitor { | 862 class InterpolatedNodeAnalysis extends BaseVisitor { |
834 final Set<Node> containsInterpolatedNode = new Set<Node>(); | 863 final Set<Node> containsInterpolatedNode = new Set<Node>(); |
835 final Set<String> holeNames = new Set<String>(); | 864 final Set<String> holeNames = new Set<String>(); |
836 int count = 0; | 865 int count = 0; |
(...skipping 13 matching lines...) Expand all Loading... | |
850 if (count != before) containsInterpolatedNode.add(node); | 879 if (count != before) containsInterpolatedNode.add(node); |
851 return null; | 880 return null; |
852 } | 881 } |
853 | 882 |
854 visitInterpolatedNode(InterpolatedNode node) { | 883 visitInterpolatedNode(InterpolatedNode node) { |
855 containsInterpolatedNode.add(node); | 884 containsInterpolatedNode.add(node); |
856 if (node.isNamed) holeNames.add(node.nameOrPosition); | 885 if (node.isNamed) holeNames.add(node.nameOrPosition); |
857 ++count; | 886 ++count; |
858 } | 887 } |
859 } | 888 } |
OLD | NEW |