419 lines
8.2 KiB
Plaintext
419 lines
8.2 KiB
Plaintext
|
[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
|
||
|
|