| /* | |
| * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. | |
| * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. | |
| */ | |
| // KT-86026 TODO: Rework testdata to move functions/globals definitions from .def/.h into separate source files | |
| // TARGET_BACKEND: NATIVE | |
| // WITH_PLATFORM_LIBS | |
| // MODULE: lib1 | |
| // FILE: lib1.def | |
| language=Objective-C | |
| headers=lib1.h | |
| // FILE: lib1.h | |
| @class Foo; | |
| @protocol Bar; | |
| struct Baz; | |
| // MODULE: lib2(lib1) | |
| // FILE: lib2.def | |
| language=Objective-C | |
| headers=lib2.h | |
| // FILE: lib2.h | |
| #import "../lib1/lib1.h" | |
| Foo* createFoo() { | |
| return 0; | |
| } | |
| id<Bar> createBar() { | |
| return 0; | |
| } | |
| struct Baz* createBaz() { | |
| return 0; | |
| } | |
| // MODULE: main(lib1, lib2) | |
| // FILE: main.kt | |
| import kotlinx.cinterop.CPointer | |
| import lib1.* | |
| import lib2.* | |
| import cnames.structs.Baz | |
| import objcnames.classes.Foo | |
| import objcnames.protocols.BarProtocol | |
| @OptIn(kotlinx.cinterop.ExperimentalForeignApi::class) | |
| fun box(): String { | |
| val foo: Foo? = createFoo() | |
| if (foo !== null) return "FAIL 1" | |
| val bar: BarProtocol? = createBar() | |
| if (bar !== null) return "FAIL 2" | |
| val baz: CPointer<Baz>? = createBaz() | |
| if (baz !== null) return "FAIL 3" | |
| return "OK" | |
| } |