Documentation

Lean.Compiler.ExternAttr

Instances For
    • @[extern] encoding: .entries = [adhoc `all]
    • @[extern "level_hash"] encoding: .entries = [standard `all "levelHash"]
    • @[extern cpp "lean::string_size" llvm "lean_str_size"] encoding: .entries = [standard `cpp "lean::string_size", standard `llvm "leanStrSize"]
    • @[extern cpp inline "#1 + #2"] encoding: .entries = [inline `cpp "#1 + #2"]
    • @[extern cpp "foo" llvm adhoc] encoding: .entries = [standard `cpp "foo", adhoc `llvm]
    Instances For
      @[extern lean_add_extern]
      opaque Lean.addExtern (declName : Name) (externAttrData : ExternAttrData) :
      Equations
        Instances For
          def Lean.expandExternPatternAux (args : List String) :
          Nat(pattern : String) → (it : pattern.Pos) → StringString
          Equations
            Instances For
              Equations
                Instances For
                  Equations
                    Instances For
                      Equations
                        Instances For
                          Equations
                            Instances For
                              Equations
                                Instances For
                                  def Lean.isExtern (env : Environment) (fn : Name) :
                                  Equations
                                    Instances For
                                      def Lean.isExternC (env : Environment) (fn : Name) :

                                      We say a Lean function marked as [extern "<c_fn_name>"] is for all backends, and it is implemented using extern "C". Thus, there is no name mangling.

                                      Equations
                                        Instances For
                                          def Lean.getExternNameFor (env : Environment) (backend fn : Name) :
                                          Equations
                                            Instances For