| 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 2305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2316 } | 2316 } |
| 2317 } | 2317 } |
| 2318 | 2318 |
| 2319 /** | 2319 /** |
| 2320 * [SignatureResolver] resolves function signatures. | 2320 * [SignatureResolver] resolves function signatures. |
| 2321 */ | 2321 */ |
| 2322 class SignatureResolver extends CommonResolverVisitor<Element> { | 2322 class SignatureResolver extends CommonResolverVisitor<Element> { |
| 2323 final Element enclosingElement; | 2323 final Element enclosingElement; |
| 2324 Link<Element> optionalParameters = const EmptyLink<Element>(); | 2324 Link<Element> optionalParameters = const EmptyLink<Element>(); |
| 2325 int optionalParameterCount = 0; | 2325 int optionalParameterCount = 0; |
| 2326 bool optionalParametersAreNamed = false; |
| 2326 VariableDefinitions currentDefinitions; | 2327 VariableDefinitions currentDefinitions; |
| 2327 | 2328 |
| 2328 SignatureResolver(Compiler compiler, this.enclosingElement) : super(compiler); | 2329 SignatureResolver(Compiler compiler, this.enclosingElement) : super(compiler); |
| 2329 | 2330 |
| 2330 Element visitNodeList(NodeList node) { | 2331 Element visitNodeList(NodeList node) { |
| 2331 // This must be a list of optional arguments. | 2332 // This must be a list of optional arguments. |
| 2332 String value = node.beginToken.stringValue; | 2333 String value = node.beginToken.stringValue; |
| 2333 if ((value !== '[') && (value !== '{')) { | 2334 if ((value !== '[') && (value !== '{')) { |
| 2334 internalError(node, "expected optional parameters"); | 2335 internalError(node, "expected optional parameters"); |
| 2335 } | 2336 } |
| 2337 optionalParametersAreNamed = (value === '{'); |
| 2336 LinkBuilder<Element> elements = analyzeNodes(node.nodes); | 2338 LinkBuilder<Element> elements = analyzeNodes(node.nodes); |
| 2337 optionalParameterCount = elements.length; | 2339 optionalParameterCount = elements.length; |
| 2338 optionalParameters = elements.toLink(); | 2340 optionalParameters = elements.toLink(); |
| 2339 return null; | 2341 return null; |
| 2340 } | 2342 } |
| 2341 | 2343 |
| 2342 Element visitVariableDefinitions(VariableDefinitions node) { | 2344 Element visitVariableDefinitions(VariableDefinitions node) { |
| 2343 Link<Node> definitions = node.definitions.nodes; | 2345 Link<Node> definitions = node.definitions.nodes; |
| 2344 if (definitions.isEmpty()) { | 2346 if (definitions.isEmpty()) { |
| 2345 cancel(node, 'internal error: no parameter definition'); | 2347 cancel(node, 'internal error: no parameter definition'); |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2483 LinkBuilder<Element> parametersBuilder = | 2485 LinkBuilder<Element> parametersBuilder = |
| 2484 visitor.analyzeNodes(formalParameters.nodes); | 2486 visitor.analyzeNodes(formalParameters.nodes); |
| 2485 requiredParameterCount = parametersBuilder.length; | 2487 requiredParameterCount = parametersBuilder.length; |
| 2486 parameters = parametersBuilder.toLink(); | 2488 parameters = parametersBuilder.toLink(); |
| 2487 } | 2489 } |
| 2488 DartType returnType = compiler.resolveTypeAnnotation(element, returnNode); | 2490 DartType returnType = compiler.resolveTypeAnnotation(element, returnNode); |
| 2489 return new FunctionSignature(parameters, | 2491 return new FunctionSignature(parameters, |
| 2490 visitor.optionalParameters, | 2492 visitor.optionalParameters, |
| 2491 requiredParameterCount, | 2493 requiredParameterCount, |
| 2492 visitor.optionalParameterCount, | 2494 visitor.optionalParameterCount, |
| 2495 visitor.optionalParametersAreNamed, |
| 2493 returnType); | 2496 returnType); |
| 2494 } | 2497 } |
| 2495 | 2498 |
| 2496 // TODO(ahe): This is temporary. | 2499 // TODO(ahe): This is temporary. |
| 2497 void resolveExpression(Node node) { | 2500 void resolveExpression(Node node) { |
| 2498 if (node == null) return; | 2501 if (node == null) return; |
| 2499 node.accept(new ResolverVisitor(compiler, enclosingElement)); | 2502 node.accept(new ResolverVisitor(compiler, enclosingElement)); |
| 2500 } | 2503 } |
| 2501 | 2504 |
| 2502 // TODO(ahe): This is temporary. | 2505 // TODO(ahe): This is temporary. |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2756 | 2759 |
| 2757 Element localLookup(SourceString name) => library.find(name); | 2760 Element localLookup(SourceString name) => library.find(name); |
| 2758 Element lookup(SourceString name) => localLookup(name); | 2761 Element lookup(SourceString name) => localLookup(name); |
| 2759 Element lexicalLookup(SourceString name) => localLookup(name); | 2762 Element lexicalLookup(SourceString name) => localLookup(name); |
| 2760 | 2763 |
| 2761 Element add(Element newElement) { | 2764 Element add(Element newElement) { |
| 2762 throw "Cannot add an element in the top scope"; | 2765 throw "Cannot add an element in the top scope"; |
| 2763 } | 2766 } |
| 2764 String toString() => '$element'; | 2767 String toString() => '$element'; |
| 2765 } | 2768 } |
| OLD | NEW |