summaryrefslogtreecommitdiff
path: root/src/parser
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser')
-rw-r--r--src/parser/contexts.h8
-rw-r--r--src/parser/parsers.h8
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>