Use symbols in IrGet/SetValue in JvmSharedVariablesManager

This commit is contained in:
Mikhael Bogdanov
2018-05-03 11:00:35 +02:00
parent bb6c837f6b
commit 35df7966cf
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrGetValue import org.jetbrains.kotlin.ir.expressions.IrGetValue
import org.jetbrains.kotlin.ir.expressions.IrSetVariable import org.jetbrains.kotlin.ir.expressions.IrSetVariable
import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.scopes.MemberScope import org.jetbrains.kotlin.resolve.scopes.MemberScope
@@ -41,6 +42,9 @@ class JvmSharedVariablesManager(val builtIns: KotlinBuiltIns) : SharedVariablesM
private val refNamespaceClass = private val refNamespaceClass =
KnownClassDescriptor.createClass(Name.identifier("Ref"), kotlinJvmInternalPackage, listOf(builtIns.anyType)) KnownClassDescriptor.createClass(Name.identifier("Ref"), kotlinJvmInternalPackage, listOf(builtIns.anyType))
//TODO: avoid tracking symbols
private val sharedVariableDescriptorToSymbol = mutableMapOf<VariableDescriptor, IrVariableSymbol>()
private class PrimitiveRefDescriptorsProvider(type: KotlinType, refClass: ClassDescriptor) { private class PrimitiveRefDescriptorsProvider(type: KotlinType, refClass: ClassDescriptor) {
val refType: KotlinType = refClass.defaultType val refType: KotlinType = refClass.defaultType
@@ -154,12 +158,14 @@ class JvmSharedVariablesManager(val builtIns: KotlinBuiltIns) : SharedVariablesM
sharedVariableDescriptor, refConstructorCall sharedVariableDescriptor, refConstructorCall
) )
sharedVariableDescriptorToSymbol[sharedVariableDescriptor] = sharedVariableDeclaration.symbol
val initializer = originalDeclaration.initializer ?: return sharedVariableDeclaration val initializer = originalDeclaration.initializer ?: return sharedVariableDeclaration
val sharedVariableInitialization = IrSetFieldImpl( val sharedVariableInitialization = IrSetFieldImpl(
initializer.startOffset, initializer.endOffset, initializer.startOffset, initializer.endOffset,
elementPropertyDescriptor, elementPropertyDescriptor,
IrGetValueImpl(initializer.startOffset, initializer.endOffset, sharedVariableDescriptor), IrGetValueImpl(initializer.startOffset, initializer.endOffset, sharedVariableDeclaration.symbol),
initializer initializer
) )
@@ -179,7 +185,7 @@ class JvmSharedVariablesManager(val builtIns: KotlinBuiltIns) : SharedVariablesM
IrGetFieldImpl( IrGetFieldImpl(
originalGet.startOffset, originalGet.endOffset, originalGet.startOffset, originalGet.endOffset,
getElementFieldDescriptor(originalGet.descriptor.type), getElementFieldDescriptor(originalGet.descriptor.type),
IrGetValueImpl(originalGet.startOffset, originalGet.endOffset, sharedVariableDescriptor), IrGetValueImpl(originalGet.startOffset, originalGet.endOffset, sharedVariableDescriptorToSymbol[sharedVariableDescriptor]!!),
originalGet.origin originalGet.origin
) )
@@ -187,7 +193,7 @@ class JvmSharedVariablesManager(val builtIns: KotlinBuiltIns) : SharedVariablesM
IrSetFieldImpl( IrSetFieldImpl(
originalSet.startOffset, originalSet.endOffset, originalSet.startOffset, originalSet.endOffset,
getElementFieldDescriptor(originalSet.descriptor.type), getElementFieldDescriptor(originalSet.descriptor.type),
IrGetValueImpl(originalSet.startOffset, originalSet.endOffset, sharedVariableDescriptor), IrGetValueImpl(originalSet.startOffset, originalSet.endOffset, sharedVariableDescriptorToSymbol[sharedVariableDescriptor]!!),
originalSet.value, originalSet.value,
originalSet.origin originalSet.origin
) )