irbuild-try.test 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523
  1. [case testTryExcept1]
  2. def g() -> None:
  3. try:
  4. object()
  5. except:
  6. print("weeee")
  7. [out]
  8. def g():
  9. r0 :: object
  10. r1 :: str
  11. r2, r3 :: object
  12. r4 :: tuple[object, object, object]
  13. r5 :: str
  14. r6 :: object
  15. r7 :: str
  16. r8, r9 :: object
  17. r10 :: bit
  18. L0:
  19. L1:
  20. r0 = builtins :: module
  21. r1 = 'object'
  22. r2 = CPyObject_GetAttr(r0, r1)
  23. r3 = PyObject_CallFunctionObjArgs(r2, 0)
  24. goto L5
  25. L2: (handler for L1)
  26. r4 = CPy_CatchError()
  27. r5 = 'weeee'
  28. r6 = builtins :: module
  29. r7 = 'print'
  30. r8 = CPyObject_GetAttr(r6, r7)
  31. r9 = PyObject_CallFunctionObjArgs(r8, r5, 0)
  32. L3:
  33. CPy_RestoreExcInfo(r4)
  34. goto L5
  35. L4: (handler for L2)
  36. CPy_RestoreExcInfo(r4)
  37. r10 = CPy_KeepPropagating()
  38. unreachable
  39. L5:
  40. return 1
  41. [case testTryExcept2]
  42. def g(b: bool) -> None:
  43. try:
  44. if b:
  45. object()
  46. else:
  47. str('hi')
  48. except:
  49. print("weeee")
  50. [out]
  51. def g(b):
  52. b :: bool
  53. r0 :: object
  54. r1 :: str
  55. r2, r3 :: object
  56. r4, r5 :: str
  57. r6 :: tuple[object, object, object]
  58. r7 :: str
  59. r8 :: object
  60. r9 :: str
  61. r10, r11 :: object
  62. r12 :: bit
  63. L0:
  64. L1:
  65. if b goto L2 else goto L3 :: bool
  66. L2:
  67. r0 = builtins :: module
  68. r1 = 'object'
  69. r2 = CPyObject_GetAttr(r0, r1)
  70. r3 = PyObject_CallFunctionObjArgs(r2, 0)
  71. goto L4
  72. L3:
  73. r4 = 'hi'
  74. r5 = PyObject_Str(r4)
  75. L4:
  76. goto L8
  77. L5: (handler for L1, L2, L3, L4)
  78. r6 = CPy_CatchError()
  79. r7 = 'weeee'
  80. r8 = builtins :: module
  81. r9 = 'print'
  82. r10 = CPyObject_GetAttr(r8, r9)
  83. r11 = PyObject_CallFunctionObjArgs(r10, r7, 0)
  84. L6:
  85. CPy_RestoreExcInfo(r6)
  86. goto L8
  87. L7: (handler for L5)
  88. CPy_RestoreExcInfo(r6)
  89. r12 = CPy_KeepPropagating()
  90. unreachable
  91. L8:
  92. return 1
  93. [case testTryExcept3]
  94. def g() -> None:
  95. try:
  96. print('a')
  97. try:
  98. object()
  99. except AttributeError as e:
  100. print('b', e)
  101. except:
  102. print("weeee")
  103. [out]
  104. def g():
  105. r0 :: str
  106. r1 :: object
  107. r2 :: str
  108. r3, r4, r5 :: object
  109. r6 :: str
  110. r7, r8 :: object
  111. r9 :: tuple[object, object, object]
  112. r10 :: object
  113. r11 :: str
  114. r12 :: object
  115. r13 :: bit
  116. r14, e :: object
  117. r15 :: str
  118. r16 :: object
  119. r17 :: str
  120. r18, r19 :: object
  121. r20 :: bit
  122. r21 :: tuple[object, object, object]
  123. r22 :: str
  124. r23 :: object
  125. r24 :: str
  126. r25, r26 :: object
  127. r27 :: bit
  128. L0:
  129. L1:
  130. r0 = 'a'
  131. r1 = builtins :: module
  132. r2 = 'print'
  133. r3 = CPyObject_GetAttr(r1, r2)
  134. r4 = PyObject_CallFunctionObjArgs(r3, r0, 0)
  135. L2:
  136. r5 = builtins :: module
  137. r6 = 'object'
  138. r7 = CPyObject_GetAttr(r5, r6)
  139. r8 = PyObject_CallFunctionObjArgs(r7, 0)
  140. goto L8
  141. L3: (handler for L2)
  142. r9 = CPy_CatchError()
  143. r10 = builtins :: module
  144. r11 = 'AttributeError'
  145. r12 = CPyObject_GetAttr(r10, r11)
  146. r13 = CPy_ExceptionMatches(r12)
  147. if r13 goto L4 else goto L5 :: bool
  148. L4:
  149. r14 = CPy_GetExcValue()
  150. e = r14
  151. r15 = 'b'
  152. r16 = builtins :: module
  153. r17 = 'print'
  154. r18 = CPyObject_GetAttr(r16, r17)
  155. r19 = PyObject_CallFunctionObjArgs(r18, r15, e, 0)
  156. goto L6
  157. L5:
  158. CPy_Reraise()
  159. unreachable
  160. L6:
  161. CPy_RestoreExcInfo(r9)
  162. goto L8
  163. L7: (handler for L3, L4, L5)
  164. CPy_RestoreExcInfo(r9)
  165. r20 = CPy_KeepPropagating()
  166. unreachable
  167. L8:
  168. goto L12
  169. L9: (handler for L1, L6, L7, L8)
  170. r21 = CPy_CatchError()
  171. r22 = 'weeee'
  172. r23 = builtins :: module
  173. r24 = 'print'
  174. r25 = CPyObject_GetAttr(r23, r24)
  175. r26 = PyObject_CallFunctionObjArgs(r25, r22, 0)
  176. L10:
  177. CPy_RestoreExcInfo(r21)
  178. goto L12
  179. L11: (handler for L9)
  180. CPy_RestoreExcInfo(r21)
  181. r27 = CPy_KeepPropagating()
  182. unreachable
  183. L12:
  184. return 1
  185. [case testTryExcept4]
  186. def g() -> None:
  187. try:
  188. pass
  189. except KeyError:
  190. print("weeee")
  191. except IndexError:
  192. print("yo")
  193. [out]
  194. def g():
  195. r0 :: tuple[object, object, object]
  196. r1 :: object
  197. r2 :: str
  198. r3 :: object
  199. r4 :: bit
  200. r5 :: str
  201. r6 :: object
  202. r7 :: str
  203. r8, r9, r10 :: object
  204. r11 :: str
  205. r12 :: object
  206. r13 :: bit
  207. r14 :: str
  208. r15 :: object
  209. r16 :: str
  210. r17, r18 :: object
  211. r19 :: bit
  212. L0:
  213. L1:
  214. goto L9
  215. L2: (handler for L1)
  216. r0 = CPy_CatchError()
  217. r1 = builtins :: module
  218. r2 = 'KeyError'
  219. r3 = CPyObject_GetAttr(r1, r2)
  220. r4 = CPy_ExceptionMatches(r3)
  221. if r4 goto L3 else goto L4 :: bool
  222. L3:
  223. r5 = 'weeee'
  224. r6 = builtins :: module
  225. r7 = 'print'
  226. r8 = CPyObject_GetAttr(r6, r7)
  227. r9 = PyObject_CallFunctionObjArgs(r8, r5, 0)
  228. goto L7
  229. L4:
  230. r10 = builtins :: module
  231. r11 = 'IndexError'
  232. r12 = CPyObject_GetAttr(r10, r11)
  233. r13 = CPy_ExceptionMatches(r12)
  234. if r13 goto L5 else goto L6 :: bool
  235. L5:
  236. r14 = 'yo'
  237. r15 = builtins :: module
  238. r16 = 'print'
  239. r17 = CPyObject_GetAttr(r15, r16)
  240. r18 = PyObject_CallFunctionObjArgs(r17, r14, 0)
  241. goto L7
  242. L6:
  243. CPy_Reraise()
  244. unreachable
  245. L7:
  246. CPy_RestoreExcInfo(r0)
  247. goto L9
  248. L8: (handler for L2, L3, L4, L5, L6)
  249. CPy_RestoreExcInfo(r0)
  250. r19 = CPy_KeepPropagating()
  251. unreachable
  252. L9:
  253. return 1
  254. [case testTryFinally]
  255. def a(b: bool) -> None:
  256. try:
  257. if b:
  258. raise Exception('hi')
  259. finally:
  260. print('finally')
  261. [out]
  262. def a(b):
  263. b :: bool
  264. r0 :: str
  265. r1 :: object
  266. r2 :: str
  267. r3, r4 :: object
  268. r5, r6, r7 :: tuple[object, object, object]
  269. r8 :: str
  270. r9 :: object
  271. r10 :: str
  272. r11, r12 :: object
  273. r13 :: bit
  274. L0:
  275. L1:
  276. if b goto L2 else goto L3 :: bool
  277. L2:
  278. r0 = 'hi'
  279. r1 = builtins :: module
  280. r2 = 'Exception'
  281. r3 = CPyObject_GetAttr(r1, r2)
  282. r4 = PyObject_CallFunctionObjArgs(r3, r0, 0)
  283. CPy_Raise(r4)
  284. unreachable
  285. L3:
  286. L4:
  287. L5:
  288. r5 = <error> :: tuple[object, object, object]
  289. r6 = r5
  290. goto L7
  291. L6: (handler for L1, L2, L3)
  292. r7 = CPy_CatchError()
  293. r6 = r7
  294. L7:
  295. r8 = 'finally'
  296. r9 = builtins :: module
  297. r10 = 'print'
  298. r11 = CPyObject_GetAttr(r9, r10)
  299. r12 = PyObject_CallFunctionObjArgs(r11, r8, 0)
  300. if is_error(r6) goto L9 else goto L8
  301. L8:
  302. CPy_Reraise()
  303. unreachable
  304. L9:
  305. goto L13
  306. L10: (handler for L7, L8)
  307. if is_error(r6) goto L12 else goto L11
  308. L11:
  309. CPy_RestoreExcInfo(r6)
  310. L12:
  311. r13 = CPy_KeepPropagating()
  312. unreachable
  313. L13:
  314. return 1
  315. [case testWith]
  316. from typing import Any
  317. def foo(x: Any) -> None:
  318. with x() as y:
  319. print('hello')
  320. [out]
  321. def foo(x):
  322. x, r0, r1 :: object
  323. r2 :: str
  324. r3 :: object
  325. r4 :: str
  326. r5, r6 :: object
  327. r7 :: bool
  328. y :: object
  329. r8 :: str
  330. r9 :: object
  331. r10 :: str
  332. r11, r12 :: object
  333. r13, r14 :: tuple[object, object, object]
  334. r15, r16, r17, r18 :: object
  335. r19 :: int32
  336. r20 :: bit
  337. r21 :: bool
  338. r22 :: bit
  339. r23, r24, r25 :: tuple[object, object, object]
  340. r26, r27 :: object
  341. r28 :: bit
  342. L0:
  343. r0 = PyObject_CallFunctionObjArgs(x, 0)
  344. r1 = PyObject_Type(r0)
  345. r2 = '__exit__'
  346. r3 = CPyObject_GetAttr(r1, r2)
  347. r4 = '__enter__'
  348. r5 = CPyObject_GetAttr(r1, r4)
  349. r6 = PyObject_CallFunctionObjArgs(r5, r0, 0)
  350. r7 = 1
  351. L1:
  352. L2:
  353. y = r6
  354. r8 = 'hello'
  355. r9 = builtins :: module
  356. r10 = 'print'
  357. r11 = CPyObject_GetAttr(r9, r10)
  358. r12 = PyObject_CallFunctionObjArgs(r11, r8, 0)
  359. goto L8
  360. L3: (handler for L2)
  361. r13 = CPy_CatchError()
  362. r7 = 0
  363. r14 = CPy_GetExcInfo()
  364. r15 = r14[0]
  365. r16 = r14[1]
  366. r17 = r14[2]
  367. r18 = PyObject_CallFunctionObjArgs(r3, r0, r15, r16, r17, 0)
  368. r19 = PyObject_IsTrue(r18)
  369. r20 = r19 >= 0 :: signed
  370. r21 = truncate r19: int32 to builtins.bool
  371. if r21 goto L5 else goto L4 :: bool
  372. L4:
  373. CPy_Reraise()
  374. unreachable
  375. L5:
  376. L6:
  377. CPy_RestoreExcInfo(r13)
  378. goto L8
  379. L7: (handler for L3, L4, L5)
  380. CPy_RestoreExcInfo(r13)
  381. r22 = CPy_KeepPropagating()
  382. unreachable
  383. L8:
  384. L9:
  385. L10:
  386. r23 = <error> :: tuple[object, object, object]
  387. r24 = r23
  388. goto L12
  389. L11: (handler for L1, L6, L7, L8)
  390. r25 = CPy_CatchError()
  391. r24 = r25
  392. L12:
  393. if r7 goto L13 else goto L14 :: bool
  394. L13:
  395. r26 = load_address _Py_NoneStruct
  396. r27 = PyObject_CallFunctionObjArgs(r3, r0, r26, r26, r26, 0)
  397. L14:
  398. if is_error(r24) goto L16 else goto L15
  399. L15:
  400. CPy_Reraise()
  401. unreachable
  402. L16:
  403. goto L20
  404. L17: (handler for L12, L13, L14, L15)
  405. if is_error(r24) goto L19 else goto L18
  406. L18:
  407. CPy_RestoreExcInfo(r24)
  408. L19:
  409. r28 = CPy_KeepPropagating()
  410. unreachable
  411. L20:
  412. return 1
  413. [case testWithNativeSimple]
  414. class DummyContext:
  415. def __enter__(self) -> None:
  416. pass
  417. def __exit__(self, exc_type, exc_val, exc_tb) -> None:
  418. pass
  419. def foo(x: DummyContext) -> None:
  420. with x:
  421. print('hello')
  422. [out]
  423. def DummyContext.__enter__(self):
  424. self :: __main__.DummyContext
  425. L0:
  426. return 1
  427. def DummyContext.__exit__(self, exc_type, exc_val, exc_tb):
  428. self :: __main__.DummyContext
  429. exc_type, exc_val, exc_tb :: object
  430. L0:
  431. return 1
  432. def foo(x):
  433. x :: __main__.DummyContext
  434. r0 :: None
  435. r1 :: bool
  436. r2 :: str
  437. r3 :: object
  438. r4 :: str
  439. r5, r6 :: object
  440. r7, r8 :: tuple[object, object, object]
  441. r9, r10, r11 :: object
  442. r12 :: None
  443. r13 :: object
  444. r14 :: int32
  445. r15 :: bit
  446. r16 :: bool
  447. r17 :: bit
  448. r18, r19, r20 :: tuple[object, object, object]
  449. r21 :: object
  450. r22 :: None
  451. r23 :: bit
  452. L0:
  453. r0 = x.__enter__()
  454. r1 = 1
  455. L1:
  456. L2:
  457. r2 = 'hello'
  458. r3 = builtins :: module
  459. r4 = 'print'
  460. r5 = CPyObject_GetAttr(r3, r4)
  461. r6 = PyObject_CallFunctionObjArgs(r5, r2, 0)
  462. goto L8
  463. L3: (handler for L2)
  464. r7 = CPy_CatchError()
  465. r1 = 0
  466. r8 = CPy_GetExcInfo()
  467. r9 = r8[0]
  468. r10 = r8[1]
  469. r11 = r8[2]
  470. r12 = x.__exit__(r9, r10, r11)
  471. r13 = box(None, r12)
  472. r14 = PyObject_IsTrue(r13)
  473. r15 = r14 >= 0 :: signed
  474. r16 = truncate r14: int32 to builtins.bool
  475. if r16 goto L5 else goto L4 :: bool
  476. L4:
  477. CPy_Reraise()
  478. unreachable
  479. L5:
  480. L6:
  481. CPy_RestoreExcInfo(r7)
  482. goto L8
  483. L7: (handler for L3, L4, L5)
  484. CPy_RestoreExcInfo(r7)
  485. r17 = CPy_KeepPropagating()
  486. unreachable
  487. L8:
  488. L9:
  489. L10:
  490. r18 = <error> :: tuple[object, object, object]
  491. r19 = r18
  492. goto L12
  493. L11: (handler for L1, L6, L7, L8)
  494. r20 = CPy_CatchError()
  495. r19 = r20
  496. L12:
  497. if r1 goto L13 else goto L14 :: bool
  498. L13:
  499. r21 = load_address _Py_NoneStruct
  500. r22 = x.__exit__(r21, r21, r21)
  501. L14:
  502. if is_error(r19) goto L16 else goto L15
  503. L15:
  504. CPy_Reraise()
  505. unreachable
  506. L16:
  507. goto L20
  508. L17: (handler for L12, L13, L14, L15)
  509. if is_error(r19) goto L19 else goto L18
  510. L18:
  511. CPy_RestoreExcInfo(r19)
  512. L19:
  513. r23 = CPy_KeepPropagating()
  514. unreachable
  515. L20:
  516. return 1