diff options
-rw-r--r-- | src/wasm/wasm-s-parser.cpp | 101 | ||||
-rw-r--r-- | test/lit/strings.wast | 198 |
2 files changed, 25 insertions, 274 deletions
diff --git a/src/wasm/wasm-s-parser.cpp b/src/wasm/wasm-s-parser.cpp index 957956044..95cb453fb 100644 --- a/src/wasm/wasm-s-parser.cpp +++ b/src/wasm/wasm-s-parser.cpp @@ -3253,55 +3253,28 @@ Expression* SExpressionWasmBuilder::makeRefAs(Element& s, RefAsOp op) { Expression* SExpressionWasmBuilder::makeStringNew(Element& s, StringNewOp op, bool try_) { - size_t i = 1; Expression* length = nullptr; if (op == StringNewWTF8) { - if (s[i]->isStr()) { - // legacy syntax - std::string_view str = s[i++]->str().str; - if (str == "utf8") { - op = StringNewUTF8; - } else if (str == "wtf8") { - op = StringNewWTF8; - } else if (str == "replace") { - op = StringNewLossyUTF8; - } else { - throw SParseException("bad string.new op", s); - } - } - length = parseExpression(s[i + 1]); - return Builder(wasm).makeStringNew(op, parseExpression(s[i]), length, try_); + length = parseExpression(s[2]); + return Builder(wasm).makeStringNew(op, parseExpression(s[1]), length, try_); } else if (op == StringNewUTF8 || op == StringNewLossyUTF8 || op == StringNewWTF16) { - length = parseExpression(s[i + 1]); - return Builder(wasm).makeStringNew(op, parseExpression(s[i]), length, try_); + length = parseExpression(s[2]); + return Builder(wasm).makeStringNew(op, parseExpression(s[1]), length, try_); } else if (op == StringNewWTF8Array) { - if (s[i]->isStr()) { - // legacy syntax - std::string_view str = s[i++]->str().str; - if (str == "utf8") { - op = StringNewUTF8Array; - } else if (str == "wtf8") { - op = StringNewWTF8Array; - } else if (str == "replace") { - op = StringNewLossyUTF8Array; - } else { - throw SParseException("bad string.new op", s); - } - } - auto* start = parseExpression(s[i + 1]); - auto* end = parseExpression(s[i + 2]); + auto* start = parseExpression(s[2]); + auto* end = parseExpression(s[3]); return Builder(wasm).makeStringNew( - op, parseExpression(s[i]), start, end, try_); + op, parseExpression(s[1]), start, end, try_); } else if (op == StringNewUTF8Array || op == StringNewLossyUTF8Array || op == StringNewWTF16Array) { - auto* start = parseExpression(s[i + 1]); - auto* end = parseExpression(s[i + 2]); + auto* start = parseExpression(s[2]); + auto* end = parseExpression(s[3]); return Builder(wasm).makeStringNew( - op, parseExpression(s[i]), start, end, try_); + op, parseExpression(s[1]), start, end, try_); } else if (op == StringNewFromCodePoint) { return Builder(wasm).makeStringNew( - op, parseExpression(s[i]), nullptr, try_); + op, parseExpression(s[1]), nullptr, try_); } else { throw SParseException("bad string.new op", s); } @@ -3316,60 +3289,18 @@ Expression* SExpressionWasmBuilder::makeStringConst(Element& s) { Expression* SExpressionWasmBuilder::makeStringMeasure(Element& s, StringMeasureOp op) { - size_t i = 1; - if (op == StringMeasureWTF8 && s[i]->isStr()) { - // legacy syntax - std::string_view str = s[i++]->str().str; - if (str == "utf8") { - op = StringMeasureUTF8; - } else if (str == "wtf8") { - op = StringMeasureWTF8; - } else { - throw SParseException("bad string.measure op", s); - } - } - return Builder(wasm).makeStringMeasure(op, parseExpression(s[i])); + return Builder(wasm).makeStringMeasure(op, parseExpression(s[1])); } Expression* SExpressionWasmBuilder::makeStringEncode(Element& s, StringEncodeOp op) { - size_t i = 1; Expression* start = nullptr; - if (op == StringEncodeWTF8) { - 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 SParseException("bad string.new op", s); - } - } - } else if (op == StringEncodeWTF8Array) { - 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 SParseException("bad string.new op", s); - } - } - start = parseExpression(s[i + 2]); - } else if (op == StringEncodeUTF8Array || op == StringEncodeLossyUTF8Array || - op == StringEncodeWTF16Array) { - start = parseExpression(s[i + 2]); + if (op == StringEncodeWTF8Array || op == StringEncodeUTF8Array || + op == StringEncodeLossyUTF8Array || op == StringEncodeWTF16Array) { + start = parseExpression(s[3]); } return Builder(wasm).makeStringEncode( - op, parseExpression(s[i]), parseExpression(s[i + 1]), start); + op, parseExpression(s[1]), parseExpression(s[2]), start); } Expression* SExpressionWasmBuilder::makeStringConcat(Element& s) { diff --git a/test/lit/strings.wast b/test/lit/strings.wast index f4b965c0b..b7cf0bf63 100644 --- a/test/lit/strings.wast +++ b/test/lit/strings.wast @@ -48,24 +48,6 @@ ;; CHECK: (func $string.new (type $5) (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_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: (drop ;; CHECK-NEXT: (string.new_wtf16 ;; CHECK-NEXT: (i32.const 7) ;; CHECK-NEXT: (i32.const 8) @@ -104,24 +86,6 @@ (param $k (ref stringview_wtf16)) (param $l (ref stringview_iter)) (drop - (string.new_wtf8 utf8 - (i32.const 1) - (i32.const 2) - ) - ) - (drop - (string.new_wtf8 wtf8 - (i32.const 3) - (i32.const 4) - ) - ) - (drop - (string.new_wtf8 replace - (i32.const 5) - (i32.const 6) - ) - ) - (drop (string.new_wtf16 (i32.const 7) (i32.const 8) @@ -180,21 +144,11 @@ ;; CHECK-NEXT: ) ;; CHECK-NEXT: ) ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (string.measure_utf8 - ;; CHECK-NEXT: (local.get $ref) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: ) - ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (string.measure_wtf16 ;; 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: ) @@ -203,27 +157,17 @@ (func $string.measure (param $ref stringref) (drop (i32.eqz ;; validate the output is i32 - (string.measure_wtf8 wtf8 + (string.measure_wtf8 (local.get $ref) ) ) ) (drop - (string.measure_wtf8 utf8 - (local.get $ref) - ) - ) - (drop (string.measure_wtf16 (local.get $ref) ) ) (drop - (string.measure_wtf8 - (local.get $ref) - ) - ) - (drop (string.measure_utf8 (local.get $ref) ) @@ -248,30 +192,12 @@ ;; 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: (drop ;; CHECK-NEXT: (string.encode_wtf16 ;; CHECK-NEXT: (local.get $ref) ;; 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) @@ -281,7 +207,7 @@ (func $string.encode (param $ref stringref) (drop (i32.eqz ;; validate the output is i32 - (string.encode_wtf8 wtf8 + (string.encode_wtf8 (local.get $ref) (i32.const 10) ) @@ -289,37 +215,19 @@ ) (drop (i32.eqz ;; validate the output is i32 - (string.encode_wtf8 replace + (string.encode_lossy_utf8 (local.get $ref) (i32.const 10) ) ) ) (drop - (string.encode_wtf8 utf8 - (local.get $ref) - (i32.const 20) - ) - ) - (drop (string.encode_wtf16 (local.get $ref) (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) @@ -584,27 +492,6 @@ ;; CHECK: (func $string.new.gc (type $8) (param $array (ref $array)) (param $array16 (ref $array16)) ;; 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: (drop ;; CHECK-NEXT: (string.new_wtf16_array ;; CHECK-NEXT: (local.get $array16) ;; CHECK-NEXT: (i32.const 7) @@ -635,27 +522,6 @@ ;; CHECK-NEXT: ) (func $string.new.gc (param $array (ref $array)) (param $array16 (ref $array16)) (drop - (string.new_wtf8_array utf8 - (local.get $array) - (i32.const 1) - (i32.const 2) - ) - ) - (drop - (string.new_wtf8_array wtf8 - (local.get $array) - (i32.const 3) - (i32.const 4) - ) - ) - (drop - (string.new_wtf8_array replace - (local.get $array) - (i32.const 5) - (i32.const 6) - ) - ) - (drop (string.new_wtf16_array (local.get $array16) (i32.const 7) @@ -688,37 +554,14 @@ ;; CHECK: (func $string.encode.gc (type $9) (param $ref stringref) (param $array (ref $array)) (param $array16 (ref $array16)) ;; CHECK-NEXT: (drop ;; CHECK-NEXT: (i32.eqz - ;; 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: ) - ;; CHECK-NEXT: (drop - ;; CHECK-NEXT: (i32.eqz - ;; CHECK-NEXT: (string.encode_lossy_utf8_array + ;; CHECK-NEXT: (string.encode_wtf16_array ;; CHECK-NEXT: (local.get $ref) - ;; CHECK-NEXT: (local.get $array) - ;; CHECK-NEXT: (i32.const 10) + ;; CHECK-NEXT: (local.get $array16) + ;; CHECK-NEXT: (i32.const 30) ;; CHECK-NEXT: ) ;; 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: (drop - ;; CHECK-NEXT: (string.encode_wtf16_array - ;; CHECK-NEXT: (local.get $ref) - ;; CHECK-NEXT: (local.get $array16) - ;; 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) @@ -743,37 +586,14 @@ (func $string.encode.gc (param $ref stringref) (param $array (ref $array)) (param $array16 (ref $array16)) (drop (i32.eqz ;; validate the output is i32 - (string.encode_wtf8_array wtf8 + (string.encode_wtf16_array (local.get $ref) - (local.get $array) - (i32.const 10) - ) - ) - ) - (drop - (i32.eqz ;; validate the output is i32 - (string.encode_wtf8_array replace - (local.get $ref) - (local.get $array) - (i32.const 10) + (local.get $array16) + (i32.const 30) ) ) ) (drop - (string.encode_wtf8_array utf8 - (local.get $ref) - (local.get $array) - (i32.const 20) - ) - ) - (drop - (string.encode_wtf16_array - (local.get $ref) - (local.get $array16) - (i32.const 30) - ) - ) - (drop (string.encode_wtf8_array (local.get $ref) (local.get $array) |