class Bindgen::Parser::Method

Overview

Describes a method as found by the clang tool.

Defined in:

bindgen/parser/method.cr

Constructors

Instance Method Summary

Constructor Detail

def self.build(name, return_type : Parser::Type, arguments : Array(Parser::Argument), class_name : String, type = Parser::Method::Type::MemberMethod, crystal_name = nil) : self #

Utility method to easily build a Method using a more Crystal-style syntax.


[View source]
def self.new(name : String, className : String, returnType : Bindgen::Parser::Type, arguments : Array(Bindgen::Parser::Argument), firstDefaultArgument : Int32 | Nil = nil, access : Bindgen::Parser::AccessSpecifier = AccessSpecifier::Public, type : Bindgen::Parser::Method::Type = Type::MemberMethod, isConst : Bool = false, isVirtual : Bool = false, isPure : Bool = false, isExternC : Bool = false, origin : Method | Nil = nil, crystal_name : Nil | String = nil) #

[View source]
def self.new(__temp_217 : JSON::PullParser) #

Instance Method Detail

def ==(other : self) #
Description copied from class Reference

Returns true if this reference is the same as other. Invokes same?.


def access : AccessSpecifier #

def access=(_access : AccessSpecifier) #

def any_constructor? : Bool #

[View source]
def arguments : Array(Argument) #

def arguments=(_arguments : Array(Argument)) #

def binding_arguments_name #

Mangles the list of argument types into a flat string.


[View source]
def binding_method_name #

Name of the method in C++ and Crystal bindings.


[View source]
def class_name : String #

Name of the class this method is in


[View source]
def className : String #

def className=(_className : String) #

def const? : Bool #

Returns if the method is const-qualified: std::string getName() const;


[View source]
def constructor?(*args, **options) #

[View source]
def constructor?(*args, **options, &) #

[View source]
def copy_constructor?(*args, **options) #

[View source]
def copy_constructor?(*args, **options, &) #

[View source]
def crystal_name(override : String | Nil = nil) : String #

Turns the method name into something canonical to Crystal. If a explicit #crystal_name name is set, it'll be returned without furtehr processing. If override is not nil, it'll be used over #name. Otherwise, the generated name will be based on #name.


[View source]
def crystal_name=(crystal_name : String | Nil) #

Forces the wrapper to use the specified name


[View source]
def destructor?(*args, **options) #

[View source]
def destructor?(*args, **options, &) #

[View source]
def equals_except_const?(other : Method) : Bool #

Checks if this method is equal to other, except for the const-qualification.


[View source]
def equals_virtually?(other : Method) : Bool #

Checks if this method is equl to other, as is suitable to determine if they're the same for C++ virtual methods between parent- and sub-classes.


[View source]
def explicit_crystal_name? : Bool #

Checks if the #crystal_name was set explicitly (true), or will be generated (false).


[View source]
def extern_c? : Bool #

Does this function use the C ABI?


[View source]
def filtered?(db : TypeDatabase) : Bool #

Is this method filtered out?

TODO Can we move this into Processor::FilterMethods?


[View source]
def first_default_argument : Int32? #

Returns the index of the first argument with a default value, if any.


[View source]
def firstDefaultArgument : Union(Int32, Nil) #

def firstDefaultArgument=(_firstDefaultArgument : Union(Int32, Nil)) #

def function_pointer(name : String | Nil = nil) : String #

Generates a C++ function pointer type matching this methods prototype.


[View source]
def getter?(name = @name) #

Try to deduce if this is a getter.


[View source]
def has_move_semantics? : Bool #

Does this method have move semantics anywhere?


[View source]
def has_result? #

Returns if this method returns something, or not


[View source]
def hash(hasher) #
Description copied from class Reference

See Object#hash(hasher)


def isConst : Bool #

def isConst=(_isConst : Bool) #

def isExternC : Bool #

def isExternC=(_isExternC : Bool) #

def isPure : Bool #

def isPure=(_isPure : Bool) #

def isVirtual : Bool #

def isVirtual=(_isVirtual : Bool) #

def mangled_name #

Mangled name for the C++ wrapper method name


[View source]
def member_method?(*args, **options) #

[View source]
def member_method?(*args, **options, &) #

[View source]
def merge(other : Method) : Method #

Merges this and the other method with regards to default values and type deductions. Expects that this and other methods point at the same method, but in different classes in the inheritance chain.

Keeps the class name, access, constness, virtuality and type of this method.


[View source]
def name : String #

def name=(_name : String) #

def needs_instance? #

Returns if this method needs a class instance to be called.


[View source]
def operator?(*args, **options) #

[View source]
def operator?(*args, **options, &) #

[View source]
def origin : Method | Nil #

The method this method is based on. Used by #variants to indicate the methods origin when splitting occurs.


[View source]
def private?(*args, **options) #

[View source]
def private?(*args, **options, &) #

[View source]
def protected?(*args, **options) #

[View source]
def protected?(*args, **options, &) #

[View source]
def public?(*args, **options) #

[View source]
def public?(*args, **options, &) #

[View source]
def pure? : Bool #

Is this a pure virtual function?


[View source]
def question_getter?(name = @name) #

Try to deduce if this is a getter for a boolean value.


[View source]
def return_type : Parser::Type #

The return type of this method


[View source]
def returnType : Parser::Type #

def returnType=(_returnType : Parser::Type) #

def setter?(name = @name) #

Try to deduce if this is a setter.


[View source]
def signal?(*args, **options) #

[View source]
def signal?(*args, **options, &) #

[View source]
def static_method?(*args, **options) #

[View source]
def static_method?(*args, **options, &) #

[View source]
def to_json(json : JSON::Builder) #

def type : Method::Type #

def type=(_type : Method::Type) #

def variadic? : Bool #

Does this function take a variable amount of arguments?


[View source]
def variants(&) #

Yields all variants of this method, going through an increasing level of default arguments. It will respect exposed default-values.

A C++ method like int foo(int a, int b = 1, std::string c = "foo") would yield two methods like:

  • int foo(int a, int b, std::string c)
  • int foo(int a, int b = 1)

Note that only built-in types (These are: Integers, Floats and Booleans) support an exposed default value. For other types (Like std::string in the example), no default value will be set.

Also see #find_variant_splits for the algorithm.


[View source]
def variants : Array(Method) #

Non-yielding version of #variants.


[View source]
def virtual? : Bool #

Is this a virtual function?


[View source]