From ef5e8a5b090ab7151eb37542733c2db0088af762 Mon Sep 17 00:00:00 2001 From: Dave Beazley Date: Fri, 11 Aug 2000 16:34:31 +0000 Subject: [PATCH] SWIG no longer generates temporary files. git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@644 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- SWIG/Source/Modules1.1/ruby.cxx | 2 +- SWIG/Source/SWIG1.1/cplus.cxx | 6 +- SWIG/Source/SWIG1.1/lang.cxx | 24 +-- SWIG/Source/SWIG1.1/main.cxx | 97 ++------- SWIG/Source/SWIG1.1/parser.yxx | 196 +++++++++--------- SWIG/Source/SWIG1.1/scanner.cxx | 340 ++++++++++++-------------------- SWIG/Source/SWIG1.1/swig11.h | 6 +- SWIG/Source/SWIG1.1/typemap.cxx | 12 +- SWIG/Source/Swig/swig.h | 2 +- 9 files changed, 264 insertions(+), 421 deletions(-) diff --git a/SWIG/Source/Modules1.1/ruby.cxx b/SWIG/Source/Modules1.1/ruby.cxx index 03e278d21..81d38ce7a 100644 --- a/SWIG/Source/Modules1.1/ruby.cxx +++ b/SWIG/Source/Modules1.1/ruby.cxx @@ -237,7 +237,7 @@ void RUBY::set_module(char *mod_name, char **mod_list) { } -static void insert_file(char *filename, FILE *file) { +static void insert_file(char *filename, DOHFile *file) { if (Swig_insert_file(filename, file) == -1) { Printf(stderr, "SWIG : Fatal error. " diff --git a/SWIG/Source/SWIG1.1/cplus.cxx b/SWIG/Source/SWIG1.1/cplus.cxx index 1acdf4fcd..f7ac6e402 100644 --- a/SWIG/Source/SWIG1.1/cplus.cxx +++ b/SWIG/Source/SWIG1.1/cplus.cxx @@ -792,7 +792,7 @@ void cplus_set_class(char *name) { current_class = c; localtypes = c->local; } else { - fprintf(stderr,"%s:%d: Warning class %s undefined.\n",input_file,line_number,name); + Printf(stderr,"%s:%d: Warning class %s undefined.\n",input_file,line_number,name); current_class = new CPP_class(name,0); localtypes = current_class->local; } @@ -987,7 +987,7 @@ void cplus_generate_types(char **baseclass) { "}\n", 0); - fprintf(f_wrappers,"%s\n",Char(cfunc)); + Printf(f_wrappers,"%s\n",Char(cfunc)); } } else { Clear(temp3); @@ -1082,7 +1082,7 @@ void cplus_inherit_members(char *baseclass, int mode) { if (bc) { bc->inherit_decls(mode); } else { - fprintf(stderr,"%s:%d: Warning. Base class %s undefined (ignored).\n", input_file, current_class->line, baseclass); + Printf(stderr,"%s:%d: Warning. Base class %s undefined (ignored).\n", input_file, current_class->line, baseclass); } } diff --git a/SWIG/Source/SWIG1.1/lang.cxx b/SWIG/Source/SWIG1.1/lang.cxx index 2fb78eaa4..a3a73c84e 100644 --- a/SWIG/Source/SWIG1.1/lang.cxx +++ b/SWIG/Source/SWIG1.1/lang.cxx @@ -40,8 +40,8 @@ void Language::set_init(char *iname) { * ----------------------------------------------------------------- */ void Language::create_command(char *, char *) { - fprintf(stderr,"SWIG Warning. No command creation procedure defined.\n"); - fprintf(stderr,"C++ inheritance may not work correctly.\n"); + Printf(stderr,"SWIG Warning. No command creation procedure defined.\n"); + Printf(stderr,"C++ inheritance may not work correctly.\n"); } /* ----------------------------------------------------------------- @@ -53,7 +53,7 @@ void Language::create_command(char *, char *) { void Language::add_native(char *, char *iname, DataType *, ParmList *) { - fprintf(stderr,"%s : Line %d. Adding native function %s not supported (ignored).\n", input_file, line_number, iname); + Printf(stderr,"%s : Line %d. Adding native function %s not supported (ignored).\n", input_file, line_number, iname); } static char *ClassName = 0; /* This is the real name of the current class */ @@ -172,7 +172,7 @@ void Language::cpp_member_func(char *name, char *iname, DataType *t, ParmList *l /* Now do a symbol table lookup on it : */ if (add_symbol(new_name)) { - fprintf(stderr,"%s : Line %d. Function %s (member %s) multiply defined (2nd definition ignored).\n", + Printf(stderr,"%s : Line %d. Function %s (member %s) multiply defined (2nd definition ignored).\n", input_file, line_number, cname, name); return; } @@ -195,7 +195,7 @@ void Language::cpp_constructor(char *name, char *iname, ParmList *l) { char *prefix, *cname; if ((strcmp(name,ClassName)) && (!ObjCClass)) { - fprintf(stderr,"%s : Line %d. Function %s must have a return type.\n", + Printf(stderr,"%s : Line %d. Function %s must have a return type.\n", input_file, line_number, name); return; } @@ -215,7 +215,7 @@ void Language::cpp_constructor(char *name, char *iname, ParmList *l) { /* Add this function to the SWIG symbol table */ if (add_symbol(cname)) { - fprintf(stderr,"%s : Line %d. Constructor %s multiply defined (2nd definition ignored).\n", + Printf(stderr,"%s : Line %d. Constructor %s multiply defined (2nd definition ignored).\n", input_file, line_number, cname); return; } @@ -249,7 +249,7 @@ void Language::cpp_destructor(char *name, char *iname) { /* Add this function to the SWIG symbol table */ if (add_symbol(cname)) { - fprintf(stderr,"%s : Line %d. Destructor %s multiply defined (2nd definition ignored).\n", + Printf(stderr,"%s : Line %d. Destructor %s multiply defined (2nd definition ignored).\n", input_file, line_number, cname); return; } @@ -327,7 +327,7 @@ void Language::cpp_variable(char *name, char *iname, DataType *t) { /* Check the symbol table */ if (add_symbol(cname)) { - fprintf(stderr,"%s : Line %d. Variable %s multiply defined (2nd definition ignored).\n", input_file, line_number, cname); + Printf(stderr,"%s : Line %d. Variable %s multiply defined (2nd definition ignored).\n", input_file, line_number, cname); return; } @@ -381,10 +381,10 @@ void Language::cpp_static_func(char *name, char *iname, DataType *t, ParmList *l if (add_symbol(cname)) { if (ObjCClass) - fprintf(stderr,"%s : Line %d. class function %s multiply defined (2nd definition ignored).\n", + Printf(stderr,"%s : Line %d. class function %s multiply defined (2nd definition ignored).\n", input_file, line_number, cname); else - fprintf(stderr,"%s : Line %d. static function %s multiply defined (2nd definition ignored).\n", + Printf(stderr,"%s : Line %d. static function %s multiply defined (2nd definition ignored).\n", input_file, line_number, cname); return; } @@ -431,7 +431,7 @@ void Language::cpp_declare_const(char *name, char *iname, DataType *type, char * /* Now do a symbol table lookup on it : */ if (add_symbol(cname)) { - fprintf(stderr,"%s : Line %d. Constant %s (member %s) multiply defined (2nd definition ignored).\n", + Printf(stderr,"%s : Line %d. Constant %s (member %s) multiply defined (2nd definition ignored).\n", input_file, line_number, cname, name); return; } @@ -491,7 +491,7 @@ void Language::cpp_static_var(char *name, char *iname, DataType *t) { /* Now do a symbol table lookup on it : */ if (add_symbol(cname)) { - fprintf(stderr,"%s : Line %d. Variable %s (member %s) multiply defined (2nd definition ignored).\n", + Printf(stderr,"%s : Line %d. Variable %s (member %s) multiply defined (2nd definition ignored).\n", input_file, line_number, cname, name); return; } diff --git a/SWIG/Source/SWIG1.1/main.cxx b/SWIG/Source/SWIG1.1/main.cxx index 51c7c6968..0dfcfe75b 100644 --- a/SWIG/Source/SWIG1.1/main.cxx +++ b/SWIG/Source/SWIG1.1/main.cxx @@ -36,9 +36,9 @@ extern "C" { // Global variables FILE *f_runtime; - FILE *f_header; // Some commonly used - FILE *f_wrappers; // FILE pointers - FILE *f_init; + DOH *f_header; // Some commonly used + DOH *f_wrappers; // FILE pointers + DOH *f_init; FILE *f_input; char InitName[256]; char LibDir[512]; // Library directory @@ -116,10 +116,6 @@ check_suffix(char *name) { char infilename[256]; char filename[256]; -char fn_cpp[256]; -char fn_header[256]; -char fn_wrapper[256]; -char fn_init[256]; char output_dir[512]; char fn_runtime[256]; @@ -146,7 +142,7 @@ int SWIG_main(int argc, char *argv[], Language *l) { char *includefiles[256]; int includecount = 0; extern int check_suffix(char *); - extern void scanner_file(FILE *); + extern void scanner_file(DOHFile *); extern void typemap_initialize(void); extern void parser_init(void); @@ -378,16 +374,6 @@ int SWIG_main(int argc, char *argv[], Language *l) { strcpy(infile,cc); } - sprintf(fn_cpp,"%s%s_wrap.ii", output_dir, infile); - sprintf(fn_header,"%s%s_wrap.head", output_dir,infile); - 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); - // Define the __cplusplus symbol if (CPlusPlus) Preprocessor_define((DOH *) "__cplusplus 1", 0); @@ -397,7 +383,6 @@ int SWIG_main(int argc, char *argv[], Language *l) { printf ("Preprocessing...\n"); { DOH *cpps; - FILE *f; int i; DOH *ds = Swig_include(input_file); if (!ds) { @@ -415,43 +400,18 @@ int SWIG_main(int argc, char *argv[], Language *l) { while (freeze); SWIG_exit(0); } - f = fopen(fn_cpp,"w"); - fwrite(Char(cpps),1, Len(cpps), f); - fclose(f); + + // Initialize the scanner + Seek(cpps, 0, SEEK_SET); + scanner_file(cpps); } - - if ((f_input = fopen(fn_cpp,"r")) == 0) { - fprintf(stderr,"Unable to open %s\n", fn_cpp); - SWIG_exit(0); - } - - // Initialize the scanner - if (Verbose) - printf ("Scanning...\n"); - LEX_in = f_input; - scanner_file(LEX_in); - - //printf("fn_cpp = %s\n", fn_cpp); - //printf("fn_header = %s\n", fn_header); - //printf("fn_wrapper = %s\n", fn_wrapper); - //printf("fn_init = %s\n", fn_init); - if ((f_runtime = fopen(fn_runtime,"w")) == 0) { fprintf(stderr,"Unable to open %s\n", fn_runtime); exit(0); } - if((f_header = fopen(fn_header,"w")) == 0) { - fprintf(stderr,"Unable to open %s\n", fn_header); - exit(0); - } - if((f_wrappers = fopen(fn_wrapper,"w")) == 0) { - fprintf(stderr,"Unable to open %s\n",fn_wrapper); - exit(0); - } - if ((f_init = fopen(fn_init,"w")) == 0) { - fprintf(stderr,"Unable to open %s\n",fn_init); - exit(0); - } + f_header = NewString(""); + f_wrappers = NewString(""); + f_init = NewString(""); // Set up the typemap for handling new return strings { @@ -490,25 +450,10 @@ int SWIG_main(int argc, char *argv[], Language *l) { fflush (stdout); } - fclose(f_header); - fclose(f_wrappers); - fclose(f_init); - - Swig_insert_file(fn_header, f_runtime); - Swig_insert_file(fn_wrapper,f_runtime); - Swig_insert_file(fn_init,f_runtime); - + Dump(f_header,f_runtime); + Dump(f_wrappers, f_runtime); + Dump(f_init, f_runtime); fclose(f_runtime); - - // Remove temporary files - if (Verbose) - printf ("Cleaning up...\n"); - - remove(fn_cpp); - remove(fn_header); - remove(fn_wrapper); - remove(fn_init); - if (checkout) { // File was checked out from the SWIG library. Remove it now remove(input_file); @@ -525,24 +470,10 @@ int SWIG_main(int argc, char *argv[], Language *l) { // -------------------------------------------------------------------------- void SWIG_exit(int) { - - if (f_wrappers) { - fclose(f_wrappers); - remove(fn_wrapper); - } - if (f_header) { - fclose(f_header); - remove(fn_header); - } - if (f_init) { - fclose(f_init); - remove(fn_init); - } if (f_runtime) { fclose(f_runtime); remove(fn_runtime); } - remove (fn_cpp); while (freeze); exit(1); } diff --git a/SWIG/Source/SWIG1.1/parser.yxx b/SWIG/Source/SWIG1.1/parser.yxx index 1371f1b82..931c00e90 100644 --- a/SWIG/Source/SWIG1.1/parser.yxx +++ b/SWIG/Source/SWIG1.1/parser.yxx @@ -201,25 +201,25 @@ static void format_string(char *str) { // Emit an external function declaration -static void emit_extern_func(char *decl, DataType *t, ParmList *L, int extern_type, FILE *f) { +static void emit_extern_func(char *decl, DataType *t, ParmList *L, int extern_type, DOHFile *f) { switch(extern_type) { case 0: - fprintf(f,"%s", DataType_str(t,0)); - fprintf(f,"%s(%s);\n", decl, ParmList_protostr(L)); + Printf(f,"%s", DataType_str(t,0)); + Printf(f,"%s(%s);\n", decl, ParmList_protostr(L)); break; case 1: - fprintf(f,"extern %s", DataType_str(t,0)); - fprintf(f,"%s(%s);\n", decl, ParmList_protostr(L)); + Printf(f,"extern %s", DataType_str(t,0)); + Printf(f,"%s(%s);\n", decl, ParmList_protostr(L)); break; case 2: /* A C++ --- > C Extern */ - fprintf(f,"extern \"C\" %s", DataType_str(t,0)); - fprintf(f,"%s(%s);\n", decl, ParmList_protostr(L)); + Printf(f,"extern \"C\" %s", DataType_str(t,0)); + Printf(f,"%s(%s);\n", decl, ParmList_protostr(L)); break; case 3: - fprintf(f,"%s", DataType_str(t,0)); - fprintf(f,"%s(%s)\n", decl, ParmList_str(L)); + Printf(f,"%s", DataType_str(t,0)); + Printf(f,"%s(%s)\n", decl, ParmList_str(L)); break; default: break; @@ -267,7 +267,7 @@ int promote(int t1, int t2) { if ((t1 == T_SHORT) || (t2 == T_SHORT)) return T_SHORT; if ((t1 == T_UCHAR) || (t2 == T_UCHAR)) return T_UCHAR; if (t1 != t2) { - fprintf(stderr,"%s : Line %d. Type mismatch in constant expression\n", + Printf(stderr,"%s : Line %d. Type mismatch in constant expression\n", input_file, line_number); FatalError(); } @@ -320,7 +320,7 @@ void create_function(int ext, char *name, DataType *t, ParmList *l) { // Check if symbol already exists if (add_symbol(iname)) { - fprintf(stderr,"%s : Line %d. Function %s multiply defined (2nd definition ignored).\n", + Printf(stderr,"%s : Line %d. Function %s multiply defined (2nd definition ignored).\n", input_file, line_number, iname); } else { @@ -355,7 +355,7 @@ void create_variable(int ext, char *name, DataType *t) { char *iname = make_name(name); if (add_symbol(iname)) { - fprintf(stderr,"%s : Line %d. Variable %s multiply defined (2nd definition ignored).\n", + Printf(stderr,"%s : Line %d. Variable %s multiply defined (2nd definition ignored).\n", input_file, line_number, iname); } else { @@ -388,7 +388,7 @@ void create_constant(char *name, DataType *type, char *value) { init_language(); if (Rename_true) { - fprintf(stderr,"%s : Line %d. %%name directive ignored with #define\n", + Printf(stderr,"%s : Line %d. %%name directive ignored with #define\n", input_file, line_number); Rename_true = 0; } @@ -399,7 +399,7 @@ void create_constant(char *name, DataType *type, char *value) { if (!value) value = Swig_copy_string(name); sprintf(temp_name,"const:%s", name); if (add_symbol(temp_name)) { - fprintf(stderr,"%s : Line %d. Constant %s multiply defined. (2nd definition ignored)\n", + Printf(stderr,"%s : Line %d. Constant %s multiply defined. (2nd definition ignored)\n", input_file, line_number, name); } else { if (!WrapExtern) { // Only wrap the constant if not in %extern mode @@ -414,7 +414,7 @@ void create_constant(char *name, DataType *type, char *value) { void print_array() { int i; for (i = 0; i < InArray; i++) - fprintf(stderr,"[]"); + Printf(stderr,"[]"); } // Structures for handling code fragments built for nested classes @@ -467,7 +467,7 @@ static void dump_nested(char *parent) { // Dump the code to the scanner - fprintf(f_header,"\n%s\n", Char(n->code)); + Printf(f_header,"\n%s\n", Char(n->code)); start_inline(Char(n->code),n->line); n1 = n->next; @@ -662,7 +662,7 @@ statement : INCLUDE STRING LBRACE { DataType_set_arraystr($2,Char(ArrayString)); } if ($3.is_reference) { - fprintf(stderr,"%s : Line %d. Error. Linkage to C++ reference not allowed.\n", input_file, line_number); + Printf(stderr,"%s : Line %d. Error. Linkage to C++ reference not allowed.\n", input_file, line_number); FatalError(); } else { if (DataType_qualifier($2)) { @@ -683,7 +683,7 @@ statement : INCLUDE STRING LBRACE { | extern strict_type LPAREN STAR { skip_decl(); - fprintf(stderr,"%s : Line %d. Function pointers not currently supported.\n", + Printf(stderr,"%s : Line %d. Function pointers not currently supported.\n", input_file, line_number); } @@ -700,7 +700,7 @@ statement : INCLUDE STRING LBRACE { | STATIC strict_type LPAREN STAR { skip_decl(); - fprintf(stderr,"%s : Line %d. Function pointers not currently supported.\n", + Printf(stderr,"%s : Line %d. Function pointers not currently supported.\n", input_file, line_number); } @@ -763,13 +763,13 @@ statement : INCLUDE STRING LBRACE { add_pointers($2,$3.is_pointer); if ($3.is_reference) DataType_add_reference($2); if (Inline) { - fprintf(stderr,"%s : Line %d. Repeated %%inline directive.\n",input_file,line_number); + Printf(stderr,"%s : Line %d. Repeated %%inline directive.\n",input_file,line_number); FatalError(); } else { if (strlen(Char(CCode))) { - fprintf(f_header,"static "); + Printf(f_header,"static "); emit_extern_func($3.id,$2,$5,3,f_header); - fprintf(f_header,"%s\n",Char(CCode)); + Printf(f_header,"%s\n",Char(CCode)); } create_function(0, $3.id, $2, $5); } @@ -822,7 +822,7 @@ statement : INCLUDE STRING LBRACE { /* Empty name directive. No longer allowed */ | NAME LPAREN RPAREN { - fprintf(stderr,"%s : Lind %d. Empty %%name() is no longer supported.\n", + Printf(stderr,"%s : Lind %d. Empty %%name() is no longer supported.\n", input_file, line_number); FatalError(); } cpp { @@ -835,7 +835,7 @@ statement : INCLUDE STRING LBRACE { if (!WrapExtern) { init_language(); if (add_symbol($3)) { - fprintf(stderr,"%s : Line %d. Name of native function %s conflicts with previous declaration (ignored)\n", + Printf(stderr,"%s : Line %d. Name of native function %s conflicts with previous declaration (ignored)\n", input_file, line_number, $3); } else { lang->add_native($3,$6,0,0); @@ -847,7 +847,7 @@ statement : INCLUDE STRING LBRACE { init_language(); add_pointers($6,$7.is_pointer); if (add_symbol($3)) { - fprintf(stderr,"%s : Line %d. Name of native function %s conflicts with previous declaration (ignored)\n", + Printf(stderr,"%s : Line %d. Name of native function %s conflicts with previous declaration (ignored)\n", input_file, line_number, $3); } else { if ($5) { @@ -895,8 +895,8 @@ statement : INCLUDE STRING LBRACE { if (!WrapExtern) { init_language(); $1[strlen($1) - 1] = 0; -// fprintf(f_header,"#line %d \"%s\"\n", start_line, input_file); - fprintf(f_header, "%s\n", $1); +// Printf(f_header,"#line %d \"%s\"\n", start_line, input_file); + Printf(f_header, "%s\n", $1); } } @@ -906,7 +906,7 @@ statement : INCLUDE STRING LBRACE { if (!WrapExtern) { init_language(); $2[strlen($2) - 1] = 0; - fprintf(f_wrappers,"%s\n",$2); + Printf(f_wrappers,"%s\n",$2); } } @@ -916,7 +916,7 @@ statement : INCLUDE STRING LBRACE { if (!WrapExtern) { init_language(); $2[strlen($2) -1] = 0; - fprintf(f_init,"%s\n", $2); + Printf(f_init,"%s\n", $2); } } @@ -925,7 +925,7 @@ statement : INCLUDE STRING LBRACE { if (!WrapExtern) { init_language(); $2[strlen($2) - 1] = 0; - fprintf(f_header, "%s\n", $2); + Printf(f_header, "%s\n", $2); { /* Need to run through the preprocessor */ DOH *cpps; @@ -944,13 +944,13 @@ statement : INCLUDE STRING LBRACE { /* Echo mode */ | ECHO HBLOCK { if (!WrapExtern) { - fprintf(stderr,"%s\n", $2); + Printf(stderr,"%s\n", $2); } } | ECHO STRING { if (!WrapExtern) { - fprintf(stderr,"%s\n", $2); + Printf(stderr,"%s\n", $2); } } @@ -967,7 +967,7 @@ statement : INCLUDE STRING LBRACE { init_language(); } if ($3.count > 0) { - fprintf(stderr,"%s : Line %d. Warning. Init list no longer supported.\n", + Printf(stderr,"%s : Line %d. Warning. Init list no longer supported.\n", input_file,line_number); } for (i = 0; i < $3.count; i++) @@ -999,7 +999,7 @@ statement : INCLUDE STRING LBRACE { } else if ($3.type == T_SYMBOL) { // Add a symbol to the SWIG symbol table if (add_symbol($2)) { - fprintf(stderr,"%s : Line %d. Warning. Symbol %s already defined.\n", + Printf(stderr,"%s : Line %d. Warning. Symbol %s already defined.\n", input_file,line_number, $2); } } @@ -1051,8 +1051,8 @@ statement : INCLUDE STRING LBRACE { /* Create a new typemap in current language */ | TYPEMAP LPAREN tm_method RPAREN tm_list LBRACE { if (!typemap_lang) { - fprintf(stderr,"SWIG internal error. No typemap_lang specified.\n"); - fprintf(stderr,"typemap on %s : Line %d. will be ignored.\n",input_file,line_number); + Printf(stderr,"SWIG internal error. No typemap_lang specified.\n"); + Printf(stderr,"typemap on %s : Line %d. will be ignored.\n",input_file,line_number); FatalError(); } else { TMParm *p; @@ -1082,8 +1082,8 @@ statement : INCLUDE STRING LBRACE { | TYPEMAP LPAREN tm_method RPAREN tm_list SEMI { if (!typemap_lang) { - fprintf(stderr,"SWIG internal error. No typemap_lang specified.\n"); - fprintf(stderr,"typemap on %s : Line %d. will be ignored.\n",input_file,line_number); + Printf(stderr,"SWIG internal error. No typemap_lang specified.\n"); + Printf(stderr,"typemap on %s : Line %d. will be ignored.\n",input_file,line_number); FatalError(); } else { TMParm *p; @@ -1115,8 +1115,8 @@ statement : INCLUDE STRING LBRACE { | TYPEMAP LPAREN tm_method RPAREN tm_list EQUAL typemap_parm SEMI { if (!typemap_lang) { - fprintf(stderr,"SWIG internal error. No typemap_lang specified.\n"); - fprintf(stderr,"typemap on %s : Line %d. will be ignored.\n",input_file,line_number); + Printf(stderr,"SWIG internal error. No typemap_lang specified.\n"); + Printf(stderr,"typemap on %s : Line %d. will be ignored.\n",input_file,line_number); FatalError(); } else { TMParm *p; @@ -1195,7 +1195,7 @@ statement : INCLUDE STRING LBRACE { { static int last_error_line = -1; if (last_error_line != line_number) { - fprintf(stderr,"%s : Line %d. Syntax error in input.\n", input_file, line_number); + Printf(stderr,"%s : Line %d. Syntax error in input.\n", input_file, line_number); FatalError(); last_error_line = line_number; // Try to make some kind of recovery. @@ -1250,7 +1250,7 @@ typedef_decl : TYPEDEF type declaration { lang->add_typedef($2,$3.id); /* If this is %typedef, add it to the header */ if ($1) - fprintf(f_header,"typedef %s;\n", DataType_str($2,$3.id)); + Printf(f_header,"typedef %s;\n", DataType_str($2,$3.id)); cplus_register_type($3.id); } typedeflist { }; @@ -1261,7 +1261,7 @@ typedef_decl : TYPEDEF type declaration { /* Typedef'd pointer */ if ($1) { sprintf(temp_name,"(*%s)",$5); - fprintf(f_header,"typedef "); + Printf(f_header,"typedef "); emit_extern_func(temp_name, $2,$8,0,f_header); } DataType_Setname($2,""); @@ -1282,7 +1282,7 @@ typedef_decl : TYPEDEF type declaration { if ($1) { add_pointers($2,$3); sprintf(temp_name,"(*%s)",$6); - fprintf(f_header,"typedef "); + Printf(f_header,"typedef "); emit_extern_func(temp_name, $2,$9,0,f_header); } @@ -1311,7 +1311,7 @@ typedef_decl : TYPEDEF type declaration { DataType_set_arraystr($2,Char(ArrayString)); DataType_typedef_add($2,$3.id,0); lang->add_typedef($2,$3.id); - fprintf(stderr,"%s : Line %d. Warning. Array type %s will be read-only without a typemap\n",input_file,line_number, $3.id); + Printf(stderr,"%s : Line %d. Warning. Array type %s will be read-only without a typemap\n",input_file,line_number, $3.id); cplus_register_type($3.id); } typedeflist { } @@ -1348,7 +1348,7 @@ typedeflist : COMMA declaration typedeflist { lang->add_typedef(t,$2.id); cplus_register_type($2.id); DelDataType(t); - fprintf(stderr,"%s : Line %d. Warning. Array type %s will be read-only without a typemap.\n",input_file,line_number, $2.id); + Printf(stderr,"%s : Line %d. Warning. Array type %s will be read-only without a typemap.\n",input_file,line_number, $2.id); } | empty { } ; @@ -1356,9 +1356,9 @@ typedeflist : COMMA declaration typedeflist { pragma : PRAGMA LPAREN ID COMMA ID stylearg RPAREN { if (!WrapExtern) lang->pragma($3,$5,$6); - fprintf(stderr,"%s : Line %d. Warning. '%%pragma(lang,opt=value)' syntax is obsolete.\n", + Printf(stderr,"%s : Line %d. Warning. '%%pragma(lang,opt=value)' syntax is obsolete.\n", input_file,line_number); - fprintf(stderr," Use '%%pragma(lang) opt=value' instead.\n"); + Printf(stderr," Use '%%pragma(lang) opt=value' instead.\n"); } | PRAGMA ID stylearg { @@ -1384,7 +1384,7 @@ stail : SEMI { } DataType_set_arraystr(temp_typeptr,Char(ArrayString)); } if ($2.is_reference) { - fprintf(stderr,"%s : Line %d. Error. Linkage to C++ reference not allowed.\n", input_file, line_number); + Printf(stderr,"%s : Line %d. Error. Linkage to C++ reference not allowed.\n", input_file, line_number); FatalError(); } else { if (DataType_qualifier(temp_typeptr)) { @@ -1416,7 +1416,7 @@ extern : EXTERN { $$ = 1; } if (strcmp($2,"C") == 0) { $$ = 2; } else { - fprintf(stderr,"%s : Line %d. Unrecognized extern type \"%s\" (ignored).\n", input_file, line_number, $2); + Printf(stderr,"%s : Line %d. Unrecognized extern type \"%s\" (ignored).\n", input_file, line_number, $2); FatalError(); } } @@ -1490,13 +1490,13 @@ parm_type : type pname { DataType_add_pointer(pt); Setvalue($$,DefArg); if (!CPlusPlus) { - fprintf(stderr,"%s : Line %d. Warning. Use of C++ Reference detected. Use the -c++ option.\n", input_file, line_number); + Printf(stderr,"%s : Line %d. Warning. Use of C++ Reference detected. Use the -c++ option.\n", input_file, line_number); } DelDataType($1); free($3); } | type LPAREN stars pname RPAREN LPAREN parms RPAREN { - fprintf(stderr,"%s : Line %d. Error. Function pointer not allowed (remap with typedef).\n", input_file, line_number); + Printf(stderr,"%s : Line %d. Error. Function pointer not allowed (remap with typedef).\n", input_file, line_number); FatalError(); $$ = NewParm($1,$4); DataType *pt = Gettype($$); @@ -1508,7 +1508,7 @@ parm_type : type pname { Delete($7); } | PERIOD PERIOD PERIOD { - fprintf(stderr,"%s : Line %d. Variable length arguments not supported (ignored).\n", input_file, line_number); + Printf(stderr,"%s : Line %d. Variable length arguments not supported (ignored).\n", input_file, line_number); $$ = NewParm(NewDataType(T_INT),(char *) "varargs"); DataType *pt = Gettype($$); DataType_Settypecode(pt,T_ERROR); @@ -1577,7 +1577,7 @@ declaration : ID { $$.id = $1; $$.is_pointer = 1; $$.is_reference = 1; if (!CPlusPlus) { - fprintf(stderr,"%s : Line %d. Warning. Use of C++ Reference detected. Use the -c++ option.\n", input_file, line_number); + Printf(stderr,"%s : Line %d. Warning. Use of C++ Reference detected. Use the -c++ option.\n", input_file, line_number); } } ; @@ -1645,7 +1645,7 @@ type : TYPE_INT { $$ = $1; if (strlen($2) > 0) { if ((strlen($2) + strlen(DataType_Getname($$))) >= MAX_NAME) { - fprintf(stderr,"%s : Line %d. Fatal error. Type-name is too long!\n", + Printf(stderr,"%s : Line %d. Fatal error. Type-name is too long!\n", input_file, line_number); } else { char temp[256]; @@ -1661,7 +1661,7 @@ type : TYPE_INT { DataType_typedef_resolve($$,0); if (strlen($2) > 0) { if ((strlen($2) + strlen(DataType_Getname($$))) >= MAX_NAME) { - fprintf(stderr,"%s : Line %d. Fatal error. Type-name is too long!\n", + Printf(stderr,"%s : Line %d. Fatal error. Type-name is too long!\n", input_file, line_number); } else { char temp[256]; @@ -1898,7 +1898,7 @@ etype : expr { ($$.type != T_LONG) && ($$.type != T_ULONG) && ($$.type != T_SHORT) && ($$.type != T_USHORT) && ($$.type != T_SCHAR) && ($$.type != T_UCHAR)) { - fprintf(stderr,"%s : Lind %d. Type error. Expecting an int\n", + Printf(stderr,"%s : Lind %d. Type error. Expecting an int\n", input_file, line_number); FatalError(); } @@ -1986,7 +1986,7 @@ expr : NUM_INT { E_BINARY($$.id,$1.id,$3.id,"&"); $$.type = promote($1.type,$3.type); if (($1.type == T_DOUBLE) || ($3.type == T_DOUBLE)) { - fprintf(stderr,"%s : Line %d. Type error in constant expression (expecting integers).\n", input_file, line_number); + Printf(stderr,"%s : Line %d. Type error in constant expression (expecting integers).\n", input_file, line_number); FatalError(); } free($1.id); @@ -1997,7 +1997,7 @@ expr : NUM_INT { E_BINARY($$.id,$1.id,$3.id,"|"); $$.type = promote($1.type,$3.type); if (($1.type == T_DOUBLE) || ($3.type == T_DOUBLE)) { - fprintf(stderr,"%s : Line %d. Type error in constant expression (expecting integers).\n", input_file, line_number); + Printf(stderr,"%s : Line %d. Type error in constant expression (expecting integers).\n", input_file, line_number); FatalError(); } $$.type = T_INT; @@ -2009,7 +2009,7 @@ expr : NUM_INT { E_BINARY($$.id,$1.id,$3.id,"^"); $$.type = promote($1.type,$3.type); if (($1.type == T_DOUBLE) || ($3.type == T_DOUBLE)) { - fprintf(stderr,"%s : Line %d. Type error in constant expression (expecting integers).\n", input_file, line_number); + Printf(stderr,"%s : Line %d. Type error in constant expression (expecting integers).\n", input_file, line_number); FatalError(); } $$.type = T_INT; @@ -2021,7 +2021,7 @@ expr : NUM_INT { E_BINARY($$.id,$1.id,$3.id,"<<"); $$.type = promote($1.type,$3.type); if (($1.type == T_DOUBLE) || ($3.type == T_DOUBLE)) { - fprintf(stderr,"%s : Line %d. Type error in constant expression (expecting integers).\n", input_file, line_number); + Printf(stderr,"%s : Line %d. Type error in constant expression (expecting integers).\n", input_file, line_number); FatalError(); } $$.type = T_INT; @@ -2033,7 +2033,7 @@ expr : NUM_INT { E_BINARY($$.id,$1.id,$3.id,">>"); $$.type = promote($1.type,$3.type); if (($1.type == T_DOUBLE) || ($3.type == T_DOUBLE)) { - fprintf(stderr,"%s : Line %d. Type error in constant expression (expecting integers).\n", input_file, line_number); + Printf(stderr,"%s : Line %d. Type error in constant expression (expecting integers).\n", input_file, line_number); FatalError(); } $$.type = T_INT; @@ -2052,7 +2052,7 @@ expr : NUM_INT { $$.id = (char *) malloc(strlen($2.id)+2); sprintf($$.id,"~%s",$2.id); if ($2.type == T_DOUBLE) { - fprintf(stderr,"%s : Line %d. Type error in constant expression (expecting integers).\n", input_file, line_number); + Printf(stderr,"%s : Line %d. Type error in constant expression (expecting integers).\n", input_file, line_number); FatalError(); } $$.type = $2.type; @@ -2083,11 +2083,11 @@ cpp_class : sprintf(temp_name,"CPP_CLASS:%s\n",$3); if (add_symbol(temp_name)) { - fprintf(stderr,"%s : Line %d. Error. %s %s is multiply defined.\n", input_file, line_number, $2, $3); + Printf(stderr,"%s : Line %d. Error. %s %s is multiply defined.\n", input_file, line_number, $2, $3); FatalError(); } if ((!CPlusPlus) && (strcmp($2,"class") == 0)) - fprintf(stderr,"%s : Line %d. *** WARNING ***. C++ mode is disabled (enable using -c++)\n", input_file, line_number); + Printf(stderr,"%s : Line %d. *** WARNING ***. C++ mode is disabled (enable using -c++)\n", input_file, line_number); iname = make_name($3); if (iname == $3) @@ -2107,7 +2107,7 @@ cpp_class : if (strcmp($2,"union") != 0) cplus_inherit($4.count, $4.names); else { - fprintf(stderr,"%s : Line %d. Inheritance not allowed for unions.\n",input_file, line_number); + Printf(stderr,"%s : Line %d. Inheritance not allowed for unions.\n",input_file, line_number); FatalError(); } } @@ -2138,11 +2138,11 @@ cpp_class : sprintf(temp_name,"CPP_CLASS:%s\n",$3); if (add_symbol(temp_name)) { - fprintf(stderr,"%s : Line %d. Error. %s %s is multiply defined.\n", input_file, line_number, $2, $3); + Printf(stderr,"%s : Line %d. Error. %s %s is multiply defined.\n", input_file, line_number, $2, $3); FatalError(); } if ((!CPlusPlus) && (strcmp($2,"class") == 0)) - fprintf(stderr,"%s : Line %d. *** WARNING ***. C++ mode is disabled (enable using -c++)\n", input_file, line_number); + Printf(stderr,"%s : Line %d. *** WARNING ***. C++ mode is disabled (enable using -c++)\n", input_file, line_number); iname = make_name($3); if ($3 == iname) @@ -2164,7 +2164,7 @@ cpp_class : if (strcmp($2,"union") != 0) cplus_inherit($4.count, $4.names); else { - fprintf(stderr,"%s : Line %d. Inheritance not allowed for unions.\n",input_file, line_number); + Printf(stderr,"%s : Line %d. Inheritance not allowed for unions.\n",input_file, line_number); FatalError(); } } @@ -2184,7 +2184,7 @@ cpp_class : } if ($9.is_pointer > 0) { - fprintf(stderr,"%s : Line %d. typedef struct { } *id not supported properly. Winging it...\n", input_file, line_number); + Printf(stderr,"%s : Line %d. typedef struct { } *id not supported properly. Winging it...\n", input_file, line_number); } // Create dump nested class code @@ -2224,7 +2224,7 @@ cpp_class : init_language(); DataType_new_scope(0); if ((!CPlusPlus) && (strcmp($2,"class") == 0)) - fprintf(stderr,"%s : Line %d. *** WARNING ***. C++ mode is disabled (enable using -c++)\n", input_file, line_number); + Printf(stderr,"%s : Line %d. *** WARNING ***. C++ mode is disabled (enable using -c++)\n", input_file, line_number); iname = make_name((char*)""); if (strlen(iname)) @@ -2239,12 +2239,12 @@ cpp_class : nested_list = 0; } cpp_members RBRACE declaration { if ($7.is_pointer > 0) { - fprintf(stderr,"%s : Line %d. typedef %s {} *%s not supported correctly. Will be ignored.\n", input_file, line_number, $2, $7.id); + Printf(stderr,"%s : Line %d. typedef %s {} *%s not supported correctly. Will be ignored.\n", input_file, line_number, $2, $7.id); cplus_abort(); } else { sprintf(temp_name,"CPP_CLASS:%s\n",$7.id); if (add_symbol(temp_name)) { - fprintf(stderr,"%s : Line %d. Error. %s %s is multiply defined.\n", input_file, line_number, $2, $7.id); + Printf(stderr,"%s : Line %d. Error. %s %s is multiply defined.\n", input_file, line_number, $2, $7.id); FatalError(); } } @@ -2279,7 +2279,7 @@ cpp_other :/* A dummy class name */ | extern type declaration DCOLON ID LPAREN parms RPAREN SEMI { init_language(); if (!CPlusPlus) - fprintf(stderr,"%s : Line %d. *** WARNING ***. C++ mode is disabled (enable using -c++)\n", input_file, line_number); + Printf(stderr,"%s : Line %d. *** WARNING ***. C++ mode is disabled (enable using -c++)\n", input_file, line_number); add_pointers($2,$3.is_pointer); if ($3.is_reference) DataType_add_reference($2); @@ -2298,7 +2298,7 @@ cpp_other :/* A dummy class name */ | extern type declaration DCOLON ID SEMI { init_language(); if (!CPlusPlus) - fprintf(stderr,"%s : Line %d. *** WARNING ***. C++ mode is disabled (enable using -c++)\n", input_file, line_number); + Printf(stderr,"%s : Line %d. *** WARNING ***. C++ mode is disabled (enable using -c++)\n", input_file, line_number); add_pointers($2,$3.is_pointer); // Fix up the function name @@ -2314,7 +2314,7 @@ cpp_other :/* A dummy class name */ /* Operator overloading catch */ | extern type declaration DCOLON OPERATOR { - fprintf(stderr,"%s : Line %d. Operator overloading not supported (ignored).\n", input_file, line_number); + Printf(stderr,"%s : Line %d. Operator overloading not supported (ignored).\n", input_file, line_number); skip_decl(); DelDataType($2); } @@ -2322,7 +2322,7 @@ cpp_other :/* A dummy class name */ /* Template catch */ | TEMPLATE { - fprintf(stderr,"%s : Line %d. Templates not currently supported (ignored).\n", + Printf(stderr,"%s : Line %d. Templates not currently supported (ignored).\n", input_file, line_number); skip_decl(); } @@ -2356,7 +2356,7 @@ cpp_members : cpp_member cpp_members {} { static int last_error_line = -1; if (last_error_line != line_number) { - fprintf(stderr,"%s : Line %d. Syntax error in input.\n", input_file, line_number); + Printf(stderr,"%s : Line %d. Syntax error in input.\n", input_file, line_number); FatalError(); last_error_line = line_number; } @@ -2503,7 +2503,7 @@ cpp_member : type declaration LPAREN parms RPAREN cpp_end { cplus_variable($2.id,iname,$1); Status = oldstatus; if (!tm) - fprintf(stderr,"%s : Line %d. Warning. Array member will be read-only.\n",input_file,line_number); + Printf(stderr,"%s : Line %d. Warning. Array member will be read-only.\n",input_file,line_number); } scanner_clear_start(); DelDataType($1); @@ -2602,14 +2602,14 @@ cpp_member : type declaration LPAREN parms RPAREN cpp_end { } /* A friend : Illegal */ | FRIEND { - fprintf(stderr,"%s : Line %d. Friends are not allowed--members only! (ignored)\n", input_file, line_number); + Printf(stderr,"%s : Line %d. Friends are not allowed--members only! (ignored)\n", input_file, line_number); skip_decl(); scanner_clear_start(); } /* An operator: Illegal */ | type type_extra OPERATOR { - fprintf(stderr,"%s : Line %d. Operator overloading not supported (ignored).\n", input_file, line_number); + Printf(stderr,"%s : Line %d. Operator overloading not supported (ignored).\n", input_file, line_number); skip_decl(); scanner_clear_start(); } @@ -2657,7 +2657,7 @@ cpp_pragma : PRAGMA ID stylearg { cplus_register_type($2); if ($5.id) { if (strcmp($1,"class") == 0) { - fprintf(stderr,"%s : Line %d. Warning. Nested classes not currently supported (ignored).\n", input_file, line_number); + Printf(stderr,"%s : Line %d. Warning. Nested classes not currently supported (ignored).\n", input_file, line_number); /* Generate some code for a new class */ } else { Nested *n = (Nested *) malloc(sizeof(Nested)); @@ -2680,7 +2680,7 @@ cpp_pragma : PRAGMA ID stylearg { } declaration SEMI { if (cplus_mode == CPLUS_PUBLIC) { if (strcmp($1,"class") == 0) { - fprintf(stderr,"%s : Line %d. Warning. Nested classes not currently supported (ignored)\n", input_file, line_number); + Printf(stderr,"%s : Line %d. Warning. Nested classes not currently supported (ignored)\n", input_file, line_number); /* Generate some code for a new class */ } else { /* Generate some code for a new class */ @@ -2710,17 +2710,17 @@ cpp_pragma : PRAGMA ID stylearg { /* Other miscellaneous errors */ | type stars LPAREN { skip_decl(); - fprintf(stderr,"%s : Line %d. Function pointers not currently supported (ignored).\n", input_file, line_number); + Printf(stderr,"%s : Line %d. Function pointers not currently supported (ignored).\n", input_file, line_number); } | strict_type LPAREN STAR { skip_decl(); - fprintf(stderr,"%s : Line %d. Function pointers not currently supported (ignored).\n", input_file, line_number); + Printf(stderr,"%s : Line %d. Function pointers not currently supported (ignored).\n", input_file, line_number); } | ID LPAREN STAR { skip_decl(); - fprintf(stderr,"%s : Line %d. Function pointers not currently supported (ignored).\n", input_file, line_number); + Printf(stderr,"%s : Line %d. Function pointers not currently supported (ignored).\n", input_file, line_number); } | doc_enable { } @@ -2769,7 +2769,7 @@ cpp_tail : SEMI { } cplus_variable($2.id,(char *) 0,temp_typeptr); Status = oldstatus; if (!tm) - fprintf(stderr,"%s : Line %d. Warning. Array member will be read-only.\n",input_file,line_number); + Printf(stderr,"%s : Line %d. Warning. Array member will be read-only.\n",input_file,line_number); DelDataType(temp_typeptr); } scanner_clear_start(); @@ -2860,12 +2860,12 @@ base_list : base_specifier { ; base_specifier : ID { - fprintf(stderr,"%s : Line %d. No access specifier given for base class %s (ignored).\n", + Printf(stderr,"%s : Line %d. No access specifier given for base class %s (ignored).\n", input_file,line_number,$1); $$ = (char *) 0; } | VIRTUAL ID { - fprintf(stderr,"%s : Line %d. No access specifier given for base class %s (ignored).\n", + Printf(stderr,"%s : Line %d. No access specifier given for base class %s (ignored).\n", input_file,line_number,$2); $$ = (char *) 0; } @@ -2873,7 +2873,7 @@ base_specifier : ID { if (strcmp($2,"public") == 0) { $$ = $3; } else { - fprintf(stderr,"%s : Line %d. %s inheritance not supported (ignored).\n", + Printf(stderr,"%s : Line %d. %s inheritance not supported (ignored).\n", input_file,line_number,$2); $$ = (char *) 0; } @@ -2882,7 +2882,7 @@ base_specifier : ID { if (strcmp($1,"public") == 0) { $$ = $2; } else { - fprintf(stderr,"%s : Line %d. %s inheritance not supported (ignored).\n", + Printf(stderr,"%s : Line %d. %s inheritance not supported (ignored).\n", input_file,line_number,$1); $$ = (char *) 0; } @@ -2891,7 +2891,7 @@ base_specifier : ID { if (strcmp($1,"public") == 0) { $$ = $3; } else { - fprintf(stderr,"%s : Line %d. %s inheritance not supported (ignored).\n", + Printf(stderr,"%s : Line %d. %s inheritance not supported (ignored).\n", input_file,line_number,$1); $$ = (char *) 0; } @@ -2949,7 +2949,7 @@ objective_c : OC_INTERFACE ID objc_inherit { cplus_mode = CPLUS_PROTECTED; sprintf(temp_name,"CPP_CLASS:%s\n",$2); if (add_symbol(temp_name)) { - fprintf(stderr,"%s : Line %d. @interface %s is multiple defined.\n", + Printf(stderr,"%s : Line %d. @interface %s is multiple defined.\n", input_file,line_number,$2); FatalError(); } @@ -3026,7 +3026,7 @@ objc_data : objc_vars objc_data { } { static int last_error_line = -1; if (last_error_line != line_number) { - fprintf(stderr,"%s : Line %d. Syntax error in input.\n", input_file, line_number); + Printf(stderr,"%s : Line %d. Syntax error in input.\n", input_file, line_number); FatalError(); last_error_line = line_number; } @@ -3150,7 +3150,7 @@ objc_methods : objc_method objc_methods { }; { static int last_error_line = -1; if (last_error_line != line_number) { - fprintf(stderr,"%s : Line %d. Syntax error in input.\n", input_file, line_number); + Printf(stderr,"%s : Line %d. Syntax error in input.\n", input_file, line_number); FatalError(); last_error_line = line_number; } @@ -3356,14 +3356,14 @@ typemap_parm : type typemap_name { DataType_add_reference(pt); DataType_add_pointer(pt); if (!CPlusPlus) { - fprintf(stderr,"%s : Line %d. Warning. Use of C++ Reference detected. Use the -c++ option.\n", input_file, line_number); + Printf(stderr,"%s : Line %d. Warning. Use of C++ Reference detected. Use the -c++ option.\n", input_file, line_number); } $$->args = tm_parm; DelDataType($1); free($3); } | type LPAREN stars typemap_name RPAREN LPAREN parms RPAREN { - fprintf(stderr,"%s : Line %d. Error. Function pointer not allowed (remap with typedef).\n", input_file, line_number); + Printf(stderr,"%s : Line %d. Error. Function pointer not allowed (remap with typedef).\n", input_file, line_number); FatalError(); $$ = NewTMParm(); $$->p = NewParm($1,$4); @@ -3468,7 +3468,7 @@ void error_recover() { /* Called by the parser (yyparse) when an error is found.*/ void yyerror (char *) { - // Fprintf(stderr,"%s : Line %d. Syntax error.\n", input_file, line_number); + // Printf(stderr,"%s : Line %d. Syntax error.\n", input_file, line_number); // error_recover(); } diff --git a/SWIG/Source/SWIG1.1/scanner.cxx b/SWIG/Source/SWIG1.1/scanner.cxx index 8b8f8150f..4e55591ea 100644 --- a/SWIG/Source/SWIG1.1/scanner.cxx +++ b/SWIG/Source/SWIG1.1/scanner.cxx @@ -20,52 +20,34 @@ static char cvsroot[] = "$Header$"; #include extern "C" { - #include "doh.h" + #include "swig.h" } #define YYBSIZE 8192 struct InFile { - FILE *f; - int line_number; - char *in_file; - int extern_mode; - int force_extern; + DOHFile *f; + int line_number; + char *in_file; + int extern_mode; + int force_extern; + int inline_mode; struct InFile *prev; }; -// This structure is used for managing code fragments as -// might be used by the %inline directive and handling of -// nested structures. - -struct CodeFragment { - char *text; - int line_number; - CodeFragment *next; -}; - InFile *in_head; -FILE *LEX_in = NULL; - +DOHFile *LEX_in = 0; static DOHString *header = 0; static DOHString *comment = 0; DOHString *CCode = 0; // String containing C code -static char *yybuffer; +static char *yybuffer = 0; static int lex_pos = 0; static int lex_len = 0; -static char *inline_yybuffer = 0; -static int inline_lex_pos = 0; -static int inline_lex_len = 0; -static int inline_line_number = 0; -static CodeFragment *fragments = 0; // Code fragments -static -char yytext[YYBSIZE]; +static char yytext[YYBSIZE]; static int yylen = 0; int line_number = 1; -int column = 1; -int column_start = 1; char *input_file; int start_line = 0; static int comment_start; @@ -82,7 +64,6 @@ extern int Error; **************************************************************/ void scanner_init() { - yybuffer = (char *) malloc(YYBSIZE); scan_init = 1; header = NewString(""); @@ -95,7 +76,7 @@ void scanner_init() { * * Start reading from new file **************************************************************/ -void scanner_file(FILE *f) { +void scanner_file(DOHFile *f) { InFile *in; in = (InFile *) malloc(sizeof(InFile)); @@ -103,7 +84,7 @@ void scanner_file(FILE *f) { in->in_file = input_file; in->extern_mode = WrapExtern; in->force_extern = ForceExtern; - if (in_head) in_head->line_number = line_number+1; + in->inline_mode = 0; if (!in_head) in->prev = 0; else in->prev = in_head; in_head = in; @@ -118,10 +99,11 @@ void scanner_file(FILE *f) { **************************************************************/ void scanner_close() { - InFile *p; - fclose(LEX_in); if (!in_head) return; + if (in_head->inline_mode) { + Delete(LEX_in); + } p = in_head->prev; if (p != 0) { LEX_in = p->f; @@ -129,8 +111,9 @@ void scanner_close() { input_file = p->in_file; WrapExtern = p->extern_mode; ForceExtern = p->force_extern; + Inline = p->inline_mode; } else { - LEX_in = NULL; + LEX_in = 0; } free(in_head); in_head = p; @@ -145,92 +128,37 @@ void scanner_close() { **************************************************************/ char nextchar() { - - char c = 0; - - if (Inline) { - if (inline_lex_pos >= inline_lex_len) { - // Done with inlined code. Check to see if we have any - // new code fragments. If so, switch to them. - free(inline_yybuffer); - if (fragments) { - CodeFragment *f; - inline_yybuffer = fragments->text; - inline_lex_pos = 1; - inline_lex_len = strlen(fragments->text); - line_number = fragments->line_number; - f = fragments->next; - free(fragments); - fragments = f; - c = inline_yybuffer[0]; - } else { - c = 0; - Inline = 0; - line_number = inline_line_number; // Restore old line number - } + int c = 0; + + while (LEX_in) { + c = Getc(LEX_in); + if (c == EOF) { + scanner_close(); } else { - inline_lex_pos++; - c = inline_yybuffer[inline_lex_pos-1]; + break; } } - if (!Inline) { - if (lex_pos >= lex_len) { - if (!LEX_in) { - SWIG_exit(1); - } - while(fgets(yybuffer, YYBSIZE, LEX_in) == NULL) { - scanner_close(); // Close current input file - if (!LEX_in) return 0; // No more, we're outta here - } - lex_len = strlen(yybuffer); - lex_pos = 0; - } - - lex_pos++; - c = yybuffer[lex_pos-1]; - } - + if (!LEX_in) return 0; if (yylen >= YYBSIZE) { - fprintf(stderr,"** FATAL ERROR. Buffer overflow in scanner.cxx.\nReport this to swig@cs.utah.edu.\n"); + Printf(stderr,"** FATAL ERROR. Buffer overflow in scanner.cxx.\nReport this to swig-dev@cs.uchicago.edu.\n"); SWIG_exit(1); } yytext[yylen] = c; yylen++; if (c == '\n') { line_number++; - column = 1; - } else { - column++; } return(c); } void retract(int n) { - int i, j, c; - + int i; for (i = 0; i < n; i++) { - if (Inline) { - inline_lex_pos--; - if (inline_lex_pos < 0) { - fprintf(stderr,"Internal scanner error. inline_lex_pos < 0\n"); - SWIG_exit(1); - } - } - else lex_pos--; yylen--; - column--; if (yylen >= 0) { + Ungetc(yytext[yylen],LEX_in); if (yytext[yylen] == '\n') { line_number--; - // Figure out what column we're in - c = yylen-1; - j = 1; - while (c >= 0){ - if (yytext[c] == '\n') break; - j++; - c--; - } - column = j; } } } @@ -249,37 +177,21 @@ void retract(int n) { **************************************************************/ void start_inline(char *text, int line) { + InFile *in; - if (Inline) { - - // Already processing a code fragment, simply hang on - // to this one for later. - - CodeFragment *f,*f1; - - // Add a new code fragment to our list - f = (CodeFragment *) malloc(sizeof(CodeFragment)); - f->text = Swig_copy_string(text); - f->line_number = line; - f->next = 0; - if (!fragments) fragments = f; - else { - f1 = fragments; - while (f1->next) f1 = f1->next; - f1->next = f; - } - } else { - - // Switch our scanner over to process text from a string. - // Save current line number and other information however. - - inline_yybuffer = Swig_copy_string(text); - inline_lex_len = strlen(text); - inline_lex_pos = 0; - inline_line_number = line_number; // Make copy of old line number - line_number = line; - Inline = 1; - } + in = (InFile *) malloc(sizeof(InFile)); + in->f = NewString(text); + Seek(in->f,0,SEEK_SET); + in->in_file = Swig_copy_string(input_file); + in->line_number = line; + in->extern_mode = WrapExtern; + in->force_extern = ForceExtern; + in->inline_mode = 1; + in->prev = in_head; + in_head = in; + LEX_in = in->f; + line_number = line; + Inline = 1; } /************************************************************** @@ -308,7 +220,7 @@ void skip_brace(void) { Putc('{',CCode); while (num_brace > last_brace) { if ((c = nextchar()) == 0) { - fprintf(stderr,"%s : Line %d. Missing '}'. Reached end of input.\n", + Printf(stderr,"%s : Line %d. Missing '}'. Reached end of input.\n", input_file, line_number); FatalError(); return; @@ -339,7 +251,7 @@ void skip_template(void) { int num_lt = 1; while (num_lt > 0) { if ((c = nextchar()) == 0) { - fprintf(stderr,"%s : Line %d. Missing '>'. Reached end of input.\n", + Printf(stderr,"%s : Line %d. Missing '>'. Reached end of input.\n", input_file, line_number); FatalError(); return; @@ -380,7 +292,7 @@ void skip_to_end(void) { break; } } - fprintf(stderr,"%s : EOF. Missing @end. Reached end of input.\n", + Printf(stderr,"%s : EOF. Missing @end. Reached end of input.\n", input_file); FatalError(); return; @@ -403,7 +315,7 @@ void skip_decl(void) { int done = 0; while (!done) { if ((c = nextchar()) == 0) { - fprintf(stderr,"%s : Line %d. Missing semicolon. Reached end of input.\n", + Printf(stderr,"%s : Line %d. Missing semicolon. Reached end of input.\n", input_file, line_number); FatalError(); return; @@ -419,7 +331,7 @@ void skip_decl(void) { if (!done) { while (num_brace > last_brace) { if ((c = nextchar()) == 0) { - fprintf(stderr,"%s : Line %d. Missing '}'. Reached end of input.\n", + Printf(stderr,"%s : Line %d. Missing '}'. Reached end of input.\n", input_file, line_number); FatalError(); return; @@ -473,7 +385,7 @@ int yylook(void) { else if (c == '}') { num_brace--; if (num_brace < 0) { - fprintf(stderr,"%s : Line %d. Error. Extraneous '}' (Ignored)\n", + Printf(stderr,"%s : Line %d. Error. Extraneous '}' (Ignored)\n", input_file, line_number); state = 0; num_brace = 0; @@ -521,13 +433,11 @@ int yylook(void) { if ((c = nextchar()) == 0) return(0); if (c == '/') { comment_start = line_number; - column_start = column; Clear(comment); Printf(comment," "); state = 10; // C++ style comment } else if (c == '*') { comment_start = line_number; - column_start = column; Clear(comment); Printf(comment," "); state = 11; // C style comment @@ -538,14 +448,14 @@ int yylook(void) { break; case 10: /* C++ style comment */ if ((c = nextchar()) == 0) { - fprintf(stderr,"%s : EOF. Unterminated comment detected.\n",input_file); + Printf(stderr,"%s : EOF. Unterminated comment detected.\n",input_file); FatalError(); return 0; } if (c == '\n') { Putc(c,comment); // Add the comment to documentation - yycomment(Char(comment),comment_start, column_start); + // yycomment(Char(comment),comment_start, column_start); yylen = 0; state = 0; } else { @@ -556,7 +466,7 @@ int yylook(void) { break; case 11: /* C style comment block */ if ((c = nextchar()) == 0) { - fprintf(stderr,"%s : EOF. Unterminated comment detected.\n", input_file); + Printf(stderr,"%s : EOF. Unterminated comment detected.\n", input_file); FatalError(); return 0; } @@ -570,7 +480,7 @@ int yylook(void) { break; case 12: /* Still in C style comment */ if ((c = nextchar()) == 0) { - fprintf(stderr,"%s : EOF. Unterminated comment detected.\n", input_file); + Printf(stderr,"%s : EOF. Unterminated comment detected.\n", input_file); FatalError(); return 0; } @@ -579,7 +489,7 @@ int yylook(void) { state = 12; } else if (c == '/') { Printf(comment," \n"); - yycomment(Char(comment),comment_start,column_start); + // yycomment(Char(comment),comment_start,column_start); yylen = 0; state = 0; } else { @@ -592,7 +502,7 @@ int yylook(void) { case 2: /* Processing a string */ if ((c = nextchar()) == 0) { - fprintf(stderr,"%s : EOF. Unterminated string detected.\n", input_file); + Printf(stderr,"%s : EOF. Unterminated string detected.\n", input_file); FatalError(); return 0; } @@ -638,7 +548,7 @@ int yylook(void) { case 40: /* Process an include block */ if ((c = nextchar()) == 0) { - fprintf(stderr,"%s : EOF. Unterminated include block detected.\n", input_file); + Printf(stderr,"%s : EOF. Unterminated include block detected.\n", input_file); FatalError(); return 0; } @@ -652,7 +562,7 @@ int yylook(void) { break; case 41: /* Still processing include block */ if ((c = nextchar()) == 0) { - fprintf(stderr,"%s : EOF. Unterminated include block detected.\n", input_file); + Printf(stderr,"%s : EOF. Unterminated include block detected.\n", input_file); FatalError(); return 0; } @@ -871,7 +781,7 @@ int yylook(void) { break; default: if (!Error) { - fprintf(stderr,"%s : Line %d ::Illegal character '%c'=%d.\n",input_file, line_number,c,c); + Printf(stderr,"%s : Line %d ::Illegal character '%c'=%d.\n",input_file, line_number,c,c); FatalError(); } state = 0; @@ -986,7 +896,7 @@ extern "C" int yylex(void) { } // Objective-C keywords - if (ObjC) { + if ((ObjC) && (yytext[0] == '@')) { if (strcmp(yytext,"@interface") == 0) return (OC_INTERFACE); if (strcmp(yytext,"@end") == 0) return (OC_END); if (strcmp(yytext,"@public") == 0) return (OC_PUBLIC); @@ -1007,79 +917,81 @@ extern "C" int yylex(void) { if (strcmp(yytext,"enum") == 0) return(ENUM); if (strcmp(yytext,"sizeof") == 0) return(SIZEOF); + if (strcmp(yytext,"typedef") == 0) { + yylval.ivalue = 0; + return(TYPEDEF); + } + // Ignored keywords if (strcmp(yytext,"volatile") == 0) return(yylex()); // SWIG directives - if (strcmp(yytext,"%module") == 0) return(MODULE); - if (strcmp(yytext,"%init") == 0) return(INIT); - if (strcmp(yytext,"%wrapper") == 0) return(WRAPPER); - if (strcmp(yytext,"%readonly") == 0) return(READONLY); - if (strcmp(yytext,"%readwrite") == 0) return(READWRITE); - if (strcmp(yytext,"%name") == 0) return(NAME); - if (strcmp(yytext,"%rename") == 0) return(RENAME); - if (strcmp(yytext,"%includefile") == 0) return(INCLUDE); - if (strcmp(yytext,"%externfile") == 0) return(WEXTERN); - if (strcmp(yytext,"%val") == 0) { - fprintf(stderr,"%s:%d %%val directive deprecated (ignored).\n", input_file, line_number); - return (yylex()); + if (yytext[0] == '%') { + if (strcmp(yytext,"%module") == 0) return(MODULE); + if (strcmp(yytext,"%init") == 0) return(INIT); + if (strcmp(yytext,"%wrapper") == 0) return(WRAPPER); + if (strcmp(yytext,"%readonly") == 0) return(READONLY); + if (strcmp(yytext,"%readwrite") == 0) return(READWRITE); + if (strcmp(yytext,"%name") == 0) return(NAME); + if (strcmp(yytext,"%rename") == 0) return(RENAME); + if (strcmp(yytext,"%includefile") == 0) return(INCLUDE); + if (strcmp(yytext,"%externfile") == 0) return(WEXTERN); + if (strcmp(yytext,"%val") == 0) { + Printf(stderr,"%s:%d %%val directive deprecated (ignored).\n", input_file, line_number); + return (yylex()); + } + if (strcmp(yytext,"%out") == 0) { + Printf(stderr,"%s:%d %%out directive deprecated (ignored).\n", input_file, line_number); + return(yylex()); + } + if (strcmp(yytext,"%constant") == 0) return(CONSTANT); + if (strcmp(yytext,"%macro") == 0) return(SWIGMACRO); + + if (strcmp(yytext,"%section") == 0) { + yylval.ivalue = line_number; + return(SECTION); + } + if (strcmp(yytext,"%subsection") == 0) { + yylval.ivalue = line_number; + return(SUBSECTION); + } + if (strcmp(yytext,"%subsubsection") == 0) { + yylval.ivalue = line_number; + return (SUBSUBSECTION); + } + if (strcmp(yytext,"%title") == 0) { + yylval.ivalue = line_number; + return(TITLE); + } + if (strcmp(yytext,"%style") == 0) return(STYLE); + if (strcmp(yytext,"%localstyle") == 0) return(LOCALSTYLE); + if (strcmp(yytext,"%typedef") == 0) { + yylval.ivalue = 1; + return(TYPEDEF); + } + if (strcmp(yytext,"%alpha") == 0) return(ALPHA_MODE); + if (strcmp(yytext,"%raw") == 0) return(RAW_MODE); + if (strcmp(yytext,"%text") == 0) return(TEXT); + if (strcmp(yytext,"%native") == 0) return(NATIVE); + if (strcmp(yytext,"%disabledoc") == 0) return(DOC_DISABLE); + if (strcmp(yytext,"%enabledoc") == 0) return(DOC_ENABLE); + if (strcmp(yytext,"%pragma") == 0) return(PRAGMA); + if (strcmp(yytext,"%addmethods") == 0) return(ADDMETHODS); + if (strcmp(yytext,"%inline") == 0) return(INLINE); + if (strcmp(yytext,"%typemap") == 0) return(TYPEMAP); + if (strcmp(yytext,"%except") == 0) return(EXCEPT); + if (strcmp(yytext,"%importfile") == 0) return(IMPORT); + if (strcmp(yytext,"%echo") == 0) return(ECHO); + if (strcmp(yytext,"%new") == 0) return(NEW); + if (strcmp(yytext,"%apply") == 0) return(APPLY); + if (strcmp(yytext,"%clear") == 0) return(CLEAR); + if (strcmp(yytext,"%doconly") == 0) return(DOCONLY); } - if (strcmp(yytext,"%out") == 0) { - fprintf(stderr,"%s:%d %%out directive deprecated (ignored).\n", input_file, line_number); - return(yylex()); - } - if (strcmp(yytext,"%constant") == 0) return(CONSTANT); - if (strcmp(yytext,"%macro") == 0) return(SWIGMACRO); - - if (strcmp(yytext,"%section") == 0) { - yylval.ivalue = line_number; - return(SECTION); - } - if (strcmp(yytext,"%subsection") == 0) { - yylval.ivalue = line_number; - return(SUBSECTION); - } - if (strcmp(yytext,"%subsubsection") == 0) { - yylval.ivalue = line_number; - return (SUBSUBSECTION); - } - if (strcmp(yytext,"%title") == 0) { - yylval.ivalue = line_number; - return(TITLE); - } - if (strcmp(yytext,"%style") == 0) return(STYLE); - if (strcmp(yytext,"%localstyle") == 0) return(LOCALSTYLE); - if (strcmp(yytext,"%typedef") == 0) { - yylval.ivalue = 1; - return(TYPEDEF); - } - if (strcmp(yytext,"typedef") == 0) { - yylval.ivalue = 0; - return(TYPEDEF); - } - if (strcmp(yytext,"%alpha") == 0) return(ALPHA_MODE); - if (strcmp(yytext,"%raw") == 0) return(RAW_MODE); - if (strcmp(yytext,"%text") == 0) return(TEXT); - if (strcmp(yytext,"%native") == 0) return(NATIVE); - if (strcmp(yytext,"%disabledoc") == 0) return(DOC_DISABLE); - if (strcmp(yytext,"%enabledoc") == 0) return(DOC_ENABLE); - if (strcmp(yytext,"%pragma") == 0) return(PRAGMA); - if (strcmp(yytext,"%addmethods") == 0) return(ADDMETHODS); - if (strcmp(yytext,"%inline") == 0) return(INLINE); - if (strcmp(yytext,"%typemap") == 0) return(TYPEMAP); - if (strcmp(yytext,"%except") == 0) return(EXCEPT); - if (strcmp(yytext,"%importfile") == 0) return(IMPORT); - if (strcmp(yytext,"%echo") == 0) return(ECHO); - if (strcmp(yytext,"%new") == 0) return(NEW); - if (strcmp(yytext,"%apply") == 0) return(APPLY); - if (strcmp(yytext,"%clear") == 0) return(CLEAR); - if (strcmp(yytext,"%doconly") == 0) return(DOCONLY); - - // Have an unknown identifier, as a last step, we'll + // Have an unknown identifier, as a last step, we'll // do a typedef lookup on it. - + if (check_typedef) { if (DataType_is_typedef(yytext)) { yylval.type = NewDataType(T_USER); @@ -1088,7 +1000,7 @@ extern "C" int yylex(void) { return(TYPE_TYPEDEF); } } - + yylval.id = Swig_copy_string(yytext); return(ID); default: diff --git a/SWIG/Source/SWIG1.1/swig11.h b/SWIG/Source/SWIG1.1/swig11.h index 487640ff7..5dd22d525 100644 --- a/SWIG/Source/SWIG1.1/swig11.h +++ b/SWIG/Source/SWIG1.1/swig11.h @@ -34,9 +34,9 @@ extern FILE *swig_log; #endif extern FILE *f_runtime; // Runtime code -extern FILE *f_header; // Headers -extern FILE *f_wrappers; // Wrappers -extern FILE *f_init; // Initialization code +extern DOH *f_header; // Headers +extern DOH *f_wrappers; // Wrappers +extern DOH *f_init; // Initialization code extern FILE *f_input; extern char InitName[256]; extern char LibDir[512]; // Library directory diff --git a/SWIG/Source/SWIG1.1/typemap.cxx b/SWIG/Source/SWIG1.1/typemap.cxx index 68a9b3a56..0d8bc1790 100644 --- a/SWIG/Source/SWIG1.1/typemap.cxx +++ b/SWIG/Source/SWIG1.1/typemap.cxx @@ -171,7 +171,7 @@ void typemap_apply(DataType *tm_type, char *tm_name, DataType *type, char *pname /* Check to see if an array typemap has been applied to a non-array type */ if ((DataType_arraystr(tm_type)) && (!DataType_arraystr(type))) { - fprintf(stderr,"%s:%d: Warning. Array typemap has been applied to a non-array type.\n", + Printf(stderr,"%s:%d: Warning. Array typemap has been applied to a non-array type.\n", input_file,line_number); } @@ -180,7 +180,7 @@ void typemap_apply(DataType *tm_type, char *tm_name, DataType *type, char *pname if ((DataType_arraystr(tm_type)) && (DataType_arraystr(type))) { char s[128],*t; if (DataType_array_dimensions(tm_type) != DataType_array_dimensions(type)) { - fprintf(stderr,"%s:%d: Warning. Array types have different number of dimensions.\n", + Printf(stderr,"%s:%d: Warning. Array types have different number of dimensions.\n", input_file,line_number); } else { for (int i = 0; i < DataType_array_dimensions(tm_type); i++) { @@ -188,7 +188,7 @@ void typemap_apply(DataType *tm_type, char *tm_name, DataType *type, char *pname t = DataType_get_dimension(type,i); if (strcmp(s,"ANY") != 0) { if (strcmp(s,t)) - fprintf(stderr,"%s:%d: Warning. Array typemap applied to an array of different size.\n", + Printf(stderr,"%s:%d: Warning. Array typemap applied to an array of different size.\n", input_file, line_number); } } @@ -314,7 +314,7 @@ void typemap_register(char *op, char *lang, DataType *type, char *pname, if (pn) { /* printf(" %s %s\n", pt,pn); */ } else { - fprintf(stderr,"%s:%d: Typemap error. Local variables must have a name\n", + Printf(stderr,"%s:%d: Typemap error. Local variables must have a name\n", input_file, line_number); } p = Getnext(p); @@ -648,7 +648,7 @@ char *typemap_lookup_internal(char *op, char *lang, DataType *type, char *pname, /* If there were locals and no wrapper function, print a warning */ /* if ((tm->args) && !f) { if (!pname) pname = (char*)""; - fprintf(stderr,"%s:%d: Warning. '%%typemap(%s,%s) %s %s' being applied with ignored locals.\n", + Printf(stderr,"%s:%d: Warning. '%%typemap(%s,%s) %s %s' being applied with ignored locals.\n", input_file, line_number, lang,op, DataType_str(type,0), pname); } */ @@ -1139,7 +1139,7 @@ int check_numopt(ParmList *p) { n++; } else { if (state) { - fprintf(stderr,"%s : Line %d. Argument %d must have a default value!\n", input_file,line_number,i+1); + Printf(stderr,"%s : Line %d. Argument %d must have a default value!\n", input_file,line_number,i+1); } } } diff --git a/SWIG/Source/Swig/swig.h b/SWIG/Source/Swig/swig.h index c16815253..9973d4279 100644 --- a/SWIG/Source/Swig/swig.h +++ b/SWIG/Source/Swig/swig.h @@ -130,7 +130,6 @@ extern Parm *CopyParm(Parm *p); typedef DOH ParmList; -extern ParmList *NewParmList(); extern ParmList *CopyParmList(ParmList *); extern int ParmList_len(ParmList *); @@ -262,6 +261,7 @@ extern DOHString *SwigType_array_getdim(DOHString_or_char *t, int n); extern void SwigType_array_setdim(DOHString_or_char *t, int n, DOHString_or_char *rep); extern DOHString *SwigType_default(DOHString_or_char *t); + /* --- Parse tree support --- */ typedef struct {