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

Side by Side Diff: pkg/compiler/lib/src/typechecker.dart

Issue 1172693003: Move computeType to TypedElement and TypeDeclarationElement. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years, 6 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
« no previous file with comments | « pkg/compiler/lib/src/resolution/type_resolver.dart ('k') | no next file » | 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) 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 part of dart2js; 5 part of dart2js;
6 6
7 class TypeCheckerTask extends CompilerTask { 7 class TypeCheckerTask extends CompilerTask {
8 TypeCheckerTask(Compiler compiler) : super(compiler); 8 TypeCheckerTask(Compiler compiler) : super(compiler);
9 String get name => "Type checker"; 9 String get name => "Type checker";
10 10
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 */ 119 */
120 class ResolvedAccess extends ElementAccess { 120 class ResolvedAccess extends ElementAccess {
121 final Element element; 121 final Element element;
122 122
123 ResolvedAccess(Element this.element) { 123 ResolvedAccess(Element this.element) {
124 assert(element != null); 124 assert(element != null);
125 } 125 }
126 126
127 DartType computeType(Compiler compiler) { 127 DartType computeType(Compiler compiler) {
128 if (element.isGetter) { 128 if (element.isGetter) {
129 FunctionType functionType = element.computeType(compiler); 129 GetterElement getter = element;
130 FunctionType functionType = getter.computeType(compiler);
130 return functionType.returnType; 131 return functionType.returnType;
131 } else if (element.isSetter) { 132 } else if (element.isSetter) {
132 FunctionType functionType = element.computeType(compiler); 133 SetterElement setter = element;
134 FunctionType functionType = setter.computeType(compiler);
133 if (functionType.parameterTypes.length != 1) { 135 if (functionType.parameterTypes.length != 1) {
134 // TODO(johnniwinther,karlklose): this happens for malformed static 136 // TODO(johnniwinther,karlklose): this happens for malformed static
135 // setters. Treat them the same as instance members. 137 // setters. Treat them the same as instance members.
136 return const DynamicType(); 138 return const DynamicType();
137 } 139 }
138 return functionType.parameterTypes.first; 140 return functionType.parameterTypes.first;
141 } else if (element.isTypedef || element.isClass) {
142 TypeDeclarationElement typeDeclaration = element;
143 typeDeclaration.computeType(compiler);
144 return typeDeclaration.thisType;
139 } else { 145 } else {
140 return element.computeType(compiler); 146 TypedElement typedElement = element;
147 typedElement.computeType(compiler);
148 return typedElement.type;
141 } 149 }
142 } 150 }
143 151
144 String toString() => 'ResolvedAccess($element)'; 152 String toString() => 'ResolvedAccess($element)';
145 } 153 }
146 154
147 /// An access to a promoted variable. 155 /// An access to a promoted variable.
148 class PromotedAccess extends ElementAccess { 156 class PromotedAccess extends ElementAccess {
149 final VariableElement element; 157 final VariableElement element;
150 final DartType type; 158 final DartType type;
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 currentAsyncMarker = previousAsyncMarker; 638 currentAsyncMarker = previousAsyncMarker;
631 return type; 639 return type;
632 } 640 }
633 641
634 DartType visitIdentifier(Identifier node) { 642 DartType visitIdentifier(Identifier node) {
635 if (node.isThis()) { 643 if (node.isThis()) {
636 return thisType; 644 return thisType;
637 } else if (node.isSuper()) { 645 } else if (node.isSuper()) {
638 return superType; 646 return superType;
639 } else { 647 } else {
640 Element element = elements[node]; 648 TypedElement element = elements[node];
641 assert(invariant(node, element != null, 649 assert(invariant(node, element != null,
642 message: 'Missing element for identifier')); 650 message: 'Missing element for identifier'));
643 assert(invariant(node, element.isVariable || 651 assert(invariant(node, element.isVariable ||
644 element.isParameter || 652 element.isParameter ||
645 element.isField, 653 element.isField,
646 message: 'Unexpected context element ${element}')); 654 message: 'Unexpected context element ${element}'));
647 return element.computeType(compiler); 655 return element.computeType(compiler);
648 } 656 }
649 } 657 }
650 658
(...skipping 866 matching lines...) Expand 10 before | Expand all | Expand 10 after
1517 } 1525 }
1518 1526
1519 DartType visitLiteralNull(LiteralNull node) { 1527 DartType visitLiteralNull(LiteralNull node) {
1520 return const DynamicType(); 1528 return const DynamicType();
1521 } 1529 }
1522 1530
1523 DartType visitLiteralSymbol(LiteralSymbol node) { 1531 DartType visitLiteralSymbol(LiteralSymbol node) {
1524 return compiler.symbolClass.rawType; 1532 return compiler.symbolClass.rawType;
1525 } 1533 }
1526 1534
1527 DartType computeConstructorType(Element constructor, DartType type) { 1535 DartType computeConstructorType(ConstructorElement constructor,
1536 DartType type) {
1528 if (Elements.isUnresolved(constructor)) return const DynamicType(); 1537 if (Elements.isUnresolved(constructor)) return const DynamicType();
1529 DartType constructorType = constructor.computeType(compiler); 1538 DartType constructorType = constructor.computeType(compiler);
1530 if (identical(type.kind, TypeKind.INTERFACE)) { 1539 if (identical(type.kind, TypeKind.INTERFACE)) {
1531 if (constructor.isSynthesized) { 1540 if (constructor.isSynthesized) {
1532 // TODO(johnniwinther): Remove this when synthesized constructors handle 1541 // TODO(johnniwinther): Remove this when synthesized constructors handle
1533 // type variables correctly. 1542 // type variables correctly.
1534 InterfaceType interfaceType = type; 1543 InterfaceType interfaceType = type;
1535 ClassElement receiverElement = interfaceType.element; 1544 ClassElement receiverElement = interfaceType.element;
1536 while (receiverElement.isMixinApplication) { 1545 while (receiverElement.isMixinApplication) {
1537 receiverElement = receiverElement.supertype.element; 1546 receiverElement = receiverElement.supertype.element;
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
1863 1872
1864 visitTypedef(Typedef node) { 1873 visitTypedef(Typedef node) {
1865 // Do not typecheck [Typedef] nodes. 1874 // Do not typecheck [Typedef] nodes.
1866 } 1875 }
1867 1876
1868 visitNode(Node node) { 1877 visitNode(Node node) {
1869 compiler.internalError(node, 1878 compiler.internalError(node,
1870 'Unexpected node ${node.getObjectDescription()} in the type checker.'); 1879 'Unexpected node ${node.getObjectDescription()} in the type checker.');
1871 } 1880 }
1872 } 1881 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/resolution/type_resolver.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698