-
-
Notifications
You must be signed in to change notification settings - Fork 3.2k
Expand file tree
/
Copy pathirbuild-lists.test
More file actions
467 lines (448 loc) · 8.87 KB
/
irbuild-lists.test
File metadata and controls
467 lines (448 loc) · 8.87 KB
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
[case testListGet]
from typing import List
def f(x: List[int]) -> int:
return x[0]
[out]
def f(x):
x :: list
r0 :: object
r1 :: int
L0:
r0 = CPyList_GetItemShort(x, 0)
r1 = unbox(int, r0)
return r1
[case testListOfListGet]
from typing import List
def f(x: List[List[int]]) -> List[int]:
return x[0]
[out]
def f(x):
x :: list
r0 :: object
r1 :: list
L0:
r0 = CPyList_GetItemShort(x, 0)
r1 = cast(list, r0)
return r1
[case testListOfListGet2]
from typing import List
def f(x: List[List[int]]) -> int:
return x[0][1]
[out]
def f(x):
x :: list
r0 :: object
r1 :: list
r2 :: object
r3 :: int
L0:
r0 = CPyList_GetItemShortBorrow(x, 0)
r1 = borrow cast(list, r0)
r2 = CPyList_GetItemShort(r1, 2)
r3 = unbox(int, r2)
keep_alive x, r0
return r3
[case testListSet]
from typing import List
def f(x: List[int]) -> None:
x[0] = 1
[out]
def f(x):
x :: list
r0 :: object
r1 :: bit
L0:
r0 = object 1
r1 = CPyList_SetItem(x, 0, r0)
return 1
[case testNewListEmpty]
from typing import List
def f() -> None:
x = [] # type: List[int]
[out]
def f():
r0, x :: list
L0:
r0 = PyList_New(0)
x = r0
return 1
[case testNewListEmptyViaFunc]
from typing import List
def f() -> None:
x: List[int] = list()
[out]
def f():
r0, x :: list
L0:
r0 = PyList_New(0)
x = r0
return 1
[case testNewListTwoItems]
from typing import List
def f() -> None:
x: List[int] = [1, 2]
[out]
def f():
r0 :: list
r1, r2 :: object
r3, r4, r5 :: ptr
x :: list
L0:
r0 = PyList_New(2)
r1 = object 1
r2 = object 2
r3 = get_element_ptr r0 ob_item :: PyListObject
r4 = load_mem r3 :: ptr*
set_mem r4, r1 :: builtins.object*
r5 = r4 + WORD_SIZE*1
set_mem r5, r2 :: builtins.object*
keep_alive r0
x = r0
return 1
[case testNewListTenItems]
from typing import List
def f() -> None:
x: List[str] = ['a', 'b', 'c', 'd', 'e',
'f', 'g', 'h', 'i', 'j']
[out]
def f():
r0, r1, r2, r3, r4, r5, r6, r7, r8, r9 :: str
r10, x :: list
L0:
r0 = 'a'
r1 = 'b'
r2 = 'c'
r3 = 'd'
r4 = 'e'
r5 = 'f'
r6 = 'g'
r7 = 'h'
r8 = 'i'
r9 = 'j'
r10 = CPyList_Build(10, r0, r1, r2, r3, r4, r5, r6, r7, r8, r9)
x = r10
return 1
[case testListMultiply]
from typing import List
def f(a: List[int]) -> None:
b = a * 2
b = 3 * [4]
[out]
def f(a):
a, r0, b, r1 :: list
r2 :: object
r3, r4 :: ptr
r5 :: list
L0:
r0 = CPySequence_Multiply(a, 4)
b = r0
r1 = PyList_New(1)
r2 = object 4
r3 = get_element_ptr r1 ob_item :: PyListObject
r4 = load_mem r3 :: ptr*
set_mem r4, r2 :: builtins.object*
keep_alive r1
r5 = CPySequence_RMultiply(6, r1)
b = r5
return 1
[case testListLen]
from typing import List
def f(a: List[int]) -> int:
return len(a)
[out]
def f(a):
a :: list
r0 :: ptr
r1 :: native_int
r2 :: short_int
L0:
r0 = get_element_ptr a ob_size :: PyVarObject
r1 = load_mem r0 :: native_int*
keep_alive a
r2 = r1 << 1
return r2
[case testListAppend]
from typing import List
def f(a: List[int], x: int) -> None:
a.append(x)
[out]
def f(a, x):
a :: list
x :: int
r0 :: object
r1 :: int32
r2 :: bit
L0:
r0 = box(int, x)
r1 = PyList_Append(a, r0)
r2 = r1 >= 0 :: signed
return 1
[case testIndexLvalue]
from typing import List
def increment(l: List[int]) -> List[int]:
for i in range(len(l)):
l[i] += 1
return l
[out]
def increment(l):
l :: list
r0 :: ptr
r1 :: native_int
r2, r3 :: short_int
i :: int
r4 :: bit
r5, r6, r7 :: object
r8 :: bit
r9 :: short_int
L0:
r0 = get_element_ptr l ob_size :: PyVarObject
r1 = load_mem r0 :: native_int*
keep_alive l
r2 = r1 << 1
r3 = 0
i = r3
L1:
r4 = r3 < r2 :: signed
if r4 goto L2 else goto L4 :: bool
L2:
r5 = CPyList_GetItem(l, i)
r6 = object 1
r7 = PyNumber_InPlaceAdd(r5, r6)
r8 = CPyList_SetItem(l, i, r7)
L3:
r9 = r3 + 2
r3 = r9
i = r9
goto L1
L4:
return l
[case testListDisplay]
from typing import List
def f(x: List[int], y: List[int]) -> List[int]:
return [1, 2, *x, *y, 3]
[out]
def f(x, y):
x, y, r0 :: list
r1, r2 :: object
r3, r4, r5 :: ptr
r6, r7, r8 :: object
r9 :: int32
r10 :: bit
L0:
r0 = PyList_New(2)
r1 = object 1
r2 = object 2
r3 = get_element_ptr r0 ob_item :: PyListObject
r4 = load_mem r3 :: ptr*
set_mem r4, r1 :: builtins.object*
r5 = r4 + WORD_SIZE*1
set_mem r5, r2 :: builtins.object*
keep_alive r0
r6 = CPyList_Extend(r0, x)
r7 = CPyList_Extend(r0, y)
r8 = object 3
r9 = PyList_Append(r0, r8)
r10 = r9 >= 0 :: signed
return r0
[case testListIn]
from typing import List
def f(x: List[int], y: int) -> bool:
return y in x
[out]
def f(x, y):
x :: list
y :: int
r0 :: object
r1 :: int32
r2 :: bit
r3 :: bool
L0:
r0 = box(int, y)
r1 = PySequence_Contains(x, r0)
r2 = r1 >= 0 :: signed
r3 = truncate r1: int32 to builtins.bool
return r3
[case testListInsert]
from typing import List
def f(x: List[int], y: int) -> None:
x.insert(0, y)
[out]
def f(x, y):
x :: list
y :: int
r0 :: object
r1 :: int32
r2 :: bit
L0:
r0 = box(int, y)
r1 = CPyList_Insert(x, 0, r0)
r2 = r1 >= 0 :: signed
return 1
[case testListBuiltFromGenerator]
from typing import List
def f(source: List[int]) -> None:
a = list(x + 1 for x in source)
b = [x + 1 for x in source]
[out]
def f(source):
source :: list
r0 :: ptr
r1 :: native_int
r2 :: list
r3 :: short_int
r4 :: ptr
r5 :: native_int
r6 :: short_int
r7 :: bit
r8 :: object
r9, x, r10 :: int
r11 :: object
r12 :: bit
r13 :: short_int
a :: list
r14 :: ptr
r15 :: native_int
r16 :: list
r17 :: short_int
r18 :: ptr
r19 :: native_int
r20 :: short_int
r21 :: bit
r22 :: object
r23, x_2, r24 :: int
r25 :: object
r26 :: bit
r27 :: short_int
b :: list
L0:
r0 = get_element_ptr source ob_size :: PyVarObject
r1 = load_mem r0 :: native_int*
keep_alive source
r2 = PyList_New(r1)
r3 = 0
L1:
r4 = get_element_ptr source ob_size :: PyVarObject
r5 = load_mem r4 :: native_int*
keep_alive source
r6 = r5 << 1
r7 = r3 < r6 :: signed
if r7 goto L2 else goto L4 :: bool
L2:
r8 = CPyList_GetItemUnsafe(source, r3)
r9 = unbox(int, r8)
x = r9
r10 = CPyTagged_Add(x, 2)
r11 = box(int, r10)
r12 = CPyList_SetItemUnsafe(r2, r3, r11)
L3:
r13 = r3 + 2
r3 = r13
goto L1
L4:
a = r2
r14 = get_element_ptr source ob_size :: PyVarObject
r15 = load_mem r14 :: native_int*
keep_alive source
r16 = PyList_New(r15)
r17 = 0
L5:
r18 = get_element_ptr source ob_size :: PyVarObject
r19 = load_mem r18 :: native_int*
keep_alive source
r20 = r19 << 1
r21 = r17 < r20 :: signed
if r21 goto L6 else goto L8 :: bool
L6:
r22 = CPyList_GetItemUnsafe(source, r17)
r23 = unbox(int, r22)
x_2 = r23
r24 = CPyTagged_Add(x_2, 2)
r25 = box(int, r24)
r26 = CPyList_SetItemUnsafe(r16, r17, r25)
L7:
r27 = r17 + 2
r17 = r27
goto L5
L8:
b = r16
return 1
[case testGeneratorNext]
from typing import List, Optional
def test(x: List[int]) -> None:
res = next((i for i in x), None)
[out]
def test(x):
x :: list
r0 :: short_int
r1 :: ptr
r2 :: native_int
r3 :: short_int
r4 :: bit
r5 :: object
r6, i :: int
r7 :: object
r8 :: union[int, None]
r9 :: short_int
r10 :: object
res :: union[int, None]
L0:
r0 = 0
L1:
r1 = get_element_ptr x ob_size :: PyVarObject
r2 = load_mem r1 :: native_int*
keep_alive x
r3 = r2 << 1
r4 = r0 < r3 :: signed
if r4 goto L2 else goto L4 :: bool
L2:
r5 = CPyList_GetItemUnsafe(x, r0)
r6 = unbox(int, r5)
i = r6
r7 = box(int, i)
r8 = r7
goto L5
L3:
r9 = r0 + 2
r0 = r9
goto L1
L4:
r10 = box(None, 1)
r8 = r10
L5:
res = r8
return 1
[case testSimplifyListUnion]
from typing import List, Union
def f(a: Union[List[str], List[bytes], int]) -> int:
if isinstance(a, list):
return len(a)
return a
[out]
def f(a):
a :: union[list, int]
r0 :: object
r1 :: int32
r2 :: bit
r3 :: bool
r4 :: list
r5 :: ptr
r6 :: native_int
r7 :: short_int
r8 :: int
L0:
r0 = load_address PyList_Type
r1 = PyObject_IsInstance(a, r0)
r2 = r1 >= 0 :: signed
r3 = truncate r1: int32 to builtins.bool
if r3 goto L1 else goto L2 :: bool
L1:
r4 = borrow cast(list, a)
r5 = get_element_ptr r4 ob_size :: PyVarObject
r6 = load_mem r5 :: native_int*
keep_alive r4
r7 = r6 << 1
keep_alive a
return r7
L2:
r8 = unbox(int, a)
return r8