|
15 | 15 |
|
16 | 16 | ;; CHECK: (type $4 (func (result externref))) |
17 | 17 |
|
| 18 | + ;; CHECK: (type $struct-of-string (struct (field externref) (field i32) (field anyref))) |
| 19 | + (type $struct-of-string (struct (field stringref) (field i32) (field anyref))) |
| 20 | + |
18 | 21 | ;; CHECK: (type $struct-of-array (struct (field (ref $0)))) |
19 | 22 | (type $struct-of-array (struct (field (ref $array16)))) |
20 | 23 |
|
|
34 | 37 | (type $array16 (array (mut i16))) |
35 | 38 | ) |
36 | 39 |
|
37 | | - ;; CHECK: (type $11 (func (param externref) (result externref))) |
38 | | - |
39 | 40 | ;; CHECK: (type $12 (func (param externref) (result externref))) |
40 | 41 |
|
41 | | - ;; CHECK: (type $13 (func (param externref) (result i32))) |
| 42 | + ;; CHECK: (type $13 (func (param externref) (result externref))) |
42 | 43 |
|
43 | | - ;; CHECK: (type $14 (func (param externref externref) (result i32))) |
| 44 | + ;; CHECK: (type $14 (func (param externref) (result i32))) |
44 | 45 |
|
45 | | - ;; CHECK: (type $15 (func (param externref (ref $0)) (result i32))) |
| 46 | + ;; CHECK: (type $15 (func (param externref externref) (result i32))) |
46 | 47 |
|
47 | | - ;; CHECK: (type $16 (func (param (ref $0)))) |
| 48 | + ;; CHECK: (type $16 (func (param externref (ref $0)) (result i32))) |
48 | 49 |
|
49 | | - ;; CHECK: (type $17 (func (param externref externref externref externref))) |
| 50 | + ;; CHECK: (type $17 (func (param (ref $0)))) |
50 | 51 |
|
51 | | - ;; CHECK: (type $18 (func (param (ref null $0) i32 i32) (result (ref extern)))) |
| 52 | + ;; CHECK: (type $18 (func (param externref externref externref externref))) |
52 | 53 |
|
53 | | - ;; CHECK: (type $19 (func (param i32) (result (ref extern)))) |
| 54 | + ;; CHECK: (type $19 (func (param (ref null $0) i32 i32) (result (ref extern)))) |
54 | 55 |
|
55 | | - ;; CHECK: (type $20 (func (param externref (ref null $0) i32) (result i32))) |
| 56 | + ;; CHECK: (type $20 (func (param i32) (result (ref extern)))) |
56 | 57 |
|
57 | | - ;; CHECK: (type $21 (func (param externref) (result i32))) |
| 58 | + ;; CHECK: (type $21 (func (param externref (ref null $0) i32) (result i32))) |
58 | 59 |
|
59 | | - ;; CHECK: (type $22 (func (param externref i32) (result i32))) |
| 60 | + ;; CHECK: (type $22 (func (param externref) (result i32))) |
60 | 61 |
|
61 | | - ;; CHECK: (type $23 (func (param externref i32 i32) (result (ref extern)))) |
| 62 | + ;; CHECK: (type $23 (func (param externref i32) (result i32))) |
| 63 | + |
| 64 | + ;; CHECK: (type $24 (func (param externref i32 i32) (result (ref extern)))) |
62 | 65 |
|
63 | 66 | ;; CHECK: (import "string.const" "0" (global $string.const_exported (ref extern))) |
64 | 67 |
|
| 68 | + ;; CHECK: (import "string.const" "1" (global $string.const_value (ref extern))) |
| 69 | + |
65 | 70 | ;; CHECK: (import "colliding" "name" (func $fromCodePoint (type $1))) |
66 | 71 | (import "colliding" "name" (func $fromCodePoint)) |
67 | 72 |
|
68 | | - ;; CHECK: (import "wasm:js-string" "fromCharCodeArray" (func $fromCharCodeArray (type $18) (param (ref null $0) i32 i32) (result (ref extern)))) |
| 73 | + ;; CHECK: (import "wasm:js-string" "fromCharCodeArray" (func $fromCharCodeArray (type $19) (param (ref null $0) i32 i32) (result (ref extern)))) |
69 | 74 |
|
70 | | - ;; CHECK: (import "wasm:js-string" "fromCodePoint" (func $fromCodePoint_16 (type $19) (param i32) (result (ref extern)))) |
| 75 | + ;; CHECK: (import "wasm:js-string" "fromCodePoint" (func $fromCodePoint_17 (type $20) (param i32) (result (ref extern)))) |
71 | 76 |
|
72 | | - ;; CHECK: (import "wasm:js-string" "intoCharCodeArray" (func $intoCharCodeArray (type $20) (param externref (ref null $0) i32) (result i32))) |
| 77 | + ;; CHECK: (import "wasm:js-string" "intoCharCodeArray" (func $intoCharCodeArray (type $21) (param externref (ref null $0) i32) (result i32))) |
73 | 78 |
|
74 | 79 | ;; CHECK: (import "wasm:js-string" "equals" (func $equals (type $2) (param externref externref) (result i32))) |
75 | 80 |
|
76 | 81 | ;; CHECK: (import "wasm:js-string" "compare" (func $compare (type $2) (param externref externref) (result i32))) |
77 | 82 |
|
78 | | - ;; CHECK: (import "wasm:js-string" "length" (func $length (type $21) (param externref) (result i32))) |
| 83 | + ;; CHECK: (import "wasm:js-string" "length" (func $length (type $22) (param externref) (result i32))) |
79 | 84 |
|
80 | | - ;; CHECK: (import "wasm:js-string" "codePointAt" (func $codePointAt (type $22) (param externref i32) (result i32))) |
| 85 | + ;; CHECK: (import "wasm:js-string" "codePointAt" (func $codePointAt (type $23) (param externref i32) (result i32))) |
81 | 86 |
|
82 | | - ;; CHECK: (import "wasm:js-string" "substring" (func $substring (type $23) (param externref i32 i32) (result (ref extern)))) |
| 87 | + ;; CHECK: (import "wasm:js-string" "substring" (func $substring (type $24) (param externref i32 i32) (result (ref extern)))) |
83 | 88 |
|
84 | 89 | ;; CHECK: (export "export.1" (func $exported-string-returner)) |
85 | 90 |
|
86 | 91 | ;; CHECK: (export "export.2" (func $exported-string-receiver)) |
87 | 92 |
|
88 | | - ;; CHECK: (func $string.as (type $17) (param $a externref) (param $b externref) (param $c externref) (param $d externref) |
| 93 | + ;; CHECK: (func $string.as (type $18) (param $a externref) (param $b externref) (param $c externref) (param $d externref) |
89 | 94 | ;; CHECK-NEXT: (local.set $b |
90 | 95 | ;; CHECK-NEXT: (local.get $a) |
91 | 96 | ;; CHECK-NEXT: ) |
|
120 | 125 | ) |
121 | 126 | ) |
122 | 127 |
|
123 | | - ;; CHECK: (func $string.new.gc (type $16) (param $array16 (ref $0)) |
| 128 | + ;; CHECK: (func $string.new.gc (type $17) (param $array16 (ref $0)) |
124 | 129 | ;; CHECK-NEXT: (drop |
125 | 130 | ;; CHECK-NEXT: (call $fromCharCodeArray |
126 | 131 | ;; CHECK-NEXT: (local.get $array16) |
|
140 | 145 | ) |
141 | 146 |
|
142 | 147 | ;; CHECK: (func $string.from_code_point (type $4) (result externref) |
143 | | - ;; CHECK-NEXT: (call $fromCodePoint_16 |
| 148 | + ;; CHECK-NEXT: (call $fromCodePoint_17 |
144 | 149 | ;; CHECK-NEXT: (i32.const 1) |
145 | 150 | ;; CHECK-NEXT: ) |
146 | 151 | ;; CHECK-NEXT: ) |
|
150 | 155 | ) |
151 | 156 | ) |
152 | 157 |
|
153 | | - ;; CHECK: (func $string.encode (type $15) (param $ref externref) (param $array16 (ref $0)) (result i32) |
| 158 | + ;; CHECK: (func $string.encode (type $16) (param $ref externref) (param $array16 (ref $0)) (result i32) |
154 | 159 | ;; CHECK-NEXT: (call $intoCharCodeArray |
155 | 160 | ;; CHECK-NEXT: (local.get $ref) |
156 | 161 | ;; CHECK-NEXT: (local.get $array16) |
|
165 | 170 | ) |
166 | 171 | ) |
167 | 172 |
|
168 | | - ;; CHECK: (func $string.eq (type $14) (param $a externref) (param $b externref) (result i32) |
| 173 | + ;; CHECK: (func $string.eq (type $15) (param $a externref) (param $b externref) (result i32) |
169 | 174 | ;; CHECK-NEXT: (call $equals |
170 | 175 | ;; CHECK-NEXT: (local.get $a) |
171 | 176 | ;; CHECK-NEXT: (local.get $b) |
|
178 | 183 | ) |
179 | 184 | ) |
180 | 185 |
|
181 | | - ;; CHECK: (func $string.compare (type $14) (param $a externref) (param $b externref) (result i32) |
| 186 | + ;; CHECK: (func $string.compare (type $15) (param $a externref) (param $b externref) (result i32) |
182 | 187 | ;; CHECK-NEXT: (call $compare |
183 | 188 | ;; CHECK-NEXT: (local.get $a) |
184 | 189 | ;; CHECK-NEXT: (local.get $b) |
|
191 | 196 | ) |
192 | 197 | ) |
193 | 198 |
|
194 | | - ;; CHECK: (func $string.length (type $13) (param $ref externref) (result i32) |
| 199 | + ;; CHECK: (func $string.length (type $14) (param $ref externref) (result i32) |
195 | 200 | ;; CHECK-NEXT: (call $length |
196 | 201 | ;; CHECK-NEXT: (local.get $ref) |
197 | 202 | ;; CHECK-NEXT: ) |
|
202 | 207 | ) |
203 | 208 | ) |
204 | 209 |
|
205 | | - ;; CHECK: (func $string.get_codeunit (type $13) (param $ref externref) (result i32) |
| 210 | + ;; CHECK: (func $string.get_codeunit (type $14) (param $ref externref) (result i32) |
206 | 211 | ;; CHECK-NEXT: (call $codePointAt |
207 | 212 | ;; CHECK-NEXT: (local.get $ref) |
208 | 213 | ;; CHECK-NEXT: (i32.const 2) |
|
215 | 220 | ) |
216 | 221 | ) |
217 | 222 |
|
218 | | - ;; CHECK: (func $string.slice (type $12) (param $ref externref) (result externref) |
| 223 | + ;; CHECK: (func $string.slice (type $13) (param $ref externref) (result externref) |
219 | 224 | ;; CHECK-NEXT: (call $substring |
220 | 225 | ;; CHECK-NEXT: (local.get $ref) |
221 | 226 | ;; CHECK-NEXT: (i32.const 2) |
|
230 | 235 | ) |
231 | 236 | ) |
232 | 237 |
|
233 | | - ;; CHECK: (func $if.string (type $11) (param $ref externref) (result externref) |
| 238 | + ;; CHECK: (func $if.string (type $12) (param $ref externref) (result externref) |
234 | 239 | ;; CHECK-NEXT: (if (result externref) |
235 | 240 | ;; CHECK-NEXT: (i32.const 0) |
236 | 241 | ;; CHECK-NEXT: (then |
|
253 | 258 | ) |
254 | 259 | ) |
255 | 260 |
|
256 | | - ;; CHECK: (func $if.string.flip (type $11) (param $ref externref) (result externref) |
| 261 | + ;; CHECK: (func $if.string.flip (type $12) (param $ref externref) (result externref) |
257 | 262 | ;; CHECK-NEXT: (if (result externref) |
258 | 263 | ;; CHECK-NEXT: (i32.const 0) |
259 | 264 | ;; CHECK-NEXT: (then |
|
366 | 371 | ) |
367 | 372 | ) |
368 | 373 | ) |
| 374 | + |
| 375 | + ;; CHECK: (func $struct-of-string (type $1) |
| 376 | + ;; CHECK-NEXT: (drop |
| 377 | + ;; CHECK-NEXT: (struct.new $struct-of-string |
| 378 | + ;; CHECK-NEXT: (ref.null noextern) |
| 379 | + ;; CHECK-NEXT: (i32.const 10) |
| 380 | + ;; CHECK-NEXT: (ref.null none) |
| 381 | + ;; CHECK-NEXT: ) |
| 382 | + ;; CHECK-NEXT: ) |
| 383 | + ;; CHECK-NEXT: (drop |
| 384 | + ;; CHECK-NEXT: (struct.new $struct-of-string |
| 385 | + ;; CHECK-NEXT: (global.get $string.const_value) |
| 386 | + ;; CHECK-NEXT: (i32.const 10) |
| 387 | + ;; CHECK-NEXT: (ref.null none) |
| 388 | + ;; CHECK-NEXT: ) |
| 389 | + ;; CHECK-NEXT: ) |
| 390 | + ;; CHECK-NEXT: (drop |
| 391 | + ;; CHECK-NEXT: (struct.new_default $struct-of-string) |
| 392 | + ;; CHECK-NEXT: ) |
| 393 | + ;; CHECK-NEXT: ) |
| 394 | + (func $struct-of-string |
| 395 | + ;; Test lowering of struct fields from stringref to externref. |
| 396 | + (drop |
| 397 | + (struct.new $struct-of-string |
| 398 | + (ref.null none) ;; This null must be fixed to be ext. |
| 399 | + (i32.const 10) |
| 400 | + (ref.null none) ;; Nothing to do here (field remains anyref). |
| 401 | + ) |
| 402 | + ) |
| 403 | + (drop |
| 404 | + (struct.new $struct-of-string |
| 405 | + (string.const "value") ;; Nothing to do besides change to a global. |
| 406 | + (i32.const 10) |
| 407 | + (ref.null none) |
| 408 | + ) |
| 409 | + ) |
| 410 | + (drop |
| 411 | + (struct.new_default $struct-of-string) ;; Nothing to do here. |
| 412 | + ) |
| 413 | + ) |
369 | 414 | ) |
0 commit comments