MultipleCatchesLowering

This commit is contained in:
Anton Bannykh
2019-12-24 21:18:01 +03:00
committed by Anton Bannykh
parent f1442f5ae9
commit edf6dec63b
@@ -5,13 +5,12 @@
package org.jetbrains.kotlin.ir.backend.js.lower 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.IrStatement import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.IrDeclaration
import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent 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.*
import org.jetbrains.kotlin.ir.expressions.impl.IrBranchImpl import org.jetbrains.kotlin.ir.expressions.impl.IrBranchImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrCatchImpl import org.jetbrains.kotlin.ir.expressions.impl.IrCatchImpl
@@ -45,12 +44,12 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
* finally {} * finally {}
*/ */
class MultipleCatchesLowering(private val context: JsIrBackendContext) : FileLoweringPass { class MultipleCatchesLowering(private val context: JsIrBackendContext) : BodyLoweringPass {
private val litTrue get() = JsIrBuilder.buildBoolean(context.irBuiltIns.booleanType, true) private val litTrue get() = JsIrBuilder.buildBoolean(context.irBuiltIns.booleanType, true)
private val nothingType = context.irBuiltIns.nothingType private val nothingType = context.irBuiltIns.nothingType
override fun lower(irFile: IrFile) { override fun lower(irBody: IrBody, container: IrDeclaration) {
irFile.transformChildren(object : IrElementTransformer<IrDeclarationParent> { irBody.transform(object : IrElementTransformer<IrDeclarationParent> {
override fun visitDeclaration(declaration: IrDeclaration, data: IrDeclarationParent): IrStatement { override fun visitDeclaration(declaration: IrDeclaration, data: IrDeclarationParent): IrStatement {
val parent = (declaration as? IrDeclarationParent) ?: data val parent = (declaration as? IrDeclarationParent) ?: data
@@ -117,6 +116,6 @@ class MultipleCatchesLowering(private val context: JsIrBackendContext) : FileLow
private fun buildImplicitCast(value: IrExpression, toType: IrType) = private fun buildImplicitCast(value: IrExpression, toType: IrType) =
JsIrBuilder.buildTypeOperator(toType, IrTypeOperator.IMPLICIT_CAST, value, toType) JsIrBuilder.buildTypeOperator(toType, IrTypeOperator.IMPLICIT_CAST, value, toType)
}, irFile) }, container as? IrDeclarationParent ?: container.parent)
} }
} }