diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/facade/K2JSTranslator.java b/js/js.translator/src/org/jetbrains/kotlin/js/facade/K2JSTranslator.java index 72fbd880593..bc750f3c9e2 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/facade/K2JSTranslator.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/facade/K2JSTranslator.java @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.js.inline.clean.RemoveUnusedImportsKt; import org.jetbrains.kotlin.js.inline.clean.ResolveTemporaryNamesKt; import org.jetbrains.kotlin.js.translate.general.AstGenerationResult; import org.jetbrains.kotlin.js.translate.general.Translation; +import org.jetbrains.kotlin.js.translate.utils.ExpandIsCallsKt; import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus; import org.jetbrains.kotlin.psi.KtFile; import org.jetbrains.kotlin.resolve.BindingTrace; @@ -93,7 +94,7 @@ public final class K2JSTranslator { ProgressIndicatorAndCompilationCanceledStatus.checkCanceled(); if (hasError(diagnostics)) return new TranslationResult.Fail(diagnostics); - //expandIsCalls(program, context); + ExpandIsCallsKt.expandIsCalls(translationResult.getFragments()); ProgressIndicatorAndCompilationCanceledStatus.checkCanceled(); List importedModules = new ArrayList<>(); diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/Namer.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/Namer.java index 0725ef68695..26d73003077 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/Namer.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/Namer.java @@ -201,21 +201,16 @@ public final class Namer { @NotNull private final JsExpression callSetProperty; - @NotNull - private final JsName isTypeName; - private Namer(@NotNull JsScope rootScope) { kotlinScope = new JsObjectScope(rootScope, "Kotlin standard object"); callGetProperty = kotlin("callGetter"); callSetProperty = kotlin("callSetter"); - - isTypeName = kotlinScope.declareName("isType"); } // TODO: get rid of this function @NotNull - public static String getStableMangledNameForDescriptor(@NotNull ClassDescriptor descriptor, @NotNull String functionName) { + private static String getStableMangledNameForDescriptor(@NotNull ClassDescriptor descriptor, @NotNull String functionName) { Collection functions = descriptor.getDefaultType().getMemberScope().getContributedFunctions( Name.identifier(functionName), NoLookupLocation.FROM_BACKEND); assert functions.size() == 1 : "Can't select a single function: " + functionName + " in " + descriptor; @@ -318,8 +313,8 @@ public final class Namer { } @NotNull - public JsExpression isInstanceOf(@NotNull JsExpression instance, @NotNull JsExpression type) { - JsInvocation result = new JsInvocation(kotlin(isTypeName), instance, type); + public static JsExpression isInstanceOf(@NotNull JsExpression instance, @NotNull JsExpression type) { + JsInvocation result = new JsInvocation(new JsNameRef("isType", KOTLIN_NAME), instance, type); MetadataProperties.setSideEffects(result, SideEffectKind.PURE); return result; } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/expandIsCalls.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/expandIsCalls.kt index d652976064f..fa9915fe5e7 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/expandIsCalls.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/utils/expandIsCalls.kt @@ -20,15 +20,19 @@ import org.jetbrains.kotlin.js.backend.ast.* import org.jetbrains.kotlin.js.backend.ast.metadata.TypeCheck import org.jetbrains.kotlin.js.backend.ast.metadata.typeCheck import org.jetbrains.kotlin.js.inline.util.IdentitySet -import org.jetbrains.kotlin.js.translate.context.TranslationContext +import org.jetbrains.kotlin.js.translate.context.Namer import org.jetbrains.kotlin.js.translate.utils.JsAstUtils.* import java.util.* -fun expandIsCalls(node: JsNode, context: TranslationContext) { - TypeCheckRewritingVisitor(context).accept(node) +fun expandIsCalls(fragments: List) { + val visitor = TypeCheckRewritingVisitor() + for (fragment in fragments) { + visitor.accept(fragment.declarationBlock) + visitor.accept(fragment.initializerBlock) + } } -private class TypeCheckRewritingVisitor(private val context: TranslationContext) : JsVisitorWithContextImpl() { +private class TypeCheckRewritingVisitor : JsVisitorWithContextImpl() { private val scopes = Stack() private val localVars = Stack>().apply { push(mutableSetOf()) } @@ -78,7 +82,7 @@ private class TypeCheckRewritingVisitor(private val context: TranslationContext) TypeCheck.INSTANCEOF -> { // `Kotlin.isInstanceOf(calleeArgument)(argument)` -> `argument instanceof calleeArgument` - if (calleeArguments.size == 1) context.namer().isInstanceOf(argument, calleeArguments[0]) else null + if (calleeArguments.size == 1) Namer.isInstanceOf(argument, calleeArguments[0]) else null } TypeCheck.OR_NULL -> {