From 5b2acea98fd11b26ce2fe312d65e0aee7d2699da Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Mon, 14 Jun 2021 18:04:05 +0200 Subject: [PATCH] FIR: Add analysis flag for loading IR builtins from sources --- .../common/arguments/CommonCompilerArguments.kt | 8 ++++++++ .../org/jetbrains/kotlin/config/AnalysisFlags.kt | 3 +++ .../kotlin/fir/backend/Fir2IrConverter.kt | 9 ++++++--- compiler/testData/cli/js/jsExtraHelp.out | 1 + compiler/testData/cli/jvm/extraHelp.out | 1 + .../AbstractIrInterpreterAfterFir2IrTest.kt | 15 +++++++++++++++ 6 files changed, 34 insertions(+), 3 deletions(-) diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.kt index 00e0235e38c..e22dc451845 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.kt @@ -369,6 +369,13 @@ abstract class CommonCompilerArguments : CommonToolArguments() { ) var extendedCompilerChecks: Boolean by FreezableVar(false) + @GradleOption(DefaultValues.BooleanFalseDefault::class) + @Argument( + value = "-Xbuiltins-from-sources", + description = "Compile builtIns from sources" + ) + var builtInsFromSources: Boolean by FreezableVar(false) + @Argument( value = "-Xunrestricted-builder-inference", description = "Eliminate builder inference restrictions like allowance of returning type variables of a builder inference call" @@ -403,6 +410,7 @@ abstract class CommonCompilerArguments : CommonToolArguments() { ) put(AnalysisFlags.extendedCompilerChecks, extendedCompilerChecks) put(AnalysisFlags.allowKotlinPackage, allowKotlinPackage) + put(AnalysisFlags.builtInsFromSources, builtInsFromSources) } } diff --git a/compiler/config/src/org/jetbrains/kotlin/config/AnalysisFlags.kt b/compiler/config/src/org/jetbrains/kotlin/config/AnalysisFlags.kt index a6ee90e450f..0382c044782 100644 --- a/compiler/config/src/org/jetbrains/kotlin/config/AnalysisFlags.kt +++ b/compiler/config/src/org/jetbrains/kotlin/config/AnalysisFlags.kt @@ -53,4 +53,7 @@ object AnalysisFlags { @JvmStatic val allowKotlinPackage by AnalysisFlag.Delegates.Boolean + + @JvmStatic + val builtInsFromSources by AnalysisFlag.Delegates.Boolean } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt index aae8ab31604..125fcfb1e79 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.fir.backend +import org.jetbrains.kotlin.config.AnalysisFlags import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.backend.evaluate.evaluateConstants @@ -266,7 +267,6 @@ class Fir2IrConverter( val moduleDescriptor = FirModuleDescriptor(session) val symbolTable = SymbolTable(signaturer, irFactory) val signatureComposer = FirBasedSignatureComposer(mangler) -// FirBuiltinSymbols(irBuiltIns, symbolTable) val components = Fir2IrComponentsStorage(session, scopeSession, symbolTable, irFactory, signatureComposer) val classifierStorage = Fir2IrClassifierStorage(components) components.classifierStorage = classifierStorage @@ -275,8 +275,11 @@ class Fir2IrConverter( components.visibilityConverter = visibilityConverter val typeConverter = Fir2IrTypeConverter(components) components.typeConverter = typeConverter - val irBuiltIns = //IrBuiltInsOverDescriptors(moduleDescriptor.builtIns, typeTranslator, symbolTable) - IrBuiltInsOverFir(components, languageVersionSettings, moduleDescriptor) + val irBuiltIns = + IrBuiltInsOverFir( + components, languageVersionSettings, moduleDescriptor, + languageVersionSettings.getFlag(AnalysisFlags.builtInsFromSources) + ) components.irBuiltIns = irBuiltIns val converter = Fir2IrConverter(moduleDescriptor, components) val conversionScope = Fir2IrConversionScope() diff --git a/compiler/testData/cli/js/jsExtraHelp.out b/compiler/testData/cli/js/jsExtraHelp.out index 1c3d59c060a..1735f976a99 100644 --- a/compiler/testData/cli/js/jsExtraHelp.out +++ b/compiler/testData/cli/js/jsExtraHelp.out @@ -36,6 +36,7 @@ where advanced options include: -Xwasm Use experimental WebAssembly compiler backend -Xallow-kotlin-package Allow compiling code in package 'kotlin' and allow not requiring kotlin.stdlib in module-info -Xallow-result-return-type Allow compiling code when `kotlin.Result` is used as a return type + -Xbuiltins-from-sources Compile builtIns from sources -Xcheck-phase-conditions Check pre- and postconditions on phases -Xcheck-sticky-phase-conditions Run sticky condition checks on subsequent phases as well. Implies -Xcheck-phase-conditions diff --git a/compiler/testData/cli/jvm/extraHelp.out b/compiler/testData/cli/jvm/extraHelp.out index 9702ea4e583..c1e27203736 100644 --- a/compiler/testData/cli/jvm/extraHelp.out +++ b/compiler/testData/cli/jvm/extraHelp.out @@ -147,6 +147,7 @@ where advanced options include: -Xuse-type-table Use type table in metadata serialization -Xallow-kotlin-package Allow compiling code in package 'kotlin' and allow not requiring kotlin.stdlib in module-info -Xallow-result-return-type Allow compiling code when `kotlin.Result` is used as a return type + -Xbuiltins-from-sources Compile builtIns from sources -Xcheck-phase-conditions Check pre- and postconditions on phases -Xcheck-sticky-phase-conditions Run sticky condition checks on subsequent phases as well. Implies -Xcheck-phase-conditions diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/ir/interpreter/AbstractIrInterpreterAfterFir2IrTest.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/ir/interpreter/AbstractIrInterpreterAfterFir2IrTest.kt index 48bb7898834..5da0245c656 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/ir/interpreter/AbstractIrInterpreterAfterFir2IrTest.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/ir/interpreter/AbstractIrInterpreterAfterFir2IrTest.kt @@ -5,6 +5,9 @@ package org.jetbrains.kotlin.test.runners.ir.interpreter +import org.jetbrains.kotlin.config.AnalysisFlag +import org.jetbrains.kotlin.config.AnalysisFlags +import org.jetbrains.kotlin.config.LanguageVersion import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.test.TargetBackend import org.jetbrains.kotlin.test.backend.BlackBoxCodegenSuppressor @@ -12,12 +15,15 @@ import org.jetbrains.kotlin.test.backend.handlers.IrInterpreterBackendHandler import org.jetbrains.kotlin.test.backend.ir.JvmIrBackendFacade import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives +import org.jetbrains.kotlin.test.directives.model.RegisteredDirectives import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives import org.jetbrains.kotlin.test.frontend.fir.Fir2IrResultsConverter import org.jetbrains.kotlin.test.frontend.fir.FirFrontendFacade import org.jetbrains.kotlin.test.model.* import org.jetbrains.kotlin.test.preprocessors.IrInterpreterImplicitKotlinImports import org.jetbrains.kotlin.test.runners.AbstractKotlinCompilerWithTargetBackendTest +import org.jetbrains.kotlin.test.services.EnvironmentConfigurator +import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.configuration.CommonEnvironmentConfigurator import org.jetbrains.kotlin.test.services.configuration.JvmEnvironmentConfigurator import org.jetbrains.kotlin.test.services.sourceProviders.IrInterpreterHelpersSourceFilesProvider @@ -40,6 +46,7 @@ open class AbstractIrInterpreterAfterFir2IrTest : AbstractKotlinCompilerWithTarg useConfigurators( ::CommonEnvironmentConfigurator, + ::IrInterpreterEnvironmentConfigurator, ::JvmEnvironmentConfigurator, ) @@ -56,3 +63,11 @@ open class AbstractIrInterpreterAfterFir2IrTest : AbstractKotlinCompilerWithTarg } } +class IrInterpreterEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfigurator(testServices) { + override fun provideAdditionalAnalysisFlags( + directives: RegisteredDirectives, + languageVersion: LanguageVersion + ): Map, Any?> { + return super.provideAdditionalAnalysisFlags(directives, languageVersion) + (AnalysisFlags.builtInsFromSources to true) + } +} \ No newline at end of file