From c13558e9462ad60ba12c3d6e7771b578739457c6 Mon Sep 17 00:00:00 2001 From: yeom Date: Tue, 12 Jul 2011 17:46:34 +0000 Subject: [PATCH] changes. --- .../SSJava/DefinitelyWrittenCheck.java | 18 +++++++++++++++--- Robust/src/Analysis/SSJava/SSJavaAnalysis.java | 5 ++++- Robust/src/Analysis/SSJava/SharedStatus.java | 11 +++++++++++ 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/Robust/src/Analysis/SSJava/DefinitelyWrittenCheck.java b/Robust/src/Analysis/SSJava/DefinitelyWrittenCheck.java index 93145be8..b1f7029e 100644 --- a/Robust/src/Analysis/SSJava/DefinitelyWrittenCheck.java +++ b/Robust/src/Analysis/SSJava/DefinitelyWrittenCheck.java @@ -365,6 +365,18 @@ public class DefinitelyWrittenCheck { NTuple fldHeapPath = new NTuple(lhsHeapPath.getList()); if (fld.getType().isImmutable()) { writeLocation(curr, fldHeapPath, fld); + } else { + // updates reference field case: + // 2. if there exists a tuple t in sharing summary that starts with + // hp(x) then, set flag of tuple t to 'true' + fldHeapPath.add(fld); + Set> hpKeySet = curr.keySet(); + for (Iterator iterator = hpKeySet.iterator(); iterator.hasNext();) { + NTuple hpKey = (NTuple) iterator.next(); + if (hpKey.startsWith(fldHeapPath)) { + curr.get(hpKey).updateFlag(true); + } + } } } @@ -699,14 +711,14 @@ public class DefinitelyWrittenCheck { private void writeLocation(ClearingSummary curr, NTuple hp, Descriptor d) { Location loc = getLocation(d); if (loc != null && hasReadingEffectOnSharedLocation(hp, loc, d)) { + + // 1. add field x to the clearing set SharedStatus state = getState(curr, hp); state.addVar(loc, d); - // if the set v contains all of variables belonging to the shared + // 3. if the set v contains all of variables belonging to the shared // location, set flag to true - Set sharedVarSet = mapSharedLocation2DescriptorSet.get(loc); - if (state.getVarSet(loc).containsAll(sharedVarSet)) { state.updateFlag(loc, true); } diff --git a/Robust/src/Analysis/SSJava/SSJavaAnalysis.java b/Robust/src/Analysis/SSJava/SSJavaAnalysis.java index 1402a41f..7e804075 100644 --- a/Robust/src/Analysis/SSJava/SSJavaAnalysis.java +++ b/Robust/src/Analysis/SSJava/SSJavaAnalysis.java @@ -153,6 +153,7 @@ public class SSJavaAnalysis { if (value != null) { maxIteration = Integer.parseInt(value); } + System.out.println("###md=" + md); skipLoopTerminate.put(md, new Integer(maxIteration)); } } @@ -286,7 +287,9 @@ public class SSJavaAnalysis { public void doLoopTerminationCheck(LoopOptimize lo, FlatMethod fm) { LoopTerminate lt = new LoopTerminate(); - lt.terminateAnalysis(fm, lo.getLoopInvariant(fm)); + if (needTobeAnnotated(fm.getMethod())) { + lt.terminateAnalysis(fm, lo.getLoopInvariant(fm)); + } } public void doLoopTerminationCheck(LoopOptimize lo) { diff --git a/Robust/src/Analysis/SSJava/SharedStatus.java b/Robust/src/Analysis/SSJava/SharedStatus.java index 8c6f9f51..dc3056ec 100644 --- a/Robust/src/Analysis/SSJava/SharedStatus.java +++ b/Robust/src/Analysis/SSJava/SharedStatus.java @@ -98,6 +98,17 @@ public class SharedStatus { } } + public void updateFlag(boolean b) { + Set locKeySet = mapLocation2Status.keySet(); + for (Iterator iterator = locKeySet.iterator(); iterator.hasNext();) { + Location loc = (Location) iterator.next(); + Pair, Boolean> pair = mapLocation2Status.get(loc); + mapLocation2Status.put(loc, + new Pair, Boolean>(pair.getFirst(), Boolean.valueOf(b))); + } + + } + public boolean getFlag(Location loc) { return mapLocation2Status.get(loc).getSecond().booleanValue(); } -- 2.34.1