ParseTree 1.4.0 → 1.4.1
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.
- data/History.txt +12 -0
- data/Manifest.txt +1 -1
- data/README.txt +11 -5
- data/Rakefile +80 -0
- data/bin/parse_tree_show +3 -0
- data/lib/parse_tree.rb +114 -66
- data/lib/sexp_processor.rb +0 -1
- data/test/something.rb +2 -2
- data/test/test_parse_tree.rb +8 -1
- metadata +6 -5
- data/Makefile +0 -57
data/History.txt
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
*** 1.4.1 / 2006-04-10
|
2
|
+
|
3
|
+
+ 4 minor enhancements:
|
4
|
+
+ parse_tree_show -f output is much cleaner now.
|
5
|
+
+ ParseTree does a much more elegant job of handling different versions.
|
6
|
+
+ ParseTree now has all node names in ParseTree::NODE_NAMES.
|
7
|
+
+ ParseTree now raises exceptions instead of freakin'.
|
8
|
+
+ 3 bug fixes:
|
9
|
+
+ Used multiruby to test against 1.8.2-4, 1.8 cvs, and 1.9 cvs.
|
10
|
+
+ Fixed incompatibilites introduced in ruby 1.8.4.
|
11
|
+
+ Fixed some incompatibilites introduced in ruby 1.9.x.
|
12
|
+
|
1
13
|
*** 1.4.0 / 2005-10-15
|
2
14
|
|
3
15
|
+ 5 minor enhancements
|
data/Manifest.txt
CHANGED
data/README.txt
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
ParseTree
|
2
|
+
http://rubyforge.org/projects/parsetree/
|
2
3
|
http://www.zenspider.com/ZSS/Products/ParseTree/
|
3
4
|
support@zenspider.com
|
4
5
|
|
@@ -36,10 +37,12 @@ becomes:
|
|
36
37
|
+ Uses RubyInline, so it just drops in.
|
37
38
|
+ Includes SexpProcessor and CompositeSexpProcessor.
|
38
39
|
+ Allows you to write very clean filters.
|
39
|
-
+ Includes
|
40
|
-
+
|
40
|
+
+ Includes parse_tree_show, which lets you quickly snoop code.
|
41
|
+
+ echo "1+1" | parse_tree_show -f for quick snippet output.
|
42
|
+
+ Includes parse_tree_abc, which lets you get abc metrics on code.
|
41
43
|
+ abc metrics = numbers of assignments, branches, and calls.
|
42
44
|
+ whitespace independent metric for method complexity.
|
45
|
+
+ Includes parse_tree_deps, which shows you basic class level dependencies.
|
43
46
|
+ Only works on methods in classes/modules, not arbitrary code.
|
44
47
|
+ Does not work on the core classes, as they are not ruby (yet).
|
45
48
|
|
@@ -64,6 +67,10 @@ or:
|
|
64
67
|
|
65
68
|
% ./parse_tree_show myfile.rb
|
66
69
|
|
70
|
+
or:
|
71
|
+
|
72
|
+
% echo "1+1" | ./parse_tree_show -f
|
73
|
+
|
67
74
|
or:
|
68
75
|
|
69
76
|
% ./parse_tree_abc myfile.rb
|
@@ -74,9 +81,8 @@ or:
|
|
74
81
|
|
75
82
|
** INSTALL:
|
76
83
|
|
77
|
-
+ sudo
|
78
|
-
|
79
|
-
+ renames abc.rb to parse_tree_abc
|
84
|
+
+ sudo rake install
|
85
|
+
+ or: sudo gem install ParseTree
|
80
86
|
|
81
87
|
** LICENSE:
|
82
88
|
|
data/Rakefile
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
|
3
|
+
require 'rbconfig'
|
4
|
+
require 'rake/rdoctask'
|
5
|
+
|
6
|
+
PREFIX = ENV['PREFIX'] || Config::CONFIG['prefix']
|
7
|
+
RUBYLIB = Config::CONFIG['sitelibdir']
|
8
|
+
RUBY_DEBUG = ENV['RUBY_DEBUG']
|
9
|
+
RUBY_FLAGS = ENV['RUBY_FLAGS'] || "-w -Ilib#{File::PATH_SEPARATOR}bin#{File::PATH_SEPARATOR}../../RubyInline/dev"
|
10
|
+
FILTER = ENV['FILTER']
|
11
|
+
|
12
|
+
LIB_FILES = %w(composite_sexp_processor.rb parse_tree.rb sexp.rb sexp_processor.rb)
|
13
|
+
TEST_FILES = %w(test_sexp_processor.rb)
|
14
|
+
BIN_FILES = %w(parse_tree_abc parse_tree_show parse_tree_deps)
|
15
|
+
|
16
|
+
task :default => :test
|
17
|
+
|
18
|
+
task :test do
|
19
|
+
ruby "#{RUBY_FLAGS} test/test_all.rb #{FILTER}"
|
20
|
+
end
|
21
|
+
|
22
|
+
task :multi do
|
23
|
+
sh "multiruby #{RUBY_FLAGS} test/test_all.rb #{FILTER}"
|
24
|
+
end
|
25
|
+
|
26
|
+
# we only install test_sexp_processor.rb to help make ruby_to_c's
|
27
|
+
# subclass tests work.
|
28
|
+
|
29
|
+
Rake::RDocTask.new(:docs) do |rd|
|
30
|
+
rd.main = "SexpProcessor"
|
31
|
+
rd.rdoc_files.include('./**/*').exclude('something.rb').exclude('test_*')
|
32
|
+
rd.options << '-d'
|
33
|
+
rd.options << '-Ipng'
|
34
|
+
end
|
35
|
+
|
36
|
+
task :install do
|
37
|
+
[
|
38
|
+
['lib', LIB_FILES, RUBYLIB, 0444],
|
39
|
+
['test', TEST_FILES, RUBYLIB, 0444],
|
40
|
+
['bin', BIN_FILES, File.join(PREFIX, 'bin'), 0555]
|
41
|
+
].each do |dir, list, dest, mode|
|
42
|
+
Dir.chdir dir do
|
43
|
+
list.each do |f|
|
44
|
+
install f, dest, :mode => mode
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
task :uninstall do
|
51
|
+
Dir.chdir RUBYLIB do
|
52
|
+
rm_f LIB_FILES
|
53
|
+
rm_f TEST_FILES
|
54
|
+
end
|
55
|
+
Dir.chdir File.join(PREFIX, 'bin') do
|
56
|
+
rm_f BIN_FILES
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
task :audit do
|
61
|
+
sh "ZenTest -Ilib#{File::PATH_SEPARATOR}test #{LIB_FILES.collect{|e| File.join('lib', e)}.join(' ')} test/test_all.rb"
|
62
|
+
# test_composite_sexp_processor.rb test_sexp_processor.rb
|
63
|
+
end
|
64
|
+
|
65
|
+
task :clean do
|
66
|
+
inline_dir = File.expand_path("~/.ruby_inline")
|
67
|
+
rm_rf inline_dir if test ?d, inline_dir
|
68
|
+
%w(diff diff.txt demo.rb *.gem **/*~).each do |pattern|
|
69
|
+
files = Dir[pattern]
|
70
|
+
rm_rf files unless files.empty?
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
task :demo do
|
75
|
+
verbose(false){sh "echo 1+1 | ruby #{RUBY_FLAGS} ./bin/parse_tree_show -f"}
|
76
|
+
end
|
77
|
+
|
78
|
+
task :gem do
|
79
|
+
ruby "ParseTree.gemspec"
|
80
|
+
end
|
data/bin/parse_tree_show
CHANGED
data/lib/parse_tree.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
#!/usr/local/bin/ruby -w
|
2
2
|
|
3
|
-
begin require 'rubygems' rescue LoadError end
|
3
|
+
begin require 'rubygems'; rescue LoadError; end
|
4
|
+
|
4
5
|
require 'inline'
|
5
6
|
|
6
7
|
##
|
@@ -24,7 +25,7 @@ require 'inline'
|
|
24
25
|
|
25
26
|
class ParseTree
|
26
27
|
|
27
|
-
VERSION = '1.4.
|
28
|
+
VERSION = '1.4.1'
|
28
29
|
|
29
30
|
##
|
30
31
|
# Initializes a ParseTree instance. Includes newline nodes if
|
@@ -94,15 +95,87 @@ class ParseTree
|
|
94
95
|
parse_tree_for_meth(klass, method.to_sym, @include_newlines)
|
95
96
|
end
|
96
97
|
|
98
|
+
if RUBY_VERSION < "1.8.4" then
|
99
|
+
inline do |builder|
|
100
|
+
builder.add_type_converter("bool", '', '')
|
101
|
+
builder.c_singleton "
|
102
|
+
bool has_alloca() {
|
103
|
+
(void)self;
|
104
|
+
#ifdef C_ALLOCA
|
105
|
+
return Qtrue;
|
106
|
+
#else
|
107
|
+
return Qfalse;
|
108
|
+
#endif
|
109
|
+
}"
|
110
|
+
end
|
111
|
+
else
|
112
|
+
def self.has_alloca
|
113
|
+
true
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
|
118
|
+
NODE_NAMES = [
|
119
|
+
# 00
|
120
|
+
:method, :fbody, :cfunc, :scope, :block,
|
121
|
+
:if, :case, :when, :opt_n, :while,
|
122
|
+
# 10
|
123
|
+
:until, :iter, :for, :break, :next,
|
124
|
+
:redo, :retry, :begin, :rescue, :resbody,
|
125
|
+
# 20
|
126
|
+
:ensure, :and, :or, :not, :masgn,
|
127
|
+
:lasgn, :dasgn, :dasgn_curr, :gasgn, :iasgn,
|
128
|
+
# 30
|
129
|
+
:cdecl, :cvasgn, :cvdecl, :op_asgn1, :op_asgn2,
|
130
|
+
:op_asgn_and, :op_asgn_or, :call, :fcall, :vcall,
|
131
|
+
# 40
|
132
|
+
:super, :zsuper, :array, :zarray, :hash,
|
133
|
+
:return, :yield, :lvar, :dvar, :gvar,
|
134
|
+
# 50
|
135
|
+
:ivar, :const, :cvar, :nth_ref, :back_ref,
|
136
|
+
:match, :match2, :match3, :lit, :str,
|
137
|
+
# 60
|
138
|
+
:dstr, :xstr, :dxstr, :evstr, :dregx,
|
139
|
+
:dregx_once, :args, :argscat, :argspush, :splat,
|
140
|
+
# 70
|
141
|
+
:to_ary, :svalue, :block_arg, :block_pass, :defn,
|
142
|
+
:defs, :alias, :valias, :undef, :class,
|
143
|
+
# 80
|
144
|
+
:module, :sclass, :colon2, :colon3, :cref,
|
145
|
+
:dot2, :dot3, :flip2, :flip3, :attrset,
|
146
|
+
# 90
|
147
|
+
:self, :nil, :true, :false, :defined,
|
148
|
+
# 95
|
149
|
+
:newline, :postexe, :alloca, :dmethod, :bmethod,
|
150
|
+
# 100
|
151
|
+
:memo, :ifunc, :dsym, :attrasgn,
|
152
|
+
# 104
|
153
|
+
:last
|
154
|
+
]
|
155
|
+
|
156
|
+
if RUBY_VERSION < "1.8.4" then
|
157
|
+
NODE_NAMES.delete :alloca unless has_alloca
|
158
|
+
end
|
159
|
+
|
160
|
+
if RUBY_VERSION > "1.9" then
|
161
|
+
NODE_NAMES.insert NODE_NAMES.index(:hash), :values
|
162
|
+
NODE_NAMES.insert NODE_NAMES.index(:defined), :errinfo
|
163
|
+
NODE_NAMES.insert NODE_NAMES.index(:last), :prelude, :lambda
|
164
|
+
NODE_NAMES.delete :dmethod
|
165
|
+
NODE_NAMES[128] = NODE_NAMES.delete :newline
|
166
|
+
end
|
167
|
+
|
97
168
|
############################################################
|
98
169
|
# END of rdoc methods
|
99
170
|
############################################################
|
100
171
|
|
101
172
|
inline do |builder|
|
173
|
+
builder.add_type_converter("bool", '', '')
|
102
174
|
builder.add_type_converter("VALUE", '', '')
|
103
175
|
builder.add_type_converter("ID *", '', '')
|
104
176
|
builder.add_type_converter("NODE *", '(NODE *)', '(VALUE)')
|
105
177
|
builder.include '"intern.h"'
|
178
|
+
builder.include '"version.h"'
|
106
179
|
builder.include '"node.h"'
|
107
180
|
builder.include '"st.h"'
|
108
181
|
builder.include '"env.h"'
|
@@ -129,14 +202,20 @@ class ParseTree
|
|
129
202
|
# builder.add_compile_flags "-Wmissing-prototypes"
|
130
203
|
# builder.add_compile_flags "-Wsign-compare"
|
131
204
|
|
205
|
+
def self.if_version(test, version, str)
|
206
|
+
RUBY_VERSION.send(test, version) ? str : ""
|
207
|
+
end
|
208
|
+
|
132
209
|
builder.prefix %{
|
133
210
|
#define nd_3rd u3.node
|
211
|
+
}
|
134
212
|
|
213
|
+
builder.prefix %{
|
135
214
|
struct METHOD {
|
136
215
|
VALUE klass, rklass;
|
137
216
|
VALUE recv;
|
138
217
|
ID id, oid;
|
139
|
-
|
218
|
+
#{if_version :>, "1.8.2", "int safe_level;"}
|
140
219
|
NODE *body;
|
141
220
|
};
|
142
221
|
|
@@ -159,51 +238,9 @@ class ParseTree
|
|
159
238
|
struct BLOCK *outer;
|
160
239
|
struct BLOCK *prev;
|
161
240
|
};
|
241
|
+
} unless RUBY_VERSION >= "1.9"
|
162
242
|
|
163
|
-
|
164
|
-
// 00
|
165
|
-
"method", "fbody", "cfunc", "scope", "block",
|
166
|
-
"if", "case", "when", "opt_n", "while",
|
167
|
-
// 10
|
168
|
-
"until", "iter", "for", "break", "next",
|
169
|
-
"redo", "retry", "begin", "rescue", "resbody",
|
170
|
-
// 20
|
171
|
-
"ensure", "and", "or", "not", "masgn",
|
172
|
-
"lasgn", "dasgn", "dasgn_curr", "gasgn", "iasgn",
|
173
|
-
// 30
|
174
|
-
"cdecl", "cvasgn", "cvdecl", "op_asgn1", "op_asgn2",
|
175
|
-
"op_asgn_and", "op_asgn_or", "call", "fcall", "vcall",
|
176
|
-
// 40
|
177
|
-
"super", "zsuper", "array", "zarray", "hash",
|
178
|
-
"return", "yield", "lvar", "dvar", "gvar",
|
179
|
-
// 50
|
180
|
-
"ivar", "const", "cvar", "nth_ref", "back_ref",
|
181
|
-
"match", "match2", "match3", "lit", "str",
|
182
|
-
// 60
|
183
|
-
"dstr", "xstr", "dxstr", "evstr", "dregx",
|
184
|
-
"dregx_once", "args", "argscat", "argspush", "splat",
|
185
|
-
// 70
|
186
|
-
"to_ary", "svalue", "block_arg", "block_pass", "defn",
|
187
|
-
"defs", "alias", "valias", "undef", "class",
|
188
|
-
// 80
|
189
|
-
"module", "sclass", "colon2", "colon3", "cref",
|
190
|
-
"dot2", "dot3", "flip2", "flip3", "attrset",
|
191
|
-
// 90
|
192
|
-
"self", "nil", "true", "false", "defined",
|
193
|
-
// 95
|
194
|
-
"newline", "postexe",
|
195
|
-
#ifdef C_ALLOCA
|
196
|
-
"alloca",
|
197
|
-
#endif
|
198
|
-
"dmethod", "bmethod",
|
199
|
-
// 100 / 99
|
200
|
-
"memo", "ifunc", "dsym", "attrasgn",
|
201
|
-
// 104 / 103
|
202
|
-
"last"
|
203
|
-
};
|
204
|
-
}
|
205
|
-
|
206
|
-
builder.c_raw %q^
|
243
|
+
builder.c_raw %Q@
|
207
244
|
static void add_to_parse_tree(VALUE ary,
|
208
245
|
NODE * n,
|
209
246
|
VALUE newlines,
|
@@ -213,16 +250,21 @@ static void add_to_parse_tree(VALUE ary,
|
|
213
250
|
VALUE old_ary = Qnil;
|
214
251
|
VALUE current;
|
215
252
|
VALUE node_name;
|
253
|
+
static VALUE node_names = Qnil;
|
254
|
+
|
255
|
+
if (NIL_P(node_names)) {
|
256
|
+
node_names = rb_const_get_at(rb_const_get_at(rb_cObject,rb_intern("ParseTree")),rb_intern("NODE_NAMES"));
|
257
|
+
}
|
216
258
|
|
217
259
|
if (!node) return;
|
218
260
|
|
219
261
|
again:
|
220
262
|
|
221
263
|
if (node) {
|
222
|
-
node_name =
|
264
|
+
node_name = rb_ary_entry(node_names, nd_type(node));
|
223
265
|
if (RTEST(ruby_debug)) {
|
224
|
-
fprintf(stderr, "%15s: %s%s%s
|
225
|
-
|
266
|
+
fprintf(stderr, "%15s: %s%s%s\\n",
|
267
|
+
rb_id2name(SYM2ID(node_name)),
|
226
268
|
(RNODE(node)->u1.node != NULL ? "u1 " : " "),
|
227
269
|
(RNODE(node)->u2.node != NULL ? "u2 " : " "),
|
228
270
|
(RNODE(node)->u3.node != NULL ? "u3 " : " "));
|
@@ -244,7 +286,6 @@ again_no_block:
|
|
244
286
|
add_to_parse_tree(current, node, newlines, locals);
|
245
287
|
break;
|
246
288
|
}
|
247
|
-
|
248
289
|
contnode = node->nd_next;
|
249
290
|
|
250
291
|
// NOTE: this will break the moment there is a block w/in a block
|
@@ -420,6 +461,7 @@ again_no_block:
|
|
420
461
|
}
|
421
462
|
break;
|
422
463
|
|
464
|
+
#{if_version :>, "1.9", '#if 0'}
|
423
465
|
case NODE_DMETHOD:
|
424
466
|
{
|
425
467
|
struct METHOD *data;
|
@@ -428,9 +470,10 @@ again_no_block:
|
|
428
470
|
add_to_parse_tree(current, data->body, newlines, locals);
|
429
471
|
break;
|
430
472
|
}
|
473
|
+
#{if_version :>, "1.9", '#endif'}
|
431
474
|
|
432
475
|
case NODE_METHOD:
|
433
|
-
fprintf(stderr, "u1 = %p u2 = %p u3 = %p
|
476
|
+
fprintf(stderr, "u1 = %p u2 = %p u3 = %p\\n", node->nd_1st, node->nd_2nd, node->nd_3rd);
|
434
477
|
add_to_parse_tree(current, node->nd_3rd, newlines, locals);
|
435
478
|
break;
|
436
479
|
|
@@ -564,12 +607,11 @@ again_no_block:
|
|
564
607
|
add_to_parse_tree(current, node->nd_body, newlines, locals);
|
565
608
|
break;
|
566
609
|
|
567
|
-
case NODE_ARGS:
|
568
|
-
|
569
|
-
|
610
|
+
case NODE_ARGS: {
|
611
|
+
long arg_count = (long)node->nd_rest;
|
612
|
+
if (locals && (node->nd_cnt || node->nd_opt || arg_count != -1)) {
|
570
613
|
int i;
|
571
614
|
NODE *optnode;
|
572
|
-
long arg_count;
|
573
615
|
|
574
616
|
for (i = 0; i < node->nd_cnt; i++) {
|
575
617
|
// regular arg names
|
@@ -584,18 +626,19 @@ again_no_block:
|
|
584
626
|
optnode = optnode->nd_next;
|
585
627
|
}
|
586
628
|
|
587
|
-
arg_count = node->nd_rest;
|
588
629
|
if (arg_count > 0) {
|
589
630
|
// *arg name
|
590
|
-
VALUE sym = rb_str_intern(rb_str_plus(rb_str_new2("*"), rb_str_new2(rb_id2name(locals[
|
631
|
+
VALUE sym = rb_str_intern(rb_str_plus(rb_str_new2("*"), rb_str_new2(rb_id2name(locals[i + 3]))));
|
591
632
|
rb_ary_push(current, sym);
|
633
|
+
} else if (arg_count == 0) {
|
634
|
+
// nothing to do in this case, empty list
|
592
635
|
} else if (arg_count == -1) {
|
593
636
|
// nothing to do in this case, handled above
|
594
637
|
} else if (arg_count == -2) {
|
595
638
|
// nothing to do in this case, no name == no use
|
596
639
|
} else {
|
597
|
-
|
598
|
-
|
640
|
+
rb_raise(rb_eArgError,
|
641
|
+
"not a clue what this arg value is: %ld", arg_count);
|
599
642
|
}
|
600
643
|
|
601
644
|
optnode = node->nd_opt;
|
@@ -604,7 +647,7 @@ again_no_block:
|
|
604
647
|
add_to_parse_tree(current, node->nd_opt, newlines, locals);
|
605
648
|
}
|
606
649
|
}
|
607
|
-
|
650
|
+
} break;
|
608
651
|
|
609
652
|
case NODE_LVAR:
|
610
653
|
case NODE_DVAR:
|
@@ -676,7 +719,7 @@ again_no_block:
|
|
676
719
|
add_to_parse_tree(current, node->nd_3rd, newlines, locals);
|
677
720
|
break;
|
678
721
|
|
679
|
-
case NODE_DSYM: // :"
|
722
|
+
case NODE_DSYM: // :"\#\{foo}" u1 u2 u3
|
680
723
|
add_to_parse_tree(current, node->nd_3rd, newlines, locals);
|
681
724
|
break;
|
682
725
|
|
@@ -702,11 +745,11 @@ again_no_block:
|
|
702
745
|
// case NODE_LMASK:
|
703
746
|
// case NODE_LSHIFT:
|
704
747
|
default:
|
705
|
-
rb_warn("Unhandled node #%d type '%s'", nd_type(node),
|
748
|
+
rb_warn("Unhandled node #%d type '%s'", nd_type(node), rb_id2name(SYM2ID(rb_ary_entry(node_names, nd_type(node)))));
|
706
749
|
if (RNODE(node)->u1.node != NULL) rb_warning("unhandled u1 value");
|
707
750
|
if (RNODE(node)->u2.node != NULL) rb_warning("unhandled u2 value");
|
708
751
|
if (RNODE(node)->u3.node != NULL) rb_warning("unhandled u3 value");
|
709
|
-
if (RTEST(ruby_debug)) fprintf(stderr, "u1 = %p u2 = %p u3 = %p
|
752
|
+
if (RTEST(ruby_debug)) fprintf(stderr, "u1 = %p u2 = %p u3 = %p\\n", node->nd_1st, node->nd_2nd, node->nd_3rd);
|
710
753
|
rb_ary_push(current, INT2FIX(-99));
|
711
754
|
rb_ary_push(current, INT2FIX(nd_type(node)));
|
712
755
|
break;
|
@@ -722,9 +765,9 @@ again_no_block:
|
|
722
765
|
goto again_no_block;
|
723
766
|
}
|
724
767
|
}
|
725
|
-
|
768
|
+
@ # end of add_to_parse_tree block
|
726
769
|
|
727
|
-
builder.c %
|
770
|
+
builder.c %Q{
|
728
771
|
static VALUE parse_tree_for_meth(VALUE klass, VALUE method, VALUE newlines) {
|
729
772
|
VALUE n;
|
730
773
|
NODE *node = NULL;
|
@@ -734,6 +777,11 @@ static VALUE parse_tree_for_meth(VALUE klass, VALUE method, VALUE newlines) {
|
|
734
777
|
(void) self; // quell warnings
|
735
778
|
(void) argc; // quell warnings
|
736
779
|
|
780
|
+
VALUE version = rb_const_get_at(rb_cObject,rb_intern("RUBY_VERSION"));
|
781
|
+
if (strcmp(StringValuePtr(version), #{RUBY_VERSION.inspect})) {
|
782
|
+
rb_fatal("bad version, %s != #{RUBY_VERSION}\\n", StringValuePtr(version));
|
783
|
+
}
|
784
|
+
|
737
785
|
id = rb_to_id(method);
|
738
786
|
if (st_lookup(RCLASS(klass)->m_tbl, id, &n)) {
|
739
787
|
node = (NODE*)n;
|
data/lib/sexp_processor.rb
CHANGED
data/test/something.rb
CHANGED
data/test/test_parse_tree.rb
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
#!/usr/local/bin/ruby -w
|
2
2
|
|
3
|
+
dir = File.expand_path "~/.ruby_inline"
|
4
|
+
if test ?d, dir then
|
5
|
+
require 'fileutils'
|
6
|
+
puts "nuking #{dir}"
|
7
|
+
FileUtils.rm_r dir
|
8
|
+
end
|
9
|
+
|
3
10
|
require 'test/unit'
|
4
11
|
require 'parse_tree'
|
5
12
|
require 'test/something'
|
@@ -308,7 +315,7 @@ class TestParseTree < Test::Unit::TestCase
|
|
308
315
|
[:iter,
|
309
316
|
[:fcall, :define_method, [:array, [:lit, :bmethod_added]]],
|
310
317
|
[:dasgn_curr, :x],
|
311
|
-
[:call, [:dvar, :x], :+, [:array, [:lit, 1]]]]]]]]
|
318
|
+
[:call, [:dvar, :x], :+, [:array, [:lit, 1]]]]]]]] if RUBY_VERSION < "1.9"
|
312
319
|
|
313
320
|
@@attrasgn = [:defn,
|
314
321
|
:attrasgn,
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
!ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.8.11.
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.8.11.6
|
3
3
|
specification_version: 1
|
4
4
|
name: ParseTree
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.4.
|
7
|
-
date:
|
6
|
+
version: 1.4.1
|
7
|
+
date: 2006-04-10 00:00:00 -07:00
|
8
8
|
summary: Extract and enumerate ruby parse trees.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -26,11 +26,12 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
|
|
26
26
|
platform: ruby
|
27
27
|
signing_key:
|
28
28
|
cert_chain:
|
29
|
+
post_install_message:
|
29
30
|
authors:
|
30
31
|
- Ryan Davis
|
31
32
|
files:
|
32
33
|
- History.txt
|
33
|
-
-
|
34
|
+
- Rakefile
|
34
35
|
- Manifest.txt
|
35
36
|
- README.txt
|
36
37
|
- bin/parse_tree_abc
|
data/Makefile
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
RUBY?=ruby
|
2
|
-
RUBY_DEBUG?=
|
3
|
-
RUBY_FLAGS?=-w -Ilib:bin:../../RubyInline/dev
|
4
|
-
RUBY_LIB?=$(shell $(RUBY) -rrbconfig -e 'include Config; print CONFIG["sitelibdir"]')
|
5
|
-
PREFIX?=/usr/local
|
6
|
-
FILTER?=
|
7
|
-
|
8
|
-
LIB_FILES= \
|
9
|
-
composite_sexp_processor.rb \
|
10
|
-
parse_tree.rb \
|
11
|
-
sexp.rb \
|
12
|
-
sexp_processor.rb \
|
13
|
-
$(END)
|
14
|
-
|
15
|
-
TEST_FILES= \
|
16
|
-
test_sexp_processor.rb \
|
17
|
-
$(END)
|
18
|
-
|
19
|
-
BIN_FILES= \
|
20
|
-
parse_tree_abc \
|
21
|
-
parse_tree_show \
|
22
|
-
parse_tree_deps \
|
23
|
-
$(END)
|
24
|
-
|
25
|
-
all test: FORCE
|
26
|
-
$(RUBY) $(RUBY_DEBUG) $(RUBY_FLAGS) test/test_all.rb $(FILTER)
|
27
|
-
|
28
|
-
# we only install test_sexp_processor.rb to help make ruby_to_c's
|
29
|
-
# subclass tests work.
|
30
|
-
|
31
|
-
docs:
|
32
|
-
rdoc -d -I png --main SexpProcessor -x test_\* -x something.rb
|
33
|
-
|
34
|
-
install:
|
35
|
-
cd lib && install -m 0444 $(LIB_FILES) $(RUBY_LIB)
|
36
|
-
cd test && install -m 0444 $(TEST_FILES) $(RUBY_LIB)
|
37
|
-
cd bin && install -m 0555 $(BIN_FILES) $(PREFIX)/bin
|
38
|
-
|
39
|
-
uninstall:
|
40
|
-
cd $(RUBY_LIB) && rm -f $(LIB_FILES) $(TEST_FILES)
|
41
|
-
cd $(PREFIX)/bin && rm -f $(BIN_FILES)
|
42
|
-
|
43
|
-
audit:
|
44
|
-
ZenTest -I=lib:test $(addprefix lib/,$(LIB_FILES)) test/test_all.rb
|
45
|
-
# test_composite_sexp_processor.rb test_sexp_processor.rb
|
46
|
-
|
47
|
-
clean:
|
48
|
-
-find . -name \*~ | xargs rm
|
49
|
-
-rm -fr diff diff.txt *.gem doc $$HOME/.ruby_inline
|
50
|
-
|
51
|
-
demo:
|
52
|
-
echo 1+1 | $(RUBY) $(RUBY_FLAGS) ./bin/parse_tree_show -f
|
53
|
-
|
54
|
-
gem:
|
55
|
-
ruby ParseTree.gemspec
|
56
|
-
|
57
|
-
FORCE:
|