SWIG1.1 directory destroyed
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@956 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
736fdc62cf
commit
6b28f547f3
10 changed files with 0 additions and 8115 deletions
|
|
@ -1,73 +0,0 @@
|
|||
#######################################################################
|
||||
# $Header$
|
||||
#######################################################################
|
||||
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
||||
SHELL = /bin/sh
|
||||
CXX = @CXX@
|
||||
CFLAGS = @CFLAGS@
|
||||
YACC = @YACC@
|
||||
AR = @AR@
|
||||
RANLIB = @RANLIB@
|
||||
|
||||
TARGET = libswig11.a
|
||||
|
||||
OBJS = parser.o main.o scanner.o \
|
||||
emit.o cplus.o lang.o
|
||||
|
||||
SRCS = main.cxx scanner.cxx \
|
||||
emit.cxx cplus.cxx lang.cxx
|
||||
|
||||
PARSER = $(srcdir)/parser.yxx
|
||||
INCLUDE = -I$(srcdir)/../Include \
|
||||
-I$(srcdir)/. \
|
||||
-I$(srcdir)/../Swig \
|
||||
-I$(srcdir)/../Preprocessor \
|
||||
-I$(srcdir)/../DOH/Include \
|
||||
-I../Include \
|
||||
-I.
|
||||
|
||||
# Rules for creation of a .o file from .cxx
|
||||
.SUFFIXES: .cxx
|
||||
.cxx.o:
|
||||
$(CXX) $(INCLUDE) $(CFLAGS) -c -o $*.o $<
|
||||
|
||||
swig: $(TARGET)
|
||||
|
||||
$(TARGET): $(OBJS)
|
||||
$(AR) cr $(TARGET) $(OBJS)
|
||||
$(RANLIB) $(TARGET)
|
||||
|
||||
parser.o: parser.cxx
|
||||
$(CXX) $(INCLUDE) $(CFLAGS) $< -c -o parser.o
|
||||
|
||||
parser.cxx parser.h: $(PARSER)
|
||||
$(YACC) @YFLAGS@ $(PARSER)
|
||||
@cp y.tab.h parser.h
|
||||
@cp y.tab.c parser.cxx
|
||||
|
||||
scanner.o: parser.h
|
||||
|
||||
parser::
|
||||
@cp y.tab.c.bison parser.cxx
|
||||
@cp y.tab.h.bison parser.h
|
||||
@cp y.tab.h.bison y.tab.h
|
||||
$(CXX) $(CFLAGS) parser.cxx -c -o parser.o
|
||||
|
||||
clean::
|
||||
rm -f *.o $(TARGET) y.tab.c y.tab.h
|
||||
|
||||
nuke::
|
||||
rm -f Makefile *~ #* core a.out
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
2/10/00
|
||||
|
||||
This is the old SWIG1.1 core written in C++. This is a real mess
|
||||
and in the process of being deprecated. Please bear with us.
|
||||
|
||||
-- Dave
|
||||
|
||||
File diff suppressed because it is too large
Load diff
|
|
@ -1,257 +0,0 @@
|
|||
/* -----------------------------------------------------------------------------
|
||||
* emit.cxx
|
||||
*
|
||||
* Useful functions for emitting various pieces of code.
|
||||
*
|
||||
* Author(s) : David Beazley (beazley@cs.uchicago.edu)
|
||||
*
|
||||
* Copyright (C) 1998-2000. The University of Chicago
|
||||
* Copyright (C) 1995-1998. The University of Utah and The Regents of the
|
||||
* University of California.
|
||||
*
|
||||
* See the file LICENSE for information on usage and redistribution.
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
#include "internal.h"
|
||||
extern "C" {
|
||||
#include "swig.h"
|
||||
}
|
||||
|
||||
static char cvsroot[] = "$Header$";
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* new_create_function()
|
||||
*
|
||||
* Create a new function
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
void new_create_function(char *name, char *iname, SwigType *type, ParmList *l) {
|
||||
Hash *h;
|
||||
h = NewHash();
|
||||
Setattr(h,"name",name);
|
||||
Setattr(h,"scriptname",iname);
|
||||
Setattr(h,"type",type);
|
||||
Setattr(h,"parms",l);
|
||||
lang->function(h);
|
||||
Delete(h);
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* emit_args()
|
||||
*
|
||||
* Creates a list of variable declarations for both the return value
|
||||
* and function parameters.
|
||||
*
|
||||
* The return value is always called result and arguments arg0, arg1, arg2, etc...
|
||||
* Returns the number of parameters associated with a function.
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
int emit_args(DOH *node, Wrapper *f) {
|
||||
|
||||
SwigType *rt;
|
||||
ParmList *l;
|
||||
Parm *p;
|
||||
int i;
|
||||
char *tm;
|
||||
SwigType *pt;
|
||||
DOHString *pvalue;
|
||||
DOHString *pname;
|
||||
DOHString *lname;
|
||||
|
||||
rt = Getattr(node,"type");
|
||||
l = Getattr(node,"parms");
|
||||
|
||||
/* Emit function arguments */
|
||||
Swig_cargs(f, l);
|
||||
|
||||
i = 0;
|
||||
p = l;
|
||||
while (p != 0) {
|
||||
lname = Getlname(p);
|
||||
pt = Gettype(p);
|
||||
pname = Getname(p);
|
||||
pvalue = Getvalue(p);
|
||||
|
||||
tm = Swig_typemap_lookup((char*)"arginit",pt,pname,(char*)"",lname,f);
|
||||
if (tm) {
|
||||
Printv(f,tm,"\n",0);
|
||||
}
|
||||
/* Check for ignore or default typemaps */
|
||||
tm = Swig_typemap_lookup((char*)"default",pt,pname,(char*)"",lname,f);
|
||||
if (tm) {
|
||||
Printv(f,tm,"\n",0);
|
||||
}
|
||||
tm = Swig_typemap_lookup((char*)"ignore",pt,pname,(char*)"",lname,f);
|
||||
if (tm) {
|
||||
Printv(f,tm,"\n",0);
|
||||
Setignore(p,1);
|
||||
}
|
||||
i++;
|
||||
p = Getnext(p);
|
||||
}
|
||||
return(i);
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* int emit_func_call(char *decl, DataType *t, ParmList *l, Wrapper*f)
|
||||
*
|
||||
* Emits code for a function call (new version).
|
||||
*
|
||||
* Exception handling support :
|
||||
*
|
||||
* - This function checks to see if any sort of exception mechanism
|
||||
* has been defined. If so, we emit the function call in an exception
|
||||
* handling block.
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
static DOH *fcall = 0;
|
||||
|
||||
void emit_set_action(DOHString_or_char *decl) {
|
||||
if (fcall) Delete (fcall);
|
||||
fcall = NewString(decl);
|
||||
}
|
||||
|
||||
void emit_func_call(DOH *node, Wrapper *f) {
|
||||
char *decl;
|
||||
SwigType *t;
|
||||
ParmList *l;
|
||||
char *tm;
|
||||
|
||||
decl = GetChar(node,"name");
|
||||
t = Getattr(node,"type");
|
||||
l = Getattr(node,"parms");
|
||||
|
||||
if ((tm = Swig_typemap_lookup((char*)"except",t,decl,(char*)"result",(char*)"",0))) {
|
||||
Printv(f,tm,0);
|
||||
Replace(f,"$name",decl,DOH_REPLACE_ANY);
|
||||
} else if ((tm = Swig_except_lookup())) {
|
||||
Printv(f,tm,0);
|
||||
Replace(f,"$name",decl,DOH_REPLACE_ANY);
|
||||
} else {
|
||||
Printv(f,"$function",0);
|
||||
}
|
||||
|
||||
if (!fcall) fcall = NewString(Swig_cfunction_call(decl,l));
|
||||
|
||||
if (CPlusPlus) {
|
||||
Swig_cppresult(f, t, (char*)"result", Char(fcall));
|
||||
} else {
|
||||
Swig_cresult(f, t, (char*)"result", Char(fcall));
|
||||
}
|
||||
Delete(fcall);
|
||||
fcall = 0;
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* void emit_set_get()
|
||||
*
|
||||
* Emits a pair of functions to set/get the value of a variable. This is
|
||||
* only used in the event the target language can't provide variable linking
|
||||
* on its own.
|
||||
*
|
||||
* double foo;
|
||||
*
|
||||
* Gets translated into the following :
|
||||
*
|
||||
* double foo_set(double x) {
|
||||
* return foo = x;
|
||||
* }
|
||||
*
|
||||
* double foo_get() {
|
||||
* return foo;
|
||||
* }
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
/* How to assign a C allocated string */
|
||||
|
||||
static char *c_str = (char *)"\
|
||||
if ($target) free($target);\n\
|
||||
$target = ($rtype) malloc(strlen($source)+1);\n\
|
||||
strcpy((char *)$target,$source);\n\
|
||||
return $ltype $target;\n";
|
||||
|
||||
/* How to assign a C allocated string */
|
||||
|
||||
static char *cpp_str = (char *)"\
|
||||
if ($target) delete [] $target;\n\
|
||||
$target = ($rtype) (new char[strlen($source)+1]);\n\
|
||||
strcpy((char *)$target,$source);\n\
|
||||
return ($ltype) $target;\n;";
|
||||
|
||||
|
||||
void emit_set_get(DOH *node) {
|
||||
char *name, *iname;
|
||||
SwigType *t;
|
||||
Wrapper *w;
|
||||
DOHString *new_iname;
|
||||
char *code = 0;
|
||||
|
||||
name = GetChar(node,"name");
|
||||
iname = GetChar(node,"iname");
|
||||
t = Getattr(node,"type");
|
||||
|
||||
/* First write a function to set the variable of the variable */
|
||||
if (!(Status & STAT_READONLY)) {
|
||||
|
||||
if (SwigType_type(t) == T_STRING) {
|
||||
if (CPlusPlus)
|
||||
code = cpp_str;
|
||||
else
|
||||
code = c_str;
|
||||
}
|
||||
w = Swig_cvarset_wrapper(name, t, code);
|
||||
Printf(f_header,"%s", w);
|
||||
new_iname = Swig_name_set(iname);
|
||||
DohIncref(new_iname);
|
||||
new_create_function(GetChar(w,"name"), Char(new_iname), Gettype(w), Getparms(w));
|
||||
Delete(new_iname);
|
||||
Delete(w);
|
||||
}
|
||||
|
||||
w = Swig_cvarget_wrapper(name,t,0);
|
||||
Printf(f_header,"%s", w);
|
||||
new_iname = Swig_name_get(iname);
|
||||
DohIncref(new_iname);
|
||||
new_create_function(GetChar(w,"name"), Char(new_iname), Gettype(w), Getparms(w));
|
||||
Delete(new_iname);
|
||||
Delete(w);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------
|
||||
* int check_numopt()
|
||||
*
|
||||
* Gets the number of optional arguments for a ParmList.
|
||||
* ------------------------------------------------------------------ */
|
||||
|
||||
int check_numopt(ParmList *p) {
|
||||
int n = 0;
|
||||
int i = 0;
|
||||
int state = 0;
|
||||
|
||||
for (;p; p = Getnext(p),i++) {
|
||||
SwigType *pt = Gettype(p);
|
||||
String *pn = Getname(p);
|
||||
if (Getvalue(p)) {
|
||||
n++;
|
||||
state = 1;
|
||||
} else if (Swig_typemap_search((char*)"default",pt,pn)) {
|
||||
n++;
|
||||
state = 1;
|
||||
} else if (Swig_typemap_search((char*)"ignore",pt,pn)) {
|
||||
n++;
|
||||
} else {
|
||||
if (state) {
|
||||
Printf(stderr,"%s : Line %d. Argument %d must have a default value!\n", input_file,line_number,i+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
return n;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,64 +0,0 @@
|
|||
/* -----------------------------------------------------------------------------
|
||||
* internal.h
|
||||
*
|
||||
* Internal declarations used by the SWIG core
|
||||
*
|
||||
* Author(s) : David Beazley (beazley@cs.uchicago.edu)
|
||||
*
|
||||
* Copyright (C) 1998-2000. The University of Chicago
|
||||
* Copyright (C) 1995-1998. The University of Utah and The Regents of the
|
||||
* University of California.
|
||||
*
|
||||
* See the file LICENSE for information on usage and redistribution.
|
||||
*
|
||||
* $Header$
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
#include "swig11.h"
|
||||
|
||||
extern Language *lang;
|
||||
extern int ForceExtern;
|
||||
extern int WrapExtern;
|
||||
extern void *CCode;
|
||||
extern int GenerateDefault;
|
||||
extern char *objc_construct;
|
||||
extern char *objc_destruct;
|
||||
|
||||
// Structure for holding typemap parameters
|
||||
|
||||
struct TMParm {
|
||||
Parm *p;
|
||||
ParmList *args;
|
||||
TMParm *next;
|
||||
TMParm() {
|
||||
next = 0;
|
||||
}
|
||||
};
|
||||
|
||||
/* Number of initialization names that can be used */
|
||||
|
||||
#define NI_NAMES 512
|
||||
|
||||
// Some functions for emitting some C++ helper code
|
||||
extern void cplus_emit_member_func(char *classname, char *classtype, char *classrename,
|
||||
char *mname, char *mrename, SwigType *type, ParmList *l,
|
||||
int mode);
|
||||
|
||||
extern void cplus_emit_static_func(char *classname, char *classtype, char *classrename,
|
||||
char *mname, char *mrename, SwigType *type, ParmList *l,
|
||||
int mode);
|
||||
|
||||
extern void cplus_emit_destructor(char *classname, char *classtype, char *classrename,
|
||||
char *name, char *iname, int mode);
|
||||
|
||||
extern void cplus_emit_constructor(char *classname, char *classtype, char *classrename,
|
||||
char *name, char *iname, ParmList *l, int mode);
|
||||
|
||||
extern void cplus_emit_variable_get(char *classname, char *classtype, char *classrename,
|
||||
char *name, char *iname, SwigType *type, int mode);
|
||||
|
||||
extern void cplus_emit_variable_set(char *classname, char *classtype, char *classrename,
|
||||
char *name, char *iname, SwigType *type, int mode);
|
||||
|
||||
extern char *cplus_base_class(char *name);
|
||||
|
||||
|
|
@ -1,418 +0,0 @@
|
|||
/* -----------------------------------------------------------------------------
|
||||
* lang.cxx
|
||||
*
|
||||
* Language base class functions. Default C++ handling is also implemented here.
|
||||
*
|
||||
* Author(s) : David Beazley (beazley@cs.uchicago.edu)
|
||||
*
|
||||
* Copyright (C) 1998-2000. The University of Chicago
|
||||
* Copyright (C) 1995-1998. The University of Utah and The Regents of the
|
||||
* University of California.
|
||||
*
|
||||
* See the file LICENSE for information on usage and redistribution.
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
static char cvsroot[] = "$Header$";
|
||||
|
||||
#include "internal.h"
|
||||
#include <ctype.h>
|
||||
|
||||
extern "C" {
|
||||
#include "swig.h"
|
||||
}
|
||||
|
||||
extern int add_symbol(char *name);
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
* Language::create_command()
|
||||
* ----------------------------------------------------------------- */
|
||||
|
||||
void Language::create_command(char *, char *) {
|
||||
Printf(stderr,"SWIG Warning. No command creation procedure defined.\n");
|
||||
Printf(stderr,"C++ inheritance may not work correctly.\n");
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
* Language::nativefunction()
|
||||
* ----------------------------------------------------------------- */
|
||||
|
||||
void
|
||||
Language::nativefunction(DOH *node) {
|
||||
Printf(stderr,"%s : Line %d. Adding native function %s not supported (ignored).\n", input_file, line_number, Getattr(node,"scriptname"));
|
||||
}
|
||||
|
||||
static String *ClassName = 0; /* This is the real name of the current class */
|
||||
static String *ClassRename = 0; /* This is non-NULL if the class has been renamed */
|
||||
static String *ClassType = 0; /* Type of class (ie. union, struct, class) */
|
||||
static String *ClassFullname = 0; /* Full name of the class */
|
||||
static String *ClassPrefix = 0; /* Prefix used on wrappers */
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Language::cpp_open_class()
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
void Language::cpp_open_class(char *classname, char *classrename, char *ctype, int strip) {
|
||||
|
||||
/* Copy the class name */
|
||||
|
||||
if (ClassName) Delete(ClassName);
|
||||
ClassName = NewString(classname);
|
||||
|
||||
/* Copy the class renaming */
|
||||
|
||||
if (ClassRename) Delete(ClassRename);
|
||||
if (classrename) {
|
||||
ClassRename = NewString(classrename);
|
||||
} else {
|
||||
ClassRename = 0; /* No renaming */
|
||||
}
|
||||
|
||||
/* Make the class type*/
|
||||
|
||||
if (ClassType) Delete(ClassType);
|
||||
if (strip) ClassType = NewString("");
|
||||
else ClassType = NewStringf("%s ", ctype);
|
||||
|
||||
if (ClassFullname) Delete(ClassFullname);
|
||||
ClassFullname = NewStringf("%s%s", ClassType, ClassName);
|
||||
|
||||
if (ClassRename) {
|
||||
ClassPrefix = ClassRename;
|
||||
} else {
|
||||
ClassPrefix = ClassName;
|
||||
}
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Language::cpp_close_class()
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
void Language::cpp_close_class() {
|
||||
|
||||
|
||||
/* Doesn't really do anything */
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Language::cpp_memberfunction()
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
void Language::cpp_memberfunction(DOH *node) {
|
||||
String *name;
|
||||
String *iname;
|
||||
String *ccode;
|
||||
String *script_name;
|
||||
SwigType *type;
|
||||
ParmList *parms;
|
||||
Wrapper *w;
|
||||
|
||||
name = Getattr(node,"name");
|
||||
iname = Getattr(node,"scriptname");
|
||||
type = Getattr(node,"type");
|
||||
parms = Getattr(node,"parms");
|
||||
ccode = Getattr(node,"ccode");
|
||||
|
||||
/* Generate the C wrapper function name and interpreter name of this function*/
|
||||
/* Create the actual function name */
|
||||
|
||||
script_name = Swig_name_member(ClassPrefix, iname ? iname : name);
|
||||
|
||||
/* Now do a symbol table lookup on it : */
|
||||
if (add_symbol(Char(script_name))) {
|
||||
Printf(stderr,"%s : Line %d. Function %s (member %s) multiply defined (2nd definition ignored).\n",
|
||||
input_file, line_number, iname, name);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Create the C wrapper function for this */
|
||||
w = Swig_cmethod_wrapper(ClassFullname, name, type, parms, ccode);
|
||||
if (AddMethods && ccode) {
|
||||
/* Dump the C wrappers */
|
||||
Printf(f_wrappers,"%s",w);
|
||||
} else if (!AddMethods) {
|
||||
/* Just create a string that does what we want */
|
||||
emit_set_action(Swig_cmethod_call(name, Getparms(w)));
|
||||
}
|
||||
Setattr(w,"scriptname",script_name);
|
||||
lang->function(w);
|
||||
Delete(w);
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Language::cpp_constructor()
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
void Language::cpp_constructor(DOH *node) {
|
||||
char *name, *iname;
|
||||
ParmList *l;
|
||||
char *cname;
|
||||
|
||||
name = GetChar(node,"name");
|
||||
iname = GetChar(node,"scriptname");
|
||||
l = Getattr(node,"parms");
|
||||
|
||||
if ((strcmp(name,Char(ClassName))) && (!ObjCClass)) {
|
||||
Printf(stderr,"%s : Line %d. Function %s must have a return type.\n",
|
||||
input_file, line_number, name);
|
||||
return;
|
||||
}
|
||||
|
||||
cname = Char(Swig_name_construct(iname ? iname : ClassPrefix));
|
||||
|
||||
/* Add this function to the SWIG symbol table */
|
||||
if (add_symbol(cname)) {
|
||||
Printf(stderr,"%s : Line %d. Constructor %s multiply defined (2nd definition ignored).\n",
|
||||
input_file, line_number, cname);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Call our default method */
|
||||
cplus_emit_constructor(Char(ClassName), Char(ClassType), Char(ClassRename), name, iname, l, AddMethods);
|
||||
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Language::cpp_destructor()
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
void Language::cpp_destructor(DOH *node) {
|
||||
char *name, *iname;
|
||||
char *cname;
|
||||
|
||||
name = GetChar(node,"name");
|
||||
iname = GetChar(node,"scriptname");
|
||||
cname = Char(Swig_name_destroy(ClassRename ? ClassRename : ClassName));
|
||||
|
||||
/* Add this function to the SWIG symbol table */
|
||||
|
||||
if (add_symbol(cname)) {
|
||||
Printf(stderr,"%s : Line %d. Destructor %s multiply defined (2nd definition ignored).\n",
|
||||
input_file, line_number, cname);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/* Call our default method */
|
||||
|
||||
cplus_emit_destructor(Char(ClassName), Char(ClassType), Char(ClassRename), name, iname, AddMethods);
|
||||
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Language::cleanup()
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
void Language::cpp_cleanup() {
|
||||
|
||||
/* This doesn't do anything (well, not be default) */
|
||||
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Language::cpp_inherit()
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
void Language::cpp_inherit(char **baseclass, int mode) {
|
||||
|
||||
extern void cplus_inherit_members(char *, int);
|
||||
int i = 0;
|
||||
|
||||
if (!baseclass) return;
|
||||
while (baseclass[i]) {
|
||||
cplus_inherit_members(baseclass[i],mode);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Language::cpp_variable()
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
void Language::cpp_variable(DOH *node) {
|
||||
char *name, *iname;
|
||||
SwigType *t;
|
||||
char *cname;
|
||||
|
||||
name = GetChar(node,"name");
|
||||
iname = GetChar(node,"scriptname");
|
||||
t = Getattr(node,"type");
|
||||
|
||||
/* Set the class prefix */
|
||||
|
||||
cname = Char(Swig_name_get(Swig_name_member(ClassPrefix, iname ? iname : name)));
|
||||
|
||||
/* Check the symbol table */
|
||||
if (add_symbol(cname)) {
|
||||
Printf(stderr,"%s : Line %d. Variable %s multiply defined (2nd definition ignored).\n", input_file, line_number, cname);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Create a function to set the value of the variable */
|
||||
if (!(Status & STAT_READONLY)) {
|
||||
cplus_emit_variable_set(Char(ClassName), Char(ClassType), Char(ClassRename), name, iname, t, AddMethods);
|
||||
}
|
||||
|
||||
/* Create a function to get the value of a variable */
|
||||
cplus_emit_variable_get(Char(ClassName),Char(ClassType), Char(ClassRename), name, iname, t, AddMethods);
|
||||
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Language::cpp_static_func()
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
void Language::cpp_staticfunction(DOH *node) {
|
||||
char *name, *iname;
|
||||
SwigType *t;
|
||||
ParmList *l;
|
||||
char *cname;
|
||||
|
||||
name = GetChar(node,"name");
|
||||
iname = GetChar(node,"scriptname");
|
||||
t = Getattr(node,"type");
|
||||
l = Getattr(node,"parms");
|
||||
|
||||
/* Set the member function name */
|
||||
|
||||
cname = Char(Swig_name_member(ClassPrefix,iname ? iname : name));
|
||||
|
||||
/* Now do a symbol table lookup on it : */
|
||||
|
||||
if (add_symbol(cname)) {
|
||||
if (ObjCClass)
|
||||
Printf(stderr,"%s : Line %d. class function %s multiply defined (2nd definition ignored).\n",
|
||||
input_file, line_number, cname);
|
||||
else
|
||||
Printf(stderr,"%s : Line %d. static function %s multiply defined (2nd definition ignored).\n",
|
||||
input_file, line_number, cname);
|
||||
return;
|
||||
}
|
||||
cplus_emit_static_func(Char(ClassName),Char(ClassType), Char(ClassRename), name, iname, t, l, AddMethods);
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Language::cpp_constant()
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
void Language::cpp_constant(DOH *node)
|
||||
{
|
||||
char *name, *iname, *value;
|
||||
SwigType *type;
|
||||
|
||||
char *cname;
|
||||
char mname[256];
|
||||
String *new_value;
|
||||
|
||||
name = GetChar(node,"name");
|
||||
iname = GetChar(node,"scriptname");
|
||||
value = GetChar(node,"value");
|
||||
type = Getattr(node,"type");
|
||||
|
||||
/* Set the constant name */
|
||||
|
||||
cname = Char(Swig_name_member(ClassPrefix, iname ? iname : name));
|
||||
|
||||
/* Now do a symbol table lookup on it : */
|
||||
if (add_symbol(cname)) {
|
||||
Printf(stderr,"%s : Line %d. Constant %s (member %s) multiply defined (2nd definition ignored).\n",
|
||||
input_file, line_number, cname, name);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Form correct C++ name */
|
||||
sprintf(mname,"%s::%s",ClassName,name);
|
||||
|
||||
/* Declare a constant */
|
||||
if (!value) {
|
||||
new_value = NewStringf("%s::%s", ClassName, name);
|
||||
} else {
|
||||
new_value = NewString(value);
|
||||
}
|
||||
Hash *n;
|
||||
n = NewHash();
|
||||
Setattr(n,"name",cname);
|
||||
Setattr(n,"scriptname",cname);
|
||||
Setattr(n,"type",type);
|
||||
Setattr(n,"value",new_value);
|
||||
lang->constant(n);
|
||||
Delete(n);
|
||||
Delete(new_value);
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Language::cpp_staticvariable()
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
void Language::cpp_staticvariable(DOH *node) {
|
||||
char *name, *iname;
|
||||
SwigType *t;
|
||||
char *cname;
|
||||
char mname[256];
|
||||
|
||||
name = GetChar(node,"name");
|
||||
iname = GetChar(node,"scriptname");
|
||||
t = Getattr(node,"type");
|
||||
|
||||
/* Create the variable name */
|
||||
|
||||
cname = Char(Swig_name_member(ClassPrefix, iname ? iname : name));
|
||||
|
||||
/* Now do a symbol table lookup on it : */
|
||||
if (add_symbol(cname)) {
|
||||
Printf(stderr,"%s : Line %d. Variable %s (member %s) multiply defined (2nd definition ignored).\n",
|
||||
input_file, line_number, cname, name);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Form correct C++ name */
|
||||
sprintf(mname,"%s::%s",Char(ClassName),name);
|
||||
|
||||
/* Link with this variable */
|
||||
|
||||
Hash *n = NewHash();
|
||||
Setattr(n,"name",mname);
|
||||
Setattr(n,"scriptname", cname);
|
||||
Setattr(n,"type",t);
|
||||
lang->variable(n);
|
||||
Delete(n);
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Language::cpp_class_decl()
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
void Language::cpp_class_decl(char *, char *, char *) {
|
||||
/* Does nothing by default */
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Language::cpp_pragma()
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
void Language::cpp_pragma(Pragma *) {
|
||||
/* Does nothing by default */
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Language::add_typedef()
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
void Language::add_typedef(SwigType *, char *) {
|
||||
/* Does nothing by default */
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Language::pragma()
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
void Language::pragma(char *, char *, char *) {
|
||||
/* Does nothing by default */
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* Language::import()
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
void Language::import(char *) {
|
||||
/* Does nothing by default */
|
||||
}
|
||||
|
|
@ -1,534 +0,0 @@
|
|||
/* -----------------------------------------------------------------------------
|
||||
* main.cxx
|
||||
*
|
||||
* Main entry point to the SWIG core.
|
||||
*
|
||||
* Author(s) : David Beazley (beazley@cs.uchicago.edu)
|
||||
*
|
||||
* Copyright (C) 1998-2000. The University of Chicago
|
||||
* Copyright (C) 1995-1998. The University of Utah and The Regents of the
|
||||
* University of California.
|
||||
*
|
||||
* See the file LICENSE for information on usage and redistribution.
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
static char cvsroot[] = "$Header$";
|
||||
|
||||
#include "internal.h"
|
||||
#ifndef MACSWIG
|
||||
#include "swigconfig.h"
|
||||
#endif
|
||||
|
||||
#include <time.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
extern "C" {
|
||||
#include "preprocessor.h"
|
||||
}
|
||||
|
||||
#ifndef SWIG_LIB
|
||||
#define SWIG_LIB "/usr/local/lib/swig1.3"
|
||||
#endif
|
||||
|
||||
#ifndef SWIG_CC
|
||||
#define SWIG_CC "CC"
|
||||
#endif
|
||||
|
||||
// Global variables
|
||||
|
||||
FILE *f_runtime;
|
||||
DOH *f_header; // Some commonly used
|
||||
DOH *f_wrappers; // FILE pointers
|
||||
DOH *f_init;
|
||||
FILE *f_input;
|
||||
char LibDir[512]; // Library directory
|
||||
int Status;
|
||||
Language *lang; // Language method
|
||||
int CPlusPlus = 0;
|
||||
int ObjC = 0;
|
||||
int ObjCClass = 0;
|
||||
int AddMethods = 0; // AddMethods flag
|
||||
int NewObject = 0; // NewObject flag
|
||||
int Inline = 0; // Inline mode
|
||||
int ForceExtern = 0; // Force extern mode
|
||||
int WrapExtern = 0;
|
||||
int GenerateDefault = 0; // Generate default constructors
|
||||
char *Config = 0;
|
||||
int NoInclude = 0;
|
||||
|
||||
int error_count = 0; // Error count
|
||||
int Verbose = 0;
|
||||
|
||||
class SwigException {};
|
||||
|
||||
static char *usage = (char*)"\
|
||||
\nGeneral Options\n\
|
||||
-c - Produce raw wrapper code (omit support code)\n\
|
||||
-c++ - Enable C++ processing\n\
|
||||
-co - Check a file out of the SWIG library\n\
|
||||
-Dsymbol - Define a symbol (for conditional compilation)\n\
|
||||
-I<dir> - Look for SWIG files in <dir>\n\
|
||||
-includeall - Follow all #include statements\n\
|
||||
-l<ifile> - Include SWIG library file.\n\
|
||||
-make_default - Create default constructors/destructors\n\
|
||||
-o outfile - Set name of the output file.\n\
|
||||
-objc - Enable Objective C processing\n\
|
||||
-swiglib - Report location of SWIG library and exit\n\
|
||||
-v - Run in verbose mode\n\
|
||||
-version - Print SWIG version number\n\
|
||||
-help - This output.\n\n";
|
||||
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// check_suffix(char *name)
|
||||
//
|
||||
// Checks the suffix of a file to see if we should emit extern declarations.
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
int
|
||||
check_suffix(char *name) {
|
||||
char *c;
|
||||
if (!name) return 0;
|
||||
if (strlen(name) == 0) return 0;
|
||||
c = name+strlen(name)-1;
|
||||
while (c != name) {
|
||||
if (*c == '.') break;
|
||||
c--;
|
||||
}
|
||||
if (c == name) return 0;
|
||||
if ((strcmp(c,".c") == 0) ||
|
||||
(strcmp(c,".C") == 0) ||
|
||||
(strcmp(c,".cc") == 0) ||
|
||||
(strcmp(c,".cxx") == 0) ||
|
||||
(strcmp(c,".c++") == 0) ||
|
||||
(strcmp(c,".cpp") == 0)) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// main()
|
||||
//
|
||||
// Main program. Initializes the files and starts the parser.
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
char infilename[256];
|
||||
char filename[256];
|
||||
char output_dir[512];
|
||||
char fn_runtime[256];
|
||||
|
||||
#ifdef MACSWIG
|
||||
FILE *swig_log;
|
||||
#endif
|
||||
|
||||
char *SwigLib;
|
||||
static int freeze = 0;
|
||||
|
||||
static String *lang_config = 0;
|
||||
|
||||
/* This function sets the name of the configuration file */
|
||||
|
||||
void SWIG_config_file(const String_or_char *filename) {
|
||||
lang_config = NewString(filename);
|
||||
}
|
||||
|
||||
int SWIG_main(int argc, char *argv[], Language *l) {
|
||||
int i;
|
||||
char *c;
|
||||
char temp[512];
|
||||
char infile[512];
|
||||
char *outfile_name = 0;
|
||||
int help = 0;
|
||||
int checkout = 0;
|
||||
int cpp_only = 0;
|
||||
int tm_debug = 0;
|
||||
char *includefiles[256];
|
||||
int includecount = 0;
|
||||
extern int check_suffix(char *);
|
||||
extern void scanner_file(DOHFile *);
|
||||
extern void parser_init(void);
|
||||
DOH *libfiles = 0;
|
||||
|
||||
/* Initialize the SWIG core */
|
||||
Swig_init();
|
||||
|
||||
#ifdef MACSWIG
|
||||
try {
|
||||
#endif
|
||||
|
||||
// Initialize the preprocessor
|
||||
Preprocessor_init();
|
||||
|
||||
f_wrappers = 0;
|
||||
f_init = 0;
|
||||
f_header = 0;
|
||||
|
||||
lang = l;
|
||||
Status = 0;
|
||||
|
||||
// Set up some default symbols (available in both SWIG interface files
|
||||
// and C files)
|
||||
|
||||
Preprocessor_define((DOH *) "SWIG 1", 0);
|
||||
Preprocessor_define((DOH *) "__STDC__", 0);
|
||||
#ifdef MACSWIG
|
||||
Preprocessor_define((DOH *) "SWIGMAC 1", 0);
|
||||
#endif
|
||||
#ifdef SWIGWIN32
|
||||
Preprocessor_define((DOH *) "SWIGWIN32 1", 0);
|
||||
#endif
|
||||
|
||||
// Check for SWIG_LIB environment variable
|
||||
|
||||
if ((c = getenv("SWIG_LIB")) == (char *) 0) {
|
||||
sprintf(LibDir,"%s",SWIG_LIB); // Build up search paths
|
||||
} else {
|
||||
strcpy(LibDir,c);
|
||||
}
|
||||
|
||||
SwigLib = Swig_copy_string(LibDir); // Make a copy of the real library location
|
||||
|
||||
#ifdef MACSWIG
|
||||
sprintf(temp,"%s:config", LibDir);
|
||||
Swig_add_directory((DOH *) ":swig_lib:config");
|
||||
Swig_add_directory((DOH *) ":swig_lib");
|
||||
#else
|
||||
sprintf(temp,"%s/config", LibDir);
|
||||
Swig_add_directory((DOH *) "./swig_lib/config");
|
||||
Swig_add_directory((DOH *) "./swig_lib");
|
||||
#endif
|
||||
Swig_add_directory((DOH *) temp);
|
||||
Swig_add_directory((DOH *) LibDir);
|
||||
|
||||
libfiles = NewList();
|
||||
|
||||
// Get options
|
||||
for (i = 1; i < argc; i++) {
|
||||
if (argv[i]) {
|
||||
if (strncmp(argv[i],"-I",2) == 0) {
|
||||
// Add a new directory search path
|
||||
includefiles[includecount++] = Swig_copy_string(argv[i]+2);
|
||||
Swig_mark_arg(i);
|
||||
} else if (strncmp(argv[i],"-D",2) == 0) {
|
||||
DOH *d = NewString(argv[i]+2);
|
||||
Replace(d,(char*)"=",(char*)" ", DOH_REPLACE_ANY | DOH_REPLACE_FIRST);
|
||||
Preprocessor_define((DOH *) d,0);
|
||||
// Create a symbol
|
||||
Swig_mark_arg(i);
|
||||
} else if (strcmp(argv[i],"-E") == 0) {
|
||||
cpp_only = 1;
|
||||
Swig_mark_arg(i);
|
||||
} else if ((strcmp(argv[i],"-verbose") == 0) ||
|
||||
(strcmp(argv[i],"-v") == 0)) {
|
||||
Verbose = 1;
|
||||
Swig_mark_arg(i);
|
||||
} else if (strcmp(argv[i],"-c++") == 0) {
|
||||
CPlusPlus=1;
|
||||
Swig_mark_arg(i);
|
||||
} else if (strcmp(argv[i],"-objc") == 0) {
|
||||
ObjC = 1;
|
||||
Swig_mark_arg(i);
|
||||
} else if (strcmp(argv[i],"-c") == 0) {
|
||||
NoInclude=1;
|
||||
Preprocessor_define((DOH *) "SWIG_NOINCLUDE 1", 0);
|
||||
Swig_mark_arg(i);
|
||||
} else if (strcmp(argv[i],"-make_default") == 0) {
|
||||
GenerateDefault = 1;
|
||||
Swig_mark_arg(i);
|
||||
} else if (strcmp(argv[i],"-swiglib") == 0) {
|
||||
printf("%s\n", LibDir);
|
||||
SWIG_exit (EXIT_SUCCESS);
|
||||
} else if (strcmp(argv[i],"-o") == 0) {
|
||||
Swig_mark_arg(i);
|
||||
if (argv[i+1]) {
|
||||
outfile_name = Swig_copy_string(argv[i+1]);
|
||||
Swig_mark_arg(i+1);
|
||||
i++;
|
||||
} else {
|
||||
Swig_arg_error();
|
||||
}
|
||||
} else if (strcmp(argv[i],"-version") == 0) {
|
||||
fprintf(stderr,"\nSWIG Version %s %s\n",
|
||||
SWIG_VERSION, SWIG_SPIN);
|
||||
fprintf(stderr,"Copyright (c) 1995-98\n");
|
||||
fprintf(stderr,"University of Utah and the Regents of the University of California\n");
|
||||
fprintf(stderr,"\nCompiled with %s\n", SWIG_CC);
|
||||
SWIG_exit (EXIT_SUCCESS);
|
||||
} else if (strncmp(argv[i],"-l",2) == 0) {
|
||||
// Add a new directory search path
|
||||
Append(libfiles,argv[i]+2);
|
||||
Swig_mark_arg(i);
|
||||
} else if (strcmp(argv[i],"-co") == 0) {
|
||||
checkout = 1;
|
||||
Swig_mark_arg(i);
|
||||
} else if (strcmp(argv[i],"-freeze") == 0) {
|
||||
freeze = 1;
|
||||
Swig_mark_arg(i);
|
||||
} else if (strcmp(argv[i],"-includeall") == 0) {
|
||||
Preprocessor_include_all(1);
|
||||
Swig_mark_arg(i);
|
||||
} else if (strcmp(argv[i],"-tm_debug") == 0) {
|
||||
tm_debug = 1;
|
||||
Swig_mark_arg(i);
|
||||
} else if (strcmp(argv[i],"-help") == 0) {
|
||||
fputs(usage,stderr);
|
||||
Swig_mark_arg(i);
|
||||
help = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (Verbose)
|
||||
printf ("LibDir: %s\n", LibDir);
|
||||
|
||||
while (includecount > 0) {
|
||||
Swig_add_directory((DOH *) includefiles[--includecount]);
|
||||
}
|
||||
|
||||
// Parse language dependent options
|
||||
lang->parse_args(argc,argv);
|
||||
|
||||
if (help) SWIG_exit (EXIT_SUCCESS); // Exit if we're in help mode
|
||||
|
||||
// Check all of the options to make sure we're cool.
|
||||
Swig_check_options();
|
||||
|
||||
// Add language dependent directory to the search path
|
||||
{
|
||||
DOH *rl = NewString("");
|
||||
#ifdef MACSWIG
|
||||
Printf(r1,"%s:%s", SwigLib,LibDir);
|
||||
#else
|
||||
Printf(rl,"%s/%s", SwigLib,LibDir);
|
||||
#endif
|
||||
Swig_add_directory(rl);
|
||||
}
|
||||
|
||||
// If we made it this far, looks good. go for it....
|
||||
// Create names of temporary files that are created
|
||||
|
||||
sprintf(infilename,"%s", argv[argc-1]);
|
||||
input_file = new char[strlen(infilename)+1];
|
||||
strcpy(input_file, infilename);
|
||||
|
||||
// If the user has requested to check out a file, handle that
|
||||
if (checkout) {
|
||||
DOH *s;
|
||||
char *outfile = input_file;
|
||||
if (outfile_name)
|
||||
outfile = outfile_name;
|
||||
|
||||
if (Verbose)
|
||||
printf ("Handling checkout...\n");
|
||||
|
||||
s = Swig_include(input_file);
|
||||
if (!s) {
|
||||
fprintf(stderr,"Unable to locate '%s' in the SWIG library.\n", input_file);
|
||||
} else {
|
||||
FILE *f = fopen(outfile,"r");
|
||||
if (f) {
|
||||
fclose(f);
|
||||
fprintf(stderr,"File '%s' already exists. Checkout aborted.\n", outfile);
|
||||
} else {
|
||||
f = fopen(outfile,"w");
|
||||
if (!f) {
|
||||
fprintf(stderr,"Unable to create file '%s'\n", outfile);
|
||||
} else {
|
||||
fprintf(stderr,"'%s' checked out from the SWIG library.\n", input_file);
|
||||
fputs(Char(s),f);
|
||||
fclose(f);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Check the suffix for a .c file. If so, we're going to
|
||||
// declare everything we see as "extern"
|
||||
|
||||
ForceExtern = check_suffix(infilename);
|
||||
// Strip off suffix
|
||||
|
||||
c = infilename + strlen(infilename);
|
||||
while (c != infilename) {
|
||||
if (*c == '.') {
|
||||
*c = 0;
|
||||
break;
|
||||
} else {
|
||||
c--;
|
||||
}
|
||||
}
|
||||
|
||||
if (!outfile_name) {
|
||||
char *cc = infilename + strlen(infilename);
|
||||
while (cc != infilename) {
|
||||
if (*cc == '/') {
|
||||
cc++;
|
||||
break;
|
||||
}
|
||||
cc--;
|
||||
}
|
||||
sprintf(fn_runtime,"%s_wrap.c",infilename);
|
||||
strcpy(infile,infilename);
|
||||
outfile_name = fn_runtime;
|
||||
} else {
|
||||
sprintf(fn_runtime,"%s",outfile_name);
|
||||
}
|
||||
{
|
||||
// Try to identify the output directory
|
||||
char *cc = outfile_name;
|
||||
char *lastc = outfile_name;
|
||||
while (*cc) {
|
||||
if (*cc == '/') lastc = cc+1;
|
||||
cc++;
|
||||
}
|
||||
cc = outfile_name;
|
||||
char *dd = output_dir;
|
||||
while (cc != lastc) {
|
||||
*dd = *cc;
|
||||
dd++;
|
||||
cc++;
|
||||
}
|
||||
*dd = 0;
|
||||
// Patch up the input filename
|
||||
cc = infilename + strlen(infilename);
|
||||
while (cc != infilename) {
|
||||
if (*cc == '/') {
|
||||
cc++;
|
||||
break;
|
||||
}
|
||||
cc--;
|
||||
}
|
||||
strcpy(infile,cc);
|
||||
}
|
||||
|
||||
// Define the __cplusplus symbol
|
||||
if (CPlusPlus)
|
||||
Preprocessor_define((DOH *) "__cplusplus 1", 0);
|
||||
|
||||
// Run the preprocessor
|
||||
if (Verbose)
|
||||
printf ("Preprocessing...\n");
|
||||
{
|
||||
DOH *cpps;
|
||||
int i;
|
||||
String *fs = NewString("");
|
||||
String *ds = Swig_include(input_file);
|
||||
if (!ds) {
|
||||
Printf(stderr,"Unable to find '%s'\n", input_file);
|
||||
SWIG_exit (EXIT_FAILURE);
|
||||
}
|
||||
if (lang_config) {
|
||||
Printf(fs,"\n%%include \"%s\"\n", lang_config);
|
||||
}
|
||||
Printf(fs,"\n%%file(\"include\") \"%s\" {\n", Swig_last_file());
|
||||
Append(fs, ds);
|
||||
Append(fs,"\n}\n");
|
||||
Delete(ds);
|
||||
for (i = 0; i < Len(libfiles); i++) {
|
||||
Printf(fs,"\n%%include \"%s\"\n", Getitem(libfiles,i));
|
||||
}
|
||||
Seek(fs,0,SEEK_SET);
|
||||
cpps = Preprocessor_parse(fs);
|
||||
if (cpp_only) {
|
||||
Printf(stdout,"%s", cpps);
|
||||
while (freeze);
|
||||
SWIG_exit (EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
// Initialize the scanner
|
||||
Seek(cpps, 0, SEEK_SET);
|
||||
scanner_file(cpps);
|
||||
}
|
||||
if ((f_runtime = fopen(fn_runtime,"w")) == 0) {
|
||||
fprintf(stderr,"Unable to open %s\n", fn_runtime);
|
||||
exit(0);
|
||||
}
|
||||
f_header = NewString("");
|
||||
f_wrappers = NewString("");
|
||||
f_init = NewString("");
|
||||
|
||||
// Set up the typemap for handling new return strings
|
||||
{
|
||||
if (CPlusPlus)
|
||||
Swig_typemap_register((char*)"newfree",(char*)"p.char",(char*)"",(char*)"delete [] $source;\n",0);
|
||||
else
|
||||
Swig_typemap_register((char*)"newfree",(char*)"p.char",(char*)"",(char*)"free($source);\n",0);
|
||||
}
|
||||
|
||||
// If in Objective-C mode. Load in a configuration file
|
||||
|
||||
if (ObjC) {
|
||||
// Add the 'id' object type as a void *
|
||||
/* DataType *t = new DataType(T_VOID);
|
||||
t->is_pointer = 1;
|
||||
t->implicit_ptr = 0;
|
||||
t->typedef_add("id");
|
||||
delete t;
|
||||
*/
|
||||
}
|
||||
|
||||
// Pass control over to the specific language interpreter
|
||||
|
||||
if (Verbose) {
|
||||
fprintf (stdout, "Starting language-specific parse...\n");
|
||||
fflush (stdout);
|
||||
}
|
||||
parser_init();
|
||||
lang->parse();
|
||||
if (Verbose) {
|
||||
fprintf (stdout, "Finished language-specific parse.\n");
|
||||
fflush (stdout);
|
||||
}
|
||||
|
||||
Dump(f_header,f_runtime);
|
||||
Dump(f_wrappers, f_runtime);
|
||||
Wrapper_pretty_print(f_init,f_runtime);
|
||||
fclose(f_runtime);
|
||||
if (checkout) {
|
||||
// File was checked out from the SWIG library. Remove it now
|
||||
remove(input_file);
|
||||
}
|
||||
}
|
||||
if (tm_debug) Swig_typemap_debug();
|
||||
while (freeze);
|
||||
return error_count;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// SWIG_exit(int exit_code)
|
||||
//
|
||||
// Cleanup and either freeze or exit
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
void SWIG_exit(int exit_code) {
|
||||
if (f_runtime) {
|
||||
fclose(f_runtime);
|
||||
remove(fn_runtime);
|
||||
}
|
||||
while (freeze);
|
||||
exit (exit_code);
|
||||
}
|
||||
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// swig_pragma(char *name, char *value)
|
||||
//
|
||||
// Handle pragma directives. Not many supported right now
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
void swig_pragma(char *name, char *value) {
|
||||
|
||||
if (strcmp(name,"make_default") == 0) {
|
||||
GenerateDefault = 1;
|
||||
}
|
||||
if (strcmp(name,"no_default") == 0) {
|
||||
GenerateDefault = 0;
|
||||
}
|
||||
if (strcmp(name,"objc_new") == 0) {
|
||||
objc_construct = Swig_copy_string(value);
|
||||
}
|
||||
if (strcmp(name,"objc_delete") == 0) {
|
||||
objc_destruct = Swig_copy_string(value);
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -1,171 +0,0 @@
|
|||
/* -----------------------------------------------------------------------------
|
||||
* swig11.h
|
||||
*
|
||||
* Main header file for the SWIG1.1 core.
|
||||
*
|
||||
* Author(s) : David Beazley (beazley@cs.uchicago.edu)
|
||||
*
|
||||
* Copyright (C) 1998-2000. The University of Chicago
|
||||
* Copyright (C) 1995-1998. The University of Utah and The Regents of the
|
||||
* University of California.
|
||||
*
|
||||
* See the file LICENSE for information on usage and redistribution.
|
||||
*
|
||||
* $Header$
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "swigver.h"
|
||||
|
||||
extern "C" {
|
||||
#include "swig.h"
|
||||
}
|
||||
|
||||
/* Global variables. Needs to be cleaned up */
|
||||
|
||||
#ifdef MACSWIG
|
||||
#define Status Swig_Status
|
||||
#endif
|
||||
|
||||
#define PLAIN_VIRTUAL 1
|
||||
#define PURE_VIRTUAL 2
|
||||
#define SUPER_VIRTUAL 3
|
||||
|
||||
extern FILE *f_runtime; // Runtime code
|
||||
extern DOH *f_header; // Headers
|
||||
extern DOH *f_wrappers; // Wrappers
|
||||
extern DOH *f_init; // Initialization code
|
||||
extern FILE *f_input;
|
||||
extern char LibDir[512]; // Library directory
|
||||
extern int Status; // Variable creation status
|
||||
extern int yyparse();
|
||||
extern int line_number;
|
||||
extern int start_line;
|
||||
extern char *input_file; // Current input file
|
||||
extern int CPlusPlus; // C++ mode
|
||||
extern int ObjC; // Objective-C mode
|
||||
extern int ObjCClass; // Objective-C style class
|
||||
extern int AddMethods; // AddMethods mode
|
||||
extern int NewObject; // NewObject mode
|
||||
extern int Inline; // Inline mode
|
||||
extern int NoInclude; // NoInclude flag
|
||||
extern char *typemap_lang; // Current language name
|
||||
extern int error_count;
|
||||
extern char output_dir[512]; // Output directory
|
||||
extern int Verbose;
|
||||
extern int IsVirtual;
|
||||
|
||||
#define FatalError() if ((error_count++) > 20) { fprintf(stderr,"Confused by earlier errors. Bailing out\n"); SWIG_exit (EXIT_FAILURE); }
|
||||
|
||||
/* Miscellaneous stuff */
|
||||
|
||||
#define STAT_READONLY 1
|
||||
#define MAXSCOPE 16
|
||||
|
||||
#define tab2 " "
|
||||
#define tab4 " "
|
||||
#define tab8 " "
|
||||
|
||||
// Modes for different types of inheritance
|
||||
|
||||
#define INHERIT_FUNC 0x1
|
||||
#define INHERIT_VAR 0x2
|
||||
#define INHERIT_CONST 0x4
|
||||
#define INHERIT_ALL (INHERIT_FUNC | INHERIT_VAR | INHERIT_CONST)
|
||||
|
||||
struct Pragma {
|
||||
void *filename;
|
||||
int lineno;
|
||||
void *lang;
|
||||
void *name;
|
||||
void *value;
|
||||
Pragma *next;
|
||||
};
|
||||
|
||||
/* Language Class */
|
||||
class Language {
|
||||
public:
|
||||
virtual void parse_args(int argc, char *argv[]) = 0;
|
||||
virtual void parse() = 0;
|
||||
|
||||
/* NEW API */
|
||||
virtual void function(DOH *node) = 0;
|
||||
virtual void variable(DOH *node) = 0;
|
||||
virtual void constant(DOH *node) = 0;
|
||||
virtual void nativefunction(DOH *node);
|
||||
|
||||
/* C++ handling */
|
||||
virtual void cpp_memberfunction(DOH *node);
|
||||
virtual void cpp_constructor(DOH *node);
|
||||
virtual void cpp_destructor(DOH *node);
|
||||
virtual void cpp_variable(DOH *node);
|
||||
virtual void cpp_staticfunction(DOH *node);
|
||||
virtual void cpp_constant(DOH *node);
|
||||
virtual void cpp_staticvariable(DOH *node);
|
||||
|
||||
/* OLD API */
|
||||
|
||||
virtual void initialize(void) = 0;
|
||||
virtual void close(void) = 0;
|
||||
virtual void set_module(char *mod_name) = 0;
|
||||
virtual void add_typedef(SwigType *t, char *name);
|
||||
virtual void create_command(char *cname, char *iname);
|
||||
|
||||
virtual void cpp_open_class(char *name, char *rename, char *ctype, int strip);
|
||||
virtual void cpp_close_class();
|
||||
virtual void cpp_cleanup();
|
||||
virtual void cpp_inherit(char **baseclass, int mode = INHERIT_ALL);
|
||||
virtual void cpp_pragma(Pragma *plist);
|
||||
virtual void pragma(char *, char *, char *);
|
||||
|
||||
// Declaration of a class, but not a full definition
|
||||
|
||||
virtual void cpp_class_decl(char *, char *, char *);
|
||||
|
||||
// Import directive
|
||||
virtual void import(char *filename);
|
||||
|
||||
};
|
||||
|
||||
/* Emit functions */
|
||||
|
||||
extern void new_create_function(char *, char *, SwigType *, ParmList *);
|
||||
extern void emit_set_get(DOH *node);
|
||||
extern void emit_set_action(DOHString_or_char *decl);
|
||||
|
||||
extern int SWIG_main(int, char **, Language *);
|
||||
|
||||
/* These are in the new core */
|
||||
|
||||
extern "C" {
|
||||
/* Option processing */
|
||||
extern void Swig_init_args(int argc, char **);
|
||||
extern void Swig_mark_arg(int n);
|
||||
extern void Swig_check_options();
|
||||
extern void Swig_arg_error();
|
||||
extern void *Preprocessor_define(void *, int);
|
||||
extern int Swig_insert_file(const void *filename, void *outfile);
|
||||
extern FILE *Swig_open(const void *filename);
|
||||
extern char *Swig_copy_string(const char *s);
|
||||
}
|
||||
|
||||
// Misc
|
||||
|
||||
extern int emit_args(DOH *node, Wrapper *f);
|
||||
extern void emit_func_call(DOH *node, Wrapper *f);
|
||||
extern void SWIG_exit(int); /* use EXIT_{SUCCESS,FAILURE} */
|
||||
extern int check_numopt(ParmList *);
|
||||
extern void SWIG_config_file(const String_or_char *);
|
||||
|
||||
/* swig11.h ends here */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue