summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/parser/contexts.h9
-rw-r--r--src/parser/parsers.h16
2 files changed, 12 insertions, 13 deletions
diff --git a/src/parser/contexts.h b/src/parser/contexts.h
index 7c1a07b53..351f6a208 100644
--- a/src/parser/contexts.h
+++ b/src/parser/contexts.h
@@ -908,7 +908,7 @@ struct ParseDeclsCtx : NullTypeParserCtx, NullInstrParserCtx {
void addArrayType(ArrayT) {}
void setOpen() {}
void setShared() {}
- Result<> addSubtype(Index) { return Ok{}; }
+ Result<> addSubtype(HeapTypeT) { return Ok{}; }
void finishSubtype(Name name, Index pos) {
// TODO: type annotations
subtypeDefs.push_back({name, pos, Index(subtypeDefs.size()), {}});
@@ -1080,11 +1080,8 @@ struct ParseTypeDefsCtx : TypeParserCtx<ParseTypeDefsCtx> {
void setShared() { builder[index].setShared(); }
- Result<> addSubtype(Index super) {
- if (super >= builder.size()) {
- return in.err("supertype index out of bounds");
- }
- builder[index].subTypeOf(builder[super]);
+ Result<> addSubtype(HeapTypeT super) {
+ builder[index].subTypeOf(super);
return Ok{};
}
diff --git a/src/parser/parsers.h b/src/parser/parsers.h
index a3fe5e5eb..e56efb529 100644
--- a/src/parser/parsers.h
+++ b/src/parser/parsers.h
@@ -305,7 +305,8 @@ Result<> ignore(Ctx&, Index, const std::vector<Annotation>&) {
}
// Modules
-template<typename Ctx> MaybeResult<Index> maybeTypeidx(Ctx& ctx);
+template<typename Ctx>
+MaybeResult<typename Ctx::HeapTypeT> maybeTypeidx(Ctx& ctx);
template<typename Ctx> Result<typename Ctx::HeapTypeT> typeidx(Ctx&);
template<typename Ctx>
Result<typename Ctx::FieldIdxT> fieldidx(Ctx&, typename Ctx::HeapTypeT);
@@ -2436,23 +2437,24 @@ makeSuspend(Ctx& ctx, Index pos, const std::vector<Annotation>& annotations) {
// typeidx ::= x:u32 => x
// | v:id => x (if types[x] = v)
-template<typename Ctx> MaybeResult<Index> maybeTypeidx(Ctx& ctx) {
+template<typename Ctx>
+MaybeResult<typename Ctx::HeapTypeT> maybeTypeidx(Ctx& ctx) {
if (auto x = ctx.in.takeU32()) {
- return *x;
+ return ctx.getHeapTypeFromIdx(*x);
}
if (auto id = ctx.in.takeID()) {
// TODO: Fix position to point to start of id, not next element.
auto idx = ctx.getTypeIndex(*id);
CHECK_ERR(idx);
- return *idx;
+ return ctx.getHeapTypeFromIdx(*idx);
}
return {};
}
template<typename Ctx> Result<typename Ctx::HeapTypeT> typeidx(Ctx& ctx) {
- if (auto idx = maybeTypeidx(ctx)) {
- CHECK_ERR(idx);
- return ctx.getHeapTypeFromIdx(*idx);
+ if (auto t = maybeTypeidx(ctx)) {
+ CHECK_ERR(t);
+ return *t;
}
return ctx.in.err("expected type index or identifier");
}