/**************************************************************************** * Simplified Wrapper and Interface Generator (SWIG) * * Author : David Beazley * * Department of Computer Science * University of Chicago * 1100 E 58th Street * Chicago, IL 60637 * beazley@cs.uchicago.edu * * Please read the file LICENSE for the copyright and terms by which SWIG * can be used and distributed. ****************************************************************************/ /************************************************************************** * class PERL5 * * A Perl 5 implementation **************************************************************************/ class PERL5 : public Language { private: int export_all; char *package; char *module; String cmodule; String vinit; FILE *f_pm; String pm; // Package initialization code String magic; // Magic variable wrappers char *perl_path; int is_static; void get_pointer(char *iname, char *srcname, char *src, char *dest, DataType *t, String &f, char *ret); char *usage_var(char *, DataType *); char *usage_func(char *, DataType *, ParmList *); char *usage_const(char *, DataType *, char *); char *alt_header; // The following variables are used to manage Perl5 classes int blessed; // Enable object oriented features Hash classes; // A hash table for storing the classes we've seen so far int have_constructor; int have_destructor; int have_data_members; char *class_name; // Name of the class (what Perl thinks it is) char *class_type; // Type of class "struct", "class", "union" char *real_classname; // Real name of C/C++ class String *base_class; // Base class (if using inheritance) String *pcode; // Perl code associated with each class String *blessedmembers; // Member data associated with each class int member_func; // Set to 1 when wrapping a member function char *realpackage; // Name of real module String func_stubs; // Function stubs String var_stubs; // Variable stubs String *member_keys; // Keys for all member data String exported; // Exported symbols public : PERL5() { package = 0; module = 0; perl_path = "perl5"; is_static = 0; blessed = 0; alt_header = 0; member_func = 0; }; void parse_args(int, char *argv[]); void parse(); void create_function(char *, char *, DataType *, ParmList *); void link_variable(char *, char *, DataType *); void declare_const(char *, char *, DataType *, char *); void initialize(void); void headers(void); void close(void); void set_module(char *, char **); void set_init(char *); void add_native(char *, char *); void create_command(char *, char *); char *type_mangle(DataType *); // Support for blessed perl thingies.... void cpp_open_class(char *classname, char *rename, char *ctype, int strip); void cpp_close_class(); void cpp_member_func(char *name, char *iname, DataType *t, ParmList *l); void cpp_static_func(char *name, char *iname, DataType *t, ParmList *l); void cpp_variable(char *name, char *iname, DataType *t); void cpp_constructor(char *name, char *iname, ParmList *l); void cpp_destructor(char *name, char *newname); void cpp_inherit(char **baseclass, int mode = INHERIT_ALL); void cpp_declare_const(char *name, char *iname, DataType *type, char *value); void cpp_class_decl(char *, char *, char *); void add_typedef(DataType *t, char *name); void pragma(char *, char *, char *); void import(char *filename); };