OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 interface TreeElements { | 5 interface TreeElements { |
6 Element operator[](Node node); | 6 Element operator[](Node node); |
7 Selector getSelector(Send send); | 7 Selector getSelector(Send send); |
8 DartType getType(TypeAnnotation annotation); | 8 DartType getType(TypeAnnotation annotation); |
9 bool isParameterChecked(Element element); | 9 bool isParameterChecked(Element element); |
10 } | 10 } |
(...skipping 2309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2320 } | 2320 } |
2321 } | 2321 } |
2322 | 2322 |
2323 /** | 2323 /** |
2324 * [SignatureResolver] resolves function signatures. | 2324 * [SignatureResolver] resolves function signatures. |
2325 */ | 2325 */ |
2326 class SignatureResolver extends CommonResolverVisitor<Element> { | 2326 class SignatureResolver extends CommonResolverVisitor<Element> { |
2327 final Element enclosingElement; | 2327 final Element enclosingElement; |
2328 Link<Element> optionalParameters = const EmptyLink<Element>(); | 2328 Link<Element> optionalParameters = const EmptyLink<Element>(); |
2329 int optionalParameterCount = 0; | 2329 int optionalParameterCount = 0; |
| 2330 bool optionalParametersAreNamed = false; |
2330 VariableDefinitions currentDefinitions; | 2331 VariableDefinitions currentDefinitions; |
2331 | 2332 |
2332 SignatureResolver(Compiler compiler, this.enclosingElement) : super(compiler); | 2333 SignatureResolver(Compiler compiler, this.enclosingElement) : super(compiler); |
2333 | 2334 |
2334 Element visitNodeList(NodeList node) { | 2335 Element visitNodeList(NodeList node) { |
2335 // This must be a list of optional arguments. | 2336 // This must be a list of optional arguments. |
2336 String value = node.beginToken.stringValue; | 2337 String value = node.beginToken.stringValue; |
2337 if ((value !== '[') && (value !== '{')) { | 2338 if ((value !== '[') && (value !== '{')) { |
2338 internalError(node, "expected optional parameters"); | 2339 internalError(node, "expected optional parameters"); |
2339 } | 2340 } |
| 2341 optionalParametersAreNamed = (value === '{'); |
2340 LinkBuilder<Element> elements = analyzeNodes(node.nodes); | 2342 LinkBuilder<Element> elements = analyzeNodes(node.nodes); |
2341 optionalParameterCount = elements.length; | 2343 optionalParameterCount = elements.length; |
2342 optionalParameters = elements.toLink(); | 2344 optionalParameters = elements.toLink(); |
2343 return null; | 2345 return null; |
2344 } | 2346 } |
2345 | 2347 |
2346 Element visitVariableDefinitions(VariableDefinitions node) { | 2348 Element visitVariableDefinitions(VariableDefinitions node) { |
2347 Link<Node> definitions = node.definitions.nodes; | 2349 Link<Node> definitions = node.definitions.nodes; |
2348 if (definitions.isEmpty()) { | 2350 if (definitions.isEmpty()) { |
2349 cancel(node, 'internal error: no parameter definition'); | 2351 cancel(node, 'internal error: no parameter definition'); |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2487 LinkBuilder<Element> parametersBuilder = | 2489 LinkBuilder<Element> parametersBuilder = |
2488 visitor.analyzeNodes(formalParameters.nodes); | 2490 visitor.analyzeNodes(formalParameters.nodes); |
2489 requiredParameterCount = parametersBuilder.length; | 2491 requiredParameterCount = parametersBuilder.length; |
2490 parameters = parametersBuilder.toLink(); | 2492 parameters = parametersBuilder.toLink(); |
2491 } | 2493 } |
2492 DartType returnType = compiler.resolveTypeAnnotation(element, returnNode); | 2494 DartType returnType = compiler.resolveTypeAnnotation(element, returnNode); |
2493 return new FunctionSignature(parameters, | 2495 return new FunctionSignature(parameters, |
2494 visitor.optionalParameters, | 2496 visitor.optionalParameters, |
2495 requiredParameterCount, | 2497 requiredParameterCount, |
2496 visitor.optionalParameterCount, | 2498 visitor.optionalParameterCount, |
| 2499 visitor.optionalParametersAreNamed, |
2497 returnType); | 2500 returnType); |
2498 } | 2501 } |
2499 | 2502 |
2500 // TODO(ahe): This is temporary. | 2503 // TODO(ahe): This is temporary. |
2501 void resolveExpression(Node node) { | 2504 void resolveExpression(Node node) { |
2502 if (node == null) return; | 2505 if (node == null) return; |
2503 node.accept(new ResolverVisitor(compiler, enclosingElement)); | 2506 node.accept(new ResolverVisitor(compiler, enclosingElement)); |
2504 } | 2507 } |
2505 | 2508 |
2506 // TODO(ahe): This is temporary. | 2509 // TODO(ahe): This is temporary. |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2760 | 2763 |
2761 Element localLookup(SourceString name) => library.find(name); | 2764 Element localLookup(SourceString name) => library.find(name); |
2762 Element lookup(SourceString name) => localLookup(name); | 2765 Element lookup(SourceString name) => localLookup(name); |
2763 Element lexicalLookup(SourceString name) => localLookup(name); | 2766 Element lexicalLookup(SourceString name) => localLookup(name); |
2764 | 2767 |
2765 Element add(Element newElement) { | 2768 Element add(Element newElement) { |
2766 throw "Cannot add an element in the top scope"; | 2769 throw "Cannot add an element in the top scope"; |
2767 } | 2770 } |
2768 String toString() => '$element'; | 2771 String toString() => '$element'; |
2769 } | 2772 } |
OLD | NEW |