zoukankan      html  css  js  c++  java
  • swift VTables

    VTables

    https://github.com/apple/swift/blob/master/docs/SIL.rst#vtables

    decl ::= sil-vtable

    sil-vtable ::= 'sil_vtable' identifier '{' sil-vtable-entry* '}'

    sil-vtable-entry ::= sil-decl-ref ':' sil-linkage? sil-function-name

    SIL represents dynamic dispatch for class methods using the class_method, super_method, objc_method, and objc_super_method instructions.

    The potential destinations for class_method and super_method are tracked in sil_vtable declarations for every class type. The declaration contains a mapping from every method of the class (including those inherited from its base class) to the SIL function that implements the method for that class:

    class A {

      func foo()

      func bar()

      func bas()

    }

    sil @A_foo : $@convention(thin) (@owned A) -> ()

    sil @A_bar : $@convention(thin) (@owned A) -> ()

    sil @A_bas : $@convention(thin) (@owned A) -> ()

    sil_vtable A {

      #A.foo!1: @A_foo

      #A.bar!1: @A_bar

      #A.bas!1: @A_bas

    }

    class B : A {

      func bar()

    }

    sil @B_bar : $@convention(thin) (@owned B) -> ()

    sil_vtable B {

      #A.foo!1: @A_foo

      #A.bar!1: @B_bar

      #A.bas!1: @A_bas

    }

    class C : B {

      func bas()

    }

    sil @C_bas : $@convention(thin) (@owned C) -> ()

    sil_vtable C {

      #A.foo!1: @A_foo

      #A.bar!1: @B_bar

      #A.bas!1: @C_bas

    }

    Note that the declaration reference in the vtable is to the least-derived method visible through that class (in the example above, B's vtable references A.bar and not B.bar, and C's vtable references A.bas and not C.bas). The Swift AST maintains override relationships between declarations that can be used to look up overridden methods in the SIL vtable for a derived class (such as C.bas in C's vtable).

    In case the SIL function is a thunk, the function name is preceded with the linkage of the original implementing function.

  • 相关阅读:
    ERP渠道管理添加验证和查询(二十二)
    SqlServer导入Excel数据
    WebApi帮助类
    SqlServer 递归查询树
    SqlServer查看表、存储过程、耗时查询、当前进程、开销较大的语句
    Excel上传找到错误数据类型
    索引Hint提示(INDEX Hint)
    SqlServer批量Sql一个表的数据导入到另一个数据
    SqlServer 游标
    JAVA运算符
  • 原文地址:https://www.cnblogs.com/feng9exe/p/9682279.html
Copyright © 2011-2022 走看看