translator: fix returning variable in if expressions, add IntArray.plus(IntArray)
This commit is contained in:
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user