1 cananian 1.1.2.1 // CleanHandlers.java, created Wed Nov 15 23:31:06 2000 by cananian
 2 cananian 1.1.2.2 // Copyright (C) 2000 C. Scott Ananian <cananian@alumni.princeton.edu>
 3 cananian 1.1.2.1 // Licensed under the terms of the GNU GPL; see COPYING for details.
 4 cananian 1.1.2.1 package harpoon.IR.Quads;
 5 cananian 1.1.2.1 
 6 cananian 1.1.2.1 import java.util.HashSet;
 7 cananian 1.1.2.1 import java.util.Iterator;
 8 cananian 1.1.2.1 import java.util.Set;
 9 cananian 1.1.2.1 /**
10 cananian 1.1.2.1  * <code>CleanHandlers</code> gets rid of unreachable
11 cananian 1.1.2.1  * <code>Quad</code>s from the handlers of a <code>Code</code>.  It is
12 cananian 1.1.2.1  * here because <code>Translate</code> is sloppy about removing
13 cananian 1.1.2.1  * <code>Quad</code>s (especially <code>PHI</code>s) from the handler
14 cananian 1.1.2.1  * set when they're unreachable or replaced.  But we don't want to
15 cananian 1.1.2.1  * risk touching <code>Translate</code> after all this time.
16 cananian 1.1.2.1  * 
17 cananian 1.1.2.1  * @author  C. Scott Ananian <cananian@alumni.princeton.edu>
18 cananian 1.2      * @version $Id: CleanHandlers.java,v 1.2 2002/02/25 21:05:12 cananian Exp $
19 cananian 1.1.2.1  */
20 cananian 1.1.2.1 class CleanHandlers {
21 cananian 1.1.2.1     static void clean(Code code) {
22 cananian 1.1.2.1         Set reachable = new HashSet(code.getElementsL());
23 cananian 1.1.2.1         HEADER header = (HEADER) code.getRootElement();
24 cananian 1.1.2.1         METHOD method = header.method();
25 cananian 1.1.2.1         for (int i=1; i<method.nextLength(); i++) {
26 cananian 1.1.2.1             HANDLER handler = (HANDLER) method.next(i);
27 cananian 1.1.2.1             for (Iterator it=handler.protectedSet.iterator(); it.hasNext(); )
28 cananian 1.1.2.1                 if (!reachable.contains(it.next()))
29 cananian 1.1.2.1                     it.remove();
30 cananian 1.1.2.1         }
31 cananian 1.1.2.1     }
32 cananian 1.2     }