| 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 dart_types; | 5 library dart_types; |
| 6 | 6 |
| 7 import 'dart:math' show min; | 7 import 'dart:math' show min; |
| 8 | 8 |
| 9 import 'common/resolution.dart' show | 9 import 'common/resolution.dart' show |
| 10 Resolution; | 10 Resolution; |
| 11 import 'compiler.dart' show | 11 import 'compiler.dart' show |
| 12 Compiler; | 12 Compiler; |
| 13 import 'core_types.dart'; | 13 import 'core_types.dart'; |
| 14 import 'diagnostics/diagnostic_listener.dart' show |
| 15 DiagnosticReporter; |
| 14 import 'diagnostics/invariant.dart' show | 16 import 'diagnostics/invariant.dart' show |
| 15 invariant; | 17 invariant; |
| 16 import 'diagnostics/spannable.dart' show | 18 import 'diagnostics/spannable.dart' show |
| 17 CURRENT_ELEMENT_SPANNABLE, | 19 CURRENT_ELEMENT_SPANNABLE, |
| 18 NO_LOCATION_SPANNABLE; | 20 NO_LOCATION_SPANNABLE; |
| 19 import 'elements/modelx.dart' show | 21 import 'elements/modelx.dart' show |
| 20 LibraryElementX, | 22 LibraryElementX, |
| 21 TypeDeclarationElementX, | 23 TypeDeclarationElementX, |
| 22 TypedefElementX; | 24 TypedefElementX; |
| 23 import 'elements/elements.dart'; | 25 import 'elements/elements.dart'; |
| (...skipping 1211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1235 } | 1237 } |
| 1236 | 1238 |
| 1237 class Types implements DartTypes { | 1239 class Types implements DartTypes { |
| 1238 // TODO(johnniwinther): Replace by [CoreTypes]. | 1240 // TODO(johnniwinther): Replace by [CoreTypes]. |
| 1239 final Compiler compiler; | 1241 final Compiler compiler; |
| 1240 final MoreSpecificVisitor moreSpecificVisitor; | 1242 final MoreSpecificVisitor moreSpecificVisitor; |
| 1241 final SubtypeVisitor subtypeVisitor; | 1243 final SubtypeVisitor subtypeVisitor; |
| 1242 final PotentialSubtypeVisitor potentialSubtypeVisitor; | 1244 final PotentialSubtypeVisitor potentialSubtypeVisitor; |
| 1243 | 1245 |
| 1244 CoreTypes get coreTypes => compiler.coreTypes; | 1246 CoreTypes get coreTypes => compiler.coreTypes; |
| 1247 |
| 1248 DiagnosticReporter get reporter => compiler.reporter; |
| 1249 |
| 1245 Resolution get resolution => compiler.resolution; | 1250 Resolution get resolution => compiler.resolution; |
| 1246 | 1251 |
| 1247 Types(Compiler compiler) | 1252 Types(Compiler compiler) |
| 1248 : this.compiler = compiler, | 1253 : this.compiler = compiler, |
| 1249 this.moreSpecificVisitor = new MoreSpecificVisitor(compiler), | 1254 this.moreSpecificVisitor = new MoreSpecificVisitor(compiler), |
| 1250 this.subtypeVisitor = new SubtypeVisitor(compiler), | 1255 this.subtypeVisitor = new SubtypeVisitor(compiler), |
| 1251 this.potentialSubtypeVisitor = new PotentialSubtypeVisitor(compiler); | 1256 this.potentialSubtypeVisitor = new PotentialSubtypeVisitor(compiler); |
| 1252 | 1257 |
| 1253 Types copy(Compiler compiler) { | 1258 Types copy(Compiler compiler) { |
| 1254 return new Types(compiler); | 1259 return new Types(compiler); |
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1536 int maxCommonDepth = min(aClass.hierarchyDepth, bClass.hierarchyDepth); | 1541 int maxCommonDepth = min(aClass.hierarchyDepth, bClass.hierarchyDepth); |
| 1537 for (int depth = maxCommonDepth; depth >= 0; depth--) { | 1542 for (int depth = maxCommonDepth; depth >= 0; depth--) { |
| 1538 Set<DartType> aTypeSet = getSupertypesAtDepth(a, depth); | 1543 Set<DartType> aTypeSet = getSupertypesAtDepth(a, depth); |
| 1539 Set<DartType> bTypeSet = getSupertypesAtDepth(b, depth); | 1544 Set<DartType> bTypeSet = getSupertypesAtDepth(b, depth); |
| 1540 Set<DartType> intersection = aTypeSet..retainAll(bTypeSet); | 1545 Set<DartType> intersection = aTypeSet..retainAll(bTypeSet); |
| 1541 if (intersection.length == 1) { | 1546 if (intersection.length == 1) { |
| 1542 return intersection.first; | 1547 return intersection.first; |
| 1543 } | 1548 } |
| 1544 } | 1549 } |
| 1545 | 1550 |
| 1546 compiler.internalError(CURRENT_ELEMENT_SPANNABLE, | 1551 reporter.internalError(CURRENT_ELEMENT_SPANNABLE, |
| 1547 'No least upper bound computed for $a and $b.'); | 1552 'No least upper bound computed for $a and $b.'); |
| 1548 return null; | 1553 return null; |
| 1549 } | 1554 } |
| 1550 | 1555 |
| 1551 /// Computes the least upper bound of the types in the longest prefix of [a] | 1556 /// Computes the least upper bound of the types in the longest prefix of [a] |
| 1552 /// and [b]. | 1557 /// and [b]. |
| 1553 List<DartType> computeLeastUpperBoundsTypes(List<DartType> a, | 1558 List<DartType> computeLeastUpperBoundsTypes(List<DartType> a, |
| 1554 List<DartType> b) { | 1559 List<DartType> b) { |
| 1555 if (a.isEmpty || b.isEmpty) return const <DartType>[]; | 1560 if (a.isEmpty || b.isEmpty) return const <DartType>[]; |
| 1556 int prefixLength = min(a.length, b.length); | 1561 int prefixLength = min(a.length, b.length); |
| (...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1959 } | 1964 } |
| 1960 namedParameterTypes[index].accept(this, namedParameters[index]); | 1965 namedParameterTypes[index].accept(this, namedParameters[index]); |
| 1961 needsComma = true; | 1966 needsComma = true; |
| 1962 } | 1967 } |
| 1963 sb.write('}'); | 1968 sb.write('}'); |
| 1964 } | 1969 } |
| 1965 sb.write(')'); | 1970 sb.write(')'); |
| 1966 } | 1971 } |
| 1967 } | 1972 } |
| 1968 | 1973 |
| OLD | NEW |