From d54c4c2da1fb3b14f9eef43d055e25ced611d354 Mon Sep 17 00:00:00 2001 From: Alexey Stepanov Date: Wed, 10 Aug 2016 12:23:27 +0300 Subject: [PATCH] translator: add equals for types --- .../kotlinnative/translator/llvm/types/LLVMBooleanType.kt | 5 +++++ .../org/kotlinnative/translator/llvm/types/LLVMByteType.kt | 4 ++++ .../org/kotlinnative/translator/llvm/types/LLVMCharType.kt | 4 ++++ .../org/kotlinnative/translator/llvm/types/LLVMDoubleType.kt | 4 ++++ .../org/kotlinnative/translator/llvm/types/LLVMFloatType.kt | 4 ++++ .../org/kotlinnative/translator/llvm/types/LLVMIntType.kt | 4 ++++ .../org/kotlinnative/translator/llvm/types/LLVMLongType.kt | 4 ++++ .../org/kotlinnative/translator/llvm/types/LLVMShortType.kt | 4 ++++ 8 files changed, 33 insertions(+) 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 19cb9ebb04d..d978dc59073 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 @@ -1,6 +1,7 @@ package org.kotlinnative.translator.llvm.types import org.kotlinnative.translator.llvm.LLVMExpression +import org.kotlinnative.translator.llvm.LLVMNode import org.kotlinnative.translator.llvm.LLVMSingleValue @@ -36,6 +37,10 @@ class LLVMBooleanType() : LLVMType() { override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = LLVMExpression(LLVMBooleanType(), "icmp ne i1 $firstOp, $secondOp") + override fun equals(other: Any?): Boolean { + return other is LLVMBooleanType + } + override fun parseArg(inputArg: String) = when (inputArg.toLowerCase()) { "true" -> "1" "false" -> "0" 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 ba97a02285c..6367e6552bb 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 @@ -22,6 +22,10 @@ class LLVMByteType() : LLVMType() { override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = LLVMExpression(LLVMBooleanType(), "icmp ne i8 $firstOp, $secondOp") + override fun equals(other: Any?): Boolean { + return other is LLVMByteType + } + override fun mangle() = "Byte" override val align = 1 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 080459eacfe..e8de3c13376 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 @@ -22,6 +22,10 @@ class LLVMCharType() : LLVMType() { override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = LLVMExpression(LLVMBooleanType(), "icmp ne i8 $firstOp, $secondOp") + override fun equals(other: Any?): Boolean { + return other is LLVMCharType + } + override fun mangle() = "Char" override val align = 1 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 a4cb7ad5ee2..80dad005695 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 @@ -18,6 +18,10 @@ class LLVMDoubleType() : LLVMType() { override fun operatorPlus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = LLVMExpression(LLVMDoubleType(), "fadd double $firstOp, $secondOp") + override fun equals(other: Any?): Boolean { + return other is LLVMDoubleType + } + override fun mangle() = "Double" override val align = 8 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 d7baa6da88b..be2f2e4fe28 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 @@ -18,6 +18,10 @@ class LLVMFloatType() : LLVMType() { override fun operatorPlus(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = LLVMExpression(LLVMFloatType(), "fadd float $firstOp, $secondOp") + override fun equals(other: Any?): Boolean { + return other is LLVMFloatType + } + override val align = 4 override var size: Int = 4 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 6370743a6a7..e48bb3700e1 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 @@ -62,6 +62,10 @@ class LLVMIntType() : LLVMType() { override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = LLVMExpression(LLVMBooleanType(), "icmp ne i32 $firstOp, $secondOp") + override fun equals(other: Any?): Boolean { + return other is LLVMIntType + } + override fun convertFrom(source: LLVMSingleValue): LLVMExpression = when (source.type!!) { is LLVMBooleanType, is LLVMByteType, 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 fe9797152ad..2a8bb44230e 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 @@ -65,6 +65,10 @@ class LLVMLongType() : LLVMType() { else -> throw UnimplementedException() } + override fun equals(other: Any?): Boolean { + return other is LLVMLongType + } + override val align = 4 override var size: Int = 8 override val defaultValue = "0" 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 5adeb853577..be44b29a28f 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 @@ -22,6 +22,10 @@ class LLVMShortType() : LLVMType() { override fun operatorNeq(firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = LLVMExpression(LLVMBooleanType(), "icmp ne i16 $firstOp, $secondOp") + override fun equals(other: Any?): Boolean { + return other is LLVMShortType + } + override var size: Int = 2 override val align = 2 override val defaultValue = "0"