diff --git a/backend.native/tests/build.gradle b/backend.native/tests/build.gradle index 957df485826..1778c3b8039 100644 --- a/backend.native/tests/build.gradle +++ b/backend.native/tests/build.gradle @@ -142,6 +142,14 @@ task sum (type:UnitKonanTest) { source = "codegen/function/sum.kt" } +task method_call(type: UnitKonanTest) { + source = "codegen/object/method_call.kt" +} + +task fields(type: UnitKonanTest) { + source = "codegen/object/fields.kt" +} + /*task objectInitialization(type: UnitKonanTest) { source = "codegen/object/initialization.kt" }*/ diff --git a/backend.native/tests/codegen/object/fields-test.c b/backend.native/tests/codegen/object/fields-test.c new file mode 100644 index 00000000000..59eb7da084f --- /dev/null +++ b/backend.native/tests/codegen/object/fields-test.c @@ -0,0 +1,12 @@ +extern void *resolve_symbol(const char*); + +int +run_test() { + int (*globalTest)() = resolve_symbol("kfun:globalTest(Int)"); + int (*getGlobal)() = resolve_symbol("kfun:()"); + + if (getGlobal() != 1) return 1; + if (globalTest(41) != 42) return 1; + if (getGlobal() != 42) return 1; + return 0; +} diff --git a/backend.native/tests/codegen/object/fields.kt b/backend.native/tests/codegen/object/fields.kt index dc9a3f74306..41791818a80 100644 --- a/backend.native/tests/codegen/object/fields.kt +++ b/backend.native/tests/codegen/object/fields.kt @@ -1,6 +1,9 @@ -class fields(a:Int) { - public val b:Int - get() = getB() +private var globalValue = 1 +var global:Int + get() = globalValue + set(value:Int) {globalValue = value} - external fun getB():Int +fun globalTest(i:Int):Int { + global += i + return global } \ No newline at end of file diff --git a/backend.native/tests/codegen/object/method_call-test.c b/backend.native/tests/codegen/object/method_call-test.c new file mode 100644 index 00000000000..eb77e0e1102 --- /dev/null +++ b/backend.native/tests/codegen/object/method_call-test.c @@ -0,0 +1,9 @@ +extern void *resolve_symbol(const char*); + +int +run_test() { + int (*fortyTwo)() = resolve_symbol("kfun:fortyTwo()"); + + if (fortyTwo() != 42) return 1; + return 0; +} diff --git a/backend.native/tests/codegen/object/method_call.kt b/backend.native/tests/codegen/object/method_call.kt new file mode 100644 index 00000000000..a7d7b4d7928 --- /dev/null +++ b/backend.native/tests/codegen/object/method_call.kt @@ -0,0 +1,5 @@ +class A(val a:Int) { + fun foo(i:Int) = a + i +} + +fun fortyTwo() = A(41).foo(1) \ No newline at end of file