Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions compiler/testData/codegen/box/functions/invoke/kt3190.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// IGNORE_BACKEND: JS_IR
// IGNORE_BACKEND: JS_IR_ES6
// IGNORE_HEADER_MODE: JS_IR
//KT-3190 Compiler crash if function called 'invoke' calls a closure
// JS backend does not allow to implement Function{N} interfaces
// IGNORE_IR_DESERIALIZATION_TEST: JS_IR
Expand Down
2 changes: 1 addition & 1 deletion compiler/testData/codegen/box/ir/anonymousClassLeak.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// WITH_STDLIB
// IGNORE_HEADER_MODE: JVM_IR
// IGNORE_HEADER_MODE: JS_IR, JVM_IR
// Reason: KT-82404

// MODULE: lib
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// IGNORE_BACKEND: WASM_JS, WASM_WASI
// WASM_MUTE_REASON: IGNORED_IN_JS
// LANGUAGE: +MultiPlatformProjects
// IGNORE_HEADER_MODE: JS_IR
// IGNORE_BACKEND: JS_IR
// IGNORE_BACKEND: JS_IR_ES6
// IGNORE_BACKEND_K2: JVM_IR, NATIVE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,10 @@ fun main(args: Array<String>) {
model("box", excludeDirs = jvmOnlyBoxTests + k1BoxTestDir)
}

testClass<AbstractFirJsLightTreeHeaderModeCodegenTest> {
model("box", excludeDirs = jvmOnlyBoxTests + k1BoxTestDir)
}

testClass<AbstractJsCodegenBoxWithInlinedFunInKlibTest> {
model("box", excludeDirs = jvmOnlyBoxTests + k1BoxTestDir)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
/*
* Copyright 2010-2025 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/

package org.jetbrains.kotlin.js.test.runners
import org.jetbrains.kotlin.test.frontend.fir.FirOutputArtifact
import org.jetbrains.kotlin.test.frontend.fir.handlers.FirAnalysisHandler
import org.jetbrains.kotlin.test.model.BackendInputHandler
import org.jetbrains.kotlin.test.model.BinaryArtifactHandler
import org.jetbrains.kotlin.test.model.BackendKinds
import org.jetbrains.kotlin.test.backend.handlers.KlibArtifactHandler

import org.jetbrains.kotlin.js.test.converters.Fir2IrCliWebFacade
import org.jetbrains.kotlin.js.test.converters.FirCliWebFacade
import org.jetbrains.kotlin.js.test.converters.FirKlibSerializerCliWebFacade
import org.jetbrains.kotlin.js.test.converters.JsIrPreSerializationLoweringFacade
import org.jetbrains.kotlin.test.FirParser
import org.jetbrains.kotlin.test.TargetBackend
import org.jetbrains.kotlin.test.backend.BlackBoxCodegenSuppressor
import org.jetbrains.kotlin.test.backend.handlers.IrMangledNameAndSignatureDumpHandler
import org.jetbrains.kotlin.test.backend.handlers.KlibAbiDumpAfterInliningVerifyingHandler
import org.jetbrains.kotlin.test.backend.handlers.KlibBackendDiagnosticsHandler
import org.jetbrains.kotlin.test.backend.handlers.NoIrCompilationErrorsHandler
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
import org.jetbrains.kotlin.test.builders.firHandlersStep
import org.jetbrains.kotlin.test.builders.irHandlersStep
import org.jetbrains.kotlin.test.builders.klibArtifactsHandlersStep
import org.jetbrains.kotlin.test.builders.loweredIrHandlersStep
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.IGNORE_HEADER_MODE
import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives.HEADER_MODE
import org.jetbrains.kotlin.test.directives.configureFirParser
import org.jetbrains.kotlin.test.frontend.fir.handlers.FirDiagnosticsHandler
import org.jetbrains.kotlin.test.runners.AbstractKotlinCompilerWithTargetBackendTest
import org.jetbrains.kotlin.utils.bind

import org.jetbrains.kotlin.test.Constructor
import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
import org.jetbrains.kotlin.test.model.AbstractTestFacade
import org.jetbrains.kotlin.test.model.BinaryArtifacts

import org.jetbrains.kotlin.test.model.ResultingArtifact

abstract class AbstractFirJsHeaderModeCodegenTestBase(
val parser: FirParser
) : AbstractKotlinCompilerWithTargetBackendTest(TargetBackend.JS_IR) {
override fun configure(builder: TestConfigurationBuilder) = with(builder) {
configureFirParser(parser)

commonConfigurationForJsHeaderModeTest(
::FirCliWebFacade,
::Fir2IrCliWebFacade,
::JsIrPreSerializationLoweringFacade,
::FirKlibSerializerCliWebFacade,
)

configureJsHeaderModeHandlers(
::FirDiagnosticsHandler,
::NoIrCompilationErrorsHandler,
{ IrMangledNameAndSignatureDumpHandler(it, BackendKinds.IrBackend) },
::KlibBackendDiagnosticsHandler,
::KlibAbiDumpAfterInliningVerifyingHandler,
)

defaultDirectives {
+HEADER_MODE
}

useAfterAnalysisCheckers(
::BlackBoxCodegenSuppressor.bind(IGNORE_HEADER_MODE, null),
)
}
}

fun TestConfigurationBuilder.commonConfigurationForJsHeaderModeTest(
frontendFacade: Constructor<AbstractTestFacade<ResultingArtifact.Source, FirOutputArtifact>>,
fir2IrFacade: Constructor<AbstractTestFacade<FirOutputArtifact, IrBackendInput>>,
loweringFacade: Constructor<AbstractTestFacade<IrBackendInput, IrBackendInput>>,
serializerFacade: Constructor<AbstractTestFacade<IrBackendInput, BinaryArtifacts.KLib>>,
) {
commonServicesConfigurationForJsCodegenTest()

facadeStep(frontendFacade)
facadeStep(fir2IrFacade)
facadeStep(loweringFacade)
facadeStep(serializerFacade)
}

fun TestConfigurationBuilder.configureJsHeaderModeHandlers(
firDiagnosticsHandler: Constructor<FirAnalysisHandler>,
irCompilationErrorsHandler: Constructor<BackendInputHandler<IrBackendInput>>,
irDumpHandler: Constructor<BackendInputHandler<IrBackendInput>>,
klibDiagnosticsHandler: Constructor<BinaryArtifactHandler<BinaryArtifacts.KLib>>,
klibAbiDumpHandler: Constructor<BinaryArtifactHandler<BinaryArtifacts.KLib>>,
) {
firHandlersStep {
useHandlers(firDiagnosticsHandler)
}

irHandlersStep {
useHandlers(irCompilationErrorsHandler)
useHandlers(irDumpHandler)
}

loweredIrHandlersStep {
useHandlers(irCompilationErrorsHandler)
}

klibArtifactsHandlersStep {
useHandlers(klibDiagnosticsHandler, klibAbiDumpHandler)
}
}

open class AbstractFirJsLightTreeHeaderModeCodegenTest : AbstractFirJsHeaderModeCodegenTestBase(FirParser.LightTree)