diff options
Diffstat (limited to 'src/parser/wast-parser.cpp')
-rw-r--r-- | src/parser/wast-parser.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/parser/wast-parser.cpp b/src/parser/wast-parser.cpp index 00269a577..5eaf352b7 100644 --- a/src/parser/wast-parser.cpp +++ b/src/parser/wast-parser.cpp @@ -217,6 +217,34 @@ Result<ExpectedResult> result(Lexer& in) { return RefResult{HeapType::func}; } + if (in.takeSExprStart("ref.struct")) { + if (!in.takeRParen()) { + return in.err("expected end of ref.struct"); + } + return RefResult{HeapType::struct_}; + } + + if (in.takeSExprStart("ref.array")) { + if (!in.takeRParen()) { + return in.err("expected end of ref.array"); + } + return RefResult{HeapType::array}; + } + + if (in.takeSExprStart("ref.eq")) { + if (!in.takeRParen()) { + return in.err("expected end of ref.eq"); + } + return RefResult{HeapType::eq}; + } + + if (in.takeSExprStart("ref.i31")) { + if (!in.takeRParen()) { + return in.err("expected end of ref.i31"); + } + return RefResult{HeapType::i31}; + } + if (in.takeSExprStart("ref.i31_shared")) { if (!in.takeRParen()) { return in.err("expected end of ref.i31_shared"); |