Slash, burn, crash, crumble. Don't mind me.

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@279 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Dave Beazley 2000-02-27 03:47:17 +00:00
commit 77cb823ab6
13 changed files with 88 additions and 317 deletions

View file

@ -1,7 +1,5 @@
/* SWIG version information */
#define SWIG_MAJOR_VERSION 1
#define SWIG_MINOR_VERSION 3
#define SWIG_VERSION "1.3u-20000226-1923"
#define SWIG_SPIN "(Alpha 1)"

View file

@ -213,7 +213,7 @@ GUILE::headers (void)
// Write out hex conversion functions
if (!NoInclude) {
if (insert_file ("guile.swg", f_header) == -1) {
if (Swig_insert_file ("guile.swg", f_header) == -1) {
fprintf (stderr, "SWIG : Fatal error. ");
fprintf (stderr, "Unable to locate 'guile.swg' in SWIG library.\n");
SWIG_exit (1);

View file

@ -404,7 +404,7 @@ void JAVA::headers(void)
// Include header file code fragment into the output
// if (file::include("java.swg",f_header) == -1) {
if (insert_file("java.swg",f_header) == -1) {
if (Swig_insert_file("java.swg",f_header) == -1) {
fprintf(stderr,"Fatal Error. Unable to locate 'java.swg'.\n");
SWIG_exit(1);
}

View file

@ -295,12 +295,12 @@ void PERL5::headers(void)
emit_banner(f_header);
if (!alt_header) {
if (insert_file("headers.swg", f_header) == -1) {
if (Swig_insert_file("headers.swg", f_header) == -1) {
fprintf(stderr,"Perl5 : Fatal error. Unable to locate headers.swg. Possible installation problem.\n");
SWIG_exit(1);
}
} else {
if (insert_file(alt_header, f_header) == -1) {
if (Swig_insert_file(alt_header, f_header) == -1) {
fprintf(stderr,"SWIG : Fatal error. Unable to locate %s.\n",alt_header);
SWIG_exit(1);
}
@ -311,13 +311,13 @@ void PERL5::headers(void)
}
// Get special SWIG related declarations
if (insert_file("perl5.swg", f_header) == -1) {
if (Swig_insert_file("perl5.swg", f_header) == -1) {
fprintf(stderr,"SWIG : Fatal error. Unable to locate 'perl5.swg' in SWIG library.\n");
SWIG_exit(1);
}
// Get special SWIG related declarations
if (insert_file("perl5mg.swg", f_header) == -1) {
if (Swig_insert_file("perl5mg.swg", f_header) == -1) {
fprintf(stderr,"SWIG : Fatal error. Unable to locate 'perl5mg.swg' in SWIG library.\n");
SWIG_exit(1);
}
@ -2225,8 +2225,14 @@ void PERL5::pragma(char *lang, char *code, char *value) {
} else if (strcmp(code,"include") == 0) {
// Include a file into the .pm file
if (value) {
if (get_file(value,pragma_include) == -1) {
FILE *f = Swig_open(value);
if (!f) {
fprintf(stderr,"%s : Line %d. Unable to locate file %s\n", input_file, line_number,value);
} else {
char buffer[4096];
while (fgets(buffer,4095,f)) {
pragma_include << buffer;
}
}
}
} else {

View file

@ -262,7 +262,7 @@ void PYTHON::headers(void)
if (NoInclude)
fprintf(f_runtime,"#define SWIG_NOINCLUDE\n");
if (insert_file("python.swg", f_runtime) == -1) {
if (Swig_insert_file("python.swg", f_runtime) == -1) {
fprintf(stderr,"SWIG : Fatal error. Unable to locate python.swg. (Possible installation problem).\n");
SWIG_exit(1);
}
@ -1455,8 +1455,14 @@ void PYTHON::pragma(char *lang, char *cmd, char *value) {
} else if (strcmp(cmd,"include") == 0) {
if (shadow) {
if (value) {
if (get_file(value,pragma_include) == -1) {
fprintf(stderr,"%s : Line %d. Unable to locate file %s\n", input_file, line_number, value);
FILE *f = Swig_open(value);
if (!f) {
fprintf(stderr,"%s : Line %d. Unable to locate file %s\n", input_file, line_number,value);
} else {
char buffer[4096];
while (fgets(buffer,4095,f)) {
pragma_include << buffer;
}
}
}
}

View file

@ -241,7 +241,7 @@ void TCL8::headers(void)
fprintf(f_runtime,"#define SWIG_NOINCLUDE\n");
}
if (insert_file("swigtcl8.swg",f_runtime) == -1) {
if (Swig_insert_file("swigtcl8.swg",f_runtime) == -1) {
fprintf(stderr,"SWIG : Fatal error. Unable to locate 'swigtcl8.swg' in SWIG library.\n");
SWIG_exit(1);
}
@ -1224,7 +1224,7 @@ void TCL8::cpp_open_class(char *classname, char *rename, char *ctype, int strip)
if (shadow) {
static int included_object = 0;
if (!included_object) {
if (insert_file("object.swg",f_header) == -1) {
if (Swig_insert_file("object.swg",f_header) == -1) {
fprintf(stderr,"SWIG : Fatal error. Unable to locate 'object.swg' in SWIG library.\n");
SWIG_exit(1);
}

View file

@ -14,11 +14,11 @@ RANLIB = @RANLIB@
TARGET = libswig11.a
OBJS = parser.o main.o scanner.o symbol.o types.o include.o parms.o \
OBJS = parser.o main.o scanner.o symbol.o types.o parms.o \
emit.o cplus.o lang.o hash.o sstring.o wrapfunc.o \
typemap.o naming.o
SRCS = main.cxx scanner.cxx symbol.cxx include.cxx types.cxx parms.cxx \
SRCS = main.cxx scanner.cxx symbol.cxx types.cxx parms.cxx \
emit.cxx cplus.cxx lang.cxx hash.cxx \
sstring.cxx wrapfunc.cxx typemap.cxx naming.cxx

View file

@ -205,93 +205,6 @@ char *emit_local(int i) {
return arg;
}
// -----------------------------------------------------------------------------
// int emit_args(char *d, DataType *rt, ParmList *l, FILE *f)
//
// Creates a list of variable declarations for both the return value
// and function parameters.
//
// The return value is always called _result and arguments label as
// _arg0, _arg1, _arg2, etc...
//
// Returns the number of parameters associated with a function.
// -----------------------------------------------------------------------------
int emit_args(DataType *rt, ParmList *l, FILE *f) {
Parm *p;
int i;
char temp[64];
String def;
char *tm;
// Declare the return variable
if ((rt->type != T_VOID) || (rt->is_pointer)) {
if ((rt->type == T_USER) && (!rt->is_pointer)) {
// Special case for return by "value"
rt->is_pointer++;
fprintf(f,"\t %s _result;\n", rt->print_type());
rt->is_pointer--;
} else {
// Normal return value
fprintf(f,"\t %s _result;\n", rt->print_type());
}
}
// Emit function arguments
i = 0;
p = l->get_first();
while (p != 0) {
if ((p->t->type != T_VOID) || (p->t->is_pointer)) {
sprintf(temp,"_arg%d", i);
if (p->defvalue) {
if ((p->t->is_reference) || ((p->t->type == T_USER) && (p->call_type == CALL_REFERENCE)))
fprintf(f,"\t %s _arg%d = &%s;\n", p->t->print_type(),i, p->defvalue);
else
fprintf(f,"\t %s _arg%d = %s;\n", p->t->print_type(),i, p->defvalue);
} else {
fprintf(f,"\t %s _arg%d;\n", p->t->print_type(),i);
tm = typemap_lookup("arginit", typemap_lang, p->t, p->name,"",temp);
if (tm) {
def << tm;
}
}
// Check for ignore or default typemaps
tm = typemap_lookup("default",typemap_lang,p->t,p->name,"",temp);
if (tm)
def << tm;
tm = typemap_lookup("ignore",typemap_lang,p->t,p->name,"",temp);
if (tm) {
def << tm;
p->ignore = 1;
}
tm = typemap_check("build",typemap_lang,p->t,p->name);
if (tm) {
p->ignore = 1;
}
i++;
}
p = l->get_next();
}
fprintf(f,"%s",def.get());
// i now contains number of parameters
return(i);
}
// -----------------------------------------------------------------------------
// int emit_args(char *d, DataType *rt, ParmList *l, WrapperFunction &f)
//
@ -375,86 +288,6 @@ int emit_args(DataType *rt, ParmList *l, WrapperFunction &f) {
return(i);
}
// -----------------------------------------------------------------------------
// int emit_func_call(char *decl, DataType *t, ParmList *l, FILE *f)
//
// Emits code for a function call.
// -----------------------------------------------------------------------------
void emit_func_call(char *decl, DataType *t, ParmList *l, FILE *f) {
int i;
Parm *p;
// fprintf(f,"#line %d \"%s\"\n", line_number, input_file);
fprintf(f,"\t ");
// First check if there is a return value
if ((t->type != T_VOID) || (t->is_pointer)) {
if ((t->type == T_USER) && (!t->is_pointer)) {
// Special case for return by "value"
// Caution : This *will* cause a memory leak if not
// used properly.
if (CPlusPlus) {
fprintf(f,"_result = new %s(", t->print_type());
} else {
t->is_pointer++;
fprintf(f,"_result = %s malloc(sizeof(", t->print_cast());
t->is_pointer--;
fprintf(f,"%s));\n", t->print_type());
fprintf(f,"\t*(_result) = ");
}
} else {
// Check if this is a C++ reference
if (t->is_reference) {
t->is_pointer--;
fprintf(f,"%s& _result_ref = ", t->print_full());
t->is_pointer++;
} else {
// Normal return values
fprintf(f,"_result = %s", t->print_cast());
}
}
}
// Now print out function call
fprintf(f,"%s(",decl);
i = 0;
p = l->get_first();
while(p != 0) {
if ((p->t->type != T_VOID) || (p->t->is_pointer)){
fprintf(f,"%s",p->t->print_arraycast());
if ((!p->t->is_reference) && (p->call_type & CALL_VALUE)) fprintf(f,"&");
if ((!(p->call_type & CALL_VALUE)) &&
((p->t->is_reference) || (p->call_type & CALL_REFERENCE)))
fprintf(f,"*");
fprintf(f,"_arg%d",i);
i++;
}
p = l->get_next();
if (p != 0)
fprintf(f,",");
}
fprintf(f,")");
if ((t->type == T_USER) && (!t->is_pointer)) {
if (CPlusPlus) {
fprintf(f,")");
}
}
fprintf(f,";\n");
if (t->is_reference) {
fprintf(f,"\t _result = %s &_result_ref;\n", t->print_cast());
}
}
// -----------------------------------------------------------------------------
// int emit_func_call(char *decl, DataType *t, ParmList *l, WrapperFunction &f)
@ -562,27 +395,6 @@ void emit_func_call(char *decl, DataType *t, ParmList *l, WrapperFunction &f) {
}
}
// -----------------------------------------------------------------------------
// void emit_hex(FILE *f)
//
// Emits the default C-code to handle pointers. This is normally contained
// in the SWIG library file 'swigptr.swg'
// -----------------------------------------------------------------------------
void emit_hex(FILE *f) {
int stat;
// Look for a pointer configuration file
stat = insert_file("swigptr.swg", f);
if (stat == -1) {
fprintf(stderr,"** Fatal error. Unable to locate 'swigptr.swg'\n");
SWIG_exit(1);
}
}
// -----------------------------------------------------------------------------
// void emit_set_get(char *name, char *iname, DataType *type)
//

View file

@ -1,93 +0,0 @@
/* -----------------------------------------------------------------------------
* include.cxx
*
* File inclusion functions. This file is deprecated. These are only a
* thin wrapper over the functions in Swig/include.c.
*
* 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"
extern "C" FILE *Swig_open(void *);
// -----------------------------------------------------------------------------
// 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;
}
// -----------------------------------------------------------------------------
// int insert_file(char *filename, FILE *f)
//
// Appends the contents of filename to stream f.
// -----------------------------------------------------------------------------
int insert_file(char *filename, FILE *f) {
FILE *in_file;
char buffer[1024];
if ((in_file = Swig_open((void *) filename)) == NULL) {
return -1;
}
while (fgets(buffer,1023,in_file)) {
fputs(buffer, f);
}
fclose(in_file);
return 0;
}
// -----------------------------------------------------------------------------
// int get_file(char *name, String &str)
//
// Looks for a file and converts it into a String.
// -----------------------------------------------------------------------------
int get_file(char *name, String &str) {
FILE *f;
char buffer[1024];
f = Swig_open((void *) name);
if (!f) {
fprintf(stderr,"SWIG Error. Unable to find %s. Possible installation problem.\n",name);
FatalError();
return -1;
}
while (fgets(buffer,1023,f)) {
str << buffer;
}
fclose(f);
return 0;
}

View file

@ -77,6 +77,34 @@ static char *usage = "\
-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()
//
@ -342,10 +370,10 @@ int SWIG_main(int argc, char *argv[], Language *l) {
sprintf(fn_wrapper,"%s%s_wrap.wrap",output_dir,infile);
sprintf(fn_init,"%s%s_wrap.init",output_dir,infile);
printf("%s\n", input_file);
printf("%s\n", fn_cpp);
printf("%s\n", fn_wrapper);
printf("%s\n", fn_init);
// printf("%s\n", input_file);
// printf("%s\n", fn_cpp);
// printf("%s\n", fn_wrapper);
// printf("%s\n", fn_init);
// Define the __cplusplus symbol
if (CPlusPlus)
@ -440,9 +468,9 @@ int SWIG_main(int argc, char *argv[], Language *l) {
fclose(f_wrappers);
fclose(f_init);
insert_file(fn_header, f_runtime);
insert_file(fn_wrapper,f_runtime);
insert_file(fn_init,f_runtime);
Swig_insert_file(fn_header, f_runtime);
Swig_insert_file(fn_wrapper,f_runtime);
Swig_insert_file(fn_init,f_runtime);
fclose(f_runtime);

View file

@ -459,11 +459,6 @@ extern void cplus_emit_variable_set(char *classname, char *classtype, char *clas
extern char *cplus_base_class(char *name);
/* Function for building search directories */
extern int insert_file(char *, FILE *);
extern int get_file(char *filename, String &str);
/* These are in the new core */
extern "C" {
@ -473,6 +468,8 @@ extern "C" {
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);
}
// -----------------------------------------------------------------------

View file

@ -28,7 +28,7 @@ static int bytes_read = 0; /* Bytes read */
* ----------------------------------------------------------------------------- */
void
Swig_add_directory(DOH *dirname) {
Swig_add_directory(const DOH *dirname) {
if (!directories) directories = NewList();
assert(directories);
if (!String_check(dirname)) {
@ -86,7 +86,7 @@ Swig_search_path() {
* ----------------------------------------------------------------------------- */
FILE *
Swig_open(DOH *name) {
Swig_open(const DOH *name) {
FILE *f;
DOH *filename;
DOH *spath = 0;
@ -143,7 +143,7 @@ Swig_read_file(FILE *f) {
* ----------------------------------------------------------------------------- */
DOH *
Swig_include(DOH *name) {
Swig_include(const DOH *name) {
FILE *f;
DOH *str;
f = Swig_open(name);
@ -157,7 +157,23 @@ Swig_include(DOH *name) {
return str;
}
/* -----------------------------------------------------------------------------
* Swig_insert_file()
*
* Copies the contents of a file into another file
* ----------------------------------------------------------------------------- */
int
Swig_insert_file(const DOH *filename, DOH *outfile) {
char buffer[4096];
int nbytes;
FILE *f = Swig_open(filename);
if (!f) return -1;
while ((nbytes = Read(f,buffer,4096)) > 0) {
Write(outfile,buffer,nbytes);
}
return 0;
}

View file

@ -28,12 +28,13 @@ extern "C" {
/* --- File interface --- */
extern void Swig_add_directory(DOH *dirname);
extern void Swig_add_directory(const DOH *dirname);
extern DOH *Swig_last_file();
extern DOH *Swig_search_path();
extern FILE *Swig_open(DOH *name);
extern FILE *Swig_open(const DOH *name);
extern DOH *Swig_read_file(FILE *f);
extern DOH *Swig_include(DOH *name);
extern DOH *Swig_include(const DOH *name);
extern int Swig_insert_file(const DOH *name, DOH *outfile);
#define SWIG_FILE_DELIMETER "/"