=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/engine/PU.c,v retrieving revision 1.13 retrieving revision 1.15 diff -u -p -r1.13 -r1.15 --- OpenXM_contrib2/asir2000/engine/PU.c 2010/01/28 08:56:26 1.13 +++ OpenXM_contrib2/asir2000/engine/PU.c 2018/02/28 03:55:38 1.15 @@ -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/engine/PU.c,v 1.12 2004/09/14 09:25:48 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/engine/PU.c,v 1.14 2010/01/31 03:25:54 noro Exp $ */ #include "ca.h" @@ -131,7 +131,7 @@ void substpp(VL vl,P p,V *vvect,P *svect,int nv,P *pr) else { v = VR(p); for ( i = 0; i < nv; i++ ) if ( vvect[i] == v ) break; - if ( OID(svect[i]) < 0 ) { + if ( svect[i] && OID(svect[i]) < 0 ) { MKV(VR(p),x); for ( c = 0, dc = DC(p); dc; dc = NEXT(dc) ) { substpp(vl,COEF(dc),vvect,svect,nv,&t); @@ -729,6 +729,10 @@ void premp(VL vl,P p1,P p2,P *pr) *pr = 0; else if ( ( v1 = VR(p1) ) == ( v2 = VR(p2) ) ) { n1 = deg(v1,p1); n2 = deg(v1,p2); + if ( n1 < n2 ) { + *pr = p1; + return; + } pw = (P *)ALLOCA((n1+1)*sizeof(P)); bzero((char *)pw,(int)((n1+1)*sizeof(P)));