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 Type getType(TypeAnnotation annotation); | 8 Type getType(TypeAnnotation annotation); |
9 } | 9 } |
10 | 10 |
(...skipping 1100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1111 for (Link<Node> typeArguments = node.typeArguments.nodes; | 1111 for (Link<Node> typeArguments = node.typeArguments.nodes; |
1112 !typeArguments.isEmpty(); | 1112 !typeArguments.isEmpty(); |
1113 typeArguments = typeArguments.tail) { | 1113 typeArguments = typeArguments.tail) { |
1114 arguments.addLast(resolveTypeAnnotation(typeArguments.head)); | 1114 arguments.addLast(resolveTypeAnnotation(typeArguments.head)); |
1115 } | 1115 } |
1116 } | 1116 } |
1117 type = new InterfaceType(element.name, element, arguments.toLink()); | 1117 type = new InterfaceType(element.name, element, arguments.toLink()); |
1118 } else if (element.isTypedef()) { | 1118 } else if (element.isTypedef()) { |
1119 // TODO(karlklose): implement typedefs. We return a fake type that the | 1119 // TODO(karlklose): implement typedefs. We return a fake type that the |
1120 // code generator can use to detect typedefs in is-checks. | 1120 // code generator can use to detect typedefs in is-checks. |
1121 type = new SimpleType(element.name, element); | 1121 type = new InterfaceType(element.name, element); |
1122 } else { | 1122 } else { |
1123 type = element.computeType(compiler); | 1123 type = element.computeType(compiler); |
1124 } | 1124 } |
1125 } | 1125 } |
1126 return useType(node, type); | 1126 return useType(node, type); |
1127 } | 1127 } |
1128 | 1128 |
1129 visitModifiers(Modifiers node) { | 1129 visitModifiers(Modifiers node) { |
1130 // TODO(ngeoffray): Implement this. | 1130 // TODO(ngeoffray): Implement this. |
1131 unimplemented(node, 'modifiers'); | 1131 unimplemented(node, 'modifiers'); |
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1406 } else if (supertype !== null) { | 1406 } else if (supertype !== null) { |
1407 error(node.superclass, MessageKind.TYPE_NAME_EXPECTED); | 1407 error(node.superclass, MessageKind.TYPE_NAME_EXPECTED); |
1408 } | 1408 } |
1409 if (classElement.name != Types.OBJECT && classElement.supertype === null) { | 1409 if (classElement.name != Types.OBJECT && classElement.supertype === null) { |
1410 ClassElement objectElement = context.lookup(Types.OBJECT); | 1410 ClassElement objectElement = context.lookup(Types.OBJECT); |
1411 if (objectElement !== null && !objectElement.isResolved) { | 1411 if (objectElement !== null && !objectElement.isResolved) { |
1412 compiler.resolver.toResolve.add(objectElement); | 1412 compiler.resolver.toResolve.add(objectElement); |
1413 } else if (objectElement === null){ | 1413 } else if (objectElement === null){ |
1414 error(node, MessageKind.CANNOT_RESOLVE_TYPE, [Types.OBJECT]); | 1414 error(node, MessageKind.CANNOT_RESOLVE_TYPE, [Types.OBJECT]); |
1415 } | 1415 } |
1416 classElement.supertype = new SimpleType(Types.OBJECT, objectElement); | 1416 classElement.supertype = new InterfaceType(Types.OBJECT, objectElement); |
1417 } | 1417 } |
1418 if (node.defaultClause !== null) { | 1418 if (node.defaultClause !== null) { |
1419 classElement.defaultClass = visit(node.defaultClause); | 1419 classElement.defaultClass = visit(node.defaultClause); |
1420 } | 1420 } |
1421 for (Link<Node> link = node.interfaces.nodes; | 1421 for (Link<Node> link = node.interfaces.nodes; |
1422 !link.isEmpty(); | 1422 !link.isEmpty(); |
1423 link = link.tail) { | 1423 link = link.tail) { |
1424 Type interfaceType = visit(link.head); | 1424 Type interfaceType = visit(link.head); |
1425 if (interfaceType !== null && interfaceType.element.isExtendable()) { | 1425 if (interfaceType !== null && interfaceType.element.isExtendable()) { |
1426 classElement.interfaces = | 1426 classElement.interfaces = |
(...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1919 | 1919 |
1920 TopScope(LibraryElement library) : super(null, library); | 1920 TopScope(LibraryElement library) : super(null, library); |
1921 Element lookup(SourceString name) { | 1921 Element lookup(SourceString name) { |
1922 return library.find(name); | 1922 return library.find(name); |
1923 } | 1923 } |
1924 | 1924 |
1925 Element add(Element element) { | 1925 Element add(Element element) { |
1926 throw "Cannot add an element in the top scope"; | 1926 throw "Cannot add an element in the top scope"; |
1927 } | 1927 } |
1928 } | 1928 } |
OLD | NEW |