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

Side by Side Diff: lib/compiler/implementation/resolver.dart

Issue 10911211: Runtime support for the new parameter specification. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 3 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 | Annotate | Revision Log
OLDNEW
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698