Skip to content

Commit feff548

Browse files
committed
[Parser] Enable the new text parser by default
The new text parser is faster and more standards compliant than the old text parser. Enable it by default in wasm-opt and update the tests to reflect the slightly different results it produces. Besides following the spec, the new parser differs from the old parser in that it: - Does not synthesize `loop` and `try` labels unnecessarily - Synthesizes different block names in some cases - Parses exports in a different order - Parses `nop`s instead of empty blocks for empty control flow arms - Does not support parsing Poppy IR - Produces different error messages - Cannot parse `pop` except as the first instruction inside a `catch`
1 parent aa93162 commit feff548

File tree

94 files changed

+567
-1168
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+567
-1168
lines changed

CHANGELOG.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,13 @@ full changeset diff at the end of each section.
1515
Current Trunk
1616
-------------
1717

18-
- (If new wat parser is enabled) Source map comments on `else` branches must
19-
now be placed above the instruction inside the `else` branch rather than on
20-
the `else` branch itself.
18+
- The new, standards-compliant text parser is now the default. `wasm-opt` has a
19+
`--deprecated-wat-parser` flag that will switch back to using the old text
20+
parser, but that option will go away soon.
21+
- Source map comments on `else` branches must now be placed above the
22+
instruction inside the `else` branch rather than on the `else` branch itself.
23+
- Source map locations from instructions are no longer automatically propagated
24+
to function epilogues.
2125
- Add a new `BinaryenModuleReadWithFeatures` function to the C API that allows
2226
to configure which features to enable in the parser.
2327
- The build-time option to use legacy WasmGC opcodes is removed.

src/parser/wat-parser.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ void propagateDebugLocations(Module& wasm) {
9696
// do not already have their own debug locations.
9797
PassRunner runner(&wasm);
9898
runner.add("propagate-debug-locs");
99+
// The parser should not be responsible for validation.
100+
runner.setIsNested(true);
99101
runner.run();
100102
}
101103

src/wasm/wasm-io.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333

