Refact stdlib generator, add support for different backends

[JS IR BE] Runtime fixes
 * Do not generate external declarations for IR BE
 * Move `arrayToString` helper function out of shared JS stdlib
 * Fix arrays type check for IR BE
This commit is contained in:
Roman Artemev
2018-11-12 14:28:47 +03:00
committed by romanart
parent 05b1a99022
commit c5922bf74b
23 changed files with 1847 additions and 68 deletions
@@ -65,6 +65,10 @@ private val runtimeSources = listOfKtFilesFrom(
"libraries/stdlib/js/src/kotlin/currentBeMisc.kt",
// IR BE has its own generated sources
"libraries/stdlib/js/src/generated",
"libraries/stdlib/js/src/kotlin/collectionsExternal.kt",
// Full version is defined in stdlib
// This file is useful for smaller subset of runtime sources
"libraries/stdlib/js/irRuntime/rangeExtensions.kt",
@@ -167,6 +167,7 @@ object NashornIrJsTestChecker : AbstractNashornJsTestChecker() {
listOf(
BasicBoxTest.TEST_DATA_DIR_PATH + "nashorn-polyfills.js",
"libraries/stdlib/js/src/js/polyfills.js",
"js/js.translator/testData/out/irBox/testRuntime.js"
).forEach(engine::loadFile)
@@ -7558,6 +7558,11 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest {
runTest("js/js.translator/testData/box/standardClasses/arraySize.kt");
}
@TestMetadata("arraySort.kt")
public void testArraySort() throws Exception {
runTest("js/js.translator/testData/box/standardClasses/arraySort.kt");
}
@TestMetadata("arraysIterator.kt")
public void testArraysIterator() throws Exception {
runTest("js/js.translator/testData/box/standardClasses/arraysIterator.kt");
@@ -7558,6 +7558,11 @@ public class IrBoxJsTestGenerated extends AbstractIrBoxJsTest {
runTest("js/js.translator/testData/box/standardClasses/arraySize.kt");
}
@TestMetadata("arraySort.kt")
public void testArraySort() throws Exception {
runTest("js/js.translator/testData/box/standardClasses/arraySort.kt");
}
@TestMetadata("arraysIterator.kt")
public void testArraysIterator() throws Exception {
runTest("js/js.translator/testData/box/standardClasses/arraysIterator.kt");
@@ -0,0 +1,20 @@
// EXPECTED_REACHABLE_NODES: 1284
package foo
fun test(actual: DoubleArray, expect: DoubleArray): String {
for (index in 0 until expect.size) {
val expectedElem: Any = expect[index]
val actualElem: Any = actual[index]
if (expectedElem != actualElem) {
return "Content at index $index does not match: $expectedElem != $actualElem"
}
}
return "OK"
}
fun box(): String {
val array = doubleArrayOf(Double.NaN, Double.POSITIVE_INFINITY, Double.NaN, 1.0, Double.NaN, +0.0, Double.NaN, -0.0, Double.NaN, -1.0, Double.NaN, Double.NEGATIVE_INFINITY)
array.sort()
return test(array, doubleArrayOf(Double.NEGATIVE_INFINITY, -1.0, -0.0, +0.0, 1.0, Double.POSITIVE_INFINITY, Double.NaN, Double.NaN, Double.NaN, Double.NaN, Double.NaN, Double.NaN))
}