diff --git a/kotstd/include/IntArray.kt b/kotstd/include/IntArray.kt index 326a83a41ea..11caa7d6432 100644 --- a/kotstd/include/IntArray.kt +++ b/kotstd/include/IntArray.kt @@ -41,10 +41,7 @@ class IntArray(var size: Int) { public fun IntArray.copyOf(newSize: Int): IntArray { val newInstance = IntArray(newSize) var index = 0 - var end = this.size - if (newSize < this.size) { - end = newSize - } + val end = if (newSize > this.size) this.size else newSize while (index < end) { val value = this.get(index) newInstance.set(index, value) @@ -76,4 +73,20 @@ public operator fun IntArray.plus(element: Int): IntArray { val result = this.copyOf(index + 1) result[index] = element return result +} + +public operator fun IntArray.plus(elements: IntArray): IntArray { + val thisSize = size + val arraySize = elements.size + val resultSize = thisSize + arraySize + val newInstance = this.copyOf(resultSize) + var index = thisSize + + while (index < resultSize) { + val value = elements.get(index - thisSize) + newInstance.set(index, value) + index = index + 1 + } + + return newInstance } \ No newline at end of file diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/BlockCodegen.kt b/translator/src/main/kotlin/org/kotlinnative/translator/BlockCodegen.kt index 92a2cf159ce..53f3396646b 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/BlockCodegen.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/BlockCodegen.kt @@ -867,13 +867,15 @@ abstract class BlockCodegen(val state: TranslationState, val variableManager: Va codeBuilder.addCondition(conditionResult, thenLabel, elseLabel) codeBuilder.markWithLabel(thenLabel) - val thenResultExpression = evaluateExpression(thenExpression, scopeDepth + 1) - codeBuilder.storeVariable(resultVariable, thenResultExpression ?: return null) + val thenResultExpression = evaluateExpression(thenExpression, scopeDepth + 1) ?: return null + val thenResultNativeExpression = codeBuilder.receiveNativeValue(thenResultExpression) + codeBuilder.storeVariable(resultVariable, thenResultNativeExpression) codeBuilder.addUnconditionalJump(endLabel) codeBuilder.markWithLabel(elseLabel) - val elseResultExpression = evaluateExpression(elseExpression, scopeDepth + 1) - codeBuilder.storeVariable(resultVariable, elseResultExpression ?: return null) + val elseResultExpression = evaluateExpression(elseExpression, scopeDepth + 1) ?: return null + val elseResultNativeExpression = codeBuilder.receiveNativeValue(elseResultExpression) + codeBuilder.storeVariable(resultVariable, elseResultNativeExpression) codeBuilder.addUnconditionalJump(endLabel) codeBuilder.markWithLabel(endLabel) return resultVariable diff --git a/translator/src/test/kotlin/tests/input/if_expression_1.txt b/translator/src/test/kotlin/tests/input/if_expression_1.txt index fb454b4f277..7de745ef4c7 100644 --- a/translator/src/test/kotlin/tests/input/if_expression_1.txt +++ b/translator/src/test/kotlin/tests/input/if_expression_1.txt @@ -1,2 +1,4 @@ if_expression_1_Int(56) == 2323 if_expression_1_Int(-58) == 678934 +if_expression_1_variable_Int(100) == 5 +if_expression_1_variable_Int(-100) == 7 diff --git a/translator/src/test/kotlin/tests/kotlin/if_expression_1.kt b/translator/src/test/kotlin/tests/kotlin/if_expression_1.kt index 7513e688fd8..f54b5975929 100644 --- a/translator/src/test/kotlin/tests/kotlin/if_expression_1.kt +++ b/translator/src/test/kotlin/tests/kotlin/if_expression_1.kt @@ -1,3 +1,9 @@ fun if_expression_1(x: Int): Int{ return if (x > 55) 2323 else 678934 +} + +fun if_expression_1_variable(x: Int): Int{ + val first = 5 + val second = 7 + return if (x > 55) first else second } \ No newline at end of file