From b5f6c2460dc53ae2af1a6867f3e002f2e27a0704 Mon Sep 17 00:00:00 2001 From: Sergey Bogolepov Date: Mon, 5 Feb 2018 14:53:10 +0300 Subject: [PATCH] Added `used` annotaions for functions that are used from JS --- Interop/JsRuntime/src/main/kotlin/jsinterop.kt | 16 ++++++++++++++++ runtime/src/main/cpp/Runtime.h | 6 ++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/Interop/JsRuntime/src/main/kotlin/jsinterop.kt b/Interop/JsRuntime/src/main/kotlin/jsinterop.kt index 7edbe943273..40c3f59d8ad 100644 --- a/Interop/JsRuntime/src/main/kotlin/jsinterop.kt +++ b/Interop/JsRuntime/src/main/kotlin/jsinterop.kt @@ -7,12 +7,20 @@ typealias Arena = Int typealias Object = Int typealias Pointer = Int +/** + * Used annotation is required to preserve functions + * from internalization and DCE + */ + +@Used @SymbolName("Konan_js_allocateArena") external public fun allocateArena(): Arena +@Used @SymbolName("Konan_js_freeArena") external public fun freeArena(arena: Arena) +@Used @SymbolName("Konan_js_pushIntToArena") external public fun pushIntToArena(arena: Arena, value: Int) @@ -24,12 +32,15 @@ fun doubleUpper(value: Double): Int = fun doubleLower(value: Double): Int = (value.toBits() and 0x00000000ffffffff) .toInt() +@Used @SymbolName("ReturnSlot_getDouble") external public fun ReturnSlot_getDouble(): Double +@Used @SymbolName("Kotlin_String_utf16pointer") external public fun stringPointer(message: String): Pointer +@Used @SymbolName("Kotlin_String_utf16length") external public fun stringLengthBytes(message: String): Int @@ -40,6 +51,7 @@ fun wrapFunction(func: KtFunction): Int { return ptr.toInt() // TODO: LP64 unsafe. } +@Used @ExportForCppRuntime("Konan_js_runLambda") fun runLambda(pointer: Int, argumentsArena: Arena, argumentsArenaSize: Int): Int { val arguments = arrayListOf() @@ -75,15 +87,19 @@ open class JsArray(arena: Arena, index: Object): JsValue(arena, index) { get() = this.getInt("length") } +@Used @SymbolName("Konan_js_getInt") external public fun getInt(arena: Arena, obj: Object, propertyPtr: Pointer, propertyLen: Int): Int; +@Used @SymbolName("Konan_js_getProperty") external public fun Konan_js_getProperty(arena: Arena, obj: Object, propertyPtr: Pointer, propertyLen: Int): Int; +@Used @SymbolName("Konan_js_setFunction") external public fun setFunction(arena: Arena, obj: Object, propertyName: Pointer, propertyLength: Int , function: Int) +@Used @SymbolName("Konan_js_setString") external public fun setString(arena: Arena, obj: Object, propertyName: Pointer, propertyLength: Int, stringPtr: Pointer, stringLength: Int ) diff --git a/runtime/src/main/cpp/Runtime.h b/runtime/src/main/cpp/Runtime.h index a097a4f2c6b..e9bf48aeae4 100644 --- a/runtime/src/main/cpp/Runtime.h +++ b/runtime/src/main/cpp/Runtime.h @@ -17,6 +17,8 @@ #ifndef RUNTIME_RUNTIME_H #define RUNTIME_RUNTIME_H +#include "Porting.h" + struct RuntimeState; struct InitNode; @@ -24,8 +26,8 @@ struct InitNode; extern "C" { #endif -void Kotlin_initRuntimeIfNeeded(); -void Kotlin_deinitRuntimeIfNeeded(); +void RUNTIME_USED Kotlin_initRuntimeIfNeeded(); +void RUNTIME_USED Kotlin_deinitRuntimeIfNeeded(); // Appends given node to an initializer list. void AppendToInitializersTail(struct InitNode*);