zoukankan      html  css  js  c++  java
  • swift的调用约定

    swift的静态绑定

    Swift Calling Convention @convention(swift)

     func foo(_ x:Int, y:Int)

    sil @foo : $(x:Int, y:Int) -> () {

    entry(%x : $Int, %y : $Int):

      ...

    }

    func bar(_ x:Int, y:(Int, Int))

    sil @bar : $(x:Int, y:(Int, Int)) -> () {

    entry(%x : $Int, %y0 : $Int, %y1 : $Int):

      ...

    }

    func call_foo_and_bar() {

      foo(1, 2)

      bar(4, (5, 6))

    }

    sil @call_foo_and_bar : $() -> () {

    entry:

      ...

      %foo = function_ref @foo : $(x:Int, y:Int) -> ()

      %foo_result = apply %foo(%1, %2) : $(x:Int, y:Int) -> ()

      ...

      %bar = function_ref @bar : $(x:Int, y:(Int, Int)) -> ()

      %bar_result = apply %bar(%4, %5, %6) : $(x:Int, y:(Int, Int)) -> ()

    }

    Swift Method Calling Convention @convention(method)

    The method calling convention is currently identical to the freestanding function convention. Methods are considered to be curried functions, taking the "self" argument as their outer argument clause, and the method arguments as the inner argument clause(s). When uncurried, the "self" argument is thus passed last:

    struct Foo {

      func method(_ x:Int) -> Int {}

    }

    sil @Foo_method_1 : $((x : Int), @inout Foo) -> Int { ... }

    //例子

    class NSObjectBase: NSObject {

        func Msg_Second(str:String){}

    }

    // NSObjectBase.Msg_Second(str:)

    sil hidden @NSObjectBase.NSObjectBase.Msg_Second(str: Swift.String) -> () : $@convention(method) (@guaranteed String, @guaranteed NSObjectBase) -> ()

    sil_vtable NSObjectBase {

      #NSObjectBase.Msg_Second!1: (NSObjectBase) -> (String) -> () : @NSObjectBase.NSObjectBase.Msg_Second(str: Swift.String) -> () // NSObjectBase.Msg_Second(str:)

    }

    Objective-C Calling Convention @convention(objc_method)

    https://github.com/apple/swift/blob/master/docs/SIL.rst#objective-c-calling-convention-convention-objc-method

  • 相关阅读:
    spring boot banner设置关闭以及关闭特定的自动配置
    spring boot 初始及快速搭建
    spring scheduling 计划任务
    idea database 导入实体带注解
    idea mapper下的方法找不到 Invalid bound statement (not found)
    spring jwt token 认证
    spring event 事件
    FrontEnd-Basis-6th
    FrontEnd-Basis-5th
    FrontEnd-Basis-4th
  • 原文地址:https://www.cnblogs.com/feng9exe/p/10601596.html
Copyright © 2011-2022 走看看