JS backend: compile some builtins to builtins.js instead of stdlib

This commit is contained in:
Michael Nedzelsky
2014-11-06 14:31:49 +03:00
parent 5f576c4c05
commit dd86823480
6 changed files with 31 additions and 17 deletions
+11 -1
View File
@@ -218,12 +218,18 @@
</target> </target>
<target name="jslib"> <target name="jslib">
<property name="compiled.builtins.js" value="builtins.js" />
<property name="compiled.stdlib.js" value="stdlib.js" /> <property name="compiled.stdlib.js" value="stdlib.js" />
<property name="stdlib.js.dir" value="${basedir}/js/js.translator/testData" /> <property name="stdlib.js.dir" value="${basedir}/js/js.translator/testData" />
<kotlin2js output="${output}/${compiled.stdlib.js}" noStdlib="true" main="noCall"> <kotlin2js output="${output}/${compiled.builtins.js}" noStdlib="true" main="noCall">
<src> <src>
<fileset refid="kotlin.builtin.files" /> <fileset refid="kotlin.builtin.files" />
</src>
</kotlin2js>
<kotlin2js output="${output}/${compiled.stdlib.js}" noStdlib="true" main="noCall">
<src>
<resources refid="js.lib.files" /> <resources refid="js.lib.files" />
</src> </src>
</kotlin2js> </kotlin2js>
@@ -264,6 +270,10 @@
<file name="long.js"/> <file name="long.js"/>
</sources> </sources>
<sources dir="${output}">
<file name="${compiled.builtins.js}"/>
</sources>
<sources dir="${output}"> <sources dir="${output}">
<file name="${compiled.stdlib.js}"/> <file name="${compiled.stdlib.js}"/>
</sources> </sources>
@@ -44,6 +44,8 @@ public class LibrarySourcesConfig extends Config {
@NotNull @NotNull
private static final Logger LOG = Logger.getInstance("#org.jetbrains.k2js.config.LibrarySourcesConfig"); 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 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"; public static final String STDLIB_JS_FILE_NAME = STDLIB_JS_MODULE_NAME + ".js";
@NotNull @NotNull
@@ -33,8 +33,7 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
import static org.jetbrains.jet.utils.UtilsPackage.rethrow; 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.*;
import static org.jetbrains.k2js.config.LibrarySourcesConfig.STDLIB_JS_MODULE_NAME;
import static org.jetbrains.k2js.test.BasicTest.DIST_DIR_PATH; import static org.jetbrains.k2js.test.BasicTest.DIST_DIR_PATH;
import static org.jetbrains.k2js.test.BasicTest.TEST_DATA_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"); NativeObject modules = (NativeObject) kotlin.get("modules");
assert modules != null; assert modules != null;
NativeObject stdlibModule = (NativeObject) modules.get(STDLIB_JS_MODULE_NAME); NativeObject stdlibModule = (NativeObject) modules.get(STDLIB_JS_MODULE_NAME);
NativeObject builtinsModule = (NativeObject) modules.get(BUILTINS_JS_MODULE_NAME);
NativeObject newModules = new NativeObject(); NativeObject newModules = new NativeObject();
newModules.put(STDLIB_JS_MODULE_NAME, newModules, stdlibModule); newModules.put(STDLIB_JS_MODULE_NAME, newModules, stdlibModule);
newModules.put(BUILTINS_JS_MODULE_NAME, newModules, builtinsModule);
kotlin.put("modules", kotlin, newModules); 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 + "maps.js", context, scope);
runFileWithRhino(TEST_DATA_DIR_PATH + "long.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 + STDLIB_JS_FILE_NAME, context, scope);
runFileWithRhino(DIST_DIR_PATH + BUILTINS_JS_FILE_NAME, context, scope);
//runFileWithRhino(pathToTestFilesRoot() + "jshint.js", context, scope); //runFileWithRhino(pathToTestFilesRoot() + "jshint.js", context, scope);
for (String jsLibrary : jsLibraries) { for (String jsLibrary : jsLibraries) {
runFileWithRhino(jsLibrary, context, scope); runFileWithRhino(jsLibrary, context, scope);
@@ -39,7 +39,7 @@ import org.jetbrains.k2js.translate.utils.JsAstUtils;
import java.util.Map; import java.util.Map;
import static org.jetbrains.jet.lang.resolve.DescriptorToSourceUtils.descriptorToDeclaration; 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.AnnotationsUtils.*;
import static org.jetbrains.k2js.translate.utils.JsDescriptorUtils.*; import static org.jetbrains.k2js.translate.utils.JsDescriptorUtils.*;
import static org.jetbrains.k2js.translate.utils.ManglingUtils.getMangledName; import static org.jetbrains.k2js.translate.utils.ManglingUtils.getMangledName;
@@ -468,7 +468,7 @@ public final class StaticContext {
} }
private String getExternalModuleName(DeclarationDescriptor descriptor) { 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); PsiElement element = descriptorToDeclaration(descriptor);
if (element == null && descriptor instanceof PropertyAccessorDescriptor) { if (element == null && descriptor instanceof PropertyAccessorDescriptor) {
+6 -6
View File
@@ -236,7 +236,7 @@
*/ */
lazyInitClasses.ArrayIterator = Kotlin.createClass( lazyInitClasses.ArrayIterator = Kotlin.createClass(
function () { function () {
return [Kotlin.modules['stdlib'].kotlin.MutableIterator]; return [Kotlin.modules['builtins'].kotlin.MutableIterator];
}, },
/** @constructs */ /** @constructs */
function (array) { function (array) {
@@ -268,7 +268,7 @@
*/ */
lazyInitClasses.ListIterator = Kotlin.createClass( lazyInitClasses.ListIterator = Kotlin.createClass(
function () { function () {
return [Kotlin.modules['stdlib'].kotlin.Iterator]; return [Kotlin.modules['builtins'].kotlin.Iterator];
}, },
/** @constructs */ /** @constructs */
function (list) { function (list) {
@@ -315,7 +315,7 @@
lazyInitClasses.AbstractCollection = Kotlin.createClass( lazyInitClasses.AbstractCollection = Kotlin.createClass(
function () { function () {
return [Kotlin.modules['stdlib'].kotlin.MutableCollection]; return [Kotlin.modules['builtins'].kotlin.MutableCollection];
}, null, { }, null, {
addAll_4fm7v2$: function (collection) { addAll_4fm7v2$: function (collection) {
var modified = false; var modified = false;
@@ -404,7 +404,7 @@
*/ */
lazyInitClasses.AbstractList = Kotlin.createClass( lazyInitClasses.AbstractList = Kotlin.createClass(
function () { function () {
return [Kotlin.modules['stdlib'].kotlin.MutableList, Kotlin.AbstractCollection]; return [Kotlin.modules['builtins'].kotlin.MutableList, Kotlin.AbstractCollection];
}, null, { }, null, {
iterator: function () { iterator: function () {
return new Kotlin.ListIterator(this); return new Kotlin.ListIterator(this);
@@ -623,7 +623,7 @@
lazyInitClasses.RangeIterator = Kotlin.createClass( lazyInitClasses.RangeIterator = Kotlin.createClass(
function () { function () {
return [Kotlin.modules['stdlib'].kotlin.Iterator]; return [Kotlin.modules['builtins'].kotlin.Iterator];
}, },
function (start, end, increment) { function (start, end, increment) {
this.start = start; this.start = start;
@@ -698,7 +698,7 @@
lazyInitClasses.LongRangeIterator = Kotlin.createClass( lazyInitClasses.LongRangeIterator = Kotlin.createClass(
function () { function () {
return [Kotlin.modules['stdlib'].kotlin.Iterator]; return [Kotlin.modules['builtins'].kotlin.Iterator];
}, },
function (start, end, increment) { function (start, end, increment) {
this.start = start; this.start = start;
+6 -6
View File
@@ -417,7 +417,7 @@
lazyInitClasses.HashMap = Kotlin.createClass( lazyInitClasses.HashMap = Kotlin.createClass(
function () { function () {
return [Kotlin.modules['stdlib'].kotlin.MutableMap]; return [Kotlin.modules['builtins'].kotlin.MutableMap];
}, },
function () { function () {
Kotlin.HashTable.call(this); Kotlin.HashTable.call(this);
@@ -437,7 +437,7 @@
*/ */
lazyInitClasses.PrimitiveHashMapValuesIterator = Kotlin.createClass( lazyInitClasses.PrimitiveHashMapValuesIterator = Kotlin.createClass(
function () { function () {
return [Kotlin.modules['stdlib'].kotlin.Iterator]; return [Kotlin.modules['builtins'].kotlin.Iterator];
}, },
function (map, keys) { function (map, keys) {
this.map = map; this.map = map;
@@ -463,7 +463,7 @@
*/ */
lazyInitClasses.PrimitiveHashMapValues = Kotlin.createClass( lazyInitClasses.PrimitiveHashMapValues = Kotlin.createClass(
function () { function () {
return [Kotlin.modules['stdlib'].kotlin.Collection]; return [Kotlin.modules['builtins'].kotlin.Collection];
}, },
function (map) { function (map) {
this.map = map; this.map = map;
@@ -675,7 +675,7 @@
lazyInitClasses.LinkedHashSet = Kotlin.createClass( lazyInitClasses.LinkedHashSet = Kotlin.createClass(
function () { function () {
return [Kotlin.modules['stdlib'].kotlin.MutableSet, Kotlin.HashSet]; return [Kotlin.modules['builtins'].kotlin.MutableSet, Kotlin.HashSet];
}, },
/** @constructs */ /** @constructs */
function () { function () {
@@ -713,7 +713,7 @@
*/ */
lazyInitClasses.SetIterator = Kotlin.createClass( lazyInitClasses.SetIterator = Kotlin.createClass(
function () { function () {
return [Kotlin.modules['stdlib'].kotlin.MutableIterator]; return [Kotlin.modules['builtins'].kotlin.MutableIterator];
}, },
function (set) { function (set) {
this.set = set; this.set = set;
@@ -971,7 +971,7 @@
lazyInitClasses.HashSet = Kotlin.createClass( lazyInitClasses.HashSet = Kotlin.createClass(
function () { function () {
return [Kotlin.modules['stdlib'].kotlin.MutableSet, Kotlin.AbstractCollection]; return [Kotlin.modules['builtins'].kotlin.MutableSet, Kotlin.AbstractCollection];
}, },
function () { function () {
HashSet.call(this); HashSet.call(this);