diff --git a/translator/src/main/kotlin/main.kt b/translator/src/main/kotlin/main.kt index 92c79a6085e..74d15cdca22 100644 --- a/translator/src/main/kotlin/main.kt +++ b/translator/src/main/kotlin/main.kt @@ -10,7 +10,7 @@ fun main(args: Array) { } val disposer = Disposer.newDisposable() - val state = parseAndAnalyze(args.asList(), disposer, arm = true) + val state = parseAndAnalyze(args.asList(), disposer, arm = false) val files = state.environment.getSourceFiles() if (files.isEmpty()) { diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMBuilder.kt b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMBuilder.kt index 73c29b21096..17ec8db3d23 100644 --- a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMBuilder.kt +++ b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/LLVMBuilder.kt @@ -91,7 +91,7 @@ class LLVMBuilder(val arm: Boolean) { storeVariable(result, secondNativeOp) return result } - else -> addPrimitiveReferenceOperation(referenceName, firstNativeOp, secondNativeOp); + else -> addPrimitiveReferenceOperation(referenceName, firstNativeOp, secondNativeOp) } val resultOp = getNewVariable(llvmExpression.variableType) addAssignment(resultOp, llvmExpression) diff --git a/translator/src/test/kotlin/tests/c/callbacks_1.c b/translator/src/test/kotlin/tests/c/callbacks_1.c new file mode 100644 index 00000000000..2e4fdfd61c0 --- /dev/null +++ b/translator/src/test/kotlin/tests/c/callbacks_1.c @@ -0,0 +1,4 @@ + +int apply_c(int x, int (*foo)(int)) { + return foo(x); +} diff --git a/translator/src/test/kotlin/tests/input/callbacks_1.txt b/translator/src/test/kotlin/tests/input/callbacks_1.txt new file mode 100644 index 00000000000..20e9cb386db --- /dev/null +++ b/translator/src/test/kotlin/tests/input/callbacks_1.txt @@ -0,0 +1,6 @@ +compact_test(1) == 2 +compact_test(3) == 4 +external_test(3) == 2 +external_test(4) == 3 +mixed_test(1) == 4 +mixed_test(9) == 12 diff --git a/translator/src/test/kotlin/tests/input/simple_class_2.txt b/translator/src/test/kotlin/tests/input/simple_class_2.txt new file mode 100644 index 00000000000..8d750f972b4 --- /dev/null +++ b/translator/src/test/kotlin/tests/input/simple_class_2.txt @@ -0,0 +1,2 @@ +change(0) == 1 +change(1) == 2 diff --git a/translator/src/test/kotlin/tests/kotlin/callbacks_1.kt b/translator/src/test/kotlin/tests/kotlin/callbacks_1.kt new file mode 100644 index 00000000000..11d3c98d374 --- /dev/null +++ b/translator/src/test/kotlin/tests/kotlin/callbacks_1.kt @@ -0,0 +1,26 @@ + +external fun apply_c(arg: Int, x: (Int)-> Int): Int + +fun inc(i: Int): Int { + return i + 1 +} + +fun dec(i: Int): Int { + return i - 1 +} + +fun apply(arg: Int, x: (Int) -> Int): Int { + return x(arg) +} + +fun compact_test(x: Int): Int { + return apply(apply(apply(x, ::inc), ::inc), ::dec) +} + +fun external_test(x: Int): Int { + return apply_c(apply_c(apply_c(x, ::dec), ::dec), ::inc) +} + +fun mixed_test(x: Int): Int { + return apply(apply_c(apply(apply_c(apply(x, ::inc), ::inc), ::inc), ::dec), ::inc) +} \ No newline at end of file diff --git a/translator/src/test/kotlin/tests/kotlin/simple_class_2.kt b/translator/src/test/kotlin/tests/kotlin/simple_class_2.kt new file mode 100644 index 00000000000..8679e54c039 --- /dev/null +++ b/translator/src/test/kotlin/tests/kotlin/simple_class_2.kt @@ -0,0 +1,13 @@ + +class MyClass(val b: Int, var c: Int) + +fun change(x: Int): Int { + + val y = MyClass(x, x) + y.c = x + y.c = x + y.c = 1 + y.c = x + 1 + + return y.c +}