class Bindgen::Processor::BlockOverloads

Overview

Generates overloads for methods that accept a block argument, and are told apart by it alone. Those methods are ambiguous because Crystal does not permit overloading through different type restrictions on the block; this processor rectifies this by requiring each overload to also specify the types of the block parameters. For example, the following code

def f(& : Int32 ->)
end

def f(& : Bool ->)
end

def f(& : Int32, Bool ->)
end

is transformed into

def f(_type1_ : Int32.class, & : Int32 ->)
end

def f(_type1_ : Bool.class, & : Bool ->)
end

def f(_type1_ : Int32.class, _type2_ : Bool.class, & : Int32, Bool ->)
end

The type arguments go before any other arguments, which the overloads share: on_changed(_type1_ : Int32.class, type : ConnectionType, &). Unambiguous methods that accept block arguments are unaffected, and so are overloads differing in the other arguments.

Defined in:

bindgen/processor/block_overloads.cr

Constant Summary

Log = ::Log.for(self)

Generates overloads for methods that accept a block argument, and are told apart by it alone. Those methods are ambiguous because Crystal does not permit overloading through different type restrictions on the block; this processor rectifies this by requiring each overload to also specify the types of the block parameters. For example, the following code

def f(& : Int32 ->)
end

def f(& : Bool ->)
end

def f(& : Int32, Bool ->)
end

is transformed into

def f(_type1_ : Int32.class, & : Int32 ->)
end

def f(_type1_ : Bool.class, & : Bool ->)
end

def f(_type1_ : Int32.class, _type2_ : Bool.class, & : Int32, Bool ->)
end

The type arguments go before any other arguments, which the overloads share: on_changed(_type1_ : Int32.class, type : ConnectionType, &). Unambiguous methods that accept block arguments are unaffected, and so are overloads differing in the other arguments.

PLATFORM = Graph::Platform::Crystal

Instance Method Summary

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

inherited_rules(class_name : String, & : TypeDatabase::TypeConfig -> TypeDatabase::KeepAlive) : TypeDatabase::KeepAlive inherited_rules, process(graph : Graph::Container, doc : Parser::Document) process, unmatched_patterns(klass : Graph::Class, rules : TypeDatabase::KeepAlive) : Array(Regex) unmatched_patterns

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

Instance Method Detail

def visit_class(klass) #
Description copied from module Bindgen::Graph::Visitor

Visits a Graph::Class. The default implementation calls #visit_children to visit all child nodes.


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

Visits a Graph::PlatformSpecific.


[View source]