ruby-internal 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. data/COPYING +59 -0
  2. data/LGPL +515 -0
  3. data/LICENSE +9 -0
  4. data/README +31 -0
  5. data/Rakefile +20 -0
  6. data/TODO +9 -0
  7. data/example/README +5 -0
  8. data/example/simple_client.rb +12 -0
  9. data/example/simple_server.rb +11 -0
  10. data/example/triangle_client.rb +7 -0
  11. data/example/triangle_server.rb +24 -0
  12. data/ext/cached/ruby-1.8.0/internal/binding/block.h +37 -0
  13. data/ext/cached/ruby-1.8.0/internal/method/method.h +19 -0
  14. data/ext/cached/ruby-1.8.0/internal/module/classpath.c +27 -0
  15. data/ext/cached/ruby-1.8.0/internal/module/classpath.h +14 -0
  16. data/ext/cached/ruby-1.8.0/internal/node/block.h +37 -0
  17. data/ext/cached/ruby-1.8.0/internal/node/global_entry.h +10 -0
  18. data/ext/cached/ruby-1.8.0/internal/node/node_type_descrip.c +155 -0
  19. data/ext/cached/ruby-1.8.0/internal/node/nodeinfo.c +5741 -0
  20. data/ext/cached/ruby-1.8.0/internal/node/nodeinfo.h +69 -0
  21. data/ext/cached/ruby-1.8.0/internal/proc/block.h +37 -0
  22. data/ext/cached/ruby-1.8.0/internal/tag/tag.h +15 -0
  23. data/ext/cached/ruby-1.8.0/internal/vm/instruction/insns_info.c +39 -0
  24. data/ext/cached/ruby-1.8.0/internal/vm/instruction/insns_info.h +21 -0
  25. data/ext/cached/ruby-1.8.0/internal/vm/iseq/insns_info.inc +12 -0
  26. data/ext/cached/ruby-1.8.1/internal/binding/block.h +31 -0
  27. data/ext/cached/ruby-1.8.1/internal/method/method.h +19 -0
  28. data/ext/cached/ruby-1.8.1/internal/module/classpath.c +27 -0
  29. data/ext/cached/ruby-1.8.1/internal/module/classpath.h +14 -0
  30. data/ext/cached/ruby-1.8.1/internal/node/block.h +31 -0
  31. data/ext/cached/ruby-1.8.1/internal/node/global_entry.h +10 -0
  32. data/ext/cached/ruby-1.8.1/internal/node/node_type_descrip.c +154 -0
  33. data/ext/cached/ruby-1.8.1/internal/node/nodeinfo.c +5733 -0
  34. data/ext/cached/ruby-1.8.1/internal/node/nodeinfo.h +69 -0
  35. data/ext/cached/ruby-1.8.1/internal/proc/block.h +31 -0
  36. data/ext/cached/ruby-1.8.1/internal/tag/tag.h +16 -0
  37. data/ext/cached/ruby-1.8.1/internal/vm/instruction/insns_info.c +39 -0
  38. data/ext/cached/ruby-1.8.1/internal/vm/instruction/insns_info.h +21 -0
  39. data/ext/cached/ruby-1.8.1/internal/vm/iseq/insns_info.inc +12 -0
  40. data/ext/cached/ruby-1.8.2/internal/binding/block.h +32 -0
  41. data/ext/cached/ruby-1.8.2/internal/method/method.h +19 -0
  42. data/ext/cached/ruby-1.8.2/internal/module/classpath.c +45 -0
  43. data/ext/cached/ruby-1.8.2/internal/module/classpath.h +17 -0
  44. data/ext/cached/ruby-1.8.2/internal/node/block.h +32 -0
  45. data/ext/cached/ruby-1.8.2/internal/node/global_entry.h +10 -0
  46. data/ext/cached/ruby-1.8.2/internal/node/node_type_descrip.c +154 -0
  47. data/ext/cached/ruby-1.8.2/internal/node/nodeinfo.c +5733 -0
  48. data/ext/cached/ruby-1.8.2/internal/node/nodeinfo.h +69 -0
  49. data/ext/cached/ruby-1.8.2/internal/proc/block.h +32 -0
  50. data/ext/cached/ruby-1.8.2/internal/tag/tag.h +16 -0
  51. data/ext/cached/ruby-1.8.2/internal/vm/instruction/insns_info.c +39 -0
  52. data/ext/cached/ruby-1.8.2/internal/vm/instruction/insns_info.h +21 -0
  53. data/ext/cached/ruby-1.8.2/internal/vm/iseq/insns_info.inc +12 -0
  54. data/ext/cached/ruby-1.8.3/internal/binding/block.h +32 -0
  55. data/ext/cached/ruby-1.8.3/internal/method/method.h +20 -0
  56. data/ext/cached/ruby-1.8.3/internal/module/classpath.c +45 -0
  57. data/ext/cached/ruby-1.8.3/internal/module/classpath.h +17 -0
  58. data/ext/cached/ruby-1.8.3/internal/node/block.h +32 -0
  59. data/ext/cached/ruby-1.8.3/internal/node/global_entry.h +10 -0
  60. data/ext/cached/ruby-1.8.3/internal/node/node_type_descrip.c +154 -0
  61. data/ext/cached/ruby-1.8.3/internal/node/nodeinfo.c +5733 -0
  62. data/ext/cached/ruby-1.8.3/internal/node/nodeinfo.h +69 -0
  63. data/ext/cached/ruby-1.8.3/internal/proc/block.h +32 -0
  64. data/ext/cached/ruby-1.8.3/internal/tag/tag.h +16 -0
  65. data/ext/cached/ruby-1.8.3/internal/vm/instruction/insns_info.c +39 -0
  66. data/ext/cached/ruby-1.8.3/internal/vm/instruction/insns_info.h +21 -0
  67. data/ext/cached/ruby-1.8.3/internal/vm/iseq/insns_info.inc +12 -0
  68. data/ext/cached/ruby-1.8.4/internal/binding/block.h +32 -0
  69. data/ext/cached/ruby-1.8.4/internal/method/method.h +20 -0
  70. data/ext/cached/ruby-1.8.4/internal/module/classpath.c +45 -0
  71. data/ext/cached/ruby-1.8.4/internal/module/classpath.h +17 -0
  72. data/ext/cached/ruby-1.8.4/internal/node/block.h +32 -0
  73. data/ext/cached/ruby-1.8.4/internal/node/global_entry.h +10 -0
  74. data/ext/cached/ruby-1.8.4/internal/node/node_type_descrip.c +154 -0
  75. data/ext/cached/ruby-1.8.4/internal/node/nodeinfo.c +5733 -0
  76. data/ext/cached/ruby-1.8.4/internal/node/nodeinfo.h +69 -0
  77. data/ext/cached/ruby-1.8.4/internal/proc/block.h +32 -0
  78. data/ext/cached/ruby-1.8.4/internal/tag/tag.h +16 -0
  79. data/ext/cached/ruby-1.8.4/internal/vm/instruction/insns_info.c +39 -0
  80. data/ext/cached/ruby-1.8.4/internal/vm/instruction/insns_info.h +21 -0
  81. data/ext/cached/ruby-1.8.4/internal/vm/iseq/insns_info.inc +12 -0
  82. data/ext/cached/ruby-1.8.5/internal/binding/block.h +32 -0
  83. data/ext/cached/ruby-1.8.5/internal/method/method.h +20 -0
  84. data/ext/cached/ruby-1.8.5/internal/module/classpath.c +45 -0
  85. data/ext/cached/ruby-1.8.5/internal/module/classpath.h +17 -0
  86. data/ext/cached/ruby-1.8.5/internal/node/block.h +32 -0
  87. data/ext/cached/ruby-1.8.5/internal/node/global_entry.h +10 -0
  88. data/ext/cached/ruby-1.8.5/internal/node/node_type_descrip.c +154 -0
  89. data/ext/cached/ruby-1.8.5/internal/node/nodeinfo.c +5732 -0
  90. data/ext/cached/ruby-1.8.5/internal/node/nodeinfo.h +67 -0
  91. data/ext/cached/ruby-1.8.5/internal/proc/block.h +32 -0
  92. data/ext/cached/ruby-1.8.5/internal/tag/tag.h +16 -0
  93. data/ext/cached/ruby-1.8.5/internal/vm/instruction/insns_info.c +39 -0
  94. data/ext/cached/ruby-1.8.5/internal/vm/instruction/insns_info.h +21 -0
  95. data/ext/cached/ruby-1.8.5/internal/vm/iseq/insns_info.inc +12 -0
  96. data/ext/cached/ruby-1.8.6/internal/binding/block.h +32 -0
  97. data/ext/cached/ruby-1.8.6/internal/method/method.h +20 -0
  98. data/ext/cached/ruby-1.8.6/internal/module/classpath.c +45 -0
  99. data/ext/cached/ruby-1.8.6/internal/module/classpath.h +17 -0
  100. data/ext/cached/ruby-1.8.6/internal/node/block.h +32 -0
  101. data/ext/cached/ruby-1.8.6/internal/node/global_entry.h +10 -0
  102. data/ext/cached/ruby-1.8.6/internal/node/node_type_descrip.c +154 -0
  103. data/ext/cached/ruby-1.8.6/internal/node/nodeinfo.c +5732 -0
  104. data/ext/cached/ruby-1.8.6/internal/node/nodeinfo.h +67 -0
  105. data/ext/cached/ruby-1.8.6/internal/proc/block.h +32 -0
  106. data/ext/cached/ruby-1.8.6/internal/tag/tag.h +16 -0
  107. data/ext/cached/ruby-1.8.6/internal/vm/instruction/insns_info.c +39 -0
  108. data/ext/cached/ruby-1.8.6/internal/vm/instruction/insns_info.h +21 -0
  109. data/ext/cached/ruby-1.8.6/internal/vm/iseq/insns_info.inc +12 -0
  110. data/ext/cached/ruby-1.8.7/internal/binding/block.h +32 -0
  111. data/ext/cached/ruby-1.8.7/internal/method/method.h +20 -0
  112. data/ext/cached/ruby-1.8.7/internal/module/classpath.c +45 -0
  113. data/ext/cached/ruby-1.8.7/internal/module/classpath.h +17 -0
  114. data/ext/cached/ruby-1.8.7/internal/node/block.h +32 -0
  115. data/ext/cached/ruby-1.8.7/internal/node/global_entry.h +10 -0
  116. data/ext/cached/ruby-1.8.7/internal/node/node_type_descrip.c +154 -0
  117. data/ext/cached/ruby-1.8.7/internal/node/nodeinfo.c +5732 -0
  118. data/ext/cached/ruby-1.8.7/internal/node/nodeinfo.h +67 -0
  119. data/ext/cached/ruby-1.8.7/internal/proc/block.h +32 -0
  120. data/ext/cached/ruby-1.8.7/internal/tag/tag.h +16 -0
  121. data/ext/cached/ruby-1.8.7/internal/vm/instruction/insns_info.c +39 -0
  122. data/ext/cached/ruby-1.8.7/internal/vm/instruction/insns_info.h +21 -0
  123. data/ext/cached/ruby-1.8.7/internal/vm/iseq/insns_info.inc +12 -0
  124. data/ext/cached/ruby-1.9.0/internal/binding/block.h +12 -0
  125. data/ext/cached/ruby-1.9.0/internal/method/method.h +20 -0
  126. data/ext/cached/ruby-1.9.0/internal/module/classpath.c +42 -0
  127. data/ext/cached/ruby-1.9.0/internal/module/classpath.h +17 -0
  128. data/ext/cached/ruby-1.9.0/internal/node/block.h +12 -0
  129. data/ext/cached/ruby-1.9.0/internal/node/global_entry.h +10 -0
  130. data/ext/cached/ruby-1.9.0/internal/node/node_type_descrip.c +149 -0
  131. data/ext/cached/ruby-1.9.0/internal/node/nodeinfo.c +5579 -0
  132. data/ext/cached/ruby-1.9.0/internal/node/nodeinfo.h +70 -0
  133. data/ext/cached/ruby-1.9.0/internal/proc/block.h +12 -0
  134. data/ext/cached/ruby-1.9.0/internal/tag/tag.h +6 -0
  135. data/ext/cached/ruby-1.9.0/internal/vm/instruction/insns_info.c +5936 -0
  136. data/ext/cached/ruby-1.9.0/internal/vm/instruction/insns_info.h +891 -0
  137. data/ext/cached/ruby-1.9.0/internal/vm/iseq/insns_info.inc +700 -0
  138. data/ext/cached/ruby-1.9.0/internal/yarv-headers/debug.h +36 -0
  139. data/ext/cached/ruby-1.9.0/internal/yarv-headers/dln.h +41 -0
  140. data/ext/cached/ruby-1.9.0/internal/yarv-headers/encdb.h +147 -0
  141. data/ext/cached/ruby-1.9.0/internal/yarv-headers/eval_intern.h +221 -0
  142. data/ext/cached/ruby-1.9.0/internal/yarv-headers/gc.h +75 -0
  143. data/ext/cached/ruby-1.9.0/internal/yarv-headers/id.h +83 -0
  144. data/ext/cached/ruby-1.9.0/internal/yarv-headers/iseq.h +94 -0
  145. data/ext/cached/ruby-1.9.0/internal/yarv-headers/node.h +516 -0
  146. data/ext/cached/ruby-1.9.0/internal/yarv-headers/parse.h +303 -0
  147. data/ext/cached/ruby-1.9.0/internal/yarv-headers/regenc.h +207 -0
  148. data/ext/cached/ruby-1.9.0/internal/yarv-headers/regint.h +842 -0
  149. data/ext/cached/ruby-1.9.0/internal/yarv-headers/regparse.h +351 -0
  150. data/ext/cached/ruby-1.9.0/internal/yarv-headers/revision.h +1 -0
  151. data/ext/cached/ruby-1.9.0/internal/yarv-headers/thread_pthread.h +24 -0
  152. data/ext/cached/ruby-1.9.0/internal/yarv-headers/thread_win32.h +33 -0
  153. data/ext/cached/ruby-1.9.0/internal/yarv-headers/transcode_data.h +99 -0
  154. data/ext/cached/ruby-1.9.0/internal/yarv-headers/transdb.h +67 -0
  155. data/ext/cached/ruby-1.9.0/internal/yarv-headers/version.h +57 -0
  156. data/ext/cached/ruby-1.9.0/internal/yarv-headers/vm_core.h +663 -0
  157. data/ext/cached/ruby-1.9.0/internal/yarv-headers/vm_exec.h +187 -0
  158. data/ext/cached/ruby-1.9.0/internal/yarv-headers/vm_insnhelper.h +191 -0
  159. data/ext/cached/ruby-1.9.0/internal/yarv-headers/vm_opts.h +51 -0
  160. data/ext/cached/ruby-1.9.1/internal/binding/block.h +12 -0
  161. data/ext/cached/ruby-1.9.1/internal/method/method.h +20 -0
  162. data/ext/cached/ruby-1.9.1/internal/module/classpath.c +42 -0
  163. data/ext/cached/ruby-1.9.1/internal/module/classpath.h +17 -0
  164. data/ext/cached/ruby-1.9.1/internal/node/block.h +12 -0
  165. data/ext/cached/ruby-1.9.1/internal/node/global_entry.h +10 -0
  166. data/ext/cached/ruby-1.9.1/internal/node/node_type_descrip.c +149 -0
  167. data/ext/cached/ruby-1.9.1/internal/node/nodeinfo.c +5579 -0
  168. data/ext/cached/ruby-1.9.1/internal/node/nodeinfo.h +70 -0
  169. data/ext/cached/ruby-1.9.1/internal/proc/block.h +12 -0
  170. data/ext/cached/ruby-1.9.1/internal/tag/tag.h +6 -0
  171. data/ext/cached/ruby-1.9.1/internal/vm/instruction/insns_info.c +5936 -0
  172. data/ext/cached/ruby-1.9.1/internal/vm/instruction/insns_info.h +891 -0
  173. data/ext/cached/ruby-1.9.1/internal/vm/iseq/insns_info.inc +700 -0
  174. data/ext/cached/ruby-1.9.1/internal/yarv-headers/debug.h +36 -0
  175. data/ext/cached/ruby-1.9.1/internal/yarv-headers/dln.h +41 -0
  176. data/ext/cached/ruby-1.9.1/internal/yarv-headers/encdb.h +147 -0
  177. data/ext/cached/ruby-1.9.1/internal/yarv-headers/eval_intern.h +209 -0
  178. data/ext/cached/ruby-1.9.1/internal/yarv-headers/gc.h +75 -0
  179. data/ext/cached/ruby-1.9.1/internal/yarv-headers/id.h +184 -0
  180. data/ext/cached/ruby-1.9.1/internal/yarv-headers/iseq.h +94 -0
  181. data/ext/cached/ruby-1.9.1/internal/yarv-headers/node.h +516 -0
  182. data/ext/cached/ruby-1.9.1/internal/yarv-headers/parse.h +303 -0
  183. data/ext/cached/ruby-1.9.1/internal/yarv-headers/regenc.h +207 -0
  184. data/ext/cached/ruby-1.9.1/internal/yarv-headers/regint.h +842 -0
  185. data/ext/cached/ruby-1.9.1/internal/yarv-headers/regparse.h +351 -0
  186. data/ext/cached/ruby-1.9.1/internal/yarv-headers/revision.h +1 -0
  187. data/ext/cached/ruby-1.9.1/internal/yarv-headers/thread_pthread.h +24 -0
  188. data/ext/cached/ruby-1.9.1/internal/yarv-headers/thread_win32.h +33 -0
  189. data/ext/cached/ruby-1.9.1/internal/yarv-headers/transcode_data.h +99 -0
  190. data/ext/cached/ruby-1.9.1/internal/yarv-headers/transdb.h +85 -0
  191. data/ext/cached/ruby-1.9.1/internal/yarv-headers/version.h +60 -0
  192. data/ext/cached/ruby-1.9.1/internal/yarv-headers/vm_core.h +655 -0
  193. data/ext/cached/ruby-1.9.1/internal/yarv-headers/vm_exec.h +187 -0
  194. data/ext/cached/ruby-1.9.1/internal/yarv-headers/vm_insnhelper.h +194 -0
  195. data/ext/cached/ruby-1.9.1/internal/yarv-headers/vm_opts.h +51 -0
  196. data/ext/internal/binding/binding.c +45 -0
  197. data/ext/internal/binding/block.h.rpp +44 -0
  198. data/ext/internal/binding/extconf.rb +6 -0
  199. data/ext/internal/method/extconf.rb +8 -0
  200. data/ext/internal/method/method.c +269 -0
  201. data/ext/internal/method/method.h.rpp +58 -0
  202. data/ext/internal/module/classpath.c.rpp +29 -0
  203. data/ext/internal/module/classpath.h.rpp +36 -0
  204. data/ext/internal/module/extconf.rb +11 -0
  205. data/ext/internal/module/module.c +797 -0
  206. data/ext/internal/module/module.h +7 -0
  207. data/ext/internal/node/block.h.rpp +44 -0
  208. data/ext/internal/node/builtins.h +41 -0
  209. data/ext/internal/node/extconf.rb +66 -0
  210. data/ext/internal/node/global_entry.h.rpp +26 -0
  211. data/ext/internal/node/node.c +1147 -0
  212. data/ext/internal/node/node_type_descrip.c.rpp +72 -0
  213. data/ext/internal/node/node_type_descrip.h +17 -0
  214. data/ext/internal/node/node_type_descrip.rb +39 -0
  215. data/ext/internal/node/nodeinfo.c.rpp +587 -0
  216. data/ext/internal/node/nodeinfo.h.rpp +30 -0
  217. data/ext/internal/node/nodes.rb +78 -0
  218. data/ext/internal/node/read_node_h.rb +34 -0
  219. data/ext/internal/node/ruby_internal_node.h +31 -0
  220. data/ext/internal/noex/extconf.rb +6 -0
  221. data/ext/internal/noex/noex.c +44 -0
  222. data/ext/internal/object/extconf.rb +4 -0
  223. data/ext/internal/object/object.c +75 -0
  224. data/ext/internal/proc/block.h.rpp +44 -0
  225. data/ext/internal/proc/extconf.rb +9 -0
  226. data/ext/internal/proc/proc.c +331 -0
  227. data/ext/internal/tag/extconf.rb +3 -0
  228. data/ext/internal/tag/tag.c +17 -0
  229. data/ext/internal/tag/tag.h.rpp +22 -0
  230. data/ext/internal/thread/extconf.rb +3 -0
  231. data/ext/internal/thread/thread.c +107 -0
  232. data/ext/internal/vm/constants/constants.c +33 -0
  233. data/ext/internal/vm/constants/extconf.rb +3 -0
  234. data/ext/internal/vm/control_frame/control_frame.c +185 -0
  235. data/ext/internal/vm/control_frame/control_frame.h +18 -0
  236. data/ext/internal/vm/control_frame/extconf.rb +3 -0
  237. data/ext/internal/vm/extconf.rb +3 -0
  238. data/ext/internal/vm/inline_cache/extconf.rb +6 -0
  239. data/ext/internal/vm/inline_cache/inline_cache.c +79 -0
  240. data/ext/internal/vm/instruction/extconf.rb +6 -0
  241. data/ext/internal/vm/instruction/insns_info.c.rpp +213 -0
  242. data/ext/internal/vm/instruction/insns_info.h.rpp +53 -0
  243. data/ext/internal/vm/instruction/instruction.c +78 -0
  244. data/ext/internal/vm/instruction/instruction.h +10 -0
  245. data/ext/internal/vm/iseq/extconf.rb +7 -0
  246. data/ext/internal/vm/iseq/insns_info.inc.rpp +30 -0
  247. data/ext/internal/vm/iseq/internal_iseq.h +9 -0
  248. data/ext/internal/vm/iseq/iseq.c +555 -0
  249. data/ext/internal/vm/vm.c +55 -0
  250. data/ext/mkmf-ruby-internal.rb +111 -0
  251. data/ext/ruby_source_dir.rb +24 -0
  252. data/ext/rubypp.rb +97 -0
  253. data/generate_rdoc.rb +33 -0
  254. data/lib/internal/binding.rb +1 -0
  255. data/lib/internal/classtree.rb +55 -0
  256. data/lib/internal/debug.rb +16 -0
  257. data/lib/internal/method.rb +1 -0
  258. data/lib/internal/method/as_code.rb +33 -0
  259. data/lib/internal/method/as_expression.rb +34 -0
  260. data/lib/internal/method/signature.rb +442 -0
  261. data/lib/internal/module.rb +1 -0
  262. data/lib/internal/module/as_code.rb +45 -0
  263. data/lib/internal/node.rb +3 -0
  264. data/lib/internal/node/as_code.rb +233 -0
  265. data/lib/internal/node/as_expression.rb +619 -0
  266. data/lib/internal/node/dump.rb +53 -0
  267. data/lib/internal/node/pp.rb +72 -0
  268. data/lib/internal/node/to_a.rb +52 -0
  269. data/lib/internal/noex.rb +1 -0
  270. data/lib/internal/obfusc.rb +57 -0
  271. data/lib/internal/object.rb +1 -0
  272. data/lib/internal/object/as_code.rb +10 -0
  273. data/lib/internal/proc.rb +1 -0
  274. data/lib/internal/proc/as_code.rb +21 -0
  275. data/lib/internal/proc/as_expression.rb +14 -0
  276. data/lib/internal/proc/signature.rb +184 -0
  277. data/lib/internal/tag.rb +1 -0
  278. data/lib/internal/thread.rb +1 -0
  279. data/lib/internal/vm.rb +1 -0
  280. data/lib/internal/vm/bytedecoder.rb +866 -0
  281. data/lib/internal/vm/constants.rb +1 -0
  282. data/lib/internal/vm/control_frame.rb +1 -0
  283. data/lib/internal/vm/inline_cache.rb +1 -0
  284. data/lib/internal/vm/instruction.rb +1 -0
  285. data/lib/internal/vm/iseq.rb +1 -0
  286. data/lib/internal/vm/iseq/as_code.rb +27 -0
  287. data/lib/internal/vm/iseq/as_expression.rb +26 -0
  288. data/metaconfig +19 -0
  289. data/post-config.rb +1 -0
  290. data/post-install.rb +4 -0
  291. data/post-setup.rb +7 -0
  292. data/pre-config.rb +96 -0
  293. data/pre-install.rb +13 -0
  294. data/pre-setup.rb +8 -0
  295. data/run_tests.rb +26 -0
  296. data/setup.rb +1599 -0
  297. data/test/expression_samples.rb +160 -0
  298. data/test/node_samples.rb +122 -0
  299. data/test/test_as_code.rb +261 -0
  300. data/test/test_as_expression.rb +229 -0
  301. data/test/test_dump_class.rb +187 -0
  302. data/test/test_dump_method.rb +144 -0
  303. data/test/test_dump_proc.rb +118 -0
  304. data/test/test_helpers.rb +61 -0
  305. data/test/test_method.rb +72 -0
  306. data/test/test_methodsig.rb +267 -0
  307. data/test/test_module.rb +49 -0
  308. data/test/test_node.rb +77 -0
  309. data/test/test_proc.rb +47 -0
  310. metadata +377 -0
