From d210e8bad098720d8945845eec60075b8d5a3f71 Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Tue, 22 Jan 2019 20:53:04 +0300 Subject: [PATCH] Introduce optional optimization parameters for type system context --- .../kotlin/types/AbstractStrictEqualityTypeChecker.kt | 2 +- .../jetbrains/kotlin/types/model/TypeSystemContext.kt | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/core/type-system/src/org/jetbrains/kotlin/types/AbstractStrictEqualityTypeChecker.kt b/core/type-system/src/org/jetbrains/kotlin/types/AbstractStrictEqualityTypeChecker.kt index 55c411cedf7..63fea3cfdca 100644 --- a/core/type-system/src/org/jetbrains/kotlin/types/AbstractStrictEqualityTypeChecker.kt +++ b/core/type-system/src/org/jetbrains/kotlin/types/AbstractStrictEqualityTypeChecker.kt @@ -46,7 +46,7 @@ object AbstractStrictEqualityTypeChecker { return false } -// if (a.arguments === b.arguments) return true + if (identicalArguments(a, b)) return true for (i in 0 until a.argumentsCount()) { val aArg = a.getArgument(i) diff --git a/core/type-system/src/org/jetbrains/kotlin/types/model/TypeSystemContext.kt b/core/type-system/src/org/jetbrains/kotlin/types/model/TypeSystemContext.kt index 91ede9fd571..c5b762226e0 100644 --- a/core/type-system/src/org/jetbrains/kotlin/types/model/TypeSystemContext.kt +++ b/core/type-system/src/org/jetbrains/kotlin/types/model/TypeSystemContext.kt @@ -25,7 +25,15 @@ enum class TypeVariance { INV } -interface TypeSystemContext { + +interface TypeSystemOptimizationContext { + /** + * @return true is a.arguments == b.arguments, or false if not supported + */ + fun identicalArguments(a: SimpleTypeIM, b: SimpleTypeIM) = false +} + +interface TypeSystemContext : TypeSystemOptimizationContext { fun KotlinTypeIM.asSimpleType(): SimpleTypeIM? fun KotlinTypeIM.asFlexibleType(): FlexibleTypeIM?