[Wasm] Support WASI target in K2
- Support WASI mode in CLI and test infrastructure - Add external declaration checker - Split Fir diagnostic lists into Base, JS and WASI #KT-56849 Fixed
This commit is contained in:
committed by
Space Team
parent
f26b0a5be6
commit
e901629cf0
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchSco
|
|||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||||
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
||||||
import org.jetbrains.kotlin.js.config.WasmTarget
|
import org.jetbrains.kotlin.js.config.WasmTarget
|
||||||
|
import org.jetbrains.kotlin.js.config.wasmTarget
|
||||||
import org.jetbrains.kotlin.js.resolve.JsPlatformAnalyzerServices
|
import org.jetbrains.kotlin.js.resolve.JsPlatformAnalyzerServices
|
||||||
import org.jetbrains.kotlin.library.KotlinLibrary
|
import org.jetbrains.kotlin.library.KotlinLibrary
|
||||||
import org.jetbrains.kotlin.library.metadata.resolver.KotlinResolvedLibrary
|
import org.jetbrains.kotlin.library.metadata.resolver.KotlinResolvedLibrary
|
||||||
@@ -261,6 +262,7 @@ fun <F> prepareWasmSessions(
|
|||||||
sessionProvider,
|
sessionProvider,
|
||||||
extensionRegistrars,
|
extensionRegistrars,
|
||||||
configuration.languageVersionSettings,
|
configuration.languageVersionSettings,
|
||||||
|
configuration.wasmTarget,
|
||||||
lookupTracker,
|
lookupTracker,
|
||||||
icData = icData,
|
icData = icData,
|
||||||
registerExtraComponents = {},
|
registerExtraComponents = {},
|
||||||
|
|||||||
+5
@@ -65,4 +65,9 @@ object WASM_DIAGNOSTICS_LIST : DiagnosticList("FirWasmErrors") {
|
|||||||
parameter<ConeKotlinType>("type")
|
parameter<ConeKotlinType>("type")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val WASI by object : DiagnosticGroup("WASI") {
|
||||||
|
val WASI_EXTERNAL_NOT_TOP_LEVEL_FUNCTION by error<KtElement>()
|
||||||
|
val WASI_EXTERNAL_FUNCTION_WITHOUT_IMPORT by error<KtElement>()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+4
@@ -48,6 +48,10 @@ object FirWasmErrors {
|
|||||||
val WASM_IMPORT_EXPORT_UNSUPPORTED_PARAMETER_TYPE by error1<KtElement, ConeKotlinType>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT)
|
val WASM_IMPORT_EXPORT_UNSUPPORTED_PARAMETER_TYPE by error1<KtElement, ConeKotlinType>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT)
|
||||||
val WASM_IMPORT_EXPORT_UNSUPPORTED_RETURN_TYPE by error1<KtElement, ConeKotlinType>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT)
|
val WASM_IMPORT_EXPORT_UNSUPPORTED_RETURN_TYPE by error1<KtElement, ConeKotlinType>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT)
|
||||||
|
|
||||||
|
// WASI
|
||||||
|
val WASI_EXTERNAL_NOT_TOP_LEVEL_FUNCTION by error0<KtElement>()
|
||||||
|
val WASI_EXTERNAL_FUNCTION_WITHOUT_IMPORT by error0<KtElement>()
|
||||||
|
|
||||||
init {
|
init {
|
||||||
RootDiagnosticRendererFactory.registerFactory(FirWasmErrorsDefaultMessages)
|
RootDiagnosticRendererFactory.registerFactory(FirWasmErrorsDefaultMessages)
|
||||||
}
|
}
|
||||||
|
|||||||
+5
@@ -22,6 +22,8 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.wasm.FirWasmErrors.NESTED_W
|
|||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.wasm.FirWasmErrors.NESTED_WASM_IMPORT
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.wasm.FirWasmErrors.NESTED_WASM_IMPORT
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.wasm.FirWasmErrors.NON_EXTERNAL_DECLARATION_IN_INAPPROPRIATE_FILE
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.wasm.FirWasmErrors.NON_EXTERNAL_DECLARATION_IN_INAPPROPRIATE_FILE
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.wasm.FirWasmErrors.NON_EXTERNAL_TYPE_EXTENDS_EXTERNAL_TYPE
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.wasm.FirWasmErrors.NON_EXTERNAL_TYPE_EXTENDS_EXTERNAL_TYPE
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.wasm.FirWasmErrors.WASI_EXTERNAL_FUNCTION_WITHOUT_IMPORT
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.wasm.FirWasmErrors.WASI_EXTERNAL_NOT_TOP_LEVEL_FUNCTION
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.wasm.FirWasmErrors.WASM_EXPORT_ON_EXTERNAL_DECLARATION
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.wasm.FirWasmErrors.WASM_EXPORT_ON_EXTERNAL_DECLARATION
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.wasm.FirWasmErrors.WASM_IMPORT_EXPORT_PARAMETER_DEFAULT_VALUE
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.wasm.FirWasmErrors.WASM_IMPORT_EXPORT_PARAMETER_DEFAULT_VALUE
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.wasm.FirWasmErrors.WASM_IMPORT_EXPORT_UNSUPPORTED_PARAMETER_TYPE
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.wasm.FirWasmErrors.WASM_IMPORT_EXPORT_UNSUPPORTED_PARAMETER_TYPE
|
||||||
@@ -95,5 +97,8 @@ object FirWasmErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
|
|||||||
"Unsupported ''@WasmImport'' and ''@WasmExport'' return type ''{0}''.",
|
"Unsupported ''@WasmImport'' and ''@WasmExport'' return type ''{0}''.",
|
||||||
FirDiagnosticRenderers.RENDER_TYPE
|
FirDiagnosticRenderers.RENDER_TYPE
|
||||||
)
|
)
|
||||||
|
|
||||||
|
map.put(WASI_EXTERNAL_NOT_TOP_LEVEL_FUNCTION, "Only top-level functions can be external.")
|
||||||
|
map.put(WASI_EXTERNAL_FUNCTION_WITHOUT_IMPORT, "External functions should be annotated with '@WasmImport'.")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+15
-2
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.declaration.*
|
|||||||
import org.jetbrains.kotlin.fir.analysis.wasm.checkers.declaration.*
|
import org.jetbrains.kotlin.fir.analysis.wasm.checkers.declaration.*
|
||||||
import org.jetbrains.kotlin.fir.analysis.web.common.checkers.declaration.FirJsExportAnnotationChecker
|
import org.jetbrains.kotlin.fir.analysis.web.common.checkers.declaration.FirJsExportAnnotationChecker
|
||||||
|
|
||||||
object WasmDeclarationCheckers : DeclarationCheckers() {
|
object WasmBaseDeclarationCheckers : DeclarationCheckers() {
|
||||||
override val classCheckers: Set<FirClassChecker>
|
override val classCheckers: Set<FirClassChecker>
|
||||||
get() = setOf(
|
get() = setOf(
|
||||||
FirWasmExternalInheritanceChecker,
|
FirWasmExternalInheritanceChecker,
|
||||||
@@ -17,13 +17,26 @@ object WasmDeclarationCheckers : DeclarationCheckers() {
|
|||||||
|
|
||||||
override val basicDeclarationCheckers: Set<FirBasicDeclarationChecker>
|
override val basicDeclarationCheckers: Set<FirBasicDeclarationChecker>
|
||||||
get() = setOf(
|
get() = setOf(
|
||||||
FirWasmJsInteropTypesChecker,
|
|
||||||
FirWasmImportAnnotationChecker,
|
FirWasmImportAnnotationChecker,
|
||||||
FirWasmExportAnnotationChecker,
|
FirWasmExportAnnotationChecker,
|
||||||
FirWasmExternalChecker,
|
FirWasmExternalChecker,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
object WasmJsDeclarationCheckers : DeclarationCheckers() {
|
||||||
|
override val basicDeclarationCheckers: Set<FirBasicDeclarationChecker>
|
||||||
|
get() = setOf(
|
||||||
|
FirWasmJsInteropTypesChecker,
|
||||||
FirWasmJsFunAnnotationChecker,
|
FirWasmJsFunAnnotationChecker,
|
||||||
FirJsExportAnnotationChecker,
|
FirJsExportAnnotationChecker,
|
||||||
FirWasmJsModuleChecker,
|
FirWasmJsModuleChecker,
|
||||||
FirWasmExternalFileChecker,
|
FirWasmExternalFileChecker,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
object WasmWasiDeclarationCheckers : DeclarationCheckers() {
|
||||||
|
override val basicDeclarationCheckers: Set<FirBasicDeclarationChecker>
|
||||||
|
get() = setOf(
|
||||||
|
FirWasmWasiExternalDeclarationChecker,
|
||||||
|
)
|
||||||
|
}
|
||||||
+14
-8
@@ -13,12 +13,7 @@ import org.jetbrains.kotlin.fir.analysis.wasm.checkers.expression.FirWasmReified
|
|||||||
import org.jetbrains.kotlin.fir.analysis.web.common.checkers.expression.FirJsCodeConstantArgumentChecker
|
import org.jetbrains.kotlin.fir.analysis.web.common.checkers.expression.FirJsCodeConstantArgumentChecker
|
||||||
import org.jetbrains.kotlin.fir.analysis.web.common.checkers.expression.FirJsQualifierChecker
|
import org.jetbrains.kotlin.fir.analysis.web.common.checkers.expression.FirJsQualifierChecker
|
||||||
|
|
||||||
object WasmExpressionCheckers : ExpressionCheckers() {
|
object WasmBaseExpressionCheckers : ExpressionCheckers() {
|
||||||
override val annotationCallCheckers: Set<FirAnnotationCallChecker>
|
|
||||||
get() = setOf(
|
|
||||||
FirJsQualifierChecker,
|
|
||||||
)
|
|
||||||
|
|
||||||
override val basicExpressionCheckers: Set<FirBasicExpressionChecker>
|
override val basicExpressionCheckers: Set<FirBasicExpressionChecker>
|
||||||
get() = setOf(
|
get() = setOf(
|
||||||
FirWasmDefinedExternallyCallChecker,
|
FirWasmDefinedExternallyCallChecker,
|
||||||
@@ -27,8 +22,19 @@ object WasmExpressionCheckers : ExpressionCheckers() {
|
|||||||
|
|
||||||
override val functionCallCheckers: Set<FirFunctionCallChecker>
|
override val functionCallCheckers: Set<FirFunctionCallChecker>
|
||||||
get() = setOf(
|
get() = setOf(
|
||||||
FirJsCodeConstantArgumentChecker,
|
|
||||||
FirWasmJsCodeCallChecker,
|
|
||||||
FirWasmReifiedExternalChecker
|
FirWasmReifiedExternalChecker
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
object WasmJsExpressionCheckers : ExpressionCheckers() {
|
||||||
|
override val annotationCallCheckers: Set<FirAnnotationCallChecker>
|
||||||
|
get() = setOf(
|
||||||
|
FirJsQualifierChecker,
|
||||||
|
)
|
||||||
|
|
||||||
|
override val functionCallCheckers: Set<FirFunctionCallChecker>
|
||||||
|
get() = setOf(
|
||||||
|
FirJsCodeConstantArgumentChecker,
|
||||||
|
FirWasmJsCodeCallChecker,
|
||||||
|
)
|
||||||
|
}
|
||||||
+1
-1
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.declaration.*
|
|||||||
import org.jetbrains.kotlin.fir.analysis.checkers.type.FirTypeRefChecker
|
import org.jetbrains.kotlin.fir.analysis.checkers.type.FirTypeRefChecker
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.type.TypeCheckers
|
import org.jetbrains.kotlin.fir.analysis.checkers.type.TypeCheckers
|
||||||
|
|
||||||
object WasmTypeCheckers : TypeCheckers() {
|
object WasmBaseTypeCheckers : TypeCheckers() {
|
||||||
override val typeRefCheckers: Set<FirTypeRefChecker>
|
override val typeRefCheckers: Set<FirTypeRefChecker>
|
||||||
get() = setOf(
|
get() = setOf(
|
||||||
FirDynamicUnsupportedChecker,
|
FirDynamicUnsupportedChecker,
|
||||||
|
|||||||
+34
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2023 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.fir.analysis.wasm.checkers.declaration
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||||
|
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirBasicDeclarationChecker
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.checkers.isTopLevel
|
||||||
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.wasm.FirWasmErrors
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.hasAnnotation
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.utils.isEffectivelyExternal
|
||||||
|
import org.jetbrains.kotlin.name.WasmStandardClassIds
|
||||||
|
|
||||||
|
object FirWasmWasiExternalDeclarationChecker : FirBasicDeclarationChecker() {
|
||||||
|
override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
|
if (!declaration.symbol.isEffectivelyExternal(context.session)) return
|
||||||
|
|
||||||
|
if (declaration is FirSimpleFunction) {
|
||||||
|
if (!context.isTopLevel) {
|
||||||
|
reporter.reportOn(declaration.source, FirWasmErrors.WASI_EXTERNAL_NOT_TOP_LEVEL_FUNCTION, context)
|
||||||
|
} else {
|
||||||
|
if (!declaration.hasAnnotation(WasmStandardClassIds.Annotations.WasmImport, context.session)) {
|
||||||
|
reporter.reportOn(declaration.source, FirWasmErrors.WASI_EXTERNAL_FUNCTION_WITHOUT_IMPORT, context)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+16
-7
@@ -13,10 +13,9 @@ import org.jetbrains.kotlin.fir.analysis.jvm.checkers.JvmExpressionCheckers
|
|||||||
import org.jetbrains.kotlin.fir.analysis.jvm.checkers.JvmTypeCheckers
|
import org.jetbrains.kotlin.fir.analysis.jvm.checkers.JvmTypeCheckers
|
||||||
import org.jetbrains.kotlin.fir.analysis.native.checkers.NativeDeclarationCheckers
|
import org.jetbrains.kotlin.fir.analysis.native.checkers.NativeDeclarationCheckers
|
||||||
import org.jetbrains.kotlin.fir.analysis.native.checkers.NativeExpressionCheckers
|
import org.jetbrains.kotlin.fir.analysis.native.checkers.NativeExpressionCheckers
|
||||||
import org.jetbrains.kotlin.fir.analysis.wasm.checkers.WasmDeclarationCheckers
|
import org.jetbrains.kotlin.fir.analysis.wasm.checkers.*
|
||||||
import org.jetbrains.kotlin.fir.analysis.wasm.checkers.WasmExpressionCheckers
|
|
||||||
import org.jetbrains.kotlin.fir.analysis.wasm.checkers.WasmTypeCheckers
|
|
||||||
import org.jetbrains.kotlin.fir.session.FirSessionConfigurator
|
import org.jetbrains.kotlin.fir.session.FirSessionConfigurator
|
||||||
|
import org.jetbrains.kotlin.js.config.WasmTarget
|
||||||
|
|
||||||
fun FirSessionConfigurator.registerCommonCheckers() {
|
fun FirSessionConfigurator.registerCommonCheckers() {
|
||||||
useCheckers(CommonDeclarationCheckers)
|
useCheckers(CommonDeclarationCheckers)
|
||||||
@@ -48,8 +47,18 @@ fun FirSessionConfigurator.registerNativeCheckers() {
|
|||||||
useCheckers(NativeExpressionCheckers)
|
useCheckers(NativeExpressionCheckers)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirSessionConfigurator.registerWasmCheckers() {
|
fun FirSessionConfigurator.registerWasmCheckers(target: WasmTarget) {
|
||||||
useCheckers(WasmDeclarationCheckers)
|
useCheckers(WasmBaseDeclarationCheckers)
|
||||||
useCheckers(WasmExpressionCheckers)
|
useCheckers(WasmBaseExpressionCheckers)
|
||||||
useCheckers(WasmTypeCheckers)
|
useCheckers(WasmBaseTypeCheckers)
|
||||||
|
|
||||||
|
when (target) {
|
||||||
|
WasmTarget.JS -> {
|
||||||
|
useCheckers(WasmJsDeclarationCheckers)
|
||||||
|
useCheckers(WasmJsExpressionCheckers)
|
||||||
|
}
|
||||||
|
WasmTarget.WASI -> {
|
||||||
|
useCheckers(WasmWasiDeclarationCheckers)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+3
-1
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.resolve.providers.impl.FirBuiltinSyntheticFuncti
|
|||||||
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider
|
import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider
|
||||||
import org.jetbrains.kotlin.fir.session.FirSessionFactoryHelper.registerDefaultComponents
|
import org.jetbrains.kotlin.fir.session.FirSessionFactoryHelper.registerDefaultComponents
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||||
|
import org.jetbrains.kotlin.js.config.WasmTarget
|
||||||
import org.jetbrains.kotlin.library.KotlinLibrary
|
import org.jetbrains.kotlin.library.KotlinLibrary
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
@@ -27,6 +28,7 @@ object FirWasmSessionFactory : FirAbstractSessionFactory() {
|
|||||||
sessionProvider: FirProjectSessionProvider,
|
sessionProvider: FirProjectSessionProvider,
|
||||||
extensionRegistrars: List<FirExtensionRegistrar>,
|
extensionRegistrars: List<FirExtensionRegistrar>,
|
||||||
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
|
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT,
|
||||||
|
wasmTarget: WasmTarget,
|
||||||
lookupTracker: LookupTracker?,
|
lookupTracker: LookupTracker?,
|
||||||
icData: KlibIcData? = null,
|
icData: KlibIcData? = null,
|
||||||
registerExtraComponents: ((FirSession) -> Unit) = {},
|
registerExtraComponents: ((FirSession) -> Unit) = {},
|
||||||
@@ -45,7 +47,7 @@ object FirWasmSessionFactory : FirAbstractSessionFactory() {
|
|||||||
it.registerDefaultComponents()
|
it.registerDefaultComponents()
|
||||||
registerExtraComponents(it)
|
registerExtraComponents(it)
|
||||||
},
|
},
|
||||||
registerExtraCheckers = { it.registerWasmCheckers() },
|
registerExtraCheckers = { it.registerWasmCheckers(wasmTarget) },
|
||||||
createKotlinScopeProvider = { FirKotlinScopeProvider { _, declaredMemberScope, _, _, _ -> declaredMemberScope } },
|
createKotlinScopeProvider = { FirKotlinScopeProvider { _, declaredMemberScope, _, _, _ -> declaredMemberScope } },
|
||||||
createProviders = { session, kotlinScopeProvider, symbolProvider, generatedSymbolsProvider, dependencies ->
|
createProviders = { session, kotlinScopeProvider, symbolProvider, generatedSymbolsProvider, dependencies ->
|
||||||
listOfNotNull(
|
listOfNotNull(
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
// FIR_IDENTICAL
|
||||||
|
import kotlin.wasm.WasmImport
|
||||||
|
|
||||||
|
<!WASI_EXTERNAL_FUNCTION_WITHOUT_IMPORT!>external fun foo(): Int<!>
|
||||||
|
|
||||||
|
external interface I {
|
||||||
|
<!WASI_EXTERNAL_NOT_TOP_LEVEL_FUNCTION!>fun foo(): Int<!>
|
||||||
|
}
|
||||||
|
|
||||||
|
@WasmImport("a", "b")
|
||||||
|
external fun importedFoo(): Int
|
||||||
+2
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.fir.session.*
|
|||||||
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment
|
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment
|
||||||
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
|
||||||
import org.jetbrains.kotlin.js.config.WasmTarget
|
import org.jetbrains.kotlin.js.config.WasmTarget
|
||||||
|
import org.jetbrains.kotlin.js.config.wasmTarget
|
||||||
import org.jetbrains.kotlin.load.kotlin.PackageAndMetadataPartProvider
|
import org.jetbrains.kotlin.load.kotlin.PackageAndMetadataPartProvider
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||||
@@ -398,6 +399,7 @@ open class FirFrontendFacade(
|
|||||||
sessionProvider,
|
sessionProvider,
|
||||||
extensionRegistrars,
|
extensionRegistrars,
|
||||||
languageVersionSettings,
|
languageVersionSettings,
|
||||||
|
testServices.compilerConfigurationProvider.getCompilerConfiguration(module).wasmTarget,
|
||||||
null,
|
null,
|
||||||
registerExtraComponents = ::registerExtraComponents,
|
registerExtraComponents = ::registerExtraComponents,
|
||||||
sessionConfigurator,
|
sessionConfigurator,
|
||||||
|
|||||||
+2
-1
@@ -57,7 +57,7 @@ object TestFirWasmSessionFactory {
|
|||||||
|
|
||||||
fun createModuleBasedSession(
|
fun createModuleBasedSession(
|
||||||
mainModuleData: FirModuleData, sessionProvider: FirProjectSessionProvider, extensionRegistrars: List<FirExtensionRegistrar>,
|
mainModuleData: FirModuleData, sessionProvider: FirProjectSessionProvider, extensionRegistrars: List<FirExtensionRegistrar>,
|
||||||
languageVersionSettings: LanguageVersionSettings, lookupTracker: LookupTracker?,
|
languageVersionSettings: LanguageVersionSettings, wasmTarget: WasmTarget, lookupTracker: LookupTracker?,
|
||||||
registerExtraComponents: ((FirSession) -> Unit),
|
registerExtraComponents: ((FirSession) -> Unit),
|
||||||
sessionConfigurator: FirSessionConfigurator.() -> Unit,
|
sessionConfigurator: FirSessionConfigurator.() -> Unit,
|
||||||
): FirSession =
|
): FirSession =
|
||||||
@@ -66,6 +66,7 @@ object TestFirWasmSessionFactory {
|
|||||||
sessionProvider,
|
sessionProvider,
|
||||||
extensionRegistrars,
|
extensionRegistrars,
|
||||||
languageVersionSettings,
|
languageVersionSettings,
|
||||||
|
wasmTarget,
|
||||||
lookupTracker,
|
lookupTracker,
|
||||||
icData = null,
|
icData = null,
|
||||||
registerExtraComponents,
|
registerExtraComponents,
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.js.config
|
package org.jetbrains.kotlin.js.config
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
|
|
||||||
enum class WasmTarget {
|
enum class WasmTarget {
|
||||||
JS,
|
JS,
|
||||||
WASI;
|
WASI;
|
||||||
@@ -17,3 +19,6 @@ enum class WasmTarget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val CompilerConfiguration.wasmTarget: WasmTarget
|
||||||
|
get() = get(JSConfigurationKeys.WASM_TARGET, /* defaultValue = */ WasmTarget.JS)
|
||||||
-1
@@ -16,7 +16,6 @@ import org.jetbrains.kotlin.resolve.checkers.DeclarationChecker
|
|||||||
import org.jetbrains.kotlin.resolve.checkers.DeclarationCheckerContext
|
import org.jetbrains.kotlin.resolve.checkers.DeclarationCheckerContext
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
|
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
|
||||||
|
|
||||||
// TODO: Implement in K2: KT-56849
|
|
||||||
object WasmWasiExternalDeclarationChecker : DeclarationChecker {
|
object WasmWasiExternalDeclarationChecker : DeclarationChecker {
|
||||||
override fun check(declaration: KtDeclaration, descriptor: DeclarationDescriptor, context: DeclarationCheckerContext) {
|
override fun check(declaration: KtDeclaration, descriptor: DeclarationDescriptor, context: DeclarationCheckerContext) {
|
||||||
if (descriptor !is MemberDescriptor) return
|
if (descriptor !is MemberDescriptor) return
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ import org.jetbrains.kotlin.generators.util.TestGeneratorUtil
|
|||||||
import org.jetbrains.kotlin.wasm.test.*
|
import org.jetbrains.kotlin.wasm.test.*
|
||||||
import org.jetbrains.kotlin.wasm.test.diagnostics.AbstractDiagnosticsWasmTest
|
import org.jetbrains.kotlin.wasm.test.diagnostics.AbstractDiagnosticsWasmTest
|
||||||
import org.jetbrains.kotlin.wasm.test.diagnostics.AbstractDiagnosticsFirWasmTest
|
import org.jetbrains.kotlin.wasm.test.diagnostics.AbstractDiagnosticsFirWasmTest
|
||||||
|
import org.jetbrains.kotlin.wasm.test.diagnostics.AbstractDiagnosticsFirWasmWasiTest
|
||||||
|
import org.jetbrains.kotlin.wasm.test.diagnostics.AbstractDiagnosticsWasmWasiTest
|
||||||
|
|
||||||
fun main(args: Array<String>) {
|
fun main(args: Array<String>) {
|
||||||
System.setProperty("java.awt.headless", "true")
|
System.setProperty("java.awt.headless", "true")
|
||||||
@@ -36,6 +38,14 @@ fun main(args: Array<String>) {
|
|||||||
testClass<AbstractDiagnosticsFirWasmTest> {
|
testClass<AbstractDiagnosticsFirWasmTest> {
|
||||||
model("diagnostics/wasmTests", excludedPattern = TestGeneratorUtil.KT_OR_KTS_WITH_FIR_PREFIX)
|
model("diagnostics/wasmTests", excludedPattern = TestGeneratorUtil.KT_OR_KTS_WITH_FIR_PREFIX)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
testClass<AbstractDiagnosticsWasmWasiTest> {
|
||||||
|
model("diagnostics/wasmWasiTests", excludedPattern = TestGeneratorUtil.KT_OR_KTS_WITH_FIR_PREFIX)
|
||||||
|
}
|
||||||
|
|
||||||
|
testClass<AbstractDiagnosticsFirWasmWasiTest> {
|
||||||
|
model("diagnostics/wasmWasiTests", excludedPattern = TestGeneratorUtil.KT_OR_KTS_WITH_FIR_PREFIX)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
testGroup("wasm/wasm.tests/tests-gen", "js/js.translator/testData", testRunnerMethodName = "runTest0") {
|
testGroup("wasm/wasm.tests/tests-gen", "js/js.translator/testData", testRunnerMethodName = "runTest0") {
|
||||||
|
|||||||
+11
-3
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.wasm.test.diagnostics
|
package org.jetbrains.kotlin.wasm.test.diagnostics
|
||||||
|
|
||||||
import org.jetbrains.kotlin.platform.wasm.WasmPlatforms
|
import org.jetbrains.kotlin.platform.wasm.WasmPlatforms
|
||||||
|
import org.jetbrains.kotlin.test.Constructor
|
||||||
import org.jetbrains.kotlin.test.FirParser
|
import org.jetbrains.kotlin.test.FirParser
|
||||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||||
import org.jetbrains.kotlin.test.builders.firHandlersStep
|
import org.jetbrains.kotlin.test.builders.firHandlersStep
|
||||||
@@ -16,13 +17,19 @@ import org.jetbrains.kotlin.test.model.DependencyKind
|
|||||||
import org.jetbrains.kotlin.test.model.FrontendKinds
|
import org.jetbrains.kotlin.test.model.FrontendKinds
|
||||||
import org.jetbrains.kotlin.test.runners.AbstractKotlinCompilerTest
|
import org.jetbrains.kotlin.test.runners.AbstractKotlinCompilerTest
|
||||||
import org.jetbrains.kotlin.test.runners.configurationForClassicAndFirTestsAlongside
|
import org.jetbrains.kotlin.test.runners.configurationForClassicAndFirTestsAlongside
|
||||||
|
import org.jetbrains.kotlin.test.services.AbstractEnvironmentConfigurator
|
||||||
import org.jetbrains.kotlin.test.services.LibraryProvider
|
import org.jetbrains.kotlin.test.services.LibraryProvider
|
||||||
import org.jetbrains.kotlin.test.services.configuration.CommonEnvironmentConfigurator
|
import org.jetbrains.kotlin.test.services.configuration.CommonEnvironmentConfigurator
|
||||||
|
import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfigurator
|
||||||
import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfiguratorJs
|
import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfiguratorJs
|
||||||
|
import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfiguratorWasi
|
||||||
import org.jetbrains.kotlin.test.services.sourceProviders.AdditionalDiagnosticsSourceFilesProvider
|
import org.jetbrains.kotlin.test.services.sourceProviders.AdditionalDiagnosticsSourceFilesProvider
|
||||||
import org.jetbrains.kotlin.test.services.sourceProviders.CoroutineHelpersSourceFilesProvider
|
import org.jetbrains.kotlin.test.services.sourceProviders.CoroutineHelpersSourceFilesProvider
|
||||||
|
|
||||||
abstract class AbstractFirWasmDiagnosticTestBase(val parser: FirParser) : AbstractKotlinCompilerTest() {
|
abstract class AbstractFirWasmDiagnosticTestBase(
|
||||||
|
val parser: FirParser,
|
||||||
|
private val wasmEnvironmentConfigurator: Constructor<AbstractEnvironmentConfigurator>,
|
||||||
|
) : AbstractKotlinCompilerTest() {
|
||||||
override fun TestConfigurationBuilder.configuration() {
|
override fun TestConfigurationBuilder.configuration() {
|
||||||
globalDefaults {
|
globalDefaults {
|
||||||
frontend = FrontendKinds.FIR
|
frontend = FrontendKinds.FIR
|
||||||
@@ -37,7 +44,7 @@ abstract class AbstractFirWasmDiagnosticTestBase(val parser: FirParser) : Abstra
|
|||||||
|
|
||||||
useConfigurators(
|
useConfigurators(
|
||||||
::CommonEnvironmentConfigurator,
|
::CommonEnvironmentConfigurator,
|
||||||
::WasmEnvironmentConfiguratorJs,
|
wasmEnvironmentConfigurator,
|
||||||
)
|
)
|
||||||
|
|
||||||
useAdditionalSourceProviders(
|
useAdditionalSourceProviders(
|
||||||
@@ -61,4 +68,5 @@ abstract class AbstractFirWasmDiagnosticTestBase(val parser: FirParser) : Abstra
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class AbstractDiagnosticsFirWasmTest : AbstractFirWasmDiagnosticTestBase(FirParser.Psi)
|
abstract class AbstractDiagnosticsFirWasmTest : AbstractFirWasmDiagnosticTestBase(FirParser.Psi, ::WasmEnvironmentConfiguratorJs)
|
||||||
|
abstract class AbstractDiagnosticsFirWasmWasiTest : AbstractFirWasmDiagnosticTestBase(FirParser.Psi, ::WasmEnvironmentConfiguratorWasi)
|
||||||
+11
-2
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.wasm.test.diagnostics
|
package org.jetbrains.kotlin.wasm.test.diagnostics
|
||||||
|
|
||||||
import org.jetbrains.kotlin.platform.wasm.WasmPlatforms
|
import org.jetbrains.kotlin.platform.wasm.WasmPlatforms
|
||||||
|
import org.jetbrains.kotlin.test.Constructor
|
||||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||||
import org.jetbrains.kotlin.test.builders.classicFrontendHandlersStep
|
import org.jetbrains.kotlin.test.builders.classicFrontendHandlersStep
|
||||||
import org.jetbrains.kotlin.test.builders.classicFrontendStep
|
import org.jetbrains.kotlin.test.builders.classicFrontendStep
|
||||||
@@ -15,14 +16,18 @@ import org.jetbrains.kotlin.test.frontend.classic.handlers.OldNewInferenceMetaIn
|
|||||||
import org.jetbrains.kotlin.test.model.DependencyKind
|
import org.jetbrains.kotlin.test.model.DependencyKind
|
||||||
import org.jetbrains.kotlin.test.model.FrontendKinds
|
import org.jetbrains.kotlin.test.model.FrontendKinds
|
||||||
import org.jetbrains.kotlin.test.runners.AbstractKotlinCompilerTest
|
import org.jetbrains.kotlin.test.runners.AbstractKotlinCompilerTest
|
||||||
|
import org.jetbrains.kotlin.test.services.AbstractEnvironmentConfigurator
|
||||||
import org.jetbrains.kotlin.test.services.LibraryProvider
|
import org.jetbrains.kotlin.test.services.LibraryProvider
|
||||||
import org.jetbrains.kotlin.test.services.configuration.CommonEnvironmentConfigurator
|
import org.jetbrains.kotlin.test.services.configuration.CommonEnvironmentConfigurator
|
||||||
import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfigurator
|
import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfigurator
|
||||||
import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfiguratorJs
|
import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfiguratorJs
|
||||||
|
import org.jetbrains.kotlin.test.services.configuration.WasmEnvironmentConfiguratorWasi
|
||||||
import org.jetbrains.kotlin.test.services.sourceProviders.AdditionalDiagnosticsSourceFilesProvider
|
import org.jetbrains.kotlin.test.services.sourceProviders.AdditionalDiagnosticsSourceFilesProvider
|
||||||
import org.jetbrains.kotlin.test.services.sourceProviders.CoroutineHelpersSourceFilesProvider
|
import org.jetbrains.kotlin.test.services.sourceProviders.CoroutineHelpersSourceFilesProvider
|
||||||
|
|
||||||
abstract class AbstractDiagnosticsWasmTest : AbstractKotlinCompilerTest() {
|
abstract class AbstractDiagnosticsWasmTestBase(
|
||||||
|
private val wasmEnvironmentConfigurator: Constructor<AbstractEnvironmentConfigurator>,
|
||||||
|
) : AbstractKotlinCompilerTest() {
|
||||||
override fun TestConfigurationBuilder.configuration() {
|
override fun TestConfigurationBuilder.configuration() {
|
||||||
globalDefaults {
|
globalDefaults {
|
||||||
frontend = FrontendKinds.ClassicFrontend
|
frontend = FrontendKinds.ClassicFrontend
|
||||||
@@ -38,7 +43,7 @@ abstract class AbstractDiagnosticsWasmTest : AbstractKotlinCompilerTest() {
|
|||||||
|
|
||||||
useConfigurators(
|
useConfigurators(
|
||||||
::CommonEnvironmentConfigurator,
|
::CommonEnvironmentConfigurator,
|
||||||
::WasmEnvironmentConfiguratorJs,
|
wasmEnvironmentConfigurator,
|
||||||
)
|
)
|
||||||
|
|
||||||
useMetaInfoProcessors(::OldNewInferenceMetaInfoProcessor)
|
useMetaInfoProcessors(::OldNewInferenceMetaInfoProcessor)
|
||||||
@@ -56,3 +61,7 @@ abstract class AbstractDiagnosticsWasmTest : AbstractKotlinCompilerTest() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
abstract class AbstractDiagnosticsWasmTest : AbstractDiagnosticsWasmTestBase(::WasmEnvironmentConfiguratorJs)
|
||||||
|
abstract class AbstractDiagnosticsWasmWasiTest : AbstractDiagnosticsWasmTestBase(::WasmEnvironmentConfiguratorWasi)
|
||||||
|
|
||||||
|
|||||||
+32
@@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2023 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.wasm.test.diagnostics;
|
||||||
|
|
||||||
|
import com.intellij.testFramework.TestDataPath;
|
||||||
|
import org.jetbrains.kotlin.test.util.KtTestUtil;
|
||||||
|
import org.jetbrains.kotlin.test.TestMetadata;
|
||||||
|
import org.junit.jupiter.api.Nested;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.GenerateWasmTestsKt}. DO NOT MODIFY MANUALLY */
|
||||||
|
@SuppressWarnings("all")
|
||||||
|
@TestMetadata("compiler/testData/diagnostics/wasmWasiTests")
|
||||||
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
public class DiagnosticsFirWasmWasiTestGenerated extends AbstractDiagnosticsFirWasmWasiTest {
|
||||||
|
@Test
|
||||||
|
public void testAllFilesPresentInWasmWasiTests() throws Exception {
|
||||||
|
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/wasmWasiTests"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.fir\\.kts?$"), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("external.kt")
|
||||||
|
public void testExternal() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/wasmWasiTests/external.kt");
|
||||||
|
}
|
||||||
|
}
|
||||||
+32
@@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2023 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.wasm.test.diagnostics;
|
||||||
|
|
||||||
|
import com.intellij.testFramework.TestDataPath;
|
||||||
|
import org.jetbrains.kotlin.test.util.KtTestUtil;
|
||||||
|
import org.jetbrains.kotlin.test.TestMetadata;
|
||||||
|
import org.junit.jupiter.api.Nested;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.GenerateWasmTestsKt}. DO NOT MODIFY MANUALLY */
|
||||||
|
@SuppressWarnings("all")
|
||||||
|
@TestMetadata("compiler/testData/diagnostics/wasmWasiTests")
|
||||||
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
public class DiagnosticsWasmWasiTestGenerated extends AbstractDiagnosticsWasmWasiTest {
|
||||||
|
@Test
|
||||||
|
public void testAllFilesPresentInWasmWasiTests() throws Exception {
|
||||||
|
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/wasmWasiTests"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.fir\\.kts?$"), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("external.kt")
|
||||||
|
public void testExternal() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/wasmWasiTests/external.kt");
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user