X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=Robust%2Fsrc%2FAnalysis%2FDisjoint%2FBuildStateMachines.java;h=b4e0b6a21269cfbc78c0c6fb4b88d2a69db19cdb;hb=b2f0e67f6ba3340e0c14b81770efd7491fa4ef40;hp=966555de8687b02e65ea5587406075f946ca2b96;hpb=4ea437e991a0618a7f834228bfce35e59b87a52b;p=IRC.git diff --git a/Robust/src/Analysis/Disjoint/BuildStateMachines.java b/Robust/src/Analysis/Disjoint/BuildStateMachines.java index 966555de..b4e0b6a2 100644 --- a/Robust/src/Analysis/Disjoint/BuildStateMachines.java +++ b/Robust/src/Analysis/Disjoint/BuildStateMachines.java @@ -25,53 +25,48 @@ public class BuildStateMachines { // map a task or stall site (both a FlatNode) to a variable // and then finally to a state machine - protected - Hashtable< FlatNode, Hashtable > - fn2var2smfe; - + protected Hashtable< FlatNode, Hashtable> fn2var2smfe; + // remember all the FlatNode/TempDescriptor pairs that have a state machines // for easy retrieval of all machines - protected Set allMachineNamePairs; + protected Set> allMachineNamePairs; public BuildStateMachines() { - fn2var2smfe = new - Hashtable< FlatNode, Hashtable >(); - - allMachineNamePairs = new HashSet(); + fn2var2smfe = new Hashtable< FlatNode, Hashtable >(); + allMachineNamePairs = new HashSet>(); } + public StateMachineForEffects getStateMachine(Pair fnpair) { + return getStateMachine(fnpair.getFirst(), fnpair.getSecond()); + } - public StateMachineForEffects getStateMachine( FlatNode fn, - TempDescriptor var ) { - - Hashtable var2smfe = fn2var2smfe.get( fn ); + public StateMachineForEffects getStateMachine(FlatNode fn, TempDescriptor var) { + Hashtable var2smfe = fn2var2smfe.get(fn); if( var2smfe == null ) { var2smfe = new Hashtable(); - fn2var2smfe.put( fn, var2smfe ); + fn2var2smfe.put(fn, var2smfe); } - - StateMachineForEffects smfe = var2smfe.get( var ); - if( smfe == null ) { - smfe = new StateMachineForEffects( fn ); - var2smfe.put( var, smfe ); - allMachineNamePairs.add( new Pair( fn, var ) ); + StateMachineForEffects smfe = var2smfe.get(var); + if( smfe == null ) { + smfe = new StateMachineForEffects(fn); + var2smfe.put(var, smfe); + allMachineNamePairs.add(new Pair(fn, var) ); } return smfe; } - public Set getAllMachineNames() { + public Set> getAllMachineNames() { return allMachineNamePairs; } - public void addToStateMachine( Taint t, - Effect e, - FlatNode currentProgramPoint ) { - + public void addToStateMachine(Taint t, + Effect e, + FlatNode currentProgramPoint) { FlatNode taskOrStallSite; if( t.isStallSiteTaint() ) { taskOrStallSite = t.getStallSite(); @@ -81,40 +76,50 @@ public class BuildStateMachines { TempDescriptor var = t.getVar(); - StateMachineForEffects smfe = getStateMachine( taskOrStallSite, var ); + StateMachineForEffects smfe = getStateMachine(taskOrStallSite, var); FlatNode whereDefined = t.getWhereDefined(); - smfe.addEffect( whereDefined, e ); + smfe.addEffect(whereDefined, e); // reads of pointers make a transition if( e.getType() == Effect.read && - e.getField().getType().isPtr() ) { - - smfe.addTransition( whereDefined, - currentProgramPoint, - e ); + ((e.getField()!=null && e.getField().getType().isPtr()) + ||(e.getField()==null && e.getAffectedAllocSite().getFlatNew().getType().dereference().isPtr()))) { + + smfe.addTransition(whereDefined, + currentProgramPoint, + e); } } public void writeStateMachines() { + writeStateMachines(""); + } + + public void writeStateMachines(String prefix) { Iterator fnItr = fn2var2smfe.keySet().iterator(); while( fnItr.hasNext() ) { FlatNode fn = fnItr.next(); - - Hashtable - var2smfe = fn2var2smfe.get( fn ); - + + Hashtable + var2smfe = fn2var2smfe.get(fn); + Iterator varItr = var2smfe.keySet().iterator(); while( varItr.hasNext() ) { TempDescriptor var = varItr.next(); - StateMachineForEffects smfe = var2smfe.get( var ); + StateMachineForEffects smfe = var2smfe.get(var); - smfe.writeAsDOT( "statemachine_"+fn.toString()+var.toString() ); + smfe.writeAsDOT(prefix+"statemachine_"+fn.toString()+var.toString() ); } } } + //TODO JIM! Give me the REAALL number here. + public int getTotalNumOfWeakGroups() { + // TODO Auto-generated method stub + return 1; + } }