[Wasm] Require location for buildConstI32Symbol and fix all usages
This commit is contained in:
+5
-8
@@ -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 -> {
|
||||||
|
|||||||
+2
-2
@@ -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() {
|
||||||
|
|||||||
Reference in New Issue
Block a user