1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
if defined? IRONRUBY_VERSION
require 'ir_parse_tree'
else
require 'rubygems'
require 'parse_tree'
end
class Example
def blah
return 1 + 1
end
end
class ParseTree
p ancestors
p instance_methods(false)
class << self
p instance_methods(false)
end
p constants
end
pt = ParseTree.new false
# syntax error -> seg fault
p pt.parse_tree_for_string("1+1")
puts '-----'
module M
end
class C
include M
def C.foo
end
define_method(:goo) {
}
puts 'boo'
end
C.class_eval {
def bar
end
}
p pt.parse_tree(C)
puts '-----'
module X
def i_x
end
end
class B
def i_b
end
end
class A < B
include X
def i_a
end
end
# only declared methods are considered
p pt.parse_tree_for_method(A, :i_a) # [...]
p pt.parse_tree_for_method(A, :i_b) # [nil]
p pt.parse_tree_for_method(A, :i_x) # [nil]
puts '----'
ns = ParseTree::NODE_NAMES
p ns[ns.index(:scope)] = :foooooooo
p ns[ns.index(:defn)] = :baaaar # bug, hardcoded "defn"
p pt.parse_tree_for_method(A, :i_a) # [...]
ParseTree::NODE_NAMES = nil
p pt.parse_tree_for_method(A, :i_a) # [...]
|