translator: add operators ==, !=, ===, !== for classes

This commit is contained in:
Alexey Stepanov
2016-08-12 10:41:26 +03:00
parent fc9cfb902f
commit 9c3de574fa
3 changed files with 66 additions and 1 deletions
@@ -746,11 +746,14 @@ abstract class BlockCodegen(val state: TranslationState, val variableManager: Va
KtTokens.LTEQ -> firstOp.type!!.operatorLeq(firstNativeOp, secondNativeOp)
KtTokens.GTEQ -> firstOp.type!!.operatorGeq(firstNativeOp, secondNativeOp)
KtTokens.EQEQ ->
if (firstOp.type is LLVMReferenceType)
if ((firstOp.type is LLVMReferenceType) && (secondOp.type !is LLVMReferenceType))
firstOp.type!!.operatorEq(firstNativeOp, secondOp)
else
firstOp.type!!.operatorEq(firstNativeOp, secondNativeOp)
KtTokens.EQEQEQ ->
firstOp.type!!.operatorEq(firstNativeOp, secondNativeOp)
KtTokens.EXCLEQ -> firstOp.type!!.operatorNeq(firstNativeOp, secondNativeOp)
KtTokens.EXCLEQEQEQ -> firstOp.type!!.operatorNeq(firstNativeOp, secondNativeOp)
KtTokens.EQ -> {
if (secondOp.type is LLVMNullType) {
val result = codeBuilder.getNewVariable(firstOp.type!!, firstOp.pointer)
@@ -0,0 +1,8 @@
referential_equality_1_EQEQ_true() == 1
referential_equality_1_EQEQ_false() == 0
referential_equality_1_EQEQEQ_true() == 1
referential_equality_1_EQEQEQ_false() == 0
referential_equality_1_EXCLEQEQ_true() == 1
referential_equality_1_EXCLEQEQ_false() == 0
referential_equality_1_EXCLEQEQEQ_true() == 1
referential_equality_1_EXCLEQEQEQ_false() == 0
@@ -0,0 +1,54 @@
class referential_equality_1
fun referential_equality_1_EQEQ_true(): Int {
val instance = referential_equality_1()
var instance2 = referential_equality_1()
instance2 = instance
//problem with boolean in auto generated functions in clang
return if (instance == instance2) 1 else 0
}
fun referential_equality_1_EQEQ_false(): Int {
val instance = referential_equality_1()
val instance2 = referential_equality_1()
return if (instance == instance2) 1 else 0
}
fun referential_equality_1_EQEQEQ_true(): Int {
val instance = referential_equality_1()
var instance2 = referential_equality_1()
instance2 = instance
return if (instance === instance2) 1 else 0
}
fun referential_equality_1_EQEQEQ_false(): Int {
val instance = referential_equality_1()
val instance2 = referential_equality_1()
return if (instance === instance2) 1 else 0
}
fun referential_equality_1_EXCLEQEQ_false(): Int {
val instance = referential_equality_1()
var instance2 = referential_equality_1()
instance2 = instance
return if (instance != instance2) 1 else 0
}
fun referential_equality_1_EXCLEQEQ_true(): Int {
val instance = referential_equality_1()
val instance2 = referential_equality_1()
return if (instance != instance2) 1 else 0
}
fun referential_equality_1_EXCLEQEQEQ_false(): Int {
val instance = referential_equality_1()
var instance2 = referential_equality_1()
instance2 = instance
return if (instance !== instance2) 1 else 0
}
fun referential_equality_1_EXCLEQEQEQ_true(): Int {
val instance = referential_equality_1()
val instance2 = referential_equality_1()
return if (instance !== instance2) 1 else 0
}