1 cananian 1.1 // DynamicSyncRemoval.java, created Sat Apr 12 15:17:41 2003 by salcianu
 2 cananian 1.1 // Copyright (C) 2003 Alexandru Salcianu <salcianu@MIT.EDU>
 3 cananian 1.1 // Licensed under the terms of the GNU GPL; see COPYING for details.
 4 cananian 1.1 package harpoon.Main;
 5 cananian 1.1 
 6 cananian 1.1 import harpoon.Analysis.Quads.QuadClassHierarchy;
 7 cananian 1.1 import harpoon.Util.Options.Option;
 8 cananian 1.1 
 9 cananian 1.1 import java.util.Arrays;
10 cananian 1.1 import java.util.List;
11 cananian 1.1 
12 cananian 1.1 /**
13 cananian 1.1  * <code>DynamicSyncRemoval</code>
14 cananian 1.1  * 
15 cananian 1.1  * @author  C. Scott Ananian <cananian@alumni.princeton.edu>
16 cananian 1.3  * @version $Id: DynamicSyncRemoval.java,v 1.3 2003/07/12 03:13:22 cananian Exp $
17 cananian 1.1  */
18 cananian 1.1 public abstract class DynamicSyncRemoval {
19 cananian 1.1     
20 cananian 1.1     private static boolean DO_DYN_SYNC_REMOVE = false;
21 cananian 1.1 
22 cananian 1.1     private static boolean enabled() { return DO_DYN_SYNC_REMOVE; }
23 cananian 1.1 
24 cananian 1.1     public static class QuadPass extends CompilerStageEZ {
25 cananian 1.1         public QuadPass() { super("dynamic-sync-removal.quad-pass"); }
26 cananian 1.1 
27 cananian 1.1         public List<Option> getOptions() {
28 cananian 1.1             List<Option> opts = Arrays.asList
29 cananian 1.1                 (new Option[] {
30 cananian 1.1                     new Option("dyn-sync",
31 cananian 1.1                                "Dynamic sync removal support (CSA)") {
32 cananian 1.1                         public void action() { DO_DYN_SYNC_REMOVE = true; }
33 cananian 1.1                     },
34 cananian 1.1                 });
35 cananian 1.1             return opts;
36 cananian 1.1         }
37 cananian 1.1 
38 cananian 1.1         public boolean enabled() { return DynamicSyncRemoval.enabled(); }
39 cananian 1.1         
40 cananian 1.1         public void real_action() {
41 cananian 1.1             hcf = new harpoon.Analysis.DynamicSyncRemoval.SyncRemover
42 cananian 1.1                 (hcf, linker).codeFactory();
43 cananian 1.1             classHierarchy = new QuadClassHierarchy(linker, roots, hcf);
44 cananian 1.1         }
45 cananian 1.1     }
46 cananian 1.1 
47 cananian 1.1 
48 cananian 1.1     public static class TreePass extends CompilerStageEZ {
49 cananian 1.1         public TreePass() { super("dynamic-sync-removal.tree-pass"); }
50 cananian 1.1         public boolean enabled() { return DynamicSyncRemoval.enabled(); }
51 cananian 1.1         
52 cananian 1.1         public void real_action() {
53 cananian 1.1             hcf = harpoon.Analysis.DynamicSyncRemoval.SyncRemover
54 cananian 1.1                 .treeCodeFactory(frame, hcf);
55 cananian 1.3             // config checking
56 cananian 1.3             frame.getRuntime().configurationSet.add
57 cananian 1.3                 ("check_with_dynamic_sync_removal_needed");   
58 cananian 1.1         }
59 cananian 1.1     }
60 cananian 1.1 }