summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-s-parser.cpp
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2022-07-21 10:41:39 -0700
committerGitHub <noreply@github.com>2022-07-21 10:41:39 -0700
commit58471ad7e2e5d5ce89830620c2b8fd6a2602be71 (patch)
tree77c042042737a11773f71c4788e21af12255f2d5 /src/wasm/wasm-s-parser.cpp
parent880e8352ee1fff828d15da5a7fe3a7932f577ef8 (diff)
downloadbinaryen-58471ad7e2e5d5ce89830620c2b8fd6a2602be71.tar.gz
binaryen-58471ad7e2e5d5ce89830620c2b8fd6a2602be71.tar.bz2
binaryen-58471ad7e2e5d5ce89830620c2b8fd6a2602be71.zip
[Strings] GC variants for string.encode (#4817)
Diffstat (limited to 'src/wasm/wasm-s-parser.cpp')
-rw-r--r--src/wasm/wasm-s-parser.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/wasm/wasm-s-parser.cpp b/src/wasm/wasm-s-parser.cpp
index 97a25d2c4..38ec788ba 100644
--- a/src/wasm/wasm-s-parser.cpp
+++ b/src/wasm/wasm-s-parser.cpp
@@ -2985,6 +2985,7 @@ Expression* SExpressionWasmBuilder::makeStringMeasure(Element& s,
Expression* SExpressionWasmBuilder::makeStringEncode(Element& s,
StringEncodeOp op) {
size_t i = 1;
+ Expression* start = nullptr;
if (op == StringEncodeWTF8) {
const char* str = s[i++]->c_str();
if (strncmp(str, "utf8", 4) == 0) {
@@ -2994,9 +2995,21 @@ Expression* SExpressionWasmBuilder::makeStringEncode(Element& s,
} else {
throw ParseException("bad string.new op", s.line, s.col);
}
+ } else if (op == StringEncodeWTF8Array) {
+ const char* str = s[i++]->c_str();
+ if (strncmp(str, "utf8", 4) == 0) {
+ op = StringEncodeUTF8Array;
+ } else if (strncmp(str, "wtf8", 4) == 0) {
+ op = StringEncodeWTF8Array;
+ } else {
+ throw ParseException("bad string.new op", s.line, s.col);
+ }
+ start = parseExpression(s[i + 2]);
+ } else if (op == StringEncodeWTF16Array) {
+ start = parseExpression(s[i + 2]);
}
return Builder(wasm).makeStringEncode(
- op, parseExpression(s[i]), parseExpression(s[i + 1]));
+ op, parseExpression(s[i]), parseExpression(s[i + 1]), start);
}
Expression* SExpressionWasmBuilder::makeStringConcat(Element& s) {