nodewrap 0.5.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 (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,3164 @@
1
+ #include "nodeinfo.h"
2
+ #include "version.h"
3
+ #include "global_entry.h"
4
+ #include "builtins.h"
5
+
6
+ static int is_flip_state(ID id)
7
+ {
8
+ if(id == 0)
9
+ {
10
+ return 1;
11
+ }
12
+ #if RUBY_VERSION_CODE >= 180
13
+ if(!rb_is_local_id(id))
14
+ {
15
+ return 1;
16
+ }
17
+ #endif
18
+ return 0;
19
+ }
20
+
21
+ static VALUE variable_names(ID * tbl)
22
+ {
23
+ if(tbl)
24
+ {
25
+ size_t j;
26
+ VALUE arr = rb_ary_new();
27
+ /* A tbl contains the names of local variables. The first
28
+ * element is the size of the table. The next two elements
29
+ * are $_ and $~. The rest of the elements are the names of
30
+ * the variables themselves.
31
+ */
32
+ for(j = 3; j <= tbl[0]; ++j)
33
+ {
34
+ if(is_flip_state(tbl[j]))
35
+ {
36
+ /* flip state */
37
+ rb_ary_push(arr, Qnil);
38
+ }
39
+ else
40
+ {
41
+ rb_ary_push(arr, ID2SYM(tbl[j]));
42
+ }
43
+ }
44
+ return arr;
45
+ }
46
+ else
47
+ {
48
+ return Qnil;
49
+ }
50
+ }
51
+
52
+ /* Every node contains three elements. This function takes any one of
53
+ * those elements, converts it to a Ruby object that can be dumped
54
+ * (since nodes can't be dumped), and puts the resulting object into
55
+ * node_hash.
56
+ */
57
+ VALUE dump_node_elem(enum Node_Elem_Name nen, NODE * n, VALUE node_hash)
58
+ {
59
+ switch(nen)
60
+ {
61
+ case NEN_NONE:
62
+ return Qnil;
63
+ case NEN_1ST:
64
+ if(n->nd_1st)
65
+ {
66
+ dump_node_or_iseq_to_hash((VALUE)n->nd_1st, node_hash);
67
+ return node_id(n->nd_1st);
68
+ }
69
+ else
70
+ {
71
+ return Qnil;
72
+ }
73
+ case NEN_2ND:
74
+ if(n->nd_2nd)
75
+ {
76
+ dump_node_or_iseq_to_hash((VALUE)n->nd_2nd, node_hash);
77
+ return node_id(n->nd_2nd);
78
+ }
79
+ else
80
+ {
81
+ return Qnil;
82
+ }
83
+ case NEN_AID:
84
+ if(n->nd_aid == 0)
85
+ {
86
+ return Qnil;
87
+ }
88
+ else
89
+ {
90
+ return ID2SYM(n->nd_aid);
91
+ }
92
+ case NEN_ALEN:
93
+ {
94
+ return LONG2NUM((long)n->nd_alen);
95
+ }
96
+ case NEN_ARGC:
97
+ {
98
+ return LONG2NUM((long)n->nd_argc);
99
+ }
100
+ case NEN_ARGS:
101
+ if(n->nd_args)
102
+ {
103
+ dump_node_or_iseq_to_hash((VALUE)n->nd_args, node_hash);
104
+ return node_id(n->nd_args);
105
+ }
106
+ else
107
+ {
108
+ return Qnil;
109
+ }
110
+ case NEN_BEG:
111
+ if(n->nd_beg)
112
+ {
113
+ dump_node_or_iseq_to_hash((VALUE)n->nd_beg, node_hash);
114
+ return node_id(n->nd_beg);
115
+ }
116
+ else
117
+ {
118
+ return Qnil;
119
+ }
120
+ case NEN_BODY:
121
+ if(n->nd_body)
122
+ {
123
+ dump_node_or_iseq_to_hash((VALUE)n->nd_body, node_hash);
124
+ return node_id(n->nd_body);
125
+ }
126
+ else
127
+ {
128
+ return Qnil;
129
+ }
130
+ case NEN_CFLAG:
131
+ {
132
+ return LONG2NUM((long)n->nd_cflag);
133
+ }
134
+ case NEN_CFNC:
135
+ /* rb_funcall(rb_cObject, rb_intern("pp"), wrap_node(n), 0); */
136
+ rb_raise(rb_eArgError, "Cannot dump cfunc");
137
+ case NEN_CLSS:
138
+ switch(TYPE(n->nd_clss))
139
+ {
140
+ case T_CLASS:
141
+ case T_MODULE:
142
+ {
143
+ /* When dumping a class, we dump just the name (otherwise we'd
144
+ * get multiple copies of the class each time we load a method
145
+ * on the other side).
146
+ */
147
+ VALUE klass = (VALUE)n->nd_clss;
148
+ VALUE path;
149
+ if(FL_TEST(klass, FL_SINGLETON))
150
+ {
151
+ VALUE singleton = rb_iv_get(klass, "__attached__");
152
+ path = rb_class_path(singleton);
153
+ }
154
+ else
155
+ {
156
+ path = rb_class_path(klass);
157
+ if(STR2CSTR(path)[0] == '#')
158
+ {
159
+ rb_raise(rb_eArgError, "cannot dump anonymous class");
160
+ }
161
+ }
162
+ return rb_assoc_new(
163
+ INT2NUM(((struct RBasic *)(n->nd_clss))->flags),
164
+ path);
165
+ }
166
+
167
+ default:
168
+ /* TODO: would like to dump flags, not type */
169
+ return rb_assoc_new(
170
+ INT2NUM(TYPE((VALUE)n->nd_clss)),
171
+ (VALUE)n->nd_clss);
172
+ }
173
+ case NEN_CNT:
174
+ {
175
+ return LONG2NUM((long)n->nd_cnt);
176
+ }
177
+ case NEN_COND:
178
+ if(n->nd_cond)
179
+ {
180
+ dump_node_or_iseq_to_hash((VALUE)n->nd_cond, node_hash);
181
+ return node_id(n->nd_cond);
182
+ }
183
+ else
184
+ {
185
+ return Qnil;
186
+ }
187
+ case NEN_CPATH:
188
+ if(n->nd_cpath)
189
+ {
190
+ dump_node_or_iseq_to_hash((VALUE)n->nd_cpath, node_hash);
191
+ return node_id(n->nd_cpath);
192
+ }
193
+ else
194
+ {
195
+ return Qnil;
196
+ }
197
+ case NEN_CVAL:
198
+ switch(TYPE(n->nd_cval))
199
+ {
200
+ case T_CLASS:
201
+ case T_MODULE:
202
+ {
203
+ /* When dumping a class, we dump just the name (otherwise we'd
204
+ * get multiple copies of the class each time we load a method
205
+ * on the other side).
206
+ */
207
+ VALUE klass = (VALUE)n->nd_cval;
208
+ VALUE path;
209
+ if(FL_TEST(klass, FL_SINGLETON))
210
+ {
211
+ VALUE singleton = rb_iv_get(klass, "__attached__");
212
+ path = rb_class_path(singleton);
213
+ }
214
+ else
215
+ {
216
+ path = rb_class_path(klass);
217
+ if(STR2CSTR(path)[0] == '#')
218
+ {
219
+ rb_raise(rb_eArgError, "cannot dump anonymous class");
220
+ }
221
+ }
222
+ return rb_assoc_new(
223
+ INT2NUM(((struct RBasic *)(n->nd_cval))->flags),
224
+ path);
225
+ }
226
+
227
+ default:
228
+ /* TODO: would like to dump flags, not type */
229
+ return rb_assoc_new(
230
+ INT2NUM(TYPE((VALUE)n->nd_cval)),
231
+ (VALUE)n->nd_cval);
232
+ }
233
+ case NEN_DEFN:
234
+ if(n->nd_defn)
235
+ {
236
+ dump_node_or_iseq_to_hash((VALUE)n->nd_defn, node_hash);
237
+ return node_id(n->nd_defn);
238
+ }
239
+ else
240
+ {
241
+ return Qnil;
242
+ }
243
+ case NEN_ELSE:
244
+ if(n->nd_else)
245
+ {
246
+ dump_node_or_iseq_to_hash((VALUE)n->nd_else, node_hash);
247
+ return node_id(n->nd_else);
248
+ }
249
+ else
250
+ {
251
+ return Qnil;
252
+ }
253
+ case NEN_END:
254
+ if(n->nd_end)
255
+ {
256
+ dump_node_or_iseq_to_hash((VALUE)n->nd_end, node_hash);
257
+ return node_id(n->nd_end);
258
+ }
259
+ else
260
+ {
261
+ return Qnil;
262
+ }
263
+ case NEN_ENSR:
264
+ if(n->nd_ensr)
265
+ {
266
+ dump_node_or_iseq_to_hash((VALUE)n->nd_ensr, node_hash);
267
+ return node_id(n->nd_ensr);
268
+ }
269
+ else
270
+ {
271
+ return Qnil;
272
+ }
273
+ case NEN_ENTRY:
274
+ if(n->nd_entry->id == 0)
275
+ {
276
+ rb_raise(
277
+ rb_eRuntimeError,
278
+ "Invalid ID for entry (node type %d)",
279
+ nd_type(n));
280
+ }
281
+ return ID2SYM(n->nd_entry->id);
282
+ case NEN_FRML:
283
+ {
284
+ return LONG2NUM((long)n->nd_frml);
285
+ }
286
+ case NEN_HEAD:
287
+ if(n->nd_head)
288
+ {
289
+ dump_node_or_iseq_to_hash((VALUE)n->nd_head, node_hash);
290
+ return node_id(n->nd_head);
291
+ }
292
+ else
293
+ {
294
+ return Qnil;
295
+ }
296
+ case NEN_ITER:
297
+ if(n->nd_iter)
298
+ {
299
+ dump_node_or_iseq_to_hash((VALUE)n->nd_iter, node_hash);
300
+ return node_id(n->nd_iter);
301
+ }
302
+ else
303
+ {
304
+ return Qnil;
305
+ }
306
+ case NEN_LIT:
307
+ switch(TYPE(n->nd_lit))
308
+ {
309
+ case T_CLASS:
310
+ case T_MODULE:
311
+ {
312
+ /* When dumping a class, we dump just the name (otherwise we'd
313
+ * get multiple copies of the class each time we load a method
314
+ * on the other side).
315
+ */
316
+ VALUE klass = (VALUE)n->nd_lit;
317
+ VALUE path;
318
+ if(FL_TEST(klass, FL_SINGLETON))
319
+ {
320
+ VALUE singleton = rb_iv_get(klass, "__attached__");
321
+ path = rb_class_path(singleton);
322
+ }
323
+ else
324
+ {
325
+ path = rb_class_path(klass);
326
+ if(STR2CSTR(path)[0] == '#')
327
+ {
328
+ rb_raise(rb_eArgError, "cannot dump anonymous class");
329
+ }
330
+ }
331
+ return rb_assoc_new(
332
+ INT2NUM(((struct RBasic *)(n->nd_lit))->flags),
333
+ path);
334
+ }
335
+
336
+ default:
337
+ /* TODO: would like to dump flags, not type */
338
+ return rb_assoc_new(
339
+ INT2NUM(TYPE((VALUE)n->nd_lit)),
340
+ (VALUE)n->nd_lit);
341
+ }
342
+ case NEN_MID:
343
+ if(n->nd_mid == 0)
344
+ {
345
+ return Qnil;
346
+ }
347
+ else
348
+ {
349
+ return ID2SYM(n->nd_mid);
350
+ }
351
+ case NEN_MODL:
352
+ if(n->nd_modl == 0)
353
+ {
354
+ return Qnil;
355
+ }
356
+ else
357
+ {
358
+ return ID2SYM(n->nd_modl);
359
+ }
360
+ case NEN_NEXT:
361
+ if(n->nd_next)
362
+ {
363
+ dump_node_or_iseq_to_hash((VALUE)n->nd_next, node_hash);
364
+ return node_id(n->nd_next);
365
+ }
366
+ else
367
+ {
368
+ return Qnil;
369
+ }
370
+ case NEN_NOEX:
371
+ {
372
+ return LONG2NUM((long)n->nd_noex);
373
+ }
374
+ case NEN_NTH:
375
+ {
376
+ return LONG2NUM((long)n->nd_nth);
377
+ }
378
+ case NEN_OID:
379
+ if(n->nd_oid == 0)
380
+ {
381
+ return Qnil;
382
+ }
383
+ else
384
+ {
385
+ return ID2SYM(n->nd_oid);
386
+ }
387
+ case NEN_OPT:
388
+ if(n->nd_opt)
389
+ {
390
+ dump_node_or_iseq_to_hash((VALUE)n->nd_opt, node_hash);
391
+ return node_id(n->nd_opt);
392
+ }
393
+ else
394
+ {
395
+ return Qnil;
396
+ }
397
+ case NEN_ORIG:
398
+ switch(TYPE(n->nd_orig))
399
+ {
400
+ case T_CLASS:
401
+ case T_MODULE:
402
+ {
403
+ /* When dumping a class, we dump just the name (otherwise we'd
404
+ * get multiple copies of the class each time we load a method
405
+ * on the other side).
406
+ */
407
+ VALUE klass = (VALUE)n->nd_orig;
408
+ VALUE path;
409
+ if(FL_TEST(klass, FL_SINGLETON))
410
+ {
411
+ VALUE singleton = rb_iv_get(klass, "__attached__");
412
+ path = rb_class_path(singleton);
413
+ }
414
+ else
415
+ {
416
+ path = rb_class_path(klass);
417
+ if(STR2CSTR(path)[0] == '#')
418
+ {
419
+ rb_raise(rb_eArgError, "cannot dump anonymous class");
420
+ }
421
+ }
422
+ return rb_assoc_new(
423
+ INT2NUM(((struct RBasic *)(n->nd_orig))->flags),
424
+ path);
425
+ }
426
+
427
+ default:
428
+ /* TODO: would like to dump flags, not type */
429
+ return rb_assoc_new(
430
+ INT2NUM(TYPE((VALUE)n->nd_orig)),
431
+ (VALUE)n->nd_orig);
432
+ }
433
+ case NEN_PID:
434
+ if(n->nd_pid == 0)
435
+ {
436
+ return Qnil;
437
+ }
438
+ else
439
+ {
440
+ return ID2SYM(n->nd_pid);
441
+ }
442
+ case NEN_PLEN:
443
+ {
444
+ return LONG2NUM((long)n->nd_plen);
445
+ }
446
+ case NEN_RECV:
447
+ if(n->nd_recv)
448
+ {
449
+ dump_node_or_iseq_to_hash((VALUE)n->nd_recv, node_hash);
450
+ return node_id(n->nd_recv);
451
+ }
452
+ else
453
+ {
454
+ return Qnil;
455
+ }
456
+ case NEN_RESQ:
457
+ if(n->nd_resq)
458
+ {
459
+ dump_node_or_iseq_to_hash((VALUE)n->nd_resq, node_hash);
460
+ return node_id(n->nd_resq);
461
+ }
462
+ else
463
+ {
464
+ return Qnil;
465
+ }
466
+ case NEN_REST:
467
+ if(n->nd_rest == 0)
468
+ {
469
+ return Qnil;
470
+ }
471
+ else
472
+ {
473
+ return ID2SYM(n->nd_rest);
474
+ }
475
+ case NEN_RVAL:
476
+ if(n->nd_2nd)
477
+ {
478
+ dump_node_or_iseq_to_hash((VALUE)n->nd_2nd, node_hash);
479
+ return node_id(n->nd_2nd);
480
+ }
481
+ else
482
+ {
483
+ return Qnil;
484
+ }
485
+ case NEN_STATE:
486
+ {
487
+ return LONG2NUM((long)n->nd_state);
488
+ }
489
+ case NEN_STTS:
490
+ if(n->nd_stts)
491
+ {
492
+ dump_node_or_iseq_to_hash((VALUE)n->nd_stts, node_hash);
493
+ return node_id(n->nd_stts);
494
+ }
495
+ else
496
+ {
497
+ return Qnil;
498
+ }
499
+ case NEN_SUPER:
500
+ if(n->nd_super)
501
+ {
502
+ dump_node_or_iseq_to_hash((VALUE)n->nd_super, node_hash);
503
+ return node_id(n->nd_super);
504
+ }
505
+ else
506
+ {
507
+ return Qnil;
508
+ }
509
+ case NEN_TAG:
510
+ if(n->nd_tag == 0)
511
+ {
512
+ return Qnil;
513
+ }
514
+ else
515
+ {
516
+ return ID2SYM(n->nd_tag);
517
+ }
518
+ case NEN_TBL:
519
+ {
520
+ VALUE v = variable_names(n->nd_tbl);
521
+ return v;
522
+ }
523
+ case NEN_TVAL:
524
+ switch(TYPE(n->nd_tval))
525
+ {
526
+ case T_CLASS:
527
+ case T_MODULE:
528
+ {
529
+ /* When dumping a class, we dump just the name (otherwise we'd
530
+ * get multiple copies of the class each time we load a method
531
+ * on the other side).
532
+ */
533
+ VALUE klass = (VALUE)n->nd_tval;
534
+ VALUE path;
535
+ if(FL_TEST(klass, FL_SINGLETON))
536
+ {
537
+ VALUE singleton = rb_iv_get(klass, "__attached__");
538
+ path = rb_class_path(singleton);
539
+ }
540
+ else
541
+ {
542
+ path = rb_class_path(klass);
543
+ if(STR2CSTR(path)[0] == '#')
544
+ {
545
+ rb_raise(rb_eArgError, "cannot dump anonymous class");
546
+ }
547
+ }
548
+ return rb_assoc_new(
549
+ INT2NUM(((struct RBasic *)(n->nd_tval))->flags),
550
+ path);
551
+ }
552
+
553
+ default:
554
+ /* TODO: would like to dump flags, not type */
555
+ return rb_assoc_new(
556
+ INT2NUM(TYPE((VALUE)n->nd_tval)),
557
+ (VALUE)n->nd_tval);
558
+ }
559
+ case NEN_VALUE:
560
+ if(n->nd_value)
561
+ {
562
+ dump_node_or_iseq_to_hash((VALUE)n->nd_value, node_hash);
563
+ return node_id(n->nd_value);
564
+ }
565
+ else
566
+ {
567
+ return Qnil;
568
+ }
569
+ case NEN_VAR:
570
+ if(n->nd_var)
571
+ {
572
+ dump_node_or_iseq_to_hash((VALUE)n->nd_var, node_hash);
573
+ return node_id(n->nd_var);
574
+ }
575
+ else
576
+ {
577
+ return Qnil;
578
+ }
579
+ case NEN_VID:
580
+ if(n->nd_vid == 0)
581
+ {
582
+ return Qnil;
583
+ }
584
+ else
585
+ {
586
+ return ID2SYM(n->nd_vid);
587
+ }
588
+ case NEN_VISI:
589
+ {
590
+ return LONG2NUM((long)n->nd_visi);
591
+ }
592
+ }
593
+ rb_raise(rb_eArgError, "Invalid Node_Elem_Name %d", nen);
594
+ }
595
+
596
+ void load_node_elem(enum Node_Elem_Name nen, VALUE v, NODE * n, VALUE node_hash, VALUE id_hash)
597
+ {
598
+ switch(nen)
599
+ {
600
+ case NEN_NONE:
601
+ return;
602
+ case NEN_1ST:
603
+ {
604
+ if(v == Qnil)
605
+ {
606
+ n->nd_1st = 0;
607
+ }
608
+ else
609
+ {
610
+ VALUE nid = rb_hash_aref(id_hash, v);
611
+ if(RTEST(nid))
612
+ {
613
+ n->nd_1st = id_to_node(nid);
614
+ }
615
+ else
616
+ {
617
+ n->u1.node = (NODE *)load_node_or_iseq_from_hash(
618
+ v, node_hash, id_hash);
619
+ }
620
+ }
621
+ return;
622
+ }
623
+ case NEN_2ND:
624
+ {
625
+ if(v == Qnil)
626
+ {
627
+ n->nd_2nd = 0;
628
+ }
629
+ else
630
+ {
631
+ VALUE nid = rb_hash_aref(id_hash, v);
632
+ if(RTEST(nid))
633
+ {
634
+ n->nd_2nd = id_to_node(nid);
635
+ }
636
+ else
637
+ {
638
+ n->u2.node = (NODE *)load_node_or_iseq_from_hash(
639
+ v, node_hash, id_hash);
640
+ }
641
+ }
642
+ return;
643
+ }
644
+ case NEN_AID:
645
+ {
646
+ if(NIL_P(v))
647
+ {
648
+ n->nd_aid = 0;
649
+ }
650
+ else
651
+ {
652
+ n->nd_aid = SYM2ID(v);
653
+ }
654
+ return;
655
+ }
656
+ case NEN_ALEN:
657
+ {
658
+ n->nd_alen = NUM2LONG(v);
659
+ return;
660
+ }
661
+ case NEN_ARGC:
662
+ {
663
+ n->nd_argc = NUM2LONG(v);
664
+ return;
665
+ }
666
+ case NEN_ARGS:
667
+ {
668
+ if(v == Qnil)
669
+ {
670
+ n->nd_args = 0;
671
+ }
672
+ else
673
+ {
674
+ VALUE nid = rb_hash_aref(id_hash, v);
675
+ if(RTEST(nid))
676
+ {
677
+ n->nd_args = id_to_node(nid);
678
+ }
679
+ else
680
+ {
681
+ n->u3.node = (NODE *)load_node_or_iseq_from_hash(
682
+ v, node_hash, id_hash);
683
+ }
684
+ }
685
+ return;
686
+ }
687
+ case NEN_BEG:
688
+ {
689
+ if(v == Qnil)
690
+ {
691
+ n->nd_beg = 0;
692
+ }
693
+ else
694
+ {
695
+ VALUE nid = rb_hash_aref(id_hash, v);
696
+ if(RTEST(nid))
697
+ {
698
+ n->nd_beg = id_to_node(nid);
699
+ }
700
+ else
701
+ {
702
+ n->u1.node = (NODE *)load_node_or_iseq_from_hash(
703
+ v, node_hash, id_hash);
704
+ }
705
+ }
706
+ return;
707
+ }
708
+ case NEN_BODY:
709
+ {
710
+ if(v == Qnil)
711
+ {
712
+ n->nd_body = 0;
713
+ }
714
+ else
715
+ {
716
+ VALUE nid = rb_hash_aref(id_hash, v);
717
+ if(RTEST(nid))
718
+ {
719
+ n->nd_body = id_to_node(nid);
720
+ }
721
+ else
722
+ {
723
+ n->u2.node = (NODE *)load_node_or_iseq_from_hash(
724
+ v, node_hash, id_hash);
725
+ }
726
+ }
727
+ return;
728
+ }
729
+ case NEN_CFLAG:
730
+ {
731
+ n->nd_cflag = NUM2LONG(v);
732
+ return;
733
+ }
734
+ case NEN_CFNC:
735
+ {
736
+ rb_raise(rb_eRuntimeError, "Cannot load cfunc");
737
+ }
738
+ case NEN_CLSS:
739
+ {
740
+ Check_Type(v, T_ARRAY);
741
+ if(RARRAY_LEN(v) != 2)
742
+ {
743
+ rb_raise(rb_eArgError, "wrong size for array");
744
+ }
745
+ int flags = NUM2INT(RARRAY_PTR(v)[0]);
746
+ switch(flags & T_MASK)
747
+ {
748
+ case T_CLASS:
749
+ case T_MODULE:
750
+ {
751
+ VALUE str = RARRAY_PTR(v)[1];
752
+ Check_Type(str, T_STRING);
753
+ VALUE klass = rb_path2class(STR2CSTR(str));
754
+ if(flags & FL_SINGLETON)
755
+ {
756
+ *(VALUE *)(&n->nd_clss) =
757
+ rb_singleton_class(klass);
758
+ }
759
+ else
760
+ {
761
+ *(VALUE *)(&n->nd_clss) =
762
+ klass;
763
+ }
764
+ break;
765
+ }
766
+ default:
767
+ *(VALUE *)(&n->nd_clss) = RARRAY_PTR(v)[1];
768
+ break;
769
+ }
770
+ return;
771
+ }
772
+ case NEN_CNT:
773
+ {
774
+ n->nd_cnt = NUM2LONG(v);
775
+ return;
776
+ }
777
+ case NEN_COND:
778
+ {
779
+ if(v == Qnil)
780
+ {
781
+ n->nd_cond = 0;
782
+ }
783
+ else
784
+ {
785
+ VALUE nid = rb_hash_aref(id_hash, v);
786
+ if(RTEST(nid))
787
+ {
788
+ n->nd_cond = id_to_node(nid);
789
+ }
790
+ else
791
+ {
792
+ n->u1.node = (NODE *)load_node_or_iseq_from_hash(
793
+ v, node_hash, id_hash);
794
+ }
795
+ }
796
+ return;
797
+ }
798
+ case NEN_CPATH:
799
+ {
800
+ if(v == Qnil)
801
+ {
802
+ n->nd_cpath = 0;
803
+ }
804
+ else
805
+ {
806
+ VALUE nid = rb_hash_aref(id_hash, v);
807
+ if(RTEST(nid))
808
+ {
809
+ n->nd_cpath = id_to_node(nid);
810
+ }
811
+ else
812
+ {
813
+ n->u1.node = (NODE *)load_node_or_iseq_from_hash(
814
+ v, node_hash, id_hash);
815
+ }
816
+ }
817
+ return;
818
+ }
819
+ case NEN_CVAL:
820
+ {
821
+ Check_Type(v, T_ARRAY);
822
+ if(RARRAY_LEN(v) != 2)
823
+ {
824
+ rb_raise(rb_eArgError, "wrong size for array");
825
+ }
826
+ int flags = NUM2INT(RARRAY_PTR(v)[0]);
827
+ switch(flags & T_MASK)
828
+ {
829
+ case T_CLASS:
830
+ case T_MODULE:
831
+ {
832
+ VALUE str = RARRAY_PTR(v)[1];
833
+ Check_Type(str, T_STRING);
834
+ VALUE klass = rb_path2class(STR2CSTR(str));
835
+ if(flags & FL_SINGLETON)
836
+ {
837
+ *(VALUE *)(&n->nd_cval) =
838
+ rb_singleton_class(klass);
839
+ }
840
+ else
841
+ {
842
+ *(VALUE *)(&n->nd_cval) =
843
+ klass;
844
+ }
845
+ break;
846
+ }
847
+ default:
848
+ *(VALUE *)(&n->nd_cval) = RARRAY_PTR(v)[1];
849
+ break;
850
+ }
851
+ return;
852
+ }
853
+ case NEN_DEFN:
854
+ {
855
+ if(v == Qnil)
856
+ {
857
+ n->nd_defn = 0;
858
+ }
859
+ else
860
+ {
861
+ VALUE nid = rb_hash_aref(id_hash, v);
862
+ if(RTEST(nid))
863
+ {
864
+ n->nd_defn = id_to_node(nid);
865
+ }
866
+ else
867
+ {
868
+ n->u3.node = (NODE *)load_node_or_iseq_from_hash(
869
+ v, node_hash, id_hash);
870
+ }
871
+ }
872
+ return;
873
+ }
874
+ case NEN_ELSE:
875
+ {
876
+ if(v == Qnil)
877
+ {
878
+ n->nd_else = 0;
879
+ }
880
+ else
881
+ {
882
+ VALUE nid = rb_hash_aref(id_hash, v);
883
+ if(RTEST(nid))
884
+ {
885
+ n->nd_else = id_to_node(nid);
886
+ }
887
+ else
888
+ {
889
+ n->u3.node = (NODE *)load_node_or_iseq_from_hash(
890
+ v, node_hash, id_hash);
891
+ }
892
+ }
893
+ return;
894
+ }
895
+ case NEN_END:
896
+ {
897
+ if(v == Qnil)
898
+ {
899
+ n->nd_end = 0;
900
+ }
901
+ else
902
+ {
903
+ VALUE nid = rb_hash_aref(id_hash, v);
904
+ if(RTEST(nid))
905
+ {
906
+ n->nd_end = id_to_node(nid);
907
+ }
908
+ else
909
+ {
910
+ n->u2.node = (NODE *)load_node_or_iseq_from_hash(
911
+ v, node_hash, id_hash);
912
+ }
913
+ }
914
+ return;
915
+ }
916
+ case NEN_ENSR:
917
+ {
918
+ if(v == Qnil)
919
+ {
920
+ n->nd_ensr = 0;
921
+ }
922
+ else
923
+ {
924
+ VALUE nid = rb_hash_aref(id_hash, v);
925
+ if(RTEST(nid))
926
+ {
927
+ n->nd_ensr = id_to_node(nid);
928
+ }
929
+ else
930
+ {
931
+ n->u3.node = (NODE *)load_node_or_iseq_from_hash(
932
+ v, node_hash, id_hash);
933
+ }
934
+ }
935
+ return;
936
+ }
937
+ case NEN_ENTRY:
938
+ {
939
+ n->nd_entry = rb_global_entry(SYM2ID(v));
940
+ return;
941
+ }
942
+ case NEN_FRML:
943
+ {
944
+ n->nd_frml = NUM2LONG(v);
945
+ return;
946
+ }
947
+ case NEN_HEAD:
948
+ {
949
+ if(v == Qnil)
950
+ {
951
+ n->nd_head = 0;
952
+ }
953
+ else
954
+ {
955
+ VALUE nid = rb_hash_aref(id_hash, v);
956
+ if(RTEST(nid))
957
+ {
958
+ n->nd_head = id_to_node(nid);
959
+ }
960
+ else
961
+ {
962
+ n->u1.node = (NODE *)load_node_or_iseq_from_hash(
963
+ v, node_hash, id_hash);
964
+ }
965
+ }
966
+ return;
967
+ }
968
+ case NEN_ITER:
969
+ {
970
+ if(v == Qnil)
971
+ {
972
+ n->nd_iter = 0;
973
+ }
974
+ else
975
+ {
976
+ VALUE nid = rb_hash_aref(id_hash, v);
977
+ if(RTEST(nid))
978
+ {
979
+ n->nd_iter = id_to_node(nid);
980
+ }
981
+ else
982
+ {
983
+ n->u3.node = (NODE *)load_node_or_iseq_from_hash(
984
+ v, node_hash, id_hash);
985
+ }
986
+ }
987
+ return;
988
+ }
989
+ case NEN_LIT:
990
+ {
991
+ Check_Type(v, T_ARRAY);
992
+ if(RARRAY_LEN(v) != 2)
993
+ {
994
+ rb_raise(rb_eArgError, "wrong size for array");
995
+ }
996
+ int flags = NUM2INT(RARRAY_PTR(v)[0]);
997
+ switch(flags & T_MASK)
998
+ {
999
+ case T_CLASS:
1000
+ case T_MODULE:
1001
+ {
1002
+ VALUE str = RARRAY_PTR(v)[1];
1003
+ Check_Type(str, T_STRING);
1004
+ VALUE klass = rb_path2class(STR2CSTR(str));
1005
+ if(flags & FL_SINGLETON)
1006
+ {
1007
+ *(VALUE *)(&n->nd_lit) =
1008
+ rb_singleton_class(klass);
1009
+ }
1010
+ else
1011
+ {
1012
+ *(VALUE *)(&n->nd_lit) =
1013
+ klass;
1014
+ }
1015
+ break;
1016
+ }
1017
+ default:
1018
+ *(VALUE *)(&n->nd_lit) = RARRAY_PTR(v)[1];
1019
+ break;
1020
+ }
1021
+ return;
1022
+ }
1023
+ case NEN_MID:
1024
+ {
1025
+ if(NIL_P(v))
1026
+ {
1027
+ n->nd_mid = 0;
1028
+ }
1029
+ else
1030
+ {
1031
+ n->nd_mid = SYM2ID(v);
1032
+ }
1033
+ return;
1034
+ }
1035
+ case NEN_MODL:
1036
+ {
1037
+ if(NIL_P(v))
1038
+ {
1039
+ n->nd_modl = 0;
1040
+ }
1041
+ else
1042
+ {
1043
+ n->nd_modl = SYM2ID(v);
1044
+ }
1045
+ return;
1046
+ }
1047
+ case NEN_NEXT:
1048
+ {
1049
+ if(v == Qnil)
1050
+ {
1051
+ n->nd_next = 0;
1052
+ }
1053
+ else
1054
+ {
1055
+ VALUE nid = rb_hash_aref(id_hash, v);
1056
+ if(RTEST(nid))
1057
+ {
1058
+ n->nd_next = id_to_node(nid);
1059
+ }
1060
+ else
1061
+ {
1062
+ n->u3.node = (NODE *)load_node_or_iseq_from_hash(
1063
+ v, node_hash, id_hash);
1064
+ }
1065
+ }
1066
+ return;
1067
+ }
1068
+ case NEN_NOEX:
1069
+ {
1070
+ n->nd_noex = NUM2LONG(v);
1071
+ return;
1072
+ }
1073
+ case NEN_NTH:
1074
+ {
1075
+ n->nd_nth = NUM2LONG(v);
1076
+ return;
1077
+ }
1078
+ case NEN_OID:
1079
+ {
1080
+ if(NIL_P(v))
1081
+ {
1082
+ n->nd_oid = 0;
1083
+ }
1084
+ else
1085
+ {
1086
+ n->nd_oid = SYM2ID(v);
1087
+ }
1088
+ return;
1089
+ }
1090
+ case NEN_OPT:
1091
+ {
1092
+ if(v == Qnil)
1093
+ {
1094
+ n->nd_opt = 0;
1095
+ }
1096
+ else
1097
+ {
1098
+ VALUE nid = rb_hash_aref(id_hash, v);
1099
+ if(RTEST(nid))
1100
+ {
1101
+ n->nd_opt = id_to_node(nid);
1102
+ }
1103
+ else
1104
+ {
1105
+ n->u1.node = (NODE *)load_node_or_iseq_from_hash(
1106
+ v, node_hash, id_hash);
1107
+ }
1108
+ }
1109
+ return;
1110
+ }
1111
+ case NEN_ORIG:
1112
+ {
1113
+ Check_Type(v, T_ARRAY);
1114
+ if(RARRAY_LEN(v) != 2)
1115
+ {
1116
+ rb_raise(rb_eArgError, "wrong size for array");
1117
+ }
1118
+ int flags = NUM2INT(RARRAY_PTR(v)[0]);
1119
+ switch(flags & T_MASK)
1120
+ {
1121
+ case T_CLASS:
1122
+ case T_MODULE:
1123
+ {
1124
+ VALUE str = RARRAY_PTR(v)[1];
1125
+ Check_Type(str, T_STRING);
1126
+ VALUE klass = rb_path2class(STR2CSTR(str));
1127
+ if(flags & FL_SINGLETON)
1128
+ {
1129
+ *(VALUE *)(&n->nd_orig) =
1130
+ rb_singleton_class(klass);
1131
+ }
1132
+ else
1133
+ {
1134
+ *(VALUE *)(&n->nd_orig) =
1135
+ klass;
1136
+ }
1137
+ break;
1138
+ }
1139
+ default:
1140
+ *(VALUE *)(&n->nd_orig) = RARRAY_PTR(v)[1];
1141
+ break;
1142
+ }
1143
+ return;
1144
+ }
1145
+ case NEN_PID:
1146
+ {
1147
+ if(NIL_P(v))
1148
+ {
1149
+ n->nd_pid = 0;
1150
+ }
1151
+ else
1152
+ {
1153
+ n->nd_pid = SYM2ID(v);
1154
+ }
1155
+ return;
1156
+ }
1157
+ case NEN_PLEN:
1158
+ {
1159
+ n->nd_plen = NUM2LONG(v);
1160
+ return;
1161
+ }
1162
+ case NEN_RECV:
1163
+ {
1164
+ if(v == Qnil)
1165
+ {
1166
+ n->nd_recv = 0;
1167
+ }
1168
+ else
1169
+ {
1170
+ VALUE nid = rb_hash_aref(id_hash, v);
1171
+ if(RTEST(nid))
1172
+ {
1173
+ n->nd_recv = id_to_node(nid);
1174
+ }
1175
+ else
1176
+ {
1177
+ n->u1.node = (NODE *)load_node_or_iseq_from_hash(
1178
+ v, node_hash, id_hash);
1179
+ }
1180
+ }
1181
+ return;
1182
+ }
1183
+ case NEN_RESQ:
1184
+ {
1185
+ if(v == Qnil)
1186
+ {
1187
+ n->nd_resq = 0;
1188
+ }
1189
+ else
1190
+ {
1191
+ VALUE nid = rb_hash_aref(id_hash, v);
1192
+ if(RTEST(nid))
1193
+ {
1194
+ n->nd_resq = id_to_node(nid);
1195
+ }
1196
+ else
1197
+ {
1198
+ n->u2.node = (NODE *)load_node_or_iseq_from_hash(
1199
+ v, node_hash, id_hash);
1200
+ }
1201
+ }
1202
+ return;
1203
+ }
1204
+ case NEN_REST:
1205
+ {
1206
+ if(NIL_P(v))
1207
+ {
1208
+ n->nd_rest = 0;
1209
+ }
1210
+ else
1211
+ {
1212
+ n->nd_rest = SYM2ID(v);
1213
+ }
1214
+ return;
1215
+ }
1216
+ case NEN_RVAL:
1217
+ {
1218
+ if(v == Qnil)
1219
+ {
1220
+ n->nd_2nd = 0;
1221
+ }
1222
+ else
1223
+ {
1224
+ VALUE nid = rb_hash_aref(id_hash, v);
1225
+ if(RTEST(nid))
1226
+ {
1227
+ n->nd_2nd = id_to_node(nid);
1228
+ }
1229
+ else
1230
+ {
1231
+ n->u2.node = (NODE *)load_node_or_iseq_from_hash(
1232
+ v, node_hash, id_hash);
1233
+ }
1234
+ }
1235
+ return;
1236
+ }
1237
+ case NEN_STATE:
1238
+ {
1239
+ n->nd_state = NUM2LONG(v);
1240
+ return;
1241
+ }
1242
+ case NEN_STTS:
1243
+ {
1244
+ if(v == Qnil)
1245
+ {
1246
+ n->nd_stts = 0;
1247
+ }
1248
+ else
1249
+ {
1250
+ VALUE nid = rb_hash_aref(id_hash, v);
1251
+ if(RTEST(nid))
1252
+ {
1253
+ n->nd_stts = id_to_node(nid);
1254
+ }
1255
+ else
1256
+ {
1257
+ n->u1.node = (NODE *)load_node_or_iseq_from_hash(
1258
+ v, node_hash, id_hash);
1259
+ }
1260
+ }
1261
+ return;
1262
+ }
1263
+ case NEN_SUPER:
1264
+ {
1265
+ if(v == Qnil)
1266
+ {
1267
+ n->nd_super = 0;
1268
+ }
1269
+ else
1270
+ {
1271
+ VALUE nid = rb_hash_aref(id_hash, v);
1272
+ if(RTEST(nid))
1273
+ {
1274
+ n->nd_super = id_to_node(nid);
1275
+ }
1276
+ else
1277
+ {
1278
+ n->u3.node = (NODE *)load_node_or_iseq_from_hash(
1279
+ v, node_hash, id_hash);
1280
+ }
1281
+ }
1282
+ return;
1283
+ }
1284
+ case NEN_TAG:
1285
+ {
1286
+ if(NIL_P(v))
1287
+ {
1288
+ n->nd_tag = 0;
1289
+ }
1290
+ else
1291
+ {
1292
+ n->nd_tag = SYM2ID(v);
1293
+ }
1294
+ return;
1295
+ }
1296
+ case NEN_TBL:
1297
+ {
1298
+ if(v == Qnil)
1299
+ {
1300
+ n->nd_tbl = 0;
1301
+ }
1302
+ else
1303
+ {
1304
+ size_t len, j;
1305
+ ID * tmp_tbl;
1306
+
1307
+ Check_Type(v, T_ARRAY);
1308
+ len = RARRAY_LEN(v);
1309
+ tmp_tbl = ALLOCA_N(ID, len + 3);
1310
+ tmp_tbl[0] = (ID)(len + 2);
1311
+ tmp_tbl[1] = (ID)('_');
1312
+ tmp_tbl[2] = (ID)('~');
1313
+ for(j = 0; j < len; ++j)
1314
+ {
1315
+ VALUE e = RARRAY_PTR(v)[j];
1316
+ if(e == Qnil)
1317
+ {
1318
+ /* flip state */
1319
+ tmp_tbl[j + 3] = 0;
1320
+ }
1321
+ else
1322
+ {
1323
+ tmp_tbl[j + 3] = SYM2ID(e);
1324
+ }
1325
+ }
1326
+ n->nd_tbl = ALLOC_N(ID, len + 3);
1327
+ memcpy(n->nd_tbl, tmp_tbl, sizeof(ID) * (len + 3));
1328
+ }
1329
+ return;
1330
+ }
1331
+ case NEN_TVAL:
1332
+ {
1333
+ Check_Type(v, T_ARRAY);
1334
+ if(RARRAY_LEN(v) != 2)
1335
+ {
1336
+ rb_raise(rb_eArgError, "wrong size for array");
1337
+ }
1338
+ int flags = NUM2INT(RARRAY_PTR(v)[0]);
1339
+ switch(flags & T_MASK)
1340
+ {
1341
+ case T_CLASS:
1342
+ case T_MODULE:
1343
+ {
1344
+ VALUE str = RARRAY_PTR(v)[1];
1345
+ Check_Type(str, T_STRING);
1346
+ VALUE klass = rb_path2class(STR2CSTR(str));
1347
+ if(flags & FL_SINGLETON)
1348
+ {
1349
+ *(VALUE *)(&n->nd_tval) =
1350
+ rb_singleton_class(klass);
1351
+ }
1352
+ else
1353
+ {
1354
+ *(VALUE *)(&n->nd_tval) =
1355
+ klass;
1356
+ }
1357
+ break;
1358
+ }
1359
+ default:
1360
+ *(VALUE *)(&n->nd_tval) = RARRAY_PTR(v)[1];
1361
+ break;
1362
+ }
1363
+ return;
1364
+ }
1365
+ case NEN_VALUE:
1366
+ {
1367
+ if(v == Qnil)
1368
+ {
1369
+ n->nd_value = 0;
1370
+ }
1371
+ else
1372
+ {
1373
+ VALUE nid = rb_hash_aref(id_hash, v);
1374
+ if(RTEST(nid))
1375
+ {
1376
+ n->nd_value = id_to_node(nid);
1377
+ }
1378
+ else
1379
+ {
1380
+ n->u2.node = (NODE *)load_node_or_iseq_from_hash(
1381
+ v, node_hash, id_hash);
1382
+ }
1383
+ }
1384
+ return;
1385
+ }
1386
+ case NEN_VAR:
1387
+ {
1388
+ if(v == Qnil)
1389
+ {
1390
+ n->nd_var = 0;
1391
+ }
1392
+ else
1393
+ {
1394
+ VALUE nid = rb_hash_aref(id_hash, v);
1395
+ if(RTEST(nid))
1396
+ {
1397
+ n->nd_var = id_to_node(nid);
1398
+ }
1399
+ else
1400
+ {
1401
+ n->u1.node = (NODE *)load_node_or_iseq_from_hash(
1402
+ v, node_hash, id_hash);
1403
+ }
1404
+ }
1405
+ return;
1406
+ }
1407
+ case NEN_VID:
1408
+ {
1409
+ if(NIL_P(v))
1410
+ {
1411
+ n->nd_vid = 0;
1412
+ }
1413
+ else
1414
+ {
1415
+ n->nd_vid = SYM2ID(v);
1416
+ }
1417
+ return;
1418
+ }
1419
+ case NEN_VISI:
1420
+ {
1421
+ n->nd_visi = NUM2LONG(v);
1422
+ return;
1423
+ }
1424
+ }
1425
+ rb_raise(rb_eRuntimeError, "Internal error: invalid Node_Elem_Name %d", nen);
1426
+ }
1427
+
1428
+ /*
1429
+ * Return the Node's _1st_ member. The return type is
1430
+ * either a Node or an Object.
1431
+ */
1432
+ static VALUE node_1st(VALUE self)
1433
+ {
1434
+ NODE * n;
1435
+ Data_Get_Struct(self, NODE, n);
1436
+
1437
+ if(TYPE(n->nd_1st) == T_NODE)
1438
+ {
1439
+ return wrap_node((NODE *)n->nd_1st);
1440
+ }
1441
+ else
1442
+ {
1443
+ return (VALUE)n->nd_1st;
1444
+ }
1445
+ }
1446
+ /*
1447
+ * Return the Node's _2nd_ member. The return type is
1448
+ * either a Node or an Object.
1449
+ */
1450
+ static VALUE node_2nd(VALUE self)
1451
+ {
1452
+ NODE * n;
1453
+ Data_Get_Struct(self, NODE, n);
1454
+
1455
+ if(TYPE(n->nd_2nd) == T_NODE)
1456
+ {
1457
+ return wrap_node((NODE *)n->nd_2nd);
1458
+ }
1459
+ else
1460
+ {
1461
+ return (VALUE)n->nd_2nd;
1462
+ }
1463
+ }
1464
+ /*
1465
+ * Return the Node's _alen_ member. The return type is an
1466
+ * Integer.
1467
+ */
1468
+ static VALUE node_alen(VALUE self)
1469
+ {
1470
+ NODE * n;
1471
+ Data_Get_Struct(self, NODE, n);
1472
+ return LONG2NUM(n->nd_alen);
1473
+ }
1474
+ /*
1475
+ * Return the Node's _argc_ member. The return type is an
1476
+ * Integer.
1477
+ */
1478
+ static VALUE node_argc(VALUE self)
1479
+ {
1480
+ NODE * n;
1481
+ Data_Get_Struct(self, NODE, n);
1482
+ return LONG2NUM(n->nd_argc);
1483
+ }
1484
+ /*
1485
+ * Return the Node's _args_ member. The return type is
1486
+ * either a Node or an Object.
1487
+ */
1488
+ static VALUE node_args(VALUE self)
1489
+ {
1490
+ NODE * n;
1491
+ Data_Get_Struct(self, NODE, n);
1492
+
1493
+ if(TYPE(n->nd_args) == T_NODE)
1494
+ {
1495
+ return wrap_node((NODE *)n->nd_args);
1496
+ }
1497
+ else
1498
+ {
1499
+ return (VALUE)n->nd_args;
1500
+ }
1501
+ }
1502
+ /*
1503
+ * Return the Node's _beg_ member. The return type is
1504
+ * either a Node or an Object.
1505
+ */
1506
+ static VALUE node_beg(VALUE self)
1507
+ {
1508
+ NODE * n;
1509
+ Data_Get_Struct(self, NODE, n);
1510
+
1511
+ if(TYPE(n->nd_beg) == T_NODE)
1512
+ {
1513
+ return wrap_node((NODE *)n->nd_beg);
1514
+ }
1515
+ else
1516
+ {
1517
+ return (VALUE)n->nd_beg;
1518
+ }
1519
+ }
1520
+ /*
1521
+ * Return the Node's _body_ member. The return type is
1522
+ * either a Node or an Object.
1523
+ */
1524
+ static VALUE node_body(VALUE self)
1525
+ {
1526
+ NODE * n;
1527
+ Data_Get_Struct(self, NODE, n);
1528
+
1529
+ if(TYPE(n->nd_body) == T_NODE)
1530
+ {
1531
+ return wrap_node((NODE *)n->nd_body);
1532
+ }
1533
+ else
1534
+ {
1535
+ return (VALUE)n->nd_body;
1536
+ }
1537
+ }
1538
+ /*
1539
+ * Return the Node's _cflag_ member. The return type is an
1540
+ * Integer.
1541
+ */
1542
+ static VALUE node_cflag(VALUE self)
1543
+ {
1544
+ NODE * n;
1545
+ Data_Get_Struct(self, NODE, n);
1546
+ return LONG2NUM(n->nd_cflag);
1547
+ }
1548
+ /*
1549
+ * Return the Node's _cfnc_ member. The return type is an
1550
+ * integer representation of the cfnc's pointer.
1551
+ */
1552
+ static VALUE node_cfnc(VALUE self)
1553
+ {
1554
+ NODE * n;
1555
+ Data_Get_Struct(self, NODE, n);
1556
+ return LONG2NUM((long)(n->nd_cfnc));
1557
+ }
1558
+ /*
1559
+ * Return the Node's _clss_ member. The return type is
1560
+ * either a Node or an Object.
1561
+ */
1562
+ static VALUE node_clss(VALUE self)
1563
+ {
1564
+ NODE * n;
1565
+ Data_Get_Struct(self, NODE, n);
1566
+
1567
+ if(TYPE(n->nd_clss) == T_NODE)
1568
+ {
1569
+ return wrap_node((NODE *)n->nd_clss);
1570
+ }
1571
+ else
1572
+ {
1573
+ return (VALUE)n->nd_clss;
1574
+ }
1575
+ }
1576
+ /*
1577
+ * Return the Node's _cnt_ member. The return type is an
1578
+ * Integer.
1579
+ */
1580
+ static VALUE node_cnt(VALUE self)
1581
+ {
1582
+ NODE * n;
1583
+ Data_Get_Struct(self, NODE, n);
1584
+ return LONG2NUM(n->nd_cnt);
1585
+ }
1586
+ /*
1587
+ * Return the Node's _cond_ member. The return type is
1588
+ * either a Node or an Object.
1589
+ */
1590
+ static VALUE node_cond(VALUE self)
1591
+ {
1592
+ NODE * n;
1593
+ Data_Get_Struct(self, NODE, n);
1594
+
1595
+ if(TYPE(n->nd_cond) == T_NODE)
1596
+ {
1597
+ return wrap_node((NODE *)n->nd_cond);
1598
+ }
1599
+ else
1600
+ {
1601
+ return (VALUE)n->nd_cond;
1602
+ }
1603
+ }
1604
+ /*
1605
+ * Return the Node's _cpath_ member. The return type is
1606
+ * either a Node or an Object.
1607
+ */
1608
+ static VALUE node_cpath(VALUE self)
1609
+ {
1610
+ NODE * n;
1611
+ Data_Get_Struct(self, NODE, n);
1612
+
1613
+ if(TYPE(n->nd_cpath) == T_NODE)
1614
+ {
1615
+ return wrap_node((NODE *)n->nd_cpath);
1616
+ }
1617
+ else
1618
+ {
1619
+ return (VALUE)n->nd_cpath;
1620
+ }
1621
+ }
1622
+ /*
1623
+ * Return the Node's _cval_ member. The return type is
1624
+ * either a Node or an Object.
1625
+ */
1626
+ static VALUE node_cval(VALUE self)
1627
+ {
1628
+ NODE * n;
1629
+ Data_Get_Struct(self, NODE, n);
1630
+
1631
+ if(TYPE(n->nd_cval) == T_NODE)
1632
+ {
1633
+ return wrap_node((NODE *)n->nd_cval);
1634
+ }
1635
+ else
1636
+ {
1637
+ return (VALUE)n->nd_cval;
1638
+ }
1639
+ }
1640
+ /*
1641
+ * Return the Node's _defn_ member. The return type is
1642
+ * either a Node or an Object.
1643
+ */
1644
+ static VALUE node_defn(VALUE self)
1645
+ {
1646
+ NODE * n;
1647
+ Data_Get_Struct(self, NODE, n);
1648
+
1649
+ if(TYPE(n->nd_defn) == T_NODE)
1650
+ {
1651
+ return wrap_node((NODE *)n->nd_defn);
1652
+ }
1653
+ else
1654
+ {
1655
+ return (VALUE)n->nd_defn;
1656
+ }
1657
+ }
1658
+ /*
1659
+ * Return the Node's _else_ member. The return type is
1660
+ * either a Node or an Object.
1661
+ */
1662
+ static VALUE node_else(VALUE self)
1663
+ {
1664
+ NODE * n;
1665
+ Data_Get_Struct(self, NODE, n);
1666
+
1667
+ if(TYPE(n->nd_else) == T_NODE)
1668
+ {
1669
+ return wrap_node((NODE *)n->nd_else);
1670
+ }
1671
+ else
1672
+ {
1673
+ return (VALUE)n->nd_else;
1674
+ }
1675
+ }
1676
+ /*
1677
+ * Return the Node's _end_ member. The return type is
1678
+ * either a Node or an Object.
1679
+ */
1680
+ static VALUE node_end(VALUE self)
1681
+ {
1682
+ NODE * n;
1683
+ Data_Get_Struct(self, NODE, n);
1684
+
1685
+ if(TYPE(n->nd_end) == T_NODE)
1686
+ {
1687
+ return wrap_node((NODE *)n->nd_end);
1688
+ }
1689
+ else
1690
+ {
1691
+ return (VALUE)n->nd_end;
1692
+ }
1693
+ }
1694
+ /*
1695
+ * Return the Node's _ensr_ member. The return type is
1696
+ * either a Node or an Object.
1697
+ */
1698
+ static VALUE node_ensr(VALUE self)
1699
+ {
1700
+ NODE * n;
1701
+ Data_Get_Struct(self, NODE, n);
1702
+
1703
+ if(TYPE(n->nd_ensr) == T_NODE)
1704
+ {
1705
+ return wrap_node((NODE *)n->nd_ensr);
1706
+ }
1707
+ else
1708
+ {
1709
+ return (VALUE)n->nd_ensr;
1710
+ }
1711
+ }
1712
+ /*
1713
+ * Return the Node's _entry_ member. The return type is
1714
+ * either a Node or an Object.
1715
+ */
1716
+ static VALUE node_entry(VALUE self)
1717
+ {
1718
+ NODE * n;
1719
+ Data_Get_Struct(self, NODE, n);
1720
+ if(n->nd_entry->id == 0)
1721
+ {
1722
+ rb_raise(
1723
+ rb_eRuntimeError,
1724
+ "Invalid ID for entry (node type %d)",
1725
+ nd_type(n));
1726
+ }
1727
+ return ID2SYM(n->nd_entry->id);
1728
+ }
1729
+ /*
1730
+ * Return the Node's _head_ member. The return type is
1731
+ * either a Node or an Object.
1732
+ */
1733
+ static VALUE node_head(VALUE self)
1734
+ {
1735
+ NODE * n;
1736
+ Data_Get_Struct(self, NODE, n);
1737
+
1738
+ if(TYPE(n->nd_head) == T_NODE)
1739
+ {
1740
+ return wrap_node((NODE *)n->nd_head);
1741
+ }
1742
+ else
1743
+ {
1744
+ return (VALUE)n->nd_head;
1745
+ }
1746
+ }
1747
+ /*
1748
+ * Return the Node's _iter_ member. The return type is
1749
+ * either a Node or an Object.
1750
+ */
1751
+ static VALUE node_iter(VALUE self)
1752
+ {
1753
+ NODE * n;
1754
+ Data_Get_Struct(self, NODE, n);
1755
+
1756
+ if(TYPE(n->nd_iter) == T_NODE)
1757
+ {
1758
+ return wrap_node((NODE *)n->nd_iter);
1759
+ }
1760
+ else
1761
+ {
1762
+ return (VALUE)n->nd_iter;
1763
+ }
1764
+ }
1765
+ /*
1766
+ * Return the Node's _lit_ member. The return type is
1767
+ * either a Node or an Object.
1768
+ */
1769
+ static VALUE node_lit(VALUE self)
1770
+ {
1771
+ NODE * n;
1772
+ Data_Get_Struct(self, NODE, n);
1773
+
1774
+ if(TYPE(n->nd_lit) == T_NODE)
1775
+ {
1776
+ return wrap_node((NODE *)n->nd_lit);
1777
+ }
1778
+ else
1779
+ {
1780
+ return (VALUE)n->nd_lit;
1781
+ }
1782
+ }
1783
+ /*
1784
+ * Return the Node's _mid_ member. The return type is a
1785
+ * Symbol.
1786
+ */
1787
+ static VALUE node_mid(VALUE self)
1788
+ {
1789
+ NODE * n;
1790
+ Data_Get_Struct(self, NODE, n);
1791
+ if(n->nd_mid == 0)
1792
+ {
1793
+ rb_raise(
1794
+ rb_eRuntimeError,
1795
+ "Invalid ID for mid (node type=%d)",
1796
+ nd_type(n));
1797
+ }
1798
+ return ID2SYM(n->nd_mid);
1799
+ }
1800
+ /*
1801
+ * Return the Node's _next_ member. The return type is
1802
+ * either a Node or an Object.
1803
+ */
1804
+ static VALUE node_next(VALUE self)
1805
+ {
1806
+ NODE * n;
1807
+ Data_Get_Struct(self, NODE, n);
1808
+
1809
+ if(TYPE(n->nd_next) == T_NODE)
1810
+ {
1811
+ return wrap_node((NODE *)n->nd_next);
1812
+ }
1813
+ else
1814
+ {
1815
+ return (VALUE)n->nd_next;
1816
+ }
1817
+ }
1818
+ /*
1819
+ * Return the Node's _noex_ member. The return type is an
1820
+ * Integer.
1821
+ */
1822
+ static VALUE node_noex(VALUE self)
1823
+ {
1824
+ NODE * n;
1825
+ Data_Get_Struct(self, NODE, n);
1826
+ return LONG2NUM(n->nd_noex);
1827
+ }
1828
+ /*
1829
+ * Return the Node's _nth_ member. The return type is an
1830
+ * Integer.
1831
+ */
1832
+ static VALUE node_nth(VALUE self)
1833
+ {
1834
+ NODE * n;
1835
+ Data_Get_Struct(self, NODE, n);
1836
+ return LONG2NUM(n->nd_nth);
1837
+ }
1838
+ /*
1839
+ * Return the Node's _oid_ member. The return type is a
1840
+ * Symbol.
1841
+ */
1842
+ static VALUE node_oid(VALUE self)
1843
+ {
1844
+ NODE * n;
1845
+ Data_Get_Struct(self, NODE, n);
1846
+ if(n->nd_oid == 0)
1847
+ {
1848
+ rb_raise(
1849
+ rb_eRuntimeError,
1850
+ "Invalid ID for oid (node type=%d)",
1851
+ nd_type(n));
1852
+ }
1853
+ return ID2SYM(n->nd_oid);
1854
+ }
1855
+ /*
1856
+ * Return the Node's _opt_ member. The return type is
1857
+ * either a Node or an Object.
1858
+ */
1859
+ static VALUE node_opt(VALUE self)
1860
+ {
1861
+ NODE * n;
1862
+ Data_Get_Struct(self, NODE, n);
1863
+
1864
+ if(TYPE(n->nd_opt) == T_NODE)
1865
+ {
1866
+ return wrap_node((NODE *)n->nd_opt);
1867
+ }
1868
+ else
1869
+ {
1870
+ return (VALUE)n->nd_opt;
1871
+ }
1872
+ }
1873
+ /*
1874
+ * Return the Node's _recv_ member. The return type is
1875
+ * either a Node or an Object.
1876
+ */
1877
+ static VALUE node_recv(VALUE self)
1878
+ {
1879
+ NODE * n;
1880
+ Data_Get_Struct(self, NODE, n);
1881
+
1882
+ if(TYPE(n->nd_recv) == T_NODE)
1883
+ {
1884
+ return wrap_node((NODE *)n->nd_recv);
1885
+ }
1886
+ else
1887
+ {
1888
+ return (VALUE)n->nd_recv;
1889
+ }
1890
+ }
1891
+ /*
1892
+ * Return the Node's _resq_ member. The return type is
1893
+ * either a Node or an Object.
1894
+ */
1895
+ static VALUE node_resq(VALUE self)
1896
+ {
1897
+ NODE * n;
1898
+ Data_Get_Struct(self, NODE, n);
1899
+
1900
+ if(TYPE(n->nd_resq) == T_NODE)
1901
+ {
1902
+ return wrap_node((NODE *)n->nd_resq);
1903
+ }
1904
+ else
1905
+ {
1906
+ return (VALUE)n->nd_resq;
1907
+ }
1908
+ }
1909
+ /*
1910
+ * Return the Node's _rest_ member. The return type is a
1911
+ * Symbol.
1912
+ */
1913
+ static VALUE node_rest(VALUE self)
1914
+ {
1915
+ NODE * n;
1916
+ Data_Get_Struct(self, NODE, n);
1917
+ if(n->nd_rest == 0)
1918
+ {
1919
+ rb_raise(
1920
+ rb_eRuntimeError,
1921
+ "Invalid ID for rest (node type=%d)",
1922
+ nd_type(n));
1923
+ }
1924
+ return ID2SYM(n->nd_rest);
1925
+ }
1926
+ /*
1927
+ * Return the Node's _rval_ member. The return type is
1928
+ * either a Node or an Object.
1929
+ */
1930
+ static VALUE node_rval(VALUE self)
1931
+ {
1932
+ NODE * n;
1933
+ Data_Get_Struct(self, NODE, n);
1934
+
1935
+ if(TYPE(n->nd_rval) == T_NODE)
1936
+ {
1937
+ return wrap_node((NODE *)n->nd_rval);
1938
+ }
1939
+ else
1940
+ {
1941
+ return (VALUE)n->nd_rval;
1942
+ }
1943
+ }
1944
+ /*
1945
+ * Return the Node's _state_ member. The return type is an
1946
+ * Integer.
1947
+ */
1948
+ static VALUE node_state(VALUE self)
1949
+ {
1950
+ NODE * n;
1951
+ Data_Get_Struct(self, NODE, n);
1952
+ return LONG2NUM(n->nd_state);
1953
+ }
1954
+ /*
1955
+ * Return the Node's _stts_ member. The return type is
1956
+ * either a Node or an Object.
1957
+ */
1958
+ static VALUE node_stts(VALUE self)
1959
+ {
1960
+ NODE * n;
1961
+ Data_Get_Struct(self, NODE, n);
1962
+
1963
+ if(TYPE(n->nd_stts) == T_NODE)
1964
+ {
1965
+ return wrap_node((NODE *)n->nd_stts);
1966
+ }
1967
+ else
1968
+ {
1969
+ return (VALUE)n->nd_stts;
1970
+ }
1971
+ }
1972
+ /*
1973
+ * Return the Node's _super_ member. The return type is
1974
+ * either a Node or an Object.
1975
+ */
1976
+ static VALUE node_super(VALUE self)
1977
+ {
1978
+ NODE * n;
1979
+ Data_Get_Struct(self, NODE, n);
1980
+
1981
+ if(TYPE(n->nd_super) == T_NODE)
1982
+ {
1983
+ return wrap_node((NODE *)n->nd_super);
1984
+ }
1985
+ else
1986
+ {
1987
+ return (VALUE)n->nd_super;
1988
+ }
1989
+ }
1990
+ /*
1991
+ * Return the Node's _tbl_ member. The return value is an
1992
+ * Array holding names of variables.
1993
+ */
1994
+ static VALUE node_tbl(VALUE self)
1995
+ {
1996
+ NODE * n;
1997
+ Data_Get_Struct(self, NODE, n);
1998
+ return variable_names(n->nd_tbl);
1999
+ }
2000
+ /*
2001
+ * Return the Node's _tval_ member. The return type is
2002
+ * either a Node or an Object.
2003
+ */
2004
+ static VALUE node_tval(VALUE self)
2005
+ {
2006
+ NODE * n;
2007
+ Data_Get_Struct(self, NODE, n);
2008
+
2009
+ if(TYPE(n->nd_tval) == T_NODE)
2010
+ {
2011
+ return wrap_node((NODE *)n->nd_tval);
2012
+ }
2013
+ else
2014
+ {
2015
+ return (VALUE)n->nd_tval;
2016
+ }
2017
+ }
2018
+ /*
2019
+ * Return the Node's _value_ member. The return type is
2020
+ * either a Node or an Object.
2021
+ */
2022
+ static VALUE node_value(VALUE self)
2023
+ {
2024
+ NODE * n;
2025
+ Data_Get_Struct(self, NODE, n);
2026
+
2027
+ if(TYPE(n->nd_value) == T_NODE)
2028
+ {
2029
+ return wrap_node((NODE *)n->nd_value);
2030
+ }
2031
+ else
2032
+ {
2033
+ return (VALUE)n->nd_value;
2034
+ }
2035
+ }
2036
+ /*
2037
+ * Return the Node's _var_ member. The return type is
2038
+ * either a Node or an Object.
2039
+ */
2040
+ static VALUE node_var(VALUE self)
2041
+ {
2042
+ NODE * n;
2043
+ Data_Get_Struct(self, NODE, n);
2044
+
2045
+ if(TYPE(n->nd_var) == T_NODE)
2046
+ {
2047
+ return wrap_node((NODE *)n->nd_var);
2048
+ }
2049
+ else
2050
+ {
2051
+ return (VALUE)n->nd_var;
2052
+ }
2053
+ }
2054
+ /*
2055
+ * Return the Node's _vid_ member. The return type is a
2056
+ * Symbol.
2057
+ */
2058
+ static VALUE node_vid(VALUE self)
2059
+ {
2060
+ NODE * n;
2061
+ Data_Get_Struct(self, NODE, n);
2062
+ if(n->nd_vid == 0)
2063
+ {
2064
+ rb_raise(
2065
+ rb_eRuntimeError,
2066
+ "Invalid ID for vid (node type=%d)",
2067
+ nd_type(n));
2068
+ }
2069
+ return ID2SYM(n->nd_vid);
2070
+ }
2071
+
2072
+ /*
2073
+ * Return an array of strings containing the names of the node class's
2074
+ * members.
2075
+ */
2076
+ VALUE node_s_members(VALUE klass)
2077
+ {
2078
+ return rb_iv_get(klass, "__member__");
2079
+ }
2080
+
2081
+ void define_node_subclass_methods()
2082
+ {
2083
+ /* For rdoc: rb_cNode = rb_define_class("Node", rb_cObject); */
2084
+ VALUE rb_cNode = rb_const_get(rb_cObject, rb_intern("Node"));
2085
+ VALUE members;
2086
+
2087
+ {
2088
+ VALUE rb_cBLOCK = rb_define_class_under(rb_cNode, "BLOCK", rb_cNode);
2089
+ members = rb_ary_new();
2090
+ rb_cNodeSubclass[NODE_BLOCK] = rb_cBLOCK;
2091
+ rb_iv_set(rb_cBLOCK, "__member__", members);
2092
+ rb_define_singleton_method(rb_cBLOCK, "members", node_s_members, 0);
2093
+ rb_define_method(rb_cBLOCK, "head", node_head, 0);
2094
+ rb_ary_push(members, rb_str_new2("head"));
2095
+ rb_define_method(rb_cBLOCK, "next", node_next, 0);
2096
+ rb_ary_push(members, rb_str_new2("next"));
2097
+ }
2098
+ {
2099
+ VALUE rb_cPOSTEXE = rb_define_class_under(rb_cNode, "POSTEXE", rb_cNode);
2100
+ members = rb_ary_new();
2101
+ rb_cNodeSubclass[NODE_POSTEXE] = rb_cPOSTEXE;
2102
+ rb_iv_set(rb_cPOSTEXE, "__member__", members);
2103
+ rb_define_singleton_method(rb_cPOSTEXE, "members", node_s_members, 0);
2104
+ }
2105
+ {
2106
+ VALUE rb_cBEGIN = rb_define_class_under(rb_cNode, "BEGIN", rb_cNode);
2107
+ members = rb_ary_new();
2108
+ rb_cNodeSubclass[NODE_BEGIN] = rb_cBEGIN;
2109
+ rb_iv_set(rb_cBEGIN, "__member__", members);
2110
+ rb_define_singleton_method(rb_cBEGIN, "members", node_s_members, 0);
2111
+ rb_define_method(rb_cBEGIN, "body", node_body, 0);
2112
+ rb_ary_push(members, rb_str_new2("body"));
2113
+ }
2114
+ {
2115
+ VALUE rb_cMATCH = rb_define_class_under(rb_cNode, "MATCH", rb_cNode);
2116
+ members = rb_ary_new();
2117
+ rb_cNodeSubclass[NODE_MATCH] = rb_cMATCH;
2118
+ rb_iv_set(rb_cMATCH, "__member__", members);
2119
+ rb_define_singleton_method(rb_cMATCH, "members", node_s_members, 0);
2120
+ rb_define_method(rb_cMATCH, "head", node_head, 0);
2121
+ rb_ary_push(members, rb_str_new2("head"));
2122
+ }
2123
+ {
2124
+ VALUE rb_cMATCH2 = rb_define_class_under(rb_cNode, "MATCH2", rb_cNode);
2125
+ members = rb_ary_new();
2126
+ rb_cNodeSubclass[NODE_MATCH2] = rb_cMATCH2;
2127
+ rb_iv_set(rb_cMATCH2, "__member__", members);
2128
+ rb_define_singleton_method(rb_cMATCH2, "members", node_s_members, 0);
2129
+ rb_define_method(rb_cMATCH2, "recv", node_recv, 0);
2130
+ rb_ary_push(members, rb_str_new2("recv"));
2131
+ rb_define_method(rb_cMATCH2, "value", node_value, 0);
2132
+ rb_ary_push(members, rb_str_new2("value"));
2133
+ }
2134
+ {
2135
+ VALUE rb_cMATCH3 = rb_define_class_under(rb_cNode, "MATCH3", rb_cNode);
2136
+ members = rb_ary_new();
2137
+ rb_cNodeSubclass[NODE_MATCH3] = rb_cMATCH3;
2138
+ rb_iv_set(rb_cMATCH3, "__member__", members);
2139
+ rb_define_singleton_method(rb_cMATCH3, "members", node_s_members, 0);
2140
+ rb_define_method(rb_cMATCH3, "recv", node_recv, 0);
2141
+ rb_ary_push(members, rb_str_new2("recv"));
2142
+ rb_define_method(rb_cMATCH3, "value", node_value, 0);
2143
+ rb_ary_push(members, rb_str_new2("value"));
2144
+ }
2145
+ {
2146
+ VALUE rb_cOPT_N = rb_define_class_under(rb_cNode, "OPT_N", rb_cNode);
2147
+ members = rb_ary_new();
2148
+ rb_cNodeSubclass[NODE_OPT_N] = rb_cOPT_N;
2149
+ rb_iv_set(rb_cOPT_N, "__member__", members);
2150
+ rb_define_singleton_method(rb_cOPT_N, "members", node_s_members, 0);
2151
+ rb_define_method(rb_cOPT_N, "body", node_body, 0);
2152
+ rb_ary_push(members, rb_str_new2("body"));
2153
+ }
2154
+ {
2155
+ VALUE rb_cSELF = rb_define_class_under(rb_cNode, "SELF", rb_cNode);
2156
+ members = rb_ary_new();
2157
+ rb_cNodeSubclass[NODE_SELF] = rb_cSELF;
2158
+ rb_iv_set(rb_cSELF, "__member__", members);
2159
+ rb_define_singleton_method(rb_cSELF, "members", node_s_members, 0);
2160
+ }
2161
+ {
2162
+ VALUE rb_cNILNODE = rb_define_class_under(rb_cNode, "NILNODE", rb_cNode);
2163
+ members = rb_ary_new();
2164
+ rb_cNodeSubclass[NODE_NIL] = rb_cNILNODE;
2165
+ rb_iv_set(rb_cNILNODE, "__member__", members);
2166
+ rb_define_singleton_method(rb_cNILNODE, "members", node_s_members, 0);
2167
+ }
2168
+ {
2169
+ VALUE rb_cTRUENODE = rb_define_class_under(rb_cNode, "TRUENODE", rb_cNode);
2170
+ members = rb_ary_new();
2171
+ rb_cNodeSubclass[NODE_TRUE] = rb_cTRUENODE;
2172
+ rb_iv_set(rb_cTRUENODE, "__member__", members);
2173
+ rb_define_singleton_method(rb_cTRUENODE, "members", node_s_members, 0);
2174
+ }
2175
+ {
2176
+ VALUE rb_cFALSENODE = rb_define_class_under(rb_cNode, "FALSENODE", rb_cNode);
2177
+ members = rb_ary_new();
2178
+ rb_cNodeSubclass[NODE_FALSE] = rb_cFALSENODE;
2179
+ rb_iv_set(rb_cFALSENODE, "__member__", members);
2180
+ rb_define_singleton_method(rb_cFALSENODE, "members", node_s_members, 0);
2181
+ }
2182
+ {
2183
+ VALUE rb_cIF = rb_define_class_under(rb_cNode, "IF", rb_cNode);
2184
+ members = rb_ary_new();
2185
+ rb_cNodeSubclass[NODE_IF] = rb_cIF;
2186
+ rb_iv_set(rb_cIF, "__member__", members);
2187
+ rb_define_singleton_method(rb_cIF, "members", node_s_members, 0);
2188
+ rb_define_method(rb_cIF, "body", node_body, 0);
2189
+ rb_ary_push(members, rb_str_new2("body"));
2190
+ rb_define_method(rb_cIF, "else", node_else, 0);
2191
+ rb_ary_push(members, rb_str_new2("else"));
2192
+ rb_define_method(rb_cIF, "cond", node_cond, 0);
2193
+ rb_ary_push(members, rb_str_new2("cond"));
2194
+ }
2195
+ {
2196
+ VALUE rb_cWHEN = rb_define_class_under(rb_cNode, "WHEN", rb_cNode);
2197
+ members = rb_ary_new();
2198
+ rb_cNodeSubclass[NODE_WHEN] = rb_cWHEN;
2199
+ rb_iv_set(rb_cWHEN, "__member__", members);
2200
+ rb_define_singleton_method(rb_cWHEN, "members", node_s_members, 0);
2201
+ rb_define_method(rb_cWHEN, "head", node_head, 0);
2202
+ rb_ary_push(members, rb_str_new2("head"));
2203
+ rb_define_method(rb_cWHEN, "body", node_body, 0);
2204
+ rb_ary_push(members, rb_str_new2("body"));
2205
+ rb_define_method(rb_cWHEN, "next", node_next, 0);
2206
+ rb_ary_push(members, rb_str_new2("next"));
2207
+ }
2208
+ {
2209
+ VALUE rb_cCASE = rb_define_class_under(rb_cNode, "CASE", rb_cNode);
2210
+ members = rb_ary_new();
2211
+ rb_cNodeSubclass[NODE_CASE] = rb_cCASE;
2212
+ rb_iv_set(rb_cCASE, "__member__", members);
2213
+ rb_define_singleton_method(rb_cCASE, "members", node_s_members, 0);
2214
+ rb_define_method(rb_cCASE, "head", node_head, 0);
2215
+ rb_ary_push(members, rb_str_new2("head"));
2216
+ rb_define_method(rb_cCASE, "body", node_body, 0);
2217
+ rb_ary_push(members, rb_str_new2("body"));
2218
+ rb_define_method(rb_cCASE, "next", node_next, 0);
2219
+ rb_ary_push(members, rb_str_new2("next"));
2220
+ }
2221
+ {
2222
+ VALUE rb_cWHILE = rb_define_class_under(rb_cNode, "WHILE", rb_cNode);
2223
+ members = rb_ary_new();
2224
+ rb_cNodeSubclass[NODE_WHILE] = rb_cWHILE;
2225
+ rb_iv_set(rb_cWHILE, "__member__", members);
2226
+ rb_define_singleton_method(rb_cWHILE, "members", node_s_members, 0);
2227
+ rb_define_method(rb_cWHILE, "cond", node_cond, 0);
2228
+ rb_ary_push(members, rb_str_new2("cond"));
2229
+ rb_define_method(rb_cWHILE, "body", node_body, 0);
2230
+ rb_ary_push(members, rb_str_new2("body"));
2231
+ rb_define_method(rb_cWHILE, "state", node_state, 0);
2232
+ rb_ary_push(members, rb_str_new2("state"));
2233
+ }
2234
+ {
2235
+ VALUE rb_cUNTIL = rb_define_class_under(rb_cNode, "UNTIL", rb_cNode);
2236
+ members = rb_ary_new();
2237
+ rb_cNodeSubclass[NODE_UNTIL] = rb_cUNTIL;
2238
+ rb_iv_set(rb_cUNTIL, "__member__", members);
2239
+ rb_define_singleton_method(rb_cUNTIL, "members", node_s_members, 0);
2240
+ rb_define_method(rb_cUNTIL, "cond", node_cond, 0);
2241
+ rb_ary_push(members, rb_str_new2("cond"));
2242
+ rb_define_method(rb_cUNTIL, "body", node_body, 0);
2243
+ rb_ary_push(members, rb_str_new2("body"));
2244
+ rb_define_method(rb_cUNTIL, "state", node_state, 0);
2245
+ rb_ary_push(members, rb_str_new2("state"));
2246
+ }
2247
+ {
2248
+ VALUE rb_cBLOCK_PASS = rb_define_class_under(rb_cNode, "BLOCK_PASS", rb_cNode);
2249
+ members = rb_ary_new();
2250
+ rb_cNodeSubclass[NODE_BLOCK_PASS] = rb_cBLOCK_PASS;
2251
+ rb_iv_set(rb_cBLOCK_PASS, "__member__", members);
2252
+ rb_define_singleton_method(rb_cBLOCK_PASS, "members", node_s_members, 0);
2253
+ rb_define_method(rb_cBLOCK_PASS, "body", node_body, 0);
2254
+ rb_ary_push(members, rb_str_new2("body"));
2255
+ rb_define_method(rb_cBLOCK_PASS, "iter", node_iter, 0);
2256
+ rb_ary_push(members, rb_str_new2("iter"));
2257
+ }
2258
+ {
2259
+ VALUE rb_cITER = rb_define_class_under(rb_cNode, "ITER", rb_cNode);
2260
+ members = rb_ary_new();
2261
+ rb_cNodeSubclass[NODE_ITER] = rb_cITER;
2262
+ rb_iv_set(rb_cITER, "__member__", members);
2263
+ rb_define_singleton_method(rb_cITER, "members", node_s_members, 0);
2264
+ rb_define_method(rb_cITER, "var", node_var, 0);
2265
+ rb_ary_push(members, rb_str_new2("var"));
2266
+ rb_define_method(rb_cITER, "body", node_body, 0);
2267
+ rb_ary_push(members, rb_str_new2("body"));
2268
+ rb_define_method(rb_cITER, "iter", node_iter, 0);
2269
+ rb_ary_push(members, rb_str_new2("iter"));
2270
+ }
2271
+ {
2272
+ VALUE rb_cFOR = rb_define_class_under(rb_cNode, "FOR", rb_cNode);
2273
+ members = rb_ary_new();
2274
+ rb_cNodeSubclass[NODE_FOR] = rb_cFOR;
2275
+ rb_iv_set(rb_cFOR, "__member__", members);
2276
+ rb_define_singleton_method(rb_cFOR, "members", node_s_members, 0);
2277
+ rb_define_method(rb_cFOR, "var", node_var, 0);
2278
+ rb_ary_push(members, rb_str_new2("var"));
2279
+ rb_define_method(rb_cFOR, "body", node_body, 0);
2280
+ rb_ary_push(members, rb_str_new2("body"));
2281
+ rb_define_method(rb_cFOR, "iter", node_iter, 0);
2282
+ rb_ary_push(members, rb_str_new2("iter"));
2283
+ }
2284
+ {
2285
+ VALUE rb_cBREAK = rb_define_class_under(rb_cNode, "BREAK", rb_cNode);
2286
+ members = rb_ary_new();
2287
+ rb_cNodeSubclass[NODE_BREAK] = rb_cBREAK;
2288
+ rb_iv_set(rb_cBREAK, "__member__", members);
2289
+ rb_define_singleton_method(rb_cBREAK, "members", node_s_members, 0);
2290
+ rb_define_method(rb_cBREAK, "stts", node_stts, 0);
2291
+ rb_ary_push(members, rb_str_new2("stts"));
2292
+ }
2293
+ {
2294
+ VALUE rb_cNEXT = rb_define_class_under(rb_cNode, "NEXT", rb_cNode);
2295
+ members = rb_ary_new();
2296
+ rb_cNodeSubclass[NODE_NEXT] = rb_cNEXT;
2297
+ rb_iv_set(rb_cNEXT, "__member__", members);
2298
+ rb_define_singleton_method(rb_cNEXT, "members", node_s_members, 0);
2299
+ rb_define_method(rb_cNEXT, "stts", node_stts, 0);
2300
+ rb_ary_push(members, rb_str_new2("stts"));
2301
+ }
2302
+ {
2303
+ VALUE rb_cREDO = rb_define_class_under(rb_cNode, "REDO", rb_cNode);
2304
+ members = rb_ary_new();
2305
+ rb_cNodeSubclass[NODE_REDO] = rb_cREDO;
2306
+ rb_iv_set(rb_cREDO, "__member__", members);
2307
+ rb_define_singleton_method(rb_cREDO, "members", node_s_members, 0);
2308
+ }
2309
+ {
2310
+ VALUE rb_cRETRY = rb_define_class_under(rb_cNode, "RETRY", rb_cNode);
2311
+ members = rb_ary_new();
2312
+ rb_cNodeSubclass[NODE_RETRY] = rb_cRETRY;
2313
+ rb_iv_set(rb_cRETRY, "__member__", members);
2314
+ rb_define_singleton_method(rb_cRETRY, "members", node_s_members, 0);
2315
+ }
2316
+ {
2317
+ VALUE rb_cYIELD = rb_define_class_under(rb_cNode, "YIELD", rb_cNode);
2318
+ members = rb_ary_new();
2319
+ rb_cNodeSubclass[NODE_YIELD] = rb_cYIELD;
2320
+ rb_iv_set(rb_cYIELD, "__member__", members);
2321
+ rb_define_singleton_method(rb_cYIELD, "members", node_s_members, 0);
2322
+ rb_define_method(rb_cYIELD, "stts", node_stts, 0);
2323
+ rb_ary_push(members, rb_str_new2("stts"));
2324
+ }
2325
+ {
2326
+ VALUE rb_cRESCUE = rb_define_class_under(rb_cNode, "RESCUE", rb_cNode);
2327
+ members = rb_ary_new();
2328
+ rb_cNodeSubclass[NODE_RESCUE] = rb_cRESCUE;
2329
+ rb_iv_set(rb_cRESCUE, "__member__", members);
2330
+ rb_define_singleton_method(rb_cRESCUE, "members", node_s_members, 0);
2331
+ rb_define_method(rb_cRESCUE, "head", node_head, 0);
2332
+ rb_ary_push(members, rb_str_new2("head"));
2333
+ rb_define_method(rb_cRESCUE, "resq", node_resq, 0);
2334
+ rb_ary_push(members, rb_str_new2("resq"));
2335
+ rb_define_method(rb_cRESCUE, "else", node_else, 0);
2336
+ rb_ary_push(members, rb_str_new2("else"));
2337
+ }
2338
+ {
2339
+ VALUE rb_cRESBODY = rb_define_class_under(rb_cNode, "RESBODY", rb_cNode);
2340
+ members = rb_ary_new();
2341
+ rb_cNodeSubclass[NODE_RESBODY] = rb_cRESBODY;
2342
+ rb_iv_set(rb_cRESBODY, "__member__", members);
2343
+ rb_define_singleton_method(rb_cRESBODY, "members", node_s_members, 0);
2344
+ rb_define_method(rb_cRESBODY, "head", node_head, 0);
2345
+ rb_ary_push(members, rb_str_new2("head"));
2346
+ rb_define_method(rb_cRESBODY, "resq", node_resq, 0);
2347
+ rb_ary_push(members, rb_str_new2("resq"));
2348
+ rb_define_method(rb_cRESBODY, "ensr", node_ensr, 0);
2349
+ rb_ary_push(members, rb_str_new2("ensr"));
2350
+ }
2351
+ {
2352
+ VALUE rb_cENSURE = rb_define_class_under(rb_cNode, "ENSURE", rb_cNode);
2353
+ members = rb_ary_new();
2354
+ rb_cNodeSubclass[NODE_ENSURE] = rb_cENSURE;
2355
+ rb_iv_set(rb_cENSURE, "__member__", members);
2356
+ rb_define_singleton_method(rb_cENSURE, "members", node_s_members, 0);
2357
+ rb_define_method(rb_cENSURE, "head", node_head, 0);
2358
+ rb_ary_push(members, rb_str_new2("head"));
2359
+ rb_define_method(rb_cENSURE, "ensr", node_ensr, 0);
2360
+ rb_ary_push(members, rb_str_new2("ensr"));
2361
+ }
2362
+ {
2363
+ VALUE rb_cAND = rb_define_class_under(rb_cNode, "AND", rb_cNode);
2364
+ members = rb_ary_new();
2365
+ rb_cNodeSubclass[NODE_AND] = rb_cAND;
2366
+ rb_iv_set(rb_cAND, "__member__", members);
2367
+ rb_define_singleton_method(rb_cAND, "members", node_s_members, 0);
2368
+ rb_define_method(rb_cAND, "first", node_1st, 0);
2369
+ rb_ary_push(members, rb_str_new2("first"));
2370
+ rb_define_method(rb_cAND, "second", node_2nd, 0);
2371
+ rb_ary_push(members, rb_str_new2("second"));
2372
+ }
2373
+ {
2374
+ VALUE rb_cOR = rb_define_class_under(rb_cNode, "OR", rb_cNode);
2375
+ members = rb_ary_new();
2376
+ rb_cNodeSubclass[NODE_OR] = rb_cOR;
2377
+ rb_iv_set(rb_cOR, "__member__", members);
2378
+ rb_define_singleton_method(rb_cOR, "members", node_s_members, 0);
2379
+ rb_define_method(rb_cOR, "first", node_1st, 0);
2380
+ rb_ary_push(members, rb_str_new2("first"));
2381
+ rb_define_method(rb_cOR, "second", node_2nd, 0);
2382
+ rb_ary_push(members, rb_str_new2("second"));
2383
+ }
2384
+ {
2385
+ VALUE rb_cNOT = rb_define_class_under(rb_cNode, "NOT", rb_cNode);
2386
+ members = rb_ary_new();
2387
+ rb_cNodeSubclass[NODE_NOT] = rb_cNOT;
2388
+ rb_iv_set(rb_cNOT, "__member__", members);
2389
+ rb_define_singleton_method(rb_cNOT, "members", node_s_members, 0);
2390
+ rb_define_method(rb_cNOT, "body", node_body, 0);
2391
+ rb_ary_push(members, rb_str_new2("body"));
2392
+ }
2393
+ {
2394
+ VALUE rb_cDOT2 = rb_define_class_under(rb_cNode, "DOT2", rb_cNode);
2395
+ members = rb_ary_new();
2396
+ rb_cNodeSubclass[NODE_DOT2] = rb_cDOT2;
2397
+ rb_iv_set(rb_cDOT2, "__member__", members);
2398
+ rb_define_singleton_method(rb_cDOT2, "members", node_s_members, 0);
2399
+ rb_define_method(rb_cDOT2, "beg", node_beg, 0);
2400
+ rb_ary_push(members, rb_str_new2("beg"));
2401
+ rb_define_method(rb_cDOT2, "end", node_end, 0);
2402
+ rb_ary_push(members, rb_str_new2("end"));
2403
+ rb_define_method(rb_cDOT2, "state", node_state, 0);
2404
+ rb_ary_push(members, rb_str_new2("state"));
2405
+ }
2406
+ {
2407
+ VALUE rb_cDOT3 = rb_define_class_under(rb_cNode, "DOT3", rb_cNode);
2408
+ members = rb_ary_new();
2409
+ rb_cNodeSubclass[NODE_DOT3] = rb_cDOT3;
2410
+ rb_iv_set(rb_cDOT3, "__member__", members);
2411
+ rb_define_singleton_method(rb_cDOT3, "members", node_s_members, 0);
2412
+ rb_define_method(rb_cDOT3, "beg", node_beg, 0);
2413
+ rb_ary_push(members, rb_str_new2("beg"));
2414
+ rb_define_method(rb_cDOT3, "end", node_end, 0);
2415
+ rb_ary_push(members, rb_str_new2("end"));
2416
+ rb_define_method(rb_cDOT3, "state", node_state, 0);
2417
+ rb_ary_push(members, rb_str_new2("state"));
2418
+ }
2419
+ {
2420
+ VALUE rb_cFLIP2 = rb_define_class_under(rb_cNode, "FLIP2", rb_cNode);
2421
+ members = rb_ary_new();
2422
+ rb_cNodeSubclass[NODE_FLIP2] = rb_cFLIP2;
2423
+ rb_iv_set(rb_cFLIP2, "__member__", members);
2424
+ rb_define_singleton_method(rb_cFLIP2, "members", node_s_members, 0);
2425
+ rb_define_method(rb_cFLIP2, "cnt", node_cnt, 0);
2426
+ rb_ary_push(members, rb_str_new2("cnt"));
2427
+ rb_define_method(rb_cFLIP2, "beg", node_beg, 0);
2428
+ rb_ary_push(members, rb_str_new2("beg"));
2429
+ rb_define_method(rb_cFLIP2, "end", node_end, 0);
2430
+ rb_ary_push(members, rb_str_new2("end"));
2431
+ }
2432
+ {
2433
+ VALUE rb_cFLIP3 = rb_define_class_under(rb_cNode, "FLIP3", rb_cNode);
2434
+ members = rb_ary_new();
2435
+ rb_cNodeSubclass[NODE_FLIP3] = rb_cFLIP3;
2436
+ rb_iv_set(rb_cFLIP3, "__member__", members);
2437
+ rb_define_singleton_method(rb_cFLIP3, "members", node_s_members, 0);
2438
+ rb_define_method(rb_cFLIP3, "cnt", node_cnt, 0);
2439
+ rb_ary_push(members, rb_str_new2("cnt"));
2440
+ rb_define_method(rb_cFLIP3, "beg", node_beg, 0);
2441
+ rb_ary_push(members, rb_str_new2("beg"));
2442
+ rb_define_method(rb_cFLIP3, "end", node_end, 0);
2443
+ rb_ary_push(members, rb_str_new2("end"));
2444
+ }
2445
+ {
2446
+ VALUE rb_cRETURN = rb_define_class_under(rb_cNode, "RETURN", rb_cNode);
2447
+ members = rb_ary_new();
2448
+ rb_cNodeSubclass[NODE_RETURN] = rb_cRETURN;
2449
+ rb_iv_set(rb_cRETURN, "__member__", members);
2450
+ rb_define_singleton_method(rb_cRETURN, "members", node_s_members, 0);
2451
+ rb_define_method(rb_cRETURN, "stts", node_stts, 0);
2452
+ rb_ary_push(members, rb_str_new2("stts"));
2453
+ }
2454
+ {
2455
+ VALUE rb_cARGS = rb_define_class_under(rb_cNode, "ARGS", rb_cNode);
2456
+ members = rb_ary_new();
2457
+ rb_cNodeSubclass[NODE_ARGS] = rb_cARGS;
2458
+ rb_iv_set(rb_cARGS, "__member__", members);
2459
+ rb_define_singleton_method(rb_cARGS, "members", node_s_members, 0);
2460
+ rb_define_method(rb_cARGS, "cnt", node_cnt, 0);
2461
+ rb_ary_push(members, rb_str_new2("cnt"));
2462
+ rb_define_method(rb_cARGS, "rest", node_rest, 0);
2463
+ rb_ary_push(members, rb_str_new2("rest"));
2464
+ rb_define_method(rb_cARGS, "opt", node_opt, 0);
2465
+ rb_ary_push(members, rb_str_new2("opt"));
2466
+ }
2467
+ {
2468
+ VALUE rb_cARGSCAT = rb_define_class_under(rb_cNode, "ARGSCAT", rb_cNode);
2469
+ members = rb_ary_new();
2470
+ rb_cNodeSubclass[NODE_ARGSCAT] = rb_cARGSCAT;
2471
+ rb_iv_set(rb_cARGSCAT, "__member__", members);
2472
+ rb_define_singleton_method(rb_cARGSCAT, "members", node_s_members, 0);
2473
+ rb_define_method(rb_cARGSCAT, "head", node_head, 0);
2474
+ rb_ary_push(members, rb_str_new2("head"));
2475
+ rb_define_method(rb_cARGSCAT, "body", node_body, 0);
2476
+ rb_ary_push(members, rb_str_new2("body"));
2477
+ }
2478
+ {
2479
+ VALUE rb_cARGSPUSH = rb_define_class_under(rb_cNode, "ARGSPUSH", rb_cNode);
2480
+ members = rb_ary_new();
2481
+ rb_cNodeSubclass[NODE_ARGSPUSH] = rb_cARGSPUSH;
2482
+ rb_iv_set(rb_cARGSPUSH, "__member__", members);
2483
+ rb_define_singleton_method(rb_cARGSPUSH, "members", node_s_members, 0);
2484
+ rb_define_method(rb_cARGSPUSH, "head", node_head, 0);
2485
+ rb_ary_push(members, rb_str_new2("head"));
2486
+ rb_define_method(rb_cARGSPUSH, "body", node_body, 0);
2487
+ rb_ary_push(members, rb_str_new2("body"));
2488
+ }
2489
+ {
2490
+ VALUE rb_cCALL = rb_define_class_under(rb_cNode, "CALL", rb_cNode);
2491
+ members = rb_ary_new();
2492
+ rb_cNodeSubclass[NODE_CALL] = rb_cCALL;
2493
+ rb_iv_set(rb_cCALL, "__member__", members);
2494
+ rb_define_singleton_method(rb_cCALL, "members", node_s_members, 0);
2495
+ rb_define_method(rb_cCALL, "recv", node_recv, 0);
2496
+ rb_ary_push(members, rb_str_new2("recv"));
2497
+ rb_define_method(rb_cCALL, "args", node_args, 0);
2498
+ rb_ary_push(members, rb_str_new2("args"));
2499
+ rb_define_method(rb_cCALL, "mid", node_mid, 0);
2500
+ rb_ary_push(members, rb_str_new2("mid"));
2501
+ }
2502
+ {
2503
+ VALUE rb_cFCALL = rb_define_class_under(rb_cNode, "FCALL", rb_cNode);
2504
+ members = rb_ary_new();
2505
+ rb_cNodeSubclass[NODE_FCALL] = rb_cFCALL;
2506
+ rb_iv_set(rb_cFCALL, "__member__", members);
2507
+ rb_define_singleton_method(rb_cFCALL, "members", node_s_members, 0);
2508
+ rb_define_method(rb_cFCALL, "args", node_args, 0);
2509
+ rb_ary_push(members, rb_str_new2("args"));
2510
+ rb_define_method(rb_cFCALL, "mid", node_mid, 0);
2511
+ rb_ary_push(members, rb_str_new2("mid"));
2512
+ }
2513
+ {
2514
+ VALUE rb_cVCALL = rb_define_class_under(rb_cNode, "VCALL", rb_cNode);
2515
+ members = rb_ary_new();
2516
+ rb_cNodeSubclass[NODE_VCALL] = rb_cVCALL;
2517
+ rb_iv_set(rb_cVCALL, "__member__", members);
2518
+ rb_define_singleton_method(rb_cVCALL, "members", node_s_members, 0);
2519
+ rb_define_method(rb_cVCALL, "mid", node_mid, 0);
2520
+ rb_ary_push(members, rb_str_new2("mid"));
2521
+ }
2522
+ {
2523
+ VALUE rb_cSUPER = rb_define_class_under(rb_cNode, "SUPER", rb_cNode);
2524
+ members = rb_ary_new();
2525
+ rb_cNodeSubclass[NODE_SUPER] = rb_cSUPER;
2526
+ rb_iv_set(rb_cSUPER, "__member__", members);
2527
+ rb_define_singleton_method(rb_cSUPER, "members", node_s_members, 0);
2528
+ rb_define_method(rb_cSUPER, "args", node_args, 0);
2529
+ rb_ary_push(members, rb_str_new2("args"));
2530
+ }
2531
+ {
2532
+ VALUE rb_cZSUPER = rb_define_class_under(rb_cNode, "ZSUPER", rb_cNode);
2533
+ members = rb_ary_new();
2534
+ rb_cNodeSubclass[NODE_ZSUPER] = rb_cZSUPER;
2535
+ rb_iv_set(rb_cZSUPER, "__member__", members);
2536
+ rb_define_singleton_method(rb_cZSUPER, "members", node_s_members, 0);
2537
+ rb_define_method(rb_cZSUPER, "args", node_args, 0);
2538
+ rb_ary_push(members, rb_str_new2("args"));
2539
+ }
2540
+ {
2541
+ VALUE rb_cSCOPE = rb_define_class_under(rb_cNode, "SCOPE", rb_cNode);
2542
+ members = rb_ary_new();
2543
+ rb_cNodeSubclass[NODE_SCOPE] = rb_cSCOPE;
2544
+ rb_iv_set(rb_cSCOPE, "__member__", members);
2545
+ rb_define_singleton_method(rb_cSCOPE, "members", node_s_members, 0);
2546
+ rb_define_method(rb_cSCOPE, "rval", node_rval, 0);
2547
+ rb_ary_push(members, rb_str_new2("rval"));
2548
+ rb_define_method(rb_cSCOPE, "tbl", node_tbl, 0);
2549
+ rb_ary_push(members, rb_str_new2("tbl"));
2550
+ rb_define_method(rb_cSCOPE, "next", node_next, 0);
2551
+ rb_ary_push(members, rb_str_new2("next"));
2552
+ }
2553
+ {
2554
+ VALUE rb_cOP_ASGN1 = rb_define_class_under(rb_cNode, "OP_ASGN1", rb_cNode);
2555
+ members = rb_ary_new();
2556
+ rb_cNodeSubclass[NODE_OP_ASGN1] = rb_cOP_ASGN1;
2557
+ rb_iv_set(rb_cOP_ASGN1, "__member__", members);
2558
+ rb_define_singleton_method(rb_cOP_ASGN1, "members", node_s_members, 0);
2559
+ rb_define_method(rb_cOP_ASGN1, "recv", node_recv, 0);
2560
+ rb_ary_push(members, rb_str_new2("recv"));
2561
+ rb_define_method(rb_cOP_ASGN1, "args", node_args, 0);
2562
+ rb_ary_push(members, rb_str_new2("args"));
2563
+ rb_define_method(rb_cOP_ASGN1, "mid", node_mid, 0);
2564
+ rb_ary_push(members, rb_str_new2("mid"));
2565
+ }
2566
+ {
2567
+ VALUE rb_cOP_ASGN2 = rb_define_class_under(rb_cNode, "OP_ASGN2", rb_cNode);
2568
+ members = rb_ary_new();
2569
+ rb_cNodeSubclass[NODE_OP_ASGN2] = rb_cOP_ASGN2;
2570
+ rb_iv_set(rb_cOP_ASGN2, "__member__", members);
2571
+ rb_define_singleton_method(rb_cOP_ASGN2, "members", node_s_members, 0);
2572
+ rb_define_method(rb_cOP_ASGN2, "vid", node_vid, 0);
2573
+ rb_ary_push(members, rb_str_new2("vid"));
2574
+ rb_define_method(rb_cOP_ASGN2, "recv", node_recv, 0);
2575
+ rb_ary_push(members, rb_str_new2("recv"));
2576
+ rb_define_method(rb_cOP_ASGN2, "value", node_value, 0);
2577
+ rb_ary_push(members, rb_str_new2("value"));
2578
+ }
2579
+ {
2580
+ VALUE rb_cOP_ASGN_AND = rb_define_class_under(rb_cNode, "OP_ASGN_AND", rb_cNode);
2581
+ members = rb_ary_new();
2582
+ rb_cNodeSubclass[NODE_OP_ASGN_AND] = rb_cOP_ASGN_AND;
2583
+ rb_iv_set(rb_cOP_ASGN_AND, "__member__", members);
2584
+ rb_define_singleton_method(rb_cOP_ASGN_AND, "members", node_s_members, 0);
2585
+ rb_define_method(rb_cOP_ASGN_AND, "head", node_head, 0);
2586
+ rb_ary_push(members, rb_str_new2("head"));
2587
+ rb_define_method(rb_cOP_ASGN_AND, "value", node_value, 0);
2588
+ rb_ary_push(members, rb_str_new2("value"));
2589
+ }
2590
+ {
2591
+ VALUE rb_cOP_ASGN_OR = rb_define_class_under(rb_cNode, "OP_ASGN_OR", rb_cNode);
2592
+ members = rb_ary_new();
2593
+ rb_cNodeSubclass[NODE_OP_ASGN_OR] = rb_cOP_ASGN_OR;
2594
+ rb_iv_set(rb_cOP_ASGN_OR, "__member__", members);
2595
+ rb_define_singleton_method(rb_cOP_ASGN_OR, "members", node_s_members, 0);
2596
+ rb_define_method(rb_cOP_ASGN_OR, "head", node_head, 0);
2597
+ rb_ary_push(members, rb_str_new2("head"));
2598
+ rb_define_method(rb_cOP_ASGN_OR, "value", node_value, 0);
2599
+ rb_ary_push(members, rb_str_new2("value"));
2600
+ }
2601
+ {
2602
+ VALUE rb_cMASGN = rb_define_class_under(rb_cNode, "MASGN", rb_cNode);
2603
+ members = rb_ary_new();
2604
+ rb_cNodeSubclass[NODE_MASGN] = rb_cMASGN;
2605
+ rb_iv_set(rb_cMASGN, "__member__", members);
2606
+ rb_define_singleton_method(rb_cMASGN, "members", node_s_members, 0);
2607
+ rb_define_method(rb_cMASGN, "value", node_value, 0);
2608
+ rb_ary_push(members, rb_str_new2("value"));
2609
+ rb_define_method(rb_cMASGN, "head", node_head, 0);
2610
+ rb_ary_push(members, rb_str_new2("head"));
2611
+ rb_define_method(rb_cMASGN, "args", node_args, 0);
2612
+ rb_ary_push(members, rb_str_new2("args"));
2613
+ }
2614
+ {
2615
+ VALUE rb_cLASGN = rb_define_class_under(rb_cNode, "LASGN", rb_cNode);
2616
+ members = rb_ary_new();
2617
+ rb_cNodeSubclass[NODE_LASGN] = rb_cLASGN;
2618
+ rb_iv_set(rb_cLASGN, "__member__", members);
2619
+ rb_define_singleton_method(rb_cLASGN, "members", node_s_members, 0);
2620
+ rb_define_method(rb_cLASGN, "vid", node_vid, 0);
2621
+ rb_ary_push(members, rb_str_new2("vid"));
2622
+ rb_define_method(rb_cLASGN, "value", node_value, 0);
2623
+ rb_ary_push(members, rb_str_new2("value"));
2624
+ rb_define_method(rb_cLASGN, "cnt", node_cnt, 0);
2625
+ rb_ary_push(members, rb_str_new2("cnt"));
2626
+ }
2627
+ {
2628
+ VALUE rb_cDASGN = rb_define_class_under(rb_cNode, "DASGN", rb_cNode);
2629
+ members = rb_ary_new();
2630
+ rb_cNodeSubclass[NODE_DASGN] = rb_cDASGN;
2631
+ rb_iv_set(rb_cDASGN, "__member__", members);
2632
+ rb_define_singleton_method(rb_cDASGN, "members", node_s_members, 0);
2633
+ rb_define_method(rb_cDASGN, "value", node_value, 0);
2634
+ rb_ary_push(members, rb_str_new2("value"));
2635
+ rb_define_method(rb_cDASGN, "vid", node_vid, 0);
2636
+ rb_ary_push(members, rb_str_new2("vid"));
2637
+ }
2638
+ {
2639
+ VALUE rb_cDASGN_CURR = rb_define_class_under(rb_cNode, "DASGN_CURR", rb_cNode);
2640
+ members = rb_ary_new();
2641
+ rb_cNodeSubclass[NODE_DASGN_CURR] = rb_cDASGN_CURR;
2642
+ rb_iv_set(rb_cDASGN_CURR, "__member__", members);
2643
+ rb_define_singleton_method(rb_cDASGN_CURR, "members", node_s_members, 0);
2644
+ rb_define_method(rb_cDASGN_CURR, "value", node_value, 0);
2645
+ rb_ary_push(members, rb_str_new2("value"));
2646
+ rb_define_method(rb_cDASGN_CURR, "vid", node_vid, 0);
2647
+ rb_ary_push(members, rb_str_new2("vid"));
2648
+ }
2649
+ {
2650
+ VALUE rb_cGASGN = rb_define_class_under(rb_cNode, "GASGN", rb_cNode);
2651
+ members = rb_ary_new();
2652
+ rb_cNodeSubclass[NODE_GASGN] = rb_cGASGN;
2653
+ rb_iv_set(rb_cGASGN, "__member__", members);
2654
+ rb_define_singleton_method(rb_cGASGN, "members", node_s_members, 0);
2655
+ rb_define_method(rb_cGASGN, "vid", node_vid, 0);
2656
+ rb_ary_push(members, rb_str_new2("vid"));
2657
+ rb_define_method(rb_cGASGN, "value", node_value, 0);
2658
+ rb_ary_push(members, rb_str_new2("value"));
2659
+ rb_define_method(rb_cGASGN, "entry", node_entry, 0);
2660
+ rb_ary_push(members, rb_str_new2("entry"));
2661
+ }
2662
+ {
2663
+ VALUE rb_cIASGN = rb_define_class_under(rb_cNode, "IASGN", rb_cNode);
2664
+ members = rb_ary_new();
2665
+ rb_cNodeSubclass[NODE_IASGN] = rb_cIASGN;
2666
+ rb_iv_set(rb_cIASGN, "__member__", members);
2667
+ rb_define_singleton_method(rb_cIASGN, "members", node_s_members, 0);
2668
+ rb_define_method(rb_cIASGN, "vid", node_vid, 0);
2669
+ rb_ary_push(members, rb_str_new2("vid"));
2670
+ rb_define_method(rb_cIASGN, "value", node_value, 0);
2671
+ rb_ary_push(members, rb_str_new2("value"));
2672
+ }
2673
+ {
2674
+ VALUE rb_cCDECL = rb_define_class_under(rb_cNode, "CDECL", rb_cNode);
2675
+ members = rb_ary_new();
2676
+ rb_cNodeSubclass[NODE_CDECL] = rb_cCDECL;
2677
+ rb_iv_set(rb_cCDECL, "__member__", members);
2678
+ rb_define_singleton_method(rb_cCDECL, "members", node_s_members, 0);
2679
+ rb_define_method(rb_cCDECL, "vid", node_vid, 0);
2680
+ rb_ary_push(members, rb_str_new2("vid"));
2681
+ rb_define_method(rb_cCDECL, "value", node_value, 0);
2682
+ rb_ary_push(members, rb_str_new2("value"));
2683
+ }
2684
+ {
2685
+ VALUE rb_cCVDECL = rb_define_class_under(rb_cNode, "CVDECL", rb_cNode);
2686
+ members = rb_ary_new();
2687
+ rb_cNodeSubclass[NODE_CVDECL] = rb_cCVDECL;
2688
+ rb_iv_set(rb_cCVDECL, "__member__", members);
2689
+ rb_define_singleton_method(rb_cCVDECL, "members", node_s_members, 0);
2690
+ rb_define_method(rb_cCVDECL, "value", node_value, 0);
2691
+ rb_ary_push(members, rb_str_new2("value"));
2692
+ rb_define_method(rb_cCVDECL, "vid", node_vid, 0);
2693
+ rb_ary_push(members, rb_str_new2("vid"));
2694
+ }
2695
+ {
2696
+ VALUE rb_cCVASGN = rb_define_class_under(rb_cNode, "CVASGN", rb_cNode);
2697
+ members = rb_ary_new();
2698
+ rb_cNodeSubclass[NODE_CVASGN] = rb_cCVASGN;
2699
+ rb_iv_set(rb_cCVASGN, "__member__", members);
2700
+ rb_define_singleton_method(rb_cCVASGN, "members", node_s_members, 0);
2701
+ rb_define_method(rb_cCVASGN, "value", node_value, 0);
2702
+ rb_ary_push(members, rb_str_new2("value"));
2703
+ rb_define_method(rb_cCVASGN, "vid", node_vid, 0);
2704
+ rb_ary_push(members, rb_str_new2("vid"));
2705
+ }
2706
+ {
2707
+ VALUE rb_cLVAR = rb_define_class_under(rb_cNode, "LVAR", rb_cNode);
2708
+ members = rb_ary_new();
2709
+ rb_cNodeSubclass[NODE_LVAR] = rb_cLVAR;
2710
+ rb_iv_set(rb_cLVAR, "__member__", members);
2711
+ rb_define_singleton_method(rb_cLVAR, "members", node_s_members, 0);
2712
+ rb_define_method(rb_cLVAR, "cnt", node_cnt, 0);
2713
+ rb_ary_push(members, rb_str_new2("cnt"));
2714
+ rb_define_method(rb_cLVAR, "vid", node_vid, 0);
2715
+ rb_ary_push(members, rb_str_new2("vid"));
2716
+ }
2717
+ {
2718
+ VALUE rb_cDVAR = rb_define_class_under(rb_cNode, "DVAR", rb_cNode);
2719
+ members = rb_ary_new();
2720
+ rb_cNodeSubclass[NODE_DVAR] = rb_cDVAR;
2721
+ rb_iv_set(rb_cDVAR, "__member__", members);
2722
+ rb_define_singleton_method(rb_cDVAR, "members", node_s_members, 0);
2723
+ rb_define_method(rb_cDVAR, "vid", node_vid, 0);
2724
+ rb_ary_push(members, rb_str_new2("vid"));
2725
+ }
2726
+ {
2727
+ VALUE rb_cGVAR = rb_define_class_under(rb_cNode, "GVAR", rb_cNode);
2728
+ members = rb_ary_new();
2729
+ rb_cNodeSubclass[NODE_GVAR] = rb_cGVAR;
2730
+ rb_iv_set(rb_cGVAR, "__member__", members);
2731
+ rb_define_singleton_method(rb_cGVAR, "members", node_s_members, 0);
2732
+ rb_define_method(rb_cGVAR, "vid", node_vid, 0);
2733
+ rb_ary_push(members, rb_str_new2("vid"));
2734
+ rb_define_method(rb_cGVAR, "entry", node_entry, 0);
2735
+ rb_ary_push(members, rb_str_new2("entry"));
2736
+ }
2737
+ {
2738
+ VALUE rb_cIVAR = rb_define_class_under(rb_cNode, "IVAR", rb_cNode);
2739
+ members = rb_ary_new();
2740
+ rb_cNodeSubclass[NODE_IVAR] = rb_cIVAR;
2741
+ rb_iv_set(rb_cIVAR, "__member__", members);
2742
+ rb_define_singleton_method(rb_cIVAR, "members", node_s_members, 0);
2743
+ rb_define_method(rb_cIVAR, "vid", node_vid, 0);
2744
+ rb_ary_push(members, rb_str_new2("vid"));
2745
+ }
2746
+ {
2747
+ VALUE rb_cCONST = rb_define_class_under(rb_cNode, "CONST", rb_cNode);
2748
+ members = rb_ary_new();
2749
+ rb_cNodeSubclass[NODE_CONST] = rb_cCONST;
2750
+ rb_iv_set(rb_cCONST, "__member__", members);
2751
+ rb_define_singleton_method(rb_cCONST, "members", node_s_members, 0);
2752
+ rb_define_method(rb_cCONST, "vid", node_vid, 0);
2753
+ rb_ary_push(members, rb_str_new2("vid"));
2754
+ }
2755
+ {
2756
+ VALUE rb_cCVAR = rb_define_class_under(rb_cNode, "CVAR", rb_cNode);
2757
+ members = rb_ary_new();
2758
+ rb_cNodeSubclass[NODE_CVAR] = rb_cCVAR;
2759
+ rb_iv_set(rb_cCVAR, "__member__", members);
2760
+ rb_define_singleton_method(rb_cCVAR, "members", node_s_members, 0);
2761
+ rb_define_method(rb_cCVAR, "vid", node_vid, 0);
2762
+ rb_ary_push(members, rb_str_new2("vid"));
2763
+ }
2764
+ {
2765
+ VALUE rb_cBLOCK_ARG = rb_define_class_under(rb_cNode, "BLOCK_ARG", rb_cNode);
2766
+ members = rb_ary_new();
2767
+ rb_cNodeSubclass[NODE_BLOCK_ARG] = rb_cBLOCK_ARG;
2768
+ rb_iv_set(rb_cBLOCK_ARG, "__member__", members);
2769
+ rb_define_singleton_method(rb_cBLOCK_ARG, "members", node_s_members, 0);
2770
+ rb_define_method(rb_cBLOCK_ARG, "cnt", node_cnt, 0);
2771
+ rb_ary_push(members, rb_str_new2("cnt"));
2772
+ }
2773
+ {
2774
+ VALUE rb_cCOLON2 = rb_define_class_under(rb_cNode, "COLON2", rb_cNode);
2775
+ members = rb_ary_new();
2776
+ rb_cNodeSubclass[NODE_COLON2] = rb_cCOLON2;
2777
+ rb_iv_set(rb_cCOLON2, "__member__", members);
2778
+ rb_define_singleton_method(rb_cCOLON2, "members", node_s_members, 0);
2779
+ rb_define_method(rb_cCOLON2, "head", node_head, 0);
2780
+ rb_ary_push(members, rb_str_new2("head"));
2781
+ rb_define_method(rb_cCOLON2, "mid", node_mid, 0);
2782
+ rb_ary_push(members, rb_str_new2("mid"));
2783
+ }
2784
+ {
2785
+ VALUE rb_cCOLON3 = rb_define_class_under(rb_cNode, "COLON3", rb_cNode);
2786
+ members = rb_ary_new();
2787
+ rb_cNodeSubclass[NODE_COLON3] = rb_cCOLON3;
2788
+ rb_iv_set(rb_cCOLON3, "__member__", members);
2789
+ rb_define_singleton_method(rb_cCOLON3, "members", node_s_members, 0);
2790
+ rb_define_method(rb_cCOLON3, "mid", node_mid, 0);
2791
+ rb_ary_push(members, rb_str_new2("mid"));
2792
+ }
2793
+ {
2794
+ VALUE rb_cNTH_REF = rb_define_class_under(rb_cNode, "NTH_REF", rb_cNode);
2795
+ members = rb_ary_new();
2796
+ rb_cNodeSubclass[NODE_NTH_REF] = rb_cNTH_REF;
2797
+ rb_iv_set(rb_cNTH_REF, "__member__", members);
2798
+ rb_define_singleton_method(rb_cNTH_REF, "members", node_s_members, 0);
2799
+ rb_define_method(rb_cNTH_REF, "nth", node_nth, 0);
2800
+ rb_ary_push(members, rb_str_new2("nth"));
2801
+ rb_define_method(rb_cNTH_REF, "cnt", node_cnt, 0);
2802
+ rb_ary_push(members, rb_str_new2("cnt"));
2803
+ }
2804
+ {
2805
+ VALUE rb_cBACK_REF = rb_define_class_under(rb_cNode, "BACK_REF", rb_cNode);
2806
+ members = rb_ary_new();
2807
+ rb_cNodeSubclass[NODE_BACK_REF] = rb_cBACK_REF;
2808
+ rb_iv_set(rb_cBACK_REF, "__member__", members);
2809
+ rb_define_singleton_method(rb_cBACK_REF, "members", node_s_members, 0);
2810
+ rb_define_method(rb_cBACK_REF, "nth", node_nth, 0);
2811
+ rb_ary_push(members, rb_str_new2("nth"));
2812
+ rb_define_method(rb_cBACK_REF, "cnt", node_cnt, 0);
2813
+ rb_ary_push(members, rb_str_new2("cnt"));
2814
+ }
2815
+ {
2816
+ VALUE rb_cHASH = rb_define_class_under(rb_cNode, "HASH", rb_cNode);
2817
+ members = rb_ary_new();
2818
+ rb_cNodeSubclass[NODE_HASH] = rb_cHASH;
2819
+ rb_iv_set(rb_cHASH, "__member__", members);
2820
+ rb_define_singleton_method(rb_cHASH, "members", node_s_members, 0);
2821
+ rb_define_method(rb_cHASH, "head", node_head, 0);
2822
+ rb_ary_push(members, rb_str_new2("head"));
2823
+ }
2824
+ {
2825
+ VALUE rb_cZARRAY = rb_define_class_under(rb_cNode, "ZARRAY", rb_cNode);
2826
+ members = rb_ary_new();
2827
+ rb_cNodeSubclass[NODE_ZARRAY] = rb_cZARRAY;
2828
+ rb_iv_set(rb_cZARRAY, "__member__", members);
2829
+ rb_define_singleton_method(rb_cZARRAY, "members", node_s_members, 0);
2830
+ }
2831
+ {
2832
+ VALUE rb_cARRAY = rb_define_class_under(rb_cNode, "ARRAY", rb_cNode);
2833
+ members = rb_ary_new();
2834
+ rb_cNodeSubclass[NODE_ARRAY] = rb_cARRAY;
2835
+ rb_iv_set(rb_cARRAY, "__member__", members);
2836
+ rb_define_singleton_method(rb_cARRAY, "members", node_s_members, 0);
2837
+ rb_define_method(rb_cARRAY, "alen", node_alen, 0);
2838
+ rb_ary_push(members, rb_str_new2("alen"));
2839
+ rb_define_method(rb_cARRAY, "head", node_head, 0);
2840
+ rb_ary_push(members, rb_str_new2("head"));
2841
+ rb_define_method(rb_cARRAY, "next", node_next, 0);
2842
+ rb_ary_push(members, rb_str_new2("next"));
2843
+ }
2844
+ {
2845
+ VALUE rb_cSTR = rb_define_class_under(rb_cNode, "STR", rb_cNode);
2846
+ members = rb_ary_new();
2847
+ rb_cNodeSubclass[NODE_STR] = rb_cSTR;
2848
+ rb_iv_set(rb_cSTR, "__member__", members);
2849
+ rb_define_singleton_method(rb_cSTR, "members", node_s_members, 0);
2850
+ rb_define_method(rb_cSTR, "lit", node_lit, 0);
2851
+ rb_ary_push(members, rb_str_new2("lit"));
2852
+ }
2853
+ {
2854
+ VALUE rb_cDREGX = rb_define_class_under(rb_cNode, "DREGX", rb_cNode);
2855
+ members = rb_ary_new();
2856
+ rb_cNodeSubclass[NODE_DREGX] = rb_cDREGX;
2857
+ rb_iv_set(rb_cDREGX, "__member__", members);
2858
+ rb_define_singleton_method(rb_cDREGX, "members", node_s_members, 0);
2859
+ rb_define_method(rb_cDREGX, "lit", node_lit, 0);
2860
+ rb_ary_push(members, rb_str_new2("lit"));
2861
+ rb_define_method(rb_cDREGX, "next", node_next, 0);
2862
+ rb_ary_push(members, rb_str_new2("next"));
2863
+ rb_define_method(rb_cDREGX, "cflag", node_cflag, 0);
2864
+ rb_ary_push(members, rb_str_new2("cflag"));
2865
+ }
2866
+ {
2867
+ VALUE rb_cDREGX_ONCE = rb_define_class_under(rb_cNode, "DREGX_ONCE", rb_cNode);
2868
+ members = rb_ary_new();
2869
+ rb_cNodeSubclass[NODE_DREGX_ONCE] = rb_cDREGX_ONCE;
2870
+ rb_iv_set(rb_cDREGX_ONCE, "__member__", members);
2871
+ rb_define_singleton_method(rb_cDREGX_ONCE, "members", node_s_members, 0);
2872
+ rb_define_method(rb_cDREGX_ONCE, "lit", node_lit, 0);
2873
+ rb_ary_push(members, rb_str_new2("lit"));
2874
+ rb_define_method(rb_cDREGX_ONCE, "next", node_next, 0);
2875
+ rb_ary_push(members, rb_str_new2("next"));
2876
+ rb_define_method(rb_cDREGX_ONCE, "cflag", node_cflag, 0);
2877
+ rb_ary_push(members, rb_str_new2("cflag"));
2878
+ }
2879
+ {
2880
+ VALUE rb_cDSTR = rb_define_class_under(rb_cNode, "DSTR", rb_cNode);
2881
+ members = rb_ary_new();
2882
+ rb_cNodeSubclass[NODE_DSTR] = rb_cDSTR;
2883
+ rb_iv_set(rb_cDSTR, "__member__", members);
2884
+ rb_define_singleton_method(rb_cDSTR, "members", node_s_members, 0);
2885
+ rb_define_method(rb_cDSTR, "lit", node_lit, 0);
2886
+ rb_ary_push(members, rb_str_new2("lit"));
2887
+ rb_define_method(rb_cDSTR, "next", node_next, 0);
2888
+ rb_ary_push(members, rb_str_new2("next"));
2889
+ }
2890
+ {
2891
+ VALUE rb_cDXSTR = rb_define_class_under(rb_cNode, "DXSTR", rb_cNode);
2892
+ members = rb_ary_new();
2893
+ rb_cNodeSubclass[NODE_DXSTR] = rb_cDXSTR;
2894
+ rb_iv_set(rb_cDXSTR, "__member__", members);
2895
+ rb_define_singleton_method(rb_cDXSTR, "members", node_s_members, 0);
2896
+ rb_define_method(rb_cDXSTR, "lit", node_lit, 0);
2897
+ rb_ary_push(members, rb_str_new2("lit"));
2898
+ rb_define_method(rb_cDXSTR, "next", node_next, 0);
2899
+ rb_ary_push(members, rb_str_new2("next"));
2900
+ }
2901
+ {
2902
+ VALUE rb_cXSTR = rb_define_class_under(rb_cNode, "XSTR", rb_cNode);
2903
+ members = rb_ary_new();
2904
+ rb_cNodeSubclass[NODE_XSTR] = rb_cXSTR;
2905
+ rb_iv_set(rb_cXSTR, "__member__", members);
2906
+ rb_define_singleton_method(rb_cXSTR, "members", node_s_members, 0);
2907
+ rb_define_method(rb_cXSTR, "lit", node_lit, 0);
2908
+ rb_ary_push(members, rb_str_new2("lit"));
2909
+ }
2910
+ #if defined(C_ALLOCA) || RUBY_VERSION_CODE >= 190
2911
+ {
2912
+ VALUE rb_cALLOCA = rb_define_class_under(rb_cNode, "ALLOCA", rb_cNode);
2913
+ members = rb_ary_new();
2914
+ rb_cNodeSubclass[NODE_ALLOCA] = rb_cALLOCA;
2915
+ rb_iv_set(rb_cALLOCA, "__member__", members);
2916
+ rb_define_singleton_method(rb_cALLOCA, "members", node_s_members, 0);
2917
+ rb_define_method(rb_cALLOCA, "lit", node_lit, 0);
2918
+ rb_ary_push(members, rb_str_new2("lit"));
2919
+ rb_define_method(rb_cALLOCA, "value", node_value, 0);
2920
+ rb_ary_push(members, rb_str_new2("value"));
2921
+ rb_define_method(rb_cALLOCA, "cnt", node_cnt, 0);
2922
+ rb_ary_push(members, rb_str_new2("cnt"));
2923
+ }
2924
+ #endif
2925
+ {
2926
+ VALUE rb_cLIT = rb_define_class_under(rb_cNode, "LIT", rb_cNode);
2927
+ members = rb_ary_new();
2928
+ rb_cNodeSubclass[NODE_LIT] = rb_cLIT;
2929
+ rb_iv_set(rb_cLIT, "__member__", members);
2930
+ rb_define_singleton_method(rb_cLIT, "members", node_s_members, 0);
2931
+ rb_define_method(rb_cLIT, "lit", node_lit, 0);
2932
+ rb_ary_push(members, rb_str_new2("lit"));
2933
+ }
2934
+ {
2935
+ VALUE rb_cATTRSET = rb_define_class_under(rb_cNode, "ATTRSET", rb_cNode);
2936
+ members = rb_ary_new();
2937
+ rb_cNodeSubclass[NODE_ATTRSET] = rb_cATTRSET;
2938
+ rb_iv_set(rb_cATTRSET, "__member__", members);
2939
+ rb_define_singleton_method(rb_cATTRSET, "members", node_s_members, 0);
2940
+ rb_define_method(rb_cATTRSET, "vid", node_vid, 0);
2941
+ rb_ary_push(members, rb_str_new2("vid"));
2942
+ }
2943
+ {
2944
+ VALUE rb_cDEFN = rb_define_class_under(rb_cNode, "DEFN", rb_cNode);
2945
+ members = rb_ary_new();
2946
+ rb_cNodeSubclass[NODE_DEFN] = rb_cDEFN;
2947
+ rb_iv_set(rb_cDEFN, "__member__", members);
2948
+ rb_define_singleton_method(rb_cDEFN, "members", node_s_members, 0);
2949
+ rb_define_method(rb_cDEFN, "defn", node_defn, 0);
2950
+ rb_ary_push(members, rb_str_new2("defn"));
2951
+ rb_define_method(rb_cDEFN, "mid", node_mid, 0);
2952
+ rb_ary_push(members, rb_str_new2("mid"));
2953
+ rb_define_method(rb_cDEFN, "noex", node_noex, 0);
2954
+ rb_ary_push(members, rb_str_new2("noex"));
2955
+ }
2956
+ {
2957
+ VALUE rb_cDEFS = rb_define_class_under(rb_cNode, "DEFS", rb_cNode);
2958
+ members = rb_ary_new();
2959
+ rb_cNodeSubclass[NODE_DEFS] = rb_cDEFS;
2960
+ rb_iv_set(rb_cDEFS, "__member__", members);
2961
+ rb_define_singleton_method(rb_cDEFS, "members", node_s_members, 0);
2962
+ rb_define_method(rb_cDEFS, "defn", node_defn, 0);
2963
+ rb_ary_push(members, rb_str_new2("defn"));
2964
+ rb_define_method(rb_cDEFS, "recv", node_recv, 0);
2965
+ rb_ary_push(members, rb_str_new2("recv"));
2966
+ rb_define_method(rb_cDEFS, "mid", node_mid, 0);
2967
+ rb_ary_push(members, rb_str_new2("mid"));
2968
+ }
2969
+ {
2970
+ VALUE rb_cUNDEF = rb_define_class_under(rb_cNode, "UNDEF", rb_cNode);
2971
+ members = rb_ary_new();
2972
+ rb_cNodeSubclass[NODE_UNDEF] = rb_cUNDEF;
2973
+ rb_iv_set(rb_cUNDEF, "__member__", members);
2974
+ rb_define_singleton_method(rb_cUNDEF, "members", node_s_members, 0);
2975
+ rb_define_method(rb_cUNDEF, "mid", node_mid, 0);
2976
+ rb_ary_push(members, rb_str_new2("mid"));
2977
+ }
2978
+ {
2979
+ VALUE rb_cALIAS = rb_define_class_under(rb_cNode, "ALIAS", rb_cNode);
2980
+ members = rb_ary_new();
2981
+ rb_cNodeSubclass[NODE_ALIAS] = rb_cALIAS;
2982
+ rb_iv_set(rb_cALIAS, "__member__", members);
2983
+ rb_define_singleton_method(rb_cALIAS, "members", node_s_members, 0);
2984
+ rb_define_method(rb_cALIAS, "first", node_1st, 0);
2985
+ rb_ary_push(members, rb_str_new2("first"));
2986
+ rb_define_method(rb_cALIAS, "second", node_2nd, 0);
2987
+ rb_ary_push(members, rb_str_new2("second"));
2988
+ }
2989
+ {
2990
+ VALUE rb_cVALIAS = rb_define_class_under(rb_cNode, "VALIAS", rb_cNode);
2991
+ members = rb_ary_new();
2992
+ rb_cNodeSubclass[NODE_VALIAS] = rb_cVALIAS;
2993
+ rb_iv_set(rb_cVALIAS, "__member__", members);
2994
+ rb_define_singleton_method(rb_cVALIAS, "members", node_s_members, 0);
2995
+ rb_define_method(rb_cVALIAS, "first", node_1st, 0);
2996
+ rb_ary_push(members, rb_str_new2("first"));
2997
+ rb_define_method(rb_cVALIAS, "second", node_2nd, 0);
2998
+ rb_ary_push(members, rb_str_new2("second"));
2999
+ }
3000
+ {
3001
+ VALUE rb_cSCLASS = rb_define_class_under(rb_cNode, "SCLASS", rb_cNode);
3002
+ members = rb_ary_new();
3003
+ rb_cNodeSubclass[NODE_SCLASS] = rb_cSCLASS;
3004
+ rb_iv_set(rb_cSCLASS, "__member__", members);
3005
+ rb_define_singleton_method(rb_cSCLASS, "members", node_s_members, 0);
3006
+ rb_define_method(rb_cSCLASS, "recv", node_recv, 0);
3007
+ rb_ary_push(members, rb_str_new2("recv"));
3008
+ rb_define_method(rb_cSCLASS, "body", node_body, 0);
3009
+ rb_ary_push(members, rb_str_new2("body"));
3010
+ }
3011
+ {
3012
+ VALUE rb_cDEFINED = rb_define_class_under(rb_cNode, "DEFINED", rb_cNode);
3013
+ members = rb_ary_new();
3014
+ rb_cNodeSubclass[NODE_DEFINED] = rb_cDEFINED;
3015
+ rb_iv_set(rb_cDEFINED, "__member__", members);
3016
+ rb_define_singleton_method(rb_cDEFINED, "members", node_s_members, 0);
3017
+ rb_define_method(rb_cDEFINED, "head", node_head, 0);
3018
+ rb_ary_push(members, rb_str_new2("head"));
3019
+ }
3020
+ {
3021
+ VALUE rb_cIFUNC = rb_define_class_under(rb_cNode, "IFUNC", rb_cNode);
3022
+ members = rb_ary_new();
3023
+ rb_cNodeSubclass[NODE_IFUNC] = rb_cIFUNC;
3024
+ rb_iv_set(rb_cIFUNC, "__member__", members);
3025
+ rb_define_singleton_method(rb_cIFUNC, "members", node_s_members, 0);
3026
+ rb_define_method(rb_cIFUNC, "cfnc", node_cfnc, 0);
3027
+ rb_ary_push(members, rb_str_new2("cfnc"));
3028
+ rb_define_method(rb_cIFUNC, "tval", node_tval, 0);
3029
+ rb_ary_push(members, rb_str_new2("tval"));
3030
+ rb_define_method(rb_cIFUNC, "argc", node_argc, 0);
3031
+ rb_ary_push(members, rb_str_new2("argc"));
3032
+ }
3033
+ {
3034
+ VALUE rb_cCFUNC = rb_define_class_under(rb_cNode, "CFUNC", rb_cNode);
3035
+ members = rb_ary_new();
3036
+ rb_cNodeSubclass[NODE_CFUNC] = rb_cCFUNC;
3037
+ rb_iv_set(rb_cCFUNC, "__member__", members);
3038
+ rb_define_singleton_method(rb_cCFUNC, "members", node_s_members, 0);
3039
+ rb_define_method(rb_cCFUNC, "cfnc", node_cfnc, 0);
3040
+ rb_ary_push(members, rb_str_new2("cfnc"));
3041
+ rb_define_method(rb_cCFUNC, "tval", node_tval, 0);
3042
+ rb_ary_push(members, rb_str_new2("tval"));
3043
+ rb_define_method(rb_cCFUNC, "argc", node_argc, 0);
3044
+ rb_ary_push(members, rb_str_new2("argc"));
3045
+ }
3046
+ {
3047
+ VALUE rb_cCREF = rb_define_class_under(rb_cNode, "CREF", rb_cNode);
3048
+ members = rb_ary_new();
3049
+ rb_cNodeSubclass[NODE_CREF] = rb_cCREF;
3050
+ rb_iv_set(rb_cCREF, "__member__", members);
3051
+ rb_define_singleton_method(rb_cCREF, "members", node_s_members, 0);
3052
+ rb_define_method(rb_cCREF, "clss", node_clss, 0);
3053
+ rb_ary_push(members, rb_str_new2("clss"));
3054
+ rb_define_method(rb_cCREF, "next", node_next, 0);
3055
+ rb_ary_push(members, rb_str_new2("next"));
3056
+ rb_define_method(rb_cCREF, "body", node_body, 0);
3057
+ rb_ary_push(members, rb_str_new2("body"));
3058
+ }
3059
+ {
3060
+ VALUE rb_cBMETHOD = rb_define_class_under(rb_cNode, "BMETHOD", rb_cNode);
3061
+ members = rb_ary_new();
3062
+ rb_cNodeSubclass[NODE_BMETHOD] = rb_cBMETHOD;
3063
+ rb_iv_set(rb_cBMETHOD, "__member__", members);
3064
+ rb_define_singleton_method(rb_cBMETHOD, "members", node_s_members, 0);
3065
+ rb_define_method(rb_cBMETHOD, "cval", node_cval, 0);
3066
+ rb_ary_push(members, rb_str_new2("cval"));
3067
+ }
3068
+ {
3069
+ VALUE rb_cMEMO = rb_define_class_under(rb_cNode, "MEMO", rb_cNode);
3070
+ members = rb_ary_new();
3071
+ rb_cNodeSubclass[NODE_MEMO] = rb_cMEMO;
3072
+ rb_iv_set(rb_cMEMO, "__member__", members);
3073
+ rb_define_singleton_method(rb_cMEMO, "members", node_s_members, 0);
3074
+ rb_define_method(rb_cMEMO, "lit", node_lit, 0);
3075
+ rb_ary_push(members, rb_str_new2("lit"));
3076
+ rb_define_method(rb_cMEMO, "tval", node_tval, 0);
3077
+ rb_ary_push(members, rb_str_new2("tval"));
3078
+ }
3079
+ {
3080
+ VALUE rb_cEVSTR = rb_define_class_under(rb_cNode, "EVSTR", rb_cNode);
3081
+ members = rb_ary_new();
3082
+ rb_cNodeSubclass[NODE_EVSTR] = rb_cEVSTR;
3083
+ rb_iv_set(rb_cEVSTR, "__member__", members);
3084
+ rb_define_singleton_method(rb_cEVSTR, "members", node_s_members, 0);
3085
+ rb_define_method(rb_cEVSTR, "body", node_body, 0);
3086
+ rb_ary_push(members, rb_str_new2("body"));
3087
+ }
3088
+ {
3089
+ VALUE rb_cMETHOD = rb_define_class_under(rb_cNode, "METHOD", rb_cNode);
3090
+ members = rb_ary_new();
3091
+ rb_cNodeSubclass[NODE_METHOD] = rb_cMETHOD;
3092
+ rb_iv_set(rb_cMETHOD, "__member__", members);
3093
+ rb_define_singleton_method(rb_cMETHOD, "members", node_s_members, 0);
3094
+ rb_define_method(rb_cMETHOD, "body", node_body, 0);
3095
+ rb_ary_push(members, rb_str_new2("body"));
3096
+ rb_define_method(rb_cMETHOD, "clss", node_clss, 0);
3097
+ rb_ary_push(members, rb_str_new2("clss"));
3098
+ rb_define_method(rb_cMETHOD, "noex", node_noex, 0);
3099
+ rb_ary_push(members, rb_str_new2("noex"));
3100
+ }
3101
+ {
3102
+ VALUE rb_cFBODY = rb_define_class_under(rb_cNode, "FBODY", rb_cNode);
3103
+ members = rb_ary_new();
3104
+ rb_cNodeSubclass[NODE_FBODY] = rb_cFBODY;
3105
+ rb_iv_set(rb_cFBODY, "__member__", members);
3106
+ rb_define_singleton_method(rb_cFBODY, "members", node_s_members, 0);
3107
+ rb_define_method(rb_cFBODY, "body", node_body, 0);
3108
+ rb_ary_push(members, rb_str_new2("body"));
3109
+ rb_define_method(rb_cFBODY, "oid", node_oid, 0);
3110
+ rb_ary_push(members, rb_str_new2("oid"));
3111
+ rb_define_method(rb_cFBODY, "cnt", node_cnt, 0);
3112
+ rb_ary_push(members, rb_str_new2("cnt"));
3113
+ }
3114
+ {
3115
+ VALUE rb_cCLASS = rb_define_class_under(rb_cNode, "CLASS", rb_cNode);
3116
+ members = rb_ary_new();
3117
+ rb_cNodeSubclass[NODE_CLASS] = rb_cCLASS;
3118
+ rb_iv_set(rb_cCLASS, "__member__", members);
3119
+ rb_define_singleton_method(rb_cCLASS, "members", node_s_members, 0);
3120
+ rb_define_method(rb_cCLASS, "super", node_super, 0);
3121
+ rb_ary_push(members, rb_str_new2("super"));
3122
+ rb_define_method(rb_cCLASS, "cpath", node_cpath, 0);
3123
+ rb_ary_push(members, rb_str_new2("cpath"));
3124
+ rb_define_method(rb_cCLASS, "body", node_body, 0);
3125
+ rb_ary_push(members, rb_str_new2("body"));
3126
+ }
3127
+ {
3128
+ VALUE rb_cMODULE = rb_define_class_under(rb_cNode, "MODULE", rb_cNode);
3129
+ members = rb_ary_new();
3130
+ rb_cNodeSubclass[NODE_MODULE] = rb_cMODULE;
3131
+ rb_iv_set(rb_cMODULE, "__member__", members);
3132
+ rb_define_singleton_method(rb_cMODULE, "members", node_s_members, 0);
3133
+ rb_define_method(rb_cMODULE, "cpath", node_cpath, 0);
3134
+ rb_ary_push(members, rb_str_new2("cpath"));
3135
+ rb_define_method(rb_cMODULE, "body", node_body, 0);
3136
+ rb_ary_push(members, rb_str_new2("body"));
3137
+ }
3138
+ {
3139
+ VALUE rb_cDSYM = rb_define_class_under(rb_cNode, "DSYM", rb_cNode);
3140
+ members = rb_ary_new();
3141
+ rb_cNodeSubclass[NODE_DSYM] = rb_cDSYM;
3142
+ rb_iv_set(rb_cDSYM, "__member__", members);
3143
+ rb_define_singleton_method(rb_cDSYM, "members", node_s_members, 0);
3144
+ rb_define_method(rb_cDSYM, "lit", node_lit, 0);
3145
+ rb_ary_push(members, rb_str_new2("lit"));
3146
+ rb_define_method(rb_cDSYM, "next", node_next, 0);
3147
+ rb_ary_push(members, rb_str_new2("next"));
3148
+ }
3149
+ {
3150
+ VALUE rb_cATTRASGN = rb_define_class_under(rb_cNode, "ATTRASGN", rb_cNode);
3151
+ members = rb_ary_new();
3152
+ rb_cNodeSubclass[NODE_ATTRASGN] = rb_cATTRASGN;
3153
+ rb_iv_set(rb_cATTRASGN, "__member__", members);
3154
+ rb_define_singleton_method(rb_cATTRASGN, "members", node_s_members, 0);
3155
+ rb_define_method(rb_cATTRASGN, "mid", node_mid, 0);
3156
+ rb_ary_push(members, rb_str_new2("mid"));
3157
+ rb_define_method(rb_cATTRASGN, "recv", node_recv, 0);
3158
+ rb_ary_push(members, rb_str_new2("recv"));
3159
+ rb_define_method(rb_cATTRASGN, "args", node_args, 0);
3160
+ rb_ary_push(members, rb_str_new2("args"));
3161
+ }
3162
+ }
3163
+
3164
+