=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/parse/eval.c,v retrieving revision 1.33 retrieving revision 1.37 diff -u -p -r1.33 -r1.37 --- OpenXM_contrib2/asir2000/parse/eval.c 2004/05/14 09:20:57 1.33 +++ OpenXM_contrib2/asir2000/parse/eval.c 2004/11/22 02:26:56 1.37 @@ -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.32 2004/04/30 08:25:38 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/parse/eval.c,v 1.36 2004/10/27 08:21:47 noro Exp $ */ #include #include "ca.h" @@ -306,8 +306,6 @@ pointer eval(FNODE f) MKLIST(t,NEXT(BDY((LIST)a))); val = (pointer)t; } break; - case I_PROC: - val = (pointer)FA0(f); break; case I_INDEX: a = eval((FNODE)FA0(f)); ind = (NODE)FA1(f); evalnodebody(ind,&tn); getarray(a,tn,&val); @@ -466,6 +464,10 @@ pointer evalf(FUNC f,FNODE a,FNODE opt) sprintf(errbuf,"evalf : %s undefined",NAME(f)); error(errbuf); } + if ( getsecuremode() && !PVSS && !f->secure ) { + sprintf(errbuf,"evalf : %s not permitted",NAME(f)); + error(errbuf); + } if ( f->id != A_PARI ) { for ( i = 0, tn = a?(NODE)FA0(a):0; tn; i++, tn = NEXT(tn) ); if ( ((n = f->argc)>= 0 && i != n) || (n < 0 && i > -n) ) { @@ -696,6 +698,10 @@ pointer bevalf(FUNC f,NODE a) sprintf(errbuf,"bevalf : %s undefined",NAME(f)); error(errbuf); } + if ( getsecuremode() && !PVSS && !f->secure ) { + sprintf(errbuf,"bevalf : %s not permitted",NAME(f)); + error(errbuf); + } if ( f->id != A_PARI ) { for ( i = 0, tn = a; tn; i++, tn = NEXT(tn) ); if ( ((n = f->argc)>= 0 && i != n) || (n < 0 && i > -n) ) { @@ -863,6 +869,27 @@ void gen_searchf(char *name,FUNC *r) searchuf(name,&val); if ( !val ) appenduf(name,&val); + *r = val; +} + +void gen_searchf_searchonly(char *name,FUNC *r) +{ + FUNC val = 0; + int global = 0; + if ( *name == ':' ) { + global = 1; + name += 2; + } + if ( CUR_MODULE && !global ) + searchf(CUR_MODULE->usrf_list,name,&val); + if ( !val ) + searchf(sysf,name,&val); + if ( !val ) + searchf(ubinf,name,&val); + if ( !val ) + searchpf(name,&val); + if ( !val ) + searchuf(name,&val); *r = val; }