Skip to content

Instantly share code, notes, and snippets.

Created October 13, 2016 19:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/535de5ebb0984cd2de9df454dd86e5f7 to your computer and use it in GitHub Desktop.
Save anonymous/535de5ebb0984cd2de9df454dd86e5f7 to your computer and use it in GitHub Desktop.
Swift-AST
Swift-AST
Source File: Struct.swift
struct Struct {
var variable: Int
func function() -> Int {
return 2
}
}
func globalFunction(value: Struct) -> Int {
return value.variable
}
AST dump command:
swiftc -dump-ast Struct.swift
(source_file
(struct_decl "Struct" type='Struct.Type' access=internal @_fixed_layout
(pattern_binding_decl
(pattern_typed type='Int'
(pattern_named type='Int' 'variable')
(type_ident
(component id='Int' bind=Swift.(file).Int))))
(var_decl "variable" type='Int' access=internal storage_kind=stored_with_trivial_accessors
(func_decl implicit 'anonname=0x7feeaa0b9730' type='(Struct) -> () -> Int' access=internal getter_for=variable
(parameter_list
(parameter "self" type='Struct'))
(parameter_list)
(brace_stmt
(return_stmt
(member_ref_expr implicit type='Int' decl=Struct.(file).Struct.variable@Struct.swift:10:9 direct_to_storage
(declref_expr implicit type='Struct' decl=Struct.(file).Struct.func decl.self@Struct.swift:10:9 specialized=no)))))
(func_decl implicit 'anonname=0x7feeaa0b9990' type='(inout Struct) -> (Int) -> ()' access=internal setter_for=variable
(parameter_list
(parameter "self" type='inout Struct' mutable))
(parameter_list
(parameter "value" type='Int'))
(brace_stmt
(assign_expr
(member_ref_expr implicit type='@lvalue Int' accessKind=write decl=Struct.(file).Struct.variable@Struct.swift:10:9 direct_to_storage
(declref_expr implicit type='@lvalue Struct' accessKind=readwrite decl=Struct.(file).Struct.func decl.self@Struct.swift:10:9 specialized=no))
(declref_expr implicit type='Int' decl=Struct.(file).Struct.func decl.value@Struct.swift:10:9 specialized=no))))
(func_decl implicit 'anonname=0x7feeaa0babb0' type='(inout Struct) -> (Builtin.RawPointer, inout Builtin.UnsafeValueBuffer) -> (Builtin.RawPointer, (@convention(thin) (Builtin.RawPointer, inout Builtin.UnsafeValueBuffer, inout Struct, @thick Struct.Type) -> ())?)' access=internal materializeForSet_for=variable
(parameter_list
(parameter "self" type='inout Struct' mutable))
(parameter_list
(parameter "buffer" type='Builtin.RawPointer')
(parameter "callbackStorage" type='inout Builtin.UnsafeValueBuffer' mutable))))
(func_decl "function()" type='(Struct) -> () -> Int' access=internal
(parameter_list
(parameter "self" type='Struct'))
(parameter_list)
(result
(type_ident
(component id='Int' bind=Swift.(file).Int)))
(brace_stmt
(return_stmt
(call_expr implicit type='Int' location=Struct.swift:13:16 range=[Struct.swift:13:16 - line:13:16] nothrow
(constructor_ref_call_expr implicit type='(_builtinIntegerLiteral: Int2048) -> Int' location=Struct.swift:13:16 range=[Struct.swift:13:16 - line:13:16] nothrow
(declref_expr implicit type='Int.Type -> (_builtinIntegerLiteral: Int2048) -> Int' location=Struct.swift:13:16 range=[Struct.swift:13:16 - line:13:16] decl=Swift.(file).Int.init(_builtinIntegerLiteral:) specialized=no)
(type_expr implicit type='Int.Type' location=Struct.swift:13:16 range=[Struct.swift:13:16 - line:13:16] typerepr='Int'))
(tuple_expr implicit type='(_builtinIntegerLiteral: Int2048)' location=Struct.swift:13:16 range=[Struct.swift:13:16 - line:13:16] names=_builtinIntegerLiteral
(integer_literal_expr type='Int2048' location=Struct.swift:13:16 range=[Struct.swift:13:16 - line:13:16] value=2))))))
(func_decl implicit 'anonname=0x7feeaa0b9730' type='(Struct) -> () -> Int' access=internal getter_for=variable
(parameter_list
(parameter "self" type='Struct'))
(parameter_list)
(brace_stmt
(return_stmt
(member_ref_expr implicit type='Int' decl=Struct.(file).Struct.variable@Struct.swift:10:9 direct_to_storage
(declref_expr implicit type='Struct' decl=Struct.(file).Struct.func decl.self@Struct.swift:10:9 specialized=no)))))
(func_decl implicit 'anonname=0x7feeaa0b9990' type='(inout Struct) -> (Int) -> ()' access=internal setter_for=variable
(parameter_list
(parameter "self" type='inout Struct' mutable))
(parameter_list
(parameter "value" type='Int'))
(brace_stmt
(assign_expr
(member_ref_expr implicit type='@lvalue Int' accessKind=write decl=Struct.(file).Struct.variable@Struct.swift:10:9 direct_to_storage
(declref_expr implicit type='@lvalue Struct' accessKind=readwrite decl=Struct.(file).Struct.func decl.self@Struct.swift:10:9 specialized=no))
(declref_expr implicit type='Int' decl=Struct.(file).Struct.func decl.value@Struct.swift:10:9 specialized=no))))
(func_decl implicit 'anonname=0x7feeaa0babb0' type='(inout Struct) -> (Builtin.RawPointer, inout Builtin.UnsafeValueBuffer) -> (Builtin.RawPointer, (@convention(thin) (Builtin.RawPointer, inout Builtin.UnsafeValueBuffer, inout Struct, @thick Struct.Type) -> ())?)' access=internal materializeForSet_for=variable
(parameter_list
(parameter "self" type='inout Struct' mutable))
(parameter_list
(parameter "buffer" type='Builtin.RawPointer')
(parameter "callbackStorage" type='inout Builtin.UnsafeValueBuffer' mutable)))
(constructor_decl implicit "init(variable:)" type='Struct.Type -> (variable: Int) -> Struct' access=internal designated
(parameter_list
(parameter "self" type='inout Struct' mutable))
(parameter_list
(parameter "variable" apiName=variable type='Int'))))
(func_decl "globalFunction(_:)" type='(Struct) -> Int' access=internal
(parameter_list
(parameter "value" type='Struct'))
(result
(type_ident
(component id='Int' bind=Swift.(file).Int)))
(brace_stmt
(return_stmt
(call_expr type='Int' location=Struct.swift:18:18 range=[Struct.swift:18:12 - line:18:27] nothrow
(dot_syntax_call_expr type='() -> Int' location=Struct.swift:18:18 range=[Struct.swift:18:12 - line:18:18] nothrow
(declref_expr type='(Struct) -> () -> Int' location=Struct.swift:18:18 range=[Struct.swift:18:18 - line:18:18] decl=Struct.(file).Struct.function()@Struct.swift:12:10 specialized=no)
(declref_expr type='Struct' location=Struct.swift:18:12 range=[Struct.swift:18:12 - line:18:12] decl=Struct.(file).func decl.value@Struct.swift:17:21 specialized=no))
(tuple_expr type='()' location=Struct.swift:18:26 range=[Struct.swift:18:26 - line:18:27]))))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment