From b3525b077cbc0a281af6581e94958475e572d960 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Wed, 24 Jul 2019 16:13:14 +0300 Subject: [PATCH] IR: IrTypeAlias: isActual --- .../jetbrains/kotlin/ir/declarations/IrTypeAlias.kt | 1 + .../kotlin/ir/declarations/impl/IrTypeAliasImpl.kt | 2 ++ .../kotlin/ir/declarations/lazy/IrLazyTypeAlias.kt | 10 +++------- .../kotlin/ir/util/DeclarationStubGenerator.kt | 6 +++++- .../kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt | 1 + .../org/jetbrains/kotlin/ir/util/RenderIrElement.kt | 8 +++++++- 6 files changed, 19 insertions(+), 9 deletions(-) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeAlias.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeAlias.kt index ae08d13265d..554ba7d9119 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeAlias.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeAlias.kt @@ -16,5 +16,6 @@ interface IrTypeAlias : IrTypeParametersContainer { override val descriptor: TypeAliasDescriptor + val isActual: Boolean val expandedType: IrType } \ No newline at end of file diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeAliasImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeAliasImpl.kt index 2cd639ee5bb..383de12d769 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeAliasImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrTypeAliasImpl.kt @@ -26,6 +26,7 @@ class IrTypeAliasImpl( override val name: Name, override val visibility: Visibility, override val expandedType: IrType, + override val isActual: Boolean, origin: IrDeclarationOrigin ) : IrDeclarationBase(startOffset, endOffset, origin), @@ -65,6 +66,7 @@ class IrTypeAliasImpl( symbol.descriptor.name, symbol.descriptor.visibility, expandedType, + symbol.descriptor.isActual, origin ) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyTypeAlias.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyTypeAlias.kt index f1c9979b700..2265c0bb92d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyTypeAlias.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyTypeAlias.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.ir.declarations.lazy -import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin @@ -25,6 +24,9 @@ class IrLazyTypeAlias( endOffset: Int, origin: IrDeclarationOrigin, override val symbol: IrTypeAliasSymbol, + override val name: Name, + override val visibility: Visibility, + override val isActual: Boolean, stubGenerator: DeclarationStubGenerator, typeTranslator: TypeTranslator ) : @@ -38,12 +40,6 @@ class IrLazyTypeAlias( override val descriptor: TypeAliasDescriptor get() = symbol.descriptor - override val name: Name - get() = descriptor.name - - override val visibility: Visibility - get() = descriptor.visibility - override val typeParameters: MutableList by lazy { descriptor.declaredTypeParameters.mapTo(arrayListOf()) { stubGenerator.generateOrGetTypeParameterStub(it) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt index 3ac5f0c07d1..7fa82da3324 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt @@ -251,7 +251,11 @@ class DeclarationStubGenerator( } val origin = computeOrigin(descriptor) return symbolTable.declareTypeAlias(descriptor) { - IrLazyTypeAlias(UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, it, this, typeTranslator) + IrLazyTypeAlias( + UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, + it, it.descriptor.name, it.descriptor.visibility, it.descriptor.isActual, + this, typeTranslator + ) } } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt index 79b89ffb0d5..384fd3c3aae 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt @@ -341,6 +341,7 @@ open class DeepCopyIrTreeWithSymbols( symbolRenamer.getTypeAliasName(declaration.symbol), declaration.visibility, declaration.expandedType.remapType(), + declaration.isActual, mapDeclarationOrigin(declaration.origin) ).apply { transformAnnotations(declaration) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt index c86aaec5271..bad56ef279f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/RenderIrElement.kt @@ -498,9 +498,15 @@ class RenderIrElementVisitor : IrElementVisitor { override fun visitTypeAlias(declaration: IrTypeAlias, data: Nothing?): String = declaration.run { "TYPEALIAS ${declaration.renderOriginIfNonTrivial()}" + - "name:$name visibility:$visibility expandedType:${expandedType.render()}" + "name:$name visibility:$visibility expandedType:${expandedType.render()}" + + renderTypeAliasFlags() } + private fun IrTypeAlias.renderTypeAliasFlags(): String = + renderFlagsList( + "actual".takeIf { isActual } + ) + private fun IrLocalDelegatedProperty.renderLocalDelegatedPropertyFlags() = if (isVar) "var" else "val"