From 6445a2989349add0f8153805197da0bfb2f3f7df Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 10 Jan 2022 22:20:24 +0100 Subject: [PATCH] IR: remove type parameter in visitConst Co-authored-by: mcpiroman --- .../kotlin/backend/common/CheckIrElementVisitor.kt | 2 +- .../kotlin/ir/backend/js/lower/ConstLowering.kt | 5 ++--- .../irToJs/IrElementToJsExpressionTransformer.kt | 7 +++++-- .../ir/backend/js/transformers/irToJs/jsCode.kt | 4 ++-- .../kotlin/backend/jvm/codegen/ExpressionCodegen.kt | 2 +- .../kotlin/backend/wasm/ir2wasm/BodyGenerator.kt | 12 +++++++++--- .../ir/interpreter/checker/IrCompileTimeChecker.kt | 5 +++-- .../kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt | 3 +-- .../org/jetbrains/kotlin/ir/util/RenderIrElement.kt | 2 +- .../org/jetbrains/kotlin/ir/util/dumpKotlinLike.kt | 2 +- .../kotlin/ir/visitors/IrElementTransformer.kt | 4 ++-- .../kotlin/ir/visitors/IrElementTransformerVoid.kt | 6 +++--- .../jetbrains/kotlin/ir/visitors/IrElementVisitor.kt | 2 +- .../kotlin/ir/visitors/IrElementVisitorVoid.kt | 4 ++-- .../optimizations/FileInitializersOptimization.kt | 12 ++++++------ 15 files changed, 40 insertions(+), 32 deletions(-) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/CheckIrElementVisitor.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/CheckIrElementVisitor.kt index 72340b2e815..8b010f867c1 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/CheckIrElementVisitor.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/CheckIrElementVisitor.kt @@ -75,7 +75,7 @@ class CheckIrElementVisitor( } } - override fun visitConst(expression: IrConst) { + override fun visitConst(expression: IrConst<*>) { super.visitConst(expression) @Suppress("UNUSED_VARIABLE") diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ConstLowering.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ConstLowering.kt index c69fe1b9bc4..2b7a6812aa2 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ConstLowering.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/ConstLowering.kt @@ -25,7 +25,6 @@ import org.jetbrains.kotlin.ir.util.isUnsigned import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid - class ConstTransformer(private val context: JsIrBackendContext) : IrElementTransformerVoid() { private fun lowerConst( irClass: IrClassSymbol, @@ -44,7 +43,7 @@ class ConstTransformer(private val context: JsIrBackendContext) : IrElementTrans private fun createLong(v: Long): IrExpression = lowerConst(context.intrinsics.longClassSymbol, IrConstImpl.Companion::int, v.toInt(), (v shr 32).toInt()) - override fun visitConst(expression: IrConst): IrExpression { + override fun visitConst(expression: IrConst<*>): IrExpression { with(context.intrinsics) { if (expression.type.isUnsigned() && expression.kind != IrConstKind.Null) { return when (expression.type.classifierOrNull) { @@ -76,4 +75,4 @@ class ConstLowering(private val context: JsIrBackendContext) : BodyLoweringPass override fun lower(irBody: IrBody, container: IrDeclaration) { irBody.transformChildrenVoid(ConstTransformer(context)) } -} \ No newline at end of file +} diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrElementToJsExpressionTransformer.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrElementToJsExpressionTransformer.kt index 298ad4a96c4..086c7027483 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrElementToJsExpressionTransformer.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrElementToJsExpressionTransformer.kt @@ -8,7 +8,10 @@ package org.jetbrains.kotlin.ir.backend.js.transformers.irToJs import org.jetbrains.kotlin.backend.common.compilationException import org.jetbrains.kotlin.backend.common.ir.isElseBranch import org.jetbrains.kotlin.descriptors.ClassKind -import org.jetbrains.kotlin.ir.backend.js.utils.* +import org.jetbrains.kotlin.ir.backend.js.utils.JsGenerationContext +import org.jetbrains.kotlin.ir.backend.js.utils.Namer +import org.jetbrains.kotlin.ir.backend.js.utils.emptyScope +import org.jetbrains.kotlin.ir.backend.js.utils.getJsNameOrKotlinName import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.types.isString @@ -50,7 +53,7 @@ class IrElementToJsExpressionTransformer : BaseIrElementToJsNodeTransformer visitConst(expression: IrConst, context: JsGenerationContext): JsExpression { + override fun visitConst(expression: IrConst<*>, context: JsGenerationContext): JsExpression { val kind = expression.kind return when (kind) { is IrConstKind.String -> JsStringLiteral(kind.valueOf(expression)) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/jsCode.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/jsCode.kt index b14de2b4209..e3ffbfcd966 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/jsCode.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/jsCode.kt @@ -89,7 +89,7 @@ fun foldString(expression: IrExpression, context: JsIrBackendContext): String? { expression.acceptChildrenVoid(this) } - override fun visitConst(expression: IrConst) { + override fun visitConst(expression: IrConst<*>) { builder.append(expression.kind.valueOf(expression)) } @@ -109,4 +109,4 @@ private class InitFunVisitor(private val context: JsIrBackendContext) : IrElemen override fun visitSetField(expression: IrSetField) { context.fieldToInitializer[expression.symbol.owner] = expression.value } -} \ No newline at end of file +} diff --git a/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt b/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt index ca5dbc11549..402a03e1b4a 100644 --- a/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt +++ b/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt @@ -792,7 +792,7 @@ class ExpressionCodegen( return unitValue } - override fun visitConst(expression: IrConst, data: BlockInfo): PromisedValue { + override fun visitConst(expression: IrConst<*>, data: BlockInfo): PromisedValue { expression.markLineNumber(startOffset = true) when (val value = expression.value) { is Boolean -> { diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/BodyGenerator.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/BodyGenerator.kt index 791dc5af262..845462b2cfa 100644 --- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/BodyGenerator.kt +++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/BodyGenerator.kt @@ -12,7 +12,10 @@ import org.jetbrains.kotlin.backend.common.ir.isOverridable import org.jetbrains.kotlin.backend.common.ir.returnType import org.jetbrains.kotlin.backend.wasm.WasmBackendContext import org.jetbrains.kotlin.backend.wasm.WasmSymbols -import org.jetbrains.kotlin.backend.wasm.utils.* +import org.jetbrains.kotlin.backend.wasm.utils.getWasmArrayAnnotation +import org.jetbrains.kotlin.backend.wasm.utils.getWasmOpAnnotation +import org.jetbrains.kotlin.backend.wasm.utils.hasWasmNoOpCastAnnotation +import org.jetbrains.kotlin.backend.wasm.utils.isCanonical import org.jetbrains.kotlin.ir.IrBuiltIns import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.backend.js.utils.findUnitGetInstanceFunction @@ -21,7 +24,10 @@ import org.jetbrains.kotlin.ir.backend.js.utils.realOverrideTarget import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.types.* -import org.jetbrains.kotlin.ir.util.* +import org.jetbrains.kotlin.ir.util.defaultType +import org.jetbrains.kotlin.ir.util.getInlineClassBackingField +import org.jetbrains.kotlin.ir.util.isInterface +import org.jetbrains.kotlin.ir.util.parentAsClass import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid import org.jetbrains.kotlin.ir.visitors.acceptVoid import org.jetbrains.kotlin.wasm.ir.* @@ -99,7 +105,7 @@ class BodyGenerator(val context: WasmFunctionCodegenContext) : IrElementVisitorV } } - override fun visitConst(expression: IrConst) { + override fun visitConst(expression: IrConst<*>) { when (val kind = expression.kind) { is IrConstKind.Null -> generateDefaultInitializerForType(context.transformType(expression.type), body) is IrConstKind.Boolean -> body.buildConstI32(if (kind.valueOf(expression)) 1 else 0) diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/IrCompileTimeChecker.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/IrCompileTimeChecker.kt index 341bd8b63fe..ba38b9ff5dc 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/IrCompileTimeChecker.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/checker/IrCompileTimeChecker.kt @@ -13,7 +13,8 @@ import org.jetbrains.kotlin.ir.interpreter.accessesTopLevelOrObjectField import org.jetbrains.kotlin.ir.interpreter.fqName import org.jetbrains.kotlin.ir.interpreter.isAccessToObject import org.jetbrains.kotlin.ir.types.* -import org.jetbrains.kotlin.ir.util.* +import org.jetbrains.kotlin.ir.util.constructors +import org.jetbrains.kotlin.ir.util.statements import org.jetbrains.kotlin.ir.visitors.IrElementVisitor class IrCompileTimeChecker( @@ -84,7 +85,7 @@ class IrCompileTimeChecker( return body.kind == IrSyntheticBodyKind.ENUM_VALUES || body.kind == IrSyntheticBodyKind.ENUM_VALUEOF } - override fun visitConst(expression: IrConst, data: Nothing?): Boolean { + override fun visitConst(expression: IrConst<*>, data: Nothing?): Boolean { if (expression.type.getUnsignedType() != null) { val constructor = expression.type.classOrNull?.owner?.constructors?.singleOrNull() ?: return false return mode.canEvaluateFunction(constructor) 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 dfb41717d51..285b29c9a83 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 @@ -20,7 +20,6 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.ir.visitors.acceptVoid import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name -import java.util.* inline fun T.deepCopyWithSymbols( initialParent: IrDeclarationParent? = null, @@ -408,7 +407,7 @@ open class DeepCopyIrTreeWithSymbols( override fun visitExpression(expression: IrExpression): IrExpression = throw IllegalArgumentException("Unsupported expression type: $expression") - override fun visitConst(expression: IrConst): IrConst = + override fun visitConst(expression: IrConst<*>): IrConst<*> = expression.shallowCopy().copyAttributes(expression) override fun visitConstantObject(expression: IrConstantObject): IrConstantValue = 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 c87b85ebb04..05061402727 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 @@ -560,7 +560,7 @@ class RenderIrElementVisitor(private val normalizeNames: Boolean = false, privat override fun visitExpression(expression: IrExpression, data: Nothing?): String = "? ${expression::class.java.simpleName} type=${expression.type.render()}" - override fun visitConst(expression: IrConst, data: Nothing?): String = + override fun visitConst(expression: IrConst<*>, data: Nothing?): String = "CONST ${expression.kind} type=${expression.type.render()} value=${expression.value?.escapeIfRequired()}" private fun Any.escapeIfRequired() = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/dumpKotlinLike.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/dumpKotlinLike.kt index c93b28dbc91..362d1d45ab8 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/dumpKotlinLike.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/dumpKotlinLike.kt @@ -1180,7 +1180,7 @@ private class KotlinLikeDumper(val p: Printer, val options: KotlinLikeDumpOption } } - override fun visitConst(expression: IrConst, data: IrDeclaration?) { + override fun visitConst(expression: IrConst<*>, data: IrDeclaration?) { val kind = expression.kind val (prefix, postfix) = when (kind) { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementTransformer.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementTransformer.kt index b843fe37ca4..45ffddc6228 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementTransformer.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementTransformer.kt @@ -79,9 +79,9 @@ interface IrElementTransformer : IrElementVisitor { return expression } - override fun visitConst(expression: IrConst, data: D) = visitExpression(expression, data) + override fun visitConst(expression: IrConst<*>, data: D) = visitExpression(expression, data) override fun visitVararg(expression: IrVararg, data: D) = visitExpression(expression, data) - override fun visitConstantValue(expression: IrConstantValue, data: D) : IrConstantValue { + override fun visitConstantValue(expression: IrConstantValue, data: D): IrConstantValue { expression.transformChildren(this, data) return expression } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementTransformerVoid.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementTransformerVoid.kt index 81f6eaa6b54..97763392f46 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementTransformerVoid.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementTransformerVoid.kt @@ -134,10 +134,10 @@ abstract class IrElementTransformerVoid : IrElementTransformer { final override fun visitExpression(expression: IrExpression, data: Nothing?): IrExpression = visitExpression(expression) - open fun visitConst(expression: IrConst) = visitExpression(expression) - final override fun visitConst(expression: IrConst, data: Nothing?) = visitConst(expression) + open fun visitConst(expression: IrConst<*>) = visitExpression(expression) + final override fun visitConst(expression: IrConst<*>, data: Nothing?) = visitConst(expression) - open fun visitConstantValue(expression: IrConstantValue) : IrConstantValue { + open fun visitConstantValue(expression: IrConstantValue): IrConstantValue { expression.transformChildren(this, null) return expression } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementVisitor.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementVisitor.kt index 4309600ad83..9dbda6c425b 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementVisitor.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementVisitor.kt @@ -52,7 +52,7 @@ interface IrElementVisitor { fun visitSuspensionPoint(expression: IrSuspensionPoint, data: D) = visitExpression(expression, data) fun visitExpression(expression: IrExpression, data: D) = visitElement(expression, data) - fun visitConst(expression: IrConst, data: D) = visitExpression(expression, data) + fun visitConst(expression: IrConst<*>, data: D) = visitExpression(expression, data) fun visitConstantValue(expression: IrConstantValue, data: D) = visitExpression(expression, data) fun visitConstantObject(expression: IrConstantObject, data: D) = visitConstantValue(expression, data) fun visitConstantPrimitive(expression: IrConstantPrimitive, data: D) = visitConstantValue(expression, data) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementVisitorVoid.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementVisitorVoid.kt index aa1ed3a2058..17a3813ba46 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementVisitorVoid.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/visitors/IrElementVisitorVoid.kt @@ -104,8 +104,8 @@ interface IrElementVisitorVoid : IrElementVisitor { fun visitExpression(expression: IrExpression) = visitElement(expression) override fun visitExpression(expression: IrExpression, data: Nothing?) = visitExpression(expression) - fun visitConst(expression: IrConst) = visitExpression(expression) - override fun visitConst(expression: IrConst, data: Nothing?) = visitConst(expression) + fun visitConst(expression: IrConst<*>) = visitExpression(expression) + override fun visitConst(expression: IrConst<*>, data: Nothing?) = visitConst(expression) fun visitConstantValue(expression: IrConstantValue) = visitExpression(expression) override fun visitConstantValue(expression: IrConstantValue, data: Nothing?) = visitConstantValue(expression) diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/FileInitializersOptimization.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/FileInitializersOptimization.kt index bb2639e5e7f..8e9f1324d0a 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/FileInitializersOptimization.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/optimizations/FileInitializersOptimization.kt @@ -17,9 +17,6 @@ import org.jetbrains.kotlin.backend.konan.ir.isUnconditional import org.jetbrains.kotlin.backend.konan.ir.isVirtualCall import org.jetbrains.kotlin.backend.konan.logMultiple import org.jetbrains.kotlin.backend.konan.lower.* -import org.jetbrains.kotlin.backend.konan.lower.DECLARATION_ORIGIN_FILE_GLOBAL_INITIALIZER -import org.jetbrains.kotlin.backend.konan.lower.DECLARATION_ORIGIN_FILE_STANDALONE_THREAD_LOCAL_INITIALIZER -import org.jetbrains.kotlin.backend.konan.lower.DECLARATION_ORIGIN_FILE_THREAD_LOCAL_INITIALIZER import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.builders.IrBuilderWithScope @@ -29,7 +26,10 @@ import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyClass import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.symbols.IrReturnTargetSymbol import org.jetbrains.kotlin.ir.util.* -import org.jetbrains.kotlin.ir.visitors.* +import org.jetbrains.kotlin.ir.visitors.IrElementTransformer +import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid +import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid import java.util.* /* @@ -310,7 +310,7 @@ internal object FileInitializersOptimization { override fun visitDeclaration(declaration: IrDeclarationBase, data: BitSet): BitSet = TODO(declaration.render()) override fun visitTypeOperator(expression: IrTypeOperatorCall, data: BitSet) = expression.argument.accept(this, data) - override fun visitConst(expression: IrConst, data: BitSet) = data + override fun visitConst(expression: IrConst<*>, data: BitSet) = data override fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall, data: BitSet) = data override fun visitGetValue(expression: IrGetValue, data: BitSet) = data @@ -632,4 +632,4 @@ internal object FileInitializersOptimization { context.log { "Removed ${(numberOfCallSitesWithExtractedGlobalInitializerCall) * 100.0 / numberOfCallSitesToFunctionsWithGlobalInitializerCall}% global initializer calls" } context.log { "Removed ${(numberOfCallSitesWithExtractedThreadLocalInitializerCall) * 100.0 / numberOfCallSitesToFunctionsWithThreadLocalInitializerCall}% thread local initializer calls" } } -} \ No newline at end of file +}