From 2a6c5c8b2eae930586482b6a5dd2988485e6d870 Mon Sep 17 00:00:00 2001 From: bdemsky Date: Wed, 30 Jan 2008 01:07:57 +0000 Subject: [PATCH] fix bug in locality analysis --- Robust/src/Analysis/Locality/LocalityAnalysis.java | 8 ++++---- Robust/src/Analysis/Locality/LocalityBinding.java | 12 ++++++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/Robust/src/Analysis/Locality/LocalityAnalysis.java b/Robust/src/Analysis/Locality/LocalityAnalysis.java index 261d645d..ccc28803 100644 --- a/Robust/src/Analysis/Locality/LocalityAnalysis.java +++ b/Robust/src/Analysis/Locality/LocalityAnalysis.java @@ -437,12 +437,12 @@ public class LocalityAnalysis { } else if (type.equals(GLOBAL)) { if (!transaction) throw new Error("Global access outside of a transaction in context:\n"+lb.getExplanation()); - if (ffn.getField().getType().isPrimitive()) + if (ffn.getField().getType().isPrimitive()&&!ffn.getField().getType().isArray()) currtable.put(dst, LOCAL); // primitives are local else currtable.put(dst, GLOBAL); } else if (type.equals(EITHER)) { - if (ffn.getField().getType().isPrimitive()) + if (ffn.getField().getType().isPrimitive()&&!ffn.getField().getType().isArray()) currtable.put(dst, LOCAL); // primitives are local else if (ffn.getField().isGlobal()) currtable.put(dst, GLOBAL); @@ -457,7 +457,7 @@ public class LocalityAnalysis { void processSetFieldNode(LocalityBinding lb, FlatSetFieldNode fsfn, boolean transaction, Hashtable currtable) { Integer srctype=currtable.get(fsfn.getSrc()); Integer dsttype=currtable.get(fsfn.getDst()); - + if (dsttype.equals(LOCAL)) { if (fsfn.getField().isGlobal()) { if (!(srctype.equals(GLOBAL)||srctype.equals(EITHER))) @@ -470,7 +470,7 @@ public class LocalityAnalysis { if (!transaction) throw new Error("Global access outside of a transaction in context:\n"+lb.getExplanation()); //okay to store primitives in global object - if (srctype.equals(LOCAL) && fsfn.getField().getType().isPrimitive()) + if (srctype.equals(LOCAL) && fsfn.getField().getType().isPrimitive() && ! fsfn.getField().getType().isArray()) return; if (!(srctype.equals(GLOBAL)||srctype.equals(EITHER))) throw new Error("Writing possible local reference to global object in context:\n"+lb.getExplanation()+" for FlatFieldNode "+fsfn); diff --git a/Robust/src/Analysis/Locality/LocalityBinding.java b/Robust/src/Analysis/Locality/LocalityBinding.java index a2d4cc70..01bbb8f1 100644 --- a/Robust/src/Analysis/Locality/LocalityBinding.java +++ b/Robust/src/Analysis/Locality/LocalityBinding.java @@ -69,6 +69,18 @@ public class LocalityBinding { public String toString() { String st=md.toString()+" "; + if (isglobalthis==null) { + st+="[static] "; + } else { + if (isglobalthis.equals(LocalityAnalysis.LOCAL)) + st+="[local] "; + else if (isglobalthis.equals(LocalityAnalysis.GLOBAL)) + st+="[global] "; + else if (isglobalthis.equals(LocalityAnalysis.EITHER)) + st+="[either] "; + else if (isglobalthis.equals(LocalityAnalysis.CONFLICT)) + st+="[conflict] "; + } for(int i=0;i