From 2b43b09444fd2051390d8646a29b12143ef4c362 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Tue, 23 Jul 2019 14:36:04 +0300 Subject: [PATCH] IR: IrTypeAlias: Strip 'typealias' declarations in back-ends --- .../StripTypeAliasDeclarationsLowering.kt | 44 +++++++++++++++++++ .../kotlin/ir/backend/js/JsLoweringPhases.kt | 7 +++ .../jetbrains/kotlin/backend/jvm/JvmLower.kt | 7 +++ 3 files changed, 58 insertions(+) create mode 100644 compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/StripTypeAliasDeclarationsLowering.kt diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/StripTypeAliasDeclarationsLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/StripTypeAliasDeclarationsLowering.kt new file mode 100644 index 00000000000..bd92c60caac --- /dev/null +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/StripTypeAliasDeclarationsLowering.kt @@ -0,0 +1,44 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.backend.common.lower + +import org.jetbrains.kotlin.backend.common.FileLoweringPass +import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.declarations.IrClass +import org.jetbrains.kotlin.ir.declarations.IrFile +import org.jetbrains.kotlin.ir.declarations.IrTypeAlias +import org.jetbrains.kotlin.ir.expressions.IrContainerExpression +import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid +import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid +import org.jetbrains.kotlin.ir.visitors.acceptVoid + +class StripTypeAliasDeclarationsLowering : + IrElementVisitorVoid, + FileLoweringPass { + + override fun lower(irFile: IrFile) { + irFile.acceptVoid(this) + } + + override fun visitElement(element: IrElement) { + element.acceptChildrenVoid(this) + } + + override fun visitFile(declaration: IrFile) { + declaration.acceptChildrenVoid(this) + declaration.declarations.removeAll { it is IrTypeAlias } + } + + override fun visitClass(declaration: IrClass) { + declaration.acceptChildrenVoid(this) + declaration.declarations.removeAll { it is IrTypeAlias } + } + + override fun visitContainerExpression(expression: IrContainerExpression) { + expression.acceptChildrenVoid(this) + expression.statements.removeAll { it is IrTypeAlias } + } +} \ No newline at end of file diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsLoweringPhases.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsLoweringPhases.kt index 65b85d0a968..7f32a548469 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsLoweringPhases.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/JsLoweringPhases.kt @@ -98,6 +98,12 @@ private val lateinitLoweringPhase = makeJsModulePhase( description = "Insert checks for lateinit field references" ) +private val stripTypeAliasDeclarationsPhase = makeJsModulePhase( + { StripTypeAliasDeclarationsLowering() }, + name = "StripTypeAliasDeclarations", + description = "Strip typealias declarations" +) + // TODO make all lambda-related stuff work with IrFunctionExpression and drop this phase private val provisionalFunctionExpressionPhase = makeJsModulePhase( { ProvisionalFunctionExpressionLowering() }, @@ -396,6 +402,7 @@ val jsPhases = namedIrModulePhase( lower = validateIrBeforeLowering then testGenerationPhase then expectDeclarationsRemovingPhase then + stripTypeAliasDeclarationsPhase then provisionalFunctionExpressionPhase then arrayConstructorPhase then functionInliningPhase then diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt index 25855992d8a..8e8a075ee1b 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt @@ -36,6 +36,12 @@ private fun makePatchParentsPhase(number: Int) = namedIrFilePhase( nlevels = 0 ) +private val stripTypeAliasDeclarationsPhase = makeIrFilePhase( + { StripTypeAliasDeclarationsLowering() }, + name = "StripTypeAliasDeclarations", + description = "Strip typealias declarations" +) + // TODO make all lambda-related stuff work with IrFunctionExpression and drop this phase private val provisionalFunctionExpressionPhase = makeIrFilePhase( { ProvisionalFunctionExpressionLowering() }, @@ -106,6 +112,7 @@ private val innerClassesPhase = makeIrFilePhase( ) private val jvmFilePhases = + stripTypeAliasDeclarationsPhase then provisionalFunctionExpressionPhase then inventNamesForLocalClassesPhase then kCallableNamePropertyPhase then