@@ -0,0 +1,3 @@
1
+ $: << '../../'
2
+ require 'mkmf-ruby-internal'
3
+ create_ruby_internal_makefile 'internal/tag/tag'
@@ -0,0 +1,17 @@
1
+ #include <ruby.h>
2
+ #include "tag.h"
3
+
4
+ void Init_tag()
5
+ {
6
+ VALUE rb_mTag = rb_define_module("Tag");
7
+ rb_define_const(rb_mTag, "RETURN", INT2NUM(TAG_RETURN));
8
+ rb_define_const(rb_mTag, "BREAK", INT2NUM(TAG_BREAK));
9
+ rb_define_const(rb_mTag, "NEXT", INT2NUM(TAG_NEXT));
10
+ rb_define_const(rb_mTag, "RETRY", INT2NUM(TAG_RETRY));
11
+ rb_define_const(rb_mTag, "REDO", INT2NUM(TAG_REDO));
12
+ rb_define_const(rb_mTag, "RAISE", INT2NUM(TAG_RAISE));
13
+ rb_define_const(rb_mTag, "THROW", INT2NUM(TAG_THROW));
14
+ rb_define_const(rb_mTag, "FATAL", INT2NUM(TAG_FATAL));
15
+ rb_define_const(rb_mTag, "MASK", INT2NUM(TAG_MASK));
16
+ }
17
+
@@ -0,0 +1,22 @@
1
+ #include <ruby.h>
2
+
3
+ #ifdef RUBY_VM
4
+ #include "eval_intern.h"
5
+ #endif
6
+
7
+ #ruby <<END
8
+ $: << '../..'
9
+ require 'ruby_source_dir'
10
+ eval_c_location = "#{RUBY_SOURCE_DIR}/eval.c"
11
+
12
+ File.open(eval_c_location) do |eval_c|
13
+ while (line = eval_c.gets) != nil do
14
+ case line
15
+ when /^#define TAG_/
16
+ puts line
17
+ end
18
+ end
19
+ end
20
+
21
+ nil
22
+ END
@@ -0,0 +1,3 @@
1
+ $: << '../../'
2
+ require 'mkmf-ruby-internal'
3
+ create_ruby_internal_makefile 'internal/thread/thread'
@@ -0,0 +1,107 @@
1
+ #include <ruby.h>
2
+
3
+ #ifdef RUBY_VM
4
+ #include "vm_core.h"
5
+ #include "eval_intern.h"
6
+ #include "internal/vm/control_frame/control_frame.h"
7
+ #endif
8
+
9
+ #ifdef RUBY_VM
10
+
11
+ static VALUE rb_cVmControlFrame;
12
+
13
+ /* TODO: also defined in control_frame.c */
14
+ void mark_ruby_internal_control_frame(
15
+ struct RubyInternalControlFrame * cfp)
16
+ {
17
+ rb_gc_mark(cfp->thread);
18
+ }
19
+
20
+ /*
21
+ * call-seq:
22
+ * thread.cfp = RubyVM::ControlFrame
23
+ *
24
+ * Returns the thread's control frame.
25
+ */
26
+ static VALUE thread_cfp(VALUE self)
27
+ {
28
+ rb_thread_t * th;
29
+ rb_control_frame_t * prev_cfp;
30
+
31
+ GetThreadPtr(self, th);
32
+
33
+ /* TODO: Not sure how many control frames back to go to get the one we
34
+ * want */
35
+ prev_cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(th->cfp);
36
+ if((void *)(th->stack + th->stack_size) == (void *)prev_cfp)
37
+ {
38
+ return Qnil;
39
+ }
40
+ else
41
+ {
42
+ struct RubyInternalControlFrame * cfp;
43
+ VALUE cfp_v;
44
+
45
+ cfp_v = Data_Make_Struct(
46
+ rb_cVmControlFrame,
47
+ struct RubyInternalControlFrame,
48
+ mark_ruby_internal_control_frame,
49
+ free,
50
+ cfp);
51
+
52
+ cfp->control_frame = prev_cfp;
53
+ cfp->thread = self;
54
+
55
+ return cfp_v;
56
+ }
57
+ }
58
+
59
+ /* For Ludicrous */
60
+ void * ruby_current_thread_jmp_buf()
61
+ {
62
+ /* jmp_buf is guaranteed to be an array type that can decay to a
63
+ * pointer */
64
+ rb_thread_t * const th = GET_THREAD();
65
+ return th->tag->buf;
66
+ }
67
+
68
+ /* For Ludicrous */
69
+ void * ruby_current_thread_tag(void * tag)
70
+ {
71
+ rb_thread_t * const th = GET_THREAD();
72
+ return th->tag;
73
+ }
74
+
75
+ /* For Ludicrous */
76
+ void ruby_set_current_thread_tag(void * tag)
77
+ {
78
+ rb_thread_t * const th = GET_THREAD();
79
+ th->tag = tag;
80
+ }
81
+
82
+ #endif
83
+
84
+ void Init_thread(void)
85
+ {
86
+ /* For rdoc: rb_cThread = rb_define_class("Thread", rb_cObject); */
87
+
88
+ #ifdef RUBY_VM
89
+ VALUE rb_cRubyVM;
90
+
91
+ rb_require("internal/vm/control_frame");
92
+
93
+ if(!rb_const_defined(rb_cObject, rb_intern("RubyVM")))
94
+ {
95
+ rb_define_const(
96
+ rb_cObject,
97
+ "RubyVM",
98
+ rb_const_get(rb_cObject, rb_intern("VM")));
99
+ }
100
+
101
+ rb_cRubyVM = rb_define_class("RubyVM", rb_cObject);
102
+ rb_cVmControlFrame = rb_const_get(rb_cRubyVM, rb_intern("ControlFrame"));
103
+
104
+ rb_define_method(rb_cThread, "cfp", thread_cfp, 0);
105
+ #endif
106
+ }
107
+
@@ -0,0 +1,33 @@
1
+ #include <ruby.h>
2
+
3
+ #ifdef RUBY_VM
4
+ #include "vm_core.h"
5
+ #endif
6
+
7
+ void Init_constants(void)
8
+ {
9
+ #ifdef RUBY_VM
10
+ VALUE rb_cRubyVM;
11
+
12
+ if(!rb_const_defined(rb_cObject, rb_intern("RubyVM")))
13
+ {
14
+ rb_define_const(
15
+ rb_cObject,
16
+ "RubyVM",
17
+ rb_const_get(rb_cObject, rb_intern("VM")));
18
+ }
19
+
20
+ rb_cRubyVM = rb_define_class("RubyVM", rb_cObject);
21
+ rb_define_const(rb_cRubyVM, "CALL_ARGS_SPLAT_BIT", INT2NUM(VM_CALL_ARGS_SPLAT_BIT));
22
+ rb_define_const(rb_cRubyVM, "CALL_ARGS_BLOCKARG_BIT", INT2NUM(VM_CALL_ARGS_BLOCKARG_BIT));
23
+ rb_define_const(rb_cRubyVM, "CALL_FCALL_BIT", INT2NUM(VM_CALL_FCALL_BIT));
24
+ rb_define_const(rb_cRubyVM, "CALL_VCALL_BIT", INT2NUM(VM_CALL_VCALL_BIT));
25
+ rb_define_const(rb_cRubyVM, "CALL_TAILCALL_BIT", INT2NUM(VM_CALL_TAILCALL_BIT));
26
+ rb_define_const(rb_cRubyVM, "CALL_TAILRECURSION_BIT", INT2NUM(VM_CALL_TAILRECURSION_BIT));
27
+ rb_define_const(rb_cRubyVM, "CALL_SUPER_BIT", INT2NUM(VM_CALL_SUPER_BIT));
28
+ rb_define_const(rb_cRubyVM, "CALL_SEND_BIT", INT2NUM(VM_CALL_SEND_BIT));
29
+ rb_define_const(rb_cRubyVM, "SPECIAL_OBJECT_VMCORE", INT2NUM(VM_SPECIAL_OBJECT_VMCORE));
30
+ rb_define_const(rb_cRubyVM, "SPECIAL_OBJECT_CBASE", INT2NUM(VM_SPECIAL_OBJECT_CBASE));
31
+ #endif
32
+ }
33
+
@@ -0,0 +1,3 @@
1
+ $: << '../../..'
2
+ require 'mkmf-ruby-internal'
3
+ create_ruby_internal_makefile 'internal/vm/constants/constants'
@@ -0,0 +1,185 @@
1
+ #include "control_frame.h"
2
+ #include <ruby.h>
3
+
4
+ #ifdef RUBY_VM
5
+
6
+ #include "vm_core.h"
7
+
8
+ /* TODO: Using this class is dangerous, because the control frame can be
9
+ * popped but a reference kept around to it. It will still point to
10
+ * valid memory, but the data itself will be invalid.
11
+ */
12
+
13
+ static VALUE rb_cVmControlFrame;
14
+
15
+ void mark_ruby_internal_control_frame(
16
+ struct RubyInternalControlFrame * cfp)
17
+ {
18
+ rb_gc_mark(cfp->thread);
19
+ }
20
+
21
+ /*
22
+ * call-seq:
23
+ * control_frame.iseq => RubyVM::InstructionSequence
24
+ *
25
+ * Return the frame's iseq member.
26
+ */
27
+ static VALUE control_frame_iseq(VALUE control_frame)
28
+ {
29
+ struct RubyInternalControlFrame * cfp;
30
+ Data_Get_Struct(control_frame, struct RubyInternalControlFrame, cfp);
31
+ return (VALUE)cfp->control_frame->iseq;
32
+ }
33
+
34
+ /*
35
+ * call-seq:
36
+ * control_frame.self => Object
37
+ *
38
+ * Return the frame's self member.
39
+ */
40
+ static VALUE control_frame_self(VALUE control_frame)
41
+ {
42
+ struct RubyInternalControlFrame * cfp;
43
+ Data_Get_Struct(control_frame, struct RubyInternalControlFrame, cfp);
44
+ return cfp->control_frame->self;
45
+ }
46
+
47
+ /*
48
+ * call-seq:
49
+ * control_frame.block_iseq => RubyVM::InstructionSequence or nil
50
+ *
51
+ * Return the frame's block_iseq member.
52
+ */
53
+ static VALUE control_frame_block_iseq(VALUE control_frame)
54
+ {
55
+ struct RubyInternalControlFrame * cfp;
56
+ Data_Get_Struct(control_frame, struct RubyInternalControlFrame, cfp);
57
+ if(cfp->control_frame->proc)
58
+ {
59
+ return (VALUE)cfp->control_frame->block_iseq;
60
+ }
61
+ else
62
+ {
63
+ return Qfalse;
64
+ }
65
+ }
66
+
67
+ /*
68
+ * call-seq:
69
+ * control_frame.proc => ?
70
+ *
71
+ * Return the frame's proc member.
72
+ */
73
+ static VALUE control_frame_proc(VALUE control_frame)
74
+ {
75
+ struct RubyInternalControlFrame * cfp;
76
+ Data_Get_Struct(control_frame, struct RubyInternalControlFrame, cfp);
77
+ return cfp->control_frame->proc;
78
+ }
79
+
80
+ /*
81
+ * call-seq:
82
+ * control_frame.method_id => Symbol or nil
83
+ *
84
+ * Return the frame's method_id member.
85
+ */
86
+ static VALUE control_frame_method_id(VALUE control_frame)
87
+ {
88
+ struct RubyInternalControlFrame * cfp;
89
+ Data_Get_Struct(control_frame, struct RubyInternalControlFrame, cfp);
90
+ if(cfp->control_frame->method_id)
91
+ {
92
+ return ID2SYM(cfp->control_frame->method_id);
93
+ }
94
+ else
95
+ {
96
+ return Qnil;
97
+ }
98
+ }
99
+
100
+ /*
101
+ * call-seq:
102
+ * control_frame.method_class => Class
103
+ *
104
+ * Return the frame's method_class member.
105
+ */
106
+ static VALUE control_frame_method_class(VALUE control_frame)
107
+ {
108
+ struct RubyInternalControlFrame * cfp;
109
+ Data_Get_Struct(control_frame, struct RubyInternalControlFrame, cfp);
110
+ return cfp->control_frame->method_class;
111
+ }
112
+
113
+ /*
114
+ * call-seq:
115
+ * control_frame.prev => RubyVM::ControlFrame
116
+ *
117
+ * Return the frame's prev member.
118
+ */
119
+ static VALUE control_frame_prev(VALUE control_frame)
120
+ {
121
+ struct RubyInternalControlFrame * cfp;
122
+ rb_thread_t * th;
123
+ rb_control_frame_t * prev_cfp;
124
+
125
+ Data_Get_Struct(control_frame, struct RubyInternalControlFrame, cfp);
126
+
127
+ GetThreadPtr(cfp->thread, th);
128
+
129
+ prev_cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp->control_frame);
130
+
131
+ printf("current: %p\n", cfp->control_frame);
132
+ printf("prev: %p\n", prev_cfp);
133
+ printf("th->stack: %p\n", th->stack);
134
+ printf("th->stack + th->stack_size: %p\n", th->stack + th->stack_size);
135
+
136
+ if((void *)(th->stack + th->stack_size) == (void *)prev_cfp)
137
+ {
138
+ return Qnil;
139
+ }
140
+ else
141
+ {
142
+ VALUE cfp_v;
143
+ struct RubyInternalControlFrame * new_cfp;
144
+
145
+ cfp_v = Data_Make_Struct(
146
+ rb_cVmControlFrame,
147
+ struct RubyInternalControlFrame,
148
+ mark_ruby_internal_control_frame,
149
+ free,
150
+ new_cfp);
151
+
152
+ new_cfp->control_frame = prev_cfp;
153
+ new_cfp->thread = cfp->thread;
154
+
155
+ return cfp_v;
156
+ }
157
+ }
158
+
159
+ #endif
160
+
161
+ void Init_control_frame(void)
162
+ {
163
+ #ifdef RUBY_VM
164
+ VALUE rb_cRubyVM;
165
+
166
+ if(!rb_const_defined(rb_cObject, rb_intern("RubyVM")))
167
+ {
168
+ rb_define_const(
169
+ rb_cObject,
170
+ "RubyVM",
171
+ rb_const_get(rb_cObject, rb_intern("VM")));
172
+ }
173
+
174
+ rb_cRubyVM = rb_define_class("RubyVM", rb_cObject);
175
+ rb_cVmControlFrame = rb_define_class_under(rb_cRubyVM, "ControlFrame", rb_cObject);
176
+ rb_define_method(rb_cVmControlFrame, "iseq", control_frame_iseq, 0);
177
+ rb_define_method(rb_cVmControlFrame, "self", control_frame_self, 0);
178
+ rb_define_method(rb_cVmControlFrame, "block_iseq", control_frame_block_iseq, 0);
179
+ rb_define_method(rb_cVmControlFrame, "proc", control_frame_proc, 0);
180
+ rb_define_method(rb_cVmControlFrame, "method_id", control_frame_method_id, 0);
181
+ rb_define_method(rb_cVmControlFrame, "method_class", control_frame_method_class, 0);
182
+ rb_define_method(rb_cVmControlFrame, "prev", control_frame_prev, 0);
183
+ #endif
184
+ }
185
+
@@ -0,0 +1,18 @@
1
+ #ifndef RUBY_INTERNAL__VM__CONTROL_FRAME__CONTROL_FRAME_H
2
+ #define RUBY_INTERNAL__VM__CONTROL_FRAME__CONTROL_FRAME_H
3
+
4
+ #include <ruby.h>
5
+
6
+ #ifdef RUBY_VM
7
+
8
+ #include "vm_core.h"
9
+
10
+ struct RubyInternalControlFrame
11
+ {
12
+ rb_control_frame_t * control_frame;
13
+ VALUE thread;
14
+ };
15
+
16
+ #endif
17
+
18
+ #endif
@@ -0,0 +1,3 @@
1
+ $: << '../../..'
2
+ require 'mkmf-ruby-internal'
3
+ create_ruby_internal_makefile 'internal/vm/control_frame/control_frame'
@@ -0,0 +1,3 @@
1
+ $: << '../..'
2
+ require 'mkmf-ruby-internal'
3
+ create_ruby_internal_makefile 'internal/vm/vm'
@@ -0,0 +1,6 @@
1
+ $: << '../../..'
2
+ require 'mkmf-ruby-internal'
3
+
4
+ have_header('ruby/node.h') or have_header('node.h')
5
+
6
+ create_ruby_internal_makefile 'internal/vm/inline_cache/inline_cache'
@@ -0,0 +1,79 @@
1
+ #include "internal/node/ruby_internal_node.h"
2
+ #include "internal/node/nodeinfo.h"
3
+ #include <ruby.h>
4
+
5
+ #ifdef RUBY_VM
6
+
7
+ #include "vm_core.h"
8
+
9
+ /*
10
+ * call-seq:
11
+ * inline_cache.class => nil
12
+ *
13
+ * Currently returns nil, because returning the real class can cause the
14
+ * interpreter to crash.
15
+ */
16
+ static VALUE inline_cache_klass(VALUE self)
17
+ {
18
+ /* TODO: returning the real value can crash the interpreter */
19
+ return Qnil;
20
+ }
21
+
22
+ /*
23
+ * call-seq:
24
+ * inline_cache.value => Object
25
+ *
26
+ * Returns the ic_cache member of the inline cache.
27
+ */
28
+ static VALUE inline_cache_value(VALUE self)
29
+ {
30
+ IC inline_cache = unwrap_node(self);
31
+ return inline_cache->ic_value;
32
+ }
33
+
34
+ /*
35
+ * call-seq:
36
+ * inline_cache.vmstat => object
37
+ *
38
+ * Returns the ic_vmstat member of the inline cache.
39
+ */
40
+ static VALUE inline_cache_vmstat(VALUE self)
41
+ {
42
+ IC inline_cache = unwrap_node(self);
43
+ return INT2NUM(inline_cache->ic_vmstat);
44
+ }
45
+
46
+ #endif
47
+
48
+ void Init_inline_cache(void)
49
+ {
50
+ #ifdef RUBY_VM
51
+ VALUE rb_cNode;
52
+ VALUE rb_cRubyVM;
53
+
54
+ rb_require("internal/node/node");
55
+
56
+ rb_cNode = rb_define_class("Node", rb_cObject);
57
+
58
+ if(!rb_const_defined(rb_cObject, rb_intern("RubyVM")))
59
+ {
60
+ rb_define_const(
61
+ rb_cObject,
62
+ "RubyVM",
63
+ rb_const_get(rb_cObject, rb_intern("VM")));
64
+ }
65
+
66
+ rb_cRubyVM = rb_define_class("RubyVM", rb_cObject);
67
+ VALUE rb_cInlineCache = rb_define_class_under(rb_cRubyVM, "InlineCache", rb_cNode);
68
+ rb_define_method(rb_cInlineCache, "klass", inline_cache_klass, 0);
69
+ rb_define_method(rb_cInlineCache, "value", inline_cache_value, 0);
70
+ rb_define_method(rb_cInlineCache, "vmstat", inline_cache_vmstat, 0);
71
+ VALUE inline_cache_members = rb_ary_new();
72
+ rb_ary_push(inline_cache_members, rb_str_new2("klass"));
73
+ rb_ary_push(inline_cache_members, rb_str_new2("value"));
74
+ rb_ary_push(inline_cache_members, rb_str_new2("vmstat"));
75
+ rb_iv_set(rb_cInlineCache, "__member__", inline_cache_members);
76
+ rb_define_singleton_method(rb_cInlineCache, "members", node_s_members, 0);
77
+ #endif
78
+ }
79
+