AST example in julia

Hi,

I was trying to generate the AST for the following code snippet:

function alma(c)
    f(x,y) = 3x + 4y
    A = Int8[1, 2, 3] * c
    B = [4.0, 5.0, 6.0] .+ c
    return f(A,B)/c
end
str = open(f->read(f, String), "expr.jl")
ex = Meta.parse(str)
dump(ex)

I got the following:

Expr
  head: Symbol function
  args: Array{Any}((2,))
    1: Expr
      head: Symbol call
      args: Array{Any}((2,))
        1: Symbol alma
        2: Symbol c
    2: Expr
      head: Symbol block
      args: Array{Any}((8,))
        1: LineNumberNode
          line: Int64 2
          file: Symbol none
        2: Expr
          head: Symbol =
          args: Array{Any}((2,))
            1: Expr
              head: Symbol call
              args: Array{Any}((3,))
                1: Symbol f
                2: Symbol x
                3: Symbol y
            2: Expr
              head: Symbol block
              args: Array{Any}((2,))
                1: LineNumberNode
                2: Expr
        3: LineNumberNode
          line: Int64 3
          file: Symbol none
        4: Expr
          head: Symbol =
          args: Array{Any}((2,))
            1: Symbol A
            2: Expr
              head: Symbol call
              args: Array{Any}((3,))
                1: Symbol *
                2: Expr
                3: Symbol c
        5: LineNumberNode
          line: Int64 4
          file: Symbol none
        6: Expr
          head: Symbol =
          args: Array{Any}((2,))
            1: Symbol B
            2: Expr
              head: Symbol call
              args: Array{Any}((3,))
                1: Symbol .+
                2: Expr
                3: Symbol c
        7: LineNumberNode
          line: Int64 5
          file: Symbol none
        8: Expr
          head: Symbol return
          args: Array{Any}((1,))
            1: Expr
              head: Symbol call
              args: Array{Any}((3,))
                1: Symbol /
                2: Expr
                3: Symbol c

The return expression is wrong. Is this a bug or it should put this out?

Regards,
RUn

Please, read dump documentation that says:

dump(x; maxdepth=8)

Show every part of the representation of a value. The depth of the output is
truncated at maxdepth.

You are seeing empty Exprs because dump has truncated the output.

You can obtain the AST in an easy way by constructing a quoted expression

julia> ex = quote
           function alma(c)
               f(x,y) = 3x + 4y
               A = Int8[1, 2, 3] * c
               B = [4.0, 5.0, 6.0] .+ c
               return f(A,B)/c
           end
       end
quote
    #= REPL[6]:2 =#
    function alma(c)
        #= REPL[6]:2 =#
        #= REPL[6]:3 =#
        f(x, y) = begin
                #= REPL[6]:3 =#
                3x + 4y
            end
        #= REPL[6]:4 =#
        A = Int8[1, 2, 3] * c
        #= REPL[6]:5 =#
        B = [4.0, 5.0, 6.0] .+ c
        #= REPL[6]:6 =#
        return f(A, B) / c
    end
end

julia> dump(ex)
Expr
  head: Symbol block
  args: Array{Any}((2,))
    1: LineNumberNode
      line: Int64 2
      file: Symbol REPL[6]
    2: Expr
.
.
.