[stdlib] Don't pass an arena to JS math functions
This commit is contained in:
@@ -42,12 +42,10 @@ external public fun pushIntToArena(arena: Arena, value: Int)
|
||||
|
||||
const val upperWord = 0xffffffff.toLong() shl 32
|
||||
|
||||
@Used
|
||||
@ExportForCppRuntime
|
||||
fun doubleUpper(value: Double): Int =
|
||||
((value.toBits() and upperWord) ushr 32) .toInt()
|
||||
|
||||
@Used
|
||||
@ExportForCppRuntime
|
||||
fun doubleLower(value: Double): Int =
|
||||
(value.toBits() and 0x00000000ffffffff) .toInt()
|
||||
@@ -144,7 +142,3 @@ object ArenaManager {
|
||||
val globalArena = allocateArena()
|
||||
var currentArena = globalArena
|
||||
}
|
||||
|
||||
@Used
|
||||
@ExportForCppRuntime("Konan_js_getCurrentArena")
|
||||
internal fun getCurrentArena() = ArenaManager.currentArena
|
||||
+7
-16
@@ -53,27 +53,18 @@ task clean {
|
||||
}
|
||||
|
||||
task generateJsMath {
|
||||
dependsOn ':dist'
|
||||
dependsOn ':distCompiler'
|
||||
doLast {
|
||||
def jsinteropScript = isWindows() ? "jsinterop.bat" : "jsinterop"
|
||||
def jsinterop = "$distDir/bin/$jsinteropScript"
|
||||
def targetDir = "$buildDir/generated"
|
||||
def firstLine = true
|
||||
"$jsinterop -pkg kotlinx.interop.wasm.math -o $targetDir/math -target wasm32".execute().waitFor()
|
||||
copy {
|
||||
from("$targetDir/math-build/natives/js_stubs.js")
|
||||
into('src/main/js')
|
||||
rename { "math.js" }
|
||||
filter { line ->
|
||||
if (firstLine) {
|
||||
firstLine = false
|
||||
return "// NOTE: THIS FILE IS AUTO-GENERATED!\n" +
|
||||
"// Run ':runtime:generateJsMath' to re-generate it.\n\n" +
|
||||
"$line"
|
||||
} else {
|
||||
return line
|
||||
}
|
||||
}
|
||||
def generated = file("$targetDir/math-build/natives/js_stubs.js")
|
||||
def mathJs = file('src/main/js/math.js')
|
||||
mathJs.write("// NOTE: THIS FILE IS AUTO-GENERATED!\n" +
|
||||
"// Run ':runtime:generateJsMath' to re-generate it.\n\n")
|
||||
generated.withReader {
|
||||
mathJs.append(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,43 +16,47 @@
|
||||
|
||||
#include "Types.h"
|
||||
|
||||
typedef KInt Arena;
|
||||
typedef KInt Object;
|
||||
typedef KInt Pointer;
|
||||
|
||||
#ifndef KONAN_WASM
|
||||
|
||||
extern "C" {
|
||||
|
||||
// These functions are implemented in JS file for WASM and are not available on other platforms.
|
||||
RUNTIME_NORETURN JS::Arena Konan_js_allocateArena() {
|
||||
RUNTIME_NORETURN Arena Konan_js_allocateArena() {
|
||||
RuntimeAssert(false, "JavaScript interop is disabled");
|
||||
}
|
||||
|
||||
RUNTIME_NORETURN void Konan_js_freeArena(JS::Arena arena) {
|
||||
RUNTIME_NORETURN void Konan_js_freeArena(Arena arena) {
|
||||
RuntimeAssert(false, "JavaScript interop is disabled");
|
||||
}
|
||||
|
||||
RUNTIME_NORETURN void Konan_js_pushIntToArena(JS::Arena arena, KInt value) {
|
||||
RUNTIME_NORETURN void Konan_js_pushIntToArena(Arena arena, KInt value) {
|
||||
RuntimeAssert(false, "JavaScript interop is disabled");
|
||||
}
|
||||
|
||||
RUNTIME_NORETURN KInt Konan_js_getProperty(JS::Arena arena,
|
||||
JS::Object obj,
|
||||
JS::Pointer propertyPtr,
|
||||
RUNTIME_NORETURN KInt Konan_js_getProperty(Arena arena,
|
||||
Object obj,
|
||||
Pointer propertyPtr,
|
||||
KInt propertyLen) {
|
||||
RuntimeAssert(false, "JavaScript interop is disabled");
|
||||
}
|
||||
|
||||
RUNTIME_NORETURN void Konan_js_setFunction(JS::Arena arena,
|
||||
JS::Object obj,
|
||||
JS::Pointer propertyName,
|
||||
RUNTIME_NORETURN void Konan_js_setFunction(Arena arena,
|
||||
Object obj,
|
||||
Pointer propertyName,
|
||||
KInt propertyLength,
|
||||
KInt function) {
|
||||
RuntimeAssert(false, "JavaScript interop is disabled");
|
||||
}
|
||||
|
||||
RUNTIME_NORETURN void Konan_js_setString(JS::Arena arena,
|
||||
JS::Object obj,
|
||||
JS::Pointer propertyName,
|
||||
RUNTIME_NORETURN void Konan_js_setString(Arena arena,
|
||||
Object obj,
|
||||
Pointer propertyName,
|
||||
KInt propertyLength,
|
||||
JS::Pointer stringPtr,
|
||||
Pointer stringPtr,
|
||||
KInt stringLength) {
|
||||
RuntimeAssert(false, "JavaScript interop is disabled");
|
||||
}
|
||||
|
||||
@@ -245,17 +245,16 @@ KLong Kotlin_math_absl(KLong x) { return llabs(x); }
|
||||
|
||||
#else // KONAN_WASM defined. Use JS math implementation.
|
||||
|
||||
#define RETURN_RESULT_OF_JS_CALL(call, doubleArg) { \
|
||||
call(doubleUpper(doubleArg), doubleLower(doubleArg), Konan_js_getCurrentArena()); \
|
||||
return ReturnSlot_getDouble(); \
|
||||
#define RETURN_RESULT_OF_JS_CALL(call, doubleArg) { \
|
||||
call(doubleUpper(doubleArg), doubleLower(doubleArg)); \
|
||||
return ReturnSlot_getDouble(); \
|
||||
}
|
||||
|
||||
#define RETURN_RESULT_OF_JS_CALL2(call, doubleArg1, doubleArg2) { \
|
||||
call(doubleUpper(doubleArg1), \
|
||||
doubleLower(doubleArg1), \
|
||||
doubleUpper(doubleArg2), \
|
||||
doubleLower(doubleArg2), \
|
||||
Konan_js_getCurrentArena()); \
|
||||
doubleLower(doubleArg2)); \
|
||||
return ReturnSlot_getDouble(); \
|
||||
}
|
||||
|
||||
|
||||
@@ -23,44 +23,42 @@
|
||||
|
||||
extern "C" {
|
||||
|
||||
JS::Arena Konan_js_getCurrentArena();
|
||||
|
||||
// Bridges for JS math.
|
||||
void knjs__Math_abs(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_acos(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_acosh(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_asin(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_asinh(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_atan(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_atan2(KInt yUpper, KInt yLower, KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_atanh(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_cbrt(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_ceil(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_clz32(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_cos(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_cosh(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_exp(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_expm1(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_floor(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_fround(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_log(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_log1p(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_log10(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_log2(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_round(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_sign(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_sin(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_sinh(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_sqrt(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_tan(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_tanh(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_trunc(KInt xUpper, KInt xLower, JS::Arena resultArena);
|
||||
void knjs__Math_abs(KInt xUpper, KInt xLower);
|
||||
void knjs__Math_acos(KInt xUpper, KInt xLower);
|
||||
void knjs__Math_acosh(KInt xUpper, KInt xLower);
|
||||
void knjs__Math_asin(KInt xUpper, KInt xLower);
|
||||
void knjs__Math_asinh(KInt xUpper, KInt xLower);
|
||||
void knjs__Math_atan(KInt xUpper, KInt xLower);
|
||||
void knjs__Math_atan2(KInt yUpper, KInt yLower, KInt xUpper, KInt xLower);
|
||||
void knjs__Math_atanh(KInt xUpper, KInt xLower);
|
||||
void knjs__Math_cbrt(KInt xUpper, KInt xLower);
|
||||
void knjs__Math_ceil(KInt xUpper, KInt xLower);
|
||||
void knjs__Math_clz32(KInt xUpper, KInt xLower);
|
||||
void knjs__Math_cos(KInt xUpper, KInt xLower);
|
||||
void knjs__Math_cosh(KInt xUpper, KInt xLower);
|
||||
void knjs__Math_exp(KInt xUpper, KInt xLower);
|
||||
void knjs__Math_expm1(KInt xUpper, KInt xLower);
|
||||
void knjs__Math_floor(KInt xUpper, KInt xLower);
|
||||
void knjs__Math_fround(KInt xUpper, KInt xLower);
|
||||
void knjs__Math_log(KInt xUpper, KInt xLower);
|
||||
void knjs__Math_log1p(KInt xUpper, KInt xLower);
|
||||
void knjs__Math_log10(KInt xUpper, KInt xLower);
|
||||
void knjs__Math_log2(KInt xUpper, KInt xLower);
|
||||
void knjs__Math_round(KInt xUpper, KInt xLower);
|
||||
void knjs__Math_sign(KInt xUpper, KInt xLower);
|
||||
void knjs__Math_sin(KInt xUpper, KInt xLower);
|
||||
void knjs__Math_sinh(KInt xUpper, KInt xLower);
|
||||
void knjs__Math_sqrt(KInt xUpper, KInt xLower);
|
||||
void knjs__Math_tan(KInt xUpper, KInt xLower);
|
||||
void knjs__Math_tanh(KInt xUpper, KInt xLower);
|
||||
void knjs__Math_trunc(KInt xUpper, KInt xLower);
|
||||
|
||||
void knjs__Math_hypot(KInt xUpper, KInt xLower, KInt yUpper, KInt yLower, JS::Arena resultArena);
|
||||
void knjs__Math_max(KInt xUpper, KInt xLower, KInt yUpper, KInt yLower, JS::Arena resultArena);
|
||||
void knjs__Math_min(KInt xUpper, KInt xLower, KInt yUpper, KInt yLower, JS::Arena resultArena);
|
||||
void knjs__Math_hypot(KInt xUpper, KInt xLower, KInt yUpper, KInt yLower);
|
||||
void knjs__Math_max(KInt xUpper, KInt xLower, KInt yUpper, KInt yLower);
|
||||
void knjs__Math_min(KInt xUpper, KInt xLower, KInt yUpper, KInt yLower);
|
||||
|
||||
void knjs__Math_pow(KInt xUpper, KInt xLower, KInt yUpper, KInt yLower, JS::Arena resultArena);
|
||||
void knjs__Math_pow(KInt xUpper, KInt xLower, KInt yUpper, KInt yLower);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -50,12 +50,6 @@ typedef ObjHeader* KRef;
|
||||
typedef const ObjHeader* KConstRef;
|
||||
typedef const ArrayHeader* KString;
|
||||
|
||||
namespace JS {
|
||||
typedef KInt Arena;
|
||||
typedef KInt Object;
|
||||
typedef KInt Pointer;
|
||||
}
|
||||
|
||||
// Definitions of STL classes used inside Konan runtime.
|
||||
typedef std::basic_string<char, std::char_traits<char>,
|
||||
KonanAllocator<char>> KStdString;
|
||||
|
||||
Reference in New Issue
Block a user