| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585 |
- [case testDictGet]
- from typing import Dict
- def f(d: Dict[int, bool]) -> bool:
- return d[0]
- [out]
- def f(d):
- d :: dict
- r0, r1 :: object
- r2 :: bool
- L0:
- r0 = object 0
- r1 = CPyDict_GetItem(d, r0)
- r2 = unbox(bool, r1)
- return r2
- [case testDictSet]
- from typing import Dict
- def f(d: Dict[int, bool]) -> None:
- d[0] = False
- [out]
- def f(d):
- d :: dict
- r0, r1 :: object
- r2 :: int32
- r3 :: bit
- L0:
- r0 = object 0
- r1 = box(bool, 0)
- r2 = CPyDict_SetItem(d, r0, r1)
- r3 = r2 >= 0 :: signed
- return 1
- [case testNewEmptyDict]
- from typing import Dict
- def f() -> None:
- d = {} # type: Dict[bool, int]
- [out]
- def f():
- r0, d :: dict
- L0:
- r0 = PyDict_New()
- d = r0
- return 1
- [case testNewEmptyDictViaFunc]
- from typing import Dict
- def f() -> None:
- d: Dict[bool, int] = dict()
- [out]
- def f():
- r0, d :: dict
- L0:
- r0 = PyDict_New()
- d = r0
- return 1
- [case testNewDictWithValues]
- def f(x: object) -> None:
- d = {1: 2, '': x}
- [out]
- def f(x):
- x :: object
- r0 :: str
- r1, r2 :: object
- r3, d :: dict
- L0:
- r0 = ''
- r1 = object 1
- r2 = object 2
- r3 = CPyDict_Build(2, r1, r2, r0, x)
- d = r3
- return 1
- [case testInDict]
- from typing import Dict
- def f(d: Dict[int, int]) -> bool:
- if 4 in d:
- return True
- else:
- return False
- [out]
- def f(d):
- d :: dict
- r0 :: object
- r1 :: int32
- r2 :: bit
- r3 :: bool
- L0:
- r0 = object 4
- r1 = PyDict_Contains(d, r0)
- r2 = r1 >= 0 :: signed
- r3 = truncate r1: int32 to builtins.bool
- if r3 goto L1 else goto L2 :: bool
- L1:
- return 1
- L2:
- return 0
- L3:
- unreachable
- [case testNotInDict]
- from typing import Dict
- def f(d: Dict[int, int]) -> bool:
- if 4 not in d:
- return True
- else:
- return False
- [out]
- def f(d):
- d :: dict
- r0 :: object
- r1 :: int32
- r2 :: bit
- r3, r4 :: bool
- L0:
- r0 = object 4
- r1 = PyDict_Contains(d, r0)
- r2 = r1 >= 0 :: signed
- r3 = truncate r1: int32 to builtins.bool
- r4 = r3 ^ 1
- if r4 goto L1 else goto L2 :: bool
- L1:
- return 1
- L2:
- return 0
- L3:
- unreachable
- [case testDictUpdate]
- from typing import Dict
- def f(a: Dict[int, int], b: Dict[int, int]) -> None:
- a.update(b)
- [out]
- def f(a, b):
- a, b :: dict
- r0 :: int32
- r1 :: bit
- L0:
- r0 = CPyDict_Update(a, b)
- r1 = r0 >= 0 :: signed
- return 1
- [case testDictKeyLvalue]
- from typing import Dict
- def increment(d: Dict[str, int]) -> Dict[str, int]:
- for k in d:
- d[k] += 1
- return d
- [out]
- def increment(d):
- d :: dict
- r0 :: short_int
- r1 :: native_int
- r2 :: short_int
- r3 :: object
- r4 :: tuple[bool, short_int, object]
- r5 :: short_int
- r6 :: bool
- r7 :: object
- r8, k :: str
- r9, r10, r11 :: object
- r12 :: int32
- r13, r14, r15 :: bit
- L0:
- r0 = 0
- r1 = PyDict_Size(d)
- r2 = r1 << 1
- r3 = CPyDict_GetKeysIter(d)
- L1:
- r4 = CPyDict_NextKey(r3, r0)
- r5 = r4[1]
- r0 = r5
- r6 = r4[0]
- if r6 goto L2 else goto L4 :: bool
- L2:
- r7 = r4[2]
- r8 = cast(str, r7)
- k = r8
- r9 = CPyDict_GetItem(d, k)
- r10 = object 1
- r11 = PyNumber_InPlaceAdd(r9, r10)
- r12 = CPyDict_SetItem(d, k, r11)
- r13 = r12 >= 0 :: signed
- L3:
- r14 = CPyDict_CheckSize(d, r2)
- goto L1
- L4:
- r15 = CPy_NoErrOccured()
- L5:
- return d
- [case testDictDisplay]
- from typing import Dict
- def f(x: str, y: Dict[str, int]) -> Dict[str, int]:
- return {x: 2, **y, 'z': 3}
- [out]
- def f(x, y):
- x :: str
- y :: dict
- r0 :: str
- r1 :: object
- r2 :: dict
- r3 :: int32
- r4 :: bit
- r5 :: object
- r6 :: int32
- r7 :: bit
- L0:
- r0 = 'z'
- r1 = object 2
- r2 = CPyDict_Build(1, x, r1)
- r3 = CPyDict_UpdateInDisplay(r2, y)
- r4 = r3 >= 0 :: signed
- r5 = object 3
- r6 = CPyDict_SetItem(r2, r0, r5)
- r7 = r6 >= 0 :: signed
- return r2
- [case testDictIterationMethods]
- from typing import Dict, Union
- from typing_extensions import TypedDict
- class Person(TypedDict):
- name: str
- age: int
- def print_dict_methods(d1: Dict[int, int], d2: Dict[int, int]) -> None:
- for v in d1.values():
- if v in d2:
- return
- for k, v in d2.items():
- d2[k] += v
- def union_of_dicts(d: Union[Dict[str, int], Dict[str, str]]) -> None:
- new = {}
- for k, v in d.items():
- new[k] = int(v)
- def typeddict(d: Person) -> None:
- for k, v in d.items():
- if k == "name":
- name = v
- [out]
- def print_dict_methods(d1, d2):
- d1, d2 :: dict
- r0 :: short_int
- r1 :: native_int
- r2 :: short_int
- r3 :: object
- r4 :: tuple[bool, short_int, object]
- r5 :: short_int
- r6 :: bool
- r7 :: object
- r8, v :: int
- r9 :: object
- r10 :: int32
- r11 :: bit
- r12 :: bool
- r13, r14 :: bit
- r15 :: short_int
- r16 :: native_int
- r17 :: short_int
- r18 :: object
- r19 :: tuple[bool, short_int, object, object]
- r20 :: short_int
- r21 :: bool
- r22, r23 :: object
- r24, r25, k :: int
- r26, r27, r28, r29, r30 :: object
- r31 :: int32
- r32, r33, r34 :: bit
- L0:
- r0 = 0
- r1 = PyDict_Size(d1)
- r2 = r1 << 1
- r3 = CPyDict_GetValuesIter(d1)
- L1:
- r4 = CPyDict_NextValue(r3, r0)
- r5 = r4[1]
- r0 = r5
- r6 = r4[0]
- if r6 goto L2 else goto L6 :: bool
- L2:
- r7 = r4[2]
- r8 = unbox(int, r7)
- v = r8
- r9 = box(int, v)
- r10 = PyDict_Contains(d2, r9)
- r11 = r10 >= 0 :: signed
- r12 = truncate r10: int32 to builtins.bool
- if r12 goto L3 else goto L4 :: bool
- L3:
- return 1
- L4:
- L5:
- r13 = CPyDict_CheckSize(d1, r2)
- goto L1
- L6:
- r14 = CPy_NoErrOccured()
- L7:
- r15 = 0
- r16 = PyDict_Size(d2)
- r17 = r16 << 1
- r18 = CPyDict_GetItemsIter(d2)
- L8:
- r19 = CPyDict_NextItem(r18, r15)
- r20 = r19[1]
- r15 = r20
- r21 = r19[0]
- if r21 goto L9 else goto L11 :: bool
- L9:
- r22 = r19[2]
- r23 = r19[3]
- r24 = unbox(int, r22)
- r25 = unbox(int, r23)
- k = r24
- v = r25
- r26 = box(int, k)
- r27 = CPyDict_GetItem(d2, r26)
- r28 = box(int, v)
- r29 = PyNumber_InPlaceAdd(r27, r28)
- r30 = box(int, k)
- r31 = CPyDict_SetItem(d2, r30, r29)
- r32 = r31 >= 0 :: signed
- L10:
- r33 = CPyDict_CheckSize(d2, r17)
- goto L8
- L11:
- r34 = CPy_NoErrOccured()
- L12:
- return 1
- def union_of_dicts(d):
- d, r0, new :: dict
- r1 :: short_int
- r2 :: native_int
- r3 :: short_int
- r4 :: object
- r5 :: tuple[bool, short_int, object, object]
- r6 :: short_int
- r7 :: bool
- r8, r9 :: object
- r10 :: str
- r11 :: union[int, str]
- k :: str
- v :: union[int, str]
- r12, r13 :: object
- r14 :: int
- r15 :: object
- r16 :: int32
- r17, r18, r19 :: bit
- L0:
- r0 = PyDict_New()
- new = r0
- r1 = 0
- r2 = PyDict_Size(d)
- r3 = r2 << 1
- r4 = CPyDict_GetItemsIter(d)
- L1:
- r5 = CPyDict_NextItem(r4, r1)
- r6 = r5[1]
- r1 = r6
- r7 = r5[0]
- if r7 goto L2 else goto L4 :: bool
- L2:
- r8 = r5[2]
- r9 = r5[3]
- r10 = cast(str, r8)
- r11 = cast(union[int, str], r9)
- k = r10
- v = r11
- r12 = load_address PyLong_Type
- r13 = PyObject_CallFunctionObjArgs(r12, v, 0)
- r14 = unbox(int, r13)
- r15 = box(int, r14)
- r16 = CPyDict_SetItem(new, k, r15)
- r17 = r16 >= 0 :: signed
- L3:
- r18 = CPyDict_CheckSize(d, r3)
- goto L1
- L4:
- r19 = CPy_NoErrOccured()
- L5:
- return 1
- def typeddict(d):
- d :: dict
- r0 :: short_int
- r1 :: native_int
- r2 :: short_int
- r3 :: object
- r4 :: tuple[bool, short_int, object, object]
- r5 :: short_int
- r6 :: bool
- r7, r8 :: object
- r9, k :: str
- v :: object
- r10 :: str
- r11 :: int32
- r12 :: bit
- r13 :: object
- r14, r15, r16 :: bit
- name :: object
- r17, r18 :: bit
- L0:
- r0 = 0
- r1 = PyDict_Size(d)
- r2 = r1 << 1
- r3 = CPyDict_GetItemsIter(d)
- L1:
- r4 = CPyDict_NextItem(r3, r0)
- r5 = r4[1]
- r0 = r5
- r6 = r4[0]
- if r6 goto L2 else goto L9 :: bool
- L2:
- r7 = r4[2]
- r8 = r4[3]
- r9 = cast(str, r7)
- k = r9
- v = r8
- r10 = 'name'
- r11 = PyUnicode_Compare(k, r10)
- r12 = r11 == -1
- if r12 goto L3 else goto L5 :: bool
- L3:
- r13 = PyErr_Occurred()
- r14 = r13 != 0
- if r14 goto L4 else goto L5 :: bool
- L4:
- r15 = CPy_KeepPropagating()
- L5:
- r16 = r11 == 0
- if r16 goto L6 else goto L7 :: bool
- L6:
- name = v
- L7:
- L8:
- r17 = CPyDict_CheckSize(d, r2)
- goto L1
- L9:
- r18 = CPy_NoErrOccured()
- L10:
- return 1
- [case testDictLoadAddress]
- def f() -> None:
- x = dict
- [out]
- def f():
- r0, x :: object
- L0:
- r0 = load_address PyDict_Type
- x = r0
- return 1
- [case testDictClear]
- from typing import Dict
- def f(d: Dict[int, int]) -> None:
- return d.clear()
- [out]
- def f(d):
- d :: dict
- r0 :: bit
- L0:
- r0 = CPyDict_Clear(d)
- return 1
- [case testDictCopy]
- from typing import Dict
- def f(d: Dict[int, int]) -> Dict[int, int]:
- return d.copy()
- [out]
- def f(d):
- d, r0 :: dict
- L0:
- r0 = CPyDict_Copy(d)
- return r0
- [case testDictSetdefault]
- from typing import Dict
- def f(d: Dict[object, object]) -> object:
- return d.setdefault('a', 'b')
- def f2(d: Dict[object, object], flag: bool) -> object:
- if flag:
- return d.setdefault('a', set())
- else:
- return d.setdefault('a', set('b'))
- def f3(d: Dict[object, object], flag: bool) -> object:
- if flag:
- return d.setdefault('a', [])
- else:
- return d.setdefault('a', [1])
- def f4(d: Dict[object, object], flag: bool) -> object:
- if flag:
- return d.setdefault('a', {})
- else:
- return d.setdefault('a', {'c': 1})
- [out]
- def f(d):
- d :: dict
- r0, r1 :: str
- r2 :: object
- L0:
- r0 = 'a'
- r1 = 'b'
- r2 = CPyDict_SetDefault(d, r0, r1)
- return r2
- def f2(d, flag):
- d :: dict
- flag :: bool
- r0 :: str
- r1 :: object
- r2, r3 :: str
- r4 :: set
- r5, r6 :: object
- L0:
- if flag goto L1 else goto L2 :: bool
- L1:
- r0 = 'a'
- r1 = CPyDict_SetDefaultWithEmptyDatatype(d, r0, 3)
- return r1
- L2:
- r2 = 'a'
- r3 = 'b'
- r4 = PySet_New(r3)
- r5 = CPyDict_SetDefault(d, r2, r4)
- return r5
- L3:
- r6 = box(None, 1)
- return r6
- def f3(d, flag):
- d :: dict
- flag :: bool
- r0 :: str
- r1 :: object
- r2 :: str
- r3 :: list
- r4 :: object
- r5, r6 :: ptr
- r7, r8 :: object
- L0:
- if flag goto L1 else goto L2 :: bool
- L1:
- r0 = 'a'
- r1 = CPyDict_SetDefaultWithEmptyDatatype(d, r0, 1)
- return r1
- L2:
- r2 = 'a'
- r3 = PyList_New(1)
- r4 = object 1
- r5 = get_element_ptr r3 ob_item :: PyListObject
- r6 = load_mem r5 :: ptr*
- set_mem r6, r4 :: builtins.object*
- keep_alive r3
- r7 = CPyDict_SetDefault(d, r2, r3)
- return r7
- L3:
- r8 = box(None, 1)
- return r8
- def f4(d, flag):
- d :: dict
- flag :: bool
- r0 :: str
- r1 :: object
- r2, r3 :: str
- r4 :: object
- r5 :: dict
- r6, r7 :: object
- L0:
- if flag goto L1 else goto L2 :: bool
- L1:
- r0 = 'a'
- r1 = CPyDict_SetDefaultWithEmptyDatatype(d, r0, 2)
- return r1
- L2:
- r2 = 'a'
- r3 = 'c'
- r4 = object 1
- r5 = CPyDict_Build(1, r3, r4)
- r6 = CPyDict_SetDefault(d, r2, r5)
- return r6
- L3:
- r7 = box(None, 1)
- return r7
|