IR: use threadLocal
This commit is contained in:
@@ -59,7 +59,7 @@ class DeclarationStubGenerator(
|
|||||||
lazyTable,
|
lazyTable,
|
||||||
languageVersionSettings,
|
languageVersionSettings,
|
||||||
moduleDescriptor.builtIns,
|
moduleDescriptor.builtIns,
|
||||||
LazyScopedTypeParametersResolver(lazyTable),
|
{ LazyScopedTypeParametersResolver(lazyTable) },
|
||||||
true,
|
true,
|
||||||
extensions
|
extensions
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.ir.symbols.impl.*
|
|||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
|
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
|
||||||
|
import org.jetbrains.kotlin.utils.threadLocal
|
||||||
|
|
||||||
interface ReferenceSymbolTable {
|
interface ReferenceSymbolTable {
|
||||||
fun referenceClass(descriptor: ClassDescriptor): IrClassSymbol
|
fun referenceClass(descriptor: ClassDescriptor): IrClassSymbol
|
||||||
@@ -327,13 +328,21 @@ class SymbolTable(
|
|||||||
private val typeAliasSymbolTable = FlatSymbolTable<TypeAliasDescriptor, IrTypeAlias, IrTypeAliasSymbol>()
|
private val typeAliasSymbolTable = FlatSymbolTable<TypeAliasDescriptor, IrTypeAlias, IrTypeAliasSymbol>()
|
||||||
|
|
||||||
private val globalTypeParameterSymbolTable = FlatSymbolTable<TypeParameterDescriptor, IrTypeParameter, IrTypeParameterSymbol>()
|
private val globalTypeParameterSymbolTable = FlatSymbolTable<TypeParameterDescriptor, IrTypeParameter, IrTypeParameterSymbol>()
|
||||||
private val scopedTypeParameterSymbolTable = ScopedSymbolTable<TypeParameterDescriptor, IrTypeParameter, IrTypeParameterSymbol>()
|
private val scopedTypeParameterSymbolTable by threadLocal {
|
||||||
private val valueParameterSymbolTable = ScopedSymbolTable<ParameterDescriptor, IrValueParameter, IrValueParameterSymbol>()
|
ScopedSymbolTable<TypeParameterDescriptor, IrTypeParameter, IrTypeParameterSymbol>()
|
||||||
private val variableSymbolTable = ScopedSymbolTable<VariableDescriptor, IrVariable, IrVariableSymbol>()
|
}
|
||||||
private val localDelegatedPropertySymbolTable =
|
private val valueParameterSymbolTable by threadLocal {
|
||||||
|
ScopedSymbolTable<ParameterDescriptor, IrValueParameter, IrValueParameterSymbol>()
|
||||||
|
}
|
||||||
|
private val variableSymbolTable by threadLocal {
|
||||||
|
ScopedSymbolTable<VariableDescriptor, IrVariable, IrVariableSymbol>()
|
||||||
|
}
|
||||||
|
private val localDelegatedPropertySymbolTable by threadLocal {
|
||||||
ScopedSymbolTable<VariableDescriptorWithAccessors, IrLocalDelegatedProperty, IrLocalDelegatedPropertySymbol>()
|
ScopedSymbolTable<VariableDescriptorWithAccessors, IrLocalDelegatedProperty, IrLocalDelegatedPropertySymbol>()
|
||||||
private val scopedSymbolTables =
|
}
|
||||||
|
private val scopedSymbolTables by threadLocal {
|
||||||
listOf(valueParameterSymbolTable, variableSymbolTable, scopedTypeParameterSymbolTable, localDelegatedPropertySymbolTable)
|
listOf(valueParameterSymbolTable, variableSymbolTable, scopedTypeParameterSymbolTable, localDelegatedPropertySymbolTable)
|
||||||
|
}
|
||||||
|
|
||||||
fun referenceExternalPackageFragment(descriptor: PackageFragmentDescriptor) =
|
fun referenceExternalPackageFragment(descriptor: PackageFragmentDescriptor) =
|
||||||
externalPackageFragmentTable.referenced(descriptor) { IrExternalPackageFragmentSymbolImpl(descriptor) }
|
externalPackageFragmentTable.referenced(descriptor) { IrExternalPackageFragmentSymbolImpl(descriptor) }
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.ir.types.impl.*
|
|||||||
import org.jetbrains.kotlin.types.*
|
import org.jetbrains.kotlin.types.*
|
||||||
import org.jetbrains.kotlin.types.typeUtil.replaceArgumentsWithStarProjections
|
import org.jetbrains.kotlin.types.typeUtil.replaceArgumentsWithStarProjections
|
||||||
import org.jetbrains.kotlin.types.typesApproximation.approximateCapturedTypes
|
import org.jetbrains.kotlin.types.typesApproximation.approximateCapturedTypes
|
||||||
|
import org.jetbrains.kotlin.utils.threadLocal
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
||||||
@@ -30,11 +31,13 @@ class TypeTranslator(
|
|||||||
private val symbolTable: ReferenceSymbolTable,
|
private val symbolTable: ReferenceSymbolTable,
|
||||||
val languageVersionSettings: LanguageVersionSettings,
|
val languageVersionSettings: LanguageVersionSettings,
|
||||||
builtIns: KotlinBuiltIns,
|
builtIns: KotlinBuiltIns,
|
||||||
private val typeParametersResolver: TypeParametersResolver = ScopedTypeParametersResolver(),
|
typeParametersResolverBuilder: () -> TypeParametersResolver = { ScopedTypeParametersResolver() },
|
||||||
private val enterTableScope: Boolean = false,
|
private val enterTableScope: Boolean = false,
|
||||||
private val extensions: StubGeneratorExtensions = StubGeneratorExtensions.EMPTY
|
private val extensions: StubGeneratorExtensions = StubGeneratorExtensions.EMPTY
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
private val typeParametersResolver by threadLocal { typeParametersResolverBuilder() }
|
||||||
|
|
||||||
private val erasureStack = Stack<PropertyDescriptor>()
|
private val erasureStack = Stack<PropertyDescriptor>()
|
||||||
|
|
||||||
private val typeApproximatorForNI = TypeApproximator(builtIns)
|
private val typeApproximatorForNI = TypeApproximator(builtIns)
|
||||||
|
|||||||
+2
-4
@@ -105,17 +105,15 @@ open class IdSignatureDescriptor(private val mangler: KotlinMangler.DescriptorMa
|
|||||||
reportUnexpectedDescriptor(descriptor)
|
reportUnexpectedDescriptor(descriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val composer by lazy { createSignatureBuilder() }
|
|
||||||
|
|
||||||
override fun composeSignature(descriptor: DeclarationDescriptor): IdSignature? {
|
override fun composeSignature(descriptor: DeclarationDescriptor): IdSignature? {
|
||||||
return if (mangler.run { descriptor.isExported() }) {
|
return if (mangler.run { descriptor.isExported() }) {
|
||||||
composer.buildSignature(descriptor)
|
createSignatureBuilder().buildSignature(descriptor)
|
||||||
} else null
|
} else null
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun composeEnumEntrySignature(descriptor: ClassDescriptor): IdSignature? {
|
override fun composeEnumEntrySignature(descriptor: ClassDescriptor): IdSignature? {
|
||||||
return if (mangler.run { descriptor.isExportEnumEntry() }) {
|
return if (mangler.run { descriptor.isExportEnumEntry() }) {
|
||||||
composer.buildSignature(descriptor)
|
createSignatureBuilder().buildSignature(descriptor)
|
||||||
} else null
|
} else null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user