[Nice-commit] Nice/src/bossa/link Alternative.java,1.50,1.51 Dispatch.java,1.68,1.69
Brought to you by:
bonniot
From: Arjan B. <ar...@us...> - 2004-08-03 10:16:25
|
Update of /cvsroot/nice/Nice/src/bossa/link In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21010/F:/nice/src/bossa/link Modified Files: Alternative.java Dispatch.java Log Message: Added a fast coverage test that can check the correctness of a part of the methods avoiding the long test. Index: Dispatch.java =================================================================== RCS file: /cvsroot/nice/Nice/src/bossa/link/Dispatch.java,v retrieving revision 1.68 retrieving revision 1.69 diff -C2 -d -r1.68 -r1.69 *** Dispatch.java 30 Jul 2004 13:06:20 -0000 1.68 --- Dispatch.java 3 Aug 2004 10:16:14 -0000 1.69 *************** *** 86,92 **** { Stack sortedAlternatives = Alternative.sortedAlternatives(m); ! if (! trivialTestOK(sortedAlternatives)) ! test(m, sortedAlternatives, false); if(Debug.codeGeneration) --- 86,93 ---- { Stack sortedAlternatives = Alternative.sortedAlternatives(m); ! if (! trivialTestOK(sortedAlternatives)) ! if (! shortTestOk(m, sortedAlternatives)) ! test(m, sortedAlternatives, false); if(Debug.codeGeneration) *************** *** 99,103 **** { Stack sortedAlternatives = Alternative.sortedAlternatives(m); ! if (! trivialTestJava(m, sortedAlternatives)) test(m, sortedAlternatives, true); --- 100,104 ---- { Stack sortedAlternatives = Alternative.sortedAlternatives(m); ! if (! trivialTestJava(m, sortedAlternatives)) test(m, sortedAlternatives, true); *************** *** 117,124 **** Alternative a = (Alternative) alternatives.peek(); ! for (int i = 0; i<a.patterns.length; i++) ! if (! a.patterns[i].atAny()) ! return false; ! return true; } --- 118,122 ---- Alternative a = (Alternative) alternatives.peek(); ! return a.allAtAny(); } *************** *** 145,148 **** --- 143,173 ---- } + private static boolean shortTestOk(NiceMethod method, Stack alternatives) + { + if (alternatives.size() < 2) + return false; + + //check for default implementation + if (! ((Alternative) alternatives.peek()).allAtAny()) + return false; + + for (int i = 0; i < alternatives.size(); i++) + for (int k = i+1; k < alternatives.size(); k++) + { + Alternative altA = (Alternative)alternatives.get(i); + Alternative altB = (Alternative)alternatives.get(k); + + if (Alternative.leq(altB, altA)) + User.error(method, "ambiguity because of equivalent patterns in:\n" + + altA.printLocated() + "\nand\n" + + altB.printLocated()); + + if (! (Alternative.leq(altA, altB) || Alternative.disjoint(altA, altB))) + return false; + } + + return true; + } + private static boolean[] findUsedPositions(int len, Stack alternatives) { Index: Alternative.java =================================================================== RCS file: /cvsroot/nice/Nice/src/bossa/link/Alternative.java,v retrieving revision 1.50 retrieving revision 1.51 diff -C2 -d -r1.50 -r1.51 *** Alternative.java 30 Jul 2004 13:06:20 -0000 1.50 --- Alternative.java 3 Aug 2004 10:16:14 -0000 1.51 *************** *** 82,85 **** --- 82,94 ---- } + static boolean disjoint(Alternative a, Alternative b) + { + for(int i = 0; i<a.patterns.length; i++) + if (a.patterns[i].disjoint(b.patterns[i])) + return true; + + return false; + } + /** * Tests the matching of tags against a method alternative. *************** *** 121,124 **** --- 130,142 ---- } + boolean allAtAny() + { + for (int i = 0; i<patterns.length; i++) + if (! patterns[i].atAny()) + return false; + + return true; + } + /**************************************************************** * Code generation |