From dd86823480a9e2faeef4605319f708fbb0b2fe38 Mon Sep 17 00:00:00 2001 From: Michael Nedzelsky Date: Thu, 6 Nov 2014 14:31:49 +0300 Subject: [PATCH] JS backend: compile some builtins to builtins.js instead of stdlib --- build.xml | 12 +++++++++++- .../jetbrains/k2js/config/LibrarySourcesConfig.java | 2 ++ .../org/jetbrains/k2js/test/rhino/RhinoUtils.java | 6 ++++-- .../k2js/translate/context/StaticContext.java | 4 ++-- js/js.translator/testData/kotlin_lib.js | 12 ++++++------ js/js.translator/testData/maps.js | 12 ++++++------ 6 files changed, 31 insertions(+), 17 deletions(-) diff --git a/build.xml b/build.xml index 731d283ff24..2ad16c286e4 100644 --- a/build.xml +++ b/build.xml @@ -218,12 +218,18 @@ + - + + + + + + @@ -264,6 +270,10 @@ + + + + diff --git a/js/js.frontend/src/org/jetbrains/k2js/config/LibrarySourcesConfig.java b/js/js.frontend/src/org/jetbrains/k2js/config/LibrarySourcesConfig.java index c2785205cf2..c472605dedc 100644 --- a/js/js.frontend/src/org/jetbrains/k2js/config/LibrarySourcesConfig.java +++ b/js/js.frontend/src/org/jetbrains/k2js/config/LibrarySourcesConfig.java @@ -44,6 +44,8 @@ public class LibrarySourcesConfig extends Config { @NotNull private static final Logger LOG = Logger.getInstance("#org.jetbrains.k2js.config.LibrarySourcesConfig"); public static final String STDLIB_JS_MODULE_NAME = "stdlib"; + public static final String BUILTINS_JS_MODULE_NAME = "builtins"; + public static final String BUILTINS_JS_FILE_NAME = BUILTINS_JS_MODULE_NAME + ".js"; public static final String STDLIB_JS_FILE_NAME = STDLIB_JS_MODULE_NAME + ".js"; @NotNull diff --git a/js/js.tests/test/org/jetbrains/k2js/test/rhino/RhinoUtils.java b/js/js.tests/test/org/jetbrains/k2js/test/rhino/RhinoUtils.java index 7afb79a79f3..12a581a24d7 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/rhino/RhinoUtils.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/rhino/RhinoUtils.java @@ -33,8 +33,7 @@ import java.util.Map; import java.util.Set; import static org.jetbrains.jet.utils.UtilsPackage.rethrow; -import static org.jetbrains.k2js.config.LibrarySourcesConfig.STDLIB_JS_FILE_NAME; -import static org.jetbrains.k2js.config.LibrarySourcesConfig.STDLIB_JS_MODULE_NAME; +import static org.jetbrains.k2js.config.LibrarySourcesConfig.*; import static org.jetbrains.k2js.test.BasicTest.DIST_DIR_PATH; import static org.jetbrains.k2js.test.BasicTest.TEST_DATA_DIR_PATH; @@ -178,9 +177,11 @@ public final class RhinoUtils { NativeObject modules = (NativeObject) kotlin.get("modules"); assert modules != null; NativeObject stdlibModule = (NativeObject) modules.get(STDLIB_JS_MODULE_NAME); + NativeObject builtinsModule = (NativeObject) modules.get(BUILTINS_JS_MODULE_NAME); NativeObject newModules = new NativeObject(); newModules.put(STDLIB_JS_MODULE_NAME, newModules, stdlibModule); + newModules.put(BUILTINS_JS_MODULE_NAME, newModules, builtinsModule); kotlin.put("modules", kotlin, newModules); } @@ -196,6 +197,7 @@ public final class RhinoUtils { runFileWithRhino(TEST_DATA_DIR_PATH + "maps.js", context, scope); runFileWithRhino(TEST_DATA_DIR_PATH + "long.js", context, scope); runFileWithRhino(DIST_DIR_PATH + STDLIB_JS_FILE_NAME, context, scope); + runFileWithRhino(DIST_DIR_PATH + BUILTINS_JS_FILE_NAME, context, scope); //runFileWithRhino(pathToTestFilesRoot() + "jshint.js", context, scope); for (String jsLibrary : jsLibraries) { runFileWithRhino(jsLibrary, context, scope); diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/context/StaticContext.java b/js/js.translator/src/org/jetbrains/k2js/translate/context/StaticContext.java index 2c4d7c926d7..16ab9e587e3 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/context/StaticContext.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/context/StaticContext.java @@ -39,7 +39,7 @@ import org.jetbrains.k2js.translate.utils.JsAstUtils; import java.util.Map; import static org.jetbrains.jet.lang.resolve.DescriptorToSourceUtils.descriptorToDeclaration; -import static org.jetbrains.k2js.config.LibrarySourcesConfig.STDLIB_JS_MODULE_NAME; +import static org.jetbrains.k2js.config.LibrarySourcesConfig.BUILTINS_JS_MODULE_NAME; import static org.jetbrains.k2js.translate.utils.AnnotationsUtils.*; import static org.jetbrains.k2js.translate.utils.JsDescriptorUtils.*; import static org.jetbrains.k2js.translate.utils.ManglingUtils.getMangledName; @@ -468,7 +468,7 @@ public final class StaticContext { } private String getExternalModuleName(DeclarationDescriptor descriptor) { - if (isBuiltin(descriptor)) return STDLIB_JS_MODULE_NAME; + if (isBuiltin(descriptor)) return BUILTINS_JS_MODULE_NAME; PsiElement element = descriptorToDeclaration(descriptor); if (element == null && descriptor instanceof PropertyAccessorDescriptor) { diff --git a/js/js.translator/testData/kotlin_lib.js b/js/js.translator/testData/kotlin_lib.js index d4847042840..2f473b0d701 100644 --- a/js/js.translator/testData/kotlin_lib.js +++ b/js/js.translator/testData/kotlin_lib.js @@ -236,7 +236,7 @@ */ lazyInitClasses.ArrayIterator = Kotlin.createClass( function () { - return [Kotlin.modules['stdlib'].kotlin.MutableIterator]; + return [Kotlin.modules['builtins'].kotlin.MutableIterator]; }, /** @constructs */ function (array) { @@ -268,7 +268,7 @@ */ lazyInitClasses.ListIterator = Kotlin.createClass( function () { - return [Kotlin.modules['stdlib'].kotlin.Iterator]; + return [Kotlin.modules['builtins'].kotlin.Iterator]; }, /** @constructs */ function (list) { @@ -315,7 +315,7 @@ lazyInitClasses.AbstractCollection = Kotlin.createClass( function () { - return [Kotlin.modules['stdlib'].kotlin.MutableCollection]; + return [Kotlin.modules['builtins'].kotlin.MutableCollection]; }, null, { addAll_4fm7v2$: function (collection) { var modified = false; @@ -404,7 +404,7 @@ */ lazyInitClasses.AbstractList = Kotlin.createClass( function () { - return [Kotlin.modules['stdlib'].kotlin.MutableList, Kotlin.AbstractCollection]; + return [Kotlin.modules['builtins'].kotlin.MutableList, Kotlin.AbstractCollection]; }, null, { iterator: function () { return new Kotlin.ListIterator(this); @@ -623,7 +623,7 @@ lazyInitClasses.RangeIterator = Kotlin.createClass( function () { - return [Kotlin.modules['stdlib'].kotlin.Iterator]; + return [Kotlin.modules['builtins'].kotlin.Iterator]; }, function (start, end, increment) { this.start = start; @@ -698,7 +698,7 @@ lazyInitClasses.LongRangeIterator = Kotlin.createClass( function () { - return [Kotlin.modules['stdlib'].kotlin.Iterator]; + return [Kotlin.modules['builtins'].kotlin.Iterator]; }, function (start, end, increment) { this.start = start; diff --git a/js/js.translator/testData/maps.js b/js/js.translator/testData/maps.js index 5d78144925c..d2daa0b2929 100644 --- a/js/js.translator/testData/maps.js +++ b/js/js.translator/testData/maps.js @@ -417,7 +417,7 @@ lazyInitClasses.HashMap = Kotlin.createClass( function () { - return [Kotlin.modules['stdlib'].kotlin.MutableMap]; + return [Kotlin.modules['builtins'].kotlin.MutableMap]; }, function () { Kotlin.HashTable.call(this); @@ -437,7 +437,7 @@ */ lazyInitClasses.PrimitiveHashMapValuesIterator = Kotlin.createClass( function () { - return [Kotlin.modules['stdlib'].kotlin.Iterator]; + return [Kotlin.modules['builtins'].kotlin.Iterator]; }, function (map, keys) { this.map = map; @@ -463,7 +463,7 @@ */ lazyInitClasses.PrimitiveHashMapValues = Kotlin.createClass( function () { - return [Kotlin.modules['stdlib'].kotlin.Collection]; + return [Kotlin.modules['builtins'].kotlin.Collection]; }, function (map) { this.map = map; @@ -675,7 +675,7 @@ lazyInitClasses.LinkedHashSet = Kotlin.createClass( function () { - return [Kotlin.modules['stdlib'].kotlin.MutableSet, Kotlin.HashSet]; + return [Kotlin.modules['builtins'].kotlin.MutableSet, Kotlin.HashSet]; }, /** @constructs */ function () { @@ -713,7 +713,7 @@ */ lazyInitClasses.SetIterator = Kotlin.createClass( function () { - return [Kotlin.modules['stdlib'].kotlin.MutableIterator]; + return [Kotlin.modules['builtins'].kotlin.MutableIterator]; }, function (set) { this.set = set; @@ -971,7 +971,7 @@ lazyInitClasses.HashSet = Kotlin.createClass( function () { - return [Kotlin.modules['stdlib'].kotlin.MutableSet, Kotlin.AbstractCollection]; + return [Kotlin.modules['builtins'].kotlin.MutableSet, Kotlin.AbstractCollection]; }, function () { HashSet.call(this);