c90f71dd8c
special cases and other things in wxPython, and since I plan on making several more, I've decided to put the SWIG sources in wxPython's CVS instead of relying on maintaining patches. This effectivly becomes a fork of an obsolete version of SWIG, :-( but since SWIG 1.3 still doesn't have some things I rely on in 1.1, not to mention that my custom patches would all have to be redone, I felt that this is the easier road to take. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15307 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
106 lines
3.7 KiB
C++
106 lines
3.7 KiB
C++
/****************************************************************************
|
|
* 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);
|
|
};
|
|
|
|
|
|
|