summaryrefslogtreecommitdiff
path: root/src/parser/contexts.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser/contexts.h')
-rw-r--r--src/parser/contexts.h954
1 files changed, 734 insertions, 220 deletions
diff --git a/src/parser/contexts.h b/src/parser/contexts.h
index d2f0ea2d0..6505d11a4 100644
--- a/src/parser/contexts.h
+++ b/src/parser/contexts.h
@@ -355,20 +355,32 @@ struct NullInstrParserCtx {
MemargT getMemarg(uint64_t, uint32_t) { return Ok{}; }
template<typename BlockTypeT>
- Result<> makeBlock(Index, std::optional<Name>, BlockTypeT) {
+ Result<> makeBlock(Index,
+ const std::vector<Annotation>&,
+ std::optional<Name>,
+ BlockTypeT) {
return Ok{};
}
template<typename BlockTypeT>
- Result<> makeIf(Index, std::optional<Name>, BlockTypeT) {
+ Result<> makeIf(Index,
+ const std::vector<Annotation>&,
+ std::optional<Name>,
+ BlockTypeT) {
return Ok{};
}
Result<> visitElse() { return Ok{}; }
template<typename BlockTypeT>
- Result<> makeLoop(Index, std::optional<Name>, BlockTypeT) {
+ Result<> makeLoop(Index,
+ const std::vector<Annotation>&,
+ std::optional<Name>,
+ BlockTypeT) {
return Ok{};
}
template<typename BlockTypeT>
- Result<> makeTry(Index, std::optional<Name>, BlockTypeT) {
+ Result<> makeTry(Index,
+ const std::vector<Annotation>&,
+ std::optional<Name>,
+ BlockTypeT) {
return Ok{};
}
Result<> visitCatch(Index, TagIdxT) { return Ok{}; }
@@ -383,198 +395,427 @@ struct NullInstrParserCtx {
CatchT makeCatchAll(LabelIdxT) { return Ok{}; }
CatchT makeCatchAllRef(LabelIdxT) { return Ok{}; }
template<typename BlockTypeT>
- Result<> makeTryTable(Index, std::optional<Name>, BlockTypeT, CatchListT) {
+ Result<> makeTryTable(Index,
+ const std::vector<Annotation>&,
+ std::optional<Name>,
+ BlockTypeT,
+ CatchListT) {
return Ok{};
}
TagLabelListT makeTagLabelList() { return Ok{}; }
void appendTagLabel(TagLabelListT&, TagIdxT, LabelIdxT) {}
- Result<> makeUnreachable(Index) { return Ok{}; }
- Result<> makeNop(Index) { return Ok{}; }
- Result<> makeBinary(Index, BinaryOp) { return Ok{}; }
- Result<> makeUnary(Index, UnaryOp) { return Ok{}; }
- template<typename ResultsT> Result<> makeSelect(Index, ResultsT*) {
+ void setSrcLoc(const Annotation&) {}
+
+ Result<> makeUnreachable(Index, const std::vector<Annotation>&) {
+ return Ok{};
+ }
+ Result<> makeNop(Index, const std::vector<Annotation>&) { return Ok{}; }
+ Result<> makeBinary(Index, const std::vector<Annotation>&, BinaryOp) {
+ return Ok{};
+ }
+ Result<> makeUnary(Index, const std::vector<Annotation>&, UnaryOp) {
+ return Ok{};
+ }
+ template<typename ResultsT>
+ Result<> makeSelect(Index, const std::vector<Annotation>&, ResultsT*) {
+ return Ok{};
+ }
+ Result<> makeDrop(Index, const std::vector<Annotation>&) { return Ok{}; }
+ Result<> makeMemorySize(Index, const std::vector<Annotation>&, MemoryIdxT*) {
+ return Ok{};
+ }
+ Result<> makeMemoryGrow(Index, const std::vector<Annotation>&, MemoryIdxT*) {
+ return Ok{};
+ }
+ Result<> makeLocalGet(Index, const std::vector<Annotation>&, LocalIdxT) {
+ return Ok{};
+ }
+ Result<> makeLocalTee(Index, const std::vector<Annotation>&, LocalIdxT) {
+ return Ok{};
+ }
+ Result<> makeLocalSet(Index, const std::vector<Annotation>&, LocalIdxT) {
+ return Ok{};
+ }
+ Result<> makeGlobalGet(Index, const std::vector<Annotation>&, GlobalIdxT) {
+ return Ok{};
+ }
+ Result<> makeGlobalSet(Index, const std::vector<Annotation>&, GlobalIdxT) {
return Ok{};
}
- Result<> makeDrop(Index) { return Ok{}; }
- Result<> makeMemorySize(Index, MemoryIdxT*) { return Ok{}; }
- Result<> makeMemoryGrow(Index, MemoryIdxT*) { return Ok{}; }
- Result<> makeLocalGet(Index, LocalIdxT) { return Ok{}; }
- Result<> makeLocalTee(Index, LocalIdxT) { return Ok{}; }
- Result<> makeLocalSet(Index, LocalIdxT) { return Ok{}; }
- Result<> makeGlobalGet(Index, GlobalIdxT) { return Ok{}; }
- Result<> makeGlobalSet(Index, GlobalIdxT) { return Ok{}; }
- Result<> makeI32Const(Index, uint32_t) { return Ok{}; }
- Result<> makeI64Const(Index, uint64_t) { return Ok{}; }
- Result<> makeF32Const(Index, float) { return Ok{}; }
- Result<> makeF64Const(Index, double) { return Ok{}; }
- Result<> makeI8x16Const(Index, const std::array<uint8_t, 16>&) {
+ Result<> makeI32Const(Index, const std::vector<Annotation>&, uint32_t) {
+ return Ok{};
+ }
+ Result<> makeI64Const(Index, const std::vector<Annotation>&, uint64_t) {
return Ok{};
}
- Result<> makeI16x8Const(Index, const std::array<uint16_t, 8>&) {
+ Result<> makeF32Const(Index, const std::vector<Annotation>&, float) {
return Ok{};
}
- Result<> makeI32x4Const(Index, const std::array<uint32_t, 4>&) {
+ Result<> makeF64Const(Index, const std::vector<Annotation>&, double) {
return Ok{};
}
- Result<> makeI64x2Const(Index, const std::array<uint64_t, 2>&) {
+ Result<> makeI8x16Const(Index,
+ const std::vector<Annotation>&,
+ const std::array<uint8_t, 16>&) {
return Ok{};
}
- Result<> makeF32x4Const(Index, const std::array<float, 4>&) { return Ok{}; }
- Result<> makeF64x2Const(Index, const std::array<double, 2>&) { return Ok{}; }
- Result<> makeLoad(Index, Type, bool, int, bool, MemoryIdxT*, MemargT) {
+ Result<> makeI16x8Const(Index,
+ const std::vector<Annotation>&,
+ const std::array<uint16_t, 8>&) {
return Ok{};
}
- Result<> makeStore(Index, Type, int, bool, MemoryIdxT*, MemargT) {
+ Result<> makeI32x4Const(Index,
+ const std::vector<Annotation>&,
+ const std::array<uint32_t, 4>&) {
return Ok{};
}
- Result<> makeAtomicRMW(Index, AtomicRMWOp, Type, int, MemoryIdxT*, MemargT) {
+ Result<> makeI64x2Const(Index,
+ const std::vector<Annotation>&,
+ const std::array<uint64_t, 2>&) {
return Ok{};
}
- Result<> makeAtomicCmpxchg(Index, Type, int, MemoryIdxT*, MemargT) {
+ Result<> makeF32x4Const(Index,
+ const std::vector<Annotation>&,
+ const std::array<float, 4>&) {
return Ok{};
}
- Result<> makeAtomicWait(Index, Type, MemoryIdxT*, MemargT) { return Ok{}; }
- Result<> makeAtomicNotify(Index, MemoryIdxT*, MemargT) { return Ok{}; }
- Result<> makeAtomicFence(Index) { return Ok{}; }
- Result<> makeSIMDExtract(Index, SIMDExtractOp, uint8_t) { return Ok{}; }
- Result<> makeSIMDReplace(Index, SIMDReplaceOp, uint8_t) { return Ok{}; }
- Result<> makeSIMDShuffle(Index, const std::array<uint8_t, 16>&) {
+ Result<> makeF64x2Const(Index,
+ const std::vector<Annotation>&,
+ const std::array<double, 2>&) {
return Ok{};
}
- Result<> makeSIMDTernary(Index, SIMDTernaryOp) { return Ok{}; }
- Result<> makeSIMDShift(Index, SIMDShiftOp) { return Ok{}; }
- Result<> makeSIMDLoad(Index, SIMDLoadOp, MemoryIdxT*, MemargT) {
+ Result<> makeLoad(Index,
+ const std::vector<Annotation>&,
+ Type,
+ bool,
+ int,
+ bool,
+ MemoryIdxT*,
+ MemargT) {
return Ok{};
}
- Result<> makeSIMDLoadStoreLane(
- Index, SIMDLoadStoreLaneOp, MemoryIdxT*, MemargT, uint8_t) {
+ Result<> makeStore(Index,
+ const std::vector<Annotation>&,
+ Type,
+ int,
+ bool,
+ MemoryIdxT*,
+ MemargT) {
+ return Ok{};
+ }
+ Result<> makeAtomicRMW(Index,
+ const std::vector<Annotation>&,
+ AtomicRMWOp,
+ Type,
+ int,
+ MemoryIdxT*,
+ MemargT) {
+ return Ok{};
+ }
+ Result<> makeAtomicCmpxchg(
+ Index, const std::vector<Annotation>&, Type, int, MemoryIdxT*, MemargT) {
+ return Ok{};
+ }
+ Result<> makeAtomicWait(
+ Index, const std::vector<Annotation>&, Type, MemoryIdxT*, MemargT) {
+ return Ok{};
+ }
+ Result<> makeAtomicNotify(Index,
+ const std::vector<Annotation>&,
+ MemoryIdxT*,
+ MemargT) {
+ return Ok{};
+ }
+ Result<> makeAtomicFence(Index, const std::vector<Annotation>&) {
+ return Ok{};
+ }
+ Result<> makeSIMDExtract(Index,
+ const std::vector<Annotation>&,
+ SIMDExtractOp,
+ uint8_t) {
+ return Ok{};
+ }
+ Result<> makeSIMDReplace(Index,
+ const std::vector<Annotation>&,
+ SIMDReplaceOp,
+ uint8_t) {
+ return Ok{};
+ }
+ Result<> makeSIMDShuffle(Index,
+ const std::vector<Annotation>&,
+ const std::array<uint8_t, 16>&) {
+ return Ok{};
+ }
+ Result<>
+ makeSIMDTernary(Index, const std::vector<Annotation>&, SIMDTernaryOp) {
+ return Ok{};
+ }
+ Result<> makeSIMDShift(Index, const std::vector<Annotation>&, SIMDShiftOp) {
+ return Ok{};
+ }
+ Result<> makeSIMDLoad(
+ Index, const std::vector<Annotation>&, SIMDLoadOp, MemoryIdxT*, MemargT) {
+ return Ok{};
+ }
+ Result<> makeSIMDLoadStoreLane(Index,
+ const std::vector<Annotation>&,
+ SIMDLoadStoreLaneOp,
+ MemoryIdxT*,
+ MemargT,
+ uint8_t) {
+ return Ok{};
+ }
+ Result<>
+ makeMemoryInit(Index, const std::vector<Annotation>&, MemoryIdxT*, DataIdxT) {
+ return Ok{};
+ }
+ Result<> makeDataDrop(Index, const std::vector<Annotation>&, DataIdxT) {
return Ok{};
}
- Result<> makeMemoryInit(Index, MemoryIdxT*, DataIdxT) { return Ok{}; }
- Result<> makeDataDrop(Index, DataIdxT) { return Ok{}; }
- Result<> makeMemoryCopy(Index, MemoryIdxT*, MemoryIdxT*) { return Ok{}; }
- Result<> makeMemoryFill(Index, MemoryIdxT*) { return Ok{}; }
- template<typename TypeT> Result<> makePop(Index, TypeT) { return Ok{}; }
- Result<> makeCall(Index, FuncIdxT, bool) { return Ok{}; }
+ Result<> makeMemoryCopy(Index,
+ const std::vector<Annotation>&,
+ MemoryIdxT*,
+ MemoryIdxT*) {
+ return Ok{};
+ }
+ Result<> makeMemoryFill(Index, const std::vector<Annotation>&, MemoryIdxT*) {
+ return Ok{};
+ }
+ template<typename TypeT>
+ Result<> makePop(Index, const std::vector<Annotation>&, TypeT) {
+ return Ok{};
+ }
+ Result<> makeCall(Index, const std::vector<Annotation>&, FuncIdxT, bool) {
+ return Ok{};
+ }
template<typename TypeUseT>
- Result<> makeCallIndirect(Index, TableIdxT*, TypeUseT, bool) {
+ Result<> makeCallIndirect(
+ Index, const std::vector<Annotation>&, TableIdxT*, TypeUseT, bool) {
+ return Ok{};
+ }
+ Result<> makeBreak(Index, const std::vector<Annotation>&, LabelIdxT, bool) {
+ return Ok{};
+ }
+ Result<> makeSwitch(Index,
+ const std::vector<Annotation>&,
+ const std::vector<LabelIdxT>&,
+ LabelIdxT) {
+ return Ok{};
+ }
+ Result<> makeReturn(Index, const std::vector<Annotation>&) { return Ok{}; }
+ template<typename HeapTypeT>
+ Result<> makeRefNull(Index, const std::vector<Annotation>&, HeapTypeT) {
+ return Ok{};
+ }
+ Result<> makeRefIsNull(Index, const std::vector<Annotation>&) { return Ok{}; }
+ Result<> makeRefFunc(Index, const std::vector<Annotation>&, FuncIdxT) {
+ return Ok{};
+ }
+ Result<> makeRefEq(Index, const std::vector<Annotation>&) { return Ok{}; }
+ Result<> makeTableGet(Index, const std::vector<Annotation>&, TableIdxT*) {
+ return Ok{};
+ }
+ Result<> makeTableSet(Index, const std::vector<Annotation>&, TableIdxT*) {
+ return Ok{};
+ }
+ Result<> makeTableSize(Index, const std::vector<Annotation>&, TableIdxT*) {
+ return Ok{};
+ }
+ Result<> makeTableGrow(Index, const std::vector<Annotation>&, TableIdxT*) {
+ return Ok{};
+ }
+ Result<> makeTableFill(Index, const std::vector<Annotation>&, TableIdxT*) {
+ return Ok{};
+ }
+ Result<>
+ makeTableCopy(Index, const std::vector<Annotation>&, TableIdxT*, TableIdxT*) {
+ return Ok{};
+ }
+ Result<> makeThrow(Index, const std::vector<Annotation>&, TagIdxT) {
+ return Ok{};
+ }
+ Result<> makeRethrow(Index, const std::vector<Annotation>&, LabelIdxT) {
+ return Ok{};
+ }
+ Result<> makeThrowRef(Index, const std::vector<Annotation>&) { return Ok{}; }
+ Result<> makeTupleMake(Index, const std::vector<Annotation>&, uint32_t) {
+ return Ok{};
+ }
+ Result<>
+ makeTupleExtract(Index, const std::vector<Annotation>&, uint32_t, uint32_t) {
+ return Ok{};
+ }
+ Result<> makeTupleDrop(Index, const std::vector<Annotation>&, uint32_t) {
return Ok{};
}
- Result<> makeBreak(Index, LabelIdxT, bool) { return Ok{}; }
- Result<> makeSwitch(Index, const std::vector<LabelIdxT>&, LabelIdxT) {
+ template<typename HeapTypeT>
+ Result<> makeCallRef(Index, const std::vector<Annotation>&, HeapTypeT, bool) {
+ return Ok{};
+ }
+ Result<> makeRefI31(Index, const std::vector<Annotation>&) { return Ok{}; }
+ Result<> makeI31Get(Index, const std::vector<Annotation>&, bool) {
return Ok{};
}
- Result<> makeReturn(Index) { return Ok{}; }
- template<typename HeapTypeT> Result<> makeRefNull(Index, HeapTypeT) {
+ template<typename TypeT>
+ Result<> makeRefTest(Index, const std::vector<Annotation>&, TypeT) {
return Ok{};
}
- Result<> makeRefIsNull(Index) { return Ok{}; }
- Result<> makeRefFunc(Index, FuncIdxT) { return Ok{}; }
- Result<> makeRefEq(Index) { return Ok{}; }
- Result<> makeTableGet(Index, TableIdxT*) { return Ok{}; }
- Result<> makeTableSet(Index, TableIdxT*) { return Ok{}; }
- Result<> makeTableSize(Index, TableIdxT*) { return Ok{}; }
- Result<> makeTableGrow(Index, TableIdxT*) { return Ok{}; }
- Result<> makeTableFill(Index, TableIdxT*) { return Ok{}; }
- Result<> makeTableCopy(Index, TableIdxT*, TableIdxT*) { return Ok{}; }
- Result<> makeThrow(Index, TagIdxT) { return Ok{}; }
- Result<> makeRethrow(Index, LabelIdxT) { return Ok{}; }
- Result<> makeThrowRef(Index) { return Ok{}; }
- Result<> makeTupleMake(Index, uint32_t) { return Ok{}; }
- Result<> makeTupleExtract(Index, uint32_t, uint32_t) { return Ok{}; }
- Result<> makeTupleDrop(Index, uint32_t) { return Ok{}; }
- template<typename HeapTypeT> Result<> makeCallRef(Index, HeapTypeT, bool) {
+ template<typename TypeT>
+ Result<> makeRefCast(Index, const std::vector<Annotation>&, TypeT) {
return Ok{};
}
- Result<> makeRefI31(Index) { return Ok{}; }
- Result<> makeI31Get(Index, bool) { return Ok{}; }
- template<typename TypeT> Result<> makeRefTest(Index, TypeT) { return Ok{}; }
- template<typename TypeT> Result<> makeRefCast(Index, TypeT) { return Ok{}; }
- Result<> makeBrOn(Index, LabelIdxT, BrOnOp) { return Ok{}; }
+ Result<> makeBrOn(Index, const std::vector<Annotation>&, LabelIdxT, BrOnOp) {
+ return Ok{};
+ }
template<typename TypeT>
- Result<> makeBrOn(Index, LabelIdxT, BrOnOp, TypeT, TypeT) {
+ Result<> makeBrOn(
+ Index, const std::vector<Annotation>&, LabelIdxT, BrOnOp, TypeT, TypeT) {
return Ok{};
}
- template<typename HeapTypeT> Result<> makeStructNew(Index, HeapTypeT) {
+ template<typename HeapTypeT>
+ Result<> makeStructNew(Index, const std::vector<Annotation>&, HeapTypeT) {
return Ok{};
}
- template<typename HeapTypeT> Result<> makeStructNewDefault(Index, HeapTypeT) {
+ template<typename HeapTypeT>
+ Result<>
+ makeStructNewDefault(Index, const std::vector<Annotation>&, HeapTypeT) {
return Ok{};
}
template<typename HeapTypeT>
- Result<> makeStructGet(Index, HeapTypeT, FieldIdxT, bool) {
+ Result<> makeStructGet(
+ Index, const std::vector<Annotation>&, HeapTypeT, FieldIdxT, bool) {
return Ok{};
}
template<typename HeapTypeT>
- Result<> makeStructSet(Index, HeapTypeT, FieldIdxT) {
+ Result<>
+ makeStructSet(Index, const std::vector<Annotation>&, HeapTypeT, FieldIdxT) {
return Ok{};
}
- template<typename HeapTypeT> Result<> makeArrayNew(Index, HeapTypeT) {
+ template<typename HeapTypeT>
+ Result<> makeArrayNew(Index, const std::vector<Annotation>&, HeapTypeT) {
return Ok{};
}
- template<typename HeapTypeT> Result<> makeArrayNewDefault(Index, HeapTypeT) {
+ template<typename HeapTypeT>
+ Result<>
+ makeArrayNewDefault(Index, const std::vector<Annotation>&, HeapTypeT) {
return Ok{};
}
template<typename HeapTypeT>
- Result<> makeArrayNewData(Index, HeapTypeT, DataIdxT) {
+ Result<>
+ makeArrayNewData(Index, const std::vector<Annotation>&, HeapTypeT, DataIdxT) {
return Ok{};
}
template<typename HeapTypeT>
- Result<> makeArrayNewElem(Index, HeapTypeT, ElemIdxT) {
+ Result<>
+ makeArrayNewElem(Index, const std::vector<Annotation>&, HeapTypeT, ElemIdxT) {
return Ok{};
}
template<typename HeapTypeT>
- Result<> makeArrayNewFixed(Index, HeapTypeT, uint32_t) {
+ Result<> makeArrayNewFixed(Index,
+ const std::vector<Annotation>&,
+ HeapTypeT,
+ uint32_t) {
return Ok{};
}
- template<typename HeapTypeT> Result<> makeArrayGet(Index, HeapTypeT, bool) {
+ template<typename HeapTypeT>
+ Result<>
+ makeArrayGet(Index, const std::vector<Annotation>&, HeapTypeT, bool) {
return Ok{};
}
- template<typename HeapTypeT> Result<> makeArraySet(Index, HeapTypeT) {
+ template<typename HeapTypeT>
+ Result<> makeArraySet(Index, const std::vector<Annotation>&, HeapTypeT) {
return Ok{};
}
- Result<> makeArrayLen(Index) { return Ok{}; }
+ Result<> makeArrayLen(Index, const std::vector<Annotation>&) { return Ok{}; }
template<typename HeapTypeT>
- Result<> makeArrayCopy(Index, HeapTypeT, HeapTypeT) {
+ Result<>
+ makeArrayCopy(Index, const std::vector<Annotation>&, HeapTypeT, HeapTypeT) {
return Ok{};
}
- template<typename HeapTypeT> Result<> makeArrayFill(Index, HeapTypeT) {
+ template<typename HeapTypeT>
+ Result<> makeArrayFill(Index, const std::vector<Annotation>&, HeapTypeT) {
return Ok{};
}
template<typename HeapTypeT>
- Result<> makeArrayInitData(Index, HeapTypeT, DataIdxT) {
+ Result<> makeArrayInitData(Index,
+ const std::vector<Annotation>&,
+ HeapTypeT,
+ DataIdxT) {
return Ok{};
}
template<typename HeapTypeT>
- Result<> makeArrayInitElem(Index, HeapTypeT, ElemIdxT) {
- return Ok{};
- }
- Result<> makeRefAs(Index, RefAsOp) { return Ok{}; }
- Result<> makeStringNew(Index, StringNewOp, bool, MemoryIdxT*) { return Ok{}; }
- Result<> makeStringConst(Index, std::string_view) { return Ok{}; }
- Result<> makeStringMeasure(Index, StringMeasureOp) { return Ok{}; }
- Result<> makeStringEncode(Index, StringEncodeOp, MemoryIdxT*) { return Ok{}; }
- Result<> makeStringConcat(Index) { return Ok{}; }
- Result<> makeStringEq(Index, StringEqOp) { return Ok{}; }
- Result<> makeStringAs(Index, StringAsOp) { return Ok{}; }
- Result<> makeStringWTF8Advance(Index) { return Ok{}; }
- Result<> makeStringWTF16Get(Index) { return Ok{}; }
- Result<> makeStringIterNext(Index) { return Ok{}; }
- Result<> makeStringIterMove(Index, StringIterMoveOp) { return Ok{}; }
- Result<> makeStringSliceWTF(Index, StringSliceWTFOp) { return Ok{}; }
- Result<> makeStringSliceIter(Index) { return Ok{}; }
- template<typename HeapTypeT> Result<> makeContNew(Index, HeapTypeT) {
+ Result<> makeArrayInitElem(Index,
+ const std::vector<Annotation>&,
+ HeapTypeT,
+ ElemIdxT) {
+ return Ok{};
+ }
+ Result<> makeRefAs(Index, const std::vector<Annotation>&, RefAsOp) {
+ return Ok{};
+ }
+ Result<> makeStringNew(
+ Index, const std::vector<Annotation>&, StringNewOp, bool, MemoryIdxT*) {
+ return Ok{};
+ }
+ Result<>
+ makeStringConst(Index, const std::vector<Annotation>&, std::string_view) {
+ return Ok{};
+ }
+ Result<>
+ makeStringMeasure(Index, const std::vector<Annotation>&, StringMeasureOp) {
+ return Ok{};
+ }
+ Result<> makeStringEncode(Index,
+ const std::vector<Annotation>&,
+ StringEncodeOp,
+ MemoryIdxT*) {
+ return Ok{};
+ }
+ Result<> makeStringConcat(Index, const std::vector<Annotation>&) {
+ return Ok{};
+ }
+ Result<> makeStringEq(Index, const std::vector<Annotation>&, StringEqOp) {
+ return Ok{};
+ }
+ Result<> makeStringAs(Index, const std::vector<Annotation>&, StringAsOp) {
+ return Ok{};
+ }
+ Result<> makeStringWTF8Advance(Index, const std::vector<Annotation>&) {
+ return Ok{};
+ }
+ Result<> makeStringWTF16Get(Index, const std::vector<Annotation>&) {
+ return Ok{};
+ }
+ Result<> makeStringIterNext(Index, const std::vector<Annotation>&) {
+ return Ok{};
+ }
+ Result<>
+ makeStringIterMove(Index, const std::vector<Annotation>&, StringIterMoveOp) {
+ return Ok{};
+ }
+ Result<>
+ makeStringSliceWTF(Index, const std::vector<Annotation>&, StringSliceWTFOp) {
+ return Ok{};
+ }
+ Result<> makeStringSliceIter(Index, const std::vector<Annotation>&) {
+ return Ok{};
+ }
+ template<typename HeapTypeT>
+ Result<> makeContNew(Index, const std::vector<Annotation>&, HeapTypeT) {
return Ok{};
}
template<typename HeapTypeT>
- Result<> makeResume(Index, HeapTypeT, const TagLabelListT&) {
+ Result<> makeResume(Index,
+ const std::vector<Annotation>&,
+ HeapTypeT,
+ const TagLabelListT&) {
return Ok{};
}
};
@@ -1113,6 +1354,8 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
typeNames;
const std::unordered_map<Index, Index>& implicitElemIndices;
+ std::unordered_map<std::string_view, Index> debugFileIndices;
+
// The index of the current module element.
Index index = 0;
@@ -1444,7 +1687,51 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
return wasm.memories[0]->name;
}
- Result<> makeBlock(Index pos, std::optional<Name> label, HeapType type) {
+ void setSrcLoc(const Annotation& annotation) {
+ assert(annotation.kind == srcAnnotationKind);
+ Lexer lexer(annotation.contents);
+ auto contents = lexer.takeKeyword();
+ if (!contents || !lexer.empty()) {
+ return;
+ }
+
+ auto fileSize = contents->find(':');
+ if (fileSize == contents->npos) {
+ return;
+ }
+ auto file = contents->substr(0, fileSize);
+ contents = contents->substr(fileSize + 1);
+
+ auto lineSize = contents->find(':');
+ if (fileSize == contents->npos) {
+ return;
+ }
+ auto line = Lexer(contents->substr(0, lineSize)).takeU32();
+ if (!line) {
+ return;
+ }
+ contents = contents->substr(lineSize + 1);
+
+ auto col = Lexer(*contents).takeU32();
+ if (!col) {
+ return;
+ }
+
+ // TODO: If we ever parallelize the parse, access to
+ // `wasm.debugInfoFileNames` will have to be protected by a lock.
+ auto [it, inserted] =
+ debugFileIndices.insert({file, debugFileIndices.size()});
+ if (inserted) {
+ assert(wasm.debugInfoFileNames.size() == it->second);
+ wasm.debugInfoFileNames.push_back(std::string(file));
+ }
+ irBuilder.setDebugLocation({it->second, *line, *col});
+ }
+
+ Result<> makeBlock(Index pos,
+ const std::vector<Annotation>& annotations,
+ std::optional<Name> label,
+ HeapType type) {
// TODO: validate labels?
// TODO: Move error on input types to here?
return withLoc(pos,
@@ -1452,7 +1739,10 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
type.getSignature().results));
}
- Result<> makeIf(Index pos, std::optional<Name> label, HeapType type) {
+ Result<> makeIf(Index pos,
+ const std::vector<Annotation>& annotations,
+ std::optional<Name> label,
+ HeapType type) {
// TODO: validate labels?
// TODO: Move error on input types to here?
return withLoc(
@@ -1462,7 +1752,10 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
Result<> visitElse() { return withLoc(irBuilder.visitElse()); }
- Result<> makeLoop(Index pos, std::optional<Name> label, HeapType type) {
+ Result<> makeLoop(Index pos,
+ const std::vector<Annotation>& annotations,
+ std::optional<Name> label,
+ HeapType type) {
// TODO: validate labels?
// TODO: Move error on input types to here?
return withLoc(
@@ -1470,7 +1763,10 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
irBuilder.makeLoop(label ? *label : Name{}, type.getSignature().results));
}
- Result<> makeTry(Index pos, std::optional<Name> label, HeapType type) {
+ Result<> makeTry(Index pos,
+ const std::vector<Annotation>& annotations,
+ std::optional<Name> label,
+ HeapType type) {
// TODO: validate labels?
// TODO: Move error on input types to here?
return withLoc(
@@ -1479,6 +1775,7 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
}
Result<> makeTryTable(Index pos,
+ const std::vector<Annotation>& annotations,
std::optional<Name> label,
HeapType type,
const std::vector<CatchInfo>& info) {
@@ -1512,21 +1809,29 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
Result<> visitEnd() { return withLoc(irBuilder.visitEnd()); }
- Result<> makeUnreachable(Index pos) {
+ Result<> makeUnreachable(Index pos,
+ const std::vector<Annotation>& annotations) {
return withLoc(pos, irBuilder.makeUnreachable());
}
- Result<> makeNop(Index pos) { return withLoc(pos, irBuilder.makeNop()); }
+ Result<> makeNop(Index pos, const std::vector<Annotation>& annotations) {
+ return withLoc(pos, irBuilder.makeNop());
+ }
- Result<> makeBinary(Index pos, BinaryOp op) {
+ Result<> makeBinary(Index pos,
+ const std::vector<Annotation>& annotations,
+ BinaryOp op) {
return withLoc(pos, irBuilder.makeBinary(op));
}
- Result<> makeUnary(Index pos, UnaryOp op) {
+ Result<>
+ makeUnary(Index pos, const std::vector<Annotation>& annotations, UnaryOp op) {
return withLoc(pos, irBuilder.makeUnary(op));
}
- Result<> makeSelect(Index pos, std::vector<Type>* res) {
+ Result<> makeSelect(Index pos,
+ const std::vector<Annotation>& annotations,
+ std::vector<Type>* res) {
if (res && res->size()) {
if (res->size() > 1) {
return in.err(pos, "select may not have more than one result type");
@@ -1536,58 +1841,83 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
return withLoc(pos, irBuilder.makeSelect());
}
- Result<> makeDrop(Index pos) { return withLoc(pos, irBuilder.makeDrop()); }
+ Result<> makeDrop(Index pos, const std::vector<Annotation>& annotations) {
+ return withLoc(pos, irBuilder.makeDrop());
+ }
- Result<> makeMemorySize(Index pos, Name* mem) {
+ Result<> makeMemorySize(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name* mem) {
auto m = getMemory(pos, mem);
CHECK_ERR(m);
return withLoc(pos, irBuilder.makeMemorySize(*m));
}
- Result<> makeMemoryGrow(Index pos, Name* mem) {
+ Result<> makeMemoryGrow(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name* mem) {
auto m = getMemory(pos, mem);
CHECK_ERR(m);
return withLoc(pos, irBuilder.makeMemoryGrow(*m));
}
- Result<> makeLocalGet(Index pos, Index local) {
+ Result<> makeLocalGet(Index pos,
+ const std::vector<Annotation>& annotations,
+ Index local) {
return withLoc(pos, irBuilder.makeLocalGet(local));
}
- Result<> makeLocalTee(Index pos, Index local) {
+ Result<> makeLocalTee(Index pos,
+ const std::vector<Annotation>& annotations,
+ Index local) {
return withLoc(pos, irBuilder.makeLocalTee(local));
}
- Result<> makeLocalSet(Index pos, Index local) {
+ Result<> makeLocalSet(Index pos,
+ const std::vector<Annotation>& annotations,
+ Index local) {
return withLoc(pos, irBuilder.makeLocalSet(local));
}
- Result<> makeGlobalGet(Index pos, Name global) {
+ Result<> makeGlobalGet(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name global) {
return withLoc(pos, irBuilder.makeGlobalGet(global));
}
- Result<> makeGlobalSet(Index pos, Name global) {
+ Result<> makeGlobalSet(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name global) {
assert(wasm.getGlobalOrNull(global));
return withLoc(pos, irBuilder.makeGlobalSet(global));
}
- Result<> makeI32Const(Index pos, uint32_t c) {
+ Result<> makeI32Const(Index pos,
+ const std::vector<Annotation>& annotations,
+ uint32_t c) {
return withLoc(pos, irBuilder.makeConst(Literal(c)));
}
- Result<> makeI64Const(Index pos, uint64_t c) {
+ Result<> makeI64Const(Index pos,
+ const std::vector<Annotation>& annotations,
+ uint64_t c) {
return withLoc(pos, irBuilder.makeConst(Literal(c)));
}
- Result<> makeF32Const(Index pos, float c) {
+ Result<>
+ makeF32Const(Index pos, const std::vector<Annotation>& annotations, float c) {
return withLoc(pos, irBuilder.makeConst(Literal(c)));
}
- Result<> makeF64Const(Index pos, double c) {
+ Result<> makeF64Const(Index pos,
+ const std::vector<Annotation>& annotations,
+ double c) {
return withLoc(pos, irBuilder.makeConst(Literal(c)));
}
- Result<> makeI8x16Const(Index pos, const std::array<uint8_t, 16>& vals) {
+ Result<> makeI8x16Const(Index pos,
+ const std::vector<Annotation>& annotations,
+ const std::array<uint8_t, 16>& vals) {
std::array<Literal, 16> lanes;
for (size_t i = 0; i < 16; ++i) {
lanes[i] = Literal(uint32_t(vals[i]));
@@ -1595,7 +1925,9 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
return withLoc(pos, irBuilder.makeConst(Literal(lanes)));
}
- Result<> makeI16x8Const(Index pos, const std::array<uint16_t, 8>& vals) {
+ Result<> makeI16x8Const(Index pos,
+ const std::vector<Annotation>& annotations,
+ const std::array<uint16_t, 8>& vals) {
std::array<Literal, 8> lanes;
for (size_t i = 0; i < 8; ++i) {
lanes[i] = Literal(uint32_t(vals[i]));
@@ -1603,7 +1935,9 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
return withLoc(pos, irBuilder.makeConst(Literal(lanes)));
}
- Result<> makeI32x4Const(Index pos, const std::array<uint32_t, 4>& vals) {
+ Result<> makeI32x4Const(Index pos,
+ const std::vector<Annotation>& annotations,
+ const std::array<uint32_t, 4>& vals) {
std::array<Literal, 4> lanes;
for (size_t i = 0; i < 4; ++i) {
lanes[i] = Literal(vals[i]);
@@ -1611,7 +1945,9 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
return withLoc(pos, irBuilder.makeConst(Literal(lanes)));
}
- Result<> makeI64x2Const(Index pos, const std::array<uint64_t, 2>& vals) {
+ Result<> makeI64x2Const(Index pos,
+ const std::vector<Annotation>& annotations,
+ const std::array<uint64_t, 2>& vals) {
std::array<Literal, 2> lanes;
for (size_t i = 0; i < 2; ++i) {
lanes[i] = Literal(vals[i]);
@@ -1619,7 +1955,9 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
return withLoc(pos, irBuilder.makeConst(Literal(lanes)));
}
- Result<> makeF32x4Const(Index pos, const std::array<float, 4>& vals) {
+ Result<> makeF32x4Const(Index pos,
+ const std::vector<Annotation>& annotations,
+ const std::array<float, 4>& vals) {
std::array<Literal, 4> lanes;
for (size_t i = 0; i < 4; ++i) {
lanes[i] = Literal(vals[i]);
@@ -1627,7 +1965,9 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
return withLoc(pos, irBuilder.makeConst(Literal(lanes)));
}
- Result<> makeF64x2Const(Index pos, const std::array<double, 2>& vals) {
+ Result<> makeF64x2Const(Index pos,
+ const std::vector<Annotation>& annotations,
+ const std::array<double, 2>& vals) {
std::array<Literal, 2> lanes;
for (size_t i = 0; i < 2; ++i) {
lanes[i] = Literal(vals[i]);
@@ -1636,6 +1976,7 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
}
Result<> makeLoad(Index pos,
+ const std::vector<Annotation>& annotations,
Type type,
bool signed_,
int bytes,
@@ -1653,8 +1994,13 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
bytes, signed_, memarg.offset, memarg.align, type, *m));
}
- Result<> makeStore(
- Index pos, Type type, int bytes, bool isAtomic, Name* mem, Memarg memarg) {
+ Result<> makeStore(Index pos,
+ const std::vector<Annotation>& annotations,
+ Type type,
+ int bytes,
+ bool isAtomic,
+ Name* mem,
+ Memarg memarg) {
auto m = getMemory(pos, mem);
CHECK_ERR(m);
if (isAtomic) {
@@ -1665,67 +2011,104 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
pos, irBuilder.makeStore(bytes, memarg.offset, memarg.align, type, *m));
}
- Result<> makeAtomicRMW(
- Index pos, AtomicRMWOp op, Type type, int bytes, Name* mem, Memarg memarg) {
+ Result<> makeAtomicRMW(Index pos,
+ const std::vector<Annotation>& annotations,
+ AtomicRMWOp op,
+ Type type,
+ int bytes,
+ Name* mem,
+ Memarg memarg) {
auto m = getMemory(pos, mem);
CHECK_ERR(m);
return withLoc(pos,
irBuilder.makeAtomicRMW(op, bytes, memarg.offset, type, *m));
}
- Result<>
- makeAtomicCmpxchg(Index pos, Type type, int bytes, Name* mem, Memarg memarg) {
+ Result<> makeAtomicCmpxchg(Index pos,
+ const std::vector<Annotation>& annotations,
+ Type type,
+ int bytes,
+ Name* mem,
+ Memarg memarg) {
auto m = getMemory(pos, mem);
CHECK_ERR(m);
return withLoc(pos,
irBuilder.makeAtomicCmpxchg(bytes, memarg.offset, type, *m));
}
- Result<> makeAtomicWait(Index pos, Type type, Name* mem, Memarg memarg) {
+ Result<> makeAtomicWait(Index pos,
+ const std::vector<Annotation>& annotations,
+ Type type,
+ Name* mem,
+ Memarg memarg) {
auto m = getMemory(pos, mem);
CHECK_ERR(m);
return withLoc(pos, irBuilder.makeAtomicWait(type, memarg.offset, *m));
}
- Result<> makeAtomicNotify(Index pos, Name* mem, Memarg memarg) {
+ Result<> makeAtomicNotify(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name* mem,
+ Memarg memarg) {
auto m = getMemory(pos, mem);
CHECK_ERR(m);
return withLoc(pos, irBuilder.makeAtomicNotify(memarg.offset, *m));
}
- Result<> makeAtomicFence(Index pos) {
+ Result<> makeAtomicFence(Index pos,
+ const std::vector<Annotation>& annotations) {
return withLoc(pos, irBuilder.makeAtomicFence());
}
- Result<> makeSIMDExtract(Index pos, SIMDExtractOp op, uint8_t lane) {
+ Result<> makeSIMDExtract(Index pos,
+ const std::vector<Annotation>& annotations,
+ SIMDExtractOp op,
+ uint8_t lane) {
return withLoc(pos, irBuilder.makeSIMDExtract(op, lane));
}
- Result<> makeSIMDReplace(Index pos, SIMDReplaceOp op, uint8_t lane) {
+ Result<> makeSIMDReplace(Index pos,
+ const std::vector<Annotation>& annotations,
+ SIMDReplaceOp op,
+ uint8_t lane) {
return withLoc(pos, irBuilder.makeSIMDReplace(op, lane));
}
- Result<> makeSIMDShuffle(Index pos, const std::array<uint8_t, 16>& lanes) {
+ Result<> makeSIMDShuffle(Index pos,
+ const std::vector<Annotation>& annotations,
+ const std::array<uint8_t, 16>& lanes) {
return withLoc(pos, irBuilder.makeSIMDShuffle(lanes));
}
- Result<> makeSIMDTernary(Index pos, SIMDTernaryOp op) {
+ Result<> makeSIMDTernary(Index pos,
+ const std::vector<Annotation>& annotations,
+ SIMDTernaryOp op) {
return withLoc(pos, irBuilder.makeSIMDTernary(op));
}
- Result<> makeSIMDShift(Index pos, SIMDShiftOp op) {
+ Result<> makeSIMDShift(Index pos,
+ const std::vector<Annotation>& annotations,
+ SIMDShiftOp op) {
return withLoc(pos, irBuilder.makeSIMDShift(op));
}
- Result<> makeSIMDLoad(Index pos, SIMDLoadOp op, Name* mem, Memarg memarg) {
+ Result<> makeSIMDLoad(Index pos,
+ const std::vector<Annotation>& annotations,
+ SIMDLoadOp op,
+ Name* mem,
+ Memarg memarg) {
auto m = getMemory(pos, mem);
CHECK_ERR(m);
return withLoc(pos,
irBuilder.makeSIMDLoad(op, memarg.offset, memarg.align, *m));
}
- Result<> makeSIMDLoadStoreLane(
- Index pos, SIMDLoadStoreLaneOp op, Name* mem, Memarg memarg, uint8_t lane) {
+ Result<> makeSIMDLoadStoreLane(Index pos,
+ const std::vector<Annotation>& annotations,
+ SIMDLoadStoreLaneOp op,
+ Name* mem,
+ Memarg memarg,
+ uint8_t lane) {
auto m = getMemory(pos, mem);
CHECK_ERR(m);
return withLoc(pos,
@@ -1733,17 +2116,25 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
op, memarg.offset, memarg.align, lane, *m));
}
- Result<> makeMemoryInit(Index pos, Name* mem, Name data) {
+ Result<> makeMemoryInit(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name* mem,
+ Name data) {
auto m = getMemory(pos, mem);
CHECK_ERR(m);
return withLoc(pos, irBuilder.makeMemoryInit(data, *m));
}
- Result<> makeDataDrop(Index pos, Name data) {
+ Result<> makeDataDrop(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name data) {
return withLoc(pos, irBuilder.makeDataDrop(data));
}
- Result<> makeMemoryCopy(Index pos, Name* destMem, Name* srcMem) {
+ Result<> makeMemoryCopy(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name* destMem,
+ Name* srcMem) {
auto destMemory = getMemory(pos, destMem);
CHECK_ERR(destMemory);
auto srcMemory = getMemory(pos, srcMem);
@@ -1751,85 +2142,119 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
return withLoc(pos, irBuilder.makeMemoryCopy(*destMemory, *srcMemory));
}
- Result<> makeMemoryFill(Index pos, Name* mem) {
+ Result<> makeMemoryFill(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name* mem) {
auto m = getMemory(pos, mem);
CHECK_ERR(m);
return withLoc(pos, irBuilder.makeMemoryFill(*m));
}
- Result<> makePop(Index pos, Type type) {
+ Result<>
+ makePop(Index pos, const std::vector<Annotation>& annotations, Type type) {
return withLoc(pos, irBuilder.makePop(type));
}
- Result<> makeCall(Index pos, Name func, bool isReturn) {
+ Result<> makeCall(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name func,
+ bool isReturn) {
return withLoc(pos, irBuilder.makeCall(func, isReturn));
}
- Result<>
- makeCallIndirect(Index pos, Name* table, HeapType type, bool isReturn) {
+ Result<> makeCallIndirect(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name* table,
+ HeapType type,
+ bool isReturn) {
auto t = getTable(pos, table);
CHECK_ERR(t);
return withLoc(pos, irBuilder.makeCallIndirect(*t, type, isReturn));
}
- Result<> makeBreak(Index pos, Index label, bool isConditional) {
+ Result<> makeBreak(Index pos,
+ const std::vector<Annotation>& annotations,
+ Index label,
+ bool isConditional) {
return withLoc(pos, irBuilder.makeBreak(label, isConditional));
}
- Result<>
- makeSwitch(Index pos, const std::vector<Index> labels, Index defaultLabel) {
+ Result<> makeSwitch(Index pos,
+ const std::vector<Annotation>& annotations,
+ const std::vector<Index> labels,
+ Index defaultLabel) {
return withLoc(pos, irBuilder.makeSwitch(labels, defaultLabel));
}
- Result<> makeReturn(Index pos) {
+ Result<> makeReturn(Index pos, const std::vector<Annotation>& annotations) {
return withLoc(pos, irBuilder.makeReturn());
}
- Result<> makeRefNull(Index pos, HeapType type) {
+ Result<> makeRefNull(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type) {
return withLoc(pos, irBuilder.makeRefNull(type));
}
- Result<> makeRefIsNull(Index pos) {
+ Result<> makeRefIsNull(Index pos,
+ const std::vector<Annotation>& annotations) {
return withLoc(pos, irBuilder.makeRefIsNull());
}
- Result<> makeRefFunc(Index pos, Name func) {
+ Result<> makeRefFunc(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name func) {
return withLoc(pos, irBuilder.makeRefFunc(func));
}
- Result<> makeRefEq(Index pos) { return withLoc(pos, irBuilder.makeRefEq()); }
+ Result<> makeRefEq(Index pos, const std::vector<Annotation>& annotations) {
+ return withLoc(pos, irBuilder.makeRefEq());
+ }
- Result<> makeTableGet(Index pos, Name* table) {
+ Result<> makeTableGet(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name* table) {
auto t = getTable(pos, table);
CHECK_ERR(t);
return withLoc(pos, irBuilder.makeTableGet(*t));
}
- Result<> makeTableSet(Index pos, Name* table) {
+ Result<> makeTableSet(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name* table) {
auto t = getTable(pos, table);
CHECK_ERR(t);
return withLoc(pos, irBuilder.makeTableSet(*t));
}
- Result<> makeTableSize(Index pos, Name* table) {
+ Result<> makeTableSize(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name* table) {
auto t = getTable(pos, table);
CHECK_ERR(t);
return withLoc(pos, irBuilder.makeTableSize(*t));
}
- Result<> makeTableGrow(Index pos, Name* table) {
+ Result<> makeTableGrow(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name* table) {
auto t = getTable(pos, table);
CHECK_ERR(t);
return withLoc(pos, irBuilder.makeTableGrow(*t));
}
- Result<> makeTableFill(Index pos, Name* table) {
+ Result<> makeTableFill(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name* table) {
auto t = getTable(pos, table);
CHECK_ERR(t);
return withLoc(pos, irBuilder.makeTableFill(*t));
}
- Result<> makeTableCopy(Index pos, Name* destTable, Name* srcTable) {
+ Result<> makeTableCopy(Index pos,
+ const std::vector<Annotation>& annotations,
+ Name* destTable,
+ Name* srcTable) {
auto dest = getTable(pos, destTable);
CHECK_ERR(dest);
auto src = getTable(pos, srcTable);
@@ -1837,51 +2262,71 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
return withLoc(pos, irBuilder.makeTableCopy(*dest, *src));
}
- Result<> makeThrow(Index pos, Name tag) {
+ Result<>
+ makeThrow(Index pos, const std::vector<Annotation>& annotations, Name tag) {
return withLoc(pos, irBuilder.makeThrow(tag));
}
- Result<> makeRethrow(Index pos, Index label) {
+ Result<> makeRethrow(Index pos,
+ const std::vector<Annotation>& annotations,
+ Index label) {
return withLoc(pos, irBuilder.makeRethrow(label));
}
- Result<> makeThrowRef(Index pos) {
+ Result<> makeThrowRef(Index pos, const std::vector<Annotation>& annotations) {
return withLoc(pos, irBuilder.makeThrowRef());
}
- Result<> makeTupleMake(Index pos, uint32_t arity) {
+ Result<> makeTupleMake(Index pos,
+ const std::vector<Annotation>& annotations,
+ uint32_t arity) {
return withLoc(pos, irBuilder.makeTupleMake(arity));
}
- Result<> makeTupleExtract(Index pos, uint32_t arity, uint32_t index) {
+ Result<> makeTupleExtract(Index pos,
+ const std::vector<Annotation>& annotations,
+ uint32_t arity,
+ uint32_t index) {
return withLoc(pos, irBuilder.makeTupleExtract(arity, index));
}
- Result<> makeTupleDrop(Index pos, uint32_t arity) {
+ Result<> makeTupleDrop(Index pos,
+ const std::vector<Annotation>& annotations,
+ uint32_t arity) {
return withLoc(pos, irBuilder.makeTupleDrop(arity));
}
- Result<> makeCallRef(Index pos, HeapType type, bool isReturn) {
+ Result<> makeCallRef(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type,
+ bool isReturn) {
return withLoc(pos, irBuilder.makeCallRef(type, isReturn));
}
- Result<> makeRefI31(Index pos) {
+ Result<> makeRefI31(Index pos, const std::vector<Annotation>& annotations) {
return withLoc(pos, irBuilder.makeRefI31());
}
- Result<> makeI31Get(Index pos, bool signed_) {
+ Result<> makeI31Get(Index pos,
+ const std::vector<Annotation>& annotations,
+ bool signed_) {
return withLoc(pos, irBuilder.makeI31Get(signed_));
}
- Result<> makeRefTest(Index pos, Type type) {
+ Result<> makeRefTest(Index pos,
+ const std::vector<Annotation>& annotations,
+ Type type) {
return withLoc(pos, irBuilder.makeRefTest(type));
}
- Result<> makeRefCast(Index pos, Type type) {
+ Result<> makeRefCast(Index pos,
+ const std::vector<Annotation>& annotations,
+ Type type) {
return withLoc(pos, irBuilder.makeRefCast(type));
}
Result<> makeBrOn(Index pos,
+ const std::vector<Annotation>& annotations,
Index label,
BrOnOp op,
Type in = Type::none,
@@ -1889,136 +2334,205 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
return withLoc(pos, irBuilder.makeBrOn(label, op, in, out));
}
- Result<> makeStructNew(Index pos, HeapType type) {
+ Result<> makeStructNew(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type) {
return withLoc(pos, irBuilder.makeStructNew(type));
}
- Result<> makeStructNewDefault(Index pos, HeapType type) {
+ Result<> makeStructNewDefault(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type) {
return withLoc(pos, irBuilder.makeStructNewDefault(type));
}
- Result<> makeStructGet(Index pos, HeapType type, Index field, bool signed_) {
+ Result<> makeStructGet(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type,
+ Index field,
+ bool signed_) {
return withLoc(pos, irBuilder.makeStructGet(type, field, signed_));
}
- Result<> makeStructSet(Index pos, HeapType type, Index field) {
+ Result<> makeStructSet(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type,
+ Index field) {
return withLoc(pos, irBuilder.makeStructSet(type, field));
}
- Result<> makeArrayNew(Index pos, HeapType type) {
+ Result<> makeArrayNew(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type) {
return withLoc(pos, irBuilder.makeArrayNew(type));
}
- Result<> makeArrayNewDefault(Index pos, HeapType type) {
+ Result<> makeArrayNewDefault(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type) {
return withLoc(pos, irBuilder.makeArrayNewDefault(type));
}
- Result<> makeArrayNewData(Index pos, HeapType type, Name data) {
+ Result<> makeArrayNewData(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type,
+ Name data) {
return withLoc(pos, irBuilder.makeArrayNewData(type, data));
}
- Result<> makeArrayNewElem(Index pos, HeapType type, Name elem) {
+ Result<> makeArrayNewElem(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type,
+ Name elem) {
return withLoc(pos, irBuilder.makeArrayNewElem(type, elem));
}
- Result<> makeArrayNewFixed(Index pos, HeapType type, uint32_t arity) {
+ Result<> makeArrayNewFixed(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type,
+ uint32_t arity) {
return withLoc(pos, irBuilder.makeArrayNewFixed(type, arity));
}
- Result<> makeArrayGet(Index pos, HeapType type, bool signed_) {
+ Result<> makeArrayGet(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type,
+ bool signed_) {
return withLoc(pos, irBuilder.makeArrayGet(type, signed_));
}
- Result<> makeArraySet(Index pos, HeapType type) {
+ Result<> makeArraySet(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type) {
return withLoc(pos, irBuilder.makeArraySet(type));
}
- Result<> makeArrayLen(Index pos) {
+ Result<> makeArrayLen(Index pos, const std::vector<Annotation>& annotations) {
return withLoc(pos, irBuilder.makeArrayLen());
}
- Result<> makeArrayCopy(Index pos, HeapType destType, HeapType srcType) {
+ Result<> makeArrayCopy(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType destType,
+ HeapType srcType) {
return withLoc(pos, irBuilder.makeArrayCopy(destType, srcType));
}
- Result<> makeArrayFill(Index pos, HeapType type) {
+ Result<> makeArrayFill(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type) {
return withLoc(pos, irBuilder.makeArrayFill(type));
}
- Result<> makeArrayInitData(Index pos, HeapType type, Name data) {
+ Result<> makeArrayInitData(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type,
+ Name data) {
return withLoc(pos, irBuilder.makeArrayInitData(type, data));
}
- Result<> makeArrayInitElem(Index pos, HeapType type, Name elem) {
+ Result<> makeArrayInitElem(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type,
+ Name elem) {
return withLoc(pos, irBuilder.makeArrayInitElem(type, elem));
}
- Result<> makeRefAs(Index pos, RefAsOp op) {
+ Result<>
+ makeRefAs(Index pos, const std::vector<Annotation>& annotations, RefAsOp op) {
return withLoc(pos, irBuilder.makeRefAs(op));
}
- Result<> makeStringNew(Index pos, StringNewOp op, bool try_, Name* mem) {
+ Result<> makeStringNew(Index pos,
+ const std::vector<Annotation>& annotations,
+ StringNewOp op,
+ bool try_,
+ Name* mem) {
auto m = getMemory(pos, mem);
CHECK_ERR(m);
return withLoc(pos, irBuilder.makeStringNew(op, try_, *m));
}
- Result<> makeStringConst(Index pos, std::string_view str) {
+ Result<> makeStringConst(Index pos,
+ const std::vector<Annotation>& annotations,
+ std::string_view str) {
return withLoc(pos, irBuilder.makeStringConst(Name(str)));
}
- Result<> makeStringMeasure(Index pos, StringMeasureOp op) {
+ Result<> makeStringMeasure(Index pos,
+ const std::vector<Annotation>& annotations,
+ StringMeasureOp op) {
return withLoc(pos, irBuilder.makeStringMeasure(op));
}
- Result<> makeStringEncode(Index pos, StringEncodeOp op, Name* mem) {
+ Result<> makeStringEncode(Index pos,
+ const std::vector<Annotation>& annotations,
+ StringEncodeOp op,
+ Name* mem) {
auto m = getMemory(pos, mem);
CHECK_ERR(m);
return withLoc(pos, irBuilder.makeStringEncode(op, *m));
}
- Result<> makeStringConcat(Index pos) {
+ Result<> makeStringConcat(Index pos,
+ const std::vector<Annotation>& annotations) {
return withLoc(pos, irBuilder.makeStringConcat());
}
- Result<> makeStringEq(Index pos, StringEqOp op) {
+ Result<> makeStringEq(Index pos,
+ const std::vector<Annotation>& annotations,
+ StringEqOp op) {
return withLoc(pos, irBuilder.makeStringEq(op));
}
- Result<> makeStringAs(Index pos, StringAsOp op) {
+ Result<> makeStringAs(Index pos,
+ const std::vector<Annotation>& annotations,
+ StringAsOp op) {
return withLoc(pos, irBuilder.makeStringAs(op));
}
- Result<> makeStringWTF8Advance(Index pos) {
+ Result<> makeStringWTF8Advance(Index pos,
+ const std::vector<Annotation>& annotations) {
return withLoc(pos, irBuilder.makeStringWTF8Advance());
}
- Result<> makeStringWTF16Get(Index pos) {
+ Result<> makeStringWTF16Get(Index pos,
+ const std::vector<Annotation>& annotations) {
return withLoc(pos, irBuilder.makeStringWTF16Get());
}
- Result<> makeStringIterNext(Index pos) {
+ Result<> makeStringIterNext(Index pos,
+ const std::vector<Annotation>& annotations) {
return withLoc(pos, irBuilder.makeStringIterNext());
}
- Result<> makeStringIterMove(Index pos, StringIterMoveOp op) {
+ Result<> makeStringIterMove(Index pos,
+ const std::vector<Annotation>& annotations,
+ StringIterMoveOp op) {
return withLoc(pos, irBuilder.makeStringIterMove(op));
}
- Result<> makeStringSliceWTF(Index pos, StringSliceWTFOp op) {
+ Result<> makeStringSliceWTF(Index pos,
+ const std::vector<Annotation>& annotations,
+ StringSliceWTFOp op) {
return withLoc(pos, irBuilder.makeStringSliceWTF(op));
}
- Result<> makeStringSliceIter(Index pos) {
+ Result<> makeStringSliceIter(Index pos,
+ const std::vector<Annotation>& annotations) {
return withLoc(pos, irBuilder.makeStringSliceIter());
}
- Result<> makeContNew(Index pos, HeapType type) {
+ Result<> makeContNew(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type) {
return withLoc(pos, irBuilder.makeContNew(type));
}
- Result<>
- makeResume(Index pos, HeapType type, const TagLabelListT& tagLabels) {
+ Result<> makeResume(Index pos,
+ const std::vector<Annotation>& annotations,
+ HeapType type,
+ const TagLabelListT& tagLabels) {
std::vector<Name> tags;
std::vector<Index> labels;
tags.reserve(tagLabels.size());