Full dump of macroexpand
Expr
  head: Symbol block
  args: Array{Any}((8,))
    1: LineNumberNode
      line: Int64 155
      file: Symbol /Users/cameron/.julia/packages/Memoization/7WxyR/src/Memoization.jl
    2: Expr
      head: Symbol =
      args: Array{Any}((2,))
        1: Symbol #21#func
        2: Expr
          head: Symbol block
          args: Array{Any}((2,))
            1: Expr
              head: Symbol meta
              args: Array{Any}((1,))
                1: Symbol doc
            2: Expr
              head: Symbol function
              args: Array{Any}((2,))
                1: Expr
                  head: Symbol call
                  args: Array{Any}((3,))
                    1: Symbol f
                    2: Expr
                      head: Symbol parameters
                      args: Array{Any}((0,))
                    3: Expr
                      head: Symbol ::
                      args: Array{Any}((2,))
                        1: Symbol x
                        2: Symbol Any
                2: Expr
                  head: Symbol block
                  args: Array{Any}((8,))
                    1: LineNumberNode
                      line: Int64 206
                      file: Symbol /Users/cameron/.julia/packages/Memoization/7WxyR/src/Memoization.jl
                    2: Expr
                      head: Symbol =
                      args: Array{Any}((2,))
                        1: Symbol ##cache#234
                        2: Expr
                          head: Symbol call
                          args: Array{Any}((3,))
                            1: get_cache (function of type typeof(Memoization.get_cache))
                            2: UnionAll
                              var: TypeVar
                                name: Symbol K
                                lb: Union{}
                                ub: Any
                              body: UnionAll
                                var: TypeVar
                                  name: Symbol V
                                  lb: Union{}
                                  ub: Any
                                body: IdDict{K, V} <: AbstractDict{K, V}
                                  ht::Vector{Any}
                                  count::Int64
                                  ndel::Int64
                            3: Symbol f
                    3: LineNumberNode
                      line: Int64 207
                      file: Symbol /Users/cameron/.julia/packages/Memoization/7WxyR/src/Memoization.jl
                    4: Expr
                      head: Symbol =
                      args: Array{Any}((2,))
                        1: Expr
                          head: Symbol call
                          args: Array{Any}((1,))
                            1: Symbol ##getter#233
                        2: Expr
                          head: Symbol block
                          args: Array{Any}((2,))
                            1: LineNumberNode
                              line: Int64 207
                              file: Symbol /Users/cameron/.julia/packages/Memoization/7WxyR/src/Memoization.jl
                            2: Expr
                              head: Symbol block
                              args: Array{Any}((4,))
                                1: LineNumberNode
                                  line: Int64 1
                                  file: Symbol REPL[7]
                                2: Expr
                                  head: Symbol call
                                  args: Array{Any}((2,))
                                    1: Symbol println
                                    2: Expr
                                      head: Symbol string
                                      args: Array{Any}((2,))
                                        1: String "Computed "
                                        2: Symbol x
                                3: LineNumberNode
                                  line: Int64 1
                                  file: Symbol REPL[7]
                                4: Symbol x
                    5: LineNumberNode
                      line: Int64 208
                      file: Symbol /Users/cameron/.julia/packages/Memoization/7WxyR/src/Memoization.jl
                    6: Expr
                      head: Symbol =
                      args: Array{Any}((2,))
                        1: Symbol ##T#232
                        2: Expr
                          head: Symbol call
                          args: Array{Any}((3,))
                            1: return_type (function of type typeof(Core.Compiler.return_type))
                            2: Symbol ##getter#233
                            3: Expr
                              head: Symbol curly
                              args: Array{Any}((1,))
                                1: Tuple <: Any
                    7: LineNumberNode
                      line: Int64 209
                      file: Symbol /Users/cameron/.julia/packages/Memoization/7WxyR/src/Memoization.jl
                    8: Expr
                      head: Symbol ::
                      args: Array{Any}((2,))
                        1: Expr
                          head: Symbol call
                          args: Array{Any}((4,))
                            1: _get! (function of type typeof(Memoization._get!))
                            2: Symbol ##getter#233
                            3: Symbol ##cache#234
                            4: Expr
                              head: Symbol tuple
                              args: Array{Any}((2,))
                                1: Expr
                                  head: Symbol tuple
                                  args: Array{Any}((1,))
                                    1: Symbol x
                                2: Expr
                                  head: Symbol tuple
                                  args: Array{Any}((0,))
                        2: Symbol ##T#232
    3: LineNumberNode
      line: Int64 156
      file: Symbol /Users/cameron/.julia/packages/Memoization/7WxyR/src/Memoization.jl
    4: Expr
      head: Symbol block
      args: Array{Any}((4,))
        1: LineNumberNode
          line: Int64 158
          file: Symbol /Users/cameron/.julia/packages/Memoization/7WxyR/src/Memoization.jl
        2: Expr
          head: Symbol local
          args: Array{Any}((1,))
            1: Expr
              head: Symbol =
              args: Array{Any}((2,))
                1: Symbol #22#cache_constructor_expr′
                2: Expr
                  head: Symbol call
                  args: Array{Any}((4,))
                    1: GlobalRef
                      mod: Module Memoization
                      name: Symbol _get!
                      binding: Core.Binding
                        value: _get! (function of type typeof(Memoization._get!))
                        globalref: GlobalRef#= circular reference @-2 =#
                        owner: Core.Binding#= circular reference @-1 =#
                        ty: Any
                        flags: UInt8 0x01
                    2: Expr
                      head: Symbol ->
                      args: Array{Any}((2,))
                        1: Expr
                          head: Symbol tuple
                          args: Array{Any}((0,))
                        2: Expr
                          head: Symbol block
                          args: Array{Any}((2,))
                            1: LineNumberNode
                              line: Int64 158
                              file: Symbol /Users/cameron/.julia/packages/Memoization/7WxyR/src/Memoization.jl
                            2: QuoteNode
                              value: UnionAll
                                var: TypeVar
                                  name: Symbol K
                                  lb: Union{}
                                  ub: Any
                                body: UnionAll
                                  var: TypeVar
                                    name: Symbol V
                                    lb: Union{}
                                    ub: Any
                                  body: IdDict{K, V} <: AbstractDict{K, V}
                                    ht::Vector{Any}
                                    count::Int64
                                    ndel::Int64
                    3: GlobalRef
                      mod: Module Memoization
                      name: Symbol cache_constructor_exprs
                      binding: Core.Binding
                        value: IdDict{Any, Any}
                          ht: Array{Any}((32,))
                            1: #undef
                            2: #undef
                            3: #undef
                            4: #undef
                            5: #undef
                            ...
                            28: #undef
                            29: #undef
                            30: #undef
                            31: #undef
                            32: #undef
                          count: Int64 1
                          ndel: Int64 0
                        globalref: GlobalRef#= circular reference @-2 =#
                        owner: Core.Binding#= circular reference @-1 =#
                        ty: Any
                        flags: UInt8 0x01
                    4: Symbol #21#func
        3: LineNumberNode
          line: Int64 159
          file: Symbol /Users/cameron/.julia/packages/Memoization/7WxyR/src/Memoization.jl
        4: Expr
          head: Symbol if
          args: Array{Any}((2,))
            1: Expr
              head: Symbol call
              args: Array{Any}((3,))
                1: GlobalRef
                  mod: Module Memoization
                  name: Symbol !=
                  binding: Core.Binding
                    value: #undef
                    globalref: GlobalRef#= circular reference @-2 =#
                    owner: Core.Binding
                      value: != (function of type typeof(!=))
                      globalref: GlobalRef
                        mod: Module Base
                        name: Symbol !=
                        binding: Core.Binding#= circular reference @-2 =#
                      owner: Core.Binding#= circular reference @-1 =#
                      ty: #undef
                      flags: UInt8 0x03
                    ty: #undef
                    flags: UInt8 0x00
                2: Symbol #22#cache_constructor_expr′
                3: QuoteNode
                  value: UnionAll
                    var: TypeVar
                      name: Symbol K
                      lb: Union{}
                      ub: Any
                    body: UnionAll
                      var: TypeVar
                        name: Symbol V
                        lb: Union{}
                        ub: Any
                      body: IdDict{K, V} <: AbstractDict{K, V}
                        ht::Vector{Any}
                        count::Int64
                        ndel::Int64
            2: Expr
              head: Symbol block
              args: Array{Any}((2,))
                1: LineNumberNode
                  line: Int64 160
                  file: Symbol /Users/cameron/.julia/packages/Memoization/7WxyR/src/Memoization.jl
                2: Expr
                  head: Symbol call
                  args: Array{Any}((2,))
                    1: GlobalRef
                      mod: Module Memoization
                      name: Symbol error
                      binding: Core.Binding
                        value: #undef
                        globalref: GlobalRef#= circular reference @-2 =#
                        owner: #undef
                        ty: #undef
                        flags: UInt8 0x00
                    2: Expr
                      head: Symbol string
                      args: Array{Any}((3,))
                        1: Symbol #21#func
                        2: String " is already memoized with "
                        3: Symbol #22#cache_constructor_expr′
    5: LineNumberNode
      line: Int64 163
      file: Symbol /Users/cameron/.julia/packages/Memoization/7WxyR/src/Memoization.jl
    6: Expr
      head: Symbol if
      args: Array{Any}((2,))
        1: Expr
          head: Symbol call
          args: Array{Any}((2,))
            1: GlobalRef
              mod: Module Memoization
              name: Symbol statically_memoizable
              binding: Core.Binding
                value: statically_memoizable (function of type typeof(Memoization.statically_memoizable))
                globalref: GlobalRef#= circular reference @-2 =#
                owner: Core.Binding#= circular reference @-1 =#
                ty: Any
                flags: UInt8 0x01
            2: Expr
              head: Symbol call
              args: Array{Any}((2,))
                1: GlobalRef
                  mod: Module Memoization
                  name: Symbol typeof
                  binding: Core.Binding
                    value: #undef
                    globalref: GlobalRef#= circular reference @-2 =#
                    owner: Core.Binding
                      value: typeof (function of type typeof(typeof))
                      globalref: GlobalRef
                        mod: Module Core
                        name: Symbol typeof
                        binding: Core.Binding#= circular reference @-2 =#
                      owner: Core.Binding#= circular reference @-1 =#
                      ty: Any
                      flags: UInt8 0x03
                    ty: #undef
                    flags: UInt8 0x00
                2: Symbol #21#func
        2: Expr
          head: Symbol block
          args: Array{Any}((4,))
            1: LineNumberNode
              line: Int64 168
              file: Symbol /Users/cameron/.julia/packages/Memoization/7WxyR/src/Memoization.jl
            2: Expr
              head: Symbol if
              args: Array{Any}((2,))
                1: Expr
                  head: Symbol call
                  args: Array{Any}((3,))
                    1: GlobalRef
                      mod: Module Memoization
                      name: Symbol ==
                      binding: Core.Binding
                        value: #undef
                        globalref: GlobalRef#= circular reference @-2 =#
                        owner: Core.Binding
                          value: == (function of type typeof(==))
                          globalref: GlobalRef
                            mod: Module Base
                            name: Symbol ==
                            binding: Core.Binding#= circular reference @-2 =#
                          owner: Core.Binding#= circular reference @-1 =#
                          ty: #undef
                          flags: UInt8 0x03
                        ty: #undef
                        flags: UInt8 0x00
                    2: Expr
                      head: Symbol call
                      args: Array{Any}((3,))
                        1: GlobalRef
                          mod: Module Memoization
                          name: Symbol which
                          binding: Core.Binding
                            value: #undef
                            globalref: GlobalRef#= circular reference @-2 =#
                            owner: Core.Binding
                              value: which (function of type typeof(which))
                              globalref: GlobalRef
                                mod: Module Base
                                name: Symbol which
                                binding: Core.Binding#= circular reference @-2 =#
                              owner: Core.Binding#= circular reference @-1 =#
                              ty: #undef
                              flags: UInt8 0x03
                            ty: #undef
                            flags: UInt8 0x00
                        2: Expr
                          head: Symbol .
                          args: Array{Any}((2,))
                            1: Module Memoization
                            2: QuoteNode
                              value: Symbol _static_get_cache
                        3: Expr
                          head: Symbol curly
                          args: Array{Any}((2,))
                            1: GlobalRef
                              mod: Module Memoization
                              name: Symbol Tuple
                              binding: Core.Binding
                                value: #undef
                                globalref: GlobalRef#= circular reference @-2 =#
                                owner: Core.Binding
                                  value: Tuple <: Any
                                  globalref: GlobalRef
                                    mod: Module Core
                                    name: Symbol Tuple
                                    binding: Core.Binding#= circular reference @-2 =#
                                  owner: Core.Binding#= circular reference @-1 =#
                                  ty: Any
                                  flags: UInt8 0x03
                                ty: #undef
                                flags: UInt8 0x00
                            2: Expr
                              head: Symbol call
                              args: Array{Any}((2,))
                                1: GlobalRef
                                  mod: Module Memoization
                                  name: Symbol typeof
                                  binding: Core.Binding
                                    value: #undef
                                    globalref: GlobalRef#= circular reference @-2 =#
                                    owner: Core.Binding
                                      value: typeof (function of type typeof(typeof))
                                      globalref: GlobalRef
                                        mod: Module Core
                                        name: Symbol typeof
                                        binding: Core.Binding#= circular reference @-2 =#
                                      owner: Core.Binding#= circular reference @-1 =#
                                      ty: Any
                                      flags: UInt8 0x03
                                    ty: #undef
                                    flags: UInt8 0x00
                                2: Symbol #21#func
                    3: Expr
                      head: Symbol call
                      args: Array{Any}((3,))
                        1: GlobalRef
                          mod: Module Memoization
                          name: Symbol which
                          binding: Core.Binding
                            value: #undef
                            globalref: GlobalRef#= circular reference @-2 =#
                            owner: Core.Binding
                              value: which (function of type typeof(which))
                              globalref: GlobalRef
                                mod: Module Base
                                name: Symbol which
                                binding: Core.Binding#= circular reference @-2 =#
                              owner: Core.Binding#= circular reference @-1 =#
                              ty: #undef
                              flags: UInt8 0x03
                            ty: #undef
                            flags: UInt8 0x00
                        2: Expr
                          head: Symbol .
                          args: Array{Any}((2,))
                            1: Module Memoization
                            2: QuoteNode
                              value: Symbol _static_get_cache
                        3: Expr
                          head: Symbol curly
                          args: Array{Any}((2,))
                            1: GlobalRef
                              mod: Module Memoization
                              name: Symbol Tuple
                              binding: Core.Binding
                                value: #undef
                                globalref: GlobalRef#= circular reference @-2 =#
                                owner: Core.Binding
                                  value: Tuple <: Any
                                  globalref: GlobalRef
                                    mod: Module Core
                                    name: Symbol Tuple
                                    binding: Core.Binding#= circular reference @-2 =#
                                  owner: Core.Binding#= circular reference @-1 =#
                                  ty: Any
                                  flags: UInt8 0x03
                                ty: #undef
                                flags: UInt8 0x00
                            2: GlobalRef
                              mod: Module Memoization
                              name: Symbol Any
                              binding: Core.Binding
                                value: #undef
                                globalref: GlobalRef#= circular reference @-2 =#
                                owner: Core.Binding
                                  value: Any
                                  globalref: GlobalRef
                                    mod: Module Core
                                    name: Symbol Any
                                    binding: Core.Binding#= circular reference @-2 =#
                                  owner: Core.Binding#= circular reference @-1 =#
                                  ty: Any
                                  flags: UInt8 0x03
                                ty: #undef
                                flags: UInt8 0x00
                2: Expr
                  head: Symbol block
                  args: Array{Any}((2,))
                    1: LineNumberNode
                      line: Int64 172
                      file: Symbol /Users/cameron/.julia/packages/Memoization/7WxyR/src/Memoization.jl
                    2: Expr
                      head: Symbol call
                      args: Array{Any}((3,))
                        1: GlobalRef
                          mod: Module Core
                          name: Symbol eval
                          binding: Core.Binding
                            value: eval (function of type typeof(Core.eval))
                            globalref: GlobalRef#= circular reference @-2 =#
                            owner: Core.Binding#= circular reference @-1 =#
                            ty: #undef
                            flags: UInt8 0x03
                        2: Module Main
                        3: Expr
                          head: Symbol call
                          args: Array{Any}((5,))
                            1: GlobalRef
                              mod: Module Core
                              name: Symbol _expr
                              binding: Core.Binding
                                value: _expr (function of type typeof(Core._expr))
                                globalref: GlobalRef#= circular reference @-2 =#
                                owner: Core.Binding#= circular reference @-1 =#
                                ty: Any
                                flags: UInt8 0x01
                            2: QuoteNode
                              value: Symbol macrocall
                            3: QuoteNode
                              value: Symbol @generated
                            4: QuoteNode
                              value: LineNumberNode
                                line: Int64 172
                                file: Symbol /Users/cameron/.julia/packages/Memoization/7WxyR/src/Memoization.jl
                            5: Expr
                              head: Symbol call
                              args: Array{Any}((4,))
                                1: GlobalRef
                                  mod: Module Core
                                  name: Symbol _expr
                                  binding: Core.Binding
                                    value: _expr (function of type typeof(Core._expr))
                                    globalref: GlobalRef#= circular reference @-2 =#
                                    owner: Core.Binding#= circular reference @-1 =#
                                    ty: Any
                                    flags: UInt8 0x01
                                2: QuoteNode
                                  value: Symbol function
                                3: Expr
                                  head: Symbol call
                                  args: Array{Any}((4,))
                                    1: GlobalRef
                                      mod: Module Core
                                      name: Symbol _expr
                                      binding: Core.Binding
                                        value: _expr (function of type typeof(Core._expr))
                                        globalref: GlobalRef#= circular reference @-2 =#
                                        owner: Core.Binding#= circular reference @-1 =#
                                        ty: Any
                                        flags: UInt8 0x01
                                    2: QuoteNode
                                      value: Symbol call
                                    3: Expr
                                      head: Symbol copyast
                                      args: Array{Any}((1,))
                                        1: QuoteNode
                                          value: Expr
                                            head: Symbol .
                                            args: Array{Any}((2,))
                                              1: Module Memoization
                                              2: QuoteNode
                                                value: Symbol _static_get_cache
                                    4: Expr
                                      head: Symbol call
                                      args: Array{Any}((3,))
                                        1: GlobalRef
                                          mod: Module Core
                                          name: Symbol _expr
                                          binding: Core.Binding
                                            value: _expr (function of type typeof(Core._expr))
                                            globalref: GlobalRef#= circular reference @-2 =#
                                            owner: Core.Binding#= circular reference @-1 =#
                                            ty: Any
                                            flags: UInt8 0x01
                                        2: QuoteNode
                                          value: Symbol ::
                                        3: Expr
                                          head: Symbol call
                                          args: Array{Any}((4,))
                                            1: GlobalRef
                                              mod: Module Core
                                              name: Symbol _expr
                                              binding: Core.Binding
                                                value: _expr (function of type typeof(Core._expr))
                                                globalref: GlobalRef#= circular reference @-2 =#
                                                owner: Core.Binding#= circular reference @-1 =#
                                                ty: Any
                                                flags: UInt8 0x01
                                            2: QuoteNode
                                              value: Symbol call
                                            3: QuoteNode
                                              value: Symbol typeof
                                            4: Symbol #21#func
                                4: Expr
                                  head: Symbol copyast
                                  args: Array{Any}((1,))
                                    1: QuoteNode
                                      value: Expr
                                        head: Symbol block
                                        args: Array{Any}((3,))
                                          1: LineNumberNode
                                            line: Int64 172
                                            file: Symbol /Users/cameron/.julia/packages/Memoization/7WxyR/src/Memoization.jl
                                          2: LineNumberNode
                                            line: Int64 173
                                            file: Symbol /Users/cameron/.julia/packages/Memoization/7WxyR/src/Memoization.jl
                                          3: Expr
                                            head: Symbol call
                                            args: Array{Any}((1,))
                                              1: UnionAll
                                                var: TypeVar
                                                  name: Symbol K
                                                  lb: Union{}
                                                  ub: Any
                                                body: UnionAll
                                                  var: TypeVar
                                                    name: Symbol V
                                                    lb: Union{}
                                                    ub: Any
                                                  body: IdDict{K, V} <: AbstractDict{K, V}
                                                    ht::Vector{Any}
                                                    count::Int64
                                                    ndel::Int64
            3: LineNumberNode
              line: Int64 180
              file: Symbol /Users/cameron/.julia/packages/Memoization/7WxyR/src/Memoization.jl
            4: Expr
              head: Symbol call
              args: Array{Any}((2,))
                1: empty_cache! (function of type typeof(Memoization.empty_cache!))
                2: Symbol f
    7: LineNumberNode
      line: Int64 182
      file: Symbol /Users/cameron/.julia/packages/Memoization/7WxyR/src/Memoization.jl
    8: Symbol #21#func