diff options
author | Thomas Lively <tlively@google.com> | 2024-04-10 15:42:03 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-10 22:42:03 +0000 |
commit | dd6bcf5aab473ab8daff6029706d9350894e79a0 (patch) | |
tree | dbebc42efb80bee776827240e900bfc87656675d /src | |
parent | 0481320ba921b25f631e4708534055ce3d67cc1c (diff) | |
download | binaryen-dd6bcf5aab473ab8daff6029706d9350894e79a0.tar.gz binaryen-dd6bcf5aab473ab8daff6029706d9350894e79a0.tar.bz2 binaryen-dd6bcf5aab473ab8daff6029706d9350894e79a0.zip |
[Parser] Parse contref and nullcontref types (#6485)
Diffstat (limited to 'src')
-rw-r--r-- | src/parser/contexts.h | 4 | ||||
-rw-r--r-- | src/parser/parsers.h | 12 |
2 files changed, 16 insertions, 0 deletions
diff --git a/src/parser/contexts.h b/src/parser/contexts.h index 0979461a0..d68d475a0 100644 --- a/src/parser/contexts.h +++ b/src/parser/contexts.h @@ -112,10 +112,12 @@ struct NullTypeParserCtx { HeapTypeT makeStringViewWTF8Type() { return Ok{}; } HeapTypeT makeStringViewWTF16Type() { return Ok{}; } HeapTypeT makeStringViewIterType() { return Ok{}; } + HeapTypeT makeContType() { return Ok{}; } HeapTypeT makeNoneType() { return Ok{}; } HeapTypeT makeNoextType() { return Ok{}; } HeapTypeT makeNofuncType() { return Ok{}; } HeapTypeT makeNoexnType() { return Ok{}; } + HeapTypeT makeNocontType() { return Ok{}; } TypeT makeI32() { return Ok{}; } TypeT makeI64() { return Ok{}; } @@ -211,10 +213,12 @@ template<typename Ctx> struct TypeParserCtx { HeapTypeT makeStringViewWTF8Type() { return HeapType::stringview_wtf8; } HeapTypeT makeStringViewWTF16Type() { return HeapType::stringview_wtf16; } HeapTypeT makeStringViewIterType() { return HeapType::stringview_iter; } + HeapTypeT makeContType() { return HeapType::cont; } HeapTypeT makeNoneType() { return HeapType::none; } HeapTypeT makeNoextType() { return HeapType::noext; } HeapTypeT makeNofuncType() { return HeapType::nofunc; } HeapTypeT makeNoexnType() { return HeapType::noexn; } + HeapTypeT makeNocontType() { return HeapType::nocont; } TypeT makeI32() { return Type::i32; } TypeT makeI64() { return Type::i64; } diff --git a/src/parser/parsers.h b/src/parser/parsers.h index 51b5d8f9e..bcae62e14 100644 --- a/src/parser/parsers.h +++ b/src/parser/parsers.h @@ -425,6 +425,9 @@ template<typename Ctx> Result<typename Ctx::HeapTypeT> heaptype(Ctx& ctx) { if (ctx.in.takeKeyword("stringview_iter"sv)) { return ctx.makeStringViewIterType(); } + if (ctx.in.takeKeyword("cont"sv)) { + return ctx.makeContType(); + } if (ctx.in.takeKeyword("none"sv)) { return ctx.makeNoneType(); } @@ -437,6 +440,9 @@ template<typename Ctx> Result<typename Ctx::HeapTypeT> heaptype(Ctx& ctx) { if (ctx.in.takeKeyword("noexn"sv)) { return ctx.makeNoexnType(); } + if (ctx.in.takeKeyword("nocont"sv)) { + return ctx.makeNocontType(); + } auto type = typeidx(ctx); CHECK_ERR(type); return *type; @@ -487,6 +493,9 @@ template<typename Ctx> MaybeResult<typename Ctx::TypeT> reftype(Ctx& ctx) { if (ctx.in.takeKeyword("stringview_iter"sv)) { return ctx.makeRefType(ctx.makeStringViewIterType(), Nullable); } + if (ctx.in.takeKeyword("contref"sv)) { + return ctx.makeRefType(ctx.makeContType(), Nullable); + } if (ctx.in.takeKeyword("nullref"sv)) { return ctx.makeRefType(ctx.makeNoneType(), Nullable); } @@ -499,6 +508,9 @@ template<typename Ctx> MaybeResult<typename Ctx::TypeT> reftype(Ctx& ctx) { if (ctx.in.takeKeyword("nullexnref"sv)) { return ctx.makeRefType(ctx.makeNoexnType(), Nullable); } + if (ctx.in.takeKeyword("nullcontref"sv)) { + return ctx.makeRefType(ctx.makeNocontType(), Nullable); + } if (!ctx.in.takeSExprStart("ref"sv)) { return {}; |