summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gen-s-parser.inc10
-rw-r--r--src/passes/Print.cpp3
-rw-r--r--src/wasm-binary.h1
-rw-r--r--src/wasm.h1
-rw-r--r--src/wasm/wasm-binary.cpp2
-rw-r--r--src/wasm/wasm-stack.cpp3
6 files changed, 20 insertions, 0 deletions
diff --git a/src/gen-s-parser.inc b/src/gen-s-parser.inc
index dd7b57917..1c3a24749 100644
--- a/src/gen-s-parser.inc
+++ b/src/gen-s-parser.inc
@@ -3234,6 +3234,9 @@ switch (op[0]) {
case 'g':
if (strcmp(op, "stringview_wtf16.get_codeunit") == 0) { return makeStringWTF16Get(s); }
goto parse_error;
+ case 'l':
+ if (strcmp(op, "stringview_wtf16.length") == 0) { return makeStringMeasure(s, StringMeasureWTF16View); }
+ goto parse_error;
case 's':
if (strcmp(op, "stringview_wtf16.slice") == 0) { return makeStringSliceWTF(s, StringSliceWTF16); }
goto parse_error;
@@ -8981,6 +8984,13 @@ switch (op[0]) {
return *ret;
}
goto parse_error;
+ case 'l':
+ if (op == "stringview_wtf16.length"sv) {
+ auto ret = makeStringMeasure(ctx, in, StringMeasureWTF16View);
+ CHECK_ERR(ret);
+ return *ret;
+ }
+ goto parse_error;
case 's':
if (op == "stringview_wtf16.slice"sv) {
auto ret = makeStringSliceWTF(ctx, in, StringSliceWTF16);
diff --git a/src/passes/Print.cpp b/src/passes/Print.cpp
index 526059a66..208833357 100644
--- a/src/passes/Print.cpp
+++ b/src/passes/Print.cpp
@@ -2256,6 +2256,9 @@ struct PrintExpressionContents
case StringMeasureIsUSV:
printMedium(o, "string.is_usv_sequence");
break;
+ case StringMeasureWTF16View:
+ printMedium(o, "stringview_wtf16.length");
+ break;
default:
WASM_UNREACHABLE("invalid string.measure*");
}
diff --git a/src/wasm-binary.h b/src/wasm-binary.h
index ba8d547d8..23b7ace5a 100644
--- a/src/wasm-binary.h
+++ b/src/wasm-binary.h
@@ -1151,6 +1151,7 @@ enum ASTNodes {
StringViewWTF8Advance = 0x91,
StringViewWTF8Slice = 0x93,
StringAsWTF16 = 0x98,
+ StringViewWTF16Length = 0x99,
StringViewWTF16GetCodePoint = 0x9a,
StringViewWTF16Slice = 0x9c,
StringAsIter = 0xa0,
diff --git a/src/wasm.h b/src/wasm.h
index 357c613a7..a2f361917 100644
--- a/src/wasm.h
+++ b/src/wasm.h
@@ -595,6 +595,7 @@ enum StringMeasureOp {
StringMeasureWTF8,
StringMeasureWTF16,
StringMeasureIsUSV,
+ StringMeasureWTF16View,
};
enum StringEncodeOp {
diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp
index 59276124e..8108027d4 100644
--- a/src/wasm/wasm-binary.cpp
+++ b/src/wasm/wasm-binary.cpp
@@ -7214,6 +7214,8 @@ bool WasmBinaryBuilder::maybeVisitStringMeasure(Expression*& out,
op = StringMeasureWTF16;
} else if (code == BinaryConsts::StringIsUSV) {
op = StringMeasureIsUSV;
+ } else if (code == BinaryConsts::StringViewWTF16Length) {
+ op = StringMeasureWTF16View;
} else {
return false;
}
diff --git a/src/wasm/wasm-stack.cpp b/src/wasm/wasm-stack.cpp
index 3707848d1..0e39862e7 100644
--- a/src/wasm/wasm-stack.cpp
+++ b/src/wasm/wasm-stack.cpp
@@ -2279,6 +2279,9 @@ void BinaryInstWriter::visitStringMeasure(StringMeasure* curr) {
case StringMeasureIsUSV:
o << U32LEB(BinaryConsts::StringIsUSV);
break;
+ case StringMeasureWTF16View:
+ o << U32LEB(BinaryConsts::StringViewWTF16Length);
+ break;
default:
WASM_UNREACHABLE("invalid string.new*");
}