git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@555 626c5289-ae23-0410-ae9c-e8d60b6d4f22
130 lines
3.7 KiB
C++
130 lines
3.7 KiB
C++
/********************************************************************
|
|
* Ruby module for SWIG
|
|
*
|
|
* $Header$
|
|
*
|
|
* Copyright (C) 2000 Network Applied Communication Laboratory, Inc.
|
|
* Copyright (C) 2000 Information-technology Promotion Agency, Japan
|
|
*
|
|
* Masaki Fukushima
|
|
*
|
|
********************************************************************/
|
|
|
|
class RClass {
|
|
private:
|
|
DOHString *temp;
|
|
public:
|
|
DOHString *name; // class name (renamed)
|
|
DOHString *cname; // original C class/struct name
|
|
DOHString *vname; // variable name
|
|
DOHString *type;
|
|
DOHString *prefix;
|
|
DOHString *header;
|
|
DOHString *init;
|
|
|
|
DOHString *aliases;
|
|
DOHString *includes;
|
|
DOH *freemethods;
|
|
DOH *predmethods;
|
|
int destructor_defined;
|
|
|
|
RClass(void) {
|
|
freemethods = NewHash();
|
|
predmethods = NewHash();
|
|
destructor_defined = 0;
|
|
name = NewString("");
|
|
cname = NewString("");
|
|
vname = NewString("");
|
|
type = NewString("");
|
|
prefix = NewString("");
|
|
header = NewString("");
|
|
init = NewString("");
|
|
aliases = NewString("");
|
|
includes = NewString("");
|
|
temp = NewString("");
|
|
}
|
|
~RClass() {
|
|
Delete(name);
|
|
Delete(cname);
|
|
Delete(vname);
|
|
Delete(type);
|
|
Delete(prefix);
|
|
Delete(header);
|
|
Delete(init);
|
|
Delete(aliases);
|
|
Delete(includes);
|
|
Delete(freemethods);
|
|
Delete(predmethods);
|
|
Delete(temp);
|
|
}
|
|
|
|
void set_name(char *cn, char *rn, char *valn) {
|
|
Clear(cname);
|
|
Append(cname,cn);
|
|
Clear(name);
|
|
Append(name,valn);
|
|
Clear(vname);
|
|
Printf(vname,"c%s",name);
|
|
Printv(prefix,(rn ? rn : cn), "_", 0);
|
|
}
|
|
|
|
char *strip(char *s) {
|
|
if (strncmp(s, Char(prefix), Len(prefix)) != 0)
|
|
return s;
|
|
Clear(temp);
|
|
Append(temp,s);
|
|
Replace(temp,prefix,"",DOH_REPLACE_ANY);
|
|
return Char(temp);
|
|
}
|
|
};
|
|
|
|
class RUBY : public Language {
|
|
private:
|
|
virtual char *make_wrapper_name(char *cname);
|
|
virtual char *validate_const_name(char *name);
|
|
virtual char *ruby_typemap_lookup(char *, DataType *, char *, char *, char *, Wrapper * = 0);
|
|
virtual int to_VALUE(DataType *, char *, DOHString *, int = 0);
|
|
virtual int from_VALUE(DataType *, char *, DOHString *);
|
|
public:
|
|
RUBY();
|
|
// Virtual functions required by the SWIG parser
|
|
virtual void parse_args(int, char *argv[]);
|
|
virtual void parse();
|
|
virtual void create_function(char *, char *, DataType *, ParmList *);
|
|
virtual void link_variable(char *, char *, DataType *);
|
|
virtual void declare_const(char *, char *, DataType *, char *);
|
|
virtual void initialize(void);
|
|
virtual void headers(void);
|
|
virtual void close(void);
|
|
virtual void set_module(char *,char **);
|
|
virtual void create_command(char *, char *, int);
|
|
|
|
// C++ language extensions.
|
|
virtual void cpp_member_func(char *name, char *iname, DataType *t, ParmList *l);
|
|
virtual void cpp_constructor(char *name, char *iname, ParmList *l);
|
|
virtual void cpp_destructor(char *name, char *newname);
|
|
virtual void cpp_open_class(char *classname, char *rname, char *ctype, int strip);
|
|
virtual void cpp_close_class();
|
|
virtual void cpp_inherit(char **baseclass, int mode = INHERIT_ALL);
|
|
virtual void cpp_variable(char *name, char *iname, DataType *t);
|
|
virtual void cpp_static_func(char *name, char *iname, DataType *t, ParmList *l);
|
|
virtual void cpp_declare_const(char *name, char *iname, DataType *type, char *value);
|
|
virtual void cpp_static_var(char *name, char *iname, DataType *t);
|
|
|
|
// Declaration of a class, but not a full definition
|
|
virtual void cpp_class_decl(char *, char *, char *);
|
|
|
|
// Pragma directive
|
|
virtual void pragma(char *, char *, char *);
|
|
virtual void cpp_pragma(Pragma *);
|
|
|
|
// Import directive
|
|
virtual void import(char *filename);
|
|
|
|
};
|
|
|
|
/*
|
|
* Local Variables:
|
|
* c-basic-offset: 2
|
|
* End:
|
|
*/
|