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
~/NetBeansProjects/jruby ➔ cat fib.rb
class Fib
  def fib(n)
    {n => :fixnum}

    if n < 2
      n
    else
      fib(n - 1) + fib(n - 2)
    end
  end
end~/NetBeansProjects/jruby ➔ jru-rcompiler/duby/plugin/math lib/ruby/site_ruby/1.8/compiler/duby/typer2.rb fib.rb

AST:
Script
 ClassDefinition(Fib)
  MethodDefinition(fib)
   {:return=>Type(fixnum), :n=>Type(fixnum)}
   Arguments
    RequiredArgument(n)
   Body
    Noop
    If
     Condition
      Call(<)
       Local(name = n, scope = MethodDefinition(fib))
       Fixnum(2)
     Local(name = n, scope = MethodDefinition(fib))
     Call(+)
      FunctionalCall(fib)
       Call(-)
        Local(name = n, scope = MethodDefinition(fib))
        Fixnum(1)
      FunctionalCall(fib)
       Call(-)
        Local(name = n, scope = MethodDefinition(fib))
        Fixnum(2)