Propagate language version settings into IR type translator

This commit is contained in:
Mikhail Zarechenskiy
2018-07-24 02:27:55 +03:00
parent 165218890f
commit dddaa74dac
14 changed files with 62 additions and 19 deletions
@@ -32,6 +32,7 @@ class IrBuiltIns(
private val typeTranslator: TypeTranslator,
outerSymbolTable: SymbolTable? = null
) {
val languageVersionSettings = typeTranslator.languageVersionSettings
private val builtInsModule = builtIns.builtInsModule
@@ -39,7 +40,8 @@ class IrBuiltIns(
val irBuiltInsExternalPackageFragment = IrExternalPackageFragmentImpl(IrExternalPackageFragmentSymbolImpl(packageFragment))
private val symbolTable = outerSymbolTable ?: SymbolTable()
private val stubBuilder = DeclarationStubGenerator(builtInsModule, symbolTable, IrDeclarationOrigin.IR_BUILTINS_STUB)
private val stubBuilder =
DeclarationStubGenerator(builtInsModule, symbolTable, IrDeclarationOrigin.IR_BUILTINS_STUB, languageVersionSettings)
private fun ClassDescriptor.toIrSymbol() = symbolTable.referenceClass(this)
private fun KotlinType.toIrType() = typeTranslator.translateType(this)
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.ir.util
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.declarations.*
@@ -34,9 +35,10 @@ import org.jetbrains.kotlin.types.KotlinType
class DeclarationStubGenerator(
moduleDescriptor: ModuleDescriptor,
val symbolTable: SymbolTable,
val origin: IrDeclarationOrigin
val origin: IrDeclarationOrigin,
val languageVersionSettings: LanguageVersionSettings
) {
private val typeTranslator = TypeTranslator(symbolTable)
private val typeTranslator = TypeTranslator(symbolTable, languageVersionSettings)
private val constantValueGenerator = ConstantValueGenerator(moduleDescriptor, symbolTable)
init {
@@ -29,7 +29,9 @@ class ExternalDependenciesGenerator(
val symbolTable: SymbolTable,
val irBuiltIns: IrBuiltIns
) {
private val stubGenerator = DeclarationStubGenerator(moduleDescriptor, symbolTable, IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB)
private val stubGenerator = DeclarationStubGenerator(
moduleDescriptor, symbolTable, IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB, irBuiltIns.languageVersionSettings
)
fun generateUnboundSymbolsAsDependencies(irModule: IrModuleFragment) {
DependencyGenerationTask(irModule).run()
@@ -5,6 +5,8 @@
package org.jetbrains.kotlin.ir.util
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
import org.jetbrains.kotlin.descriptors.annotations.Annotations
@@ -20,7 +22,8 @@ import org.jetbrains.kotlin.types.*
import org.jetbrains.kotlin.types.typesApproximation.approximateCapturedTypes
class TypeTranslator(
private val symbolTable: SymbolTable
private val symbolTable: SymbolTable,
val languageVersionSettings: LanguageVersionSettings
) {
private val typeParametersResolver = ScopedTypeParametersResolver()
@@ -50,7 +53,7 @@ class TypeTranslator(
private fun translateType(ktType0: KotlinType, variance: Variance): IrTypeProjection {
// TODO "old" JVM BE does this for reified type arguments. Is it ok for arbitrary subexpressions?
val ktTypeUpper =
if (ktType0.constructor.isDenotable)
ktType0