=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/parse/eval.c,v retrieving revision 1.23 retrieving revision 1.26 diff -u -p -r1.23 -r1.26 --- OpenXM_contrib2/asir2000/parse/eval.c 2003/05/14 09:18:38 1.23 +++ OpenXM_contrib2/asir2000/parse/eval.c 2003/05/17 11:47:51 1.26 @@ -45,7 +45,7 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/parse/eval.c,v 1.22 2003/05/14 07:08:48 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/parse/eval.c,v 1.25 2003/05/16 09:34:49 noro Exp $ */ #include #include "ca.h" @@ -63,6 +63,7 @@ extern JMP_BUF timer_env; int f_break,f_return,f_continue; int evalstatline; int recv_intr; +int show_crossref; pointer eval(FNODE f) { @@ -803,6 +804,11 @@ MODULE searchmodule(char *name) } return 0; } +/* + * xxx.yyy() is searched in the flist + * of the module xxx. + * yyy() is searched in the global flist. + */ void searchuf(char *name,FUNC *r) { @@ -874,18 +880,53 @@ void appenduf(char *name,FUNC *r) fname = (char *)MALLOC_ATOMIC(strlen(name)-len+1); strcpy(fname,dot+1); f->name = fname; + f->fullname = name; MKNODE(mod->usrf_list,f,0); } else { f->name = name; +#if 0 if ( CUR_MODULE ) { + f->fullname = + (char *)MALLOC_ATOMIC(strlen(CUR_MODULE->name)+strlen(name)+1); + sprintf(f->fullname,"%s.%s",CUR_MODULE->name,name); MKNODE(tn,f,CUR_MODULE->usrf_list); CUR_MODULE->usrf_list = tn; } else { + f->fullname = name; MKNODE(tn,f,usrf); usrf = tn; } +#else + f->fullname = name; + MKNODE(tn,f,usrf); usrf = tn; +#endif } *r = f; } +void appenduf_local(char *name,FUNC *r) +{ + NODE tn; + FUNC f; + MODULE mod; + + f=(FUNC)MALLOC(sizeof(struct oFUNC)); + f->id = A_UNDEF; f->argc = 0; f->f.binf = 0; + f->name = name; + f->fullname = + (char *)MALLOC_ATOMIC(strlen(CUR_MODULE->name)+strlen(name)+1); + sprintf(f->fullname,"%s.%s",CUR_MODULE->name,name); + MKNODE(tn,f,CUR_MODULE->usrf_list); CUR_MODULE->usrf_list = tn; + *r = f; +} + +void appenduflist(NODE n) +{ + NODE tn; + FUNC f; + + for ( tn = n; tn; tn = NEXT(tn) ) + appenduf_local((char *)BDY(tn),&f); +} + void mkparif(char *name,FUNC *r) { FUNC f; @@ -925,10 +966,15 @@ void mkuf(char *name,char *fname,NODE args,SNODE body, f=(FUNC)MALLOC(sizeof(struct oFUNC)); f->name = name; MKNODE(tn,f,usrf_list); usrf_list = tn; - if ( module ) + if ( module ) { + f->fullname = + (char *)MALLOC_ATOMIC(strlen(f->name)+strlen(module->name)+1); + sprintf(f->fullname,"%s.%s",module->name,f->name); module->usrf_list = usrf_list; - else + } else { + f->fullname = f->name; usrf = usrf_list; + } } if ( Verbose && f->id != A_UNDEF ) { if ( module ) @@ -942,6 +988,7 @@ void mkuf(char *name,char *fname,NODE args,SNODE body, t->desc = desc; f->id = A_USR; f->argc = argc; f->f.usrf = t; CPVS = GPVS; + CUR_FUNC = 0; clearbp(f); } @@ -973,8 +1020,6 @@ Obj getopt_from_cpvs(char *key) } -extern NODE MODULE_LIST; - MODULE mkmodule(char *name) { MODULE mod; @@ -1004,6 +1049,14 @@ MODULE mkmodule(char *name) } } -int afo(SNODE a1) { - printf("afo\n"); +void print_crossref(FUNC f) +{ + FUNC r; + if ( show_crossref && CUR_FUNC ) { + searchuf(f->fullname,&r); + if (r != NULL) { + fprintf(asir_out,"%s() at line %d in %s()\n", + f->fullname, asir_infile->ln, CUR_FUNC); + } + } }