@@ -104,6 +104,10 @@ struct NullTypeParserCtx {
104104 HeapTypeT makeI31 () { return Ok{}; }
105105 HeapTypeT makeStructType () { return Ok{}; }
106106 HeapTypeT makeArrayType () { return Ok{}; }
107+ HeapTypeT makeStringType () { return Ok{}; }
108+ HeapTypeT makeStringViewWTF8Type () { return Ok{}; }
109+ HeapTypeT makeStringViewWTF16Type () { return Ok{}; }
110+ HeapTypeT makeStringViewIterType () { return Ok{}; }
107111
108112 TypeT makeI32 () { return Ok{}; }
109113 TypeT makeI64 () { return Ok{}; }
@@ -190,6 +194,10 @@ template<typename Ctx> struct TypeParserCtx {
190194 HeapTypeT makeI31 () { return HeapType::i31; }
191195 HeapTypeT makeStructType () { return HeapType::struct_; }
192196 HeapTypeT makeArrayType () { return HeapType::array; }
197+ HeapTypeT makeStringType () { return HeapType::string; }
198+ HeapTypeT makeStringViewWTF8Type () { return HeapType::stringview_wtf8; }
199+ HeapTypeT makeStringViewWTF16Type () { return HeapType::stringview_wtf16; }
200+ HeapTypeT makeStringViewIterType () { return HeapType::stringview_iter; }
193201
194202 TypeT makeI32 () { return Type::i32 ; }
195203 TypeT makeI64 () { return Type::i64 ; }
@@ -491,6 +499,19 @@ struct NullInstrParserCtx {
491499 return Ok{};
492500 }
493501 Result<> makeRefAs (Index, RefAsOp) { return Ok{}; }
502+ Result<> makeStringNew (Index, StringNewOp, bool , MemoryIdxT*) { return Ok{}; }
503+ Result<> makeStringConst (Index, std::string_view) { return Ok{}; }
504+ Result<> makeStringMeasure (Index, StringMeasureOp) { return Ok{}; }
505+ Result<> makeStringEncode (Index, StringEncodeOp, MemoryIdxT*) { return Ok{}; }
506+ Result<> makeStringConcat (Index) { return Ok{}; }
507+ Result<> makeStringEq (Index, StringEqOp) { return Ok{}; }
508+ Result<> makeStringAs (Index, StringAsOp) { return Ok{}; }
509+ Result<> makeStringWTF8Advance (Index) { return Ok{}; }
510+ Result<> makeStringWTF16Get (Index) { return Ok{}; }
511+ Result<> makeStringIterNext (Index) { return Ok{}; }
512+ Result<> makeStringIterMove (Index, StringIterMoveOp) { return Ok{}; }
513+ Result<> makeStringSliceWTF (Index, StringSliceWTFOp) { return Ok{}; }
514+ Result<> makeStringSliceIter (Index) { return Ok{}; }
494515};
495516
496517// Phase 1: Parse definition spans for top-level module elements and determine
@@ -1695,6 +1716,62 @@ struct ParseDefsCtx : TypeParserCtx<ParseDefsCtx> {
16951716 Result<> makeRefAs (Index pos, RefAsOp op) {
16961717 return withLoc (pos, irBuilder.makeRefAs (op));
16971718 }
1719+
1720+ Result<> makeStringNew (Index pos, StringNewOp op, bool try_, Name* mem) {
1721+ auto m = getMemory (pos, mem);
1722+ CHECK_ERR (m);
1723+ return withLoc (pos, irBuilder.makeStringNew (op, try_, *m));
1724+ }
1725+
1726+ Result<> makeStringConst (Index pos, std::string_view str) {
1727+ return withLoc (pos, irBuilder.makeStringConst (Name (str)));
1728+ }
1729+
1730+ Result<> makeStringMeasure (Index pos, StringMeasureOp op) {
1731+ return withLoc (pos, irBuilder.makeStringMeasure (op));
1732+ }
1733+
1734+ Result<> makeStringEncode (Index pos, StringEncodeOp op, Name* mem) {
1735+ auto m = getMemory (pos, mem);
1736+ CHECK_ERR (m);
1737+ return withLoc (pos, irBuilder.makeStringEncode (op, *m));
1738+ }
1739+
1740+ Result<> makeStringConcat (Index pos) {
1741+ return withLoc (pos, irBuilder.makeStringConcat ());
1742+ }
1743+
1744+ Result<> makeStringEq (Index pos, StringEqOp op) {
1745+ return withLoc (pos, irBuilder.makeStringEq (op));
1746+ }
1747+
1748+ Result<> makeStringAs (Index pos, StringAsOp op) {
1749+ return withLoc (pos, irBuilder.makeStringAs (op));
1750+ }
1751+
1752+ Result<> makeStringWTF8Advance (Index pos) {
1753+ return withLoc (pos, irBuilder.makeStringWTF8Advance ());
1754+ }
1755+
1756+ Result<> makeStringWTF16Get (Index pos) {
1757+ return withLoc (pos, irBuilder.makeStringWTF16Get ());
1758+ }
1759+
1760+ Result<> makeStringIterNext (Index pos) {
1761+ return withLoc (pos, irBuilder.makeStringIterNext ());
1762+ }
1763+
1764+ Result<> makeStringIterMove (Index pos, StringIterMoveOp op) {
1765+ return withLoc (pos, irBuilder.makeStringIterMove (op));
1766+ }
1767+
1768+ Result<> makeStringSliceWTF (Index pos, StringSliceWTFOp op) {
1769+ return withLoc (pos, irBuilder.makeStringSliceWTF (op));
1770+ }
1771+
1772+ Result<> makeStringSliceIter (Index pos) {
1773+ return withLoc (pos, irBuilder.makeStringSliceIter ());
1774+ }
16981775};
16991776
17001777} // namespace wasm::WATParser
0 commit comments