Add Ruby support contributed by Masaki Fukushima.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@518 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
765ad025b9
commit
618e0eff61
39 changed files with 3754 additions and 10 deletions
|
|
@ -13,8 +13,8 @@ AR = @AR@
|
|||
RANLIB = @RANLIB@
|
||||
|
||||
TARGET = libmodules11.a
|
||||
OBJS = swigmain.o tcl8.o perl5.o python.o pycpp.o guile.o java.o mzscheme.o
|
||||
SRCS = swigmain.cxx tcl8.cxx perl5.cxx python.cxx pycpp.cxx guile.cxx java.cxx mzscheme.cxx
|
||||
OBJS = swigmain.o tcl8.o perl5.o python.o pycpp.o guile.o java.o mzscheme.o ruby.o
|
||||
SRCS = swigmain.cxx tcl8.cxx perl5.cxx python.cxx pycpp.cxx guile.cxx java.cxx mzscheme.cxx ruby.cxx
|
||||
INCLUDE = -I$(srcdir)/../Include \
|
||||
-I$(srcdir)/../SWIG1.1 \
|
||||
-I$(srcdir)/../SWIG1.3 \
|
||||
|
|
|
|||
1300
Source/Modules1.1/ruby.cxx
Normal file
1300
Source/Modules1.1/ruby.cxx
Normal file
File diff suppressed because it is too large
Load diff
125
Source/Modules1.1/ruby.h
Normal file
125
Source/Modules1.1/ruby.h
Normal file
|
|
@ -0,0 +1,125 @@
|
|||
/********************************************************************
|
||||
* 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:
|
||||
String temp;
|
||||
public:
|
||||
String name; // class name (renamed)
|
||||
String cname; // original C class/struct name
|
||||
String vname; // variable name
|
||||
String type;
|
||||
String prefix;
|
||||
String header;
|
||||
String init;
|
||||
|
||||
String aliases;
|
||||
String includes;
|
||||
DOH *freemethods;
|
||||
DOH *predmethods;
|
||||
int destructor_defined;
|
||||
|
||||
RClass(void) {
|
||||
freemethods = NewHash();
|
||||
predmethods = NewHash();
|
||||
destructor_defined = 0;
|
||||
}
|
||||
void set_name(char *cn, char *rn, char *valn) {
|
||||
cname = cn;
|
||||
name = valn;
|
||||
vname << "c" << name;
|
||||
prefix << (rn ? rn : cn) << "_";
|
||||
}
|
||||
char *strip(char *s) {
|
||||
if (strncmp(s, prefix.get(), strlen(prefix.get())) != 0)
|
||||
return s;
|
||||
temp = s;
|
||||
temp.replace(prefix.get(), "");
|
||||
return temp.get();
|
||||
}
|
||||
};
|
||||
|
||||
class RUBY : public Language {
|
||||
private:
|
||||
char *module;
|
||||
char *modvar;
|
||||
char *feature;
|
||||
int toplevel;
|
||||
String other_extern;
|
||||
String other_init;
|
||||
char *import_file;
|
||||
|
||||
int current;
|
||||
enum {
|
||||
NO_CPP,
|
||||
MEMBER_FUNC,
|
||||
CONSTRUCTOR,
|
||||
DESTRUCTOR,
|
||||
MEMBER_VAR,
|
||||
CLASS_CONST,
|
||||
STATIC_FUNC,
|
||||
STATIC_VAR
|
||||
};
|
||||
|
||||
DOH *classes; // key=cname val=RClass
|
||||
RClass *klass; // Currently processing class
|
||||
DOH *special_methods; // Python style special method name table
|
||||
|
||||
virtual char *make_wrapper_name(char *cname);
|
||||
virtual char *validate_const_name(char *name);
|
||||
virtual char *ruby_typemap_lookup(char *, DataType *, char *, char *, char *, WrapperFunction * = 0);
|
||||
virtual int to_VALUE(DataType *, char *, String&, int = 0);
|
||||
virtual int from_VALUE(DataType *, char *, String&);
|
||||
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:
|
||||
*/
|
||||
|
|
@ -32,6 +32,7 @@ static char cvsroot[] = "$Header$";
|
|||
#include "python.h"
|
||||
#include "guile.h"
|
||||
#include "mzscheme.h"
|
||||
#include "ruby.h"
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
|
|
@ -47,7 +48,8 @@ Target Language Options:\n\
|
|||
-perl5 - Generate Perl5 wrappers.\n\
|
||||
-java - Generate Java wrappers.\n\
|
||||
-guile - Generate Guile wrappers.\n\
|
||||
-mzscheme - Generate Mzscheme wrappers.\n";
|
||||
-mzscheme - Generate Mzscheme wrappers.\n\
|
||||
-ruby - Generate Ruby wrappers.\n";
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// main()
|
||||
|
|
@ -87,6 +89,9 @@ int main(int argc, char **argv) {
|
|||
} else if (strcmp(argv[i],"-mzscheme") == 0) {
|
||||
dl = new MZSCHEME;
|
||||
Swig_mark_arg(i);
|
||||
} else if (strcmp(argv[i],"-ruby") == 0) {
|
||||
dl = new RUBY;
|
||||
Swig_mark_arg(i);
|
||||
} else if (strcmp(argv[i],"-help") == 0) {
|
||||
fputs(usage,stderr);
|
||||
Swig_mark_arg(i);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue