summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xscripts/gen-s-parser.py9
-rw-r--r--src/gen-s-parser.inc260
-rw-r--r--src/passes/Print.cpp28
-rw-r--r--src/wasm/wasm-s-parser.cpp64
-rw-r--r--test/example/c-api-kitchen-sink.txt28
-rw-r--r--test/lit/passes/simplify-locals-strings.wast52
-rw-r--r--test/lit/strings.wast204
7 files changed, 501 insertions, 144 deletions
diff --git a/scripts/gen-s-parser.py b/scripts/gen-s-parser.py
index f82156b43..7e8a5b830 100755
--- a/scripts/gen-s-parser.py
+++ b/scripts/gen-s-parser.py
@@ -597,20 +597,29 @@ instructions = [
("ref.as_non_null", "makeRefAs(s, RefAsNonNull)"),
("extern.internalize", "makeRefAs(s, ExternInternalize)"),
("extern.externalize", "makeRefAs(s, ExternExternalize)"),
+ ("string.new_utf8", "makeStringNew(s, StringNewUTF8, false)"),
+ ("string.new_lossy_utf8", "makeStringNew(s, StringNewLossyUTF8, false)"),
("string.new_wtf8", "makeStringNew(s, StringNewWTF8, false)"),
("string.new_wtf16", "makeStringNew(s, StringNewWTF16, false)"),
+ ("string.new_utf8_array", "makeStringNew(s, StringNewUTF8Array, false)"),
+ ("string.new_lossy_utf8_array", "makeStringNew(s, StringNewLossyUTF8Array, false)"),
("string.new_wtf8_array", "makeStringNew(s, StringNewWTF8Array, false)"),
("string.new_wtf16_array", "makeStringNew(s, StringNewWTF16Array, false)"),
("string.from_code_point", "makeStringNew(s, StringNewFromCodePoint, false)"),
("string.new_utf8_try", "makeStringNew(s, StringNewUTF8, true)"),
("string.new_utf8_array_try", "makeStringNew(s, StringNewUTF8Array, true)"),
("string.const", "makeStringConst(s)"),
+ ("string.measure_utf8", "makeStringMeasure(s, StringMeasureUTF8)"),
("string.measure_wtf8", "makeStringMeasure(s, StringMeasureWTF8)"),
("string.measure_wtf16", "makeStringMeasure(s, StringMeasureWTF16)"),
("string.is_usv_sequence", "makeStringMeasure(s, StringMeasureIsUSV)"),
("string.hash", "makeStringMeasure(s, StringMeasureHash)"),
+ ("string.encode_utf8", "makeStringEncode(s, StringEncodeUTF8)"),
+ ("string.encode_lossy_utf8", "makeStringEncode(s, StringEncodeLossyUTF8)"),
("string.encode_wtf8", "makeStringEncode(s, StringEncodeWTF8)"),
("string.encode_wtf16", "makeStringEncode(s, StringEncodeWTF16)"),
+ ("string.encode_utf8_array", "makeStringEncode(s, StringEncodeUTF8Array)"),
+ ("string.encode_lossy_utf8_array", "makeStringEncode(s, StringEncodeLossyUTF8Array)"),
("string.encode_wtf8_array", "makeStringEncode(s, StringEncodeWTF8Array)"),
("string.encode_wtf16_array", "makeStringEncode(s, StringEncodeWTF16Array)"),
("string.concat", "makeStringConcat(s)"),
diff --git a/src/gen-s-parser.inc b/src/gen-s-parser.inc
index ce7baadd5..14386334e 100644
--- a/src/gen-s-parser.inc
+++ b/src/gen-s-parser.inc
@@ -3089,29 +3089,56 @@ switch (buf[0]) {
case 'e': {
switch (buf[8]) {
case 'n': {
- switch (buf[17]) {
- case '1': {
- switch (buf[19]) {
+ switch (buf[14]) {
+ case 'l': {
+ switch (buf[24]) {
case '\0':
- if (op == "string.encode_wtf16"sv) { return makeStringEncode(s, StringEncodeWTF16); }
+ if (op == "string.encode_lossy_utf8"sv) { return makeStringEncode(s, StringEncodeLossyUTF8); }
goto parse_error;
case '_':
- if (op == "string.encode_wtf16_array"sv) { return makeStringEncode(s, StringEncodeWTF16Array); }
+ if (op == "string.encode_lossy_utf8_array"sv) { return makeStringEncode(s, StringEncodeLossyUTF8Array); }
goto parse_error;
default: goto parse_error;
}
}
- case '8': {
+ case 'u': {
switch (buf[18]) {
case '\0':
- if (op == "string.encode_wtf8"sv) { return makeStringEncode(s, StringEncodeWTF8); }
+ if (op == "string.encode_utf8"sv) { return makeStringEncode(s, StringEncodeUTF8); }
goto parse_error;
case '_':
- if (op == "string.encode_wtf8_array"sv) { return makeStringEncode(s, StringEncodeWTF8Array); }
+ if (op == "string.encode_utf8_array"sv) { return makeStringEncode(s, StringEncodeUTF8Array); }
goto parse_error;
default: goto parse_error;
}
}
+ case 'w': {
+ switch (buf[17]) {
+ case '1': {
+ switch (buf[19]) {
+ case '\0':
+ if (op == "string.encode_wtf16"sv) { return makeStringEncode(s, StringEncodeWTF16); }
+ goto parse_error;
+ case '_':
+ if (op == "string.encode_wtf16_array"sv) { return makeStringEncode(s, StringEncodeWTF16Array); }
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case '8': {
+ switch (buf[18]) {
+ case '\0':
+ if (op == "string.encode_wtf8"sv) { return makeStringEncode(s, StringEncodeWTF8); }
+ goto parse_error;
+ case '_':
+ if (op == "string.encode_wtf8_array"sv) { return makeStringEncode(s, StringEncodeWTF8Array); }
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
default: goto parse_error;
}
}
@@ -3131,29 +3158,64 @@ switch (buf[0]) {
if (op == "string.is_usv_sequence"sv) { return makeStringMeasure(s, StringMeasureIsUSV); }
goto parse_error;
case 'm': {
- switch (buf[18]) {
- case '1':
- if (op == "string.measure_wtf16"sv) { return makeStringMeasure(s, StringMeasureWTF16); }
- goto parse_error;
- case '8':
- if (op == "string.measure_wtf8"sv) { return makeStringMeasure(s, StringMeasureWTF8); }
+ switch (buf[15]) {
+ case 'u':
+ if (op == "string.measure_utf8"sv) { return makeStringMeasure(s, StringMeasureUTF8); }
goto parse_error;
+ case 'w': {
+ switch (buf[18]) {
+ case '1':
+ if (op == "string.measure_wtf16"sv) { return makeStringMeasure(s, StringMeasureWTF16); }
+ goto parse_error;
+ case '8':
+ if (op == "string.measure_wtf8"sv) { return makeStringMeasure(s, StringMeasureWTF8); }
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
default: goto parse_error;
}
}
case 'n': {
switch (buf[11]) {
- case 'u': {
- switch (buf[16]) {
- case 'a':
- if (op == "string.new_utf8_array_try"sv) { return makeStringNew(s, StringNewUTF8Array, true); }
+ case 'l': {
+ switch (buf[21]) {
+ case '\0':
+ if (op == "string.new_lossy_utf8"sv) { return makeStringNew(s, StringNewLossyUTF8, false); }
goto parse_error;
- case 't':
- if (op == "string.new_utf8_try"sv) { return makeStringNew(s, StringNewUTF8, true); }
+ case '_':
+ if (op == "string.new_lossy_utf8_array"sv) { return makeStringNew(s, StringNewLossyUTF8Array, false); }
goto parse_error;
default: goto parse_error;
}
}
+ case 'u': {
+ switch (buf[15]) {
+ case '\0':
+ if (op == "string.new_utf8"sv) { return makeStringNew(s, StringNewUTF8, false); }
+ goto parse_error;
+ case '_': {
+ switch (buf[16]) {
+ case 'a': {
+ switch (buf[21]) {
+ case '\0':
+ if (op == "string.new_utf8_array"sv) { return makeStringNew(s, StringNewUTF8Array, false); }
+ goto parse_error;
+ case '_':
+ if (op == "string.new_utf8_array_try"sv) { return makeStringNew(s, StringNewUTF8Array, true); }
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 't':
+ if (op == "string.new_utf8_try"sv) { return makeStringNew(s, StringNewUTF8, true); }
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
case 'w': {
switch (buf[14]) {
case '1': {
@@ -8695,19 +8757,19 @@ switch (buf[0]) {
case 'e': {
switch (buf[8]) {
case 'n': {
- switch (buf[17]) {
- case '1': {
- switch (buf[19]) {
+ switch (buf[14]) {
+ case 'l': {
+ switch (buf[24]) {
case '\0':
- if (op == "string.encode_wtf16"sv) {
- auto ret = makeStringEncode(ctx, pos, StringEncodeWTF16);
+ if (op == "string.encode_lossy_utf8"sv) {
+ auto ret = makeStringEncode(ctx, pos, StringEncodeLossyUTF8);
CHECK_ERR(ret);
return *ret;
}
goto parse_error;
case '_':
- if (op == "string.encode_wtf16_array"sv) {
- auto ret = makeStringEncode(ctx, pos, StringEncodeWTF16Array);
+ if (op == "string.encode_lossy_utf8_array"sv) {
+ auto ret = makeStringEncode(ctx, pos, StringEncodeLossyUTF8Array);
CHECK_ERR(ret);
return *ret;
}
@@ -8715,18 +8777,18 @@ switch (buf[0]) {
default: goto parse_error;
}
}
- case '8': {
+ case 'u': {
switch (buf[18]) {
case '\0':
- if (op == "string.encode_wtf8"sv) {
- auto ret = makeStringEncode(ctx, pos, StringEncodeWTF8);
+ if (op == "string.encode_utf8"sv) {
+ auto ret = makeStringEncode(ctx, pos, StringEncodeUTF8);
CHECK_ERR(ret);
return *ret;
}
goto parse_error;
case '_':
- if (op == "string.encode_wtf8_array"sv) {
- auto ret = makeStringEncode(ctx, pos, StringEncodeWTF8Array);
+ if (op == "string.encode_utf8_array"sv) {
+ auto ret = makeStringEncode(ctx, pos, StringEncodeUTF8Array);
CHECK_ERR(ret);
return *ret;
}
@@ -8734,6 +8796,49 @@ switch (buf[0]) {
default: goto parse_error;
}
}
+ case 'w': {
+ switch (buf[17]) {
+ case '1': {
+ switch (buf[19]) {
+ case '\0':
+ if (op == "string.encode_wtf16"sv) {
+ auto ret = makeStringEncode(ctx, pos, StringEncodeWTF16);
+ CHECK_ERR(ret);
+ return *ret;
+ }
+ goto parse_error;
+ case '_':
+ if (op == "string.encode_wtf16_array"sv) {
+ auto ret = makeStringEncode(ctx, pos, StringEncodeWTF16Array);
+ CHECK_ERR(ret);
+ return *ret;
+ }
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case '8': {
+ switch (buf[18]) {
+ case '\0':
+ if (op == "string.encode_wtf8"sv) {
+ auto ret = makeStringEncode(ctx, pos, StringEncodeWTF8);
+ CHECK_ERR(ret);
+ return *ret;
+ }
+ goto parse_error;
+ case '_':
+ if (op == "string.encode_wtf8_array"sv) {
+ auto ret = makeStringEncode(ctx, pos, StringEncodeWTF8Array);
+ CHECK_ERR(ret);
+ return *ret;
+ }
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
default: goto parse_error;
}
}
@@ -8769,38 +8874,50 @@ switch (buf[0]) {
}
goto parse_error;
case 'm': {
- switch (buf[18]) {
- case '1':
- if (op == "string.measure_wtf16"sv) {
- auto ret = makeStringMeasure(ctx, pos, StringMeasureWTF16);
+ switch (buf[15]) {
+ case 'u':
+ if (op == "string.measure_utf8"sv) {
+ auto ret = makeStringMeasure(ctx, pos, StringMeasureUTF8);
CHECK_ERR(ret);
return *ret;
}
goto parse_error;
- case '8':
- if (op == "string.measure_wtf8"sv) {
- auto ret = makeStringMeasure(ctx, pos, StringMeasureWTF8);
- CHECK_ERR(ret);
- return *ret;
+ case 'w': {
+ switch (buf[18]) {
+ case '1':
+ if (op == "string.measure_wtf16"sv) {
+ auto ret = makeStringMeasure(ctx, pos, StringMeasureWTF16);
+ CHECK_ERR(ret);
+ return *ret;
+ }
+ goto parse_error;
+ case '8':
+ if (op == "string.measure_wtf8"sv) {
+ auto ret = makeStringMeasure(ctx, pos, StringMeasureWTF8);
+ CHECK_ERR(ret);
+ return *ret;
+ }
+ goto parse_error;
+ default: goto parse_error;
}
- goto parse_error;
+ }
default: goto parse_error;
}
}
case 'n': {
switch (buf[11]) {
- case 'u': {
- switch (buf[16]) {
- case 'a':
- if (op == "string.new_utf8_array_try"sv) {
- auto ret = makeStringNew(ctx, pos, StringNewUTF8Array, true);
+ case 'l': {
+ switch (buf[21]) {
+ case '\0':
+ if (op == "string.new_lossy_utf8"sv) {
+ auto ret = makeStringNew(ctx, pos, StringNewLossyUTF8, false);
CHECK_ERR(ret);
return *ret;
}
goto parse_error;
- case 't':
- if (op == "string.new_utf8_try"sv) {
- auto ret = makeStringNew(ctx, pos, StringNewUTF8, true);
+ case '_':
+ if (op == "string.new_lossy_utf8_array"sv) {
+ auto ret = makeStringNew(ctx, pos, StringNewLossyUTF8Array, false);
CHECK_ERR(ret);
return *ret;
}
@@ -8808,6 +8925,49 @@ switch (buf[0]) {
default: goto parse_error;
}
}
+ case 'u': {
+ switch (buf[15]) {
+ case '\0':
+ if (op == "string.new_utf8"sv) {
+ auto ret = makeStringNew(ctx, pos, StringNewUTF8, false);
+ CHECK_ERR(ret);
+ return *ret;
+ }
+ goto parse_error;
+ case '_': {
+ switch (buf[16]) {
+ case 'a': {
+ switch (buf[21]) {
+ case '\0':
+ if (op == "string.new_utf8_array"sv) {
+ auto ret = makeStringNew(ctx, pos, StringNewUTF8Array, false);
+ CHECK_ERR(ret);
+ return *ret;
+ }
+ goto parse_error;
+ case '_':
+ if (op == "string.new_utf8_array_try"sv) {
+ auto ret = makeStringNew(ctx, pos, StringNewUTF8Array, true);
+ CHECK_ERR(ret);
+ return *ret;
+ }
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ case 't':
+ if (op == "string.new_utf8_try"sv) {
+ auto ret = makeStringNew(ctx, pos, StringNewUTF8, true);
+ CHECK_ERR(ret);
+ return *ret;
+ }
+ goto parse_error;
+ default: goto parse_error;
+ }
+ }
+ default: goto parse_error;
+ }
+ }
case 'w': {
switch (buf[14]) {
case '1': {
diff --git a/src/passes/Print.cpp b/src/passes/Print.cpp
index dee23d67d..4e7ae3730 100644
--- a/src/passes/Print.cpp
+++ b/src/passes/Print.cpp
@@ -2301,32 +2301,32 @@ struct PrintExpressionContents
switch (curr->op) {
case StringNewUTF8:
if (!curr->try_) {
- printMedium(o, "string.new_wtf8 utf8");
+ printMedium(o, "string.new_utf8");
} else {
printMedium(o, "string.new_utf8_try");
}
break;
case StringNewWTF8:
- printMedium(o, "string.new_wtf8 wtf8");
+ printMedium(o, "string.new_wtf8");
break;
case StringNewLossyUTF8:
- printMedium(o, "string.new_wtf8 replace");
+ printMedium(o, "string.new_lossy_utf8");
break;
case StringNewWTF16:
printMedium(o, "string.new_wtf16");
break;
case StringNewUTF8Array:
if (!curr->try_) {
- printMedium(o, "string.new_wtf8_array utf8");
+ printMedium(o, "string.new_utf8_array");
} else {
printMedium(o, "string.new_utf8_array_try");
}
break;
case StringNewWTF8Array:
- printMedium(o, "string.new_wtf8_array wtf8");
+ printMedium(o, "string.new_wtf8_array");
break;
case StringNewLossyUTF8Array:
- printMedium(o, "string.new_wtf8_array replace");
+ printMedium(o, "string.new_lossy_utf8_array");
break;
case StringNewWTF16Array:
printMedium(o, "string.new_wtf16_array");
@@ -2345,10 +2345,10 @@ struct PrintExpressionContents
void visitStringMeasure(StringMeasure* curr) {
switch (curr->op) {
case StringMeasureUTF8:
- printMedium(o, "string.measure_wtf8 utf8");
+ printMedium(o, "string.measure_utf8");
break;
case StringMeasureWTF8:
- printMedium(o, "string.measure_wtf8 wtf8");
+ printMedium(o, "string.measure_wtf8");
break;
case StringMeasureWTF16:
printMedium(o, "string.measure_wtf16");
@@ -2369,25 +2369,25 @@ struct PrintExpressionContents
void visitStringEncode(StringEncode* curr) {
switch (curr->op) {
case StringEncodeUTF8:
- printMedium(o, "string.encode_wtf8 utf8");
+ printMedium(o, "string.encode_utf8");
break;
case StringEncodeLossyUTF8:
- printMedium(o, "string.encode_wtf8 replace");
+ printMedium(o, "string.encode_lossy_utf8");
break;
case StringEncodeWTF8:
- printMedium(o, "string.encode_wtf8 wtf8");
+ printMedium(o, "string.encode_wtf8");
break;
case StringEncodeWTF16:
printMedium(o, "string.encode_wtf16");
break;
case StringEncodeUTF8Array:
- printMedium(o, "string.encode_wtf8_array utf8");
+ printMedium(o, "string.encode_utf8_array");
break;
case StringEncodeLossyUTF8Array:
- printMedium(o, "string.encode_wtf8_array replace");
+ printMedium(o, "string.encode_lossy_utf8_array");
break;
case StringEncodeWTF8Array:
- printMedium(o, "string.encode_wtf8_array wtf8");
+ printMedium(o, "string.encode_wtf8_array");
break;
case StringEncodeWTF16Array:
printMedium(o, "string.encode_wtf16_array");
diff --git a/src/wasm/wasm-s-parser.cpp b/src/wasm/wasm-s-parser.cpp
index 1f215135e..b6b9a40fb 100644
--- a/src/wasm/wasm-s-parser.cpp
+++ b/src/wasm/wasm-s-parser.cpp
@@ -3111,8 +3111,9 @@ Expression*
SExpressionWasmBuilder::makeStringNew(Element& s, StringNewOp op, bool try_) {
size_t i = 1;
Expression* length = nullptr;
- if (op == StringNewWTF8 || op == StringNewUTF8) {
- if (!try_) {
+ if (op == StringNewWTF8) {
+ if (s[i]->isStr()) {
+ // legacy syntax
std::string_view str = s[i++]->str().str;
if (str == "utf8") {
op = StringNewUTF8;
@@ -3126,11 +3127,13 @@ SExpressionWasmBuilder::makeStringNew(Element& s, StringNewOp op, bool try_) {
}
length = parseExpression(s[i + 1]);
return Builder(wasm).makeStringNew(op, parseExpression(s[i]), length, try_);
- } else if (op == StringNewWTF16) {
+ } else if (op == StringNewUTF8 || op == StringNewLossyUTF8 ||
+ op == StringNewWTF16) {
length = parseExpression(s[i + 1]);
return Builder(wasm).makeStringNew(op, parseExpression(s[i]), length, try_);
- } else if (op == StringNewWTF8Array || op == StringNewUTF8Array) {
- if (!try_) {
+ } else if (op == StringNewWTF8Array) {
+ if (s[i]->isStr()) {
+ // legacy syntax
std::string_view str = s[i++]->str().str;
if (str == "utf8") {
op = StringNewUTF8Array;
@@ -3146,7 +3149,8 @@ SExpressionWasmBuilder::makeStringNew(Element& s, StringNewOp op, bool try_) {
auto* end = parseExpression(s[i + 2]);
return Builder(wasm).makeStringNew(
op, parseExpression(s[i]), start, end, try_);
- } else if (op == StringNewWTF16Array) {
+ } else if (op == StringNewUTF8Array || op == StringNewLossyUTF8Array ||
+ op == StringNewWTF16Array) {
auto* start = parseExpression(s[i + 1]);
auto* end = parseExpression(s[i + 2]);
return Builder(wasm).makeStringNew(
@@ -3169,7 +3173,8 @@ Expression* SExpressionWasmBuilder::makeStringConst(Element& s) {
Expression* SExpressionWasmBuilder::makeStringMeasure(Element& s,
StringMeasureOp op) {
size_t i = 1;
- if (op == StringMeasureWTF8) {
+ if (op == StringMeasureWTF8 && s[i]->isStr()) {
+ // legacy syntax
std::string_view str = s[i++]->str().str;
if (str == "utf8") {
op = StringMeasureUTF8;
@@ -3187,29 +3192,36 @@ Expression* SExpressionWasmBuilder::makeStringEncode(Element& s,
size_t i = 1;
Expression* start = nullptr;
if (op == StringEncodeWTF8) {
- std::string_view str = s[i++]->str().str;
- if (str == "utf8") {
- op = StringEncodeUTF8;
- } else if (str == "replace") {
- op = StringEncodeLossyUTF8;
- } else if (str == "wtf8") {
- op = StringEncodeWTF8;
- } else {
- throw ParseException("bad string.new op", s.line, s.col);
+ if (s[i]->isStr()) {
+ // legacy syntax
+ std::string_view str = s[i++]->str().str;
+ if (str == "utf8") {
+ op = StringEncodeUTF8;
+ } else if (str == "replace") {
+ op = StringEncodeLossyUTF8;
+ } else if (str == "wtf8") {
+ op = StringEncodeWTF8;
+ } else {
+ throw ParseException("bad string.new op", s.line, s.col);
+ }
}
} else if (op == StringEncodeWTF8Array) {
- std::string_view str = s[i++]->str().str;
- if (str == "utf8") {
- op = StringEncodeUTF8Array;
- } else if (str == "replace") {
- op = StringEncodeLossyUTF8Array;
- } else if (str == "wtf8") {
- op = StringEncodeWTF8Array;
- } else {
- throw ParseException("bad string.new op", s.line, s.col);
+ if (s[i]->isStr()) {
+ // legacy syntax
+ std::string_view str = s[i++]->str().str;
+ if (str == "utf8") {
+ op = StringEncodeUTF8Array;
+ } else if (str == "replace") {
+ op = StringEncodeLossyUTF8Array;
+ } else if (str == "wtf8") {
+ op = StringEncodeWTF8Array;
+ } else {
+ throw ParseException("bad string.new op", s.line, s.col);
+ }
}
start = parseExpression(s[i + 2]);
- } else if (op == StringEncodeWTF16Array) {
+ } else if (op == StringEncodeUTF8Array || op == StringEncodeLossyUTF8Array ||
+ op == StringEncodeWTF16Array) {
start = parseExpression(s[i + 2]);
}
return Builder(wasm).makeStringEncode(
diff --git a/test/example/c-api-kitchen-sink.txt b/test/example/c-api-kitchen-sink.txt
index 1276a5a6a..edcc0b91e 100644
--- a/test/example/c-api-kitchen-sink.txt
+++ b/test/example/c-api-kitchen-sink.txt
@@ -2328,7 +2328,7 @@ BinaryenFeatureAll: 126975
(i32.const 2)
)
(drop
- (string.new_wtf8 utf8
+ (string.new_utf8
(i32.const 0)
(i32.const 0)
)
@@ -2340,13 +2340,13 @@ BinaryenFeatureAll: 126975
)
)
(drop
- (string.new_wtf8 wtf8
+ (string.new_wtf8
(i32.const 0)
(i32.const 0)
)
)
(drop
- (string.new_wtf8 replace
+ (string.new_lossy_utf8
(i32.const 0)
(i32.const 0)
)
@@ -2358,7 +2358,7 @@ BinaryenFeatureAll: 126975
)
)
(drop
- (string.new_wtf8_array utf8
+ (string.new_utf8_array
(global.get $i8Array-global)
(i32.const 0)
(i32.const 0)
@@ -2372,14 +2372,14 @@ BinaryenFeatureAll: 126975
)
)
(drop
- (string.new_wtf8_array wtf8
+ (string.new_wtf8_array
(global.get $i8Array-global)
(i32.const 0)
(i32.const 0)
)
)
(drop
- (string.new_wtf8_array replace
+ (string.new_lossy_utf8_array
(global.get $i8Array-global)
(i32.const 0)
(i32.const 0)
@@ -2401,12 +2401,12 @@ BinaryenFeatureAll: 126975
(string.const "hello world")
)
(drop
- (string.measure_wtf8 utf8
+ (string.measure_utf8
(global.get $string-global)
)
)
(drop
- (string.measure_wtf8 wtf8
+ (string.measure_wtf8
(global.get $string-global)
)
)
@@ -2428,19 +2428,19 @@ BinaryenFeatureAll: 126975
)
)
(drop
- (string.encode_wtf8 utf8
+ (string.encode_utf8
(global.get $string-global)
(i32.const 0)
)
)
(drop
- (string.encode_wtf8 replace
+ (string.encode_lossy_utf8
(global.get $string-global)
(i32.const 0)
)
)
(drop
- (string.encode_wtf8 wtf8
+ (string.encode_wtf8
(global.get $string-global)
(i32.const 0)
)
@@ -2452,21 +2452,21 @@ BinaryenFeatureAll: 126975
)
)
(drop
- (string.encode_wtf8_array utf8
+ (string.encode_utf8_array
(global.get $string-global)
(global.get $i8Array-global)
(i32.const 0)
)
)
(drop
- (string.encode_wtf8_array replace
+ (string.encode_lossy_utf8_array
(global.get $string-global)
(global.get $i8Array-global)
(i32.const 0)
)
)
(drop
- (string.encode_wtf8_array wtf8
+ (string.encode_wtf8_array
(global.get $string-global)
(global.get $i8Array-global)
(i32.const 0)
diff --git a/test/lit/passes/simplify-locals-strings.wast b/test/lit/passes/simplify-locals-strings.wast
index 646eee6bd..ada49f3da 100644
--- a/test/lit/passes/simplify-locals-strings.wast
+++ b/test/lit/passes/simplify-locals-strings.wast
@@ -13,7 +13,7 @@
;; CHECK: (func $no-new-past-store (type $none_=>_none)
;; CHECK-NEXT: (local $temp stringref)
;; CHECK-NEXT: (local.set $temp
- ;; CHECK-NEXT: (string.new_wtf8 utf8
+ ;; CHECK-NEXT: (string.new_utf8
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: (i32.const 2)
;; CHECK-NEXT: )
@@ -26,7 +26,7 @@
;; CHECK-NEXT: (local.get $temp)
;; CHECK-NEXT: )
;; CHECK-NEXT: (local.set $temp
- ;; CHECK-NEXT: (string.new_wtf8 wtf8
+ ;; CHECK-NEXT: (string.new_wtf8
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: (i32.const 2)
;; CHECK-NEXT: )
@@ -39,7 +39,7 @@
;; CHECK-NEXT: (local.get $temp)
;; CHECK-NEXT: )
;; CHECK-NEXT: (local.set $temp
- ;; CHECK-NEXT: (string.new_wtf8 replace
+ ;; CHECK-NEXT: (string.new_lossy_utf8
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: (i32.const 2)
;; CHECK-NEXT: )
@@ -69,7 +69,7 @@
(local $temp stringref)
;; A string.new cannot be moved past a memory store.
(local.set $temp
- (string.new_wtf8 utf8
+ (string.new_utf8
(i32.const 1)
(i32.const 2)
)
@@ -82,7 +82,7 @@
(local.get $temp)
)
(local.set $temp
- (string.new_wtf8 wtf8
+ (string.new_wtf8
(i32.const 1)
(i32.const 2)
)
@@ -95,7 +95,7 @@
(local.get $temp)
)
(local.set $temp
- (string.new_wtf8 replace
+ (string.new_lossy_utf8
(i32.const 1)
(i32.const 2)
)
@@ -131,7 +131,7 @@
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (string.new_wtf8 utf8
+ ;; CHECK-NEXT: (string.new_utf8
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: (i32.const 2)
;; CHECK-NEXT: )
@@ -141,7 +141,7 @@
(local $temp stringref)
;; A string.new can be moved past a memory load.
(local.set $temp
- (string.new_wtf8 utf8
+ (string.new_utf8
(i32.const 1)
(i32.const 2)
)
@@ -159,7 +159,7 @@
;; CHECK: (func $no-new-past-store-gc (type $ref|$array|_ref|$array16|_=>_none) (param $array (ref $array)) (param $array16 (ref $array16))
;; CHECK-NEXT: (local $temp stringref)
;; CHECK-NEXT: (local.set $temp
- ;; CHECK-NEXT: (string.new_wtf8_array utf8
+ ;; CHECK-NEXT: (string.new_utf8_array
;; CHECK-NEXT: (local.get $array)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: (i32.const 2)
@@ -174,7 +174,7 @@
;; CHECK-NEXT: (local.get $temp)
;; CHECK-NEXT: )
;; CHECK-NEXT: (local.set $temp
- ;; CHECK-NEXT: (string.new_wtf8_array wtf8
+ ;; CHECK-NEXT: (string.new_wtf8_array
;; CHECK-NEXT: (local.get $array)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: (i32.const 2)
@@ -189,7 +189,7 @@
;; CHECK-NEXT: (local.get $temp)
;; CHECK-NEXT: )
;; CHECK-NEXT: (local.set $temp
- ;; CHECK-NEXT: (string.new_wtf8_array replace
+ ;; CHECK-NEXT: (string.new_lossy_utf8_array
;; CHECK-NEXT: (local.get $array)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: (i32.const 2)
@@ -223,7 +223,7 @@
(local $temp stringref)
;; A string.new_***_array cannot be moved past a GC store.
(local.set $temp
- (string.new_wtf8_array utf8
+ (string.new_utf8_array
(local.get $array)
(i32.const 1)
(i32.const 2)
@@ -238,7 +238,7 @@
(local.get $temp)
)
(local.set $temp
- (string.new_wtf8_array wtf8
+ (string.new_wtf8_array
(local.get $array)
(i32.const 1)
(i32.const 2)
@@ -253,7 +253,7 @@
(local.get $temp)
)
(local.set $temp
- (string.new_wtf8_array replace
+ (string.new_lossy_utf8_array
(local.get $array)
(i32.const 1)
(i32.const 2)
@@ -292,7 +292,7 @@
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (string.encode_wtf8 wtf8
+ ;; CHECK-NEXT: (string.encode_wtf8
;; CHECK-NEXT: (local.get $ref)
;; CHECK-NEXT: (i32.const 10)
;; CHECK-NEXT: )
@@ -306,7 +306,7 @@
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (string.encode_wtf8 utf8
+ ;; CHECK-NEXT: (string.encode_utf8
;; CHECK-NEXT: (local.get $ref)
;; CHECK-NEXT: (i32.const 20)
;; CHECK-NEXT: )
@@ -320,7 +320,7 @@
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (string.encode_wtf8 replace
+ ;; CHECK-NEXT: (string.encode_lossy_utf8
;; CHECK-NEXT: (local.get $ref)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
@@ -352,7 +352,7 @@
)
)
(drop
- (string.encode_wtf8 wtf8
+ (string.encode_wtf8
(local.get $ref)
(i32.const 10)
)
@@ -366,7 +366,7 @@
)
)
(drop
- (string.encode_wtf8 utf8
+ (string.encode_utf8
(local.get $ref)
(i32.const 20)
)
@@ -380,7 +380,7 @@
)
)
(drop
- (string.encode_wtf8 replace
+ (string.encode_lossy_utf8
(local.get $ref)
(i32.const 30)
)
@@ -413,7 +413,7 @@
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (string.encode_wtf8_array wtf8
+ ;; CHECK-NEXT: (string.encode_wtf8_array
;; CHECK-NEXT: (local.get $ref)
;; CHECK-NEXT: (local.get $array)
;; CHECK-NEXT: (i32.const 10)
@@ -429,7 +429,7 @@
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (string.encode_wtf8_array utf8
+ ;; CHECK-NEXT: (string.encode_utf8_array
;; CHECK-NEXT: (local.get $ref)
;; CHECK-NEXT: (local.get $array)
;; CHECK-NEXT: (i32.const 20)
@@ -445,7 +445,7 @@
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (string.encode_wtf8_array replace
+ ;; CHECK-NEXT: (string.encode_lossy_utf8_array
;; CHECK-NEXT: (local.get $ref)
;; CHECK-NEXT: (local.get $array)
;; CHECK-NEXT: (i32.const 30)
@@ -482,7 +482,7 @@
)
)
(drop
- (string.encode_wtf8_array wtf8
+ (string.encode_wtf8_array
(local.get $ref)
(local.get $array)
(i32.const 10)
@@ -498,7 +498,7 @@
)
)
(drop
- (string.encode_wtf8_array utf8
+ (string.encode_utf8_array
(local.get $ref)
(local.get $array)
(i32.const 20)
@@ -514,7 +514,7 @@
)
)
(drop
- (string.encode_wtf8_array replace
+ (string.encode_lossy_utf8_array
(local.get $ref)
(local.get $array)
(i32.const 30)
diff --git a/test/lit/strings.wast b/test/lit/strings.wast
index dcb1bffd2..6668ffd58 100644
--- a/test/lit/strings.wast
+++ b/test/lit/strings.wast
@@ -48,19 +48,19 @@
;; CHECK: (func $string.new (type $stringref_stringview_wtf8_stringview_wtf16_stringview_iter_stringref_stringview_wtf8_stringview_wtf16_stringview_iter_ref|string|_ref|stringview_wtf8|_ref|stringview_wtf16|_ref|stringview_iter|_=>_none) (param $a stringref) (param $b stringview_wtf8) (param $c stringview_wtf16) (param $d stringview_iter) (param $e stringref) (param $f stringview_wtf8) (param $g stringview_wtf16) (param $h stringview_iter) (param $i (ref string)) (param $j (ref stringview_wtf8)) (param $k (ref stringview_wtf16)) (param $l (ref stringview_iter))
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (string.new_wtf8 utf8
+ ;; CHECK-NEXT: (string.new_utf8
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: (i32.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (string.new_wtf8 wtf8
+ ;; CHECK-NEXT: (string.new_wtf8
;; CHECK-NEXT: (i32.const 3)
;; CHECK-NEXT: (i32.const 4)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (string.new_wtf8 replace
+ ;; CHECK-NEXT: (string.new_lossy_utf8
;; CHECK-NEXT: (i32.const 5)
;; CHECK-NEXT: (i32.const 6)
;; CHECK-NEXT: )
@@ -71,6 +71,24 @@
;; CHECK-NEXT: (i32.const 8)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (string.new_utf8
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (string.new_wtf8
+ ;; CHECK-NEXT: (i32.const 3)
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (string.new_lossy_utf8
+ ;; CHECK-NEXT: (i32.const 5)
+ ;; CHECK-NEXT: (i32.const 6)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $string.new
(param $a stringref)
@@ -109,6 +127,24 @@
(i32.const 8)
)
)
+ (drop
+ (string.new_utf8
+ (i32.const 1)
+ (i32.const 2)
+ )
+ )
+ (drop
+ (string.new_wtf8
+ (i32.const 3)
+ (i32.const 4)
+ )
+ )
+ (drop
+ (string.new_lossy_utf8
+ (i32.const 5)
+ (i32.const 6)
+ )
+ )
)
;; CHECK: (func $string.const (type $ref|string|_=>_none) (param $param (ref string))
@@ -138,13 +174,13 @@
;; CHECK: (func $string.measure (type $stringref_=>_none) (param $ref stringref)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.eqz
- ;; CHECK-NEXT: (string.measure_wtf8 wtf8
+ ;; CHECK-NEXT: (string.measure_wtf8
;; CHECK-NEXT: (local.get $ref)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (string.measure_wtf8 utf8
+ ;; CHECK-NEXT: (string.measure_utf8
;; CHECK-NEXT: (local.get $ref)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
@@ -153,6 +189,16 @@
;; CHECK-NEXT: (local.get $ref)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (string.measure_wtf8
+ ;; CHECK-NEXT: (local.get $ref)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (string.measure_utf8
+ ;; CHECK-NEXT: (local.get $ref)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $string.measure (param $ref stringref)
(drop
@@ -172,12 +218,22 @@
(local.get $ref)
)
)
+ (drop
+ (string.measure_wtf8
+ (local.get $ref)
+ )
+ )
+ (drop
+ (string.measure_utf8
+ (local.get $ref)
+ )
+ )
)
;; CHECK: (func $string.encode (type $stringref_=>_none) (param $ref stringref)
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.eqz
- ;; CHECK-NEXT: (string.encode_wtf8 wtf8
+ ;; CHECK-NEXT: (string.encode_wtf8
;; CHECK-NEXT: (local.get $ref)
;; CHECK-NEXT: (i32.const 10)
;; CHECK-NEXT: )
@@ -185,14 +241,14 @@
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.eqz
- ;; CHECK-NEXT: (string.encode_wtf8 replace
+ ;; CHECK-NEXT: (string.encode_lossy_utf8
;; CHECK-NEXT: (local.get $ref)
;; CHECK-NEXT: (i32.const 10)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (string.encode_wtf8 utf8
+ ;; CHECK-NEXT: (string.encode_utf8
;; CHECK-NEXT: (local.get $ref)
;; CHECK-NEXT: (i32.const 20)
;; CHECK-NEXT: )
@@ -203,6 +259,24 @@
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (string.encode_wtf8
+ ;; CHECK-NEXT: (local.get $ref)
+ ;; CHECK-NEXT: (i32.const 10)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (string.encode_lossy_utf8
+ ;; CHECK-NEXT: (local.get $ref)
+ ;; CHECK-NEXT: (i32.const 10)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (string.encode_utf8
+ ;; CHECK-NEXT: (local.get $ref)
+ ;; CHECK-NEXT: (i32.const 20)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $string.encode (param $ref stringref)
(drop
@@ -233,6 +307,24 @@
(i32.const 30)
)
)
+ (drop
+ (string.encode_wtf8
+ (local.get $ref)
+ (i32.const 10)
+ )
+ )
+ (drop
+ (string.encode_lossy_utf8
+ (local.get $ref)
+ (i32.const 10)
+ )
+ )
+ (drop
+ (string.encode_utf8
+ (local.get $ref)
+ (i32.const 20)
+ )
+ )
)
;; CHECK: (func $string.concat (type $stringref_stringref_=>_none) (param $a stringref) (param $b stringref)
@@ -492,21 +584,21 @@
;; CHECK: (func $string.new.gc (type $ref|$array|_ref|$array16|_=>_none) (param $array (ref $array)) (param $array16 (ref $array16))
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (string.new_wtf8_array utf8
+ ;; CHECK-NEXT: (string.new_utf8_array
;; CHECK-NEXT: (local.get $array)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: (i32.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (string.new_wtf8_array wtf8
+ ;; CHECK-NEXT: (string.new_wtf8_array
;; CHECK-NEXT: (local.get $array)
;; CHECK-NEXT: (i32.const 3)
;; CHECK-NEXT: (i32.const 4)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (string.new_wtf8_array replace
+ ;; CHECK-NEXT: (string.new_lossy_utf8_array
;; CHECK-NEXT: (local.get $array)
;; CHECK-NEXT: (i32.const 5)
;; CHECK-NEXT: (i32.const 6)
@@ -519,6 +611,27 @@
;; CHECK-NEXT: (i32.const 8)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (string.new_utf8_array
+ ;; CHECK-NEXT: (local.get $array)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (string.new_wtf8_array
+ ;; CHECK-NEXT: (local.get $array)
+ ;; CHECK-NEXT: (i32.const 3)
+ ;; CHECK-NEXT: (i32.const 4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (string.new_lossy_utf8_array
+ ;; CHECK-NEXT: (local.get $array)
+ ;; CHECK-NEXT: (i32.const 5)
+ ;; CHECK-NEXT: (i32.const 6)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $string.new.gc (param $array (ref $array)) (param $array16 (ref $array16))
(drop
@@ -549,12 +662,33 @@
(i32.const 8)
)
)
+ (drop
+ (string.new_utf8_array
+ (local.get $array)
+ (i32.const 1)
+ (i32.const 2)
+ )
+ )
+ (drop
+ (string.new_wtf8_array
+ (local.get $array)
+ (i32.const 3)
+ (i32.const 4)
+ )
+ )
+ (drop
+ (string.new_lossy_utf8_array
+ (local.get $array)
+ (i32.const 5)
+ (i32.const 6)
+ )
+ )
)
;; CHECK: (func $string.encode.gc (type $stringref_ref|$array|_ref|$array16|_=>_none) (param $ref stringref) (param $array (ref $array)) (param $array16 (ref $array16))
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.eqz
- ;; CHECK-NEXT: (string.encode_wtf8_array wtf8
+ ;; CHECK-NEXT: (string.encode_wtf8_array
;; CHECK-NEXT: (local.get $ref)
;; CHECK-NEXT: (local.get $array)
;; CHECK-NEXT: (i32.const 10)
@@ -563,7 +697,7 @@
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.eqz
- ;; CHECK-NEXT: (string.encode_wtf8_array replace
+ ;; CHECK-NEXT: (string.encode_lossy_utf8_array
;; CHECK-NEXT: (local.get $ref)
;; CHECK-NEXT: (local.get $array)
;; CHECK-NEXT: (i32.const 10)
@@ -571,7 +705,7 @@
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (string.encode_wtf8_array utf8
+ ;; CHECK-NEXT: (string.encode_utf8_array
;; CHECK-NEXT: (local.get $ref)
;; CHECK-NEXT: (local.get $array)
;; CHECK-NEXT: (i32.const 20)
@@ -584,6 +718,27 @@
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (string.encode_wtf8_array
+ ;; CHECK-NEXT: (local.get $ref)
+ ;; CHECK-NEXT: (local.get $array)
+ ;; CHECK-NEXT: (i32.const 10)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (string.encode_lossy_utf8_array
+ ;; CHECK-NEXT: (local.get $ref)
+ ;; CHECK-NEXT: (local.get $array)
+ ;; CHECK-NEXT: (i32.const 10)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (string.encode_utf8_array
+ ;; CHECK-NEXT: (local.get $ref)
+ ;; CHECK-NEXT: (local.get $array)
+ ;; CHECK-NEXT: (i32.const 20)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $string.encode.gc (param $ref stringref) (param $array (ref $array)) (param $array16 (ref $array16))
(drop
@@ -618,6 +773,27 @@
(i32.const 30)
)
)
+ (drop
+ (string.encode_wtf8_array
+ (local.get $ref)
+ (local.get $array)
+ (i32.const 10)
+ )
+ )
+ (drop
+ (string.encode_lossy_utf8_array
+ (local.get $ref)
+ (local.get $array)
+ (i32.const 10)
+ )
+ )
+ (drop
+ (string.encode_utf8_array
+ (local.get $ref)
+ (local.get $array)
+ (i32.const 20)
+ )
+ )
)
;; CHECK: (func $string.from_code_point (type $none_=>_none)