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

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 2309 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698