=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/parse/puref.c,v retrieving revision 1.8 retrieving revision 1.11 diff -u -p -r1.8 -r1.11 --- OpenXM_contrib2/asir2000/parse/puref.c 2005/10/05 08:57:25 1.8 +++ OpenXM_contrib2/asir2000/parse/puref.c 2015/08/08 14:19:42 1.11 @@ -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/puref.c,v 1.7 2004/08/18 00:50:37 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/parse/puref.c,v 1.10 2014/09/19 01:26:00 noro Exp $ */ #include "ca.h" #include "parse.h" @@ -104,6 +104,9 @@ void mkpf(char *name,Obj body,int argc,V *args, /* fprintf(stderr,"%s() defined.\n",name); */ } else fprintf(stderr,"%s() redefined.\n",name); +#if defined(__MINGW32__) || defined(__MINGW64__) + fflush(stderr); +#endif BDY(node) = (pointer)pf; *pfp = pf; } @@ -284,6 +287,28 @@ void derivr(VL vl,Obj a,V v,Obj *b) } } +void simple_derivr(VL vl,Obj a,V v,Obj *b) +{ + Obj r,s,t,u,nm,dn; + + if ( !a || NUM(a) ) + *b = 0; + else + switch ( OID(a) ) { + case O_P: + pderivr(vl,a,v,b); break; + case O_R: + nm = (Obj)NM((R)a); dn = (Obj)DN((R)a); + /* (nm/dn)' = nm'/dn - dn'/dn*nm/dn */ + pderivr(vl,nm,v,&s); divr(vl,s,dn,&u); reductr(vl,u,&t); + pderivr(vl,dn,v,&s); divr(vl,s,dn,&u); reductr(vl,u,&s); mulr(vl,s,a,&u); + subr(vl,t,u,&s); reductr(vl,s,b); + break; + default: + error("simple_derivr : invalid argument"); + } +} + int obj_is_dependent(Obj a,V v) { if ( !a || OID(a) <= O_N ) return 0; @@ -628,6 +653,20 @@ void devalins(PFINS ins,Obj *rp) } MKReal(d,r); *rp = (Obj)r; } +} + +extern int evalef; + +void simplify_elemfunc_ins(PFINS ins,Obj *rp) +{ + V v; + P t; + + if ( evalef ) + evalins(ins,0,rp); + else { + instov(ins,&v); MKV(v,t); *rp = (Obj)t; + } } void simplify_ins(PFINS ins,Obj *rp)