| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523 |
- [case testTryExcept1]
- def g() -> None:
- try:
- object()
- except:
- print("weeee")
- [out]
- def g():
- r0 :: object
- r1 :: str
- r2, r3 :: object
- r4 :: tuple[object, object, object]
- r5 :: str
- r6 :: object
- r7 :: str
- r8, r9 :: object
- r10 :: bit
- L0:
- L1:
- r0 = builtins :: module
- r1 = 'object'
- r2 = CPyObject_GetAttr(r0, r1)
- r3 = PyObject_CallFunctionObjArgs(r2, 0)
- goto L5
- L2: (handler for L1)
- r4 = CPy_CatchError()
- r5 = 'weeee'
- r6 = builtins :: module
- r7 = 'print'
- r8 = CPyObject_GetAttr(r6, r7)
- r9 = PyObject_CallFunctionObjArgs(r8, r5, 0)
- L3:
- CPy_RestoreExcInfo(r4)
- goto L5
- L4: (handler for L2)
- CPy_RestoreExcInfo(r4)
- r10 = CPy_KeepPropagating()
- unreachable
- L5:
- return 1
- [case testTryExcept2]
- def g(b: bool) -> None:
- try:
- if b:
- object()
- else:
- str('hi')
- except:
- print("weeee")
- [out]
- def g(b):
- b :: bool
- r0 :: object
- r1 :: str
- r2, r3 :: object
- r4, r5 :: str
- r6 :: tuple[object, object, object]
- r7 :: str
- r8 :: object
- r9 :: str
- r10, r11 :: object
- r12 :: bit
- L0:
- L1:
- if b goto L2 else goto L3 :: bool
- L2:
- r0 = builtins :: module
- r1 = 'object'
- r2 = CPyObject_GetAttr(r0, r1)
- r3 = PyObject_CallFunctionObjArgs(r2, 0)
- goto L4
- L3:
- r4 = 'hi'
- r5 = PyObject_Str(r4)
- L4:
- goto L8
- L5: (handler for L1, L2, L3, L4)
- r6 = CPy_CatchError()
- r7 = 'weeee'
- r8 = builtins :: module
- r9 = 'print'
- r10 = CPyObject_GetAttr(r8, r9)
- r11 = PyObject_CallFunctionObjArgs(r10, r7, 0)
- L6:
- CPy_RestoreExcInfo(r6)
- goto L8
- L7: (handler for L5)
- CPy_RestoreExcInfo(r6)
- r12 = CPy_KeepPropagating()
- unreachable
- L8:
- return 1
- [case testTryExcept3]
- def g() -> None:
- try:
- print('a')
- try:
- object()
- except AttributeError as e:
- print('b', e)
- except:
- print("weeee")
- [out]
- def g():
- r0 :: str
- r1 :: object
- r2 :: str
- r3, r4, r5 :: object
- r6 :: str
- r7, r8 :: object
- r9 :: tuple[object, object, object]
- r10 :: object
- r11 :: str
- r12 :: object
- r13 :: bit
- r14, e :: object
- r15 :: str
- r16 :: object
- r17 :: str
- r18, r19 :: object
- r20 :: bit
- r21 :: tuple[object, object, object]
- r22 :: str
- r23 :: object
- r24 :: str
- r25, r26 :: object
- r27 :: bit
- L0:
- L1:
- r0 = 'a'
- r1 = builtins :: module
- r2 = 'print'
- r3 = CPyObject_GetAttr(r1, r2)
- r4 = PyObject_CallFunctionObjArgs(r3, r0, 0)
- L2:
- r5 = builtins :: module
- r6 = 'object'
- r7 = CPyObject_GetAttr(r5, r6)
- r8 = PyObject_CallFunctionObjArgs(r7, 0)
- goto L8
- L3: (handler for L2)
- r9 = CPy_CatchError()
- r10 = builtins :: module
- r11 = 'AttributeError'
- r12 = CPyObject_GetAttr(r10, r11)
- r13 = CPy_ExceptionMatches(r12)
- if r13 goto L4 else goto L5 :: bool
- L4:
- r14 = CPy_GetExcValue()
- e = r14
- r15 = 'b'
- r16 = builtins :: module
- r17 = 'print'
- r18 = CPyObject_GetAttr(r16, r17)
- r19 = PyObject_CallFunctionObjArgs(r18, r15, e, 0)
- goto L6
- L5:
- CPy_Reraise()
- unreachable
- L6:
- CPy_RestoreExcInfo(r9)
- goto L8
- L7: (handler for L3, L4, L5)
- CPy_RestoreExcInfo(r9)
- r20 = CPy_KeepPropagating()
- unreachable
- L8:
- goto L12
- L9: (handler for L1, L6, L7, L8)
- r21 = CPy_CatchError()
- r22 = 'weeee'
- r23 = builtins :: module
- r24 = 'print'
- r25 = CPyObject_GetAttr(r23, r24)
- r26 = PyObject_CallFunctionObjArgs(r25, r22, 0)
- L10:
- CPy_RestoreExcInfo(r21)
- goto L12
- L11: (handler for L9)
- CPy_RestoreExcInfo(r21)
- r27 = CPy_KeepPropagating()
- unreachable
- L12:
- return 1
- [case testTryExcept4]
- def g() -> None:
- try:
- pass
- except KeyError:
- print("weeee")
- except IndexError:
- print("yo")
- [out]
- def g():
- r0 :: tuple[object, object, object]
- r1 :: object
- r2 :: str
- r3 :: object
- r4 :: bit
- r5 :: str
- r6 :: object
- r7 :: str
- r8, r9, r10 :: object
- r11 :: str
- r12 :: object
- r13 :: bit
- r14 :: str
- r15 :: object
- r16 :: str
- r17, r18 :: object
- r19 :: bit
- L0:
- L1:
- goto L9
- L2: (handler for L1)
- r0 = CPy_CatchError()
- r1 = builtins :: module
- r2 = 'KeyError'
- r3 = CPyObject_GetAttr(r1, r2)
- r4 = CPy_ExceptionMatches(r3)
- if r4 goto L3 else goto L4 :: bool
- L3:
- r5 = 'weeee'
- r6 = builtins :: module
- r7 = 'print'
- r8 = CPyObject_GetAttr(r6, r7)
- r9 = PyObject_CallFunctionObjArgs(r8, r5, 0)
- goto L7
- L4:
- r10 = builtins :: module
- r11 = 'IndexError'
- r12 = CPyObject_GetAttr(r10, r11)
- r13 = CPy_ExceptionMatches(r12)
- if r13 goto L5 else goto L6 :: bool
- L5:
- r14 = 'yo'
- r15 = builtins :: module
- r16 = 'print'
- r17 = CPyObject_GetAttr(r15, r16)
- r18 = PyObject_CallFunctionObjArgs(r17, r14, 0)
- goto L7
- L6:
- CPy_Reraise()
- unreachable
- L7:
- CPy_RestoreExcInfo(r0)
- goto L9
- L8: (handler for L2, L3, L4, L5, L6)
- CPy_RestoreExcInfo(r0)
- r19 = CPy_KeepPropagating()
- unreachable
- L9:
- return 1
- [case testTryFinally]
- def a(b: bool) -> None:
- try:
- if b:
- raise Exception('hi')
- finally:
- print('finally')
- [out]
- def a(b):
- b :: bool
- r0 :: str
- r1 :: object
- r2 :: str
- r3, r4 :: object
- r5, r6, r7 :: tuple[object, object, object]
- r8 :: str
- r9 :: object
- r10 :: str
- r11, r12 :: object
- r13 :: bit
- L0:
- L1:
- if b goto L2 else goto L3 :: bool
- L2:
- r0 = 'hi'
- r1 = builtins :: module
- r2 = 'Exception'
- r3 = CPyObject_GetAttr(r1, r2)
- r4 = PyObject_CallFunctionObjArgs(r3, r0, 0)
- CPy_Raise(r4)
- unreachable
- L3:
- L4:
- L5:
- r5 = <error> :: tuple[object, object, object]
- r6 = r5
- goto L7
- L6: (handler for L1, L2, L3)
- r7 = CPy_CatchError()
- r6 = r7
- L7:
- r8 = 'finally'
- r9 = builtins :: module
- r10 = 'print'
- r11 = CPyObject_GetAttr(r9, r10)
- r12 = PyObject_CallFunctionObjArgs(r11, r8, 0)
- if is_error(r6) goto L9 else goto L8
- L8:
- CPy_Reraise()
- unreachable
- L9:
- goto L13
- L10: (handler for L7, L8)
- if is_error(r6) goto L12 else goto L11
- L11:
- CPy_RestoreExcInfo(r6)
- L12:
- r13 = CPy_KeepPropagating()
- unreachable
- L13:
- return 1
- [case testWith]
- from typing import Any
- def foo(x: Any) -> None:
- with x() as y:
- print('hello')
- [out]
- def foo(x):
- x, r0, r1 :: object
- r2 :: str
- r3 :: object
- r4 :: str
- r5, r6 :: object
- r7 :: bool
- y :: object
- r8 :: str
- r9 :: object
- r10 :: str
- r11, r12 :: object
- r13, r14 :: tuple[object, object, object]
- r15, r16, r17, r18 :: object
- r19 :: int32
- r20 :: bit
- r21 :: bool
- r22 :: bit
- r23, r24, r25 :: tuple[object, object, object]
- r26, r27 :: object
- r28 :: bit
- L0:
- r0 = PyObject_CallFunctionObjArgs(x, 0)
- r1 = PyObject_Type(r0)
- r2 = '__exit__'
- r3 = CPyObject_GetAttr(r1, r2)
- r4 = '__enter__'
- r5 = CPyObject_GetAttr(r1, r4)
- r6 = PyObject_CallFunctionObjArgs(r5, r0, 0)
- r7 = 1
- L1:
- L2:
- y = r6
- r8 = 'hello'
- r9 = builtins :: module
- r10 = 'print'
- r11 = CPyObject_GetAttr(r9, r10)
- r12 = PyObject_CallFunctionObjArgs(r11, r8, 0)
- goto L8
- L3: (handler for L2)
- r13 = CPy_CatchError()
- r7 = 0
- r14 = CPy_GetExcInfo()
- r15 = r14[0]
- r16 = r14[1]
- r17 = r14[2]
- r18 = PyObject_CallFunctionObjArgs(r3, r0, r15, r16, r17, 0)
- r19 = PyObject_IsTrue(r18)
- r20 = r19 >= 0 :: signed
- r21 = truncate r19: int32 to builtins.bool
- if r21 goto L5 else goto L4 :: bool
- L4:
- CPy_Reraise()
- unreachable
- L5:
- L6:
- CPy_RestoreExcInfo(r13)
- goto L8
- L7: (handler for L3, L4, L5)
- CPy_RestoreExcInfo(r13)
- r22 = CPy_KeepPropagating()
- unreachable
- L8:
- L9:
- L10:
- r23 = <error> :: tuple[object, object, object]
- r24 = r23
- goto L12
- L11: (handler for L1, L6, L7, L8)
- r25 = CPy_CatchError()
- r24 = r25
- L12:
- if r7 goto L13 else goto L14 :: bool
- L13:
- r26 = load_address _Py_NoneStruct
- r27 = PyObject_CallFunctionObjArgs(r3, r0, r26, r26, r26, 0)
- L14:
- if is_error(r24) goto L16 else goto L15
- L15:
- CPy_Reraise()
- unreachable
- L16:
- goto L20
- L17: (handler for L12, L13, L14, L15)
- if is_error(r24) goto L19 else goto L18
- L18:
- CPy_RestoreExcInfo(r24)
- L19:
- r28 = CPy_KeepPropagating()
- unreachable
- L20:
- return 1
- [case testWithNativeSimple]
- class DummyContext:
- def __enter__(self) -> None:
- pass
- def __exit__(self, exc_type, exc_val, exc_tb) -> None:
- pass
- def foo(x: DummyContext) -> None:
- with x:
- print('hello')
- [out]
- def DummyContext.__enter__(self):
- self :: __main__.DummyContext
- L0:
- return 1
- def DummyContext.__exit__(self, exc_type, exc_val, exc_tb):
- self :: __main__.DummyContext
- exc_type, exc_val, exc_tb :: object
- L0:
- return 1
- def foo(x):
- x :: __main__.DummyContext
- r0 :: None
- r1 :: bool
- r2 :: str
- r3 :: object
- r4 :: str
- r5, r6 :: object
- r7, r8 :: tuple[object, object, object]
- r9, r10, r11 :: object
- r12 :: None
- r13 :: object
- r14 :: int32
- r15 :: bit
- r16 :: bool
- r17 :: bit
- r18, r19, r20 :: tuple[object, object, object]
- r21 :: object
- r22 :: None
- r23 :: bit
- L0:
- r0 = x.__enter__()
- r1 = 1
- L1:
- L2:
- r2 = 'hello'
- r3 = builtins :: module
- r4 = 'print'
- r5 = CPyObject_GetAttr(r3, r4)
- r6 = PyObject_CallFunctionObjArgs(r5, r2, 0)
- goto L8
- L3: (handler for L2)
- r7 = CPy_CatchError()
- r1 = 0
- r8 = CPy_GetExcInfo()
- r9 = r8[0]
- r10 = r8[1]
- r11 = r8[2]
- r12 = x.__exit__(r9, r10, r11)
- r13 = box(None, r12)
- r14 = PyObject_IsTrue(r13)
- r15 = r14 >= 0 :: signed
- r16 = truncate r14: int32 to builtins.bool
- if r16 goto L5 else goto L4 :: bool
- L4:
- CPy_Reraise()
- unreachable
- L5:
- L6:
- CPy_RestoreExcInfo(r7)
- goto L8
- L7: (handler for L3, L4, L5)
- CPy_RestoreExcInfo(r7)
- r17 = CPy_KeepPropagating()
- unreachable
- L8:
- L9:
- L10:
- r18 = <error> :: tuple[object, object, object]
- r19 = r18
- goto L12
- L11: (handler for L1, L6, L7, L8)
- r20 = CPy_CatchError()
- r19 = r20
- L12:
- if r1 goto L13 else goto L14 :: bool
- L13:
- r21 = load_address _Py_NoneStruct
- r22 = x.__exit__(r21, r21, r21)
- L14:
- if is_error(r19) goto L16 else goto L15
- L15:
- CPy_Reraise()
- unreachable
- L16:
- goto L20
- L17: (handler for L12, L13, L14, L15)
- if is_error(r19) goto L19 else goto L18
- L18:
- CPy_RestoreExcInfo(r19)
- L19:
- r23 = CPy_KeepPropagating()
- unreachable
- L20:
- return 1
|