Last active
November 17, 2019 11:20
-
-
Save kingnight/ede0443a66f25824f1d72360bb07b77a to your computer and use it in GitHub Desktop.
sil file without protocol function define
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
sil_stage raw | |
import Builtin | |
import Swift | |
import SwiftShims | |
protocol ListDataProtocol { | |
} | |
class TestClass : ListDataProtocol { | |
func testFunc() | |
init() | |
@objc deinit | |
} | |
extension ListDataProtocol { | |
func testFunc() | |
} | |
@_hasStorage @_hasInitialValue let obj: TestClass { get } | |
@_hasStorage @_hasInitialValue let obj2: ListDataProtocol { get } | |
// obj | |
sil_global hidden [let] @$s4demo3objAA9TestClassCvp : $TestClass | |
// obj2 | |
sil_global hidden [let] @$s4demo4obj2AA16ListDataProtocol_pvp : $ListDataProtocol | |
// main | |
sil [ossa] @main : $@convention(c) (Int32, UnsafeMutablePointer<Optional<UnsafeMutablePointer<Int8>>>) -> Int32 { | |
bb0(%0 : $Int32, %1 : $UnsafeMutablePointer<Optional<UnsafeMutablePointer<Int8>>>): | |
alloc_global @$s4demo3objAA9TestClassCvp // id: %2 | |
%3 = global_addr @$s4demo3objAA9TestClassCvp : $*TestClass // users: %8, %7 | |
%4 = metatype $@thick TestClass.Type // user: %6 | |
// function_ref TestClass.__allocating_init() | |
%5 = function_ref @$s4demo9TestClassCACycfC : $@convention(method) (@thick TestClass.Type) -> @owned TestClass // user: %6 | |
%6 = apply %5(%4) : $@convention(method) (@thick TestClass.Type) -> @owned TestClass // user: %7 | |
store %6 to [init] %3 : $*TestClass // id: %7 | |
%8 = load_borrow %3 : $*TestClass // users: %11, %10, %9 | |
%9 = class_method %8 : $TestClass, #TestClass.testFunc!1 : (TestClass) -> () -> (), $@convention(method) (@guaranteed TestClass) -> () // user: %10 | |
%10 = apply %9(%8) : $@convention(method) (@guaranteed TestClass) -> () | |
end_borrow %8 : $TestClass // id: %11 | |
alloc_global @$s4demo4obj2AA16ListDataProtocol_pvp // id: %12 | |
%13 = global_addr @$s4demo4obj2AA16ListDataProtocol_pvp : $*ListDataProtocol // users: %19, %17 | |
%14 = metatype $@thick TestClass.Type // user: %16 | |
// function_ref TestClass.__allocating_init() | |
%15 = function_ref @$s4demo9TestClassCACycfC : $@convention(method) (@thick TestClass.Type) -> @owned TestClass // user: %16 | |
%16 = apply %15(%14) : $@convention(method) (@thick TestClass.Type) -> @owned TestClass // user: %18 | |
%17 = init_existential_addr %13 : $*ListDataProtocol, $TestClass // user: %18 | |
store %16 to [init] %17 : $*TestClass // id: %18 | |
%19 = open_existential_addr immutable_access %13 : $*ListDataProtocol to $*@opened("1F8DEA44-060A-11EA-A00A-ACDE48001122") ListDataProtocol // users: %21, %21 | |
// function_ref ListDataProtocol.testFunc() | |
%20 = function_ref @$s4demo16ListDataProtocolPAAE8testFuncyyF : $@convention(method) <τ_0_0 where τ_0_0 : ListDataProtocol> (@in_guaranteed τ_0_0) -> () // user: %21 | |
%21 = apply %20<@opened("1F8DEA44-060A-11EA-A00A-ACDE48001122") ListDataProtocol>(%19) : $@convention(method) <τ_0_0 where τ_0_0 : ListDataProtocol> (@in_guaranteed τ_0_0) -> () // type-defs: %19 | |
%22 = integer_literal $Builtin.Int32, 0 // user: %23 | |
%23 = struct $Int32 (%22 : $Builtin.Int32) // user: %24 | |
return %23 : $Int32 // id: %24 | |
} // end sil function 'main' | |
// TestClass.testFunc() | |
sil hidden [ossa] @$s4demo9TestClassC8testFuncyyF : $@convention(method) (@guaranteed TestClass) -> () { | |
// %0 // user: %1 | |
bb0(%0 : @guaranteed $TestClass): | |
debug_value %0 : $TestClass, let, name "self", argno 1 // id: %1 | |
%2 = integer_literal $Builtin.Word, 1 // user: %4 | |
// function_ref _allocateUninitializedArray<A>(_:) | |
%3 = function_ref @$ss27_allocateUninitializedArrayySayxG_BptBwlF : $@convention(thin) <τ_0_0> (Builtin.Word) -> (@owned Array<τ_0_0>, Builtin.RawPointer) // user: %4 | |
%4 = apply %3<Any>(%2) : $@convention(thin) <τ_0_0> (Builtin.Word) -> (@owned Array<τ_0_0>, Builtin.RawPointer) // user: %5 | |
(%5, %6) = destructure_tuple %4 : $(Array<Any>, Builtin.RawPointer) // users: %24, %21, %7 | |
%7 = pointer_to_address %6 : $Builtin.RawPointer to [strict] $*Any // user: %14 | |
%8 = string_literal utf8 "ahaha" // user: %13 | |
%9 = integer_literal $Builtin.Word, 5 // user: %13 | |
%10 = integer_literal $Builtin.Int1, -1 // user: %13 | |
%11 = metatype $@thin String.Type // user: %13 | |
// function_ref String.init(_builtinStringLiteral:utf8CodeUnitCount:isASCII:) | |
%12 = function_ref @$sSS21_builtinStringLiteral17utf8CodeUnitCount7isASCIISSBp_BwBi1_tcfC : $@convention(method) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, @thin String.Type) -> @owned String // user: %13 | |
%13 = apply %12(%8, %9, %10, %11) : $@convention(method) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, @thin String.Type) -> @owned String // user: %15 | |
%14 = init_existential_addr %7 : $*Any, $String // user: %15 | |
store %13 to [init] %14 : $*String // id: %15 | |
// function_ref default argument 1 of print(_:separator:terminator:) | |
%16 = function_ref @$ss5print_9separator10terminatoryypd_S2StFfA0_ : $@convention(thin) () -> @owned String // user: %17 | |
%17 = apply %16() : $@convention(thin) () -> @owned String // users: %23, %21 | |
// function_ref default argument 2 of print(_:separator:terminator:) | |
%18 = function_ref @$ss5print_9separator10terminatoryypd_S2StFfA1_ : $@convention(thin) () -> @owned String // user: %19 | |
%19 = apply %18() : $@convention(thin) () -> @owned String // users: %22, %21 | |
// function_ref print(_:separator:terminator:) | |
%20 = function_ref @$ss5print_9separator10terminatoryypd_S2StF : $@convention(thin) (@guaranteed Array<Any>, @guaranteed String, @guaranteed String) -> () // user: %21 | |
%21 = apply %20(%5, %17, %19) : $@convention(thin) (@guaranteed Array<Any>, @guaranteed String, @guaranteed String) -> () | |
destroy_value %19 : $String // id: %22 | |
destroy_value %17 : $String // id: %23 | |
destroy_value %5 : $Array<Any> // id: %24 | |
%25 = tuple () // user: %26 | |
return %25 : $() // id: %26 | |
} // end sil function '$s4demo9TestClassC8testFuncyyF' | |
// _allocateUninitializedArray<A>(_:) | |
sil [serialized] [always_inline] [_semantics "array.uninitialized_intrinsic"] @$ss27_allocateUninitializedArrayySayxG_BptBwlF : $@convention(thin) <τ_0_0> (Builtin.Word) -> (@owned Array<τ_0_0>, Builtin.RawPointer) | |
// String.init(_builtinStringLiteral:utf8CodeUnitCount:isASCII:) | |
sil [serialized] [always_inline] [readonly] [_semantics "string.makeUTF8"] @$sSS21_builtinStringLiteral17utf8CodeUnitCount7isASCIISSBp_BwBi1_tcfC : $@convention(method) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, @thin String.Type) -> @owned String | |
// default argument 1 of print(_:separator:terminator:) | |
sil hidden_external [serialized] @$ss5print_9separator10terminatoryypd_S2StFfA0_ : $@convention(thin) () -> @owned String | |
// default argument 2 of print(_:separator:terminator:) | |
sil hidden_external [serialized] @$ss5print_9separator10terminatoryypd_S2StFfA1_ : $@convention(thin) () -> @owned String | |
// print(_:separator:terminator:) | |
sil @$ss5print_9separator10terminatoryypd_S2StF : $@convention(thin) (@guaranteed Array<Any>, @guaranteed String, @guaranteed String) -> () | |
// TestClass.__allocating_init() | |
sil hidden [ossa] @$s4demo9TestClassCACycfC : $@convention(method) (@thick TestClass.Type) -> @owned TestClass { | |
bb0(%0 : $@thick TestClass.Type): | |
%1 = alloc_ref $TestClass // user: %3 | |
// function_ref TestClass.init() | |
%2 = function_ref @$s4demo9TestClassCACycfc : $@convention(method) (@owned TestClass) -> @owned TestClass // user: %3 | |
%3 = apply %2(%1) : $@convention(method) (@owned TestClass) -> @owned TestClass // user: %4 | |
return %3 : $TestClass // id: %4 | |
} // end sil function '$s4demo9TestClassCACycfC' | |
// TestClass.init() | |
sil hidden [ossa] @$s4demo9TestClassCACycfc : $@convention(method) (@owned TestClass) -> @owned TestClass { | |
// %0 // users: %2, %1 | |
bb0(%0 : @owned $TestClass): | |
debug_value %0 : $TestClass, let, name "self", argno 1 // id: %1 | |
%2 = mark_uninitialized [rootself] %0 : $TestClass // users: %4, %3 | |
%3 = copy_value %2 : $TestClass // user: %5 | |
destroy_value %2 : $TestClass // id: %4 | |
return %3 : $TestClass // id: %5 | |
} // end sil function '$s4demo9TestClassCACycfc' | |
// TestClass.deinit | |
sil hidden [ossa] @$s4demo9TestClassCfd : $@convention(method) (@guaranteed TestClass) -> @owned Builtin.NativeObject { | |
// %0 // users: %2, %1 | |
bb0(%0 : @guaranteed $TestClass): | |
debug_value %0 : $TestClass, let, name "self", argno 1 // id: %1 | |
%2 = unchecked_ref_cast %0 : $TestClass to $Builtin.NativeObject // user: %3 | |
%3 = unchecked_ownership_conversion %2 : $Builtin.NativeObject, @guaranteed to @owned // user: %4 | |
return %3 : $Builtin.NativeObject // id: %4 | |
} // end sil function '$s4demo9TestClassCfd' | |
// TestClass.__deallocating_deinit | |
sil hidden [ossa] @$s4demo9TestClassCfD : $@convention(method) (@owned TestClass) -> () { | |
// %0 // users: %6, %3, %1 | |
bb0(%0 : @owned $TestClass): | |
debug_value %0 : $TestClass, let, name "self", argno 1 // id: %1 | |
// function_ref TestClass.deinit | |
%2 = function_ref @$s4demo9TestClassCfd : $@convention(method) (@guaranteed TestClass) -> @owned Builtin.NativeObject // user: %4 | |
%3 = begin_borrow %0 : $TestClass // users: %5, %4 | |
%4 = apply %2(%3) : $@convention(method) (@guaranteed TestClass) -> @owned Builtin.NativeObject // user: %7 | |
end_borrow %3 : $TestClass // id: %5 | |
end_lifetime %0 : $TestClass // id: %6 | |
%7 = unchecked_ref_cast %4 : $Builtin.NativeObject to $TestClass // user: %8 | |
dealloc_ref %7 : $TestClass // id: %8 | |
%9 = tuple () // user: %10 | |
return %9 : $() // id: %10 | |
} // end sil function '$s4demo9TestClassCfD' | |
// ListDataProtocol.testFunc() | |
sil hidden [ossa] @$s4demo16ListDataProtocolPAAE8testFuncyyF : $@convention(method) <Self where Self : ListDataProtocol> (@in_guaranteed Self) -> () { | |
// %0 // user: %1 | |
bb0(%0 : $*Self): | |
debug_value_addr %0 : $*Self, let, name "self", argno 1 // id: %1 | |
%2 = integer_literal $Builtin.Word, 1 // user: %4 | |
// function_ref _allocateUninitializedArray<A>(_:) | |
%3 = function_ref @$ss27_allocateUninitializedArrayySayxG_BptBwlF : $@convention(thin) <τ_0_0> (Builtin.Word) -> (@owned Array<τ_0_0>, Builtin.RawPointer) // user: %4 | |
%4 = apply %3<Any>(%2) : $@convention(thin) <τ_0_0> (Builtin.Word) -> (@owned Array<τ_0_0>, Builtin.RawPointer) // user: %5 | |
(%5, %6) = destructure_tuple %4 : $(Array<Any>, Builtin.RawPointer) // users: %24, %21, %7 | |
%7 = pointer_to_address %6 : $Builtin.RawPointer to [strict] $*Any // user: %14 | |
%8 = string_literal utf8 "bhbhb" // user: %13 | |
%9 = integer_literal $Builtin.Word, 5 // user: %13 | |
%10 = integer_literal $Builtin.Int1, -1 // user: %13 | |
%11 = metatype $@thin String.Type // user: %13 | |
// function_ref String.init(_builtinStringLiteral:utf8CodeUnitCount:isASCII:) | |
%12 = function_ref @$sSS21_builtinStringLiteral17utf8CodeUnitCount7isASCIISSBp_BwBi1_tcfC : $@convention(method) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, @thin String.Type) -> @owned String // user: %13 | |
%13 = apply %12(%8, %9, %10, %11) : $@convention(method) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, @thin String.Type) -> @owned String // user: %15 | |
%14 = init_existential_addr %7 : $*Any, $String // user: %15 | |
store %13 to [init] %14 : $*String // id: %15 | |
// function_ref default argument 1 of print(_:separator:terminator:) | |
%16 = function_ref @$ss5print_9separator10terminatoryypd_S2StFfA0_ : $@convention(thin) () -> @owned String // user: %17 | |
%17 = apply %16() : $@convention(thin) () -> @owned String // users: %23, %21 | |
// function_ref default argument 2 of print(_:separator:terminator:) | |
%18 = function_ref @$ss5print_9separator10terminatoryypd_S2StFfA1_ : $@convention(thin) () -> @owned String // user: %19 | |
%19 = apply %18() : $@convention(thin) () -> @owned String // users: %22, %21 | |
// function_ref print(_:separator:terminator:) | |
%20 = function_ref @$ss5print_9separator10terminatoryypd_S2StF : $@convention(thin) (@guaranteed Array<Any>, @guaranteed String, @guaranteed String) -> () // user: %21 | |
%21 = apply %20(%5, %17, %19) : $@convention(thin) (@guaranteed Array<Any>, @guaranteed String, @guaranteed String) -> () | |
destroy_value %19 : $String // id: %22 | |
destroy_value %17 : $String // id: %23 | |
destroy_value %5 : $Array<Any> // id: %24 | |
%25 = tuple () // user: %26 | |
return %25 : $() // id: %26 | |
} // end sil function '$s4demo16ListDataProtocolPAAE8testFuncyyF' | |
sil_vtable TestClass { | |
#TestClass.testFunc!1: (TestClass) -> () -> () : @$s4demo9TestClassC8testFuncyyF // TestClass.testFunc() | |
#TestClass.init!allocator.1: (TestClass.Type) -> () -> TestClass : @$s4demo9TestClassCACycfC // TestClass.__allocating_init() | |
#TestClass.deinit!deallocator.1: @$s4demo9TestClassCfD // TestClass.__deallocating_deinit | |
} | |
sil_witness_table hidden TestClass: ListDataProtocol module demo { | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment