X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=Robust%2Fsrc%2FAnalysis%2FOwnershipAnalysis%2FOwnershipGraph.java;h=ef55faed9564a09611306d3755dd834ba7b7963c;hb=f58b04b9704320c45739828d73b7583595a8f1cc;hp=6f902e53e12aee66557d49829c9ec3f8d4368917;hpb=dc2cb5f13bf4e45fe4dcf0e0af1d1da8949a7711;p=IRC.git diff --git a/Robust/src/Analysis/OwnershipAnalysis/OwnershipGraph.java b/Robust/src/Analysis/OwnershipAnalysis/OwnershipGraph.java index 6f902e53..ef55faed 100644 --- a/Robust/src/Analysis/OwnershipAnalysis/OwnershipGraph.java +++ b/Robust/src/Analysis/OwnershipAnalysis/OwnershipGraph.java @@ -399,8 +399,8 @@ public class OwnershipGraph { ReachabilitySet O = srcln.getReferenceTo( hrnSrc ).getBeta(); - ChangeTupleSet Cy = O.unionUpArity( R ); - ChangeTupleSet Cx = R.unionUpArity( O ); + ChangeTupleSet Cy = O.unionUpArityToChangeSet( R ); + ChangeTupleSet Cx = R.unionUpArityToChangeSet( O ); propagateTokens( hrnSrc, Cy, nodesWithNewAlpha, edgesWithNewBeta ); propagateTokens( hrn, Cx, nodesWithNewAlpha, edgesWithNewBeta ); @@ -604,9 +604,19 @@ public class OwnershipGraph { onReferencer = (OwnershipNode) itrReferencer.next(); ReferenceEdgeProperties rep = onReferencer.getReferenceTo( hrnK ); - assert rep != null; - - addReferenceEdge( onReferencer, hrnSummary, rep.copy() ); + assert rep != null; + ReferenceEdgeProperties repSummary = onReferencer.getReferenceTo( hrnSummary ); + ReferenceEdgeProperties repMerged = rep.copy(); + + if( repSummary == null ) { + // the merge is trivial, nothing to be done + } else { + // otherwise an edge from the referencer to alpha_S exists already + // and the edge referencer->alpha_K should be merged with it + repMerged.setBeta( repMerged.getBeta().union( repSummary.getBeta() ) ); + } + + addReferenceEdge( onReferencer, hrnSummary, repMerged ); }