Skip to content

Commit efbba27

Browse files
committed
update ir
1 parent e3fde02 commit efbba27

File tree

6 files changed

+224
-201
lines changed

6 files changed

+224
-201
lines changed

mypyc/test-data/irbuild-basic.test

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3257,7 +3257,7 @@ L0:
32573257
r1 = PySequence_List(r0)
32583258
return r1
32593259
def h(x):
3260-
x :: dict[exact]
3260+
x :: dict
32613261
r0 :: list
32623262
L0:
32633263
r0 = PySequence_List(x)

mypyc/test-data/irbuild-dict.test

Lines changed: 98 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,12 @@ def f() -> None:
3636
d = {} # type: Dict[bool, int]
3737
[out]
3838
def f():
39-
r0, d :: dict[exact]
39+
r0 :: dict[exact]
40+
r1, d :: dict
4041
L0:
4142
r0 = PyDict_New()
42-
d = r0
43+
r1 = cast(dict, r0)
44+
d = r1
4345
return 1
4446

4547
[case testNewEmptyDictViaFunc]
@@ -49,10 +51,12 @@ def f() -> None:
4951

5052
[out]
5153
def f():
52-
r0, d :: dict[exact]
54+
r0 :: dict[exact]
55+
r1, d :: dict
5356
L0:
5457
r0 = PyDict_New()
55-
d = r0
58+
r1 = cast(dict, r0)
59+
d = r1
5660
return 1
5761

5862
[case testNewDictWithValues]
@@ -63,13 +67,15 @@ def f(x):
6367
x :: object
6468
r0 :: str
6569
r1, r2 :: object
66-
r3, d :: dict[exact]
70+
r3 :: dict[exact]
71+
r4, d :: dict
6772
L0:
6873
r0 = ''
6974
r1 = object 1
7075
r2 = object 2
7176
r3 = CPyDict_Build(2, r1, r2, r0, x)
72-
d = r3
77+
r4 = cast(dict, r3)
78+
d = r4
7379
return 1
7480

7581
[case testInDict]
@@ -81,7 +87,7 @@ def f(d: Dict[int, int]) -> bool:
8187
return False
8288
[out]
8389
def f(d):
84-
d :: dict[exact]
90+
d :: dict
8591
r0 :: object
8692
r1 :: i32
8793
r2 :: bit
@@ -108,7 +114,7 @@ def f(d: Dict[int, int]) -> bool:
108114
return False
109115
[out]
110116
def f(d):
111-
d :: dict[exact]
117+
d :: dict
112118
r0 :: object
113119
r1 :: i32
114120
r2 :: bit
@@ -133,11 +139,11 @@ def f(a: Dict[int, int], b: Dict[int, int]) -> None:
133139
a.update(b)
134140
[out]
135141
def f(a, b):
136-
a, b :: dict[exact]
142+
a, b :: dict
137143
r0 :: i32
138144
r1 :: bit
139145
L0:
140-
r0 = PyDict_Update(a, b)
146+
r0 = CPyDict_Update(a, b)
141147
r1 = r0 >= 0 :: signed
142148
return 1
143149

