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