diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gen-s-parser.inc | 10 | ||||
-rw-r--r-- | src/passes/Print.cpp | 3 | ||||
-rw-r--r-- | src/wasm-binary.h | 1 | ||||
-rw-r--r-- | src/wasm.h | 1 | ||||
-rw-r--r-- | src/wasm/wasm-binary.cpp | 2 | ||||
-rw-r--r-- | src/wasm/wasm-stack.cpp | 3 |
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*"); } |