From bce32fe7365d720a226c9e60781df29613ff465e Mon Sep 17 00:00:00 2001 From: jjenista Date: Mon, 4 Aug 2008 23:23:33 +0000 Subject: [PATCH] x.f = y now prunes new edge's beta by alpha at x --- .../OwnershipAnalysis/OwnershipGraph.java | 5 +++- .../OwnershipAnalysis/ReachabilitySet.java | 29 ++++++++++++++++++- .../OwnershipAnalysis/TokenTupleSet.java | 5 ++++ 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/Robust/src/Analysis/OwnershipAnalysis/OwnershipGraph.java b/Robust/src/Analysis/OwnershipAnalysis/OwnershipGraph.java index 69db25c2..fb574f59 100644 --- a/Robust/src/Analysis/OwnershipAnalysis/OwnershipGraph.java +++ b/Robust/src/Analysis/OwnershipAnalysis/OwnershipGraph.java @@ -442,7 +442,10 @@ public class OwnershipGraph { // finally, create the actual reference edge hrn->hrnSrc ReferenceEdgeProperties repNew - = new ReferenceEdgeProperties( false, false, repSrc.getBetaNew() ); + = new ReferenceEdgeProperties( false, + false, + repSrc.getBetaNew().pruneBy( hrn.getAlpha() ) + ); addReferenceEdge( hrn, hrnSrc, repNew ); } diff --git a/Robust/src/Analysis/OwnershipAnalysis/ReachabilitySet.java b/Robust/src/Analysis/OwnershipAnalysis/ReachabilitySet.java index d412cffd..f7a5721a 100644 --- a/Robust/src/Analysis/OwnershipAnalysis/ReachabilitySet.java +++ b/Robust/src/Analysis/OwnershipAnalysis/ReachabilitySet.java @@ -202,7 +202,8 @@ public class ReachabilitySet extends Canonical { public ReachabilitySet ageTokens( AllocationSite as ) { - + assert as != null; + ReachabilitySet rsOut = new ReachabilitySet(); Iterator itrS = this.iterator(); @@ -215,6 +216,32 @@ public class ReachabilitySet extends Canonical { } + public ReachabilitySet pruneBy( ReachabilitySet rsIn ) { + assert rsIn != null; + + ReachabilitySet rsOut = new ReachabilitySet(); + + Iterator itrB = this.iterator(); + while( itrB.hasNext() ) { + TokenTupleSet ttsB = (TokenTupleSet) itrB.next(); + + boolean subsetExists = false; + + Iterator itrA = rsIn.iterator(); + while( itrA.hasNext() && !subsetExists ) { + TokenTupleSet ttsA = (TokenTupleSet) itrA.next(); + + if( ttsA.isSubset( ttsB ) ) { + subsetExists = true; + rsOut.possibleReachabilities.add( ttsB ); + } + } + } + + return rsOut.makeCanonical(); + } + + public boolean equals( Object o ) { if( !(o instanceof ReachabilitySet) ) { return false; diff --git a/Robust/src/Analysis/OwnershipAnalysis/TokenTupleSet.java b/Robust/src/Analysis/OwnershipAnalysis/TokenTupleSet.java index edd9edcc..4bd1a718 100644 --- a/Robust/src/Analysis/OwnershipAnalysis/TokenTupleSet.java +++ b/Robust/src/Analysis/OwnershipAnalysis/TokenTupleSet.java @@ -76,6 +76,11 @@ public class TokenTupleSet extends Canonical { return tokenTuples.isEmpty(); } + public boolean isSubset( TokenTupleSet ttsIn ) { + assert ttsIn != null; + return ttsIn.tokenTuples.containsAll( this.tokenTuples ); + } + public boolean containsTuple( TokenTuple tt ) { return tokenTuples.contains( tt ); } -- 2.34.1