diff options
Diffstat (limited to 'src/parser')
-rw-r--r-- | src/parser/contexts.h | 8 | ||||
-rw-r--r-- | src/parser/parsers.h | 8 |
2 files changed, 15 insertions, 1 deletions
diff --git a/src/parser/contexts.h b/src/parser/contexts.h index aa207fcd5..f6dd92063 100644 --- a/src/parser/contexts.h +++ b/src/parser/contexts.h @@ -432,6 +432,10 @@ struct NullInstrParserCtx { Result<> makeArrayNewElem(Index, HeapTypeT, DataIdxT) { return Ok{}; } + template<typename HeapTypeT> + Result<> makeArrayNewFixed(Index, HeapTypeT, uint32_t) { + return Ok{}; + } template<typename HeapTypeT> Result<> makeArrayGet(Index, HeapTypeT, bool) { return Ok{}; } @@ -1334,6 +1338,10 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> { return withLoc(pos, irBuilder.makeArrayNewElem(type, elem)); } + Result<> makeArrayNewFixed(Index pos, HeapType type, uint32_t arity) { + return withLoc(pos, irBuilder.makeArrayNewFixed(type, arity)); + } + Result<> makeArrayGet(Index pos, HeapType type, bool signed_) { return withLoc(pos, irBuilder.makeArrayGet(type, signed_)); } diff --git a/src/parser/parsers.h b/src/parser/parsers.h index 610e2953a..2d90a7d27 100644 --- a/src/parser/parsers.h +++ b/src/parser/parsers.h @@ -1382,7 +1382,13 @@ template<typename Ctx> Result<> makeArrayNewElem(Ctx& ctx, Index pos) { } template<typename Ctx> Result<> makeArrayNewFixed(Ctx& ctx, Index pos) { - return ctx.in.err("unimplemented instruction"); + auto type = typeidx(ctx); + CHECK_ERR(type); + auto arity = ctx.in.takeU32(); + if (!arity) { + return ctx.in.err(pos, "expected array.new_fixed arity"); + } + return ctx.makeArrayNewFixed(pos, *type, *arity); } template<typename Ctx> |