summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-s-parser.cpp
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2021-01-26 21:09:31 +0000
committerGitHub <noreply@github.com>2021-01-26 13:09:31 -0800
commit5e57a13614c56f959faab675d6bcabbd629ec562 (patch)
tree3c86a2741cffa6da009741506eed4513acc60bf1 /src/wasm/wasm-s-parser.cpp
parent89164cdf1403a21a3d79ada0f0cf529d526c9de6 (diff)
downloadbinaryen-5e57a13614c56f959faab675d6bcabbd629ec562.tar.gz
binaryen-5e57a13614c56f959faab675d6bcabbd629ec562.tar.bz2
binaryen-5e57a13614c56f959faab675d6bcabbd629ec562.zip
[GC] RefIsNull => RefIs. (#3516)
This internal refactoring prepares us for ref.is_func/data/i31, by renaming the node and adding an "op" field. For now that field must always be "Null" which means it is a ref.is_null. This adjusts the C API to match the new IR shape. The high-level JS API is unchanged.
Diffstat (limited to 'src/wasm/wasm-s-parser.cpp')
-rw-r--r--src/wasm/wasm-s-parser.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/wasm/wasm-s-parser.cpp b/src/wasm/wasm-s-parser.cpp
index 857c0143b..b2212db18 100644
--- a/src/wasm/wasm-s-parser.cpp
+++ b/src/wasm/wasm-s-parser.cpp
@@ -51,7 +51,7 @@ int unhex(char c) {
namespace wasm {
static Name STRUCT("struct"), FIELD("field"), ARRAY("array"), I8("i8"),
- I16("i16"), RTT("rtt");
+ I16("i16"), RTT("rtt"), REF_IS_NULL("ref.is_null");
static Address getAddress(const Element* s) { return atoll(s->c_str()); }
@@ -1922,8 +1922,13 @@ Expression* SExpressionWasmBuilder::makeRefNull(Element& s) {
return ret;
}
-Expression* SExpressionWasmBuilder::makeRefIsNull(Element& s) {
- auto ret = allocator.alloc<RefIsNull>();
+Expression* SExpressionWasmBuilder::makeRefIs(Element& s) {
+ auto ret = allocator.alloc<RefIs>();
+ if (*s[0] == REF_IS_NULL) {
+ ret->op = RefIsNull;
+ } else {
+ WASM_UNREACHABLE("unimplemented ref.is_*");
+ }
ret->value = parseExpression(s[1]);
ret->finalize();
return ret;