Introduced support for javascript Math and Kotlin Double to WASM32.

Implemented jsinterop tool for interaction with js math.
This commit is contained in:
Alexander Gorshenev
2017-12-28 12:33:29 +03:00
committed by alexander-gorshenev
parent 1399ac9777
commit f703877160
28 changed files with 990 additions and 187 deletions
@@ -278,13 +278,20 @@ internal open class WasmPlatform(distribution: Distribution)
private fun javaScriptLink(jsFiles: List<String>, executable: String): String {
val linkedJavaScript = File("$executable.js")
val linkerStub = "var konan = { libraries: [] };\n"
val linkerHeader = "var konan = { libraries: [] };\n"
val linkerFooter = """|if (isBrowser()) {
| konan.moduleEntry([]);
|} else {
| konan.moduleEntry(arguments);
|}""".trimMargin()
linkedJavaScript.writeBytes(linkerStub.toByteArray());
linkedJavaScript.writeBytes(linkerHeader.toByteArray());
jsFiles.forEach {
linkedJavaScript.appendBytes(File(it).readBytes())
}
linkedJavaScript.appendBytes(linkerFooter.toByteArray());
return linkedJavaScript.name
}
}
+12
View File
@@ -2370,6 +2370,18 @@ if (isMac()) {
}
}
task jsinterop_math(type: RunStandaloneKonanTest) {
doFirst {
// TODO: We probably need a NativeInteropPlugin for jsinterop?
"jsinterop -pkg kotlinx.interop.wasm.math -o $buildDir/jsmath -target wasm32".execute()
}
disabled = (project.testTarget != 'wasm32')
goldValue = "e = 2.718281828459045, pi = 3.141592653589793, sin(pi) = 1.2246467991473532E-16, sin(pi/2) = 1.0, ln(1) = 0.0, ln(e) = 1.0\n"
source = "jsinterop/math.kt"
flags = ["-r", "$buildDir", "-l", "jsmath"]
}
task produce_dynamic(type: DynamicKonanTest) {
disabled = (project.testTarget != null && project.testTarget != project.hostName)
source = "produce_dynamic/simple/hello.kt"
+16
View File
@@ -0,0 +1,16 @@
import kotlinx.interop.wasm.math.*
import kotlinx.wasm.jsinterop.*
fun main(args: Array<String>) {
val e = Math.E
val pi = Math.PI
val sin_pi = Math.sin(pi)
val sin_pi_2 = Math.sin(pi/2)
val ln_1 = Math.log(1.0)
val ln_e = Math.log(e)
println("e = $e, pi = $pi, sin(pi) = $sin_pi, sin(pi/2) = $sin_pi_2, ln(1) = $ln_1, ln(e) = $ln_e")
}