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

Side by Side Diff: dart/frog/leg/resolver.dart

Issue 9241014: Generate AST nodes for field initializers. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: changes Created 8 years, 11 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
« no previous file with comments | « dart/frog/leg/elements/elements.dart ('k') | dart/frog/leg/scanner/class_element_parser.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, 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 class TreeElements { 5 class TreeElements {
6 Map<Node, Element> map; 6 Map<Node, Element> map;
7 TreeElements() : map = new LinkedHashMap<Node, Element>(); 7 TreeElements() : map = new LinkedHashMap<Node, Element>();
8 operator []=(Node node, Element element) => map[node] = element; 8 operator []=(Node node, Element element) => map[node] = element;
9 operator [](Node node) => map[node]; 9 operator [](Node node) => map[node];
10 } 10 }
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 } else { 208 } else {
209 Element element = lookup(node, node.source); 209 Element element = lookup(node, node.source);
210 if (element == null) { 210 if (element == null) {
211 error(node, MessageKind.CANNOT_RESOLVE, [node]); 211 error(node, MessageKind.CANNOT_RESOLVE, [node]);
212 } 212 }
213 return useElement(node, element); 213 return useElement(node, element);
214 } 214 }
215 } 215 }
216 216
217 visitTypeAnnotation(TypeAnnotation node) { 217 visitTypeAnnotation(TypeAnnotation node) {
218 Identifier name = node.typeName; 218 Identifier name = node.typeName.asIdentifier();
219 if (name === null) {
220 // TODO(karlklose): In progress.
221 cancel(node.typeName, "not implemented");
222 }
219 if (name.source == const SourceString('var')) return null; 223 if (name.source == const SourceString('var')) return null;
220 if (name.source == const SourceString('void')) return null; 224 if (name.source == const SourceString('void')) return null;
221 Element element = context.lookup(name.source); 225 Element element = context.lookup(name.source);
222 if (element === null) { 226 if (element === null) {
223 if (typeRequired) { 227 if (typeRequired) {
224 error(node, MessageKind.CANNOT_RESOLVE_TYPE, [name]); 228 error(node, MessageKind.CANNOT_RESOLVE_TYPE, [name]);
225 } else { 229 } else {
226 warning(node, MessageKind.CANNOT_RESOLVE_TYPE, [name]); 230 warning(node, MessageKind.CANNOT_RESOLVE_TYPE, [name]);
227 } 231 }
228 } else if (element.kind !== ElementKind.CLASS) { 232 } else if (element.kind !== ElementKind.CLASS) {
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 visitFor(For node) { 327 visitFor(For node) {
324 Scope scope = new BlockScope(context); 328 Scope scope = new BlockScope(context);
325 visitIn(node.initializer, scope); 329 visitIn(node.initializer, scope);
326 visitIn(node.condition, scope); 330 visitIn(node.condition, scope);
327 visitIn(node.update, scope); 331 visitIn(node.update, scope);
328 visitIn(node.body, scope); 332 visitIn(node.body, scope);
329 } 333 }
330 334
331 visitFunctionExpression(FunctionExpression node) { 335 visitFunctionExpression(FunctionExpression node) {
332 visit(node.returnType); 336 visit(node.returnType);
337 if (node.name === null) {
338 cancel(node, "anonymous functions are not implemented");
339 }
340 if (node.name.asIdentifier() === null) {
341 cancel(node.name, "named constructors are not implemented");
342 }
333 FunctionElement enclosingElement = new FunctionElement.node( 343 FunctionElement enclosingElement = new FunctionElement.node(
334 node, ElementKind.FUNCTION, null, context.element); 344 node, ElementKind.FUNCTION, null, context.element);
335 defineElement(node, enclosingElement); 345 defineElement(node, enclosingElement);
336 context = new MethodScope(context, enclosingElement); 346 context = new MethodScope(context, enclosingElement);
337 347
338 // TODO(ahe): Can this be cleaned up to use resolveSignature? 348 // TODO(ahe): Can this be cleaned up to use resolveSignature?
339 ParametersVisitor visitor = new ParametersVisitor(this); 349 ParametersVisitor visitor = new ParametersVisitor(this);
340 visitor.visit(node.parameters); 350 visitor.visit(node.parameters);
341 enclosingElement.parameters = visitor.elements.toLink(); 351 enclosingElement.parameters = visitor.elements.toLink();
342 352
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 } 710 }
701 resolver.visit(node.arguments.head); 711 resolver.visit(node.arguments.head);
702 return visit(node.selector); 712 return visit(node.selector);
703 } 713 }
704 714
705 SourceString visitIdentifier(Identifier node) => node.source; 715 SourceString visitIdentifier(Identifier node) => node.source;
706 716
707 visitNodeList(NodeList node) { 717 visitNodeList(NodeList node) {
708 for (Link<Node> link = node.nodes; !link.isEmpty(); link = link.tail) { 718 for (Link<Node> link = node.nodes; !link.isEmpty(); link = link.tail) {
709 SourceString name = visit(link.head); 719 SourceString name = visit(link.head);
710 Element element = new VariableElement( 720 VariableElement element = new VariableElement(
711 name, node, variables, kind, resolver.context.element); 721 name, variables, kind, resolver.context.element);
722 element.node = link.head;
712 resolver.defineElement(link.head, element); 723 resolver.defineElement(link.head, element);
713 } 724 }
714 } 725 }
715 726
716 visit(Node node) => node.accept(this); 727 visit(Node node) => node.accept(this);
717 728
718 visitNode(Node node) { 729 visitNode(Node node) {
719 resolver.cancel(node, 'not implemented'); 730 resolver.cancel(node, 'not implemented');
720 } 731 }
721 } 732 }
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
817 class TopScope extends Scope { 828 class TopScope extends Scope {
818 Universe universe; 829 Universe universe;
819 830
820 TopScope(Universe this.universe) : super(null, null); 831 TopScope(Universe this.universe) : super(null, null);
821 Element lookup(SourceString name) => universe.find(name); 832 Element lookup(SourceString name) => universe.find(name);
822 833
823 Element add(Element element) { 834 Element add(Element element) {
824 throw "Cannot add an element in the top scope"; 835 throw "Cannot add an element in the top scope";
825 } 836 }
826 } 837 }
OLDNEW
« no previous file with comments | « dart/frog/leg/elements/elements.dart ('k') | dart/frog/leg/scanner/class_element_parser.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698