try_04.bmx 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. ' Tests whether exceptions are caught and Finally blocks are executed correctly in complex Try-Catch-Finally constructs.
  2. SuperStrict
  3. Framework BRL.StandardIO
  4. Function GetNumber:Int()
  5. Print "getting 5"
  6. Return 5
  7. End Function
  8. Function ThrowEx:Int()
  9. Print "throw ex"
  10. Throw "ex"
  11. End Function
  12. Function ThrowEx2:Int()
  13. Print "throw ex2"
  14. Throw "ex2"
  15. End Function
  16. Print; Print 1
  17. Print "returned " + F()
  18. Function F:Int()
  19. Try
  20. Print "try"
  21. Return GetNumber()
  22. Finally
  23. Print "finally"
  24. End Try
  25. End Function
  26. Print; Print 2
  27. Print "returned " + F2()
  28. Function F2:Int()
  29. Try
  30. Print "try"
  31. Return GetNumber()
  32. Catch e:Int[]
  33. Print "this should not happen"
  34. Catch e:String
  35. Print "this should not happen"
  36. Finally
  37. Print "finally"
  38. End Try
  39. End Function
  40. Print; Print 3
  41. Print "returned " + F3()
  42. Function F3:Int()
  43. Try
  44. Print "try"
  45. Return ThrowEx()
  46. Catch e:Int[]
  47. Print "this should not happen"
  48. Catch e:String
  49. Print "catch " + e
  50. Finally
  51. Print "finally"
  52. End Try
  53. End Function
  54. Print; Print 4
  55. Print "returned " + F4()
  56. Function F4:Int()
  57. Try
  58. Print "try"
  59. Return ThrowEx()
  60. Catch e:Int[]
  61. Print "this should not happen"
  62. Catch e:String
  63. Print "catch " + e
  64. Return 7
  65. Finally
  66. Print "finally"
  67. End Try
  68. End Function
  69. Print; Print 5
  70. Print "returned " + F5()
  71. Function F5:Int()
  72. Try
  73. Try
  74. Print "try"
  75. Return ThrowEx()
  76. Catch e:Int[]
  77. Print "this should not happen"
  78. Catch e:String
  79. Print "catch " + e
  80. Return ThrowEx2()
  81. Finally
  82. Print "finally"
  83. End Try
  84. Catch e:String
  85. Print "catch2 " + e
  86. Finally
  87. Print "finally2"
  88. End Try
  89. End Function
  90. Print; Print 6
  91. Try
  92. F6
  93. Catch e:String
  94. Print "catch3 " + e
  95. End Try
  96. Function F6()
  97. For Local i:Int = 1 To 2
  98. Try
  99. Print "try"
  100. Return
  101. Finally
  102. Print "finally"
  103. Try
  104. Print "try2"
  105. Throw "asdf"
  106. Finally
  107. Print "finally2"
  108. End Try
  109. End Try
  110. Next
  111. End Function
  112. Print; Print 7
  113. F7
  114. Function F7()
  115. For Local i:Int = 1 To 2
  116. Try
  117. Print "try"
  118. Try
  119. Print "try2"
  120. Exit
  121. Finally
  122. Print "finally2"
  123. End Try
  124. Finally
  125. Print "finally"
  126. End Try
  127. Next
  128. End Function
  129. Print; Print 8
  130. F8
  131. Function F8()
  132. For Local i:Int = 1 To 2
  133. Try
  134. Print "try"
  135. Try
  136. Print "try2"
  137. Continue
  138. Finally
  139. Print "finally2"
  140. End Try
  141. Finally
  142. Print "finally"
  143. End Try
  144. Next
  145. End Function
  146. Print; Print 9
  147. F9
  148. Function F9()
  149. #loop
  150. For Local i:Int = 1 To 2
  151. Try
  152. Print "try"
  153. Try
  154. Print "try2"
  155. For Local j:Int = 1 To 2
  156. Exit loop
  157. Next
  158. Finally
  159. Print "finally2"
  160. End Try
  161. Finally
  162. Print "finally"
  163. End Try
  164. Next
  165. End Function
  166. Print; Print 10
  167. F10
  168. Function F10()
  169. #loop
  170. For Local i:Int = 1 To 2
  171. Try
  172. Print "try"
  173. Try
  174. Print "try2"
  175. For Local j:Int = 1 To 2
  176. Continue loop
  177. Next
  178. Finally
  179. Print "finally2"
  180. End Try
  181. Finally
  182. Print "finally"
  183. End Try
  184. Next
  185. End Function
  186. Print; Print 11
  187. Try
  188. Print "try"
  189. Try
  190. Print "try2"
  191. Throw "ex"
  192. Catch e:String
  193. Print "catch2 " + e
  194. Throw "ex2"
  195. Finally
  196. Print "finally2"
  197. Try
  198. Print "try3"
  199. Catch e:String
  200. Print "catch3"
  201. Finally
  202. Print "finally3"
  203. Throw "ex3"
  204. End Try
  205. End Try
  206. Catch e:String
  207. Print "catch " + e
  208. End Try
  209. Print; Print 12
  210. Try
  211. Print "returned " + F12()
  212. Catch e:String
  213. Print "catch5 " + e
  214. End Try
  215. Function F12:Int()
  216. Try
  217. Try
  218. Try
  219. Try
  220. Print "try4"
  221. Return 7
  222. Finally
  223. Print "finally4"
  224. End Try
  225. Finally
  226. Print "finally3"
  227. End Try
  228. Finally
  229. Print "finally2"
  230. Throw "ex"
  231. End Try
  232. Finally
  233. Print "finally"
  234. End Try
  235. Return 2
  236. End Function