ExtUtils::XSpp::Node::Function - Node representing a function

- NAME
- DESCRIPTION
- METHODS
  - new
  - resolve_typemaps
  - resolve_exceptions
  - add_exception_handlers
  - print_declaration
  - perl_function_name
  - is_method
  - has_argument_with_length
- ACCESSORS
  - cpp_name
  - perl_name
  - set_perl_name
  - arguments
  - ret_type
  - code
  - set_code
  - cleanup
  - postcall
  - catch
  - aliases
  - set_static
  - package_static
  - class_static
  - ret_typemap
  - set_ret_typemap( typemap )
  - arg_typemap( index )
  - set_arg_typemap( index, typemap )

# NAME

ExtUtils::XSpp::Node::Function - Node representing a function

# DESCRIPTION

An ExtUtils::XSpp::Node subclass representing a single function declaration such as

      int foo();

More importantly, ExtUtils::XSpp::Node::Method inherits from this class, so all in here equally applies to method nodes.

# METHODS

## new

Creates a new `ExtUtils::XSpp::Node::Function`.

Named parameters: `cpp_name` indicating the C++ name of the function, `perl_name` indicating the Perl name of the function (defaults to the same as `cpp_name`), `arguments` can be a reference to an array of `ExtUtils::XSpp::Node::Argument` objects and finally `ret_type` indicates the (C++) return type of the function.

Additionally, there are several optional decorators for a function declaration (see ExtUtils::XSpp for a list). These can be passed to the constructor as `code`, `cleanup`, `postcall`, and `catch`. `catch` is special in that it must be a reference to an array of class names.

## resolve_typemaps

Fetches the ExtUtils::XSpp::Typemap object for the return type and the arguments from the typemap registry and stores a reference to those objects.

## resolve_exceptions

Fetches the ExtUtils::XSpp::Exception object for the `%catch` directives associated with this function.

## add_exception_handlers

Adds a list of exception names to the list of exception handlers. This is mainly called by a class' `add_methods` method. If the function is hard-wired to have no exception handlers, any extra handlers from the class are ignored.

## print_declaration

Returns a string with a C++ method declaration for the node.

## perl_function_name

Returns the name of the Perl function to generate.

## is_method

Returns whether the object at hand is a method. Hard-wired to be false for `ExtUtils::XSpp::Node::Function` object, but overridden in the ExtUtils::XSpp::Node::Method sub-class.

## has_argument_with_length

Returns true if the function has any argument that uses the XS length feature.

# ACCESSORS

## cpp_name

Returns the C++ name of the function.

## perl_name

Returns the Perl name of the function (defaults to same as C++).

## set_perl_name

Sets the Perl name of the function.

## arguments

Returns the internal array reference of ExtUtils::XSpp::Node::Argument objects that represent the function arguments.

## ret_type

Returns the C++ return type.

## code

Returns the `%code` decorator if any.

## set_code

Sets the implementation for the method call (equivalent to using `%code`); takes the code as an array reference containing the lines.

## cleanup

Returns the `%cleanup` decorator if any.

## postcall

Returns the `%postcall` decorator if any.

## catch

Returns the set of exception types that were associated with the function via `%catch`. (array reference)

## aliases

Returns a hashref of `name => position` function name aliases (see %alias and perlxs ALIAS keyword). Does not include the main function name.

## set_static

Sets the `static`-ness attribute of the function. Can be either undef (i.e. not static), `"package_static"`, or `"class_static"`.

## package_static

Returns whether the function is package static. A package static function can be invoked as:

        My::Package::Function( ... );

## class_static

Returns whether the function is class static. A class static function can be invoked as:

        My::Package->Function( ... );

## ret_typemap

Returns the typemap for the return value of the function.

## set_ret_typemap( typemap )

Sets the typemap for the return value of the function.

## arg_typemap( index )

Returns the typemap for one function arguments.

## set_arg_typemap( index, typemap )

Sets the typemap for one function argument.

ExtUtils::XSpp::Node::Function - Node representing a function