ruby-internal 0.7.3 → 0.8.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 (254) hide show
  1. data/bin/ruby-internal-node-dump +1 -1
  2. data/bin/ruby-internal-obfuscate +1 -1
  3. data/ext/cached/ruby-1.8.4/internal/method/{method.h → internal_method.h} +12 -0
  4. data/ext/cached/ruby-1.8.4/internal/module/getcfp.h +13 -0
  5. data/ext/cached/ruby-1.8.4/internal/node/global_entry.h +94 -0
  6. data/ext/cached/ruby-1.8.4/internal/node/node_type_descrip.c +41 -41
  7. data/ext/cached/ruby-1.8.4/internal/node/nodeinfo.c +288 -273
  8. data/ext/cached/ruby-1.8.4/internal/vm/instruction/insns_info.c +3 -0
  9. data/ext/cached/ruby-1.8.4/internal/vm/iseq/iseq_load.inc +21 -2
  10. data/ext/cached/{ruby-1.8.3/internal/method/method.h → ruby-1.8.5/internal/method/internal_method.h} +12 -0
  11. data/ext/cached/ruby-1.8.5/internal/module/getcfp.h +13 -0
  12. data/ext/cached/ruby-1.8.5/internal/node/global_entry.h +94 -0
  13. data/ext/cached/ruby-1.8.5/internal/node/node_type_descrip.c +45 -45
  14. data/ext/cached/ruby-1.8.5/internal/node/nodeinfo.c +310 -295
  15. data/ext/cached/ruby-1.8.5/internal/vm/instruction/insns_info.c +3 -0
  16. data/ext/cached/ruby-1.8.5/internal/vm/iseq/iseq_load.inc +21 -2
  17. data/ext/cached/{ruby-1.8.5/internal/method/method.h → ruby-1.8.6/internal/method/internal_method.h} +12 -0
  18. data/ext/cached/ruby-1.8.6/internal/module/getcfp.h +13 -0
  19. data/ext/cached/ruby-1.8.6/internal/node/global_entry.h +94 -0
  20. data/ext/cached/ruby-1.8.6/internal/node/node_type_descrip.c +48 -48
  21. data/ext/cached/ruby-1.8.6/internal/node/nodeinfo.c +323 -308
  22. data/ext/cached/ruby-1.8.6/internal/vm/instruction/insns_info.c +3 -0
  23. data/ext/cached/ruby-1.8.6/internal/vm/iseq/iseq_load.inc +21 -2
  24. data/ext/cached/{ruby-1.8.6/internal/method/method.h → ruby-1.8.7/internal/method/internal_method.h} +12 -0
  25. data/ext/cached/ruby-1.8.7/internal/module/getcfp.h +13 -0
  26. data/ext/cached/ruby-1.8.7/internal/node/global_entry.h +98 -0
  27. data/ext/cached/ruby-1.8.7/internal/node/node_type_descrip.c +42 -42
  28. data/ext/cached/ruby-1.8.7/internal/node/nodeinfo.c +276 -261
  29. data/ext/cached/ruby-1.8.7/internal/vm/instruction/insns_info.c +3 -0
  30. data/ext/cached/ruby-1.8.7/internal/vm/iseq/iseq_load.inc +21 -2
  31. data/ext/cached/{ruby-1.9.0/internal/method/method.h → ruby-1.9.1/internal/method/internal_method.h} +12 -0
  32. data/ext/cached/ruby-1.9.1/internal/module/classpath.c +12 -14
  33. data/ext/cached/ruby-1.9.1/internal/module/getcfp.h +25 -0
  34. data/ext/cached/ruby-1.9.1/internal/node/global_entry.h +86 -0
  35. data/ext/cached/ruby-1.9.1/internal/node/node_type_descrip.c +46 -48
  36. data/ext/cached/ruby-1.9.1/internal/node/nodeinfo.c +311 -412
  37. data/ext/cached/ruby-1.9.1/internal/vm/instruction/insns_info.c +3 -0
  38. data/ext/cached/ruby-1.9.1/internal/vm/iseq/iseq_load.inc +28 -6
  39. data/ext/cached/ruby-1.9.1/internal/yarv-headers/iseq.h +1 -0
  40. data/ext/cached/ruby-1.9.1/internal/yarv-headers/parse.h +6 -6
  41. data/ext/cached/ruby-1.9.1/internal/yarv-headers/revision.h +1 -1
  42. data/ext/cached/ruby-1.9.1/internal/yarv-headers/version.h +6 -5
  43. data/ext/cached/ruby-1.9.1/internal/yarv-headers/vm_core.h +3 -2
  44. data/ext/cached/ruby-1.9.1/internal/yarv-headers/vm_insnhelper.h +1 -0
  45. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/binding/block.h +0 -0
  46. data/ext/cached/{ruby-1.9.1/internal/method/method.h → ruby-1.9.2/internal/method/internal_method.h} +16 -5
  47. data/ext/cached/ruby-1.9.2/internal/module/classpath.c +40 -0
  48. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/module/classpath.h +0 -0
  49. data/ext/cached/ruby-1.9.2/internal/module/getcfp.h +25 -0
  50. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/node/block.h +0 -0
  51. data/ext/cached/ruby-1.9.2/internal/node/global_entry.h +93 -0
  52. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/node/node_type_descrip.c +44 -48
  53. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/node/nodeinfo.c +291 -439
  54. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/node/nodeinfo.h +0 -0
  55. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/proc/block.h +0 -0
  56. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/tag/tag.h +0 -0
  57. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/vm/instruction/insns_info.c +141 -64
  58. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/vm/instruction/insns_info.h +88 -80
  59. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/vm/iseq/insns_info.inc +77 -70
  60. data/ext/cached/ruby-1.9.2/internal/vm/iseq/iseq_load.inc +426 -0
  61. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/debug.h +1 -1
  62. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/dln.h +3 -3
  63. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/encdb.h +18 -2
  64. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/eval_intern.h +39 -28
  65. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/gc.h +7 -5
  66. data/ext/cached/ruby-1.9.2/internal/yarv-headers/id.h +170 -0
  67. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/iseq.h +20 -10
  68. data/ext/cached/ruby-1.9.2/internal/yarv-headers/method.h +103 -0
  69. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/node.h +14 -47
  70. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/parse.h +31 -148
  71. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/regenc.h +7 -3
  72. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/regint.h +16 -17
  73. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/regparse.h +4 -1
  74. data/ext/cached/ruby-1.9.2/internal/yarv-headers/revision.h +1 -0
  75. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/thread_pthread.h +4 -1
  76. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/thread_win32.h +1 -1
  77. data/ext/cached/ruby-1.9.2/internal/yarv-headers/timev.h +21 -0
  78. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/transcode_data.h +20 -10
  79. data/ext/cached/ruby-1.9.2/internal/yarv-headers/transdb.h +179 -0
  80. data/ext/cached/ruby-1.9.2/internal/yarv-headers/version.h +55 -0
  81. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/vm_core.h +127 -84
  82. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/vm_exec.h +4 -7
  83. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/vm_insnhelper.h +53 -36
  84. data/ext/cached/{ruby-1.9.0 → ruby-1.9.2}/internal/yarv-headers/vm_opts.h +1 -1
  85. data/ext/cached/ruby-1.9.3/internal/binding/block.h +12 -0
  86. data/ext/cached/ruby-1.9.3/internal/method/internal_method.h +32 -0
  87. data/ext/cached/ruby-1.9.3/internal/module/classpath.c +40 -0
  88. data/ext/cached/{ruby-1.8.0 → ruby-1.9.3}/internal/module/classpath.h +5 -2
  89. data/ext/cached/ruby-1.9.3/internal/module/getcfp.h +25 -0
  90. data/ext/cached/ruby-1.9.3/internal/node/block.h +12 -0
  91. data/ext/cached/ruby-1.9.3/internal/node/global_entry.h +93 -0
  92. data/ext/cached/{ruby-1.8.3 → ruby-1.9.3}/internal/node/node_type_descrip.c +48 -57
  93. data/ext/cached/{ruby-1.6.8 → ruby-1.9.3}/internal/node/nodeinfo.c +589 -740
  94. data/ext/cached/{ruby-1.8.0 → ruby-1.9.3}/internal/node/nodeinfo.h +4 -3
  95. data/ext/cached/ruby-1.9.3/internal/proc/block.h +12 -0
  96. data/ext/cached/ruby-1.9.3/internal/tag/tag.h +6 -0
  97. data/ext/cached/ruby-1.9.3/internal/vm/instruction/insns_info.c +6013 -0
  98. data/ext/cached/ruby-1.9.3/internal/vm/instruction/insns_info.h +899 -0
  99. data/ext/cached/ruby-1.9.3/internal/vm/iseq/insns_info.inc +707 -0
  100. data/ext/cached/ruby-1.9.3/internal/vm/iseq/iseq_load.inc +423 -0
  101. data/ext/cached/ruby-1.9.3/internal/yarv-headers/addr2line.h +21 -0
  102. data/ext/cached/ruby-1.9.3/internal/yarv-headers/atomic.h +56 -0
  103. data/ext/cached/ruby-1.9.3/internal/yarv-headers/constant.h +34 -0
  104. data/ext/cached/ruby-1.9.3/internal/yarv-headers/debug.h +41 -0
  105. data/ext/cached/ruby-1.9.3/internal/yarv-headers/dln.h +50 -0
  106. data/ext/cached/ruby-1.9.3/internal/yarv-headers/encdb.h +167 -0
  107. data/ext/cached/ruby-1.9.3/internal/yarv-headers/eval_intern.h +234 -0
  108. data/ext/cached/ruby-1.9.3/internal/yarv-headers/gc.h +98 -0
  109. data/ext/cached/ruby-1.9.3/internal/yarv-headers/id.h +175 -0
  110. data/ext/cached/ruby-1.9.3/internal/yarv-headers/internal.h +232 -0
  111. data/ext/cached/ruby-1.9.3/internal/yarv-headers/iseq.h +125 -0
  112. data/ext/cached/ruby-1.9.3/internal/yarv-headers/method.h +105 -0
  113. data/ext/cached/ruby-1.9.3/internal/yarv-headers/node.h +503 -0
  114. data/ext/cached/ruby-1.9.3/internal/yarv-headers/parse.h +186 -0
  115. data/ext/cached/ruby-1.9.3/internal/yarv-headers/regenc.h +219 -0
  116. data/ext/cached/ruby-1.9.3/internal/yarv-headers/regint.h +850 -0
  117. data/ext/cached/ruby-1.9.3/internal/yarv-headers/regparse.h +362 -0
  118. data/ext/cached/ruby-1.9.3/internal/yarv-headers/revision.h +1 -0
  119. data/ext/cached/ruby-1.9.3/internal/yarv-headers/thread_pthread.h +51 -0
  120. data/ext/cached/ruby-1.9.3/internal/yarv-headers/thread_win32.h +40 -0
  121. data/ext/cached/ruby-1.9.3/internal/yarv-headers/timev.h +21 -0
  122. data/ext/cached/ruby-1.9.3/internal/yarv-headers/transcode_data.h +117 -0
  123. data/ext/cached/ruby-1.9.3/internal/yarv-headers/transdb.h +189 -0
  124. data/ext/cached/ruby-1.9.3/internal/yarv-headers/version.h +52 -0
  125. data/ext/cached/ruby-1.9.3/internal/yarv-headers/vm_core.h +756 -0
  126. data/ext/cached/ruby-1.9.3/internal/yarv-headers/vm_exec.h +184 -0
  127. data/ext/cached/ruby-1.9.3/internal/yarv-headers/vm_insnhelper.h +220 -0
  128. data/ext/cached/ruby-1.9.3/internal/yarv-headers/vm_opts.h +51 -0
  129. data/ext/internal/binding/block.h +20 -0
  130. data/ext/internal/method/internal_method.h +5 -38
  131. data/ext/internal/method/internal_method.h.rpp +0 -7
  132. data/ext/internal/method/method.c +52 -32
  133. data/ext/internal/module/classpath.c +18 -13
  134. data/ext/internal/module/classpath.h +3 -3
  135. data/ext/internal/module/extconf.rb +3 -2
  136. data/ext/internal/module/getcfp.h +13 -0
  137. data/ext/internal/module/getcfp.h.rpp +44 -0
  138. data/ext/internal/module/module.c +58 -21
  139. data/ext/internal/node/block.h +20 -0
  140. data/ext/internal/node/extconf.rb +2 -0
  141. data/ext/internal/node/global_entry.h +69 -13
  142. data/ext/internal/node/global_entry.h.rpp +11 -2
  143. data/ext/internal/node/node.c +30 -3
  144. data/ext/internal/node/node_type_descrip.c +47 -38
  145. data/ext/internal/node/nodeinfo.c +622 -306
  146. data/ext/internal/node/nodeinfo.h +1 -4
  147. data/ext/internal/proc/block.h +20 -0
  148. data/ext/internal/tag/tag.h +10 -0
  149. data/ext/internal/thread/thread.c +9 -3
  150. data/ext/internal/vm/extconf.rb +1 -0
  151. data/ext/internal/vm/instruction/insns_info.c +3 -5974
  152. data/ext/internal/vm/instruction/insns_info.h +0 -878
  153. data/ext/internal/vm/iseq/extconf.rb +1 -0
  154. data/ext/internal/vm/iseq/iseq.c +38 -4
  155. data/ext/internal/vm/iseq/iseq_load.inc.rpp +23 -5
  156. data/ext/internal/vm/vm.c +28 -0
  157. data/lib/internal/classtree.rb +28 -0
  158. data/lib/internal/debug.rb +10 -2
  159. data/lib/internal/method/as_code.rb +25 -0
  160. data/lib/internal/method/as_expression.rb +2 -3
  161. data/lib/internal/method/origin.rb +29 -0
  162. data/lib/internal/method/signature.rb +5 -300
  163. data/lib/internal/method/signature/argument.rb +102 -0
  164. data/lib/internal/method/signature/iseq.rb +52 -0
  165. data/lib/internal/method/signature/node.rb +160 -0
  166. data/lib/internal/method/signature/signature.rb +23 -0
  167. data/lib/internal/proc/as_code.rb +2 -0
  168. data/lib/internal/proc/as_expression.rb +2 -0
  169. data/lib/internal/vm/bytedecoder.rb +5 -5
  170. data/lib/internal/vm/iseq/as_code.rb +2 -2
  171. data/lib/internal/vm/iseq/as_expression.rb +2 -2
  172. data/test/test_dump_method.rb +1 -1
  173. data/test/test_method.rb +21 -3
  174. data/test/test_node.rb +20 -4
  175. metadata +152 -155
  176. data/ext/cached/ruby-1.6.8/internal/binding/block.h +0 -35
  177. data/ext/cached/ruby-1.6.8/internal/method/method.h +0 -19
  178. data/ext/cached/ruby-1.6.8/internal/module/classpath.c +0 -3
  179. data/ext/cached/ruby-1.6.8/internal/module/classpath.h +0 -8
  180. data/ext/cached/ruby-1.6.8/internal/node/block.h +0 -35
  181. data/ext/cached/ruby-1.6.8/internal/node/global_entry.h +0 -15
  182. data/ext/cached/ruby-1.6.8/internal/node/node_type_descrip.c +0 -149
  183. data/ext/cached/ruby-1.6.8/internal/node/nodeinfo.h +0 -69
  184. data/ext/cached/ruby-1.6.8/internal/proc/block.h +0 -35
  185. data/ext/cached/ruby-1.6.8/internal/tag/tag.h +0 -15
  186. data/ext/cached/ruby-1.6.8/internal/vm/instruction/insns_info.c +0 -39
  187. data/ext/cached/ruby-1.6.8/internal/vm/instruction/insns_info.h +0 -21
  188. data/ext/cached/ruby-1.6.8/internal/vm/iseq/insns_info.inc +0 -12
  189. data/ext/cached/ruby-1.6.8/internal/vm/iseq/iseq_load.inc +0 -9
  190. data/ext/cached/ruby-1.8.0/internal/binding/block.h +0 -37
  191. data/ext/cached/ruby-1.8.0/internal/method/method.h +0 -19
  192. data/ext/cached/ruby-1.8.0/internal/module/classpath.c +0 -27
  193. data/ext/cached/ruby-1.8.0/internal/node/block.h +0 -37
  194. data/ext/cached/ruby-1.8.0/internal/node/global_entry.h +0 -10
  195. data/ext/cached/ruby-1.8.0/internal/node/node_type_descrip.c +0 -155
  196. data/ext/cached/ruby-1.8.0/internal/node/nodeinfo.c +0 -5744
  197. data/ext/cached/ruby-1.8.0/internal/proc/block.h +0 -37
  198. data/ext/cached/ruby-1.8.0/internal/tag/tag.h +0 -15
  199. data/ext/cached/ruby-1.8.0/internal/vm/instruction/insns_info.c +0 -39
  200. data/ext/cached/ruby-1.8.0/internal/vm/instruction/insns_info.h +0 -21
  201. data/ext/cached/ruby-1.8.0/internal/vm/iseq/insns_info.inc +0 -12
  202. data/ext/cached/ruby-1.8.0/internal/vm/iseq/iseq_load.inc +0 -9
  203. data/ext/cached/ruby-1.8.1/internal/binding/block.h +0 -31
  204. data/ext/cached/ruby-1.8.1/internal/method/method.h +0 -19
  205. data/ext/cached/ruby-1.8.1/internal/module/classpath.c +0 -27
  206. data/ext/cached/ruby-1.8.1/internal/module/classpath.h +0 -14
  207. data/ext/cached/ruby-1.8.1/internal/node/block.h +0 -31
  208. data/ext/cached/ruby-1.8.1/internal/node/global_entry.h +0 -10
  209. data/ext/cached/ruby-1.8.1/internal/node/node_type_descrip.c +0 -154
  210. data/ext/cached/ruby-1.8.1/internal/node/nodeinfo.c +0 -5736
  211. data/ext/cached/ruby-1.8.1/internal/node/nodeinfo.h +0 -69
  212. data/ext/cached/ruby-1.8.1/internal/proc/block.h +0 -31
  213. data/ext/cached/ruby-1.8.1/internal/tag/tag.h +0 -16
  214. data/ext/cached/ruby-1.8.1/internal/vm/instruction/insns_info.c +0 -39
  215. data/ext/cached/ruby-1.8.1/internal/vm/instruction/insns_info.h +0 -21
  216. data/ext/cached/ruby-1.8.1/internal/vm/iseq/insns_info.inc +0 -12
  217. data/ext/cached/ruby-1.8.1/internal/vm/iseq/iseq_load.inc +0 -9
  218. data/ext/cached/ruby-1.8.2/internal/binding/block.h +0 -32
  219. data/ext/cached/ruby-1.8.2/internal/method/method.h +0 -19
  220. data/ext/cached/ruby-1.8.2/internal/module/classpath.c +0 -45
  221. data/ext/cached/ruby-1.8.2/internal/module/classpath.h +0 -17
  222. data/ext/cached/ruby-1.8.2/internal/node/block.h +0 -32
  223. data/ext/cached/ruby-1.8.2/internal/node/global_entry.h +0 -10
  224. data/ext/cached/ruby-1.8.2/internal/node/node_type_descrip.c +0 -154
  225. data/ext/cached/ruby-1.8.2/internal/node/nodeinfo.c +0 -5736
  226. data/ext/cached/ruby-1.8.2/internal/node/nodeinfo.h +0 -69
  227. data/ext/cached/ruby-1.8.2/internal/proc/block.h +0 -32
  228. data/ext/cached/ruby-1.8.2/internal/tag/tag.h +0 -16
  229. data/ext/cached/ruby-1.8.2/internal/vm/instruction/insns_info.c +0 -39
  230. data/ext/cached/ruby-1.8.2/internal/vm/instruction/insns_info.h +0 -21
  231. data/ext/cached/ruby-1.8.2/internal/vm/iseq/insns_info.inc +0 -12
  232. data/ext/cached/ruby-1.8.2/internal/vm/iseq/iseq_load.inc +0 -9
  233. data/ext/cached/ruby-1.8.3/internal/binding/block.h +0 -32
  234. data/ext/cached/ruby-1.8.3/internal/module/classpath.c +0 -45
  235. data/ext/cached/ruby-1.8.3/internal/module/classpath.h +0 -17
  236. data/ext/cached/ruby-1.8.3/internal/node/block.h +0 -32
  237. data/ext/cached/ruby-1.8.3/internal/node/global_entry.h +0 -10
  238. data/ext/cached/ruby-1.8.3/internal/node/nodeinfo.c +0 -5736
  239. data/ext/cached/ruby-1.8.3/internal/node/nodeinfo.h +0 -69
  240. data/ext/cached/ruby-1.8.3/internal/proc/block.h +0 -32
  241. data/ext/cached/ruby-1.8.3/internal/tag/tag.h +0 -16
  242. data/ext/cached/ruby-1.8.3/internal/vm/instruction/insns_info.c +0 -39
  243. data/ext/cached/ruby-1.8.3/internal/vm/instruction/insns_info.h +0 -21
  244. data/ext/cached/ruby-1.8.3/internal/vm/iseq/insns_info.inc +0 -12
  245. data/ext/cached/ruby-1.8.3/internal/vm/iseq/iseq_load.inc +0 -9
  246. data/ext/cached/ruby-1.8.7/internal/method/method.h +0 -20
  247. data/ext/cached/ruby-1.9.0/internal/module/classpath.c +0 -42
  248. data/ext/cached/ruby-1.9.0/internal/node/global_entry.h +0 -10
  249. data/ext/cached/ruby-1.9.0/internal/vm/iseq/iseq_load.inc +0 -13
  250. data/ext/cached/ruby-1.9.0/internal/yarv-headers/id.h +0 -83
  251. data/ext/cached/ruby-1.9.0/internal/yarv-headers/revision.h +0 -1
  252. data/ext/cached/ruby-1.9.0/internal/yarv-headers/transdb.h +0 -67
  253. data/ext/cached/ruby-1.9.0/internal/yarv-headers/version.h +0 -57
  254. data/ext/internal/module/cfp.h +0 -13