@@ -149,10 +155,10 @@ def increment(d: Dict[str, int]) -> Dict[str, int]:
149155
return d
150156
[out]
151157
def increment(d):
152-
d :: dict[exact]
158+
d :: dict
153159
r0 :: short_int
154160
r1 :: native_int
155-
r2 :: dict[exact]
161+
r2 :: object
156162
r3 :: tuple[bool, short_int, object]
157163
r4 :: short_int
158164
r5 :: bool
@@ -164,9 +170,9 @@ def increment(d):
164170
L0:
165171
r0 = 0
166172
r1 = PyDict_Size(d)
167-
r2 = _CPyDict_GetIterUnsafe(d)
173+
r2 = CPyDict_GetKeysIter(d)
168174
L1:
169-
r3 = CPyDict_NextKeyUnsafe(r2, r0)
175+
r3 = CPyDict_NextKey(r2, r0)
170176
r4 = r3[1]
171177
r0 = r4
172178
r5 = r3[0]
@@ -175,13 +181,13 @@ L2:
175181
r6 = r3[2]
176182
r7 = cast(str, r6)
177183
k = r7
178-
r8 = CPyDict_GetItemUnsafe(d, k)
184+
r8 = CPyDict_GetItem(d, k)
179185
r9 = object 1
180186
r10 = PyNumber_InPlaceAdd(r8, r9)
181-
r11 = PyDict_SetItem(d, k, r10)
187+
r11 = CPyDict_SetItem(d, k, r10)
182188
r12 = r11 >= 0 :: signed
183189
L3:
184-
r13 = CPyDict_CheckSizeUnsafe(d, r1)
190+
r13 = CPyDict_CheckSize(d, r1)
185191
goto L1
186192
L4:
187193
r14 = CPy_NoErrOccurred()
@@ -195,25 +201,29 @@ def f(x: str, y: Dict[str, int]) -> Dict[str, int]:
195201
[out]
196202
def f(x, y):
197203
x :: str
198-
y :: dict[exact]
204+
y :: dict
199205
r0 :: str
200206
r1 :: object
201207
r2 :: dict[exact]
202-
r3 :: i32
203-
r4 :: bit
204-
r5 :: object
205-
r6 :: i32
206-
r7 :: bit
208+
r3 :: dict
209+
r4 :: i32
210+
r5 :: bit
211+
r6 :: object
212+
r7 :: i32
213+
r8 :: bit
214+
r9 :: dict
207215
L0:
208216
r0 = 'z'
209217
r1 = object 2
210218
r2 = CPyDict_Build(1, x, r1)
211-
r3 = PyDict_Update(r2, y)
212-
r4 = r3 >= 0 :: signed
213-
r5 = object 3
214-
r6 = PyDict_SetItem(r2, r0, r5)
215-
r7 = r6 >= 0 :: signed
216-
return r2
219+
r3 = cast(dict, r2)
220+
r4 = CPyDict_UpdateInDisplay(r3, y)
221+
r5 = r4 >= 0 :: signed
222+
r6 = object 3
223+
r7 = PyDict_SetItem(r2, r0, r6)
224+
r8 = r7 >= 0 :: signed
225+
r9 = cast(dict, r2)
226+
return r9
217227

