summaryrefslogtreecommitdiff
path: root/test/passes/remove-unused-names_optimize-instructions_all-features.wast
blob: 1c39a9d84b7b1f1af656510c5a31102173856843 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
(module
  (func $dummy)
  (event $e (attr 0) (param i32))

  (func $getFallthrough ;; unit tests for Properties::getFallthrough
    (local $x0 i32)
    (local $x1 i32)
    (local $x2 i32)
    (local $x3 i32)

    ;; try - try body does not throw, can
    (local.set $x0
      (try (result i32)
        (do
          (i32.const 1)
        )
        (catch
          (drop (exnref.pop))
          (i32.const 3)
        )
      )
    )
    (drop (i32.and (local.get $x0) (i32.const 7)))

    ;; try - try body may throw, can't
    (local.set $x1
      (try (result i32)
        (do
          (call $dummy)
          (i32.const 1)
        )
        (catch
          (drop (exnref.pop))
          (i32.const 3)
        )
      )
    )
    (drop (i32.and (local.get $x1) (i32.const 7)))

    ;; nested try - inner try may throw but will be caught by inner catch, can
    (local.set $x2
      (try (result i32)
        (do
          (try
            (do
              (throw $e (i32.const 0))
            )
            (catch
              (drop (exnref.pop))
            )
          )
          (i32.const 1)
        )
        (catch
          (drop (exnref.pop))
          (i32.const 3)
        )
      )
    )
    (drop (i32.and (local.get $x2) (i32.const 7)))

    ;; nested try - inner catch may throw, can't
    (local.set $x3
      (try (result i32)
        (do
          (try
            (catch
              (drop (exnref.pop))
              (throw $e (i32.const 0))
            )
          )
          (i32.const 1)
        )
        (catch
          (drop (exnref.pop))
          (i32.const 3)
        )
      )
    )
    (drop (i32.and (local.get $x3) (i32.const 7)))
  )
)