Skip to content

Commit 6323b25

Browse files
committed
Add a test for calling a function from an array
1 parent 0b97e33 commit 6323b25

File tree

4 files changed

+446
-0
lines changed

4 files changed

+446
-0
lines changed
Lines changed: 241 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,241 @@
1+
(module
2+
(type $i32_=>_i32 (func (param i32) (result i32)))
3+
(type $none_=>_none (func))
4+
(type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
5+
(type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
6+
(import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
7+
(global $function-array/funcD i32 (i32.const 32))
8+
(global $function-array/funcE i32 (i32.const 64))
9+
(global $function-array/funcs i32 (i32.const 240))
10+
(global $function-array/results i32 (i32.const 336))
11+
(global $~lib/shared/runtime/Runtime.Stub i32 (i32.const 0))
12+
(global $~lib/shared/runtime/Runtime.Minimal i32 (i32.const 1))
13+
(global $~lib/shared/runtime/Runtime.Incremental i32 (i32.const 2))
14+
(global $~argumentsLength (mut i32) (i32.const 0))
15+
(global $~lib/memory/__data_end i32 (i32.const 668))
16+
(global $~lib/memory/__stack_pointer (mut i32) (i32.const 17052))
17+
(global $~lib/memory/__heap_base i32 (i32.const 17052))
18+
(memory $0 1)
19+
(data (i32.const 12) "\1c\00\00\00\00\00\00\00\00\00\00\00\03\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00")
20+
(data (i32.const 44) "\1c\00\00\00\00\00\00\00\00\00\00\00\03\00\00\00\08\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00")
21+
(data (i32.const 76) "\1c\00\00\00\00\00\00\00\00\00\00\00\03\00\00\00\08\00\00\00\03\00\00\00\00\00\00\00\00\00\00\00")
22+
(data (i32.const 108) "\1c\00\00\00\00\00\00\00\00\00\00\00\03\00\00\00\08\00\00\00\04\00\00\00\00\00\00\00\00\00\00\00")
23+
(data (i32.const 140) "\1c\00\00\00\00\00\00\00\00\00\00\00\03\00\00\00\08\00\00\00\05\00\00\00\00\00\00\00\00\00\00\00")
24+
(data (i32.const 172) ",\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\14\00\00\00`\00\00\00\80\00\00\00\a0\00\00\00 \00\00\00@\00\00\00\00\00\00\00\00\00\00\00")
25+
(data (i32.const 220) ",\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\10\00\00\00\c0\00\00\00\c0\00\00\00\14\00\00\00\05\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00")
26+
(data (i32.const 268) ",\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\14\00\00\00q\01\00\00|\00\00\00=\00\00\00\08\00\00\00t\00\00\00\00\00\00\00\00\00\00\00")
27+
(data (i32.const 316) ",\00\00\00\00\00\00\00\00\00\00\00\05\00\00\00\10\00\00\00 \01\00\00 \01\00\00\14\00\00\00\05\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00")
28+
(data (i32.const 364) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00\00\00\00\00\00\00\00\00")
29+
(data (i32.const 428) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00")
30+
(data (i32.const 476) "|\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00")
31+
(data (i32.const 604) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\"\00\00\00f\00u\00n\00c\00t\00i\00o\00n\00-\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00")
32+
(table $0 6 6 funcref)
33+
(elem $0 (i32.const 1) $start:function-array~anonymous|0 $start:function-array~anonymous|1 $function-array/funcA $function-array/funcB $function-array/funcC)
34+
(export "memory" (memory $0))
35+
(start $~start)
36+
(func $start:function-array~anonymous|0 (param $x i32) (result i32)
37+
local.get $x
38+
i32.const 4
39+
i32.rem_s
40+
i32.const 5
41+
i32.add
42+
)
43+
(func $start:function-array~anonymous|1 (param $x i32) (result i32)
44+
local.get $x
45+
i32.const 7
46+
i32.sub
47+
)
48+
(func $function-array/funcA (param $x i32) (result i32)
49+
local.get $x
50+
i32.const 3
51+
i32.mul
52+
)
53+
(func $function-array/funcB (param $x i32) (result i32)
54+
local.get $x
55+
i32.const 1
56+
i32.add
57+
)
58+
(func $function-array/funcC (param $x i32) (result i32)
59+
local.get $x
60+
i32.const 2
61+
i32.div_s
62+
)
63+
(func $~lib/array/Array<i32>#get:length (param $this i32) (result i32)
64+
local.get $this
65+
i32.load $0 offset=12
66+
)
67+
(func $~lib/array/Array<i32>#__get (param $this i32) (param $index i32) (result i32)
68+
(local $value i32)
69+
local.get $index
70+
local.get $this
71+
i32.load $0 offset=12
72+
i32.ge_u
73+
if
74+
i32.const 384
75+
i32.const 448
76+
i32.const 114
77+
i32.const 42
78+
call $~lib/builtins/abort
79+
unreachable
80+
end
81+
local.get $this
82+
i32.load $0 offset=4
83+
local.get $index
84+
i32.const 2
85+
i32.shl
86+
i32.add
87+
i32.load $0
88+
local.set $value
89+
i32.const 0
90+
drop
91+
local.get $value
92+
)
93+
(func $~start
94+
call $start:function-array
95+
)
96+
(func $~stack_check
97+
global.get $~lib/memory/__stack_pointer
98+
global.get $~lib/memory/__data_end
99+
i32.lt_s
100+
if
101+
i32.const 17072
102+
i32.const 17120
103+
i32.const 1
104+
i32.const 1
105+
call $~lib/builtins/abort
106+
unreachable
107+
end
108+
)
109+
(func $start:function-array
110+
(local $0 i32)
111+
(local $1 i32)
112+
(local $2 i32)
113+
(local $3 i32)
114+
(local $4 i32)
115+
global.get $~lib/memory/__stack_pointer
116+
i32.const 4
117+
i32.sub
118+
global.set $~lib/memory/__stack_pointer
119+
call $~stack_check
120+
global.get $~lib/memory/__stack_pointer
121+
i32.const 0
122+
i32.store $0
123+
i32.const 0
124+
local.set $0
125+
loop $for-loop|0
126+
local.get $0
127+
global.get $function-array/results
128+
local.set $4
129+
global.get $~lib/memory/__stack_pointer
130+
local.get $4
131+
i32.store $0
132+
local.get $4
133+
call $~lib/array/Array<i32>#get:length
134+
i32.lt_s
135+
local.set $1
136+
local.get $1
137+
if
138+
global.get $function-array/results
139+
local.set $4
140+
global.get $~lib/memory/__stack_pointer
141+
local.get $4
142+
i32.store $0
143+
local.get $4
144+
local.get $0
145+
call $~lib/array/Array<i32>#__get
146+
local.set $2
147+
i32.const 123
148+
i32.const 1
149+
global.set $~argumentsLength
150+
global.get $function-array/funcs
151+
local.set $4
152+
global.get $~lib/memory/__stack_pointer
153+
local.get $4
154+
i32.store $0
155+
local.get $4
156+
local.get $0
157+
call $~lib/array/Array<%28i32%29=>i32>#__get
158+
i32.load $0
159+
call_indirect $0 (type $i32_=>_i32)
160+
local.set $3
161+
local.get $2
162+
local.get $3
163+
i32.eq
164+
i32.eqz
165+
if
166+
i32.const 0
167+
i32.const 624
168+
i32.const 23
169+
i32.const 3
170+
call $~lib/builtins/abort
171+
unreachable
172+
end
173+
local.get $0
174+
i32.const 1
175+
i32.add
176+
local.set $0
177+
br $for-loop|0
178+
end
179+
end
180+
global.get $~lib/memory/__stack_pointer
181+
i32.const 4
182+
i32.add
183+
global.set $~lib/memory/__stack_pointer
184+
)
185+
(func $~lib/array/Array<%28i32%29=>i32>#__get (param $this i32) (param $index i32) (result i32)
186+
(local $value i32)
187+
(local $3 i32)
188+
global.get $~lib/memory/__stack_pointer
189+
i32.const 4
190+
i32.sub
191+
global.set $~lib/memory/__stack_pointer
192+
call $~stack_check
193+
global.get $~lib/memory/__stack_pointer
194+
i32.const 0
195+
i32.store $0
196+
local.get $index
197+
local.get $this
198+
i32.load $0 offset=12
199+
i32.ge_u
200+
if
201+
i32.const 384
202+
i32.const 448
203+
i32.const 114
204+
i32.const 42
205+
call $~lib/builtins/abort
206+
unreachable
207+
end
208+
global.get $~lib/memory/__stack_pointer
209+
local.get $this
210+
i32.load $0 offset=4
211+
local.get $index
212+
i32.const 2
213+
i32.shl
214+
i32.add
215+
i32.load $0
216+
local.tee $value
217+
i32.store $0
218+
i32.const 1
219+
drop
220+
i32.const 0
221+
i32.eqz
222+
drop
223+
local.get $value
224+
i32.eqz
225+
if
226+
i32.const 496
227+
i32.const 448
228+
i32.const 118
229+
i32.const 40
230+
call $~lib/builtins/abort
231+
unreachable
232+
end
233+
local.get $value
234+
local.set $3
235+
global.get $~lib/memory/__stack_pointer
236+
i32.const 4
237+
i32.add
238+
global.set $~lib/memory/__stack_pointer
239+
local.get $3
240+
)
241+
)

tests/compiler/function-array.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
// Do nothing special.

0 commit comments

Comments
 (0)