218228
[case testDictIterationMethods]
219229
from typing import Dict, TypedDict, Union
@@ -239,10 +249,10 @@ def typeddict(d: Person) -> None:
239249
[typing fixtures/typing-full.pyi]
240250
[out]
241251
def print_dict_methods(d1, d2):
242-
d1, d2 :: dict[exact]
252+
d1, d2 :: dict
243253
r0 :: short_int
244254
r1 :: native_int
245-
r2 :: dict[exact]
255+
r2 :: object
246256
r3 :: tuple[bool, short_int, object]
247257
r4 :: short_int
248258
r5 :: bool
@@ -255,7 +265,7 @@ def print_dict_methods(d1, d2):
255265
r12, r13 :: bit
256266
r14 :: short_int
257267
r15 :: native_int
258-
r16 :: dict[exact]
268+
r16 :: object
259269
r17 :: tuple[bool, short_int, object, object]
260270
r18 :: short_int
261271
r19 :: bool
@@ -267,9 +277,9 @@ def print_dict_methods(d1, d2):
267277
L0:
268278
r0 = 0
269279
r1 = PyDict_Size(d1)
270-
r2 = _CPyDict_GetIterUnsafe(d1)
280+
r2 = CPyDict_GetValuesIter(d1)
271281
L1:
272-
r3 = CPyDict_NextValueUnsafe(r2, r0)
282+
r3 = CPyDict_NextValue(r2, r0)
273283
r4 = r3[1]
274284
r0 = r4
275285
r5 = r3[0]
@@ -287,16 +297,16 @@ L3:
287297
return 1
288298
L4:
289299
L5:
290-
r12 = CPyDict_CheckSizeUnsafe(d1, r1)
300+
r12 = CPyDict_CheckSize(d1, r1)
291301
goto L1
292302
L6:
293303
r13 = CPy_NoErrOccurred()
294304
L7:
295305
r14 = 0
296306
r15 = PyDict_Size(d2)
297-
r16 = _CPyDict_GetIterUnsafe(d2)
307+
r16 = CPyDict_GetItemsIter(d2)
298308
L8:
299-
r17 = CPyDict_NextItemUnsafe(r16, r14)
309+
r17 = CPyDict_NextItem(r16, r14)
300310
r18 = r17[1]
301311
r14 = r18
302312
r19 = r17[0]
@@ -309,73 +319,76 @@ L9:
309319
k = r22
310320
v = r23
311321
r24 = box(int, k)
312-
r25 = CPyDict_GetItemUnsafe(d2, r24)
322+
r25 = CPyDict_GetItem(d2, r24)
313323
r26 = box(int, v)
314324
r27 = PyNumber_InPlaceAdd(r25, r26)
315325
r28 = box(int, k)
316-
r29 = PyDict_SetItem(d2, r28, r27)
326+
r29 = CPyDict_SetItem(d2, r28, r27)
317327
r30 = r29 >= 0 :: signed
318328
L10:
319-
r31 = CPyDict_CheckSizeUnsafe(d2, r15)
329+
r31 = CPyDict_CheckSize(d2, r15)
320330
goto L8
321331
L11:
322332
r32 = CPy_NoErrOccurred()
323333
L12:
324334
return 1
325335
def union_of_dicts(d):
326-
d, r0, new :: dict[exact]
327-
r1 :: short_int
328-
r2 :: native_int
329-
r3 :: dict[exact]
330-
r4 :: tuple[bool, short_int, object, object]
331-
r5 :: short_int
332-
r6 :: bool
333-
r7, r8 :: object
334-
r9 :: str
335-
r10 :: union[int, str]
336+
d :: dict
337+
r0 :: dict[exact]
338+
r1, new :: dict
339+
r2 :: short_int
340+
r3 :: native_int
341+
r4 :: object
342+
r5 :: tuple[bool, short_int, object, object]
343+
r6 :: short_int
344+
r7 :: bool
345+
r8, r9 :: object
346+
r10 :: str
347+
r11 :: union[int, str]
336348
k :: str
337349
v :: union[int, str]
338-
r11 :: object
339-
r12 :: object[1]
340-
r13 :: object_ptr
341-
r14 :: object
342-
r15 :: int
343-
r16 :: object
344-
r17 :: i32
345-
r18, r19, r20 :: bit
350+
r12 :: object
351+
r13 :: object[1]
352+
r14 :: object_ptr
353+
r15 :: object
354+
r16 :: int
355+
r17 :: object
356+
r18 :: i32
357+
r19, r20, r21 :: bit
346358
L0:
347359
r0 = PyDict_New()
348-
new = r0
349-
r1 = 0
350-
r2 = PyDict_Size(d)
351-
r3 = _CPyDict_GetIterUnsafe(d)
360+
r1 = cast(dict, r0)
361+
new = r1
362+
r2 = 0
363+
r3 = PyDict_Size(d)
364+
r4 = CPyDict_GetItemsIter(d)
352365
L1:
353-
r4 = CPyDict_NextItemUnsafe(r3, r1)
354-
r5 = r4[1]
355-
r1 = r5
356-
r6 = r4[0]
357-
if r6 goto L2 else goto L4 :: bool
366+
r5 = CPyDict_NextItem(r4, r2)
367+
r6 = r5[1]
368+
r2 = r6
369+
r7 = r5[0]
370+
if r7 goto L2 else goto L4 :: bool
358371
L2:
359-
r7 = r4[2]
360-
r8 = r4[3]
361-
r9 = cast(str, r7)
362-
r10 = cast(union[int, str], r8)
363-
k = r9
364-
v = r10
365-
r11 = load_address PyLong_Type
366-
r12 = [v]
367-
r13 = load_address r12
368-
r14 = PyObject_Vectorcall(r11, r13, 1, 0)
372+
r8 = r5[2]
373+
r9 = r5[3]
374+
r10 = cast(str, r8)
375+
r11 = cast(union[int, str], r9)
376+
k = r10
377+
v = r11
378+
r12 = load_address PyLong_Type
379+
r13 = [v]
380+
r14 = load_address r13
381+
r15 = PyObject_Vectorcall(r12, r14, 1, 0)
369382
keep_alive v
370-
r15 = unbox(int, r14)
371-
r16 = box(int, r15)
372-
r17 = PyDict_SetItem(new, k, r16)
373-
r18 = r17 >= 0 :: signed
383+
r16 = unbox(int, r15)
384+
r17 = box(int, r16)
385+
r18 = CPyDict_SetItem(new, k, r17)
386+
r19 = r18 >= 0 :: signed
374387
L3:
375-
r19 = CPyDict_CheckSizeUnsafe(d, r2)
388+
r20 = CPyDict_CheckSize(d, r3)
376389
goto L1
377390
L4:
378-
r20 = CPy_NoErrOccurred()
391+
r21 = CPy_NoErrOccurred()
379392
L5:
380393
return 1
381394
def typeddict(d):
@@ -440,10 +453,10 @@ def f(d: Dict[int, int]) -> None:
440453
return d.clear()
441454
[out]
442455
def f(d):
443-
d :: dict[exact]
456+
d :: dict
444457
r0 :: bit
445458
L0:
446-
r0 = PyDict_Clear(d)
459+
r0 = CPyDict_Clear(d)
447460
return 1
448461

449462
[case testDictCopy]

0 commit comments

Comments
 (0)