JS backend: compile primitive iterators from builtins as part of stdlib.

This commit is contained in:
Zalim Bashorov
2014-10-09 12:48:19 +04:00
parent ecb955f5b3
commit ae39524a95
5 changed files with 32 additions and 0 deletions
+1
View File
@@ -222,6 +222,7 @@
<kotlin2js output="${output}/${compiled.stdlib.js}" main="noCall">
<src>
<fileset refid="kotlin.builtin.files" />
<resources refid="js.lib.files" />
</src>
</kotlin2js>
@@ -87,6 +87,10 @@ public final class ClassInheritanceTest extends SingleFileTranslationTest {
public void testWithInitializeMethod() throws Exception {
checkFooBoxIsOk();
}
public void testInheritFromCharIterator() throws Exception {
checkFooBoxIsOk();
}
}
@@ -39,6 +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.translate.utils.AnnotationsUtils.*;
import static org.jetbrains.k2js.translate.utils.JsDescriptorUtils.*;
import static org.jetbrains.k2js.translate.utils.ManglingUtils.getMangledName;
@@ -467,6 +468,8 @@ public final class StaticContext {
}
private String getExternalModuleName(DeclarationDescriptor descriptor) {
if (isBuiltin(descriptor)) return STDLIB_JS_MODULE_NAME;
PsiElement element = descriptorToDeclaration(descriptor);
if (element == null && descriptor instanceof PropertyAccessorDescriptor) {
element = descriptorToDeclaration(((PropertyAccessorDescriptor) descriptor).getCorrespondingProperty());
@@ -0,0 +1,19 @@
package foo
class MyCharIterator : CharIterator() {
val data = array('O', 'K')
var i = 0
override fun hasNext(): Boolean = i < data.size
override fun nextChar(): Char = data[i++]
}
fun box(): String {
var r = ""
for (v in MyCharIterator()) {
r += v
}
return r
}
+5
View File
@@ -1,4 +1,9 @@
<project>
<fileset id="kotlin.builtin.files" dir="${basedir}/core/builtins/src">
<include name="kotlin/Iterators.kt"/>
<include name="kotlin/Range.kt"/>
</fileset>
<union id="js.lib.files">
<fileset dir="${basedir}/js/js.libraries/src">
<include name="**/*.kt" />