=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2018/parse/eval.c,v retrieving revision 1.1 retrieving revision 1.4 diff -u -p -r1.1 -r1.4 --- OpenXM_contrib2/asir2018/parse/eval.c 2018/09/19 05:45:08 1.1 +++ OpenXM_contrib2/asir2018/parse/eval.c 2019/11/12 10:53:23 1.4 @@ -45,7 +45,7 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM$ + * $OpenXM: OpenXM_contrib2/asir2018/parse/eval.c,v 1.3 2019/08/21 00:37:47 noro Exp $ */ #include #include "ca.h" @@ -173,7 +173,10 @@ pointer eval(FNODE f) evalnodebody((NODE)FA0(f),&tn); nodetod(tn,&dp); val = (pointer)dp; break; case I_EVM: - evalnodebody((NODE)FA0(f),&tn); pos = (Obj)eval((FNODE)FA1(f)); nodetodpm(tn,pos,&dpm); val = (pointer)dpm; + evalnodebody((NODE)FA0(f),&tn); pos = (Obj)eval((FNODE)FA1(f)); + if ( !pos ) + error("position of a module element must be positive."); + nodetodpm(tn,pos,&dpm); val = (pointer)dpm; break; case I_FUNC: val = evalf((FUNC)FA0(f),(FNODE)FA1(f),0); break; @@ -196,7 +199,7 @@ pointer eval(FNODE f) int interval; Obj expired; - interval = QTOS((Q)eval((FNODE)FA0(f))); + interval = ZTOS((Q)eval((FNODE)FA0(f))); expired = (Obj)eval((FNODE)FA2(f)); set_timer(interval); savepvs(); @@ -747,7 +750,11 @@ pointer evalstat(SNODE f) makevar(buf,&u); a[i] = VR(u); substr(CO,0,(Obj)s,VR((P)t),(Obj)u,(Obj *)&s1); s = s1; } +#if defined(INTERVAL) + mkpf((char *)FA0(f),(Obj)s,ac,a,0,0,0,0,(PF *)&val); val = 0; +#else mkpf((char *)FA0(f),(Obj)s,ac,a,0,0,0,(PF *)&val); val = 0; +#endif v = searchvar((char *)FA0(f)); if ( v ) { searchpf((char *)FA0(f),&func); @@ -1326,7 +1333,7 @@ pointer evalpf(PF pf,NODE args,NODE dargs) ad[i].arg = (Obj)node->body; if ( !dnode ) ad[i].d = 0; else - ad[i].d = QTOS((Q)dnode->body); + ad[i].d = ZTOS((Q)dnode->body); node = NEXT(node); if ( dnode ) dnode = NEXT(dnode); } @@ -1335,7 +1342,7 @@ pointer evalpf(PF pf,NODE args,NODE dargs) s = pf->body; if ( dargs ) { for ( i = 0, dnode = dargs; dnode; dnode = NEXT(dnode), i++ ) { - di = QTOS((Q)dnode->body); + di = ZTOS((Q)dnode->body); for ( j = 0; j < di; j++ ) { derivr(CO,s,pf->args[i],&s1); s = s1; }