---
name: "ExtUtils::XSpp::Node::Function"
section: "3pm"
platform: "linux"
package: "libextutils-xspp-perl"
version: "0.1800-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/ExtUtils::XSpp::Node::Function"
---

# ExtUtils::XSpp::Node::Function(3pm)

Node representing a function

## 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.
