NAME=mach0 swift demangle methods
FILE=bins/mach0/swift-main
BROKEN=1
CMDS=isq~main.
EXPECT=<<EOF
0x100001b70 0 main.moin() -> Swift.Int
0x100002080 0 main.Tost.__allocating_init() -> main.Tost
0x100002110 0 main.Tost.__deallocating_deinit
0x100002040 0 main.Tost.init() -> main.Tost
0x100002140 0 main.Tost.deinit
0x100002170 0 main.Tost.msg.getter : Swift.String
0x100002210 0 main.Tost.msg.materializeForSet : Swift.String
0x1000021b0 0 main.Tost.msg.setter : Swift.String
0x100001a30 0 main.BarClass.sayHello() -> ()
0x100001b30 0 main.BarClass.__allocating_init() -> main.BarClass
0x100001ae0 0 main.BarClass.__deallocating_deinit
0x100001b20 0 main.BarClass.init() -> main.BarClass
0x100001b10 0 main.BarClass.deinit
0x100005bb0 0 type metadata for main.Tost
0x100005b18 0 type metadata for main.BarClass
0x100005a40 0 type metadata for main.FooClass
0x100005d28 0 lazy cache variable for type metadata for main.Tost
0x100005d20 0 lazy cache variable for type metadata for main.BarClass
0x100005d18 0 lazy cache variable for type metadata for main.FooClass
0x1000053d8 0 type metadata for main.Balance
0x1000020c0 0 type metadata accessor for main.Tost
0x100001d40 0 type metadata accessor for main.BarClass
0x100001cf0 0 type metadata accessor for main.FooClass
0x100001e40 0 type metadata accessor for main.Balance
0x100005b78 0 metaclass for main.Tost
0x100005ae0 0 metaclass for main.BarClass
0x100005a08 0 metaclass for main.FooClass
0x1000054d0 0 nominal type descriptor for main.Tost
0x100005490 0 nominal type descriptor for main.BarClass
0x100005450 0 nominal type descriptor for main.FooClass
0x100005390 0 nominal type descriptor for main.Balance
0x100005408 0 protocol descriptor for main.FoodClass
0x1000052f0 0 value witness table for main.Balance
0x1000047c8 0 direct field offset for main.Tost.msg : Swift.String
0x100004760 0 direct field offset for main.FooClass.bar : Swift.String
0x100004758 0 direct field offset for main.FooClass.foo : Swift.Int
0x100001380 0 main.Balance.width.getter : Swift.Double
0x100001390 0 main.Balance.width.setter : Swift.Double
0x1000013a0 0 main.Balance.width.materializeForSet : Swift.Double
0x1000013c0 0 main.Balance.height.getter : Swift.Double
0x1000013e0 0 main.Balance.height.setter : Swift.Double
0x1000013f0 0 main.Balance.height.materializeForSet : Swift.Double
0x100001410 0 main.Balance.pos.getter : Swift.Double
0x100001430 0 main.Balance.pos.setter : Swift.Double
0x100001440 0 main.Balance.pos.materializeForSet : Swift.Double
0x100001460 0 main.Balance.init(width: Swift.Double, height: Swift.Double, pos: Swift.Double) -> main.Balance
0x100001470 0 main.Balance.init() -> main.Balance
0x1000014c0 0 main.FooClass.init() -> main.FooClass
0x1000015a0 0 main.FooClass.__allocating_init() -> main.FooClass
0x1000015e0 0 main.FooClass.sayHello() -> ()
0x100001720 0 main.FooClass.__deallocating_deinit
0x100001750 0 main.FooClass.deinit
0x100001780 0 main.FooClass.foo.getter : Swift.Int
0x100001790 0 main.FooClass.foo.setter : Swift.Int
0x1000017a0 0 main.FooClass.foo.materializeForSet : Swift.Int
0x1000017c0 0 main.FooClass.bar.getter : Swift.String
0x100001800 0 main.FooClass.bar.setter : Swift.String
0x100001860 0 main.FooClass.bar.materializeForSet : Swift.String
0x100001880 0 protocol witness for main.FoodClass.sayHello() -> () in conformance main.FooClass : main.FoodClass in main
0x1000018c0 0 (extension in main):main.FoodClass<A where A: main.FooClass, A: main.FoodClass>.sayHello() -> ()
0x100001d90 0 protocol witness table accessor for main.FooClass : main.FoodClass in main
0x1000052e8 0 protocol witness table for main.FooClass : main.FoodClass in main
0x1000053d0 0 full type metadata for main.Balance
0x100005a30 0 full type metadata for main.FooClass
0x100005b08 0 full type metadata for main.BarClass
0x100005ba0 0 full type metadata for main.Tost
EOF
RUN

NAME=mach0 swift-x86-64 aav
FILE=bins/mach0/swift-main
BROKEN=1
CMDS=<<EOF
C*~^?Cd
aav
C*~^?Cd
Cdl~?
EOF
EXPECT=<<EOF
114
130
130
EOF
RUN