3434
namespace wasm {
3535

36-
bool useNewWATParser = false;
36+
bool useNewWATParser = true;
3737

3838
#define DEBUG_TYPE "writer"
3939

test/ctor-eval/bad-indirect-call3.wast.out

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
(memory $0 256 256)
66
(data $0 (i32.const 10) "waka waka waka waka waka")
77
(table $0 1 1 funcref)
8-
(elem $0 (i32.const 0) $callee)
8+
(elem $implicit-elem (i32.const 0) $callee)
99
(export "sig_mismatch" (func $sig_mismatch))
1010
(func $callee (type $0) (param $0 externref)
1111
(i32.store8

test/lit/basic/exception-handling-old.wast

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
;; Old Phase 3 exception handling
6767

6868
;; CHECK-TEXT: (func $simple-try-catch (type $0)
69-
;; CHECK-TEXT-NEXT: (try $try
69+
;; CHECK-TEXT-NEXT: (try
7070
;; CHECK-TEXT-NEXT: (do
7171
;; CHECK-TEXT-NEXT: (throw $e-i32
7272
;; CHECK-TEXT-NEXT: (i32.const 0)
@@ -106,7 +106,7 @@
106106

107107
;; CHECK-TEXT: (func $try-catch-multivalue-tag (type $0)
108108
;; CHECK-TEXT-NEXT: (local $x (tuple i32 i64))
109-
;; CHECK-TEXT-NEXT: (try $try
109+
;; CHECK-TEXT-NEXT: (try
110110
;; CHECK-TEXT-NEXT: (do
111111
;; CHECK-TEXT-NEXT: (throw $e-i32-i64
112112
;; CHECK-TEXT-NEXT: (i32.const 0)
@@ -179,16 +179,16 @@
179179
)
180180

181181
;; CHECK-TEXT: (func $try-with-block-label (type $0)
182-
;; CHECK-TEXT-NEXT: (block $l10
182+
;; CHECK-TEXT-NEXT: (block $label
183183
;; CHECK-TEXT-NEXT: (try $l1
184184
;; CHECK-TEXT-NEXT: (do
185-
;; CHECK-TEXT-NEXT: (br $l10)
185+
;; CHECK-TEXT-NEXT: (br $label)
186186
;; CHECK-TEXT-NEXT: )
187187
;; CHECK-TEXT-NEXT: (catch $e-i32
188188
;; CHECK-TEXT-NEXT: (drop
189189
;; CHECK-TEXT-NEXT: (pop i32)
190190
;; CHECK-TEXT-NEXT: )
191-
;; CHECK-TEXT-NEXT: (br $l10)
191+
;; CHECK-TEXT-NEXT: (br $label)
192192
;; CHECK-TEXT-NEXT: )
193193
;; CHECK-TEXT-NEXT: )
194194
;; CHECK-TEXT-NEXT: )
@@ -221,7 +221,7 @@
221221
)
222222

223223
;; CHECK-TEXT: (func $empty-try-body (type $0)
224-
;; CHECK-TEXT-NEXT: (try $try
224+
;; CHECK-TEXT-NEXT: (try
225225
;; CHECK-TEXT-NEXT: (do
226226
;; CHECK-TEXT-NEXT: (nop)
227227
;; CHECK-TEXT-NEXT: )
@@ -254,7 +254,7 @@
254254
)
255255

256256
;; CHECK-TEXT: (func $multiple-insts-within-try-and-catch-bodies (type $0)
257-
;; CHECK-TEXT-NEXT: (try $try
257+
;; CHECK-TEXT-NEXT: (try
258258
;; CHECK-TEXT-NEXT: (do
259259
;; CHECK-TEXT-NEXT: (call $foo)
260260
;; CHECK-TEXT-NEXT: (call $bar)
@@ -298,7 +298,7 @@
298298
)
299299

300300
;; CHECK-TEXT: (func $multiple-catches (type $0)
301-
;; CHECK-TEXT-NEXT: (try $try
301+
;; CHECK-TEXT-NEXT: (try
302302
;; CHECK-TEXT-NEXT: (do
303303
;; CHECK-TEXT-NEXT: (throw $e-i32
304304
;; CHECK-TEXT-NEXT: (i32.const 0)
@@ -350,7 +350,7 @@
350350
)
351351

352352
;; CHECK-TEXT: (func $catch-all (type $0)
353-
;; CHECK-TEXT-NEXT: (try $try
353+
;; CHECK-TEXT-NEXT: (try
354354
;; CHECK-TEXT-NEXT: (do
355355
;; CHECK-TEXT-NEXT: (throw $e-i32
356356
;; CHECK-TEXT-NEXT: (i32.const 0)
@@ -383,7 +383,7 @@
383383
)
384384

385385
;; CHECK-TEXT: (func $catch-and-catch-all-together (type $0)
386-
;; CHECK-TEXT-NEXT: (try $try
386+
;; CHECK-TEXT-NEXT: (try
387387
;; CHECK-TEXT-NEXT: (do
388388
;; CHECK-TEXT-NEXT: (throw $e-i32
389389
;; CHECK-TEXT-NEXT: (i32.const 0)
@@ -447,9 +447,9 @@
447447
)
448448

449449
;; CHECK-TEXT: (func $nested-try-catch (type $0)
450-
;; CHECK-TEXT-NEXT: (try $try
450+
;; CHECK-TEXT-NEXT: (try
451451
;; CHECK-TEXT-NEXT: (do
452-
;; CHECK-TEXT-NEXT: (try $try1
452+
;; CHECK-TEXT-NEXT: (try
453453
;; CHECK-TEXT-NEXT: (do
454454
;; CHECK-TEXT-NEXT: (throw $e-i32
455455
;; CHECK-TEXT-NEXT: (i32.const 0)
@@ -471,7 +471,7 @@
471471
;; CHECK-TEXT-NEXT: )
472472
;; CHECK-TEXT-NEXT: )
473473
;; CHECK-TEXT-NEXT: (catch_all
474-
;; CHECK-TEXT-NEXT: (try $try2
474+
;; CHECK-TEXT-NEXT: (try
475475
;; CHECK-TEXT-NEXT: (do
476476
;; CHECK-TEXT-NEXT: (throw $e-i32
477477
;; CHECK-TEXT-NEXT: (i32.const 0)
@@ -563,7 +563,7 @@
563563
)
564564

565565
;; CHECK-TEXT: (func $catchless-delegateless-try (type $0)
566-
;; CHECK-TEXT-NEXT: (try $try
566+
;; CHECK-TEXT-NEXT: (try
567567
;; CHECK-TEXT-NEXT: (do
568568
;; CHECK-TEXT-NEXT: (throw $e-i32
569569
;; CHECK-TEXT-NEXT: (i32.const 0)
@@ -591,13 +591,13 @@
591591
;; CHECK-TEXT: (func $inner-delegate-target-outer-catch (type $0)
592592
;; CHECK-TEXT-NEXT: (try $l0
593593
;; CHECK-TEXT-NEXT: (do
594-
;; CHECK-TEXT-NEXT: (try $try
594+
;; CHECK-TEXT-NEXT: (try
595595
;; CHECK-TEXT-NEXT: (do
596596
;; CHECK-TEXT-NEXT: (call $foo)
597597
;; CHECK-TEXT-NEXT: )
598598
;; CHECK-TEXT-NEXT: (delegate $l0)
599599
;; CHECK-TEXT-NEXT: )
600-
;; CHECK-TEXT-NEXT: (try $try3
600+
;; CHECK-TEXT-NEXT: (try
601601
;; CHECK-TEXT-NEXT: (do
602602
;; CHECK-TEXT-NEXT: (call $foo)
603603
;; CHECK-TEXT-NEXT: )
@@ -653,20 +653,20 @@
653653
)
654654

655655
;; CHECK-TEXT: (func $branch-and-delegate-target-same-try-label (type $0)
656-
;; CHECK-TEXT-NEXT: (block $l05
656+
;; CHECK-TEXT-NEXT: (block $label
657657
;; CHECK-TEXT-NEXT: (try $l0
658658
;; CHECK-TEXT-NEXT: (do
659-
;; CHECK-TEXT-NEXT: (try $try
659+
;; CHECK-TEXT-NEXT: (try
660660
;; CHECK-TEXT-NEXT: (do
661-
;; CHECK-TEXT-NEXT: (br_if $l05
661+
;; CHECK-TEXT-NEXT: (br_if $label
662662
;; CHECK-TEXT-NEXT: (i32.const 1)
663663
;; CHECK-TEXT-NEXT: )
664664
;; CHECK-TEXT-NEXT: )
665665
;; CHECK-TEXT-NEXT: (delegate $l0)
666666
;; CHECK-TEXT-NEXT: )
667-
;; CHECK-TEXT-NEXT: (try $try4
667+
;; CHECK-TEXT-NEXT: (try
668668
;; CHECK-TEXT-NEXT: (do
669-
;; CHECK-TEXT-NEXT: (br_if $l05
669+
;; CHECK-TEXT-NEXT: (br_if $label
670670
;; CHECK-TEXT-NEXT: (i32.const 1)
671671
;; CHECK-TEXT-NEXT: )
672672
;; CHECK-TEXT-NEXT: )
@@ -736,7 +736,7 @@
736736
;; CHECK-TEXT: (func $inner-delegate-target-outer-delegate (type $0)
737737
;; CHECK-TEXT-NEXT: (try $l0
738738
;; CHECK-TEXT-NEXT: (do
739-
;; CHECK-TEXT-NEXT: (try $try
739+
;; CHECK-TEXT-NEXT: (try
740740
;; CHECK-TEXT-NEXT: (do
741741
;; CHECK-TEXT-NEXT: (call $foo)
742742
;; CHECK-TEXT-NEXT: )
@@ -778,7 +778,7 @@
778778
)
779779

780780
;; CHECK-TEXT: (func $empty-catch-body (type $0)
781-
;; CHECK-TEXT-NEXT: (try $try
781+
;; CHECK-TEXT-NEXT: (try
782782
;; CHECK-TEXT-NEXT: (do
783783
;; CHECK-TEXT-NEXT: (nop)
784784
;; CHECK-TEXT-NEXT: )
@@ -854,7 +854,7 @@
854854
)
855855

856856
;; CHECK-TEXT: (func $branch-and-rethrow-target-same-try-label (type $0)
857-
;; CHECK-TEXT-NEXT: (block $l06
857+
;; CHECK-TEXT-NEXT: (block $label
858858
;; CHECK-TEXT-NEXT: (try $l0
859859
;; CHECK-TEXT-NEXT: (do
860860
;; CHECK-TEXT-NEXT: (call $foo)
@@ -866,7 +866,7 @@
866866
;; CHECK-TEXT-NEXT: (rethrow $l0)
867867
;; CHECK-TEXT-NEXT: )
868868
;; CHECK-TEXT-NEXT: (catch_all
869-
;; CHECK-TEXT-NEXT: (br $l06)
869+
;; CHECK-TEXT-NEXT: (br $label)
870870
;; CHECK-TEXT-NEXT: )
871871
;; CHECK-TEXT-NEXT: )
872872
;; CHECK-TEXT-NEXT: )
@@ -915,7 +915,7 @@
915915
;; CHECK-TEXT-NEXT: (call $foo)
916916
;; CHECK-TEXT-NEXT: )
917917
;; CHECK-TEXT-NEXT: (catch_all
918-
;; CHECK-TEXT-NEXT: (try $try
918+
;; CHECK-TEXT-NEXT: (try
919919
;; CHECK-TEXT-NEXT: (do
920920
;; CHECK-TEXT-NEXT: (call $foo)
921921
;; CHECK-TEXT-NEXT: )
@@ -984,7 +984,7 @@
984984
;; CHECK-TEXT-NEXT: (call $foo)
985985
;; CHECK-TEXT-NEXT: )
986986
;; CHECK-TEXT-NEXT: (catch_all
987-
;; CHECK-TEXT-NEXT: (try $try
987+
;; CHECK-TEXT-NEXT: (try
988988
;; CHECK-TEXT-NEXT: (do
989989
;; CHECK-TEXT-NEXT: (call $foo)
990990
;; CHECK-TEXT-NEXT: )
@@ -1063,7 +1063,7 @@
10631063
;; CHECK-TEXT-NEXT: (call $foo)
10641064
;; CHECK-TEXT-NEXT: )
10651065
;; CHECK-TEXT-NEXT: (catch_all
1066-
;; CHECK-TEXT-NEXT: (try $try
1066+
;; CHECK-TEXT-NEXT: (try
10671067
;; CHECK-TEXT-NEXT: (do
10681068
;; CHECK-TEXT-NEXT: (rethrow $l0)
10691069
;; CHECK-TEXT-NEXT: )
@@ -1073,14 +1073,14 @@
10731073
;; CHECK-TEXT-NEXT: )
10741074
;; CHECK-TEXT-NEXT: )
10751075
;; CHECK-TEXT-NEXT: )
1076-
;; CHECK-TEXT-NEXT: (try $l07
1076+
;; CHECK-TEXT-NEXT: (try $l00
10771077
;; CHECK-TEXT-NEXT: (do
10781078
;; CHECK-TEXT-NEXT: (call $foo)
10791079
;; CHECK-TEXT-NEXT: )
10801080
;; CHECK-TEXT-NEXT: (catch_all
1081-
;; CHECK-TEXT-NEXT: (try $try8
1081+
;; CHECK-TEXT-NEXT: (try
10821082
;; CHECK-TEXT-NEXT: (do
1083-
;; CHECK-TEXT-NEXT: (rethrow $l07)
1083+
;; CHECK-TEXT-NEXT: (rethrow $l00)
10841084
;; CHECK-TEXT-NEXT: )
10851085
;; CHECK-TEXT-NEXT: (catch_all
10861086
;; CHECK-TEXT-NEXT: (nop)
@@ -1152,7 +1152,7 @@
11521152
)
11531153

11541154
;; CHECK-TEXT: (func $pop-within-if-condition (type $0)
1155-
;; CHECK-TEXT-NEXT: (try $try
1155+
;; CHECK-TEXT-NEXT: (try
11561156
;; CHECK-TEXT-NEXT: (do
11571157
;; CHECK-TEXT-NEXT: (nop)
11581158
;; CHECK-TEXT-NEXT: )
@@ -1212,13 +1212,13 @@
12121212
)
12131213

12141214
;; CHECK-TEXT: (func $pop-can-be-supertype (type $0)
1215-
;; CHECK-TEXT-NEXT: (try $try
1215+
;; CHECK-TEXT-NEXT: (try
12161216
;; CHECK-TEXT-NEXT: (do
12171217
;; CHECK-TEXT-NEXT: (nop)
12181218
;; CHECK-TEXT-NEXT: )
12191219
;; CHECK-TEXT-NEXT: (catch $e-eqref
12201220
;; CHECK-TEXT-NEXT: (drop
1221-
;; CHECK-TEXT-NEXT: (pop anyref)
1221+
;; CHECK-TEXT-NEXT: (pop eqref)
12221222
;; CHECK-TEXT-NEXT: )
12231223
;; CHECK-TEXT-NEXT: )
12241224
;; CHECK-TEXT-NEXT: )
@@ -1249,7 +1249,7 @@
12491249
;; CHECK-TEXT: (func $catchless-try-with-inner-delegate (type $0)
12501250
;; CHECK-TEXT-NEXT: (try $label$0
12511251
;; CHECK-TEXT-NEXT: (do
1252-
;; CHECK-TEXT-NEXT: (try $try
1252+
;; CHECK-TEXT-NEXT: (try
12531253
;; CHECK-TEXT-NEXT: (do
12541254
;; CHECK-TEXT-NEXT: (throw $e-i32
12551255
;; CHECK-TEXT-NEXT: (i32.const 0)
@@ -1295,7 +1295,7 @@
12951295
;; CHECK-TEXT-NEXT: (block $l0
12961296
;; CHECK-TEXT-NEXT: (block $l1
12971297
;; CHECK-TEXT-NEXT: )
1298-
;; CHECK-TEXT-NEXT: (try $try
1298+
;; CHECK-TEXT-NEXT: (try
12991299
;; CHECK-TEXT-NEXT: (do
13001300
;; CHECK-TEXT-NEXT: (nop)
13011301
;; CHECK-TEXT-NEXT: )

test/lit/basic/extended-names-passive-data-segments.wast

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
(data $passive_data "b")
1919
(data "c")
2020
)
21-
;; CHECK-TEXT: (data $1 "c")
21+
;; CHECK-TEXT: (data $0 "c")
2222

2323
;; CHECK-BIN: (data $1 "c")
2424

test/lit/basic/extended-names.wast

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
;; CHECK-TEXT: (data $passive_data "b")
1818

19-
;; CHECK-TEXT: (data $2 "c")
19+
;; CHECK-TEXT: (data $0 "c")
2020

2121
;; CHECK-TEXT: (table $t1 1 funcref)
2222
;; CHECK-BIN: (memory $m1 1 1)

0 commit comments

Comments
 (0)