class Bindgen::Processor::ExternC

Overview

Checks if a method require a C/C++ wrapper. If not, marks the method to bind directly to the target method instead of writing a "trampoline" wrapper in C++.

A method can be bound directly if all of these are true:

  1. It uses the C ABI (extern "C")
  2. No argument uses a to_cpp converter
  3. The return type doesn't use a from_cpp converter

Additionally, these rules must be met:

  1. No calls for CrystalBinding nor Cpp are set
  2. Graph::Method::EXPLICIT_BIND_TAG is not already set

If any of this is false, the method is left alone.

Defined in:

bindgen/processor/extern_c.cr

Constant Summary

PLATFORM = Graph::Platform::Crystal

Class Method Summary

Instance Method Summary

Instance methods inherited from class Bindgen::Processor::Base

process(graph : Graph::Container, doc : Parser::Document) process

Constructor methods inherited from class Bindgen::Processor::Base

new(config : Configuration, db : TypeDatabase) new

Instance methods inherited from module Bindgen::Graph::Visitor

visit_alias(alias_name) visit_alias, visit_children(container : Container) visit_children, visit_class(klass) visit_class, visit_constant(constant) visit_constant, visit_enum(enumeration) visit_enum, visit_library(library) visit_library, visit_method(method) visit_method, visit_namespace(ns) visit_namespace, visit_node(node : Node) visit_node, visit_node?(node : Node) visit_node?, visit_platform_specific(specific) visit_platform_specific, visit_struct(structure) visit_struct, visit_union(structure) visit_union

Class Method Detail

def self.logger #

Checks if a method require a C/C++ wrapper. If not, marks the method to bind directly to the target method instead of writing a "trampoline" wrapper in C++.

A method can be bound directly if all of these are true:

  1. It uses the C ABI (extern "C")
  2. No argument uses a to_cpp converter
  3. The return type doesn't use a from_cpp converter

Additionally, these rules must be met:

  1. No calls for CrystalBinding nor Cpp are set
  2. Graph::Method::EXPLICIT_BIND_TAG is not already set

If any of this is false, the method is left alone.


Instance Method Detail

def logger #

Checks if a method require a C/C++ wrapper. If not, marks the method to bind directly to the target method instead of writing a "trampoline" wrapper in C++.

A method can be bound directly if all of these are true:

  1. It uses the C ABI (extern "C")
  2. No argument uses a to_cpp converter
  3. The return type doesn't use a from_cpp converter

Additionally, these rules must be met:

  1. No calls for CrystalBinding nor Cpp are set
  2. Graph::Method::EXPLICIT_BIND_TAG is not already set

If any of this is false, the method is left alone.


def visit_method(method) #
Description copied from module Bindgen::Graph::Visitor

Visits a Graph::Method.


[View source]
def visit_platform_specific(specific) #
Description copied from module Bindgen::Graph::Visitor

Visits a Graph::PlatformSpecific.


[View source]