diff options
author | Alon Zakai <azakai@google.com> | 2022-07-19 16:03:01 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-19 16:03:01 -0700 |
commit | 1c53f7dd29e79bc1894959cad817b22f087689f7 (patch) | |
tree | c3d114a3359f4ba9175f7cff3bf3bc6b83c2b885 /src/wasm/wasm-s-parser.cpp | |
parent | 984078acc7625c44870a3d256deaa19b76894de0 (diff) | |
download | binaryen-1c53f7dd29e79bc1894959cad817b22f087689f7.tar.gz binaryen-1c53f7dd29e79bc1894959cad817b22f087689f7.tar.bz2 binaryen-1c53f7dd29e79bc1894959cad817b22f087689f7.zip |
[Strings] Add string.new GC variants (#4813)
Diffstat (limited to 'src/wasm/wasm-s-parser.cpp')
-rw-r--r-- | src/wasm/wasm-s-parser.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/wasm/wasm-s-parser.cpp b/src/wasm/wasm-s-parser.cpp index f3bafe3de..bfe09280d 100644 --- a/src/wasm/wasm-s-parser.cpp +++ b/src/wasm/wasm-s-parser.cpp @@ -2937,6 +2937,7 @@ Expression* SExpressionWasmBuilder::makeRefAs(Element& s, RefAsOp op) { Expression* SExpressionWasmBuilder::makeStringNew(Element& s, StringNewOp op) { size_t i = 1; + Expression* length = nullptr; if (op == StringNewWTF8) { const char* str = s[i++]->c_str(); if (strncmp(str, "utf8", 4) == 0) { @@ -2948,9 +2949,22 @@ Expression* SExpressionWasmBuilder::makeStringNew(Element& s, StringNewOp op) { } else { throw ParseException("bad string.new op", s.line, s.col); } + length = parseExpression(s[i + 1]); + } else if (op == StringNewWTF16) { + length = parseExpression(s[i + 1]); + } else if (op == StringNewWTF8Array) { + const char* str = s[i++]->c_str(); + if (strncmp(str, "utf8", 4) == 0) { + op = StringNewUTF8Array; + } else if (strncmp(str, "wtf8", 4) == 0) { + op = StringNewWTF8Array; + } else if (strncmp(str, "replace", 7) == 0) { + op = StringNewReplaceArray; + } else { + throw ParseException("bad string.new op", s.line, s.col); + } } - return Builder(wasm).makeStringNew( - op, parseExpression(s[i]), parseExpression(s[i + 1])); + return Builder(wasm).makeStringNew(op, parseExpression(s[i]), length); } Expression* SExpressionWasmBuilder::makeStringConst(Element& s) { |