From 0529ba9a874f3872bc1bc9540fdb0125d2b35de9 Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Tue, 15 Nov 2022 17:45:47 +0100 Subject: [PATCH] [Wasm] Extract common some logic of eqeqSymbol processing in BuiltInsLowering --- .../backend/wasm/lower/BuiltInsLowering.kt | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/BuiltInsLowering.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/BuiltInsLowering.kt index ccd880189bb..bdbc8113f55 100644 --- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/BuiltInsLowering.kt +++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/lower/BuiltInsLowering.kt @@ -53,6 +53,11 @@ class BuiltInsLowering(val context: WasmBackendContext) : FileLoweringPass { return irCall(call, symbols.floatEqualityFunctions.getValue(irBuiltins.doubleType)) } irBuiltins.eqeqSymbol -> { + fun callRefIsNull(expr: IrExpression): IrCall { + val refIsNull = if (expr.type.erasedUpperBound?.isExternal == true) symbols.externRefIsNull else symbols.refIsNull + return builder.irCall(refIsNull).apply { putValueArgument(0, expr) } + } + val lhs = call.getValueArgument(0)!! val rhs = call.getValueArgument(1)!! val lhsType = lhs.type @@ -63,14 +68,10 @@ class BuiltInsLowering(val context: WasmBackendContext) : FileLoweringPass { return irCall(call, newSymbol) } } - if (lhs.isNullConst()) { - val refIsNull = if (rhsType.erasedUpperBound?.isExternal == true) symbols.externRefIsNull else symbols.refIsNull - return builder.irCall(refIsNull).apply { putValueArgument(0, rhs) } - } - if (rhs.isNullConst()) { - val refIsNull = if (lhsType.erasedUpperBound?.isExternal == true) symbols.externRefIsNull else symbols.refIsNull - return builder.irCall(refIsNull).apply { putValueArgument(0, lhs) } - } + if (lhs.isNullConst()) return callRefIsNull(rhs) + + if (rhs.isNullConst()) return callRefIsNull(lhs) + if (!lhsType.isNullable()) { return irCall(call, lhsType.findEqualsMethod().symbol, argumentsAsReceivers = true) }