From: jjenista Date: Fri, 6 Mar 2009 00:38:16 +0000 (+0000) Subject: Fix bug where element access fields have wrong type, and printing of array types X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=b3b4d37ceef7d3ee926b171a3c8c48f788cef357;p=IRC.git Fix bug where element access fields have wrong type, and printing of array types --- diff --git a/Robust/src/Analysis/OwnershipAnalysis/AllocationSite.java b/Robust/src/Analysis/OwnershipAnalysis/AllocationSite.java index 5867a992..96aa73eb 100644 --- a/Robust/src/Analysis/OwnershipAnalysis/AllocationSite.java +++ b/Robust/src/Analysis/OwnershipAnalysis/AllocationSite.java @@ -191,9 +191,9 @@ public class AllocationSite { public String toStringForDOT() { if( disjointId != null ) { - return "disjoint "+disjointId+"\\n"+toString()+"\\n"+getType(); + return "disjoint "+disjointId+"\\n"+toString()+"\\n"+getType().toPrettyString(); } else { - return toString()+"\\n"+getType(); + return toString()+"\\n"+getType().toPrettyString(); } } } diff --git a/Robust/src/Analysis/OwnershipAnalysis/OwnershipAnalysis.java b/Robust/src/Analysis/OwnershipAnalysis/OwnershipAnalysis.java index 650f29b4..2e093ef5 100644 --- a/Robust/src/Analysis/OwnershipAnalysis/OwnershipAnalysis.java +++ b/Robust/src/Analysis/OwnershipAnalysis/OwnershipAnalysis.java @@ -271,12 +271,9 @@ public class OwnershipAnalysis { private LinkedList sortedMethodContextsToVisit; - // a special field descriptor for all array elements - private static FieldDescriptor fdElement = new FieldDescriptor(new Modifiers(Modifiers.PUBLIC), - new TypeDescriptor("Array[]"), - "elements", - null, - false); + // special field descriptors for array elements + private Hashtable mapTypeToArrayField; + // a special temp descriptor for setting more than one parameter label // to the all-aliased-parameters heap region node @@ -325,6 +322,8 @@ public class OwnershipAnalysis { mapDescriptorToAllMethodContexts = new Hashtable >(); + mapTypeToArrayField = + new Hashtable(); if( writeAllDOTs ) { mapMethodContextToNumUpdates = new Hashtable(); @@ -701,6 +700,21 @@ public class OwnershipAnalysis { lhs = fen.getDst(); rhs = fen.getSrc(); if( !lhs.getType().isImmutable() || lhs.getType().isArray() ) { + + assert rhs.getType() != null; + assert rhs.getType().isArray(); + + TypeDescriptor tdElement = rhs.getType().dereference(); + FieldDescriptor fdElement = mapTypeToArrayField.get( tdElement ); + if( fdElement == null ) { + fdElement = new FieldDescriptor(new Modifiers(Modifiers.PUBLIC), + tdElement, + "_element", + null, + false); + mapTypeToArrayField.put( tdElement, fdElement ); + } + og.assignTempXEqualToTempYFieldF(lhs, rhs, fdElement); } break; @@ -710,6 +724,25 @@ public class OwnershipAnalysis { lhs = fsen.getDst(); rhs = fsen.getSrc(); if( !rhs.getType().isImmutable() || rhs.getType().isArray() ) { + + assert lhs.getType() != null; + assert lhs.getType().isArray(); + + TypeDescriptor tdElement = lhs.getType().dereference(); + + System.out.println( "lhs.Type = "+lhs.getType().toPrettyString() ); + System.out.println( "tdElement = "+tdElement.toPrettyString() ); + + FieldDescriptor fdElement = mapTypeToArrayField.get( tdElement ); + if( fdElement == null ) { + fdElement = new FieldDescriptor(new Modifiers(Modifiers.PUBLIC), + tdElement, + "_element", + null, + false); + mapTypeToArrayField.put( tdElement, fdElement ); + } + og.assignTempXFieldFEqualToTempY(lhs, fdElement, rhs); } break; diff --git a/Robust/src/Analysis/OwnershipAnalysis/ReferenceEdge.java b/Robust/src/Analysis/OwnershipAnalysis/ReferenceEdge.java index e47e85c0..58c8d9e3 100644 --- a/Robust/src/Analysis/OwnershipAnalysis/ReferenceEdge.java +++ b/Robust/src/Analysis/OwnershipAnalysis/ReferenceEdge.java @@ -162,7 +162,7 @@ public class ReferenceEdge { String edgeLabel = ""; if( fieldDesc != null ) { - edgeLabel += fieldDesc.toStringBrief() + "\\n"; + edgeLabel += fieldDesc.toPrettyStringBrief() + "\\n"; } if( isInitialParamReflexive ) { diff --git a/Robust/src/IR/FieldDescriptor.java b/Robust/src/IR/FieldDescriptor.java index edfb8959..324d0c46 100644 --- a/Robust/src/IR/FieldDescriptor.java +++ b/Robust/src/IR/FieldDescriptor.java @@ -47,4 +47,8 @@ public class FieldDescriptor extends Descriptor { public String toStringBrief() { return td.toString()+" "+getSymbol(); } + + public String toPrettyStringBrief() { + return td.toPrettyString()+" "+getSymbol(); + } } diff --git a/Robust/src/IR/TypeDescriptor.java b/Robust/src/IR/TypeDescriptor.java index 014f584f..fd95881f 100644 --- a/Robust/src/IR/TypeDescriptor.java +++ b/Robust/src/IR/TypeDescriptor.java @@ -278,13 +278,13 @@ public class TypeDescriptor extends Descriptor { } public String toPrettyString() { - if (type==CLASS) { - String str=name; - for(int i=0; i