From 996137576e22a953906001046545106c1a3503d5 Mon Sep 17 00:00:00 2001 From: Roman Artemev Date: Thu, 14 May 2020 13:20:05 +0300 Subject: [PATCH] [JS SCRIPT] Fix script lowering --- .../backend/js/lower/ScriptRemoveReceiverLowering.kt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ScriptRemoveReceiverLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ScriptRemoveReceiverLowering.kt index a3890365153..55afe380e07 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ScriptRemoveReceiverLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ScriptRemoveReceiverLowering.kt @@ -7,16 +7,17 @@ package org.jetbrains.kotlin.ir.backend.js.lower import org.jetbrains.kotlin.backend.common.CommonBackendContext import org.jetbrains.kotlin.backend.common.FileLoweringPass -import org.jetbrains.kotlin.backend.common.phaser.makeIrModulePhase import org.jetbrains.kotlin.descriptors.ScriptDescriptor import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* +import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl import org.jetbrains.kotlin.ir.expressions.impl.IrFunctionReferenceImpl import org.jetbrains.kotlin.ir.expressions.impl.IrPropertyReferenceImpl import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.types.IrSimpleType import org.jetbrains.kotlin.ir.types.IrTypeProjection import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl +import org.jetbrains.kotlin.ir.types.makeNullable import org.jetbrains.kotlin.ir.util.transformFlat import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid @@ -33,6 +34,8 @@ class ScriptRemoveReceiverLowering(val context: CommonBackendContext) : FileLowe } } + private fun IrExpression.nullConst() = IrConstImpl.constNull(startOffset, endOffset, type.makeNullable()) + fun lower(script: IrScript): List { val transformer: IrElementTransformerVoid = object : IrElementTransformerVoid() { override fun visitCall(expression: IrCall): IrExpression { @@ -42,6 +45,11 @@ class ScriptRemoveReceiverLowering(val context: CommonBackendContext) : FileLowe return super.visitCall(expression) } + override fun visitGetValue(expression: IrGetValue): IrExpression { + return if (expression.symbol === script.thisReceiver.symbol) expression.nullConst() + else expression + } + override fun visitFieldAccess(expression: IrFieldAccessExpression): IrExpression { if (expression.symbol.owner.parent is IrScript) { expression.receiver = null