@@ -0,0 +1,423 @@
1
+ #ifndef ruby_internal_iseq_load__inc_
2
+ #define ruby_internal_iseq_load__inc_
3
+
4
+ #ifdef HAVE_TYPE_STRUCT_RTYPEDDATA
5
+
6
+ static rb_data_type_t const * p_iseq_data_type;
7
+
8
+ static void init_iseq_data_type()
9
+ {
10
+ rb_proc_t * p;
11
+ VALUE body;
12
+
13
+ VALUE binding = rb_binding_new();
14
+ VALUE new_proc = rb_funcall(
15
+ rb_cObject, rb_intern("eval"), 2, rb_str_new2("proc { }"), binding);
16
+ GetProcPtr(new_proc, p);
17
+ body = p->block.iseq->self;
18
+
19
+ p_iseq_data_type = RTYPEDDATA_TYPE(body);
20
+ }
21
+
22
+ #else
23
+
24
+ #endif
25
+ #
26
+ static void
27
+ compile_data_free(struct iseq_compile_data *compile_data)
28
+ {
29
+ if (compile_data) {
30
+ struct iseq_compile_data_storage *cur, *next;
31
+ cur = compile_data->storage_head;
32
+ while (cur) {
33
+ next = cur->next;
34
+ ruby_xfree(cur);
35
+ cur = next;
36
+ }
37
+ ruby_xfree(compile_data);
38
+ }
39
+ }
40
+ static void
41
+ iseq_free(void *ptr)
42
+ {
43
+ rb_iseq_t *iseq;
44
+ RUBY_FREE_ENTER("iseq");
45
+
46
+ if (ptr) {
47
+ iseq = ptr;
48
+ if (!iseq->orig) {
49
+ /* It's possible that strings are freed */
50
+ if (0) {
51
+ RUBY_GC_INFO("%s @ %s\n", RSTRING_PTR(iseq->name),
52
+ RSTRING_PTR(iseq->filename));
53
+ }
54
+
55
+ if (iseq->iseq != iseq->iseq_encoded) {
56
+ RUBY_FREE_UNLESS_NULL(iseq->iseq_encoded);
57
+ }
58
+
59
+ RUBY_FREE_UNLESS_NULL(iseq->iseq);
60
+ RUBY_FREE_UNLESS_NULL(iseq->insn_info_table);
61
+ RUBY_FREE_UNLESS_NULL(iseq->local_table);
62
+ RUBY_FREE_UNLESS_NULL(iseq->ic_entries);
63
+ RUBY_FREE_UNLESS_NULL(iseq->catch_table);
64
+ RUBY_FREE_UNLESS_NULL(iseq->arg_opt_table);
65
+ compile_data_free(iseq->compile_data);
66
+ }
67
+ ruby_xfree(ptr);
68
+ }
69
+ RUBY_FREE_LEAVE("iseq");
70
+ }
71
+ static void
72
+ iseq_mark(void *ptr)
73
+ {
74
+ RUBY_MARK_ENTER("iseq");
75
+
76
+ if (ptr) {
77
+ rb_iseq_t *iseq = ptr;
78
+
79
+ RUBY_GC_INFO("%s @ %s\n", RSTRING_PTR(iseq->name), RSTRING_PTR(iseq->filename));
80
+ RUBY_MARK_UNLESS_NULL(iseq->mark_ary);
81
+ RUBY_MARK_UNLESS_NULL(iseq->name);
82
+ RUBY_MARK_UNLESS_NULL(iseq->filename);
83
+ RUBY_MARK_UNLESS_NULL(iseq->filepath);
84
+ RUBY_MARK_UNLESS_NULL((VALUE)iseq->cref_stack);
85
+ RUBY_MARK_UNLESS_NULL(iseq->klass);
86
+ RUBY_MARK_UNLESS_NULL(iseq->coverage);
87
+ #if 0
88
+ RUBY_MARK_UNLESS_NULL((VALUE)iseq->node);
89
+ RUBY_MARK_UNLESS_NULL(iseq->cached_special_block);
90
+ #endif
91
+ RUBY_MARK_UNLESS_NULL(iseq->orig);
92
+
93
+ if (iseq->compile_data != 0) {
94
+ struct iseq_compile_data *const compile_data = iseq->compile_data;
95
+ RUBY_MARK_UNLESS_NULL(compile_data->mark_ary);
96
+ RUBY_MARK_UNLESS_NULL(compile_data->err_info);
97
+ RUBY_MARK_UNLESS_NULL(compile_data->catch_table_ary);
98
+ }
99
+ }
100
+ RUBY_MARK_LEAVE("iseq");
101
+ }
102
+ static size_t
103
+ iseq_memsize(const void *ptr)
104
+ {
105
+ size_t size = sizeof(rb_iseq_t);
106
+ const rb_iseq_t *iseq;
107
+
108
+ if (ptr) {
109
+ iseq = ptr;
110
+ if (!iseq->orig) {
111
+ if (iseq->iseq != iseq->iseq_encoded) {
112
+ size += iseq->iseq_size * sizeof(VALUE);
113
+ }
114
+
115
+ size += iseq->iseq_size * sizeof(VALUE);
116
+ size += iseq->insn_info_size * sizeof(struct iseq_insn_info_entry);
117
+ size += iseq->local_table_size * sizeof(ID);
118
+ size += iseq->catch_table_size * sizeof(struct iseq_catch_table_entry);
119
+ size += iseq->arg_opts * sizeof(VALUE);
120
+ size += iseq->ic_size * sizeof(struct iseq_inline_cache_entry);
121
+
122
+ if (iseq->compile_data) {
123
+ struct iseq_compile_data_storage *cur;
124
+
125
+ cur = iseq->compile_data->storage_head;
126
+ while (cur) {
127
+ size += cur->size + sizeof(struct iseq_compile_data_storage);
128
+ cur = cur->next;
129
+ }
130
+ size += sizeof(struct iseq_compile_data);
131
+ }
132
+ }
133
+ }
134
+
135
+ return size;
136
+ }
137
+ static VALUE
138
+ iseq_alloc(VALUE klass)
139
+ {
140
+ rb_iseq_t *iseq;
141
+ return TypedData_Make_Struct(klass, rb_iseq_t, p_iseq_data_type, iseq);
142
+ }
143
+ static void
144
+ set_relation(rb_iseq_t *iseq, const VALUE parent)
145
+ {
146
+ const VALUE type = iseq->type;
147
+ rb_thread_t *th = GET_THREAD();
148
+
149
+ /* set class nest stack */
150
+ if (type == ISEQ_TYPE_TOP) {
151
+ /* toplevel is private */
152
+ iseq->cref_stack = NEW_BLOCK(rb_cObject);
153
+ iseq->cref_stack->nd_visi = NOEX_PRIVATE;
154
+ if (th->top_wrapper) {
155
+ NODE *cref = NEW_BLOCK(th->top_wrapper);
156
+ cref->nd_visi = NOEX_PRIVATE;
157
+ cref->nd_next = iseq->cref_stack;
158
+ iseq->cref_stack = cref;
159
+ }
160
+ }
161
+ else if (type == ISEQ_TYPE_METHOD || type == ISEQ_TYPE_CLASS) {
162
+ iseq->cref_stack = NEW_BLOCK(0); /* place holder */
163
+ }
164
+ else if (RTEST(parent)) {
165
+ rb_iseq_t *piseq;
166
+ GetISeqPtr(parent, piseq);
167
+ iseq->cref_stack = piseq->cref_stack;
168
+ }
169
+
170
+ if (type == ISEQ_TYPE_TOP ||
171
+ type == ISEQ_TYPE_METHOD || type == ISEQ_TYPE_CLASS) {
172
+ iseq->local_iseq = iseq;
173
+ }
174
+ else if (RTEST(parent)) {
175
+ rb_iseq_t *piseq;
176
+ GetISeqPtr(parent, piseq);
177
+ iseq->local_iseq = piseq->local_iseq;
178
+ }
179
+
180
+ if (RTEST(parent)) {
181
+ rb_iseq_t *piseq;
182
+ GetISeqPtr(parent, piseq);
183
+ iseq->parent_iseq = piseq;
184
+ }
185
+ }
186
+ static VALUE
187
+ prepare_iseq_build(rb_iseq_t *iseq,
188
+ VALUE name, VALUE filename, VALUE filepath, VALUE line_no,
189
+ VALUE parent, enum iseq_type type, VALUE block_opt,
190
+ const rb_compile_option_t *option)
191
+ {
192
+ OBJ_FREEZE(name);
193
+ OBJ_FREEZE(filename);
194
+
195
+ iseq->name = name;
196
+ iseq->filename = filename;
197
+ iseq->filepath = filepath;
198
+ iseq->line_no = (unsigned short)line_no; /* TODO: really enough? */
199
+ iseq->defined_method_id = 0;
200
+ iseq->mark_ary = rb_ary_tmp_new(3);
201
+ OBJ_UNTRUST(iseq->mark_ary);
202
+ RBASIC(iseq->mark_ary)->klass = 0;
203
+
204
+ iseq->type = type;
205
+ iseq->arg_rest = -1;
206
+ iseq->arg_block = -1;
207
+ iseq->klass = 0;
208
+
209
+ /*
210
+ * iseq->special_block_builder = GC_GUARDED_PTR_REF(block_opt);
211
+ * iseq->cached_special_block_builder = 0;
212
+ * iseq->cached_special_block = 0;
213
+ */
214
+
215
+ iseq->compile_data = ALLOC(struct iseq_compile_data);
216
+ MEMZERO(iseq->compile_data, struct iseq_compile_data, 1);
217
+ iseq->compile_data->err_info = Qnil;
218
+ iseq->compile_data->mark_ary = rb_ary_tmp_new(3);
219
+
220
+ iseq->compile_data->storage_head = iseq->compile_data->storage_current =
221
+ (struct iseq_compile_data_storage *)
222
+ ALLOC_N(char, INITIAL_ISEQ_COMPILE_DATA_STORAGE_BUFF_SIZE +
223
+ sizeof(struct iseq_compile_data_storage));
224
+
225
+ iseq->compile_data->catch_table_ary = rb_ary_new();
226
+ iseq->compile_data->storage_head->pos = 0;
227
+ iseq->compile_data->storage_head->next = 0;
228
+ iseq->compile_data->storage_head->size =
229
+ INITIAL_ISEQ_COMPILE_DATA_STORAGE_BUFF_SIZE;
230
+ iseq->compile_data->storage_head->buff =
231
+ (char *)(&iseq->compile_data->storage_head->buff + 1);
232
+ iseq->compile_data->option = option;
233
+ iseq->compile_data->last_coverable_line = -1;
234
+
235
+ set_relation(iseq, parent);
236
+
237
+ iseq->coverage = Qfalse;
238
+ if (!GET_THREAD()->parse_in_eval) {
239
+ VALUE coverages = rb_get_coverages();
240
+ if (RTEST(coverages)) {
241
+ iseq->coverage = rb_hash_lookup(coverages, filename);
242
+ if (NIL_P(iseq->coverage)) iseq->coverage = Qfalse;
243
+ }
244
+ }
245
+
246
+ return Qtrue;
247
+ }
248
+ static VALUE
249
+ cleanup_iseq_build(rb_iseq_t *iseq)
250
+ {
251
+ struct iseq_compile_data *data = iseq->compile_data;
252
+ VALUE err = data->err_info;
253
+ iseq->compile_data = 0;
254
+ compile_data_free(data);
255
+
256
+ if (RTEST(err)) {
257
+ rb_funcall2(err, rb_intern("set_backtrace"), 1, &iseq->filename);
258
+ rb_exc_raise(err);
259
+ }
260
+ return Qtrue;
261
+ }
262
+ static rb_compile_option_t COMPILE_OPTION_DEFAULT = {
263
+ OPT_INLINE_CONST_CACHE, /* int inline_const_cache; */
264
+ OPT_PEEPHOLE_OPTIMIZATION, /* int peephole_optimization; */
265
+ OPT_TAILCALL_OPTIMIZATION, /* int tailcall_optimization */
266
+ OPT_SPECIALISED_INSTRUCTION, /* int specialized_instruction; */
267
+ OPT_OPERANDS_UNIFICATION, /* int operands_unification; */
268
+ OPT_INSTRUCTIONS_UNIFICATION, /* int instructions_unification; */
269
+ OPT_STACK_CACHING, /* int stack_caching; */
270
+ OPT_TRACE_INSTRUCTION, /* int trace_instruction */
271
+ };
272
+ static const rb_compile_option_t COMPILE_OPTION_FALSE = {0};
273
+ static void
274
+ make_compile_option(rb_compile_option_t *option, VALUE opt)
275
+ {
276
+ if (opt == Qnil) {
277
+ *option = COMPILE_OPTION_DEFAULT;
278
+ }
279
+ else if (opt == Qfalse) {
280
+ *option = COMPILE_OPTION_FALSE;
281
+ }
282
+ else if (opt == Qtrue) {
283
+ memset(option, 1, sizeof(rb_compile_option_t));
284
+ }
285
+ else if (CLASS_OF(opt) == rb_cHash) {
286
+ *option = COMPILE_OPTION_DEFAULT;
287
+
288
+ #define SET_COMPILE_OPTION(o, h, mem) \
289
+ { VALUE flag = rb_hash_aref((h), ID2SYM(rb_intern(#mem))); \
290
+ if (flag == Qtrue) { (o)->mem = 1; } \
291
+ else if (flag == Qfalse) { (o)->mem = 0; } \
292
+ }
293
+ #define SET_COMPILE_OPTION_NUM(o, h, mem) \
294
+ { VALUE num = rb_hash_aref(opt, ID2SYM(rb_intern(#mem))); \
295
+ if (!NIL_P(num)) (o)->mem = NUM2INT(num); \
296
+ }
297
+ SET_COMPILE_OPTION(option, opt, inline_const_cache);
298
+ SET_COMPILE_OPTION(option, opt, peephole_optimization);
299
+ SET_COMPILE_OPTION(option, opt, tailcall_optimization);
300
+ SET_COMPILE_OPTION(option, opt, specialized_instruction);
301
+ SET_COMPILE_OPTION(option, opt, operands_unification);
302
+ SET_COMPILE_OPTION(option, opt, instructions_unification);
303
+ SET_COMPILE_OPTION(option, opt, stack_caching);
304
+ SET_COMPILE_OPTION(option, opt, trace_instruction);
305
+ SET_COMPILE_OPTION_NUM(option, opt, debug_level);
306
+ #undef SET_COMPILE_OPTION
307
+ #undef SET_COMPILE_OPTION_NUM
308
+ }
309
+ else {
310
+ rb_raise(rb_eTypeError, "Compile option must be Hash/true/false/nil");
311
+ }
312
+ }
313
+ static VALUE
314
+ make_compile_option_value(rb_compile_option_t *option)
315
+ {
316
+ VALUE opt = rb_hash_new();
317
+ #define SET_COMPILE_OPTION(o, h, mem) \
318
+ rb_hash_aset((h), ID2SYM(rb_intern(#mem)), (o)->mem ? Qtrue : Qfalse)
319
+ #define SET_COMPILE_OPTION_NUM(o, h, mem) \
320
+ rb_hash_aset((h), ID2SYM(rb_intern(#mem)), INT2NUM((o)->mem))
321
+ {
322
+ SET_COMPILE_OPTION(option, opt, inline_const_cache);
323
+ SET_COMPILE_OPTION(option, opt, peephole_optimization);
324
+ SET_COMPILE_OPTION(option, opt, tailcall_optimization);
325
+ SET_COMPILE_OPTION(option, opt, specialized_instruction);
326
+ SET_COMPILE_OPTION(option, opt, operands_unification);
327
+ SET_COMPILE_OPTION(option, opt, instructions_unification);
328
+ SET_COMPILE_OPTION(option, opt, stack_caching);
329
+ SET_COMPILE_OPTION_NUM(option, opt, debug_level);
330
+ }
331
+ #undef SET_COMPILE_OPTION
332
+ #undef SET_COMPILE_OPTION_NUM
333
+ return opt;
334
+ }
335
+ #define CHECK_ARRAY(v) rb_convert_type((v), T_ARRAY, "Array", "to_ary")
336
+ #define CHECK_STRING(v) rb_convert_type((v), T_STRING, "String", "to_str")
337
+ #define CHECK_SYMBOL(v) rb_convert_type((v), T_SYMBOL, "Symbol", "to_sym")
338
+ static inline VALUE CHECK_INTEGER(VALUE v) {(void)NUM2LONG(v); return v;}
339
+ static VALUE
340
+ iseq_load(VALUE self, VALUE data, VALUE parent, VALUE opt)
341
+ {
342
+ VALUE iseqval = iseq_alloc(self);
343
+
344
+ VALUE magic, version1, version2, format_type, misc;
345
+ VALUE name, filename, filepath, line_no;
346
+ VALUE type, body, locals, args, exception;
347
+
348
+ st_data_t iseq_type;
349
+ struct st_table *type_map = 0;
350
+ rb_iseq_t *iseq;
351
+ rb_compile_option_t option;
352
+ int i = 0;
353
+
354
+ /* [magic, major_version, minor_version, format_type, misc,
355
+ * name, filename, line_no,
356
+ * type, locals, args, exception_table, body]
357
+ */
358
+
359
+ data = CHECK_ARRAY(data);
360
+
361
+ magic = CHECK_STRING(rb_ary_entry(data, i++));
362
+ version1 = CHECK_INTEGER(rb_ary_entry(data, i++));
363
+ version2 = CHECK_INTEGER(rb_ary_entry(data, i++));
364
+ format_type = CHECK_INTEGER(rb_ary_entry(data, i++));
365
+ misc = rb_ary_entry(data, i++); /* TODO */
366
+
367
+ name = CHECK_STRING(rb_ary_entry(data, i++));
368
+ filename = CHECK_STRING(rb_ary_entry(data, i++));
369
+ filepath = rb_ary_entry(data, i++);
370
+ filepath = NIL_P(filepath) ? Qnil : CHECK_STRING(filepath);
371
+ line_no = CHECK_INTEGER(rb_ary_entry(data, i++));
372
+
373
+ type = CHECK_SYMBOL(rb_ary_entry(data, i++));
374
+ locals = CHECK_ARRAY(rb_ary_entry(data, i++));
375
+
376
+ args = rb_ary_entry(data, i++);
377
+ if (FIXNUM_P(args) || (args = CHECK_ARRAY(args))) {
378
+ /* */
379
+ }
380
+
381
+ exception = CHECK_ARRAY(rb_ary_entry(data, i++));
382
+ body = CHECK_ARRAY(rb_ary_entry(data, i++));
383
+
384
+ GetISeqPtr(iseqval, iseq);
385
+ iseq->self = iseqval;
386
+
387
+ if (type_map == 0) {
388
+ type_map = st_init_numtable();
389
+ st_insert(type_map, ID2SYM(rb_intern("top")), ISEQ_TYPE_TOP);
390
+ st_insert(type_map, ID2SYM(rb_intern("method")), ISEQ_TYPE_METHOD);
391
+ st_insert(type_map, ID2SYM(rb_intern("block")), ISEQ_TYPE_BLOCK);
392
+ st_insert(type_map, ID2SYM(rb_intern("class")), ISEQ_TYPE_CLASS);
393
+ st_insert(type_map, ID2SYM(rb_intern("rescue")), ISEQ_TYPE_RESCUE);
394
+ st_insert(type_map, ID2SYM(rb_intern("ensure")), ISEQ_TYPE_ENSURE);
395
+ st_insert(type_map, ID2SYM(rb_intern("eval")), ISEQ_TYPE_EVAL);
396
+ st_insert(type_map, ID2SYM(rb_intern("main")), ISEQ_TYPE_MAIN);
397
+ st_insert(type_map, ID2SYM(rb_intern("defined_guard")), ISEQ_TYPE_DEFINED_GUARD);
398
+ }
399
+
400
+ if (st_lookup(type_map, type, &iseq_type) == 0) {
401
+ const char *typename = rb_id2name(type);
402
+ if (typename)
403
+ rb_raise(rb_eTypeError, "unsupport type: :%s", typename);
404
+ else
405
+ rb_raise(rb_eTypeError, "unsupport type: %p", (void *)type);
406
+ }
407
+
408
+ if (parent == Qnil) {
409
+ parent = 0;
410
+ }
411
+
412
+ make_compile_option(&option, opt);
413
+ prepare_iseq_build(iseq, name, filename, filepath, line_no,
414
+ parent, (enum iseq_type)iseq_type, 0, &option);
415
+
416
+ rb_iseq_build_from_ary(iseq, locals, args, exception, body);
417
+
418
+ cleanup_iseq_build(iseq);
419
+ return iseqval;
420
+ }
421
+
422
+ #endif
423
+
@@ -0,0 +1,21 @@
1
+ /**********************************************************************
2
+
3
+ addr2line.h -
4
+
5
+ $Author$
6
+
7
+ Copyright (C) 2010 Shinichiro Hamaji
8
+
9
+ **********************************************************************/
10
+
11
+ #ifndef RUBY_ADDR2LINE_H
12
+ #define RUBY_ADDR2LINE_H
13
+
14
+ #ifdef USE_ELF
15
+
16
+ void
17
+ rb_dump_backtrace_with_lines(int num_traces, void **traces, char **syms);
18
+
19
+ #endif /* USE_ELF */
20
+
21
+ #endif /* RUBY_ADDR2LINE_H */
@@ -0,0 +1,56 @@
1
+ #ifndef RUBY_ATOMIC_H
2
+ #define RUBY_ATOMIC_H
3
+
4
+ #ifdef _WIN32
5
+ #if defined _MSC_VER && _MSC_VER > 1200
6
+ #pragma intrinsic(_InterlockedOr)
7
+ #endif
8
+ typedef LONG rb_atomic_t;
9
+
10
+ # define ATOMIC_SET(var, val) InterlockedExchange(&(var), (val))
11
+ # define ATOMIC_INC(var) InterlockedIncrement(&(var))
12
+ # define ATOMIC_DEC(var) InterlockedDecrement(&(var))
13
+ #if defined __GNUC__
14
+ # define ATOMIC_OR(var, val) __asm__("lock\n\t" "orl\t%1, %0" : "=m"(var) : "Ir"(val))
15
+ #elif defined _MSC_VER && _MSC_VER <= 1200
16
+ # define ATOMIC_OR(var, val) rb_w32_atomic_or(&(var), (val))
17
+ static inline void
18
+ rb_w32_atomic_or(volatile rb_atomic_t *var, rb_atomic_t val)
19
+ {
20
+ #ifdef _M_IX86
21
+ __asm mov eax, var;
22
+ __asm mov ecx, val;
23
+ __asm lock or [eax], ecx;
24
+ #else
25
+ #error unsupported architecture
26
+ #endif
27
+ }
28
+ #else
29
+ # define ATOMIC_OR(var, val) _InterlockedOr(&(var), (val))
30
+ #endif
31
+ # define ATOMIC_EXCHANGE(var, val) InterlockedExchange(&(var), (val))
32
+
33
+ #elif defined HAVE_GCC_ATOMIC_BUILTINS
34
+ /* @shyouhei hack to support atomic operations in case of gcc. Gcc
35
+ * has its own pseudo-insns to support them. See info, or
36
+ * http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html */
37
+
38
+ typedef unsigned int rb_atomic_t; /* Anything OK */
39
+ # define ATOMIC_SET(var, val) __sync_lock_test_and_set(&(var), (val))
40
+ # define ATOMIC_INC(var) __sync_fetch_and_add(&(var), 1)
41
+ # define ATOMIC_DEC(var) __sync_fetch_and_sub(&(var), 1)
42
+ # define ATOMIC_OR(var, val) __sync_or_and_fetch(&(var), (val))
43
+ # define ATOMIC_EXCHANGE(var, val) __sync_lock_test_and_set(&(var), (val))
44
+
45
+ #else
46
+ typedef int rb_atomic_t;
47
+ extern rb_atomic_t ruby_atomic_exchange(rb_atomic_t *ptr, rb_atomic_t val);
48
+
49
+ # define ATOMIC_SET(var, val) ((var) = (val))
50
+ # define ATOMIC_INC(var) (++(var))
51
+ # define ATOMIC_DEC(var) (--(var))
52
+ # define ATOMIC_OR(var, val) ((var) |= (val))
53
+ # define ATOMIC_EXCHANGE(var, val) ruby_atomic_exchange(&(var), (val))
54
+ #endif
55
+
56
+ #endif /* RUBY_ATOMIC_H */