31. julia> dump(ex)
Expr
head: Symbol call
args: Array{Any}((4,))
1: Symbol +
2: Symbol a
3: Expr
head: Symbol call
args: Array{Any}((3,))
1: Symbol *
2: Symbol b
3: Symbol c
typ: Any
4: Int64 1
typ: Any
julia> ex = :(a + b * c + 1)
:(a + b * c + 1)
32. julia> dump(ex)
Expr
head: Symbol call
args: Array{Any}((4,))
1: Symbol +
2: Symbol a
3: Expr
head: Symbol call
args: Array{Any}((3,))
1: Symbol *
2: Symbol b
3: Symbol c
typ: Any
4: Int64 1
typ: Any
47. •
julia> @generated function bar(x)
if x <: Integer
return :(x^2)
else
return :(x)
end
end
bar (generic function with 1 method)
julia> bar(4)
16
julia> bar("baz")
"baz"
48. Source code
Tokens
AST
Lowered AST
Typed AST
LLVM IR
LLVM IR
Instructions
lexing
parsing
lowering
type inference
LLVM codegen
optimize
native codegen
LLVM IRLLVM IR
Expr
Symbol
@code_lowered
@code_typed
@code_llvm
@code_native
@code_warntype