+/****************************************************************************
+ * 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);
+};
+
+
+