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
This commit is contained in:
Mikhail Glukhikh
2019-05-23 11:35:53 +03:00
parent f4fdc66a34
commit 05154d24d4
5 changed files with 15 additions and 9 deletions
@@ -374,7 +374,7 @@ object KotlinToJVMBytecodeCompiler {
val performanceManager = environment.configuration.get(CLIConfigurationKeys.PERF_MANAGER) val performanceManager = environment.configuration.get(CLIConfigurationKeys.PERF_MANAGER)
performanceManager?.notifyGenerationStarted() performanceManager?.notifyGenerationStarted()
generationState.beforeCompile() generationState.beforeCompile()
codegenFactory.generateModule( codegenFactory.generateModuleInFrontendIRMode(
generationState, moduleFragment, CompilationErrorHandler.THROW_EXCEPTION, symbolTable, sourceManager generationState, moduleFragment, CompilationErrorHandler.THROW_EXCEPTION, symbolTable, sourceManager
) )
CodegenFactory.doCheckCancelled(generationState) CodegenFactory.doCheckCancelled(generationState)
@@ -30,7 +30,8 @@ class JvmBackendContext(
override val irBuiltIns: IrBuiltIns, override val irBuiltIns: IrBuiltIns,
irModuleFragment: IrModuleFragment, irModuleFragment: IrModuleFragment,
symbolTable: SymbolTable, symbolTable: SymbolTable,
val phaseConfig: PhaseConfig val phaseConfig: PhaseConfig,
private val firMode: Boolean
) : CommonBackendContext { ) : CommonBackendContext {
override val builtIns = state.module.builtIns override val builtIns = state.module.builtIns
override val declarationFactory: JvmDeclarationFactory = JvmDeclarationFactory(state) override val declarationFactory: JvmDeclarationFactory = JvmDeclarationFactory(state)
@@ -70,7 +71,7 @@ class JvmBackendContext(
irModuleFragment: IrModuleFragment, irModuleFragment: IrModuleFragment,
symbolTable: ReferenceSymbolTable symbolTable: ReferenceSymbolTable
) : Ir<JvmBackendContext>(this, irModuleFragment) { ) : Ir<JvmBackendContext>(this, irModuleFragment) {
override val symbols = JvmSymbols(this@JvmBackendContext, symbolTable) override val symbols = JvmSymbols(this@JvmBackendContext, symbolTable, firMode)
override fun shouldGenerateHandlerParameterForDefaultBodyFun() = true override fun shouldGenerateHandlerParameterForDefaultBodyFun() = true
} }
@@ -48,10 +48,11 @@ object JvmBackendFacade {
irModuleFragment: IrModuleFragment, irModuleFragment: IrModuleFragment,
symbolTable: SymbolTable, symbolTable: SymbolTable,
sourceManager: PsiSourceManager, sourceManager: PsiSourceManager,
phaseConfig: PhaseConfig phaseConfig: PhaseConfig,
firMode: Boolean = false
) { ) {
val jvmBackendContext = JvmBackendContext( val jvmBackendContext = JvmBackendContext(
state, sourceManager, irModuleFragment.irBuiltins, irModuleFragment, symbolTable, phaseConfig state, sourceManager, irModuleFragment.irBuiltins, irModuleFragment, symbolTable, phaseConfig, firMode
) )
//TODO //TODO
ExternalDependenciesGenerator( ExternalDependenciesGenerator(
@@ -36,14 +36,16 @@ class JvmIrCodegenFactory(private val phaseConfig: PhaseConfig) : CodegenFactory
JvmBackendFacade.doGenerateFilesInternal(state, errorHandler, irModuleFragment, psi2irContext, phaseConfig) JvmBackendFacade.doGenerateFilesInternal(state, errorHandler, irModuleFragment, psi2irContext, phaseConfig)
} }
fun generateModule( fun generateModuleInFrontendIRMode(
state: GenerationState, state: GenerationState,
irModuleFragment: IrModuleFragment, irModuleFragment: IrModuleFragment,
errorHandler: CompilationErrorHandler, errorHandler: CompilationErrorHandler,
symbolTable: SymbolTable, symbolTable: SymbolTable,
sourceManager: PsiSourceManager 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<KtFile>, fqName: FqName): PackageCodegen { override fun createPackageCodegen(state: GenerationState, files: Collection<KtFile>, fqName: FqName): PackageCodegen {
@@ -31,7 +31,8 @@ import org.jetbrains.kotlin.types.Variance
class JvmSymbols( class JvmSymbols(
context: JvmBackendContext, context: JvmBackendContext,
private val symbolTable: ReferenceSymbolTable private val symbolTable: ReferenceSymbolTable,
firMode: Boolean
) : Symbols<JvmBackendContext>(context, symbolTable) { ) : Symbols<JvmBackendContext>(context, symbolTable) {
private val storageManager = LockBasedStorageManager(this::class.java.simpleName) private val storageManager = LockBasedStorageManager(this::class.java.simpleName)
@@ -95,7 +96,8 @@ class JvmSymbols(
override val getContinuation: IrSimpleFunctionSymbol override val getContinuation: IrSimpleFunctionSymbol
get() = TODO("not implemented") 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 -> val lambdaClass: IrClassSymbol = createClass(FqName("kotlin.jvm.internal.Lambda")) { klass ->
klass.addConstructor().apply { klass.addConstructor().apply {