=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/parse/eval.c,v retrieving revision 1.39 retrieving revision 1.42 diff -u -p -r1.39 -r1.42 --- OpenXM_contrib2/asir2000/parse/eval.c 2004/12/18 03:27:17 1.39 +++ OpenXM_contrib2/asir2000/parse/eval.c 2005/09/13 06:54:22 1.42 @@ -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.38 2004/11/22 04:11:36 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/parse/eval.c,v 1.41 2005/09/13 06:40:46 noro Exp $ */ #include #include "ca.h" @@ -71,11 +71,11 @@ pointer eval(FNODE f) STRING str; pointer val = 0; pointer a,a1,a2; - NODE tn,ind; + NODE tn,ind,match; R u; DP dp; unsigned int pv; - int c; + int c,ret; FNODE f1; UP2 up2; UP up; @@ -85,6 +85,7 @@ pointer eval(FNODE f) GFPN gfpn; GFSN gfsn; RANGE range; + QUOTE expr,pattern; #if defined(VISUAL) if ( recv_intr ) { @@ -430,6 +431,13 @@ pointer evalstat(SNODE f) break; } f_break = 0; break; + case S_MODULE: + CUR_MODULE = (MODULE)FA0(f); + if ( CUR_MODULE ) + MPVS = CUR_MODULE->pvs; + else + MPVS = 0; + break; default: error("evalstat : unknown id"); break; @@ -768,11 +776,15 @@ pointer bevalf(FUNC f,NODE a) pointer evalif(FNODE f,FNODE a) { Obj g; + FNODE t; g = (Obj)eval(f); if ( g && (OID(g) == O_P) && (VR((P)g)->attr == (pointer)V_SR) ) return evalf((FUNC)VR((P)g)->priv,a,0); - else { + else if ( g && OID(g) == O_QUOTEARG && ((QUOTEARG)g)->type == A_func ) { + t = mkfnode(2,I_FUNC,((QUOTEARG)g)->body,a); + return eval(t); + } else { error("invalid function pointer"); /* NOTREACHED */ return (pointer)-1;