| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |