nodewrap 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (236) hide show
  1. data/COPYING +59 -0
  2. data/LEGAL +6 -0
  3. data/LGPL +515 -0
  4. data/LICENSE +6 -0
  5. data/README +31 -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/MANIFEST +11 -0
  13. data/ext/builtins.h +25 -0
  14. data/ext/cached/ruby-1.6.3/COPYING +340 -0
  15. data/ext/cached/ruby-1.6.3/README +3 -0
  16. data/ext/cached/ruby-1.6.3/classpath.c +3 -0
  17. data/ext/cached/ruby-1.6.3/classpath.h +8 -0
  18. data/ext/cached/ruby-1.6.3/evalinfo.h +62 -0
  19. data/ext/cached/ruby-1.6.3/global_entry.h +15 -0
  20. data/ext/cached/ruby-1.6.3/insns_info.c +40 -0
  21. data/ext/cached/ruby-1.6.3/insns_info.h +19 -0
  22. data/ext/cached/ruby-1.6.3/node_type_descrip.c +150 -0
  23. data/ext/cached/ruby-1.6.3/nodeinfo.c +3182 -0
  24. data/ext/cached/ruby-1.6.3/nodeinfo.h +66 -0
  25. data/ext/cached/ruby-1.6.4/COPYING +340 -0
  26. data/ext/cached/ruby-1.6.4/README +3 -0
  27. data/ext/cached/ruby-1.6.4/classpath.c +3 -0
  28. data/ext/cached/ruby-1.6.4/classpath.h +8 -0
  29. data/ext/cached/ruby-1.6.4/evalinfo.h +62 -0
  30. data/ext/cached/ruby-1.6.4/global_entry.h +15 -0
  31. data/ext/cached/ruby-1.6.4/insns_info.c +40 -0
  32. data/ext/cached/ruby-1.6.4/insns_info.h +19 -0
  33. data/ext/cached/ruby-1.6.4/node_type_descrip.c +150 -0
  34. data/ext/cached/ruby-1.6.4/nodeinfo.c +3182 -0
  35. data/ext/cached/ruby-1.6.4/nodeinfo.h +66 -0
  36. data/ext/cached/ruby-1.6.5/COPYING +56 -0
  37. data/ext/cached/ruby-1.6.5/GPL +340 -0
  38. data/ext/cached/ruby-1.6.5/LEGAL +325 -0
  39. data/ext/cached/ruby-1.6.5/LGPL +504 -0
  40. data/ext/cached/ruby-1.6.5/README +3 -0
  41. data/ext/cached/ruby-1.6.5/classpath.c +3 -0
  42. data/ext/cached/ruby-1.6.5/classpath.h +8 -0
  43. data/ext/cached/ruby-1.6.5/evalinfo.h +63 -0
  44. data/ext/cached/ruby-1.6.5/global_entry.h +15 -0
  45. data/ext/cached/ruby-1.6.5/insns_info.c +40 -0
  46. data/ext/cached/ruby-1.6.5/insns_info.h +19 -0
  47. data/ext/cached/ruby-1.6.5/node_type_descrip.c +150 -0
  48. data/ext/cached/ruby-1.6.5/nodeinfo.c +3182 -0
  49. data/ext/cached/ruby-1.6.5/nodeinfo.h +66 -0
  50. data/ext/cached/ruby-1.6.7/COPYING +56 -0
  51. data/ext/cached/ruby-1.6.7/GPL +340 -0
  52. data/ext/cached/ruby-1.6.7/LEGAL +308 -0
  53. data/ext/cached/ruby-1.6.7/LGPL +504 -0
  54. data/ext/cached/ruby-1.6.7/README +3 -0
  55. data/ext/cached/ruby-1.6.7/classpath.c +3 -0
  56. data/ext/cached/ruby-1.6.7/classpath.h +8 -0
  57. data/ext/cached/ruby-1.6.7/evalinfo.h +63 -0
  58. data/ext/cached/ruby-1.6.7/global_entry.h +15 -0
  59. data/ext/cached/ruby-1.6.7/insns_info.c +40 -0
  60. data/ext/cached/ruby-1.6.7/insns_info.h +19 -0
  61. data/ext/cached/ruby-1.6.7/node_type_descrip.c +150 -0
  62. data/ext/cached/ruby-1.6.7/nodeinfo.c +3182 -0
  63. data/ext/cached/ruby-1.6.7/nodeinfo.h +66 -0
  64. data/ext/cached/ruby-1.6.8/COPYING +56 -0
  65. data/ext/cached/ruby-1.6.8/GPL +340 -0
  66. data/ext/cached/ruby-1.6.8/LEGAL +308 -0
  67. data/ext/cached/ruby-1.6.8/LGPL +504 -0
  68. data/ext/cached/ruby-1.6.8/README +3 -0
  69. data/ext/cached/ruby-1.6.8/classpath.c +3 -0
  70. data/ext/cached/ruby-1.6.8/classpath.h +8 -0
  71. data/ext/cached/ruby-1.6.8/evalinfo.h +63 -0
  72. data/ext/cached/ruby-1.6.8/global_entry.h +15 -0
  73. data/ext/cached/ruby-1.6.8/insns_info.c +40 -0
  74. data/ext/cached/ruby-1.6.8/insns_info.h +19 -0
  75. data/ext/cached/ruby-1.6.8/node_type_descrip.c +150 -0
  76. data/ext/cached/ruby-1.6.8/nodeinfo.c +3182 -0
  77. data/ext/cached/ruby-1.6.8/nodeinfo.h +66 -0
  78. data/ext/cached/ruby-1.8.0/COPYING +56 -0
  79. data/ext/cached/ruby-1.8.0/GPL +340 -0
  80. data/ext/cached/ruby-1.8.0/LEGAL +371 -0
  81. data/ext/cached/ruby-1.8.0/LGPL +504 -0
  82. data/ext/cached/ruby-1.8.0/README +3 -0
  83. data/ext/cached/ruby-1.8.0/classpath.c +27 -0
  84. data/ext/cached/ruby-1.8.0/classpath.h +14 -0
  85. data/ext/cached/ruby-1.8.0/evalinfo.h +65 -0
  86. data/ext/cached/ruby-1.8.0/global_entry.h +10 -0
  87. data/ext/cached/ruby-1.8.0/insns_info.c +40 -0
  88. data/ext/cached/ruby-1.8.0/insns_info.h +19 -0
  89. data/ext/cached/ruby-1.8.0/node_type_descrip.c +150 -0
  90. data/ext/cached/ruby-1.8.0/nodeinfo.c +3199 -0
  91. data/ext/cached/ruby-1.8.0/nodeinfo.h +66 -0
  92. data/ext/cached/ruby-1.8.1/COPYING +56 -0
  93. data/ext/cached/ruby-1.8.1/GPL +340 -0
  94. data/ext/cached/ruby-1.8.1/LEGAL +371 -0
  95. data/ext/cached/ruby-1.8.1/LGPL +504 -0
  96. data/ext/cached/ruby-1.8.1/README +3 -0
  97. data/ext/cached/ruby-1.8.1/classpath.c +27 -0
  98. data/ext/cached/ruby-1.8.1/classpath.h +14 -0
  99. data/ext/cached/ruby-1.8.1/evalinfo.h +59 -0
  100. data/ext/cached/ruby-1.8.1/global_entry.h +10 -0
  101. data/ext/cached/ruby-1.8.1/insns_info.c +40 -0
  102. data/ext/cached/ruby-1.8.1/insns_info.h +19 -0
  103. data/ext/cached/ruby-1.8.1/node_type_descrip.c +150 -0
  104. data/ext/cached/ruby-1.8.1/nodeinfo.c +3199 -0
  105. data/ext/cached/ruby-1.8.1/nodeinfo.h +66 -0
  106. data/ext/cached/ruby-1.8.2/COPYING +56 -0
  107. data/ext/cached/ruby-1.8.2/GPL +340 -0
  108. data/ext/cached/ruby-1.8.2/LEGAL +371 -0
  109. data/ext/cached/ruby-1.8.2/LGPL +504 -0
  110. data/ext/cached/ruby-1.8.2/README +3 -0
  111. data/ext/cached/ruby-1.8.2/classpath.c +45 -0
  112. data/ext/cached/ruby-1.8.2/classpath.h +17 -0
  113. data/ext/cached/ruby-1.8.2/evalinfo.h +60 -0
  114. data/ext/cached/ruby-1.8.2/global_entry.h +10 -0
  115. data/ext/cached/ruby-1.8.2/insns_info.c +40 -0
  116. data/ext/cached/ruby-1.8.2/insns_info.h +19 -0
  117. data/ext/cached/ruby-1.8.2/node_type_descrip.c +150 -0
  118. data/ext/cached/ruby-1.8.2/nodeinfo.c +3199 -0
  119. data/ext/cached/ruby-1.8.2/nodeinfo.h +66 -0
  120. data/ext/cached/ruby-1.8.3/COPYING +56 -0
  121. data/ext/cached/ruby-1.8.3/GPL +340 -0
  122. data/ext/cached/ruby-1.8.3/LEGAL +370 -0
  123. data/ext/cached/ruby-1.8.3/LGPL +504 -0
  124. data/ext/cached/ruby-1.8.3/README +3 -0
  125. data/ext/cached/ruby-1.8.3/classpath.c +45 -0
  126. data/ext/cached/ruby-1.8.3/classpath.h +17 -0
  127. data/ext/cached/ruby-1.8.3/evalinfo.h +61 -0
  128. data/ext/cached/ruby-1.8.3/global_entry.h +10 -0
  129. data/ext/cached/ruby-1.8.3/insns_info.c +40 -0
  130. data/ext/cached/ruby-1.8.3/insns_info.h +19 -0
  131. data/ext/cached/ruby-1.8.3/node_type_descrip.c +150 -0
  132. data/ext/cached/ruby-1.8.3/nodeinfo.c +3199 -0
  133. data/ext/cached/ruby-1.8.3/nodeinfo.h +66 -0
  134. data/ext/cached/ruby-1.8.4/COPYING +56 -0
  135. data/ext/cached/ruby-1.8.4/GPL +340 -0
  136. data/ext/cached/ruby-1.8.4/LEGAL +370 -0
  137. data/ext/cached/ruby-1.8.4/LGPL +504 -0
  138. data/ext/cached/ruby-1.8.4/README +3 -0
  139. data/ext/cached/ruby-1.8.4/classpath.c +45 -0
  140. data/ext/cached/ruby-1.8.4/classpath.h +17 -0
  141. data/ext/cached/ruby-1.8.4/evalinfo.h +61 -0
  142. data/ext/cached/ruby-1.8.4/global_entry.h +10 -0
  143. data/ext/cached/ruby-1.8.4/insns_info.c +40 -0
  144. data/ext/cached/ruby-1.8.4/insns_info.h +19 -0
  145. data/ext/cached/ruby-1.8.4/node_type_descrip.c +150 -0
  146. data/ext/cached/ruby-1.8.4/nodeinfo.c +3199 -0
  147. data/ext/cached/ruby-1.8.4/nodeinfo.h +66 -0
  148. data/ext/cached/ruby-1.8.5/COPYING +56 -0
  149. data/ext/cached/ruby-1.8.5/GPL +340 -0
  150. data/ext/cached/ruby-1.8.5/LEGAL +370 -0
  151. data/ext/cached/ruby-1.8.5/LGPL +504 -0
  152. data/ext/cached/ruby-1.8.5/README +3 -0
  153. data/ext/cached/ruby-1.8.5/classpath.c +45 -0
  154. data/ext/cached/ruby-1.8.5/classpath.h +17 -0
  155. data/ext/cached/ruby-1.8.5/evalinfo.h +61 -0
  156. data/ext/cached/ruby-1.8.5/global_entry.h +10 -0
  157. data/ext/cached/ruby-1.8.5/insns_info.c +40 -0
  158. data/ext/cached/ruby-1.8.5/insns_info.h +19 -0
  159. data/ext/cached/ruby-1.8.5/node_type_descrip.c +150 -0
  160. data/ext/cached/ruby-1.8.5/nodeinfo.c +3187 -0
  161. data/ext/cached/ruby-1.8.5/nodeinfo.h +64 -0
  162. data/ext/cached/ruby-1.8.6/COPYING +56 -0
  163. data/ext/cached/ruby-1.8.6/GPL +340 -0
  164. data/ext/cached/ruby-1.8.6/LEGAL +370 -0
  165. data/ext/cached/ruby-1.8.6/LGPL +504 -0
  166. data/ext/cached/ruby-1.8.6/README +3 -0
  167. data/ext/cached/ruby-1.8.6/classpath.c +45 -0
  168. data/ext/cached/ruby-1.8.6/classpath.h +17 -0
  169. data/ext/cached/ruby-1.8.6/evalinfo.h +61 -0
  170. data/ext/cached/ruby-1.8.6/global_entry.h +10 -0
  171. data/ext/cached/ruby-1.8.6/insns_info.c +40 -0
  172. data/ext/cached/ruby-1.8.6/insns_info.h +19 -0
  173. data/ext/cached/ruby-1.8.6/node_type_descrip.c +150 -0
  174. data/ext/cached/ruby-1.8.6/nodeinfo.c +3187 -0
  175. data/ext/cached/ruby-1.8.6/nodeinfo.h +64 -0
  176. data/ext/classpath.c +42 -0
  177. data/ext/classpath.c.rpp +28 -0
  178. data/ext/classpath.h +17 -0
  179. data/ext/classpath.h.rpp +35 -0
  180. data/ext/evalinfo.h +21 -0
  181. data/ext/evalinfo.h.rpp +49 -0
  182. data/ext/extconf.rb +68 -0
  183. data/ext/generate.rb +201 -0
  184. data/ext/generate_cached.rb +49 -0
  185. data/ext/global_entry.h +10 -0
  186. data/ext/global_entry.h.rpp +25 -0
  187. data/ext/insns_info.c +6079 -0
  188. data/ext/insns_info.c.rpp +210 -0
  189. data/ext/insns_info.h +819 -0
  190. data/ext/insns_info.h.rpp +50 -0
  191. data/ext/node_type_descrip.c +148 -0
  192. data/ext/node_type_descrip.c.rpp +72 -0
  193. data/ext/node_type_descrip.h +17 -0
  194. data/ext/node_type_descrip.rb +169 -0
  195. data/ext/nodeinfo.c +3164 -0
  196. data/ext/nodeinfo.c.rpp +519 -0
  197. data/ext/nodeinfo.h +67 -0
  198. data/ext/nodeinfo.h.rpp +27 -0
  199. data/ext/nodewrap.c +2576 -0
  200. data/ext/nodewrap.h +20 -0
  201. data/ext/read_node_h.rb +19 -0
  202. data/ext/ruby_source_dir.rb +15 -0
  203. data/ext/ruby_version.h +12 -0
  204. data/ext/ruby_version_code.rb +16 -0
  205. data/ext/rubypp.rb +97 -0
  206. data/ext/test.rb +15 -0
  207. data/generate_rdoc.rb +33 -0
  208. data/install.rb +1022 -0
  209. data/lib/as_code.rb +347 -0
  210. data/lib/as_expression.rb +657 -0
  211. data/lib/bytedecoder.rb +848 -0
  212. data/lib/classtree.rb +54 -0
  213. data/lib/methodsig.rb +266 -0
  214. data/lib/node_to_a.rb +34 -0
  215. data/lib/nodepp.rb +71 -0
  216. data/lib/nwdebug.rb +18 -0
  217. data/lib/nwdump.rb +53 -0
  218. data/lib/nwobfusc.rb +57 -0
  219. data/lib/procsig.rb +182 -0
  220. data/lib/test.rb +8 -0
  221. data/metaconfig +10 -0
  222. data/post-config.rb +53 -0
  223. data/post-setup.rb +9 -0
  224. data/pre-config.rb +1 -0
  225. data/run_tests.rb +48 -0
  226. data/test/expression_samples.rb +158 -0
  227. data/test/node_samples.rb +122 -0
  228. data/test/test.rb +39 -0
  229. data/test/test2.rb +7 -0
  230. data/test/test3.rb +5 -0
  231. data/test/test4.rb +5 -0
  232. data/test/test_as_code.rb +249 -0
  233. data/test/test_as_expression.rb +222 -0
  234. data/test/test_methodsig.rb +189 -0
  235. data/test/test_nodewrap.rb +369 -0
  236. metadata +286 -0
