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,210 @@
1
+ #include "insns_info.h"
2
+ #include "ruby_version.h"
3
+
4
+ #ifdef RUBY_HAS_YARV
5
+
6
+ #ruby <<END
7
+ require 'ruby_source_dir'
8
+ insns_location = "#{RUBY_SOURCE_DIR}/insns.inc"
9
+ insns_info_location = "#{RUBY_SOURCE_DIR}/insns_info.inc"
10
+ insns_def_location = "#{RUBY_SOURCE_DIR}/insns.def"
11
+ iseq_c_location = "#{RUBY_SOURCE_DIR}/iseq.c"
12
+
13
+ INSTRUCTION_NAMES = []
14
+ record_instruction_names = false
15
+
16
+ [ insns_location, insns_info_location ].each do |file|
17
+ next if not File.exist?(file)
18
+
19
+ File.open(file) do |input|
20
+ while (line = input.gets) != nil do
21
+ line.chomp!
22
+ if line =~ /^\}/ then
23
+ record_instruction_names = false
24
+ end
25
+ if record_instruction_names then
26
+ name = line.chomp(',').gsub(/"/, '').lstrip.upcase
27
+ INSTRUCTION_NAMES.push(name) if name != ''
28
+ end
29
+ if line =~ /static.*insn_name_info.*=/ then
30
+ record_instruction_names = true
31
+ end
32
+ end
33
+ end
34
+ end
35
+
36
+ write = false
37
+
38
+ [ iseq_c_location ].each do |file|
39
+ next if not File.exist?(file)
40
+
41
+ File.open(file) do |input|
42
+ while (line = input.gets) != nil do
43
+ line.chomp!
44
+ case line
45
+ when /^make_compile_option\(/
46
+ puts 'void'
47
+ write = true
48
+ when /^static.*COMPILE_OPTION_DEFAULT.*=/
49
+ write = true
50
+ when /^static.*COMPILE_OPTION_FALSE;/
51
+ puts line
52
+ end
53
+ puts line if write
54
+ if line =~ /^\}/ then
55
+ write = false
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ INSTRUCTION_OPERAND_NAMES = {}
62
+
63
+ [ insns_def_location ].each do |file|
64
+ next if not File.exist?(file)
65
+
66
+ File.open(file) do |input|
67
+ while (line = input.gets) != nil do
68
+ line.chomp!
69
+ case line
70
+ when /^DEFINE_INSN/
71
+ name = input.gets.chomp
72
+ operand_line = input.gets.chomp
73
+ operand_line.gsub!(/\((.*)\)/, '\1')
74
+ operands = operand_line.split(',')
75
+ operand_names = operands.map { |x| x.split[1] }
76
+ INSTRUCTION_OPERAND_NAMES[name] = operand_names
77
+ end
78
+ end
79
+ end
80
+ end
81
+
82
+ nil
83
+ END
84
+
85
+ VALUE instruction_class[YARV_MAX_INSTRUCTION_SIZE];
86
+
87
+ static ID operand_type_name_of(int operand_type)
88
+ {
89
+ char const * retval = "????";
90
+
91
+ switch(operand_type)
92
+ {
93
+ case TS_ISEQ: retval = "iseq"; break;
94
+ case TS_GENTRY: retval = "gentry"; break;
95
+ case TS_OFFSET: retval = "operand"; break;
96
+ case TS_DINDEX: retval = "dindex"; break;
97
+ case TS_VARIABLE: retval = "variable"; break;
98
+ case TS_CDHASH: retval = "cdhash"; break;
99
+ case TS_IC: retval = "ic"; break;
100
+ case TS_ID: retval = "id"; break;
101
+ case TS_VALUE: retval = "value"; break;
102
+ case TS_LINDEX: retval = "lindex"; break;
103
+ case TS_NUM: retval = "num"; break;
104
+ }
105
+
106
+ return rb_intern(retval);
107
+ }
108
+
109
+ #ruby <<END
110
+ INSTRUCTION_NAMES.each_with_index do |name, index|
111
+ $operand_names = INSTRUCTION_OPERAND_NAMES[name.downcase]
112
+
113
+ # 1 #<VM::Instruction::TRACE:0x402d991c @length=2, @operands=[1],
114
+ # @instruction=45, @operand_types=[:num], @name=:trace>
115
+ puts <<-END
116
+ /*
117
+ * call-seq:
118
+ * insn.length => Integer
119
+ *
120
+ * Returns the length of the instruction.
121
+ */
122
+ static VALUE insn_#{name}_length(VALUE self)
123
+ {
124
+ return LONG2NUM(insn_len(#{index}));
125
+ }
126
+
127
+ /*
128
+ * call-seq:
129
+ * insn.to_i => Integer
130
+ *
131
+ * Returns the numeric instruction number.
132
+ */
133
+ static VALUE insn_#{name}_to_i(VALUE self)
134
+ {
135
+ return NUM2LONG(#{index});
136
+ }
137
+
138
+ /*
139
+ * call-seq:
140
+ * insn.operand_types => Array of Symbol
141
+ *
142
+ * Returns an array containing the types of the operands.
143
+ */
144
+ static VALUE insn_#{name}_operand_types(VALUE self)
145
+ {
146
+ VALUE operand_types = rb_ary_new();
147
+ char * s;
148
+
149
+ for(s = insn_op_types(#{index}); *s != '\\0'; ++s)
150
+ {
151
+ rb_ary_push(operand_types, ID2SYM(operand_type_name_of(*s)));
152
+ }
153
+
154
+ return operand_types;
155
+ }
156
+
157
+ /*
158
+ * call-seq:
159
+ * insn.name => Symbol
160
+ *
161
+ * Returns the name of the instruction.
162
+ */
163
+ static VALUE insn_#{name}_name(VALUE self)
164
+ {
165
+ return rb_intern("#{name}");
166
+ }
167
+
168
+ /*
169
+ * call-seq:
170
+ * insn.name => Symbol
171
+ *
172
+ * Returns the name of the operands for this instruction.
173
+ */
174
+ static VALUE insn_#{name}_operand_names(VALUE self)
175
+ {
176
+ VALUE v[] = {
177
+ #{$operand_names.map { |x| "ID2SYM(rb_intern(\"#{x}\"))" }.join(', ')}
178
+ };
179
+ return rb_ary_new4(#{$operand_names.size}, v);
180
+ }
181
+
182
+ END
183
+ end
184
+ nil
185
+ END
186
+
187
+ void define_instruction_subclasses(VALUE rb_cInstruction)
188
+ {
189
+ /* For rdoc: rb_cVM = rb_define_class("VM", rb_cObject); */
190
+ /* For rdoc: rb_cInstruction = rb_define_class_under(rb_cVM, "Instruction", rb_cObject); */
191
+
192
+ #ruby <<END
193
+ INSTRUCTION_NAMES.each_with_index do |name, index|
194
+ puts <<-END
195
+ {
196
+ VALUE rb_cInstruction_#{name} = instruction_class[#{index}] = rb_define_class_under(rb_cInstruction, "#{name}", rb_cInstruction);
197
+ rb_define_method(rb_cInstruction_#{name}, "length", insn_#{name}_length, 0);
198
+ rb_define_method(rb_cInstruction_#{name}, "to_i", insn_#{name}_to_i, 0);
199
+ rb_define_method(rb_cInstruction_#{name}, "operand_types", insn_#{name}_operand_types, 0);
200
+ rb_define_method(rb_cInstruction_#{name}, "operand_names", insn_#{name}_operand_names, 0);
201
+ rb_define_method(rb_cInstruction_#{name}, "name", insn_#{name}_name, 0);
202
+ }
203
+ END
204
+ end
205
+ nil
206
+ END
207
+ }
208
+
209
+ #endif
210
+
@@ -0,0 +1,819 @@
1
+ #ifndef insns_info__h_
2
+ #define insns_info__h_
3
+
4
+ #include "ruby_version.h"
5
+
6
+ #ifdef RUBY_HAS_YARV
7
+
8
+ #include "vm.h"
9
+ #include "ruby.h"
10
+ #include "yarvcore.h"
11
+
12
+ /** -*-c-*-
13
+ This file contains YARV instructions list.
14
+
15
+ ----
16
+ This file is auto generated by insns2vm.rb
17
+ DO NOT TOUCH!
18
+
19
+ If you want to fix something, you must edit 'template/insns.inc.tmpl'
20
+ or insns2vm.rb
21
+ */
22
+
23
+
24
+ /* BIN : Basic Instruction Name */
25
+ #define BIN(n) YARVINSN_##n
26
+
27
+ enum{
28
+ BIN(nop) = 0,
29
+ BIN(getlocal) = 1,
30
+ BIN(setlocal) = 2,
31
+ BIN(getspecial) = 3,
32
+ BIN(setspecial) = 4,
33
+ BIN(getdynamic) = 5,
34
+ BIN(setdynamic) = 6,
35
+ BIN(getinstancevariable) = 7,
36
+ BIN(setinstancevariable) = 8,
37
+ BIN(getclassvariable) = 9,
38
+ BIN(setclassvariable) = 10,
39
+ BIN(getconstant) = 11,
40
+ BIN(setconstant) = 12,
41
+ BIN(getglobal) = 13,
42
+ BIN(setglobal) = 14,
43
+ BIN(putnil) = 15,
44
+ BIN(putself) = 16,
45
+ BIN(putundef) = 17,
46
+ BIN(putobject) = 18,
47
+ BIN(putstring) = 19,
48
+ BIN(concatstrings) = 20,
49
+ BIN(tostring) = 21,
50
+ BIN(toregexp) = 22,
51
+ BIN(newarray) = 23,
52
+ BIN(duparray) = 24,
53
+ BIN(expandarray) = 25,
54
+ BIN(concatarray) = 26,
55
+ BIN(splatarray) = 27,
56
+ BIN(checkincludearray) = 28,
57
+ BIN(newhash) = 29,
58
+ BIN(newrange) = 30,
59
+ BIN(putnot) = 31,
60
+ BIN(pop) = 32,
61
+ BIN(dup) = 33,
62
+ BIN(dupn) = 34,
63
+ BIN(swap) = 35,
64
+ BIN(reput) = 36,
65
+ BIN(topn) = 37,
66
+ BIN(setn) = 38,
67
+ BIN(emptstack) = 39,
68
+ BIN(definemethod) = 40,
69
+ BIN(alias) = 41,
70
+ BIN(undef) = 42,
71
+ BIN(defined) = 43,
72
+ BIN(postexe) = 44,
73
+ BIN(trace) = 45,
74
+ BIN(defineclass) = 46,
75
+ BIN(send) = 47,
76
+ BIN(invokesuper) = 48,
77
+ BIN(invokeblock) = 49,
78
+ BIN(leave) = 50,
79
+ BIN(finish) = 51,
80
+ BIN(throw) = 52,
81
+ BIN(jump) = 53,
82
+ BIN(branchif) = 54,
83
+ BIN(branchunless) = 55,
84
+ BIN(getinlinecache) = 56,
85
+ BIN(onceinlinecache) = 57,
86
+ BIN(setinlinecache) = 58,
87
+ BIN(opt_case_dispatch) = 59,
88
+ BIN(opt_checkenv) = 60,
89
+ BIN(opt_plus) = 61,
90
+ BIN(opt_minus) = 62,
91
+ BIN(opt_mult) = 63,
92
+ BIN(opt_div) = 64,
93
+ BIN(opt_mod) = 65,
94
+ BIN(opt_eq) = 66,
95
+ BIN(opt_lt) = 67,
96
+ BIN(opt_le) = 68,
97
+ BIN(opt_gt) = 69,
98
+ BIN(opt_ge) = 70,
99
+ BIN(opt_ltlt) = 71,
100
+ BIN(opt_aref) = 72,
101
+ BIN(opt_aset) = 73,
102
+ BIN(opt_length) = 74,
103
+ BIN(opt_succ) = 75,
104
+ BIN(opt_regexpmatch1) = 76,
105
+ BIN(opt_regexpmatch2) = 77,
106
+ BIN(opt_call_native_compiled) = 78,
107
+ BIN(bitblt) = 79,
108
+ BIN(answer) = 80,
109
+
110
+ };
111
+
112
+ #define YARV_MAX_INSTRUCTION_SIZE 81
113
+
114
+ /** -*-c-*-
115
+ This file contains instruction information for yarv instruction sequence.
116
+
117
+ ----
118
+ This file is auto generated by insns2vm.rb
119
+ DO NOT TOUCH!
120
+
121
+ If you want to fix something, you must edit 'template/insns_info.inc.tmpl'
122
+ or insns2vm.rb
123
+ */
124
+
125
+ #define TS_ISEQ 'S'
126
+ #define TS_GENTRY 'G'
127
+ #define TS_OFFSET 'O'
128
+ #define TS_DINDEX 'D'
129
+ #define TS_VARIABLE '.'
130
+ #define TS_CDHASH 'H'
131
+ #define TS_IC 'C'
132
+ #define TS_ID 'I'
133
+ #define TS_VALUE 'V'
134
+ #define TS_LINDEX 'L'
135
+ #define TS_NUM 'N'
136
+
137
+ static char *insn_name_info[] = {
138
+ "nop",
139
+ "getlocal",
140
+ "setlocal",
141
+ "getspecial",
142
+ "setspecial",
143
+ "getdynamic",
144
+ "setdynamic",
145
+ "getinstancevariable",
146
+ "setinstancevariable",
147
+ "getclassvariable",
148
+ "setclassvariable",
149
+ "getconstant",
150
+ "setconstant",
151
+ "getglobal",
152
+ "setglobal",
153
+ "putnil",
154
+ "putself",
155
+ "putundef",
156
+ "putobject",
157
+ "putstring",
158
+ "concatstrings",
159
+ "tostring",
160
+ "toregexp",
161
+ "newarray",
162
+ "duparray",
163
+ "expandarray",
164
+ "concatarray",
165
+ "splatarray",
166
+ "checkincludearray",
167
+ "newhash",
168
+ "newrange",
169
+ "putnot",
170
+ "pop",
171
+ "dup",
172
+ "dupn",
173
+ "swap",
174
+ "reput",
175
+ "topn",
176
+ "setn",
177
+ "emptstack",
178
+ "definemethod",
179
+ "alias",
180
+ "undef",
181
+ "defined",
182
+ "postexe",
183
+ "trace",
184
+ "defineclass",
185
+ "send",
186
+ "invokesuper",
187
+ "invokeblock",
188
+ "leave",
189
+ "finish",
190
+ "throw",
191
+ "jump",
192
+ "branchif",
193
+ "branchunless",
194
+ "getinlinecache",
195
+ "onceinlinecache",
196
+ "setinlinecache",
197
+ "opt_case_dispatch",
198
+ "opt_checkenv",
199
+ "opt_plus",
200
+ "opt_minus",
201
+ "opt_mult",
202
+ "opt_div",
203
+ "opt_mod",
204
+ "opt_eq",
205
+ "opt_lt",
206
+ "opt_le",
207
+ "opt_gt",
208
+ "opt_ge",
209
+ "opt_ltlt",
210
+ "opt_aref",
211
+ "opt_aset",
212
+ "opt_length",
213
+ "opt_succ",
214
+ "opt_regexpmatch1",
215
+ "opt_regexpmatch2",
216
+ "opt_call_native_compiled",
217
+ "bitblt",
218
+ "answer",
219
+
220
+ };
221
+
222
+ static char *insn_operand_info[] = {
223
+ "",
224
+ "L",
225
+ "L",
226
+ "NN",
227
+ "N",
228
+ "DN",
229
+ "DN",
230
+ "I",
231
+ "I",
232
+ "I",
233
+ "I",
234
+ "I",
235
+ "I",
236
+ "G",
237
+ "G",
238
+ "",
239
+ "",
240
+ "",
241
+ "V",
242
+ "V",
243
+ "N",
244
+ "",
245
+ "N",
246
+ "N",
247
+ "V",
248
+ "NN",
249
+ "",
250
+ "V",
251
+ "V",
252
+ "N",
253
+ "N",
254
+ "",
255
+ "",
256
+ "",
257
+ "N",
258
+ "",
259
+ "",
260
+ "N",
261
+ "N",
262
+ "",
263
+ "ISN",
264
+ "VII",
265
+ "I",
266
+ "NVV",
267
+ "S",
268
+ "N",
269
+ "ISN",
270
+ "INSNC",
271
+ "NSN",
272
+ "NN",
273
+ "",
274
+ "",
275
+ "N",
276
+ "O",
277
+ "O",
278
+ "O",
279
+ "CO",
280
+ "CO",
281
+ "O",
282
+ "HO",
283
+ "",
284
+ "",
285
+ "",
286
+ "",
287
+ "",
288
+ "",
289
+ "",
290
+ "",
291
+ "",
292
+ "",
293
+ "",
294
+ "",
295
+ "",
296
+ "",
297
+ "",
298
+ "",
299
+ "V",
300
+ "",
301
+ "",
302
+ "",
303
+ "",
304
+
305
+ };
306
+
307
+ static int insn_len_info[] = {
308
+ 1,
309
+ 2,
310
+ 2,
311
+ 3,
312
+ 2,
313
+ 3,
314
+ 3,
315
+ 2,
316
+ 2,
317
+ 2,
318
+ 2,
319
+ 2,
320
+ 2,
321
+ 2,
322
+ 2,
323
+ 1,
324
+ 1,
325
+ 1,
326
+ 2,
327
+ 2,
328
+ 2,
329
+ 1,
330
+ 2,
331
+ 2,
332
+ 2,
333
+ 3,
334
+ 1,
335
+ 2,
336
+ 2,
337
+ 2,
338
+ 2,
339
+ 1,
340
+ 1,
341
+ 1,
342
+ 2,
343
+ 1,
344
+ 1,
345
+ 2,
346
+ 2,
347
+ 1,
348
+ 4,
349
+ 4,
350
+ 2,
351
+ 4,
352
+ 2,
353
+ 2,
354
+ 4,
355
+ 6,
356
+ 4,
357
+ 3,
358
+ 1,
359
+ 1,
360
+ 2,
361
+ 2,
362
+ 2,
363
+ 2,
364
+ 3,
365
+ 3,
366
+ 2,
367
+ 3,
368
+ 1,
369
+ 1,
370
+ 1,
371
+ 1,
372
+ 1,
373
+ 1,
374
+ 1,
375
+ 1,
376
+ 1,
377
+ 1,
378
+ 1,
379
+ 1,
380
+ 1,
381
+ 1,
382
+ 1,
383
+ 1,
384
+ 2,
385
+ 1,
386
+ 1,
387
+ 1,
388
+ 1,
389
+
390
+ };
391
+
392
+ static int insn_stack_push_num_info[] = {
393
+ 0,
394
+ 1,
395
+ 0,
396
+ 1,
397
+ 0,
398
+ 1,
399
+ 0,
400
+ 1,
401
+ 0,
402
+ 1,
403
+ 0,
404
+ 1,
405
+ 0,
406
+ 1,
407
+ 0,
408
+ 1,
409
+ 1,
410
+ 1,
411
+ 1,
412
+ 1,
413
+ 1,
414
+ 1,
415
+ 1,
416
+ 1,
417
+ 1,
418
+ 1,
419
+ 1,
420
+ 1,
421
+ 2,
422
+ 1,
423
+ 1,
424
+ 1,
425
+ 0,
426
+ 2,
427
+ 1,
428
+ 2,
429
+ 1,
430
+ 1,
431
+ 1,
432
+ 1,
433
+ 0,
434
+ 0,
435
+ 0,
436
+ 1,
437
+ 0,
438
+ 0,
439
+ 1,
440
+ 1,
441
+ 1,
442
+ 1,
443
+ 1,
444
+ 1,
445
+ 1,
446
+ 0,
447
+ 0,
448
+ 0,
449
+ 1,
450
+ 1,
451
+ 1,
452
+ 0,
453
+ 0,
454
+ 1,
455
+ 1,
456
+ 1,
457
+ 1,
458
+ 1,
459
+ 1,
460
+ 1,
461
+ 1,
462
+ 1,
463
+ 1,
464
+ 1,
465
+ 1,
466
+ 1,
467
+ 1,
468
+ 1,
469
+ 1,
470
+ 1,
471
+ 0,
472
+ 1,
473
+ 1,
474
+
475
+ };
476
+
477
+ static int
478
+ insn_stack_increase(int depth, int insn, VALUE *opes)
479
+ {
480
+ switch(insn){
481
+ case BIN(nop):{
482
+ return depth + 0;
483
+ }
484
+ case BIN(getlocal):{
485
+ return depth + 1;
486
+ }
487
+ case BIN(setlocal):{
488
+ return depth + -1;
489
+ }
490
+ case BIN(getspecial):{
491
+ return depth + 1;
492
+ }
493
+ case BIN(setspecial):{
494
+ return depth + -1;
495
+ }
496
+ case BIN(getdynamic):{
497
+ return depth + 1;
498
+ }
499
+ case BIN(setdynamic):{
500
+ return depth + -1;
501
+ }
502
+ case BIN(getinstancevariable):{
503
+ return depth + 1;
504
+ }
505
+ case BIN(setinstancevariable):{
506
+ return depth + -1;
507
+ }
508
+ case BIN(getclassvariable):{
509
+ return depth + 1;
510
+ }
511
+ case BIN(setclassvariable):{
512
+ return depth + -1;
513
+ }
514
+ case BIN(getconstant):{
515
+ return depth + 0;
516
+ }
517
+ case BIN(setconstant):{
518
+ return depth + -2;
519
+ }
520
+ case BIN(getglobal):{
521
+ return depth + 1;
522
+ }
523
+ case BIN(setglobal):{
524
+ return depth + -1;
525
+ }
526
+ case BIN(putnil):{
527
+ return depth + 1;
528
+ }
529
+ case BIN(putself):{
530
+ return depth + 1;
531
+ }
532
+ case BIN(putundef):{
533
+ return depth + 1;
534
+ }
535
+ case BIN(putobject):{
536
+ return depth + 1;
537
+ }
538
+ case BIN(putstring):{
539
+ return depth + 1;
540
+ }
541
+ case BIN(concatstrings):{
542
+ int inc = 0;
543
+ unsigned long num = FIX2INT(opes[0]);
544
+ inc += 1 - num;;
545
+ return depth + inc;
546
+ }
547
+ case BIN(tostring):{
548
+ return depth + 0;
549
+ }
550
+ case BIN(toregexp):{
551
+ return depth + 0;
552
+ }
553
+ case BIN(newarray):{
554
+ int inc = 0;
555
+ unsigned long num = FIX2INT(opes[0]);
556
+ inc += 1 - num;;
557
+ return depth + inc;
558
+ }
559
+ case BIN(duparray):{
560
+ return depth + 1;
561
+ }
562
+ case BIN(expandarray):{
563
+ int inc = 0;
564
+ unsigned long num = FIX2INT(opes[0]);
565
+ unsigned long flag = FIX2INT(opes[1]);
566
+ inc += (num > 0) ? num - 1 + (flag ? 1 : 0) : num + 1 - (flag ? 1 : 0);;
567
+ return depth + inc;
568
+ }
569
+ case BIN(concatarray):{
570
+ return depth + -1;
571
+ }
572
+ case BIN(splatarray):{
573
+ return depth + 0;
574
+ }
575
+ case BIN(checkincludearray):{
576
+ return depth + 0;
577
+ }
578
+ case BIN(newhash):{
579
+ int inc = 0;
580
+ unsigned long num = FIX2INT(opes[0]);
581
+ inc += 1 - num;;
582
+ return depth + inc;
583
+ }
584
+ case BIN(newrange):{
585
+ return depth + -1;
586
+ }
587
+ case BIN(putnot):{
588
+ return depth + 0;
589
+ }
590
+ case BIN(pop):{
591
+ return depth + -1;
592
+ }
593
+ case BIN(dup):{
594
+ return depth + 1;
595
+ }
596
+ case BIN(dupn):{
597
+ int inc = 0;
598
+ unsigned long n = FIX2INT(opes[0]);
599
+ inc += n;;
600
+ return depth + inc;
601
+ }
602
+ case BIN(swap):{
603
+ return depth + 0;
604
+ }
605
+ case BIN(reput):{
606
+ int inc = 0;
607
+ inc += 0;;
608
+ return depth + inc;
609
+ }
610
+ case BIN(topn):{
611
+ int inc = 0;
612
+ unsigned long n = FIX2INT(opes[0]);
613
+ inc += 1;;
614
+ return depth + inc;
615
+ }
616
+ case BIN(setn):{
617
+ int inc = 0;
618
+ unsigned long n = FIX2INT(opes[0]);
619
+ inc += 0;
620
+ return depth + inc;
621
+ }
622
+ case BIN(emptstack):{
623
+ int inc = 0;
624
+ inc = 0; depth = 0;;
625
+ return depth + inc;
626
+ }
627
+ case BIN(definemethod):{
628
+ return depth + -1;
629
+ }
630
+ case BIN(alias):{
631
+ return depth + 0;
632
+ }
633
+ case BIN(undef):{
634
+ return depth + 0;
635
+ }
636
+ case BIN(defined):{
637
+ return depth + 0;
638
+ }
639
+ case BIN(postexe):{
640
+ return depth + 0;
641
+ }
642
+ case BIN(trace):{
643
+ return depth + 0;
644
+ }
645
+ case BIN(defineclass):{
646
+ return depth + -1;
647
+ }
648
+ case BIN(send):{
649
+ int inc = 0;
650
+ unsigned long op_argc = FIX2INT(opes[1]);
651
+ unsigned long op_flag = FIX2INT(opes[3]);
652
+ inc += - (op_argc + ((op_flag & VM_CALL_ARGS_BLOCKARG_BIT) ? 1 : 0));;
653
+ return depth + inc;
654
+ }
655
+ case BIN(invokesuper):{
656
+ int inc = 0;
657
+ unsigned long op_argc = FIX2INT(opes[0]);
658
+ unsigned long flag = FIX2INT(opes[2]);
659
+ inc += - op_argc;;
660
+ return depth + inc;
661
+ }
662
+ case BIN(invokeblock):{
663
+ int inc = 0;
664
+ unsigned long num = FIX2INT(opes[0]);
665
+ unsigned long flag = FIX2INT(opes[1]);
666
+ inc += 1 - num;;
667
+ return depth + inc;
668
+ }
669
+ case BIN(leave):{
670
+ return depth + 0;
671
+ }
672
+ case BIN(finish):{
673
+ return depth + 0;
674
+ }
675
+ case BIN(throw):{
676
+ return depth + 0;
677
+ }
678
+ case BIN(jump):{
679
+ return depth + 0;
680
+ }
681
+ case BIN(branchif):{
682
+ return depth + -1;
683
+ }
684
+ case BIN(branchunless):{
685
+ return depth + -1;
686
+ }
687
+ case BIN(getinlinecache):{
688
+ return depth + 1;
689
+ }
690
+ case BIN(onceinlinecache):{
691
+ return depth + 1;
692
+ }
693
+ case BIN(setinlinecache):{
694
+ return depth + 0;
695
+ }
696
+ case BIN(opt_case_dispatch):{
697
+ int inc = 0;
698
+ inc += -1;;
699
+ return depth + inc;
700
+ }
701
+ case BIN(opt_checkenv):{
702
+ return depth + 0;
703
+ }
704
+ case BIN(opt_plus):{
705
+ return depth + -1;
706
+ }
707
+ case BIN(opt_minus):{
708
+ return depth + -1;
709
+ }
710
+ case BIN(opt_mult):{
711
+ return depth + -1;
712
+ }
713
+ case BIN(opt_div):{
714
+ return depth + -1;
715
+ }
716
+ case BIN(opt_mod):{
717
+ return depth + -1;
718
+ }
719
+ case BIN(opt_eq):{
720
+ return depth + -1;
721
+ }
722
+ case BIN(opt_lt):{
723
+ return depth + -1;
724
+ }
725
+ case BIN(opt_le):{
726
+ return depth + -1;
727
+ }
728
+ case BIN(opt_gt):{
729
+ return depth + -1;
730
+ }
731
+ case BIN(opt_ge):{
732
+ return depth + -1;
733
+ }
734
+ case BIN(opt_ltlt):{
735
+ return depth + -1;
736
+ }
737
+ case BIN(opt_aref):{
738
+ return depth + -1;
739
+ }
740
+ case BIN(opt_aset):{
741
+ return depth + -2;
742
+ }
743
+ case BIN(opt_length):{
744
+ return depth + 0;
745
+ }
746
+ case BIN(opt_succ):{
747
+ return depth + 0;
748
+ }
749
+ case BIN(opt_regexpmatch1):{
750
+ return depth + 0;
751
+ }
752
+ case BIN(opt_regexpmatch2):{
753
+ return depth + -1;
754
+ }
755
+ case BIN(opt_call_native_compiled):{
756
+ return depth + 0;
757
+ }
758
+ case BIN(bitblt):{
759
+ return depth + 1;
760
+ }
761
+ case BIN(answer):{
762
+ return depth + 1;
763
+ }
764
+
765
+ default:
766
+ rb_bug("insn_sp_increase: unreachable");
767
+ }
768
+ return 0;
769
+ }
770
+
771
+ /* some utilities */
772
+
773
+ static int
774
+ insn_len(int insn)
775
+ {
776
+ return insn_len_info[insn];
777
+ }
778
+
779
+ static char *
780
+ insn_name(int insn)
781
+ {
782
+ return insn_name_info[insn];
783
+ }
784
+
785
+ static char *
786
+ insn_op_types(int insn)
787
+ {
788
+ return insn_operand_info[insn];
789
+ }
790
+
791
+ static int
792
+ insn_op_type(int insn, int pos)
793
+ {
794
+ int len = insn_len(insn) - 1;
795
+ if(pos < len){
796
+ return insn_operand_info[insn][pos];
797
+ }
798
+ else{
799
+ return 0;
800
+ }
801
+ }
802
+
803
+ static int
804
+ insn_ret_num(int insn)
805
+ {
806
+ return insn_stack_push_num_info[insn];
807
+ }
808
+ void
809
+ make_compile_option(rb_compile_option_t *option, VALUE opt);
810
+ void
811
+ make_compile_option_value(rb_compile_option_t *option);
812
+
813
+ extern VALUE instruction_class[YARV_MAX_INSTRUCTION_SIZE];
814
+ void define_instruction_subclasses(VALUE rb_cInstruction);
815
+
816
+ #endif
817
+
818
+ #endif
819
+