[Wasm] Require location for buildConstI32Symbol and fix all usages

This commit is contained in:
Zalim Bashorov
2022-12-07 12:43:44 +01:00
parent e69bbdd5b4
commit 36d4e29253
3 changed files with 9 additions and 12 deletions
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.backend.wasm.utils.isCanonical
import org.jetbrains.kotlin.ir.IrBuiltIns import org.jetbrains.kotlin.ir.IrBuiltIns
import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.backend.js.lower.PrimaryConstructorLowering import org.jetbrains.kotlin.ir.backend.js.lower.PrimaryConstructorLowering
import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.getSourceLocation
import org.jetbrains.kotlin.ir.backend.js.utils.erasedUpperBound import org.jetbrains.kotlin.ir.backend.js.utils.erasedUpperBound
import org.jetbrains.kotlin.ir.backend.js.utils.findUnitGetInstanceFunction import org.jetbrains.kotlin.ir.backend.js.utils.findUnitGetInstanceFunction
import org.jetbrains.kotlin.ir.backend.js.utils.isDispatchReceiver import org.jetbrains.kotlin.ir.backend.js.utils.isDispatchReceiver
@@ -300,7 +299,7 @@ class BodyGenerator(
body.buildRefNull(WasmHeapType.Simple.Data) body.buildRefNull(WasmHeapType.Simple.Data)
} }
body.buildConstI32Symbol(context.referenceClassId(klassSymbol)) body.buildConstI32Symbol(context.referenceClassId(klassSymbol), location)
body.buildConstI32(0, location) // Any::_hashCode body.buildConstI32(0, location) // Any::_hashCode
body.commentGroupEnd() body.commentGroupEnd()
} }
@@ -497,14 +496,14 @@ class BodyGenerator(
val klass = call.getTypeArgument(0)!!.getClass() val klass = call.getTypeArgument(0)!!.getClass()
?: error("No class given for wasmClassId intrinsic") ?: error("No class given for wasmClassId intrinsic")
assert(!klass.isInterface) assert(!klass.isInterface)
body.buildConstI32Symbol(context.referenceClassId(klass.symbol)) body.buildConstI32Symbol(context.referenceClassId(klass.symbol), location)
} }
wasmSymbols.wasmInterfaceId -> { wasmSymbols.wasmInterfaceId -> {
val irInterface = call.getTypeArgument(0)!!.getClass() val irInterface = call.getTypeArgument(0)!!.getClass()
?: error("No interface given for wasmInterfaceId intrinsic") ?: error("No interface given for wasmInterfaceId intrinsic")
assert(irInterface.isInterface) assert(irInterface.isInterface)
body.buildConstI32Symbol(context.referenceInterfaceId(irInterface.symbol)) body.buildConstI32Symbol(context.referenceInterfaceId(irInterface.symbol), location)
} }
wasmSymbols.wasmIsInterface -> { wasmSymbols.wasmIsInterface -> {
@@ -574,11 +573,9 @@ class BodyGenerator(
wasmSymbols.unsafeGetScratchRawMemory -> { wasmSymbols.unsafeGetScratchRawMemory -> {
body.buildConstI32Symbol(context.scratchMemAddr) body.buildConstI32Symbol(context.scratchMemAddr, location)
} }
wasmSymbols.wasmArrayCopy -> { wasmSymbols.wasmArrayCopy -> {
val immediate = WasmImmediate.GcType( val immediate = WasmImmediate.GcType(
context.referenceGcType(call.getTypeArgument(0)!!.getRuntimeClass(irBuiltIns).symbol) context.referenceGcType(call.getTypeArgument(0)!!.getRuntimeClass(irBuiltIns).symbol)
@@ -587,7 +584,7 @@ class BodyGenerator(
} }
wasmSymbols.stringGetPoolSize -> { wasmSymbols.stringGetPoolSize -> {
body.buildConstI32Symbol(context.stringPoolSize) body.buildConstI32Symbol(context.stringPoolSize, location)
} }
wasmSymbols.wasmArrayNewData0 -> { wasmSymbols.wasmArrayNewData0 -> {
@@ -518,8 +518,8 @@ fun generateConstExpression(expression: IrConst<*>, body: WasmExpressionBuilder,
val stringValue = kind.valueOf(expression) val stringValue = kind.valueOf(expression)
val (literalAddress, literalPoolId) = context.referenceStringLiteralAddressAndId(stringValue) val (literalAddress, literalPoolId) = context.referenceStringLiteralAddressAndId(stringValue)
body.commentGroupStart { "const string: \"$stringValue\"" } body.commentGroupStart { "const string: \"$stringValue\"" }
body.buildConstI32Symbol(literalPoolId) body.buildConstI32Symbol(literalPoolId, location)
body.buildConstI32Symbol(literalAddress) body.buildConstI32Symbol(literalAddress, location)
body.buildConstI32(stringValue.length, location) body.buildConstI32(stringValue.length, location)
body.buildCall(context.referenceFunction(context.backendContext.wasmSymbols.stringGetLiteral), location) body.buildCall(context.referenceFunction(context.backendContext.wasmSymbols.stringGetLiteral), location)
body.commentGroupEnd() body.commentGroupEnd()
@@ -32,8 +32,8 @@ abstract class WasmExpressionBuilder {
buildInstr(WasmOp.F64_CONST, location, WasmImmediate.ConstF64(value.toRawBits().toULong())) buildInstr(WasmOp.F64_CONST, location, WasmImmediate.ConstF64(value.toRawBits().toULong()))
} }
fun buildConstI32Symbol(value: WasmSymbol<Int>) { fun buildConstI32Symbol(value: WasmSymbol<Int>, location: SourceLocation) {
buildInstr(WasmOp.I32_CONST, WasmImmediate.SymbolI32(value)) buildInstr(WasmOp.I32_CONST, location, WasmImmediate.SymbolI32(value))
} }
fun buildUnreachable() { fun buildUnreachable() {