blob: f113d7a7877b498e85f2f18d5a1173a27ddd51a8 [file] [log] [blame]
/* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef H_CFCPERLSUB
#define H_CFCPERLSUB
#ifdef __cplusplus
extern "C" {
#endif
typedef struct CFCPerlSub CFCPerlSub;
struct CFCFunction;
struct CFCParamList;
struct CFCType;
struct CFCVariable;
#ifdef CFC_NEED_PERLSUB_STRUCT_DEF
#define CFC_NEED_BASE_STRUCT_DEF
#include "CFCBase.h"
struct CFCPerlSub {
CFCBase base;
struct CFCParamList *param_list;
char *class_name;
char *alias;
int use_labeled_params;
char *perl_name;
char *c_name;
};
#endif
/** Clownfish::CFC::Binding::Perl::Subroutine - Abstract base binding for a
* Clownfish::CFC::Model::Function.
*
* This class is used to generate binding code for invoking Clownfish's
* functions and methods across the Perl/C barrier.
*/
/** Abstract constructor.
*
* @param param_list A Clownfish::CFC::Model::ParamList.
* @param class_name The name of the Perl class that the subroutine belongs
* to.
* @param alias The local, unqualified name for the Perl subroutine that
* will be used to invoke the function.
* @param use_labeled_params True if the binding should take hash-style
* labeled parameters, false if it should take positional arguments.
*/
CFCPerlSub*
CFCPerlSub_init(CFCPerlSub *self, struct CFCParamList *param_list,
const char *class_name, const char *alias,
int use_labeled_params);
void
CFCPerlSub_destroy(CFCPerlSub *self);
/** Generate C declarations for the variables holding the arguments, from
* `first` onwards.
*/
char*
CFCPerlSub_arg_declarations(CFCPerlSub *self, size_t first);
/** Create a comma-separated list of argument names prefixed by "arg_".
*/
char*
CFCPerlSub_arg_name_list(CFCPerlSub *self);
/** Generate code that initializes a static array of XSBind_ParamSpecs.
* Parameters from `first` onwards are included.
*/
char*
CFCPerlSub_build_param_specs(CFCPerlSub *self, size_t first);
/** Generate code that that converts and assigns the arguments.
*/
char*
CFCPerlSub_arg_assignments(CFCPerlSub *self);
/** Accessor for param list.
*/
struct CFCParamList*
CFCPerlSub_get_param_list(CFCPerlSub *self);
/** Accessor for class name.
*/
const char*
CFCPerlSub_get_class_name(CFCPerlSub *self);
/** Accessor for use_labeled_params.
*/
int
CFCPerlSub_use_labeled_params(CFCPerlSub *self);
/**
* @return the fully-qualified perl subroutine name.
*/
const char*
CFCPerlSub_perl_name(CFCPerlSub *self);
/**
* @return the fully-qualified name of the C function that implements the
* XSUB.
*/
const char*
CFCPerlSub_c_name(CFCPerlSub *self);
/**
* @return a string containing the names of arguments to feed to bound C
* function, joined by commas.
*/
const char*
CFCPerlSub_c_name_list(CFCPerlSub *self);
#ifdef __cplusplus
}
#endif
#endif /* H_CFCPERLSUB */