class
Bindgen::Parser::Method
- Bindgen::Parser::Method
- Reference
- Object
Overview
Describes a method as found by the clang tool.
Included Modules
- JSON::Serializable
Defined in:
bindgen/parser/method.crbindgen/parser/method/signature.cr
Constant Summary
-
Log =
::Log.for(self) -
RESERVED_NAMES =
["initialize", "finalize"] of ::String -
Method names Crystal reserves, which a C++ method of that name gets prefixed with
cpp_:QHeaderView::initializeis#cpp_initialize.
Constructors
-
.build(name, return_type : Parser::Type, arguments : Array(Parser::Argument), class_name : String, type = Parser::Method::Type::MemberMethod, access = AccessSpecifier::Public, crystal_name = nil) : self
Utility method to easily build a
Methodusing a more Crystal-style syntax. -
.from_signature(signature : String, class_name : String) : Method
Parses a C++ member method declaration, as written in a header, into a
Methodof the class class_name, for thedeclare_methods:type rule:QMenu *menu() const,static Foo *make(int count = 1),void setMenu(QMenu *menu). - .new(name : String, class_name : String, return_type : Bindgen::Parser::Type, arguments : Array(Bindgen::Parser::Argument), first_default_argument : Int32 | Nil = nil, access : Bindgen::Parser::AccessSpecifier = AccessSpecifier::Public, type : Bindgen::Parser::Method::Type = Type::MemberMethod, const : Bool = false, virtual : Bool = false, pure : Bool = false, final : Bool = false, extern_c : Bool = false, builtin : Bool = false, origin : Nil | Bindgen::Parser::Method = nil, crystal_name : Nil | String = nil, binding_name : Nil | String = nil, doc : Nil | String = nil, deprecated : Bool = false, free_function : Bool = false)
- .new(pull : JSON::PullParser)
Instance Method Summary
-
#==(other : self)
Returns
trueif this reference is the same as other. -
#access : AccessSpecifier
Visibility of the method.
- #aggregate_constructor?(*args, **options)
- #aggregate_constructor?(*args, **options, &)
- #any_constructor?(*args, **options)
- #any_constructor?(*args, **options, &)
-
#any_default_constructor? : Bool
Is this a constructor that can take no arguments?
-
#arguments : Array(Argument)
Arguments of the method.
-
#arguments=(arguments : Array(Argument))
Arguments of the method.
-
#binding_method_name
Name of the method in C++ and Crystal bindings.
-
#binding_name=(binding_name : String | Nil)
Forces the bindings to use the specified name.
-
#binding_operator_name
Name of the unary operator method in C++ and Crystal bindings.
-
#builtin? : Bool
Is this a method implicitly generated by C++?
-
#class_name : String
Fully qualified name of the class in which the method is defined.
-
#const? : Bool
Returns if the method is const-qualified:
std::string getName() const; - #constructor?(*args, **options)
- #constructor?(*args, **options, &)
- #conversion_operator?(*args, **options)
- #conversion_operator?(*args, **options, &)
- #copy_constructor?(*args, **options)
- #copy_constructor?(*args, **options, &)
-
#crystal_name(override : String | Nil = nil) : String
Turns the method name into something canonical to Crystal.
-
#crystal_name=(crystal_name : String | Nil)
Forces the Crystal wrapper to use the specified name.
-
#deprecated? : Bool
Is this method declared
[[deprecated]]? Removed by thefilter_methodsprocessor ifignore_deprecatedis configured. - #destructor?(*args, **options)
- #destructor?(*args, **options, &)
-
#doc : String | Nil
Documentation comment from the C++ source, without comment markers.
-
#equals_except_const?(other : Method) : Bool
Checks if this method is equal to other, except for the const-qualification.
-
#equals_virtually?(other : Method) : Bool
Checks if this method is equal to other, as is suitable to determine if they're the same for C++ virtual methods between parent- and sub-classes.
-
#explicit_crystal_name? : Bool
Checks if the
#crystal_namewas set explicitly (true), or will be generated (false). -
#extern_c? : Bool
Does this function use the C ABI?
-
#filtered?(db : TypeDatabase) : Bool
Is this method filtered out?
-
#final? : Bool
Is this a
finalvirtual function, which can't be overridden? -
#first_default_argument : Int32 | Nil
The index of the first argument with a default value, if any.
-
#fix_post_succ_or_pred? : Method | Nil
Checks if this method is a post-increment or post-decrement method that takes a placeholder
intargument. -
#free_function? : Bool
Is this a free function of
member_functions, likeqHash, bound as a member method of the class of its first argument, which isself? The C++ glue calls it with*_self_first. -
#function_pointer(name : String | Nil = nil) : String
Generates a C++ function pointer type matching this methods prototype.
-
#getter?(name = @name)
Try to deduce if this is a getter.
-
#has_move_semantics? : Bool
Does this method have move semantics anywhere?
-
#has_result?
Returns if this method returns something, or not
-
#hash(hasher)
See
Object#hash(hasher) - #macro?(*args, **options)
- #macro?(*args, **options, &)
-
#mangled_name
Mangled name for the C++ wrapper method name
- #member_getter?(*args, **options)
- #member_getter?(*args, **options, &)
- #member_method?(*args, **options)
- #member_method?(*args, **options, &)
- #member_setter?(*args, **options)
- #member_setter?(*args, **options, &)
-
#merge(other : Method) : Method
Merges this and the other method with regards to default values and type deductions.
-
#merge_args!(other : Method)
Unify arguments of this and another method.
-
#name : String
Name of the method.
-
#needs_instance?
Returns if this method needs a class instance to be called.
- #operator?(*args, **options)
- #operator?(*args, **options, &)
-
#origin : Method | Nil
The method this method is based on.
-
#out_arguments(db : TypeDatabase) : Array(Int32)
The indices of the out arguments: the non-const references and pointers to converted value types (
TypeDatabase#converted_out_argument?), likeQString &orQString *, and in a method having one, those to built-in types and enums too (TypeDatabase#builtin_out_argument?), likeint &. - #private?(*args, **options)
- #private?(*args, **options, &)
- #protected?(*args, **options)
- #protected?(*args, **options, &)
- #public?(*args, **options)
- #public?(*args, **options, &)
-
#pure? : Bool
Is this a pure virtual function?
-
#qualified_name : String
Fully qualified name of the method:
class_name::name. -
#question_getter?(name = @name)
Try to deduce if this is a getter for a boolean value.
-
#return_type : Parser::Type
The return type of this method
-
#return_type=(return_type : Bindgen::Parser::Type)
Replaces the return type, see the
nilable:type rule. -
#same_crystal_signature?(other : Method) : Bool
Does other have the same Crystal name and argument types, like
try_locknext totryLock? Both would define the same method. -
#setter?(name = @name)
Try to deduce if this is a setter.
- #signal?(*args, **options)
- #signal?(*args, **options, &)
-
#signature : String
C++ signature of the method, naming its overload:
name(type, type), withconstappended for a const method. - #static?(*args, **options)
- #static?(*args, **options, &)
- #static_getter?(*args, **options)
- #static_getter?(*args, **options, &)
- #static_method?(*args, **options)
- #static_method?(*args, **options, &)
- #static_setter?(*args, **options)
- #static_setter?(*args, **options, &)
-
#substitute_type(name : String, with type : Type) : Method
Substitutes all uses of name on the argument and return types of this method with the given type.
-
#substitute_type(replacements : Hash(String, Parser::Type)) : Method
Performs type substitution on the argument and return types of this method using the given replacements.
-
#superclass_copy : Method
Returns a non-virtual copy of this method suitable for use in superclass wrapper structs.
-
#supported_operator? : Bool
Is this operator one bindgen can name, like
operator+? Notoperator->oroperator,, whichfilter_methodsdrops. -
#takes_out_arguments? : Bool
Can this method have out arguments? A constructor usually keeps the pointer it is given, like
QTextStream(QString *), and so does the setter of a pointer member, a signal passes its arguments to the block, and an operator returning a tuple would be odd: these keep dropping the non-const references and pointers to converted types. -
#takes_storage_references? : Bool
Can this method take a pointer to the structure a wrapper hosts, see
TypeDatabase#storage_reference?? Not a virtual method, whose Crystal override would get a copy, nor a signal or a constructor. -
#type : Method::Type
Type of the method.
-
#variadic? : Bool
Does this function take a variable amount of arguments?
-
#variants(&)
Yields all variants of this method, going through an increasing level of default arguments.
-
#variants : Array(Method)
Non-yielding version of
#variants. -
#virtual=(virtual : Bool)
Makes the method non-virtual for the wrappers, so a Crystal subclass can't override it, and the C++ subclass of
Processor::VirtualOverridegets no forwarder for it: theQtprocessor does this to the methodsQ_OBJECTdeclares, whichProcessor::QtMetaObjectoverrides itself. -
#virtual? : Bool
Is this a virtual function?
Constructor Detail
Utility method to easily build a Method using a more Crystal-style
syntax.
Parses a C++ member method declaration, as written in a header, into a
Method of the class class_name, for the declare_methods: type
rule: QMenu *menu() const, static Foo *make(int count = 1),
void setMenu(QMenu *menu). Every argument is named, like in a
declaration. A default is exposed if it's a literal number, boolean
or nullptr. Raises an ArgumentError for anything else.
Instance Method Detail
Returns true if this reference is the same as other. Invokes same?.
Name of the method in C++ and Crystal bindings. If an explicit
#binding_name name is set, it'll be returned without further
processing.
Name of the unary operator method in C++ and Crystal bindings. Uniquely identifies a C++ operator.
Turns the method name into something canonical to Crystal. If an
explicit #crystal_name name is set, it'll be returned without further
processing. If override is not nil, it'll be used over #name.
Otherwise, the generated name will be based on #name.
Forces the Crystal wrapper to use the specified name.
Is this method declared [[deprecated]]? Removed by the
filter_methods processor if ignore_deprecated is configured.
Checks if this method is equal to other, except for the const-qualification.
Checks if this method is equal to other, as is suitable to determine if they're the same for C++ virtual methods between parent- and sub-classes.
Checks if the #crystal_name was set explicitly (true), or will be
generated (false).
Is this method filtered out?
TODO Can we move this into Processor::FilterMethods?
The index of the first argument with a default value, if any.
Checks if this method is a post-increment or post-decrement method that
takes a placeholder int argument. If true, returns a copy of this
method with the int argument removed.
Is this a free function of member_functions, like qHash, bound as
a member method of the class of its first argument, which is self?
The C++ glue calls it with *_self_ first.
Generates a C++ function pointer type matching this methods prototype.
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.
Unify arguments of this and another method.
Modifies the argument list of this method.
The method this method is based on. Used by #variants to indicate
the methods origin when splitting occurs.
The indices of the out arguments: the non-const references and
pointers to converted value types (TypeDatabase#converted_out_argument?),
like QString & or QString *, and in a method having one, those to
built-in types and enums too (TypeDatabase#builtin_out_argument?),
like int &. The wrapper appends their values to the result: a
reference is an in/out argument, which it keeps, a pointer is out-only,
which it drops. Empty for a method which can't take out arguments, see
#takes_out_arguments?, and for one without a converted out argument,
whose int & stays an Int32*.
An #out_arguments entry of the class decides instead, see
TypeDatabase#out_arguments_rule: true takes every such argument,
false none, and a list of indices those among them. Without one,
with TypeDatabase#builtin_out_arguments? the built-in ones are out
arguments in every method, not only next to a converted one; a
pointer to a byte or character type, or to void, is a buffer then,
not an out argument (TypeDatabase#buffer_argument?).
Fully qualified name of the method: class_name::name. For a function
in the global scope, it's the #name itself.
Replaces the return type, see the nilable: type rule.
Does other have the same Crystal name and argument types, like
try_lock next to tryLock? Both would define the same method.
C++ signature of the method, naming its overload: name(type, type),
with const appended for a const method. The argument types are
written like the parser prints them, const QString &, int *.
TypeDatabase::MethodPattern matches ignore_methods against it.
Substitutes all uses of name on the argument and return types of this method with the given type.
Performs type substitution on the argument and return types of this method using the given replacements.
Returns a non-virtual copy of this method suitable for use in superclass wrapper structs. The bodies of such copies are expected to ignore method overriding.
Is this operator one bindgen can name, like operator+? Not
operator-> or operator,, which filter_methods drops.
Can this method have out arguments? A constructor usually keeps the
pointer it is given, like QTextStream(QString *), and so does the
setter of a pointer member, a signal passes its arguments to the block,
and an operator returning a tuple would be odd: these keep dropping the
non-const references and pointers to converted types.
Can this method take a pointer to the structure a wrapper hosts, see
TypeDatabase#storage_reference?? Not a virtual method, whose Crystal
override would get a copy, nor a signal or a constructor.
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.
Makes the method non-virtual for the wrappers, so a Crystal subclass
can't override it, and the C++ subclass of Processor::VirtualOverride
gets no forwarder for it: the Qt processor does this to the methods
Q_OBJECT declares, which Processor::QtMetaObject overrides itself.