mirror of
https://github.com/fluencelabs/asmble
synced 2025-07-04 00:41:34 +00:00
Updated WASM spec tests to latest
This commit is contained in:
@ -210,7 +210,7 @@ open class AstToAsm {
|
||||
fun initializeConstructorGlobals(ctx: ClsContext, func: Func, paramsBeforeImports: Int) =
|
||||
ctx.mod.globals.foldIndexed(func) { index, func, global ->
|
||||
// In the MVP, we can trust the init is constant stuff and a single instr
|
||||
if (global.init.size > 1) throw CompileErr.GlobalInitNotConstant(index)
|
||||
if (global.init.size != 1) throw CompileErr.GlobalInitNotConstant(index)
|
||||
func.addInsns(VarInsnNode(Opcodes.ALOAD, 0)).
|
||||
addInsns(
|
||||
global.init.firstOrNull().let {
|
||||
|
@ -114,8 +114,9 @@ sealed class CompileErr(message: String, cause: Throwable? = null) : RuntimeExce
|
||||
|
||||
class GlobalInitNotConstant(
|
||||
val index: Int
|
||||
) : CompileErr("Expected init for global $index to be constant") {
|
||||
) : CompileErr("Expected init for global $index to be single constant value") {
|
||||
override val asmErrString get() = "constant expression required"
|
||||
override val asmErrStrings get() = listOf(asmErrString, "type mismatch")
|
||||
}
|
||||
|
||||
class OffsetNotConstant : CompileErr("Expected offset to be constant") {
|
||||
|
@ -269,10 +269,9 @@ open class SExprToAst {
|
||||
if (maybeImpExp != null) currIndex++
|
||||
val sig = toGlobalSig(exp.vals[currIndex])
|
||||
currIndex++
|
||||
var (instrs, _) = toInstrs(exp, currIndex, ExprContext(nameMap))
|
||||
val (instrs, _) = toInstrs(exp, currIndex, ExprContext(nameMap))
|
||||
// Imports can't have instructions
|
||||
if (maybeImpExp?.importModule != null) require(instrs.isEmpty())
|
||||
else if (instrs.isEmpty()) instrs = listOf(sig.contentType.zeroConst)
|
||||
return Triple(name, Node.Global(sig, instrs), maybeImpExp)
|
||||
}
|
||||
|
||||
@ -876,12 +875,5 @@ open class SExprToAst {
|
||||
return this.vals.first().requireSymbol(contents, quotedCheck)
|
||||
}
|
||||
|
||||
private val Node.Type.Value.zeroConst: Node.Instr get() = when (this) {
|
||||
Node.Type.Value.I32 -> Node.Instr.I32Const(0)
|
||||
Node.Type.Value.I64 -> Node.Instr.I64Const(0)
|
||||
Node.Type.Value.F32 -> Node.Instr.F32Const(0f)
|
||||
Node.Type.Value.F64 -> Node.Instr.F64Const(0.0)
|
||||
}
|
||||
|
||||
companion object : SExprToAst()
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
(memory 1)
|
||||
|
||||
(global $foo (mut i32) (i32.const 20))
|
||||
(global $bar (mut f32))
|
||||
(global $bar (mut f32) (f32.const 0))
|
||||
|
||||
;; This was breaking because stack diff was wrong for get_global and set_global
|
||||
(func (export "testGlobals") (param $p i32) (result i32)
|
||||
|
Submodule src/test/resources/spec updated: f1b89dfaf3...671b08d0e7
Reference in New Issue
Block a user