@@ -0,0 +1,50 @@
1
+ #ifndef insns_info__h_
2
+ #define insns_info__h_
3
+
4
+ #include "ruby_version.h"
5
+
6
+ #ifdef RUBY_HAS_YARV
7
+
8
+ #include "vm.h"
9
+ #include "ruby.h"
10
+ #include "yarvcore.h"
11
+
12
+ #ruby <<END
13
+ require 'ruby_source_dir'
14
+ insns_location = "#{RUBY_SOURCE_DIR}/insns.inc"
15
+ insns_info_location = "#{RUBY_SOURCE_DIR}/insns_info.inc"
16
+ iseq_c_location = "#{RUBY_SOURCE_DIR}/iseq.c"
17
+
18
+ [ insns_location, insns_info_location ].each do |file|
19
+ next if not File.exist?(file)
20
+
21
+ File.open(file) do |input|
22
+ while (line = input.gets) != nil do
23
+ puts line
24
+ end
25
+ end
26
+ end
27
+
28
+ [ iseq_c_location ].each do |file|
29
+ next if not File.exist?(file)
30
+
31
+ File.open(file) do |input|
32
+ while (line = input.gets) != nil do
33
+ line.chomp!
34
+ if line =~ /^make_compile_option/ then
35
+ puts 'void'
36
+ puts "#{line};"
37
+ end
38
+ end
39
+ end
40
+ end
41
+ nil
42
+ END
43
+
44
+ extern VALUE instruction_class[YARV_MAX_INSTRUCTION_SIZE];
45
+ void define_instruction_subclasses(VALUE rb_cInstruction);
46
+
47
+ #endif
48
+
49
+ #endif
50
+
@@ -0,0 +1,148 @@
1
+ #include "node_type_descrip.h"
2
+ #include "version.h"
3
+
4
+ Node_Type_Descrip node_type_descrips_unsorted[] = {
5
+ { NODE_BLOCK, NEN_HEAD, NEN_NEXT, NEN_NONE, "BLOCK" },
6
+ { NODE_POSTEXE, NEN_NONE, NEN_NONE, NEN_NONE, "POSTEXE" },
7
+ { NODE_BEGIN, NEN_BODY, NEN_NONE, NEN_NONE, "BEGIN" },
8
+ { NODE_MATCH, NEN_HEAD, NEN_NONE, NEN_NONE, "MATCH" },
9
+ { NODE_MATCH2, NEN_RECV, NEN_VALUE, NEN_NONE, "MATCH2" },
10
+ { NODE_MATCH3, NEN_RECV, NEN_VALUE, NEN_NONE, "MATCH3" },
11
+ { NODE_OPT_N, NEN_BODY, NEN_NONE, NEN_NONE, "OPT_N" },
12
+ { NODE_SELF, NEN_NONE, NEN_NONE, NEN_NONE, "SELF" },
13
+ { NODE_NIL, NEN_NONE, NEN_NONE, NEN_NONE, "NIL" },
14
+ { NODE_TRUE, NEN_NONE, NEN_NONE, NEN_NONE, "TRUE" },
15
+ { NODE_FALSE, NEN_NONE, NEN_NONE, NEN_NONE, "FALSE" },
16
+ { NODE_IF, NEN_BODY, NEN_ELSE, NEN_COND, "IF" },
17
+ { NODE_WHEN, NEN_HEAD, NEN_BODY, NEN_NEXT, "WHEN" },
18
+ { NODE_CASE, NEN_HEAD, NEN_BODY, NEN_NEXT, "CASE" },
19
+ { NODE_WHILE, NEN_COND, NEN_BODY, NEN_STATE, "WHILE" },
20
+ { NODE_UNTIL, NEN_COND, NEN_BODY, NEN_STATE, "UNTIL" },
21
+ { NODE_BLOCK_PASS, NEN_BODY, NEN_ITER, NEN_NONE, "BLOCK_PASS" },
22
+ { NODE_ITER, NEN_VAR, NEN_BODY, NEN_ITER, "ITER" },
23
+ { NODE_FOR, NEN_VAR, NEN_BODY, NEN_ITER, "FOR" },
24
+ { NODE_BREAK, NEN_STTS, NEN_NONE, NEN_NONE, "BREAK" },
25
+ { NODE_NEXT, NEN_STTS, NEN_NONE, NEN_NONE, "NEXT" },
26
+ { NODE_REDO, NEN_NONE, NEN_NONE, NEN_NONE, "REDO" },
27
+ { NODE_RETRY, NEN_NONE, NEN_NONE, NEN_NONE, "RETRY" },
28
+ { NODE_YIELD, NEN_STTS, NEN_NONE, NEN_NONE, "YIELD" },
29
+ { NODE_RESCUE, NEN_HEAD, NEN_RESQ, NEN_ELSE, "RESCUE" },
30
+ { NODE_RESBODY, NEN_HEAD, NEN_RESQ, NEN_ENSR, "RESBODY" },
31
+ { NODE_ENSURE, NEN_HEAD, NEN_ENSR, NEN_NONE, "ENSURE" },
32
+ { NODE_AND, NEN_1ST, NEN_2ND, NEN_NONE, "AND" },
33
+ { NODE_OR, NEN_1ST, NEN_2ND, NEN_NONE, "OR" },
34
+ { NODE_NOT, NEN_BODY, NEN_NONE, NEN_NONE, "NOT" },
35
+ { NODE_DOT2, NEN_BEG, NEN_END, NEN_STATE, "DOT2" },
36
+ { NODE_DOT3, NEN_BEG, NEN_END, NEN_STATE, "DOT3" },
37
+ { NODE_FLIP2, NEN_CNT, NEN_BEG, NEN_END, "FLIP2" },
38
+ { NODE_FLIP3, NEN_CNT, NEN_BEG, NEN_END, "FLIP3" },
39
+ { NODE_RETURN, NEN_STTS, NEN_NONE, NEN_NONE, "RETURN" },
40
+ { NODE_ARGS, NEN_CNT, NEN_REST, NEN_OPT, "ARGS" },
41
+ { NODE_ARGSCAT, NEN_HEAD, NEN_BODY, NEN_NONE, "ARGSCAT" },
42
+ { NODE_ARGSPUSH, NEN_HEAD, NEN_BODY, NEN_NONE, "ARGSPUSH" },
43
+ { NODE_CALL, NEN_RECV, NEN_ARGS, NEN_MID, "CALL" },
44
+ { NODE_FCALL, NEN_ARGS, NEN_MID, NEN_NONE, "FCALL" },
45
+ { NODE_VCALL, NEN_MID, NEN_NONE, NEN_NONE, "VCALL" },
46
+ { NODE_SUPER, NEN_ARGS, NEN_NONE, NEN_NONE, "SUPER" },
47
+ { NODE_ZSUPER, NEN_ARGS, NEN_NONE, NEN_NONE, "ZSUPER" },
48
+ { NODE_SCOPE, NEN_RVAL, NEN_TBL, NEN_NEXT, "SCOPE" },
49
+ { NODE_OP_ASGN1, NEN_RECV, NEN_ARGS, NEN_MID, "OP_ASGN1" },
50
+ { NODE_OP_ASGN2, NEN_VID, NEN_RECV, NEN_VALUE, "OP_ASGN2" },
51
+ { NODE_OP_ASGN_AND, NEN_HEAD, NEN_VALUE, NEN_NONE, "OP_ASGN_AND" },
52
+ { NODE_OP_ASGN_OR, NEN_HEAD, NEN_VALUE, NEN_NONE, "OP_ASGN_OR" },
53
+ { NODE_MASGN, NEN_VALUE, NEN_HEAD, NEN_ARGS, "MASGN" },
54
+ { NODE_LASGN, NEN_VID, NEN_VALUE, NEN_CNT, "LASGN" },
55
+ { NODE_DASGN, NEN_VALUE, NEN_VID, NEN_NONE, "DASGN" },
56
+ { NODE_DASGN_CURR, NEN_VALUE, NEN_VID, NEN_NONE, "DASGN_CURR" },
57
+ { NODE_GASGN, NEN_VID, NEN_VALUE, NEN_ENTRY, "GASGN" },
58
+ { NODE_IASGN, NEN_VID, NEN_VALUE, NEN_NONE, "IASGN" },
59
+ { NODE_CDECL, NEN_VID, NEN_VALUE, NEN_NONE, "CDECL" },
60
+ { NODE_CVDECL, NEN_VALUE, NEN_VID, NEN_NONE, "CVDECL" },
61
+ { NODE_CVASGN, NEN_VALUE, NEN_VID, NEN_NONE, "CVASGN" },
62
+ { NODE_LVAR, NEN_CNT, NEN_VID, NEN_NONE, "LVAR" },
63
+ { NODE_DVAR, NEN_VID, NEN_NONE, NEN_NONE, "DVAR" },
64
+ { NODE_GVAR, NEN_VID, NEN_ENTRY, NEN_NONE, "GVAR" },
65
+ { NODE_IVAR, NEN_VID, NEN_NONE, NEN_NONE, "IVAR" },
66
+ { NODE_CONST, NEN_VID, NEN_NONE, NEN_NONE, "CONST" },
67
+ { NODE_CVAR, NEN_VID, NEN_NONE, NEN_NONE, "CVAR" },
68
+ { NODE_BLOCK_ARG, NEN_CNT, NEN_NONE, NEN_NONE, "BLOCK_ARG" },
69
+ { NODE_COLON2, NEN_HEAD, NEN_MID, NEN_NONE, "COLON2" },
70
+ { NODE_COLON3, NEN_MID, NEN_NONE, NEN_NONE, "COLON3" },
71
+ { NODE_NTH_REF, NEN_NTH, NEN_CNT, NEN_NONE, "NTH_REF" },
72
+ { NODE_BACK_REF, NEN_NTH, NEN_CNT, NEN_NONE, "BACK_REF" },
73
+ { NODE_HASH, NEN_HEAD, NEN_NONE, NEN_NONE, "HASH" },
74
+ { NODE_ZARRAY, NEN_NONE, NEN_NONE, NEN_NONE, "ZARRAY" },
75
+ { NODE_ARRAY, NEN_ALEN, NEN_HEAD, NEN_NEXT, "ARRAY" },
76
+ { NODE_STR, NEN_LIT, NEN_NONE, NEN_NONE, "STR" },
77
+ { NODE_DREGX, NEN_LIT, NEN_NEXT, NEN_CFLAG, "DREGX" },
78
+ { NODE_DREGX_ONCE, NEN_LIT, NEN_NEXT, NEN_CFLAG, "DREGX_ONCE" },
79
+ { NODE_DSTR, NEN_LIT, NEN_NEXT, NEN_NONE, "DSTR" },
80
+ { NODE_DXSTR, NEN_LIT, NEN_NEXT, NEN_NONE, "DXSTR" },
81
+ { NODE_XSTR, NEN_LIT, NEN_NONE, NEN_NONE, "XSTR" },
82
+ #if defined(C_ALLOCA) || RUBY_VERSION_CODE >= 190
83
+ { NODE_ALLOCA, NEN_LIT, NEN_VALUE, NEN_CNT, "ALLOCA" },
84
+ #endif
85
+ { NODE_LIT, NEN_LIT, NEN_NONE, NEN_NONE, "LIT" },
86
+ { NODE_ATTRSET, NEN_VID, NEN_NONE, NEN_NONE, "ATTRSET" },
87
+ { NODE_DEFN, NEN_DEFN, NEN_MID, NEN_NOEX, "DEFN" },
88
+ { NODE_DEFS, NEN_DEFN, NEN_RECV, NEN_MID, "DEFS" },
89
+ { NODE_UNDEF, NEN_MID, NEN_NONE, NEN_NONE, "UNDEF" },
90
+ { NODE_ALIAS, NEN_1ST, NEN_2ND, NEN_NONE, "ALIAS" },
91
+ { NODE_VALIAS, NEN_1ST, NEN_2ND, NEN_NONE, "VALIAS" },
92
+ { NODE_SCLASS, NEN_RECV, NEN_BODY, NEN_NONE, "SCLASS" },
93
+ { NODE_DEFINED, NEN_HEAD, NEN_NONE, NEN_NONE, "DEFINED" },
94
+ { NODE_IFUNC, NEN_CFNC, NEN_TVAL, NEN_ARGC, "IFUNC" },
95
+ { NODE_CFUNC, NEN_CFNC, NEN_TVAL, NEN_ARGC, "CFUNC" },
96
+ { NODE_CREF, NEN_CLSS, NEN_NEXT, NEN_BODY, "CREF" },
97
+ { NODE_BMETHOD, NEN_CVAL, NEN_NONE, NEN_NONE, "BMETHOD" },
98
+ { NODE_MEMO, NEN_LIT, NEN_TVAL, NEN_NONE, "MEMO" },
99
+ { NODE_EVSTR, NEN_BODY, NEN_NONE, NEN_NONE, "EVSTR" },
100
+ { NODE_METHOD, NEN_BODY, NEN_CLSS, NEN_NOEX, "METHOD" },
101
+ { NODE_FBODY, NEN_BODY, NEN_OID, NEN_CNT, "FBODY" },
102
+ { NODE_CLASS, NEN_SUPER, NEN_CPATH, NEN_BODY, "CLASS" },
103
+ { NODE_MODULE, NEN_CPATH, NEN_BODY, NEN_NONE, "MODULE" },
104
+ { NODE_DSYM, NEN_LIT, NEN_NEXT, NEN_NONE, "DSYM" },
105
+ { NODE_ATTRASGN, NEN_MID, NEN_RECV, NEN_ARGS, "ATTRASGN" },
106
+ { NODE_LAST, NEN_NONE, NEN_NONE, NEN_NONE, "LAST" },
107
+ };
108
+
109
+ static Node_Type_Descrip * node_type_descrips[NODE_LAST];
110
+ static int node_type_descrips_initialized = 0;
111
+
112
+ static void init_node_type_descrips()
113
+ {
114
+ if(!node_type_descrips_initialized)
115
+ {
116
+ Node_Type_Descrip * descrip;
117
+ memset(node_type_descrips, 0, sizeof(node_type_descrips));
118
+ for(descrip = node_type_descrips_unsorted;
119
+ descrip->nt != NODE_LAST;
120
+ ++descrip)
121
+ {
122
+ if(node_type_descrips[descrip->nt])
123
+ {
124
+ rb_raise(rb_eRuntimeError, "duplicate entry for %d\n", descrip->nt);
125
+ }
126
+ else
127
+ {
128
+ node_type_descrips[descrip->nt] = descrip;
129
+ }
130
+ }
131
+ node_type_descrips_initialized = 1;
132
+ }
133
+ }
134
+
135
+ /* Given a node, find out the types of the three elements it contains */
136
+ Node_Type_Descrip const * node_type_descrip(enum node_type nt)
137
+ {
138
+ init_node_type_descrips();
139
+ if(node_type_descrips[nt])
140
+ {
141
+ return node_type_descrips[nt];
142
+ }
143
+ else
144
+ {
145
+ rb_raise(rb_eArgError, "Unknown node type %d", nt);
146
+ }
147
+ }
148
+
@@ -0,0 +1,72 @@
1
+ #include "node_type_descrip.h"
2
+ #include "version.h"
3
+
4
+ Node_Type_Descrip node_type_descrips_unsorted[] = {
5
+ #ruby <<END
6
+ require 'node_type_descrip'
7
+ NODE_TYPE_DESCRIPS.each do |descrip|
8
+ name = descrip.name
9
+ node1 = descrip.node1
10
+ node2 = descrip.node2
11
+ node3 = descrip.node3
12
+
13
+ if name == 'ALLOCA' then
14
+ puts <<-END
15
+ #if defined(C_ALLOCA) || RUBY_VERSION_CODE >= 190
16
+ END
17
+ end
18
+
19
+ puts <<-END
20
+ { NODE_#{name}, NEN_#{node1}, NEN_#{node2}, NEN_#{node3}, "#{name}" },
21
+ END
22
+
23
+ if name == 'ALLOCA' then
24
+ puts <<-END
25
+ #endif
26
+ END
27
+ end
28
+ end
29
+ nil
30
+ END
31
+ };
32
+
33
+ static Node_Type_Descrip * node_type_descrips[NODE_LAST];
34
+ static int node_type_descrips_initialized = 0;
35
+
36
+ static void init_node_type_descrips()
37
+ {
38
+ if(!node_type_descrips_initialized)
39
+ {
40
+ Node_Type_Descrip * descrip;
41
+ memset(node_type_descrips, 0, sizeof(node_type_descrips));
42
+ for(descrip = node_type_descrips_unsorted;
43
+ descrip->nt != NODE_LAST;
44
+ ++descrip)
45
+ {
46
+ if(node_type_descrips[descrip->nt])
47
+ {
48
+ rb_raise(rb_eRuntimeError, "duplicate entry for %d\n", descrip->nt);
49
+ }
50
+ else
51
+ {
52
+ node_type_descrips[descrip->nt] = descrip;
53
+ }
54
+ }
55
+ node_type_descrips_initialized = 1;
56
+ }
57
+ }
58
+
59
+ /* Given a node, find out the types of the three elements it contains */
60
+ Node_Type_Descrip const * node_type_descrip(enum node_type nt)
61
+ {
62
+ init_node_type_descrips();
63
+ if(node_type_descrips[nt])
64
+ {
65
+ return node_type_descrips[nt];
66
+ }
67
+ else
68
+ {
69
+ rb_raise(rb_eArgError, "Unknown node type %d", nt);
70
+ }
71
+ }
72
+
@@ -0,0 +1,17 @@
1
+ #ifndef node_type_descrip__h
2
+ #define node_type_descrip__h
3
+
4
+ #include "nodeinfo.h"
5
+
6
+ typedef struct {
7
+ enum node_type nt;
8
+ enum Node_Elem_Name n1;
9
+ enum Node_Elem_Name n2;
10
+ enum Node_Elem_Name n3;
11
+ char const * name;
12
+ } Node_Type_Descrip;
13
+
14
+ Node_Type_Descrip const * node_type_descrip(enum node_type nt);
15
+
16
+ #endif
17
+
@@ -0,0 +1,169 @@
1
+ require 'ruby_version_code'
2
+ require 'ruby_source_dir'
3
+
4
+ NODE_TYPE_DESCRIPS = [
5
+ [ 'BLOCK' , 'HEAD' , 'NEXT' , 'NONE' ],
6
+ [ 'POSTEXE' , 'NONE' , 'NONE' , 'NONE' ],
7
+ [ 'BEGIN' , 'BODY' , 'NONE' , 'NONE' ],
8
+ [ 'MATCH' , 'HEAD' , 'NONE' , 'NONE' ],
9
+ [ 'MATCH2' , 'RECV' , 'VALUE' , 'NONE' ],
10
+ [ 'MATCH3' , 'RECV' , 'VALUE' , 'NONE' ],
11
+ [ 'OPT_N' , 'BODY' , 'NONE' , 'NONE' ],
12
+ [ 'SELF' , 'NONE' , 'NONE' , 'NONE' ],
13
+ [ 'NIL' , 'NONE' , 'NONE' , 'NONE' ],
14
+ [ 'TRUE' , 'NONE' , 'NONE' , 'NONE' ],
15
+ [ 'FALSE' , 'NONE' , 'NONE' , 'NONE' ],
16
+ [ 'IF' , 'BODY' , 'ELSE' , 'COND' ],
17
+ [ 'WHEN' , 'HEAD' , 'BODY' , 'NEXT' ],
18
+ [ 'CASE' , 'HEAD' , 'BODY' , 'NEXT' ],
19
+ [ 'WHILE' , 'COND' , 'BODY' , 'STATE' ],
20
+ [ 'UNTIL' , 'COND' , 'BODY' , 'STATE' ],
21
+ [ 'BLOCK_PASS' , 'BODY' , 'ITER' , 'NONE' ],
22
+ [ 'ITER' , 'VAR' , 'BODY' , 'ITER' ],
23
+ [ 'FOR' , 'VAR' , 'BODY' , 'ITER' ],
24
+ [ 'BREAK' , 'STTS' , 'NONE' , 'NONE' ],
25
+ [ 'NEXT' , 'STTS' , 'NONE' , 'NONE' ],
26
+ [ 'REDO' , 'NONE' , 'NONE' , 'NONE' ],
27
+ [ 'RETRY' , 'NONE' , 'NONE' , 'NONE' ],
28
+ [ 'YIELD' , 'STTS' , 'NONE' , 'NONE' ],
29
+ [ 'RESCUE' , 'HEAD' , 'RESQ' , 'ELSE' ],
30
+ [ 'RESBODY' , 'HEAD' , 'RESQ' , 'ENSR' ],
31
+ [ 'ENSURE' , 'HEAD' , 'ENSR' , 'NONE' ],
32
+ [ 'AND' , '1ST' , '2ND' , 'NONE' ],
33
+ [ 'OR' , '1ST' , '2ND' , 'NONE' ],
34
+ [ 'NOT' , 'BODY' , 'NONE' , 'NONE' ],
35
+ [ 'DOT2' , 'BEG' , 'END' , 'STATE' ],
36
+ [ 'DOT3' , 'BEG' , 'END' , 'STATE' ],
37
+ [ 'FLIP2' , 'CNT' , 'BEG' , 'END' ],
38
+ [ 'FLIP3' , 'CNT' , 'BEG' , 'END' ],
39
+ [ 'RETURN' , 'STTS' , 'NONE' , 'NONE' ],
40
+ [ 'ARGS' , 'CNT' , 'REST' , 'OPT' ],
41
+ [ 'ARGSCAT' , 'HEAD' , 'BODY' , 'NONE' ],
42
+ [ 'ARGSPUSH' , 'HEAD' , 'BODY' , 'NONE' ],
43
+ [ 'CALL' , 'RECV' , 'ARGS' , 'MID' ],
44
+ [ 'FCALL' , 'ARGS' , 'MID' , 'NONE' ],
45
+ [ 'VCALL' , 'MID' , 'NONE' , 'NONE' ],
46
+ [ 'SUPER' , 'ARGS' , 'NONE' , 'NONE' ],
47
+ [ 'ZSUPER' , 'ARGS' , 'NONE' , 'NONE' ],
48
+ # rval holds an object, not a node
49
+ [ 'SCOPE' , 'RVAL' , 'TBL' , 'NEXT' ],
50
+ [ 'OP_ASGN1' , 'RECV' , 'ARGS' , 'MID' ],
51
+ [ 'OP_ASGN2' , 'VID' , 'RECV' , 'VALUE' ],
52
+ [ 'OP_ASGN_AND' , 'HEAD' , 'VALUE' , 'NONE' ],
53
+ [ 'OP_ASGN_OR' , 'HEAD' , 'VALUE' , 'NONE' ],
54
+ [ 'MASGN' , 'VALUE' , 'HEAD' , 'ARGS' ],
55
+ [ 'LASGN' , 'VID' , 'VALUE' , 'CNT' ],
56
+ [ 'DASGN' , 'VALUE' , 'VID' , 'NONE' ],
57
+ [ 'DASGN_CURR' , 'VALUE' , 'VID' , 'NONE' ],
58
+ [ 'GASGN' , 'VID' , 'VALUE' , 'ENTRY' ],
59
+ [ 'IASGN' , 'VID' , 'VALUE' , 'NONE' ],
60
+ [ 'CDECL' , 'VID' , 'VALUE' , 'NONE' ],
61
+ [ 'CVDECL' , 'VALUE' , 'VID' , 'NONE' ],
62
+ [ 'CVASGN' , 'VALUE' , 'VID' , 'NONE' ],
63
+ [ 'LVAR' , 'CNT' , 'VID' , 'NONE' ],
64
+ [ 'DVAR' , 'VID' , 'NONE' , 'NONE' ],
65
+ [ 'GVAR' , 'VID' , 'ENTRY' , 'NONE' ],
66
+ [ 'IVAR' , 'VID' , 'NONE' , 'NONE' ],
67
+ [ 'CONST' , 'VID' , 'NONE' , 'NONE' ],
68
+ [ 'CVAR' , 'VID' , 'NONE' , 'NONE' ],
69
+ [ 'BLOCK_ARG' , 'CNT' , 'NONE' , 'NONE' ],
70
+ [ 'COLON2' , 'HEAD' , 'MID' , 'NONE' ],
71
+ [ 'COLON3' , 'MID' , 'NONE' , 'NONE' ],
72
+ [ 'NTH_REF' , 'NTH' , 'CNT' , 'NONE' ],
73
+ [ 'BACK_REF' , 'NTH' , 'CNT' , 'NONE' ],
74
+ [ 'HASH' , 'HEAD' , 'NONE' , 'NONE' ],
75
+ [ 'ZARRAY' , 'NONE' , 'NONE' , 'NONE' ],
76
+ [ 'ARRAY' , 'ALEN' , 'HEAD' , 'NEXT' ],
77
+ [ 'STR' , 'LIT' , 'NONE' , 'NONE' ],
78
+ [ 'DREGX' , 'LIT' , 'NEXT' , 'CFLAG' ],
79
+ [ 'DREGX_ONCE' , 'LIT' , 'NEXT' , 'CFLAG' ],
80
+ [ 'DSTR' , 'LIT' , 'NEXT' , 'NONE' ],
81
+ [ 'DXSTR' , 'LIT' , 'NEXT' , 'NONE' ],
82
+ [ 'XSTR' , 'LIT' , 'NONE' , 'NONE' ],
83
+ [ 'ALLOCA' , 'LIT' , 'VALUE' , 'CNT' ],
84
+ [ 'LIT' , 'LIT' , 'NONE' , 'NONE' ],
85
+ [ 'ATTRSET' , 'VID' , 'NONE' , 'NONE' ],
86
+ [ 'DEFN' , 'DEFN' , 'MID' , 'NOEX' ],
87
+ [ 'DEFS' , 'DEFN' , 'RECV' , 'MID' ],
88
+ [ 'UNDEF' , 'MID' , 'NONE' , 'NONE' ],
89
+ [ 'ALIAS' , '1ST' , '2ND' , 'NONE' ],
90
+ [ 'VALIAS' , '1ST' , '2ND' , 'NONE' ],
91
+ [ 'SCLASS' , 'RECV' , 'BODY' , 'NONE' ],
92
+ [ 'DEFINED' , 'HEAD' , 'NONE' , 'NONE' ],
93
+ [ 'IFUNC' , 'CFNC' , 'TVAL' , 'ARGC' ],
94
+ [ 'CFUNC' , 'CFNC' , 'TVAL' , 'ARGC' ],
95
+ [ 'CREF' , 'CLSS' , 'NEXT' , 'BODY' ],
96
+ [ 'BMETHOD' , 'CVAL' , 'NONE' , 'NONE' ],
97
+ [ 'MEMO' , 'LIT' , 'TVAL' , 'NONE' ],
98
+ ]
99
+ if RUBY_VERSION_CODE < 180 then
100
+ # (0, 180)
101
+ NODE_TYPE_DESCRIPS.concat [
102
+ [ 'EVSTR' , 'LIT' , 'NONE' , 'NONE' ],
103
+ ]
104
+ else
105
+ # [180, oo)
106
+ NODE_TYPE_DESCRIPS.concat [
107
+ [ 'EVSTR' , 'BODY' , 'NONE' , 'NONE' ],
108
+ ]
109
+ end
110
+ if RUBY_VERSION_CODE < 190 then
111
+ # (0, 190)
112
+ NODE_TYPE_DESCRIPS.concat [
113
+ [ 'DMETHOD' , 'CVAL' , 'NONE' , 'NONE' ],
114
+ [ 'NEWLINE' , 'NTH' , 'NEXT' , 'NONE' ],
115
+ [ 'METHOD' , 'NOEX' , 'BODY' , 'NONE' ],
116
+ [ 'FBODY' , 'ORIG' , 'MID' , 'HEAD' ],
117
+ ]
118
+ else
119
+ # [190, oo)
120
+ NODE_TYPE_DESCRIPS.concat [
121
+ [ 'METHOD' , 'BODY' , 'CLSS' , 'NOEX' ],
122
+ [ 'FBODY' , 'BODY' , 'OID' , 'CNT' ],
123
+ ]
124
+ end
125
+ if RUBY_VERSION_CODE < 180 then
126
+ # (0, 180)
127
+ NODE_TYPE_DESCRIPS.concat [
128
+ [ 'CVAR2' , 'VID' , 'NONE' , 'NONE' ],
129
+ [ 'RESTARGS' , 'HEAD' , 'NONE' , 'NONE' ],
130
+ [ 'CLASS' , 'SUPER' , 'CNAME' , 'BODY' ],
131
+ [ 'MODULE' , 'CNAME' , 'BODY' , 'NONE' ],
132
+ ]
133
+ if RUBY_VERSION_CODE >= 170 then
134
+ # [170, oo)
135
+ NODE_TYPE_DESCRIPS.concat [
136
+ [ 'RESTARY' , 'HEAD' , 'NONE' , 'NONE' ],
137
+ [ 'REXPAND' , 'HEAD' , 'NONE' , 'NONE' ],
138
+ [ 'REGX' , 'CFLAG' , 'NONE' , 'NONE' ],
139
+ ]
140
+ end
141
+ else # RUBY_VERSION_CODE >= 180
142
+ # [180, oo)
143
+ NODE_TYPE_DESCRIPS.concat [
144
+ [ 'CLASS' , 'SUPER' , 'CPATH' , 'BODY' ],
145
+ [ 'MODULE' , 'CPATH' , 'BODY' , 'NONE' ],
146
+ [ 'DSYM' , 'LIT' , 'NEXT' , 'NONE' ],
147
+ [ 'ATTRASGN' , 'MID' , 'RECV' , 'ARGS' ],
148
+ ]
149
+ end
150
+
151
+
152
+ # *** MUST BE LAST ***
153
+ NODE_TYPE_DESCRIPS.concat [
154
+ [ 'LAST' , 'NONE' , 'NONE' , 'NONE' ],
155
+ ]
156
+
157
+
158
+ Node_Type_Descrip = Struct.new(:name, :node1, :node2, :node3)
159
+
160
+ NODE_TYPE_DESCRIPS.map! { |x| Node_Type_Descrip.new(*x) }
161
+
162
+ NEN_TO_NODE_TYPE = {}
163
+ NODE_TYPE_DESCRIPS.each do |descrip|
164
+ [descrip.node1, descrip.node2, descrip.node3].each do |nen|
165
+ NEN_TO_NODE_TYPE[nen] ||= []
166
+ NEN_TO_NODE_TYPE[nen] << descrip.name
167
+ end
168
+ end
169
+