From 05154d24d4378cccd0d17239c9a55d7864e1c669 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 23 May 2019 11:35:53 +0300 Subject: [PATCH] Select stub or real symbol for java.lang.Class in IR dependent on mode This commit fixes some black-box IR tests broken by stub introduction --- .../kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt | 2 +- .../org/jetbrains/kotlin/backend/jvm/JvmBackendContext.kt | 5 +++-- .../org/jetbrains/kotlin/backend/jvm/JvmBackendFacade.kt | 5 +++-- .../org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt | 6 ++++-- .../src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt | 6 ++++-- 5 files changed, 15 insertions(+), 9 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt index 8aff7af2993..a60163ab079 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt @@ -374,7 +374,7 @@ object KotlinToJVMBytecodeCompiler { val performanceManager = environment.configuration.get(CLIConfigurationKeys.PERF_MANAGER) performanceManager?.notifyGenerationStarted() generationState.beforeCompile() - codegenFactory.generateModule( + codegenFactory.generateModuleInFrontendIRMode( generationState, moduleFragment, CompilationErrorHandler.THROW_EXCEPTION, symbolTable, sourceManager ) CodegenFactory.doCheckCancelled(generationState) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendContext.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendContext.kt index e3e6a4568ba..7116767760f 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendContext.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendContext.kt @@ -30,7 +30,8 @@ class JvmBackendContext( override val irBuiltIns: IrBuiltIns, irModuleFragment: IrModuleFragment, symbolTable: SymbolTable, - val phaseConfig: PhaseConfig + val phaseConfig: PhaseConfig, + private val firMode: Boolean ) : CommonBackendContext { override val builtIns = state.module.builtIns override val declarationFactory: JvmDeclarationFactory = JvmDeclarationFactory(state) @@ -70,7 +71,7 @@ class JvmBackendContext( irModuleFragment: IrModuleFragment, symbolTable: ReferenceSymbolTable ) : Ir(this, irModuleFragment) { - override val symbols = JvmSymbols(this@JvmBackendContext, symbolTable) + override val symbols = JvmSymbols(this@JvmBackendContext, symbolTable, firMode) override fun shouldGenerateHandlerParameterForDefaultBodyFun() = true } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendFacade.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendFacade.kt index 27d3f6c5c47..22e38458f6f 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendFacade.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendFacade.kt @@ -48,10 +48,11 @@ object JvmBackendFacade { irModuleFragment: IrModuleFragment, symbolTable: SymbolTable, sourceManager: PsiSourceManager, - phaseConfig: PhaseConfig + phaseConfig: PhaseConfig, + firMode: Boolean = false ) { val jvmBackendContext = JvmBackendContext( - state, sourceManager, irModuleFragment.irBuiltins, irModuleFragment, symbolTable, phaseConfig + state, sourceManager, irModuleFragment.irBuiltins, irModuleFragment, symbolTable, phaseConfig, firMode ) //TODO ExternalDependenciesGenerator( diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt index f4a9c42299a..9c766ccbbc8 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmIrCodegenFactory.kt @@ -36,14 +36,16 @@ class JvmIrCodegenFactory(private val phaseConfig: PhaseConfig) : CodegenFactory JvmBackendFacade.doGenerateFilesInternal(state, errorHandler, irModuleFragment, psi2irContext, phaseConfig) } - fun generateModule( + fun generateModuleInFrontendIRMode( state: GenerationState, irModuleFragment: IrModuleFragment, errorHandler: CompilationErrorHandler, symbolTable: SymbolTable, sourceManager: PsiSourceManager ) { - JvmBackendFacade.doGenerateFilesInternal(state, errorHandler, irModuleFragment, symbolTable, sourceManager, phaseConfig) + JvmBackendFacade.doGenerateFilesInternal( + state, errorHandler, irModuleFragment, symbolTable, sourceManager, phaseConfig, firMode = true + ) } override fun createPackageCodegen(state: GenerationState, files: Collection, fqName: FqName): PackageCodegen { diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt index a7620deb22c..49913de29a5 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmSymbols.kt @@ -31,7 +31,8 @@ import org.jetbrains.kotlin.types.Variance class JvmSymbols( context: JvmBackendContext, - private val symbolTable: ReferenceSymbolTable + private val symbolTable: ReferenceSymbolTable, + firMode: Boolean ) : Symbols(context, symbolTable) { private val storageManager = LockBasedStorageManager(this::class.java.simpleName) @@ -95,7 +96,8 @@ class JvmSymbols( override val getContinuation: IrSimpleFunctionSymbol get() = TODO("not implemented") - val javaLangClass: IrClassSymbol = createClass(FqName("java.lang.Class")) {}.symbol + val javaLangClass: IrClassSymbol = + if (firMode) createClass(FqName("java.lang.Class")) {}.symbol else context.getTopLevelClass(FqName("java.lang.Class")) val lambdaClass: IrClassSymbol = createClass(FqName("kotlin.jvm.internal.Lambda")) { klass -> klass.addConstructor().apply {