From 05ab17f1e161261677eb33796dc2a9231f23ecfc Mon Sep 17 00:00:00 2001 From: Anton Bannykh Date: Tue, 24 Dec 2019 21:58:51 +0300 Subject: [PATCH] ThrowableLowering --- .../ir/backend/js/lower/ThrowableLowering.kt | 14 ++++++++------ .../src/org/jetbrains/kotlin/ir/util/IrUtils.kt | 9 +++++++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ThrowableLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ThrowableLowering.kt index 219e5f5aa7f..7032be95797 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ThrowableLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ThrowableLowering.kt @@ -5,21 +5,21 @@ package org.jetbrains.kotlin.ir.backend.js.lower -import org.jetbrains.kotlin.backend.common.FileLoweringPass +import org.jetbrains.kotlin.backend.common.BodyLoweringPass import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext import org.jetbrains.kotlin.ir.declarations.IrClass +import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent -import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.types.isNullableString import org.jetbrains.kotlin.ir.types.makeNotNull -import org.jetbrains.kotlin.ir.util.isThrowable +import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.visitors.IrElementTransformer -class ThrowableLowering(val context: JsIrBackendContext) : FileLoweringPass { +class ThrowableLowering(val context: JsIrBackendContext) : BodyLoweringPass { private val nothingNType get() = context.irBuiltIns.nothingNType private val throwableConstructors = context.throwableConstructors @@ -33,8 +33,10 @@ class ThrowableLowering(val context: JsIrBackendContext) : FileLoweringPass { val cause: IrExpression ) - override fun lower(irFile: IrFile) { - irFile.transformChildren(Transformer(), irFile) + override fun lower(irBody: IrBody, container: IrDeclaration) { + container.parentClassOrNull.let { enclosingClass -> + irBody.transformChildren(Transformer(), enclosingClass ?: container.file) + } } private fun IrFunctionAccessExpression.extractThrowableArguments(): ThrowableArguments = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt index 0b7f4ff974d..90ae80796f6 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt @@ -609,6 +609,15 @@ val IrDeclaration.fileOrNull: IrFile? val IrDeclaration.file: IrFile get() = fileOrNull ?: TODO("Unknown file") +val IrDeclaration.parentClassOrNull: IrClass? + get() = parent.let { + when (it) { + is IrClass -> it + is IrDeclaration -> it.parentClassOrNull + else -> null + } + } + val IrFunction.allTypeParameters: List get() = if (this is IrConstructor) parentAsClass.typeParameters + typeParameters