summaryrefslogtreecommitdiff
path: root/src/parser/wast-parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser/wast-parser.cpp')
-rw-r--r--src/parser/wast-parser.cpp28
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");