/src/tools/interpreter/builtins/liberty_interpreter_external_builtin_call.e

http://github.com/tybor/Liberty · Specman e · 371 lines · 326 code · 31 blank · 14 comment · 23 complexity · bed166e33b9d0db179185dbf8c5ada68 MD5 · raw file

  1. -- This file is part of Liberty Eiffel.
  2. --
  3. -- Liberty Eiffel is free software: you can redistribute it and/or modify
  4. -- it under the terms of the GNU General Public License as published by
  5. -- the Free Software Foundation, version 3 of the License.
  6. --
  7. -- Liberty Eiffel is distributed in the hope that it will be useful,
  8. -- but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. -- GNU General Public License for more details.
  11. --
  12. -- You should have received a copy of the GNU General Public License
  13. -- along with Liberty Eiffel. If not, see <http://www.gnu.org/licenses/>.
  14. --
  15. class LIBERTY_INTERPRETER_EXTERNAL_BUILTIN_CALL
  16. inherit
  17. LIBERTY_TYPE_VISITOR
  18. create {LIBERTY_INTERPRETER_EXTERNAL_BUILTINS}
  19. make
  20. feature {LIBERTY_INTERPRETER_EXTERNAL_BUILTINS}
  21. last_call_failed: BOOLEAN
  22. call is
  23. do
  24. last_call_failed := False
  25. builtin_call.definition_type.accept(Current)
  26. if last_call_failed then
  27. last_call_failed := False
  28. builtin_call.target.type.accept(Current)
  29. end
  30. end
  31. feature {}
  32. make (a_interpreter: like interpreter; a_builtin_call: like builtin_call) is
  33. require
  34. a_interpreter /= Void
  35. a_builtin_call /= Void
  36. do
  37. interpreter := a_interpreter
  38. builtin_call := a_builtin_call
  39. ensure
  40. interpreter = a_interpreter
  41. builtin_call = a_builtin_call
  42. end
  43. interpreter: LIBERTY_INTERPRETER
  44. builtin_call: LIBERTY_INTERPRETER_FEATURE_CALL
  45. feature {LIBERTY_UNIVERSE}
  46. visit_type_any (type: LIBERTY_ACTUAL_TYPE) is
  47. local
  48. ret: LIBERTY_INTERPRETER_OBJECT
  49. type_any_builtins: LIBERTY_INTERPRETER_EXTERNAL_TYPE_ANY_BUILTINS
  50. do
  51. create type_any_builtins.make(interpreter)
  52. ret := type_any_builtins.call(builtin_call)
  53. if type_any_builtins.last_call_failed then
  54. last_call_failed := True
  55. else
  56. builtin_call.set_returned_object(ret)
  57. end
  58. end
  59. visit_type_arguments (type: LIBERTY_ACTUAL_TYPE) is
  60. local
  61. ret: LIBERTY_INTERPRETER_OBJECT
  62. type_arguments_builtins: LIBERTY_INTERPRETER_EXTERNAL_TYPE_ARGUMENTS_BUILTINS
  63. do
  64. create type_arguments_builtins.make(interpreter)
  65. ret := type_arguments_builtins.call(builtin_call)
  66. if type_arguments_builtins.last_call_failed then
  67. last_call_failed := True
  68. else
  69. builtin_call.set_returned_object(ret)
  70. end
  71. end
  72. visit_type_platform (type: LIBERTY_ACTUAL_TYPE) is
  73. local
  74. ret: LIBERTY_INTERPRETER_OBJECT
  75. type_platform_builtins: LIBERTY_INTERPRETER_EXTERNAL_TYPE_PLATFORM_BUILTINS
  76. do
  77. create type_platform_builtins.make(interpreter)
  78. ret := type_platform_builtins.call(builtin_call)
  79. if type_platform_builtins.last_call_failed then
  80. last_call_failed := True
  81. else
  82. builtin_call.set_returned_object(ret)
  83. end
  84. end
  85. visit_type_pointer (type: LIBERTY_ACTUAL_TYPE) is
  86. local
  87. ret: LIBERTY_INTERPRETER_OBJECT
  88. type_pointer_builtins: LIBERTY_INTERPRETER_EXTERNAL_TYPE_POINTER_BUILTINS
  89. do
  90. create type_pointer_builtins.make(interpreter)
  91. ret := type_pointer_builtins.call(builtin_call)
  92. if type_pointer_builtins.last_call_failed then
  93. last_call_failed := True
  94. else
  95. builtin_call.set_returned_object(ret)
  96. end
  97. end
  98. visit_type_integer_64 (type: LIBERTY_ACTUAL_TYPE) is
  99. local
  100. ret: LIBERTY_INTERPRETER_OBJECT
  101. type_integer_64_builtins: LIBERTY_INTERPRETER_EXTERNAL_TYPE_INTEGER_64_BUILTINS
  102. do
  103. create type_integer_64_builtins.make(interpreter)
  104. ret := type_integer_64_builtins.call(builtin_call)
  105. if type_integer_64_builtins.last_call_failed then
  106. last_call_failed := True
  107. else
  108. builtin_call.set_returned_object(ret)
  109. end
  110. end
  111. visit_type_integer_32 (type: LIBERTY_ACTUAL_TYPE) is
  112. local
  113. ret: LIBERTY_INTERPRETER_OBJECT
  114. type_integer_32_builtins: LIBERTY_INTERPRETER_EXTERNAL_TYPE_INTEGER_32_BUILTINS
  115. do
  116. create type_integer_32_builtins.make(interpreter)
  117. ret := type_integer_32_builtins.call(builtin_call)
  118. if type_integer_32_builtins.last_call_failed then
  119. last_call_failed := True
  120. else
  121. builtin_call.set_returned_object(ret)
  122. end
  123. end
  124. visit_type_integer_16 (type: LIBERTY_ACTUAL_TYPE) is
  125. local
  126. ret: LIBERTY_INTERPRETER_OBJECT
  127. type_integer_16_builtins: LIBERTY_INTERPRETER_EXTERNAL_TYPE_INTEGER_16_BUILTINS
  128. do
  129. create type_integer_16_builtins.make(interpreter)
  130. ret := type_integer_16_builtins.call(builtin_call)
  131. if type_integer_16_builtins.last_call_failed then
  132. last_call_failed := True
  133. else
  134. builtin_call.set_returned_object(ret)
  135. end
  136. end
  137. visit_type_integer_8 (type: LIBERTY_ACTUAL_TYPE) is
  138. local
  139. ret: LIBERTY_INTERPRETER_OBJECT
  140. type_integer_8_builtins: LIBERTY_INTERPRETER_EXTERNAL_TYPE_INTEGER_8_BUILTINS
  141. do
  142. create type_integer_8_builtins.make(interpreter)
  143. ret := type_integer_8_builtins.call(builtin_call)
  144. if type_integer_8_builtins.last_call_failed then
  145. last_call_failed := True
  146. else
  147. builtin_call.set_returned_object(ret)
  148. end
  149. end
  150. visit_type_real_64 (type: LIBERTY_ACTUAL_TYPE) is
  151. local
  152. ret: LIBERTY_INTERPRETER_OBJECT
  153. type_real_64_builtins: LIBERTY_INTERPRETER_EXTERNAL_TYPE_REAL_64_BUILTINS
  154. do
  155. create type_real_64_builtins.make(interpreter)
  156. ret := type_real_64_builtins.call(builtin_call)
  157. if type_real_64_builtins.last_call_failed then
  158. last_call_failed := True
  159. else
  160. builtin_call.set_returned_object(ret)
  161. end
  162. end
  163. visit_type_real_32 (type: LIBERTY_ACTUAL_TYPE) is
  164. local
  165. ret: LIBERTY_INTERPRETER_OBJECT
  166. type_real_32_builtins: LIBERTY_INTERPRETER_EXTERNAL_TYPE_REAL_32_BUILTINS
  167. do
  168. create type_real_32_builtins.make(interpreter)
  169. ret := type_real_32_builtins.call(builtin_call)
  170. if type_real_32_builtins.last_call_failed then
  171. last_call_failed := True
  172. else
  173. builtin_call.set_returned_object(ret)
  174. end
  175. end
  176. visit_type_real_80 (type: LIBERTY_ACTUAL_TYPE) is
  177. local
  178. ret: LIBERTY_INTERPRETER_OBJECT
  179. type_real_80_builtins: LIBERTY_INTERPRETER_EXTERNAL_TYPE_REAL_80_BUILTINS
  180. do
  181. create type_real_80_builtins.make(interpreter)
  182. ret := type_real_80_builtins.call(builtin_call)
  183. if type_real_80_builtins.last_call_failed then
  184. last_call_failed := True
  185. else
  186. builtin_call.set_returned_object(ret)
  187. end
  188. end
  189. visit_type_real_128 (type: LIBERTY_ACTUAL_TYPE) is
  190. local
  191. ret: LIBERTY_INTERPRETER_OBJECT
  192. type_real_128_builtins: LIBERTY_INTERPRETER_EXTERNAL_TYPE_REAL_128_BUILTINS
  193. do
  194. create type_real_128_builtins.make(interpreter)
  195. ret := type_real_128_builtins.call(builtin_call)
  196. if type_real_128_builtins.last_call_failed then
  197. last_call_failed := True
  198. else
  199. builtin_call.set_returned_object(ret)
  200. end
  201. end
  202. visit_type_character (type: LIBERTY_ACTUAL_TYPE) is
  203. local
  204. ret: LIBERTY_INTERPRETER_OBJECT
  205. type_character_builtins: LIBERTY_INTERPRETER_EXTERNAL_TYPE_CHARACTER_BUILTINS
  206. do
  207. create type_character_builtins.make(interpreter)
  208. ret := type_character_builtins.call(builtin_call)
  209. if type_character_builtins.last_call_failed then
  210. last_call_failed := True
  211. else
  212. builtin_call.set_returned_object(ret)
  213. end
  214. end
  215. visit_type_string (type: LIBERTY_ACTUAL_TYPE) is
  216. local
  217. ret: LIBERTY_INTERPRETER_OBJECT
  218. type_string_builtins: LIBERTY_INTERPRETER_EXTERNAL_TYPE_STRING_BUILTINS
  219. do
  220. create type_string_builtins.make(interpreter)
  221. ret := type_string_builtins.call(builtin_call)
  222. if type_string_builtins.last_call_failed then
  223. last_call_failed := True
  224. else
  225. builtin_call.set_returned_object(ret)
  226. end
  227. end
  228. visit_type_boolean (type: LIBERTY_ACTUAL_TYPE) is
  229. local
  230. ret: LIBERTY_INTERPRETER_OBJECT
  231. type_boolean_builtins: LIBERTY_INTERPRETER_EXTERNAL_TYPE_BOOLEAN_BUILTINS
  232. do
  233. create type_boolean_builtins.make(interpreter)
  234. ret := type_boolean_builtins.call(builtin_call)
  235. if type_boolean_builtins.last_call_failed then
  236. last_call_failed := True
  237. else
  238. builtin_call.set_returned_object(ret)
  239. end
  240. end
  241. visit_type_native_array (type: LIBERTY_ACTUAL_TYPE) is
  242. local
  243. ret: LIBERTY_INTERPRETER_OBJECT
  244. type_native_array_builtins: LIBERTY_INTERPRETER_EXTERNAL_TYPE_NATIVE_ARRAY_BUILTINS
  245. do
  246. create type_native_array_builtins.make(interpreter)
  247. ret := type_native_array_builtins.call(builtin_call)
  248. if type_native_array_builtins.last_call_failed then
  249. last_call_failed := True
  250. else
  251. builtin_call.set_returned_object(ret)
  252. end
  253. end
  254. visit_type_tuple (type: LIBERTY_ACTUAL_TYPE) is
  255. local
  256. ret: LIBERTY_INTERPRETER_OBJECT
  257. type_tuple_builtins: LIBERTY_INTERPRETER_EXTERNAL_TYPE_TUPLE_BUILTINS
  258. do
  259. create type_tuple_builtins.make(interpreter)
  260. ret := type_tuple_builtins.call(builtin_call)
  261. if type_tuple_builtins.last_call_failed then
  262. last_call_failed := True
  263. else
  264. builtin_call.set_returned_object(ret)
  265. end
  266. end
  267. visit_type_routine (type: LIBERTY_ACTUAL_TYPE) is
  268. local
  269. ret: LIBERTY_INTERPRETER_OBJECT
  270. type_routine_builtins: LIBERTY_INTERPRETER_EXTERNAL_TYPE_ROUTINE_BUILTINS
  271. do
  272. create type_routine_builtins.make(interpreter)
  273. ret := type_routine_builtins.call(builtin_call)
  274. if type_routine_builtins.last_call_failed then
  275. last_call_failed := True
  276. else
  277. builtin_call.set_returned_object(ret)
  278. end
  279. end
  280. visit_type_procedure (type: LIBERTY_ACTUAL_TYPE) is
  281. local
  282. ret: LIBERTY_INTERPRETER_OBJECT
  283. type_procedure_builtins: LIBERTY_INTERPRETER_EXTERNAL_TYPE_PROCEDURE_BUILTINS
  284. do
  285. create type_procedure_builtins.make(interpreter)
  286. ret := type_procedure_builtins.call(builtin_call)
  287. if type_procedure_builtins.last_call_failed then
  288. last_call_failed := True
  289. else
  290. builtin_call.set_returned_object(ret)
  291. end
  292. end
  293. visit_type_function (type: LIBERTY_ACTUAL_TYPE) is
  294. local
  295. ret: LIBERTY_INTERPRETER_OBJECT
  296. type_function_builtins: LIBERTY_INTERPRETER_EXTERNAL_TYPE_FUNCTION_BUILTINS
  297. do
  298. create type_function_builtins.make(interpreter)
  299. ret := type_function_builtins.call(builtin_call)
  300. if type_function_builtins.last_call_failed then
  301. last_call_failed := True
  302. else
  303. builtin_call.set_returned_object(ret)
  304. end
  305. end
  306. visit_type_predicate (type: LIBERTY_ACTUAL_TYPE) is
  307. local
  308. ret: LIBERTY_INTERPRETER_OBJECT
  309. type_predicate_builtins: LIBERTY_INTERPRETER_EXTERNAL_TYPE_PREDICATE_BUILTINS
  310. do
  311. create type_predicate_builtins.make(interpreter)
  312. ret := type_predicate_builtins.call(builtin_call)
  313. if type_predicate_builtins.last_call_failed then
  314. last_call_failed := True
  315. else
  316. builtin_call.set_returned_object(ret)
  317. end
  318. end
  319. visit_user_type (type: LIBERTY_ACTUAL_TYPE) is
  320. local
  321. ret: LIBERTY_INTERPRETER_OBJECT
  322. user_type_builtins: LIBERTY_INTERPRETER_EXTERNAL_USER_TYPE_BUILTINS
  323. do
  324. create user_type_builtins.make(interpreter)
  325. ret := user_type_builtins.call(builtin_call)
  326. if user_type_builtins.last_call_failed then
  327. last_call_failed := True
  328. else
  329. builtin_call.set_returned_object(ret)
  330. end
  331. end
  332. feature {LIBERTY_VOID_TYPE}
  333. visit_void (type: LIBERTY_VOID_TYPE) is
  334. do
  335. check False end
  336. end
  337. invariant
  338. interpreter /= Void
  339. builtin_call /= Void
  340. end -- class LIBERTY_INTERPRETER_EXTERNAL_BUILTIN_CALL