[Nice-commit] Nice/src/mlsub/typing/lowlevel Engine.java,1.38,1.39
Brought to you by:
bonniot
From: Daniel B. <bo...@us...> - 2005-06-21 18:31:08
|
Update of /cvsroot/nice/Nice/src/mlsub/typing/lowlevel In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21791/src/mlsub/typing/lowlevel Modified Files: Engine.java Log Message: Handle setting the unknown flag on monotype variables that have been frozen. Index: Engine.java =================================================================== RCS file: /cvsroot/nice/Nice/src/mlsub/typing/lowlevel/Engine.java,v retrieving revision 1.38 retrieving revision 1.39 diff -C2 -d -r1.38 -r1.39 *** Engine.java 17 Jun 2005 14:14:08 -0000 1.38 --- Engine.java 21 Jun 2005 18:30:59 -0000 1.39 *************** *** 533,557 **** { s.push(leq.e2); } else { ! if(leq.e1.getKind()!=leq.e2.getKind()) ! throw new InternalError("Bad kinding in Engine.setKind 1"); ! i.remove(); ! k.leq(leq.e1,leq.e2,initialContext); ! } else if(leq.e2==e) // If e is Top, e1 <: e is trivial and can be discarded. if (toTop) ! i.remove(); else if (leq.e1.getKind() == null) ! s.push(leq.e1); else { ! if(leq.e1.getKind()!=leq.e2.getKind()) ! throw new InternalError("Bad kinding in Engine.setKind 2"); ! i.remove(); ! k.leq(leq.e1,leq.e2,initialContext); ! } } } --- 533,579 ---- { s.push(leq.e2); + continue; } else { ! // General case later ! } else if(leq.e2==e) // If e is Top, e1 <: e is trivial and can be discarded. if (toTop) ! { ! i.remove(); ! continue; ! } else if (leq.e1.getKind() == null) ! { ! s.push(leq.e1); ! continue; ! } else { ! // General case later ! } ! else ! continue; ! ! // General case, add leq.e1 <: leq.e2 ! if (leq.e1.getKind() != leq.e2.getKind()) ! throw new InternalError("Bad kinding in Engine.setKind"); ! ! if (leq.e1 instanceof mlsub.typing.Monotype && ! leq.e2 instanceof mlsub.typing.Monotype) ! { ! mlsub.typing.Monotype e1 = (mlsub.typing.Monotype) leq.e1; ! mlsub.typing.Monotype e2 = (mlsub.typing.Monotype) leq.e2; ! ! if (e1.isUnknown()) ! e2.setUnknown(false, true); ! else if (e2.isUnknown()) ! e1.setUnknown(true, false); ! } ! ! i.remove(); ! k.leq(leq.e1,leq.e2,initialContext); } } |