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

  • 相关阅读:
    封装缓动动画函数
    封装动画函数-匀速运动
    实现产品图片的放大镜效果:
    仿淘宝侧边栏滚动案例:
    页面被卷去的头部兼容性解决方案
    简单发送短信倒计时案例
    Echarts 版本的那些坑
    json变量作键名
    媒体查询那些事儿
    mac 强制关闭指定端口
  • 原文地址:https://www.cnblogs.com/feng9exe/p/10601596.html
Copyright © 2011-2022 走看看