version 1.1, 1999/12/03 07:39:12 |
version 1.6, 2015/08/08 14:19:42 |
|
|
/* $OpenXM: OpenXM/src/asir99/parse/cpp.c,v 1.1.1.1 1999/11/10 08:12:34 noro Exp $ */ |
/* |
#if defined(__MWERKS__) |
* Copyright (c) 1994-2000 FUJITSU LABORATORIES LIMITED |
#define THINK_C |
* All rights reserved. |
#endif |
* |
|
* FUJITSU LABORATORIES LIMITED ("FLL") hereby grants you a limited, |
|
* non-exclusive and royalty-free license to use, copy, modify and |
|
* redistribute, solely for non-commercial and non-profit purposes, the |
|
* computer program, "Risa/Asir" ("SOFTWARE"), subject to the terms and |
|
* conditions of this Agreement. For the avoidance of doubt, you acquire |
|
* only a limited right to use the SOFTWARE hereunder, and FLL or any |
|
* third party developer retains all rights, including but not limited to |
|
* copyrights, in and to the SOFTWARE. |
|
* |
|
* (1) FLL does not grant you a license in any way for commercial |
|
* purposes. You may use the SOFTWARE only for non-commercial and |
|
* non-profit purposes only, such as academic, research and internal |
|
* business use. |
|
* (2) The SOFTWARE is protected by the Copyright Law of Japan and |
|
* international copyright treaties. If you make copies of the SOFTWARE, |
|
* with or without modification, as permitted hereunder, you shall affix |
|
* to all such copies of the SOFTWARE the above copyright notice. |
|
* (3) An explicit reference to this SOFTWARE and its copyright owner |
|
* shall be made on your publication or presentation in any form of the |
|
* results obtained by use of the SOFTWARE. |
|
* (4) In the event that you modify the SOFTWARE, you shall notify FLL by |
|
* e-mail at risa-admin@sec.flab.fujitsu.co.jp of the detailed specification |
|
* for such modification or the source code of the modified part of the |
|
* SOFTWARE. |
|
* |
|
* THE SOFTWARE IS PROVIDED AS IS WITHOUT ANY WARRANTY OF ANY KIND. FLL |
|
* MAKES ABSOLUTELY NO WARRANTIES, EXPRESSED, IMPLIED OR STATUTORY, AND |
|
* EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS |
|
* FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT OF THIRD PARTIES' |
|
* RIGHTS. NO FLL DEALER, AGENT, EMPLOYEES IS AUTHORIZED TO MAKE ANY |
|
* MODIFICATIONS, EXTENSIONS, OR ADDITIONS TO THIS WARRANTY. |
|
* UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, TORT, CONTRACT, |
|
* OR OTHERWISE, SHALL FLL BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY |
|
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL |
|
* DAMAGES OF ANY CHARACTER, INCLUDING, WITHOUT LIMITATION, DAMAGES |
|
* ARISING OUT OF OR RELATING TO THE SOFTWARE OR THIS AGREEMENT, DAMAGES |
|
* FOR LOSS OF GOODWILL, WORK STOPPAGE, OR LOSS OF DATA, OR FOR ANY |
|
* DAMAGES, EVEN IF FLL SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF |
|
* SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY. EVEN IF A PART |
|
* OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY |
|
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
|
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
|
* |
|
* $OpenXM: OpenXM_contrib2/asir2000/parse/cpp.c,v 1.5 2015/08/06 10:01:53 fujimoto Exp $ |
|
*/ |
#include <stdio.h> |
#include <stdio.h> |
#include <ctype.h> |
#include <ctype.h> |
#include <setjmp.h> |
#include <setjmp.h> |
|
|
#include "unctrl.h" |
#include "unctrl.h" |
#endif |
#endif |
|
|
#if defined(THINK_C) |
|
#include <string.h> |
|
|
|
int define(char *,int,unsigned char *,int); |
|
void Bcopy(char *,char *,int); |
|
#endif |
|
|
|
|
|
#include "cpp.h" |
#include "cpp.h" |
|
|
char *init_accum(void) |
char *init_accum(void) |
Line 170 void do_at(void) |
|
Line 207 void do_at(void) |
|
{ if (! in_false_if()) |
{ if (! in_false_if()) |
{ err_head(); |
{ err_head(); |
fprintf(stderr,"unknown control `%s'\n",w); |
fprintf(stderr,"unknown control `%s'\n",w); |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
} |
} |
} |
} |
free(w); |
free(w); |
Line 319 void read_formals(void) |
|
Line 359 void read_formals(void) |
|
} |
} |
} |
} |
} |
} |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
} |
} |
} |
} |
|
|
Line 364 void do_define(int sharp, int redef) |
|
Line 407 void do_define(int sharp, int redef) |
|
if (! mac) |
if (! mac) |
{ err_head(); |
{ err_head(); |
fprintf(stderr,"missing/illegal macro name\n"); |
fprintf(stderr,"missing/illegal macro name\n"); |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
flush_sharp_line(); |
flush_sharp_line(); |
return; |
return; |
} |
} |
Line 374 void do_define(int sharp, int redef) |
|
Line 420 void do_define(int sharp, int redef) |
|
if (nargs > 128) |
if (nargs > 128) |
{ err_head(); |
{ err_head(); |
fprintf(stderr,"too many macro formals, more than 128 ignored\n"); |
fprintf(stderr,"too many macro formals, more than 128 ignored\n"); |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
nargs = 128; |
nargs = 128; |
} |
} |
} |
} |
Line 567 void do_dump(void) |
|
Line 616 void do_dump(void) |
|
{ fprintf(stderr,"\t\t%s\n",incldir[i]); |
{ fprintf(stderr,"\t\t%s\n",incldir[i]); |
} |
} |
fprintf(stderr,"\t\t%s\n",cur_incldir); |
fprintf(stderr,"\t\t%s\n",cur_incldir); |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
} |
} |
|
|
void dump_single(DEF *d) |
void dump_single(DEF *d) |
Line 593 void dump_single(DEF *d) |
|
Line 645 void dump_single(DEF *d) |
|
{ putc(*cp,stderr); |
{ putc(*cp,stderr); |
} |
} |
} |
} |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
} |
} |
|
|
void err_head(void) |
void err_head(void) |
{ |
{ |
fprintf(stderr,"\"%s\", line %d: ",curfile(),curline()); |
fprintf(stderr,"\"%s\", line %d: ",curfile(),curline()); |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
} |
} |
|
|
void Check_malloc(char *ptr) |
void Check_malloc(char *ptr) |
{ |
{ |
if (ptr == 0) |
if (ptr == 0) |
{ fprintf(stderr,"out of memory!\n"); |
{ fprintf(stderr,"out of memory!\n"); |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
abort(); |
abort(); |
} |
} |
} |
} |
Line 626 void do_eval(void) |
|
Line 687 void do_eval(void) |
|
for (i=strlen(temp)-1;i>=0;i--) |
for (i=strlen(temp)-1;i>=0;i--) |
{ Push(temp[i]); |
{ Push(temp[i]); |
} |
} |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
} |
} |
} |
} |
|
|
Line 760 void read_actuals(DEF *d) |
|
Line 824 void read_actuals(DEF *d) |
|
actlens[i] = 0; |
actlens[i] = 0; |
} |
} |
} |
} |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
} |
} |
|
|
void expand_def(DEF *d) |
void expand_def(DEF *d) |
Line 1053 int get_quote_char(void) |
|
Line 1120 int get_quote_char(void) |
|
if (c == '\n') |
if (c == '\n') |
{ err_head(); |
{ err_head(); |
fprintf(stderr,"newline in character constant\n"); |
fprintf(stderr,"newline in character constant\n"); |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
return(-1); |
return(-1); |
} |
} |
if (c != '\\') |
if (c != '\\') |
Line 1129 NODE *read_expr_11(void) |
|
Line 1199 NODE *read_expr_11(void) |
|
if (c != ')') |
if (c != ')') |
{ err_head(); |
{ err_head(); |
fprintf(stderr,"expression syntax error -- missing ) supplied\n"); |
fprintf(stderr,"expression syntax error -- missing ) supplied\n"); |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
Push(c); |
Push(c); |
} |
} |
#ifdef DEBUG_EXPR |
#ifdef DEBUG_EXPR |
Line 1176 NODE *read_expr_11(void) |
|
Line 1249 NODE *read_expr_11(void) |
|
{ err_head(); |
{ err_head(); |
fprintf(stderr,"warning: illegal %sdigit `%c'\n", |
fprintf(stderr,"warning: illegal %sdigit `%c'\n", |
(base==16)?"hex ":(base==8)?"octal ":"",c); |
(base==16)?"hex ":(base==8)?"octal ":"",c); |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
} |
} |
v = (v * base) + values[d-digits]; |
v = (v * base) + values[d-digits]; |
c = Get(); |
c = Get(); |
Line 1198 NODE *read_expr_11(void) |
|
Line 1274 NODE *read_expr_11(void) |
|
if (n > 4) |
if (n > 4) |
{ err_head(); |
{ err_head(); |
fprintf(stderr,"warning: too many characters in character constant\n"); |
fprintf(stderr,"warning: too many characters in character constant\n"); |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
} |
} |
return(newleaf(i)); |
return(newleaf(i)); |
} |
} |
Line 1209 NODE *read_expr_11(void) |
|
Line 1288 NODE *read_expr_11(void) |
|
if (complain) |
if (complain) |
{ err_head(); |
{ err_head(); |
fprintf(stderr,"expression syntax error -- number expected\n"); |
fprintf(stderr,"expression syntax error -- number expected\n"); |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
} |
} |
if (isbsymchar(c)) |
if (isbsymchar(c)) |
{ Push(c); |
{ Push(c); |
Line 1791 NODE *read_expr_(void) |
|
Line 1873 NODE *read_expr_(void) |
|
default: |
default: |
err_head(); |
err_head(); |
fprintf(stderr,"expression syntax error -- bad operator `%c'\n",c); |
fprintf(stderr,"expression syntax error -- bad operator `%c'\n",c); |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
return(l); |
return(l); |
break; |
break; |
} |
} |
Line 1814 NODE *read_expr_p(void) |
|
Line 1899 NODE *read_expr_p(void) |
|
if (c != ')') |
if (c != ')') |
{ err_head(); |
{ err_head(); |
fprintf(stderr,"junk after expression\n"); |
fprintf(stderr,"junk after expression\n"); |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
} |
} |
return(rv); |
return(rv); |
} |
} |
Line 1839 int eval_expr(int Sharp, int Complain) |
|
Line 1927 int eval_expr(int Sharp, int Complain) |
|
{ if (complain) |
{ if (complain) |
{ err_head(); |
{ err_head(); |
fprintf(stderr,"expression syntax error -- junk after expression\n"); |
fprintf(stderr,"expression syntax error -- junk after expression\n"); |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
} |
} |
while (Get() != d) ; |
while (Get() != d) ; |
} |
} |
Line 1944 void do_if(int expr_sharp) |
|
Line 2035 void do_if(int expr_sharp) |
|
if (c != '(') |
if (c != '(') |
{ err_head(); |
{ err_head(); |
fprintf(stderr,"@if must have ()s\n"); |
fprintf(stderr,"@if must have ()s\n"); |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
Push(c); |
Push(c); |
iffalse(); |
iffalse(); |
#ifdef DEBUG_IF |
#ifdef DEBUG_IF |
Line 2140 void do_else(int expr_sharp) |
|
Line 2234 void do_else(int expr_sharp) |
|
#endif |
#endif |
err_head(); |
err_head(); |
fprintf(stderr,"if-less else\n"); |
fprintf(stderr,"if-less else\n"); |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
} |
} |
} |
} |
else |
else |
Line 2195 void do_elif(int expr_sharp) |
|
Line 2292 void do_elif(int expr_sharp) |
|
if (ifstack == 0) |
if (ifstack == 0) |
{ err_head(); |
{ err_head(); |
fprintf(stderr,"if-less elif converted to normal if\n"); |
fprintf(stderr,"if-less elif converted to normal if\n"); |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
iffalse(); |
iffalse(); |
} |
} |
if (n_skipped_ifs > 0) |
if (n_skipped_ifs > 0) |
Line 2219 void do_elif(int expr_sharp) |
|
Line 2319 void do_elif(int expr_sharp) |
|
if (c != '(') |
if (c != '(') |
{ err_head(); |
{ err_head(); |
fprintf(stderr,"@elif must have ()s\n"); |
fprintf(stderr,"@elif must have ()s\n"); |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
Push(c); |
Push(c); |
ifstack->condstate = IFSTATE_STAYFALSE; |
ifstack->condstate = IFSTATE_STAYFALSE; |
#ifdef DEBUG_IF |
#ifdef DEBUG_IF |
Line 2301 void do_endif(int expr_sharp) |
|
Line 2404 void do_endif(int expr_sharp) |
|
else |
else |
{ err_head(); |
{ err_head(); |
fprintf(stderr,"if-less endif\n"); |
fprintf(stderr,"if-less endif\n"); |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
#ifdef DEBUG_IF |
#ifdef DEBUG_IF |
if (debugging) |
if (debugging) |
{ outputc('>'); |
{ outputc('>'); |
Line 2433 void do_include(int expr_sharp) |
|
Line 2539 void do_include(int expr_sharp) |
|
err_head(); |
err_head(); |
fprintf(stderr,"warning: unterminated %cinclude filename\n", |
fprintf(stderr,"warning: unterminated %cinclude filename\n", |
sharp?'#':'@'); |
sharp?'#':'@'); |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
} |
} |
if (c == '"') |
if (c == '"') |
{ break; |
{ break; |
Line 2453 void do_include(int expr_sharp) |
|
Line 2562 void do_include(int expr_sharp) |
|
err_head(); |
err_head(); |
fprintf(stderr,"warning: unterminated %cinclude filename\n", |
fprintf(stderr,"warning: unterminated %cinclude filename\n", |
sharp?'#':'@'); |
sharp?'#':'@'); |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
} |
} |
if (c == '>') |
if (c == '>') |
{ break; |
{ break; |
Line 2468 void do_include(int expr_sharp) |
|
Line 2580 void do_include(int expr_sharp) |
|
{ free(accum_result(acc)); |
{ free(accum_result(acc)); |
err_head(); |
err_head(); |
fprintf(stderr,"illegal %cinclude filename delimiter\n",sharp?'#':'@'); |
fprintf(stderr,"illegal %cinclude filename delimiter\n",sharp?'#':'@'); |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
} |
} |
} |
} |
|
|
#if defined(THINK_C) |
|
#if defined(DELIM) |
|
#undef DELIM |
|
#endif |
|
#define DELIM ':' |
|
#endif |
|
|
|
#if defined(SYSV) |
#if defined(SYSV) |
#else |
#else |
#if defined(DELIM) |
#if defined(DELIM) |
Line 2486 void do_include(int expr_sharp) |
|
Line 2594 void do_include(int expr_sharp) |
|
#define DELIM '/' |
#define DELIM '/' |
#endif |
#endif |
|
|
#if defined(VISUAL) |
#if defined(VISUAL) || defined(__MINGW32__) || defined(__MINGW64__) |
#if defined(DELIM) |
#if defined(DELIM) |
#undef DELIM |
#undef DELIM |
#endif |
#endif |
Line 2533 void read_include_file(char *name, int dohere, int exp |
|
Line 2641 void read_include_file(char *name, int dohere, int exp |
|
if (f == NULL) |
if (f == NULL) |
{ err_head(); |
{ err_head(); |
fprintf(stderr,"can't find include file %s\n",name); |
fprintf(stderr,"can't find include file %s\n",name); |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
free(name); |
free(name); |
return; |
return; |
} |
} |
Line 2749 void Push(char c) |
|
Line 2860 void Push(char c) |
|
{ |
{ |
if (cur_npushed > MAX_PUSHBACK) |
if (cur_npushed > MAX_PUSHBACK) |
{ fprintf(stderr,"too much pushback\n"); |
{ fprintf(stderr,"too much pushback\n"); |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
cur_npushed = 0; |
cur_npushed = 0; |
} |
} |
PUSH() = c; |
PUSH() = c; |
Line 3127 void mark_file_ending(void) |
|
Line 3241 void mark_file_ending(void) |
|
} |
} |
else if (m->nincs <= 0) |
else if (m->nincs <= 0) |
{ fprintf(stderr,"INTERNAL BUG: nincs<0 in mark_file_ending\n"); |
{ fprintf(stderr,"INTERNAL BUG: nincs<0 in mark_file_ending\n"); |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
abort(); |
abort(); |
} |
} |
else |
else |
Line 3589 void cpp_main(int ac, char **av) |
|
Line 3706 void cpp_main(int ac, char **av) |
|
} |
} |
} |
} |
} |
} |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
} |
} |
|
|
void do_pragma(void) |
void do_pragma(void) |
Line 3648 void do_set(void) |
|
Line 3768 void do_set(void) |
|
check_malloc(cp); |
check_malloc(cp); |
define(mac,-1,(unsigned char *)cp,DEF_DEFINE); |
define(mac,-1,(unsigned char *)cp,DEF_DEFINE); |
} |
} |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
free(mac); |
free(mac); |
} |
} |
|
|
Line 3711 void do_sharp(void) |
|
Line 3834 void do_sharp(void) |
|
flush_sharp_line(); |
flush_sharp_line(); |
} |
} |
} |
} |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
maybe_print('\n'); |
maybe_print('\n'); |
free(w); |
free(w); |
} |
} |
Line 3879 void define(char *name, int nargs, unsigned char *repl |
|
Line 4005 void define(char *name, int nargs, unsigned char *repl |
|
{ if ( (nargs != d->nargs) || strcmp((char *)repl,(char *)d->repl) ) |
{ if ( (nargs != d->nargs) || strcmp((char *)repl,(char *)d->repl) ) |
{ err_head(); |
{ err_head(); |
fprintf(stderr,"%s redefined\n",n); |
fprintf(stderr,"%s redefined\n",n); |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
} |
} |
free((char *)d->repl); |
free((char *)d->repl); |
free(d->name); |
free(d->name); |
Line 4509 void do_undef(int expr_sharp) |
|
Line 4638 void do_undef(int expr_sharp) |
|
if (! mac) |
if (! mac) |
{ err_head(); |
{ err_head(); |
fprintf(stderr,"missing/illegal macro name\n"); |
fprintf(stderr,"missing/illegal macro name\n"); |
|
#if defined(__MINGW32__) || defined(__MINGW64__) |
|
fflush(stderr); |
|
#endif |
} |
} |
else |
else |
{ if (undef(mac)) |
{ if (undef(mac)) |