From 2ef5fd95dbf200ff39a5c46e5a88864a98bd7ef2 Mon Sep 17 00:00:00 2001 From: Igor Laevsky Date: Thu, 2 Sep 2021 17:32:42 +0300 Subject: [PATCH] WASM: NFC. Rename statementToWasmInstruction into generateStatement --- .../backend/wasm/ir2wasm/BodyGenerator.kt | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) 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 270a8a8b675..32e2db22c9d 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 @@ -38,6 +38,25 @@ class BodyGenerator(val context: WasmFunctionCodegenContext) : IrElementVisitorV buildCall(context.referenceFunction(unitGetInstance.symbol)) } + // Generates code for the given IR element and *always* leaves something on the stack + private fun generateExpression(elem: IrElement) { + assert(elem is IrExpression || elem is IrVariable) { "Unsupported statement kind" } + + elem.acceptVoid(this) + + if (elem is IrExpression && elem.type == irBuiltIns.nothingType) { + body.buildUnreachable() + } + } + + // Generates code for the given IR element but *never* leaves anything on the stack + private fun generateStatement(statement: IrElement) { + assert(statement is IrExpression || statement is IrVariable) { "Unsupported statement kind" } + + generateExpression(statement) + body.buildDrop() + } + override fun visitElement(element: IrElement) { error("Unexpected element of type ${element::class}") } @@ -46,7 +65,7 @@ class BodyGenerator(val context: WasmFunctionCodegenContext) : IrElementVisitorV when (expression.operator) { IrTypeOperator.REINTERPRET_CAST -> generateExpression(expression.argument) IrTypeOperator.IMPLICIT_COERCION_TO_UNIT -> { - statementToWasmInstruction(expression.argument) + generateStatement(expression.argument) body.buildGetUnit() } else -> assert(false) { "Other types of casts must be lowered" } @@ -340,7 +359,7 @@ class BodyGenerator(val context: WasmFunctionCodegenContext) : IrElementVisitorV } override fun visitBlockBody(body: IrBlockBody) { - body.statements.forEach(::statementToWasmInstruction) + body.statements.forEach(::generateStatement) } override fun visitContainerExpression(expression: IrContainerExpression) { @@ -352,7 +371,7 @@ class BodyGenerator(val context: WasmFunctionCodegenContext) : IrElementVisitorV } statements.dropLast(1).forEach { - statementToWasmInstruction(it) + generateStatement(it) } generateExpression(statements.last()) @@ -371,7 +390,7 @@ class BodyGenerator(val context: WasmFunctionCodegenContext) : IrElementVisitorV override fun visitReturn(expression: IrReturn) { if (expression.returnTargetSymbol.owner.returnType(backendContext) == irBuiltIns.unitType && expression.returnTargetSymbol.owner != unitGetInstance) { - statementToWasmInstruction(expression.value) + generateStatement(expression.value) } else { generateExpression(expression.value) } @@ -446,7 +465,7 @@ class BodyGenerator(val context: WasmFunctionCodegenContext) : IrElementVisitorV context.defineLoopLevel(loop, LoopLabelType.BREAK, wasmBreakBlock) context.defineLoopLevel(loop, LoopLabelType.CONTINUE, wasmContinueBlock) - loop.body?.let { statementToWasmInstruction(it) } + loop.body?.let { generateStatement(it) } body.buildEnd() generateExpression(loop.condition) body.buildBrIf(wasmLoop) @@ -478,7 +497,7 @@ class BodyGenerator(val context: WasmFunctionCodegenContext) : IrElementVisitorV body.buildInstr(WasmOp.I32_EQZ) body.buildBrIf(wasmBreakBlock) loop.body?.let { - statementToWasmInstruction(it) + generateStatement(it) } body.buildBr(wasmLoop) body.buildEnd() @@ -487,25 +506,6 @@ class BodyGenerator(val context: WasmFunctionCodegenContext) : IrElementVisitorV body.buildGetUnit() } - // Generates code for the given IR element and *always* leaves something on the stack - fun generateExpression(elem: IrElement) { - assert(elem is IrExpression || elem is IrVariable) { "Unsupported statement kind" } - - elem.acceptVoid(this) - - if (elem is IrExpression && elem.type == irBuiltIns.nothingType) { - body.buildUnreachable() - } - } - - // Generates code for the given IR element but *never* leaves anything on the stack - fun statementToWasmInstruction(statement: IrElement) { - assert(statement is IrExpression || statement is IrVariable) { "Unsupported statement kind" } - - generateExpression(statement) - body.buildDrop() - } - override fun visitVariable(declaration: IrVariable) { context.defineLocal(declaration.symbol) if (declaration.initializer == null) {