summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-binary.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm/wasm-binary.cpp')
-rw-r--r--src/wasm/wasm-binary.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp
index 8108027d4..e2588422c 100644
--- a/src/wasm/wasm-binary.cpp
+++ b/src/wasm/wasm-binary.cpp
@@ -7157,6 +7157,7 @@ bool WasmBinaryBuilder::maybeVisitArrayCopy(Expression*& out, uint32_t code) {
bool WasmBinaryBuilder::maybeVisitStringNew(Expression*& out, uint32_t code) {
StringNewOp op;
+ Expression* length = nullptr;
if (code == BinaryConsts::StringNewWTF8) {
auto policy = getU32LEB();
switch (policy) {
@@ -7172,12 +7173,30 @@ bool WasmBinaryBuilder::maybeVisitStringNew(Expression*& out, uint32_t code) {
default:
throwError("bad policy for string.new");
}
+ length = popNonVoidExpression();
} else if (code == BinaryConsts::StringNewWTF16) {
op = StringNewWTF16;
+ length = popNonVoidExpression();
+ } else if (code == BinaryConsts::StringNewWTF8Array) {
+ auto policy = getU32LEB();
+ switch (policy) {
+ case BinaryConsts::StringPolicy::UTF8:
+ op = StringNewUTF8Array;
+ break;
+ case BinaryConsts::StringPolicy::WTF8:
+ op = StringNewWTF8Array;
+ break;
+ case BinaryConsts::StringPolicy::Replace:
+ op = StringNewReplaceArray;
+ break;
+ default:
+ throwError("bad policy for string.new");
+ }
+ } else if (code == BinaryConsts::StringNewWTF16Array) {
+ op = StringNewWTF16Array;
} else {
return false;
}
- auto* length = popNonVoidExpression();
auto* ptr = popNonVoidExpression();
out = Builder(wasm).makeStringNew(op, ptr, length);
return true;