| 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 library dart2js.typechecker; | 5 library dart2js.typechecker; |
| 6 | 6 |
| 7 import 'common/names.dart' show | 7 import 'common/names.dart' show |
| 8 Identifiers; | 8 Identifiers; |
| 9 import 'common/tasks.dart' show | 9 import 'common/tasks.dart' show |
| 10 CompilerTask; | 10 CompilerTask; |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 | 139 |
| 140 String get name => 'dynamic'; | 140 String get name => 'dynamic'; |
| 141 | 141 |
| 142 DartType computeType(Compiler compiler) => const DynamicType(); | 142 DartType computeType(Compiler compiler) => const DynamicType(); |
| 143 | 143 |
| 144 bool isCallable(Compiler compiler) => true; | 144 bool isCallable(Compiler compiler) => true; |
| 145 | 145 |
| 146 String toString() => 'DynamicAccess'; | 146 String toString() => 'DynamicAccess'; |
| 147 } | 147 } |
| 148 | 148 |
| 149 /// An access of the `assert` method. | |
| 150 class AssertAccess implements ElementAccess { | |
| 151 const AssertAccess(); | |
| 152 | |
| 153 Element get element => null; | |
| 154 | |
| 155 String get name => 'assert'; | |
| 156 | |
| 157 DartType computeType(Compiler compiler) { | |
| 158 return new FunctionType.synthesized( | |
| 159 const VoidType(), | |
| 160 <DartType>[const DynamicType()]); | |
| 161 } | |
| 162 | |
| 163 bool isCallable(Compiler compiler) => true; | |
| 164 | |
| 165 String toString() => 'AssertAccess'; | |
| 166 } | |
| 167 | |
| 168 /** | 149 /** |
| 169 * An access of a resolved top-level or static property or function, or an | 150 * An access of a resolved top-level or static property or function, or an |
| 170 * access of a resolved element through [:this:]. | 151 * access of a resolved element through [:this:]. |
| 171 */ | 152 */ |
| 172 class ResolvedAccess extends ElementAccess { | 153 class ResolvedAccess extends ElementAccess { |
| 173 final Element element; | 154 final Element element; |
| 174 | 155 |
| 175 ResolvedAccess(Element this.element) { | 156 ResolvedAccess(Element this.element) { |
| 176 assert(element != null); | 157 assert(element != null); |
| 177 } | 158 } |
| (...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 607 void pushCascadeType(DartType type) { | 588 void pushCascadeType(DartType type) { |
| 608 cascadeTypes = cascadeTypes.prepend(type); | 589 cascadeTypes = cascadeTypes.prepend(type); |
| 609 } | 590 } |
| 610 | 591 |
| 611 DartType popCascadeType() { | 592 DartType popCascadeType() { |
| 612 DartType type = cascadeTypes.head; | 593 DartType type = cascadeTypes.head; |
| 613 cascadeTypes = cascadeTypes.tail; | 594 cascadeTypes = cascadeTypes.tail; |
| 614 return type; | 595 return type; |
| 615 } | 596 } |
| 616 | 597 |
| 598 DartType visitAssert(Assert node) { |
| 599 analyze(node.condition); |
| 600 if (node.hasMessage) analyze(node.message); |
| 601 return const StatementType(); |
| 602 } |
| 603 |
| 617 DartType visitBlock(Block node) { | 604 DartType visitBlock(Block node) { |
| 618 return analyze(node.statements); | 605 return analyze(node.statements); |
| 619 } | 606 } |
| 620 | 607 |
| 621 DartType visitCascade(Cascade node) { | 608 DartType visitCascade(Cascade node) { |
| 622 analyze(node.expression); | 609 analyze(node.expression); |
| 623 return popCascadeType(); | 610 return popCascadeType(); |
| 624 } | 611 } |
| 625 | 612 |
| 626 DartType visitCascadeReceiver(CascadeReceiver node) { | 613 DartType visitCascadeReceiver(CascadeReceiver node) { |
| (...skipping 531 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1158 // This should be the case but we double-check. | 1145 // This should be the case but we double-check. |
| 1159 // TODO(johnniwinther): Ensure that we don't suggest malbounded types. | 1146 // TODO(johnniwinther): Ensure that we don't suggest malbounded types. |
| 1160 return shownTypeGeneric; | 1147 return shownTypeGeneric; |
| 1161 } | 1148 } |
| 1162 } | 1149 } |
| 1163 return null; | 1150 return null; |
| 1164 | 1151 |
| 1165 } | 1152 } |
| 1166 | 1153 |
| 1167 DartType visitSend(Send node) { | 1154 DartType visitSend(Send node) { |
| 1168 if (elements.isAssert(node)) { | |
| 1169 return analyzeInvocation(node, const AssertAccess()); | |
| 1170 } | |
| 1171 | |
| 1172 Element element = elements[node]; | 1155 Element element = elements[node]; |
| 1173 | 1156 |
| 1174 if (element != null && element.isConstructor) { | 1157 if (element != null && element.isConstructor) { |
| 1175 DartType receiverType; | 1158 DartType receiverType; |
| 1176 if (node.receiver != null) { | 1159 if (node.receiver != null) { |
| 1177 receiverType = analyze(node.receiver); | 1160 receiverType = analyze(node.receiver); |
| 1178 } else if (node.selector.isSuper()) { | 1161 } else if (node.selector.isSuper()) { |
| 1179 // TODO(johnniwinther): Lookup super-member in class members. | 1162 // TODO(johnniwinther): Lookup super-member in class members. |
| 1180 receiverType = superType; | 1163 receiverType = superType; |
| 1181 } else { | 1164 } else { |
| (...skipping 792 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1974 | 1957 |
| 1975 visitTypedef(Typedef node) { | 1958 visitTypedef(Typedef node) { |
| 1976 // Do not typecheck [Typedef] nodes. | 1959 // Do not typecheck [Typedef] nodes. |
| 1977 } | 1960 } |
| 1978 | 1961 |
| 1979 visitNode(Node node) { | 1962 visitNode(Node node) { |
| 1980 compiler.internalError(node, | 1963 compiler.internalError(node, |
| 1981 'Unexpected node ${node.getObjectDescription()} in the type checker.'); | 1964 'Unexpected node ${node.getObjectDescription()} in the type checker.'); |
| 1982 } | 1965 } |
| 1983 } | 1966 } |
| OLD | NEW |