From 10cd90122e199a25167fd915c614d2586b6ad508 Mon Sep 17 00:00:00 2001 From: jjenista Date: Fri, 27 Jun 2008 20:24:54 +0000 Subject: [PATCH] Broadening implementation for reachability in ownership analysis. --- .../OwnershipAnalysis/ChangeTuple.java | 48 +++++++++++++++++++ .../OwnershipAnalysis/ChangeTupleSet.java | 39 +++++++++++++++ .../OwnershipAnalysis/ReachabilitySet.java | 37 ++++++++++++-- .../OwnershipAnalysis/TokenTupleSet.java | 4 +- Robust/src/Makefile | 2 + 5 files changed, 126 insertions(+), 4 deletions(-) create mode 100644 Robust/src/Analysis/OwnershipAnalysis/ChangeTuple.java create mode 100644 Robust/src/Analysis/OwnershipAnalysis/ChangeTupleSet.java diff --git a/Robust/src/Analysis/OwnershipAnalysis/ChangeTuple.java b/Robust/src/Analysis/OwnershipAnalysis/ChangeTuple.java new file mode 100644 index 00000000..06dac9fc --- /dev/null +++ b/Robust/src/Analysis/OwnershipAnalysis/ChangeTuple.java @@ -0,0 +1,48 @@ +package Analysis.OwnershipAnalysis; + +import IR.*; +import IR.Flat.*; +import java.util.*; +import java.io.*; + + +// a change touple is a pair that indicates if the +// first TokenTupleSet is found in a ReachabilitySet, +// then the second TokenTupleSet should be added +public class ChangeTuple +{ + private TokenTupleSet toMatch; + private TokenTupleSet toAdd; + + public ChangeTuple( TokenTupleSet toMatch, + TokenTupleSet toAdd ) { + this.toMatch = toMatch; + this.toAdd = toAdd; + } + + public TokenTupleSet getSetToMatch() { return toMatch; } + public TokenTupleSet getSetToAdd() { return toAdd; } + + public boolean equals( Object o ) { + if( !(o instanceof ChangeTuple) ) { + return false; + } + + ChangeTuple ct = (ChangeTuple) o; + + return toMatch.equals( ct.getSetToMatch() ) && + toAdd.equals( ct.getSetToAdd() ); + } + + public int hashCode() { + return toMatch.hashCode() + toAdd.hashCode(); + } + + public ChangeTuple copy() { + return new ChangeTuple( toMatch, toAdd ); + } + + public String toString() { + return new String( "<"+toMatch+" -> "+toAdd+">" ); + } +} diff --git a/Robust/src/Analysis/OwnershipAnalysis/ChangeTupleSet.java b/Robust/src/Analysis/OwnershipAnalysis/ChangeTupleSet.java new file mode 100644 index 00000000..650716bc --- /dev/null +++ b/Robust/src/Analysis/OwnershipAnalysis/ChangeTupleSet.java @@ -0,0 +1,39 @@ +package Analysis.OwnershipAnalysis; + +import IR.*; +import IR.Flat.*; +import java.util.*; +import java.io.*; + + +public class ChangeTupleSet { + + public HashSet changeTuples; + + public ChangeTupleSet() { + changeTuples = new HashSet(); + } + + public ChangeTupleSet( ChangeTuple ct ) { + this(); + changeTuples.add( ct ); + } + + public ChangeTupleSet( ChangeTupleSet cts ) { + changeTuples = (HashSet) cts.changeTuples.clone(); //COPY?! + } + + public ChangeTupleSet union( ChangeTupleSet ctsIn ) { + ChangeTupleSet ctsOut = new ChangeTupleSet( this ); + ctsOut.changeTuples.addAll( ctsIn.changeTuples ); + return ctsOut; + } + + public boolean isSubset( ChangeTupleSet ctsIn ) { + return ctsIn.changeTuples.containsAll( this.changeTuples ); + } + + public String toString() { + return changeTuples.toString(); + } +} diff --git a/Robust/src/Analysis/OwnershipAnalysis/ReachabilitySet.java b/Robust/src/Analysis/OwnershipAnalysis/ReachabilitySet.java index 45dd8407..ecb52ea6 100644 --- a/Robust/src/Analysis/OwnershipAnalysis/ReachabilitySet.java +++ b/Robust/src/Analysis/OwnershipAnalysis/ReachabilitySet.java @@ -10,6 +10,37 @@ public class ReachabilitySet { public HashSet possibleReachabilities; - - // this one has special union. -} \ No newline at end of file + public ReachabilitySet() { + possibleReachabilities = new HashSet(); + } + + public ReachabilitySet( ReachabilitySet rs ) { + possibleReachabilities = (HashSet) rs.possibleReachabilities.clone(); // again, DEEP COPY?! + } + + public ReachabilitySet union( ReachabilitySet rsIn ) { + ReachabilitySet rsOut = new ReachabilitySet( this ); + rsOut.possibleReachabilities.addAll( rsIn.possibleReachabilities ); + return rsOut; + } + + public ReachabilitySet intersection( ReachabilitySet rsIn ) { + ReachabilitySet rsOut = new ReachabilitySet(); + + Iterator i = this.possibleReachabilities.iterator(); + while( i.hasNext() ) { + TokenTupleSet tts = (TokenTupleSet) i.next(); + if( rsIn.possibleReachabilities.contains( tts ) ) { + rsOut.possibleReachabilities.add( tts ); + } + } + + return rsOut; + } + + /* + public ChangeTupleSet unionUpArity( ReachabilitySet rsIn ) { + + } + */ +} diff --git a/Robust/src/Analysis/OwnershipAnalysis/TokenTupleSet.java b/Robust/src/Analysis/OwnershipAnalysis/TokenTupleSet.java index 3ff84e38..a78943c9 100644 --- a/Robust/src/Analysis/OwnershipAnalysis/TokenTupleSet.java +++ b/Robust/src/Analysis/OwnershipAnalysis/TokenTupleSet.java @@ -25,11 +25,13 @@ public class TokenTupleSet { public TokenTupleSet union( TokenTupleSet ttsIn ) { TokenTupleSet ttsOut = new TokenTupleSet( this ); - //ttsOut.tokenTuples.addAll( ttsIn.tokenTuples ); + ttsOut.tokenTuples.addAll( ttsIn.tokenTuples ); + /* Iterator i = ttsIn.tokenTuples.iterator(); while( i.hasNext() ) { ttsOut.tokenTuples.add( (TokenTuple) i.next() ); } + */ return ttsOut; } diff --git a/Robust/src/Makefile b/Robust/src/Makefile index 6efe1c0f..e51d4717 100644 --- a/Robust/src/Makefile +++ b/Robust/src/Makefile @@ -83,6 +83,8 @@ Analysis/OwnershipAnalysis/AllocationSite.class \ Analysis/OwnershipAnalysis/TokenTuple.class \ Analysis/OwnershipAnalysis/TokenTupleSet.class \ Analysis/OwnershipAnalysis/ReachabilitySet.class \ +Analysis/OwnershipAnalysis/ChangeTuple.class \ +Analysis/OwnershipAnalysis/ChangeTupleSet.class \ Util/GraphNode.class Util/Namer.class Util/Relation.class \ Interface/HTTPHeader.class Interface/HTTPResponse.class \ Interface/HTTPServices.class Interface/HashStrings.class \ -- 2.34.1