diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMBooleanType.kt b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMBooleanType.kt index fcc68c7eb46..5673b7aad4f 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMBooleanType.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMBooleanType.kt @@ -63,10 +63,7 @@ class LLVMBooleanType() : LLVMType() { override fun isPrimitive() = true override val typename = "i1" - override fun hashCode(): Int { - var result = align - result = 31 * result + size - result = 31 * result + defaultValue.hashCode() - return result - } + override fun hashCode() = + mangle().hashCode() + } \ No newline at end of file diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMByteType.kt b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMByteType.kt index fdb7f86172f..98d2e50a8a7 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMByteType.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMByteType.kt @@ -33,10 +33,7 @@ class LLVMByteType() : LLVMType() { override val typename = "i8" override val defaultValue = "0" override fun isPrimitive() = true - override fun hashCode(): Int { - var result = align - result = 31 * result + size - result = 31 * result + defaultValue.hashCode() - return result - } + override fun hashCode() = + mangle().hashCode() + } diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMCharType.kt b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMCharType.kt index fb42b2acda3..663b700ea16 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMCharType.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMCharType.kt @@ -33,10 +33,7 @@ class LLVMCharType() : LLVMType() { override val typename = "i8" override val defaultValue = "0" override fun isPrimitive() = true - override fun hashCode(): Int { - var result = align - result = 31 * result + size - result = 31 * result + defaultValue.hashCode() - return result - } + override fun hashCode() = + mangle().hashCode() + } diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMDoubleType.kt b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMDoubleType.kt index 138f0694f31..85aff129fd0 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMDoubleType.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMDoubleType.kt @@ -53,10 +53,7 @@ class LLVMDoubleType() : LLVMType() { override val typename = "double" override val defaultValue = "0.0" override fun isPrimitive() = true - override fun hashCode(): Int { - var result = align - result = 31 * result + size - result = 31 * result + defaultValue.hashCode() - return result - } + override fun hashCode() = + mangle().hashCode() + } \ No newline at end of file diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMFloatType.kt b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMFloatType.kt index 2756c0cf7f7..532aa03639f 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMFloatType.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMFloatType.kt @@ -53,10 +53,7 @@ class LLVMFloatType() : LLVMType() { override val typename = "float" override val defaultValue = "0.0" override fun isPrimitive() = true - override fun hashCode(): Int { - var result = align - result = 31 * result + size - result = 31 * result + defaultValue.hashCode() - return result - } + override fun hashCode() = + typename.hashCode() + } \ No newline at end of file diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMFunctionType.kt b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMFunctionType.kt index a5571fafca3..a6b8d672dbf 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMFunctionType.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMFunctionType.kt @@ -29,4 +29,12 @@ class LLVMFunctionType(type: KotlinType) : LLVMType() { "${returnType.type} (${arguments.map { it.getType() }.joinToString()})" override val typename = "FunctionType" + + override fun hashCode() = + mangle().hashCode() + + override fun equals(other: Any?): Boolean { + return (other is LLVMFunctionType) && (mangle() == other.mangle()) + } + } diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMIntType.kt b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMIntType.kt index c9041d83926..1db8609c1d8 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMIntType.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMIntType.kt @@ -81,10 +81,7 @@ class LLVMIntType() : LLVMType() { override val typename = "i32" override fun isPrimitive() = true - override fun hashCode(): Int{ - var result = align - result = 31 * result + size - result = 31 * result + defaultValue.hashCode() - return result - } + override fun hashCode() = + mangle().hashCode() + } \ No newline at end of file diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMLongType.kt b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMLongType.kt index 2631b70b9c1..38036a1d5a6 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMLongType.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMLongType.kt @@ -76,10 +76,7 @@ class LLVMLongType() : LLVMType() { override fun mangle() = "Long" override val typename = "i64" override fun isPrimitive() = true - override fun hashCode(): Int { - var result = align - result = 31 * result + size - result = 31 * result + defaultValue.hashCode() - return result - } + override fun hashCode() = + mangle().hashCode() + } \ No newline at end of file diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMNullType.kt b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMNullType.kt index 56363b12427..6298d8da930 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMNullType.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMNullType.kt @@ -8,4 +8,12 @@ class LLVMNullType() : LLVMType() { override fun mangle() = "" override val typename = "" + + override fun equals(other: Any?): Boolean { + return other is LLVMNullType + } + + override fun hashCode() = + "null".hashCode() + } diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMReferenceType.kt b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMReferenceType.kt index b3b51956e16..0c4958a199a 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMReferenceType.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMReferenceType.kt @@ -31,4 +31,11 @@ class LLVMReferenceType(val type: String, var prefix: String = "", override val override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = LLVMExpression(LLVMBooleanType(), "icmp ne ${firstOp.getType()} $firstOp, ${if (secondOp.type is LLVMNullType) "null" else "$secondOp"}") + + override fun equals(other: Any?): Boolean { + return (other is LLVMReferenceType) and (typename.equals((other as LLVMReferenceType).typename)) + } + + override fun hashCode() = + typename.hashCode() } \ No newline at end of file diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMShortType.kt b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMShortType.kt index 43d9e87aab9..d062d9f7c03 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMShortType.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMShortType.kt @@ -33,10 +33,7 @@ class LLVMShortType() : LLVMType() { override fun mangle() = "Short" override val typename = "i16" override fun isPrimitive() = true - override fun hashCode(): Int { - var result = size - result = 31 * result + align - result = 31 * result + defaultValue.hashCode() - return result - } + override fun hashCode() = + mangle().hashCode() + } diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMStringType.kt b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMStringType.kt index a3e7e5cf57e..d422722e8a5 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMStringType.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMStringType.kt @@ -18,6 +18,7 @@ class LLVMStringType(override val length: Int) : LLVMArray, LLVMType() { override val typename = "i8*" override fun fullType() = "[${length + 1} x i8]" override fun hashCode(): Int { - return length + return length * 31 + + mangle().hashCode() } } diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMVoidType.kt b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMVoidType.kt index 758ca0ea841..79a6a8a2097 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMVoidType.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMVoidType.kt @@ -8,4 +8,8 @@ class LLVMVoidType() : LLVMType() { override fun mangle() = "" override val typename = "void" + + override fun hashCode() = + typename.hashCode() + }