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 }