1 salcianu 1.1 // Transactions.java, created Sat Apr 12 15:17:41 2003 by salcianu 2 salcianu 1.1 // Copyright (C) 2003 Alexandru Salcianu <salcianu@MIT.EDU> 3 salcianu 1.1 // Licensed under the terms of the GNU GPL; see COPYING for details. 4 salcianu 1.1 package harpoon.Main; 5 salcianu 1.1 6 salcianu 1.1 7 salcianu 1.1 import harpoon.Analysis.Quads.QuadClassHierarchy; 8 salcianu 1.1 import harpoon.Analysis.Transactions.SyncTransformer; 9 cananian 1.3 import harpoon.Backend.Generic.Frame; 10 cananian 1.3 import harpoon.ClassFile.HData; 11 salcianu 1.1 import harpoon.Util.Options.Option; 12 salcianu 1.1 13 cananian 1.3 import java.util.Arrays; 14 cananian 1.3 import java.util.Iterator; 15 salcianu 1.1 import java.util.List; 16 salcianu 1.1 import java.util.LinkedList; 17 salcianu 1.1 18 salcianu 1.1 19 salcianu 1.1 /** 20 salcianu 1.1 * <code>Transactions</code> 21 salcianu 1.1 * 22 salcianu 1.1 * @author Alexandru Salcianu <salcianu@MIT.EDU> 23 cananian 1.3 * @version $Id: Transactions.java,v 1.3 2003/07/21 21:21:55 cananian Exp $ 24 salcianu 1.1 */ 25 salcianu 1.1 public abstract class Transactions { 26 salcianu 1.1 27 cananian 1.3 static boolean DO_TRANSACTIONS = false; 28 salcianu 1.1 private static SyncTransformer syncTransformer = null; 29 salcianu 1.1 30 salcianu 1.1 private static boolean enabled() { return DO_TRANSACTIONS; } 31 salcianu 1.1 32 salcianu 1.1 public static class QuadPass extends CompilerStageEZ { 33 salcianu 1.1 public QuadPass() { super("transactions.quad-pass"); } 34 salcianu 1.1 35 cananian 1.3 public List<Option> getOptions() { 36 cananian 1.3 return Arrays.asList(new Option[] { 37 cananian 1.3 new Option("T", "Transactions support (CSA)") { 38 cananian 1.3 public void action() { DO_TRANSACTIONS = true; } 39 cananian 1.3 } 40 salcianu 1.1 }); 41 salcianu 1.1 } 42 salcianu 1.2 43 salcianu 1.2 public boolean enabled() { return Transactions.enabled(); } 44 salcianu 1.1 45 salcianu 1.1 public void real_action() { 46 salcianu 1.1 if(!DO_TRANSACTIONS) return; 47 salcianu 1.1 String resource = frame.getRuntime().resourcePath 48 cananian 1.3 ("transact-root.properties"); 49 salcianu 1.1 hcf = harpoon.IR.Quads.QuadSSI.codeFactory(hcf); 50 salcianu 1.1 hcf = new harpoon.Analysis.Transactions.ArrayCopyImplementer 51 salcianu 1.1 (hcf, linker); 52 salcianu 1.1 hcf = new harpoon.Analysis.Transactions.CloneImplementer 53 salcianu 1.1 (hcf, linker, classHierarchy.classes()); 54 salcianu 1.1 hcf = new harpoon.ClassFile.CachingCodeFactory(hcf); 55 salcianu 1.1 classHierarchy = new QuadClassHierarchy(linker, roots, hcf); 56 salcianu 1.1 57 salcianu 1.1 hcf = new harpoon.Analysis.Quads.ArrayInitRemover(hcf) 58 salcianu 1.1 .codeFactory(); 59 salcianu 1.1 hcf = new harpoon.ClassFile.CachingCodeFactory(hcf); 60 salcianu 1.1 61 salcianu 1.1 syncTransformer = new SyncTransformer 62 salcianu 1.1 (hcf, classHierarchy, linker, mainM, roots, resource); 63 cananian 1.3 roots.addAll(syncTransformer.transRoots()); 64 salcianu 1.1 hcf = syncTransformer.codeFactory(); 65 salcianu 1.1 hcf = harpoon.Analysis.Counters.CounterFactory 66 salcianu 1.1 .codeFactory(hcf, linker, mainM); 67 salcianu 1.1 hcf = new harpoon.ClassFile.CachingCodeFactory(hcf); 68 salcianu 1.1 classHierarchy = new QuadClassHierarchy(linker, roots, hcf); 69 salcianu 1.1 // config checking 70 salcianu 1.1 frame.getRuntime().configurationSet.add 71 salcianu 1.1 ("check_with_transactions_needed"); 72 salcianu 1.1 } 73 salcianu 1.1 } 74 salcianu 1.1 75 salcianu 1.1 76 salcianu 1.1 public static class TreePass extends CompilerStageEZ { 77 salcianu 1.1 public TreePass() { super("transactions.tree-pass"); } 78 salcianu 1.2 public boolean enabled() { return Transactions.enabled(); } 79 salcianu 1.1 80 salcianu 1.1 public void real_action() { 81 salcianu 1.1 // just to be safe, we'll do the algebraic simplication before 82 salcianu 1.1 // the pattern-matching in SyncTransformer occurs. 83 salcianu 1.1 hcf = 84 salcianu 1.1 harpoon.Analysis.Tree.AlgebraicSimplification.codeFactory(hcf); 85 salcianu 1.1 hcf = syncTransformer.treeCodeFactory(frame, hcf); 86 salcianu 1.1 } 87 salcianu 1.1 } 88 cananian 1.3 89 cananian 1.3 public static Iterator<HData> filterData(Frame f, Iterator<HData> it) { 90 cananian 1.3 return syncTransformer.filterData(f, it); 91 cananian 1.3 } 92 salcianu 1.1 }