|
49 | 49 |
|
50 | 50 | ;; CHECK: (type $17 (func (param (ref $0)))) |
51 | 51 |
|
52 | | - ;; CHECK: (type $18 (func (param externref externref externref externref))) |
| 52 | + ;; CHECK: (type $18 (func (param externref (ref extern) externref externref externref (ref extern)))) |
53 | 53 |
|
54 | 54 | ;; CHECK: (type $19 (func (param (ref null $0) i32 i32) (result (ref extern)))) |
55 | 55 |
|
|
90 | 90 |
|
91 | 91 | ;; CHECK: (export "export.2" (func $exported-string-receiver)) |
92 | 92 |
|
93 | | - ;; CHECK: (func $string.as (type $18) (param $a externref) (param $b externref) (param $c externref) (param $d externref) |
| 93 | + ;; CHECK: (func $string.as (type $18) (param $a externref) (param $a_nn (ref extern)) (param $b externref) (param $c externref) (param $d externref) (param $nn_view (ref extern)) |
94 | 94 | ;; CHECK-NEXT: (local.set $b |
95 | | - ;; CHECK-NEXT: (local.get $a) |
| 95 | + ;; CHECK-NEXT: (ref.as_non_null |
| 96 | + ;; CHECK-NEXT: (local.get $a) |
| 97 | + ;; CHECK-NEXT: ) |
96 | 98 | ;; CHECK-NEXT: ) |
97 | 99 | ;; CHECK-NEXT: (local.set $c |
98 | | - ;; CHECK-NEXT: (local.get $a) |
| 100 | + ;; CHECK-NEXT: (ref.as_non_null |
| 101 | + ;; CHECK-NEXT: (local.get $a) |
| 102 | + ;; CHECK-NEXT: ) |
99 | 103 | ;; CHECK-NEXT: ) |
100 | 104 | ;; CHECK-NEXT: (local.set $d |
101 | | - ;; CHECK-NEXT: (local.get $a) |
| 105 | + ;; CHECK-NEXT: (ref.as_non_null |
| 106 | + ;; CHECK-NEXT: (local.get $a) |
| 107 | + ;; CHECK-NEXT: ) |
| 108 | + ;; CHECK-NEXT: ) |
| 109 | + ;; CHECK-NEXT: (local.set $nn_view |
| 110 | + ;; CHECK-NEXT: (ref.as_non_null |
| 111 | + ;; CHECK-NEXT: (local.get $a) |
| 112 | + ;; CHECK-NEXT: ) |
| 113 | + ;; CHECK-NEXT: ) |
| 114 | + ;; CHECK-NEXT: (local.set $nn_view |
| 115 | + ;; CHECK-NEXT: (local.get $a_nn) |
102 | 116 | ;; CHECK-NEXT: ) |
103 | 117 | ;; CHECK-NEXT: ) |
104 | 118 | (func $string.as |
105 | 119 | (param $a stringref) |
| 120 | + (param $a_nn (ref string)) |
106 | 121 | (param $b stringview_wtf8) |
107 | 122 | (param $c stringview_wtf16) |
108 | 123 | (param $d stringview_iter) |
| 124 | + (param $nn_view (ref stringview_wtf16)) |
109 | 125 | ;; These operations all vanish in the lowering, as they all become extref |
110 | 126 | ;; (JS strings). |
111 | 127 | (local.set $b |
|
123 | 139 | (local.get $a) |
124 | 140 | ) |
125 | 141 | ) |
| 142 | + ;; The input is nullable, and string.as casts to non-null, so we will need |
| 143 | + ;; to keep a cast here in order to validate. (We also add a cast in all the |
| 144 | + ;; above as the inputs are nullable, but this is the only one that will |
| 145 | + ;; fail to validate. Other opts can remove the above ones.) |
| 146 | + (local.set $nn_view |
| 147 | + (string.as_wtf16 |
| 148 | + (local.get $a) |
| 149 | + ) |
| 150 | + ) |
| 151 | + ;; The input is already non-nullable here, so no cast is needed. |
| 152 | + (local.set $nn_view |
| 153 | + (string.as_wtf16 |
| 154 | + (local.get $a_nn) |
| 155 | + ) |
| 156 | + ) |
126 | 157 | ) |
127 | 158 |
|
128 | 159 | ;; CHECK: (func $string.new.gc (type $17) (param $array16 (ref $0)) |
|
0 commit comments