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

  • 相关阅读:
    eclipse中的项目的JRE换成JDK
    Eclipse中maven项目的创建和运行
    git 发布命令
    vbox中虚拟ubuntu增加新的虚拟硬盘
    MyServer
    java常用的中间件
    高并发解决方案
    浅谈SpringMVC
    浅谈HIbernate
    javaweb笔记七
  • 原文地址:https://www.cnblogs.com/feng9exe/p/10601596.html
Copyright © 2011-2022 走看看