[Nice-commit] Nice/src/bossa/link Alternative.java,1.55,1.56 Dispatch.java,1.71,1.72
Brought to you by:
bonniot
From: Arjan B. <ar...@us...> - 2004-11-03 12:08:11
|
Update of /cvsroot/nice/Nice/src/bossa/link In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23248/F:/nice/src/bossa/link Modified Files: Alternative.java Dispatch.java Log Message: Extended the short coverage test to detect non-ambigious alternatives in more cases. Index: Dispatch.java =================================================================== RCS file: /cvsroot/nice/Nice/src/bossa/link/Dispatch.java,v retrieving revision 1.71 retrieving revision 1.72 diff -C2 -d -r1.71 -r1.72 *** Dispatch.java 7 Aug 2004 14:20:27 -0000 1.71 --- Dispatch.java 3 Nov 2004 12:07:54 -0000 1.72 *************** *** 164,168 **** if (! (Alternative.leq(altA, altB) || Alternative.disjoint(altA, altB))) ! return false; } --- 164,183 ---- if (! (Alternative.leq(altA, altB) || Alternative.disjoint(altA, altB))) ! { ! Alternative glb = Alternative.greatestLowerBound(altA, altB); ! if (glb == null) ! return false; ! ! boolean glbMatch = false; ! for (int j = i-1; j >= 0; j--) ! if (Alternative.leq(glb, (Alternative)alternatives.get(j))) ! { ! glbMatch = true; ! break; ! } ! ! if (! glbMatch) ! return false; ! } } Index: Alternative.java =================================================================== RCS file: /cvsroot/nice/Nice/src/bossa/link/Alternative.java,v retrieving revision 1.55 retrieving revision 1.56 diff -C2 -d -r1.55 -r1.56 *** Alternative.java 13 Oct 2004 14:27:49 -0000 1.55 --- Alternative.java 3 Nov 2004 12:07:54 -0000 1.56 *************** *** 93,96 **** --- 93,112 ---- } + static Alternative greatestLowerBound(Alternative a, Alternative b) + { + Pattern[] pats = new Pattern[a.patterns.length]; + for (int i = 0; i < a.patterns.length; i++) + { + if (bossa.syntax.dispatch.leq(a.patterns[i], b.patterns[i])) + pats[i] = a.patterns[i]; + else if (bossa.syntax.dispatch.leq(b.patterns[i], a.patterns[i])) + pats[i] = b.patterns[i]; + else + return null; + } + + return new Alternative(a.methodName, pats); + } + /** * Tests the matching of tags against a method alternative. |