[Nice-commit] Nice/src/mlsub/typing/lowlevel Engine.java,1.29,1.30
Brought to you by:
bonniot
From: Daniel B. <bo...@us...> - 2004-03-23 14:55:48
|
Update of /cvsroot/nice/Nice/src/mlsub/typing/lowlevel In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6638/src/mlsub/typing/lowlevel Modified Files: Engine.java Log Message: Make sure to mark all existential elements when needed. Index: Engine.java =================================================================== RCS file: /cvsroot/nice/Nice/src/mlsub/typing/lowlevel/Engine.java,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -d -r1.29 -r1.30 *** Engine.java 17 Mar 2004 16:55:33 -0000 1.29 --- Engine.java 23 Mar 2004 14:45:21 -0000 1.30 *************** *** 566,587 **** soft.clear(); ! try { ! for(Iterator i = frozenLeqs.iterator(); i.hasNext();) ! { ! Leq leq = (Leq) i.next(); ! Element e1 = leq.e1; ! Element e2 = leq.e2; ! // If at least one of the two is existential, then we must ! // keep ! if (e1.isExistential()) ! ((mlsub.typing.MonotypeVar) e2).setExistential(); ! else if (e2.isExistential()) ! ((mlsub.typing.MonotypeVar) e1).setExistential(); ! } ! } ! finally{ ! frozenLeqs.endOfIteration(); } try { --- 566,602 ---- soft.clear(); ! boolean more; ! do { ! more = false; ! try { ! for(Iterator i = frozenLeqs.iterator(); i.hasNext();) ! { ! Leq leq = (Leq) i.next(); ! Element e1 = leq.e1; ! Element e2 = leq.e2; ! // If at least one of the two is existential, then we must ! // keep both frozen. ! if ((e1.isExistential() && ! e2.isExistential()) ! || ! (e2.isExistential() && ! e1.isExistential())) ! { ! // Since we are marking an element as existential, we should ! // do one more pass to make sure all related elements are ! // marked ! more = true; ! ! if (e1.isExistential()) ! ((mlsub.typing.MonotypeVar) e2).setExistential(); ! else if (e2.isExistential()) ! ((mlsub.typing.MonotypeVar) e1).setExistential(); ! } ! } ! } ! finally{ ! frozenLeqs.endOfIteration(); ! } } + while (more); try { |