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:
+1
-1
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user