NAME=swift-x86-64 calling convention
FILE=bins/mach0/swift5.1-throwError
BROKEN=1
CMDS=<<EOF
s sym.throwError.Thrower.throwError.Thrower.throwMyError___throws
af
afc swift
afva
afcr
afvl
EOF
EXPECT=<<EOF
name: swift
ret: rax
arg0: rdi
arg1: rsi
arg2: rdx
arg3: rcx
arg4: r8
arg5: r9
arg6: xmm0
arg7: xmm1
arg8: xmm2
arg9: xmm3
arg10: xmm4
self: r13
error: r12
var int64_t var_30h @ stack - 0x30
var int64_t var_28h @ stack - 0x28
var int64_t var_20h @ stack - 0x20
var int64_t var_18h @ stack - 0x18
var int64_t error @ r12
var int64_t self @ r13
EOF
RUN

NAME=swift-x86-64 calling convention json
FILE=bins/mach0/swift5.1-throwError
BROKEN=1
CMDS=<<EOF
s sym.throwError.Thrower.throwError.Thrower.throwMyError___throws
af
afc swift
afva
afcrj
afvlj
EOF
EXPECT=<<EOF
{"name":"swift","ret":"rax","args":["rdi","rsi","rdx","rcx","r8","r9","xmm0","xmm1","xmm2","xmm3","xmm4"],"self":"r13","error":"r12"}
{"stack":[{"name":"var_30h","arg":false,"type":"int64_t","storage":{"type":"stack","stack":-48}},{"name":"var_28h","arg":false,"type":"int64_t","storage":{"type":"stack","stack":-40}},{"name":"var_20h","arg":false,"type":"int64_t","storage":{"type":"stack","stack":-32}},{"name":"var_18h","arg":false,"type":"int64_t","storage":{"type":"stack","stack":-24}}],"reg":[{"name":"error","arg":false,"type":"int64_t","storage":{"type":"reg","reg":"r12"}},{"name":"self","arg":false,"type":"int64_t","storage":{"type":"reg","reg":"r13"}}]}
EOF
RUN

NAME=swift-x86-64 bin classes and methods
FILE=bins/mach0/swift-main
BROKEN=1
CMDS=<<EOF
ic
icm
EOF
EXPECT=<<EOF
    address         min         max name          super       
--------------------------------------------------------------
 ---------- 0x10000440a 0x10000441c Swift.String  
 ---------- 0x100001380 0x100001470 main.Balance  
0x100005ae0 0x100001a30 0x100001b30 main.BarClass SwiftObject
0x100005a08 0x1000014c0 0x100001860 main.FooClass SwiftObject
0x100005b78 0x100002040 0x100002210 main.Tost     SwiftObject
    address index class         flags name                                                                                                           
-----------------------------------------------------------------------------------------------------------------------------------------------------
0x10000440a     0 Swift.String        init(_builtinStringLiteral: Builtin.RawPointer, byteSize: Builtin.Word, isASCII: Builtin.Int1) -> Swift.String
0x100004410     1 Swift.String        init(stringInterpolationSegment: Swift.String) -> Swift.String
0x100004416     2 Swift.String        init(stringInterpolationSegment: Swift.Int) -> Swift.String
0x10000441c     3 Swift.String        init(stringInterpolation: Swift.Array<Swift.String>...) -> Swift.String
0x100001380     4 main.Balance        width.getter : Swift.Double
0x100001390     5 main.Balance        width.setter : Swift.Double
0x1000013a0     6 main.Balance        width.materializeForSet : Swift.Double
0x1000013c0     7 main.Balance        height.getter : Swift.Double
0x1000013e0     8 main.Balance        height.setter : Swift.Double
0x1000013f0     9 main.Balance        height.materializeForSet : Swift.Double
0x100001410    10 main.Balance        pos.getter : Swift.Double
0x100001430    11 main.Balance        pos.setter : Swift.Double
0x100001440    12 main.Balance        pos.materializeForSet : Swift.Double
0x100001460    13 main.Balance        init(width: Swift.Double, height: Swift.Double, pos: Swift.Double) -> main.Balance
0x100001470    14 main.Balance        init() -> main.Balance
0x100001a30    15 main.BarClass       sayHello() -> ()
0x100001ae0    16 main.BarClass       __deallocating_deinit
0x100001b10    17 main.BarClass       deinit
0x100001b20    18 main.BarClass       init() -> main.BarClass
0x100001b30    19 main.BarClass       __allocating_init() -> main.BarClass
0x1000014c0    20 main.FooClass       init() -> main.FooClass
0x1000015a0    21 main.FooClass       __allocating_init() -> main.FooClass
0x1000015e0    22 main.FooClass       sayHello() -> ()
0x100001720    23 main.FooClass       __deallocating_deinit
0x100001750    24 main.FooClass       deinit
0x100001780    25 main.FooClass       foo.getter : Swift.Int
0x100001790    26 main.FooClass       foo.setter : Swift.Int
0x1000017a0    27 main.FooClass       foo.materializeForSet : Swift.Int
0x1000017c0    28 main.FooClass       bar.getter : Swift.String
0x100001800    29 main.FooClass       bar.setter : Swift.String
0x100001860    30 main.FooClass       bar.materializeForSet : Swift.String
0x100002040    31 main.Tost           init() -> main.Tost
0x100002080    32 main.Tost           __allocating_init() -> main.Tost
0x100002110    33 main.Tost           __deallocating_deinit
0x100002140    34 main.Tost           deinit
0x100002170    35 main.Tost           msg.getter : Swift.String
0x1000021b0    36 main.Tost           msg.setter : Swift.String
0x100002210    37 main.Tost           msg.materializeForSet : Swift.String
EOF
RUN
