ParseTree 1.3.5 → 1.3.6

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,13 @@
1
+ *** 1.3.6 / 2005-05-19
2
+
3
+ + 2 minor enhancements:
4
+ + Improved debugging capability when $DEBUG.
5
+ + Allowed for selective debugging output by node type.
6
+ + 3 bug fixes:
7
+ + Minor fixes to Makefile and parse_tree_show.
8
+ + Improved error messages in parse_tree when newlines are included.
9
+ + Improved method coverage for parse_tree.
10
+
1
11
  *** 1.3.5 / 2005-04-19
2
12
 
3
13
  + 2 minor enhancement
data/Makefile CHANGED
@@ -1,11 +1,11 @@
1
1
  RUBY?=ruby
2
2
  RUBY_DEBUG?=
3
- RUBY_FLAGS?=-w -Ilib -Ibin
3
+ RUBY_FLAGS?=-w -Ilib:bin:../../RubyInline/dev
4
4
  RUBY_LIB?=$(shell $(RUBY) -rrbconfig -e 'include Config; print CONFIG["sitelibdir"]')
5
5
  PREFIX?=/usr/local
6
6
 
7
7
  all test: FORCE
8
- GEM_SKIP=ParseTree $(RUBY) $(RUBY_DEBUG) $(RUBY_FLAGS) test/test_all.rb
8
+ GEM_SKIP=RubyInline:ParseTree $(RUBY) $(RUBY_DEBUG) $(RUBY_FLAGS) test/test_all.rb
9
9
 
10
10
  # we only install test_sexp_processor.rb to help make ruby_to_c's
11
11
  # subclass tests work.
@@ -33,7 +33,7 @@ clean:
33
33
  -rm -fr diff diff.txt *.gem doc $$HOME/.ruby_inline
34
34
 
35
35
  demo:
36
- echo 1+1 | GEM_SKIP=ParseTree $(RUBY) $(RUBY_FLAGS) ./bin/parse_tree_show -f
36
+ echo 1+1 | GEM_SKIP=RubyInline:ParseTree $(RUBY) $(RUBY_FLAGS) ./bin/parse_tree_show -f
37
37
 
38
38
  gem:
39
39
  gem ParseTree.gemspec
data/bin/parse_tree_show CHANGED
@@ -22,8 +22,9 @@ def discover_new_classes_from
22
22
  new_classes << klass
23
23
  end
24
24
 
25
- new_classes - old_classes
25
+ new_classes -= old_classes
26
26
  new_classes = [ eval($c) ] if defined? $c
27
+ new_classes
27
28
  end
28
29
 
29
30
  $f = false unless defined? $f
data/lib/parse_tree.rb CHANGED
@@ -28,13 +28,16 @@ end
28
28
 
29
29
  class ParseTree
30
30
 
31
- VERSION = '1.3.5'
31
+ VERSION = '1.3.6'
32
32
 
33
33
  ##
34
34
  # Initializes a ParseTree instance. Includes newline nodes if
35
35
  # +include_newlines+ which defaults to +$DEBUG+.
36
36
 
37
37
  def initialize(include_newlines=$DEBUG)
38
+ if include_newlines then
39
+ warn "WARNING: include_newlines=true from #{caller[0..9].join(', ')}"
40
+ end
38
41
  @include_newlines = include_newlines
39
42
  end
40
43
 
@@ -56,7 +59,7 @@ class ParseTree
56
59
  klasses.each do |klass|
57
60
  # TODO: remove this on v 1.1
58
61
  raise "You should call parse_tree_for_method(#{klasses.first}, #{klass}) instead of parse_tree" if Symbol === klass or String === klass
59
- klassname = klass.name || '' # HACK klass.name should never be nil
62
+ klassname = klass.name rescue '' # HACK klass.name should never be nil
60
63
  # Tempfile's DelegateClass(File) seems to
61
64
  # cause this
62
65
  klassname = "UnnamedClass_#{klass.object_id}" if klassname.empty?
@@ -70,7 +73,12 @@ class ParseTree
70
73
  [:module, klassname]
71
74
  end
72
75
 
73
- klass.instance_methods(false).sort.each do |m|
76
+ method_names = []
77
+ method_names += klass.instance_methods false
78
+ method_names += klass.private_instance_methods false
79
+ # protected methods are included in instance_methods, go figure!
80
+
81
+ method_names.sort.each do |m|
74
82
  $stderr.puts "parse_tree_for_method(#{klass}, #{m}):" if $DEBUG
75
83
  code << parse_tree_for_method(klass, m.to_sym)
76
84
  end
@@ -335,16 +335,18 @@ class SexpProcessor
335
335
  def process(exp)
336
336
  return nil if exp.nil?
337
337
 
338
- exp_orig = exp.deep_clone if $DEBUG or @exceptions.has_key?(exp.first)
339
338
  result = self.expected.new
340
339
 
341
340
  type = exp.first
342
341
 
343
- if @debug.include? type then
342
+ if @debug.has_key? type then
344
343
  str = exp.inspect
345
344
  puts "// DEBUG: #{str}" if str =~ @debug[type]
346
345
  end
347
346
 
347
+ exp_orig = exp.deep_clone if $DEBUG or
348
+ @debug.has_key? type or @exceptions.has_key?(type)
349
+
348
350
  if Sexp === exp then
349
351
  if @sexp_accessors.include? type then
350
352
  exp.accessors = @sexp_accessors[type]
@@ -441,14 +443,15 @@ class SexpProcessor
441
443
  end
442
444
 
443
445
  def error_handler(type, exp=nil) # :nodoc:
444
- if @exceptions.has_key? type then
445
- begin
446
- return yield
447
- rescue Exception => err
446
+ begin
447
+ return yield
448
+ rescue Exception => err
449
+ if @exceptions.has_key? type then
448
450
  return @exceptions[type].call(self, exp, err)
451
+ else
452
+ puts "#{err.class} Exception thrown while processing #{type} for sexp #{exp.inspect} #{caller.inspect}" if $DEBUG
453
+ raise
449
454
  end
450
- else
451
- return yield
452
455
  end
453
456
  end
454
457
  private :error_handler
@@ -4,8 +4,23 @@ require 'test/unit'
4
4
  require 'parse_tree'
5
5
  require 'test/something'
6
6
 
7
+ class SomethingWithInitialize
8
+ def initialize; end # this method is private
9
+ protected
10
+ def protected_meth; end
11
+ end
12
+
7
13
  class TestParseTree < Test::Unit::TestCase
8
14
 
15
+ def test_class_initialize
16
+ expected = [[:class, :SomethingWithInitialize, :Object,
17
+ [:defn, :initialize, [:scope, [:block, [:args], [:nil]]]],
18
+ [:defn, :protected_meth, [:scope, [:block, [:args], [:nil]]]],
19
+ ]]
20
+ tree = @thing.parse_tree SomethingWithInitialize
21
+ assert_equal expected, tree
22
+ end
23
+
9
24
  # TODO: need a test of interpolated strings
10
25
 
11
26
  @@missing = [nil]
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.10
3
3
  specification_version: 1
4
4
  name: ParseTree
5
5
  version: !ruby/object:Gem::Version
6
- version: 1.3.5
7
- date: 2005-04-19
6
+ version: 1.3.6
7
+ date: 2005-05-19
8
8
  summary: Extract and enumerate ruby parse trees.
9
9
  require_paths:
10
10
  - lib