private void generateFlatFieldNode(FlatMethod fm, LocalityBinding lb, FlatFieldNode ffn, PrintWriter output) {
if (state.SINGLETM) {
//single machine transactional memory case
- String field=(ffn.getField().getClassDescriptor()==null?"":ffn.getField().getClassDescriptor().getSafeSymbol()) + ffn.getField().getSafeSymbol();
+ String field=ffn.getField().getSafeSymbol();
String src=generateTemp(fm, ffn.getSrc(),lb);
String dst=generateTemp(fm, ffn.getDst(),lb);
} else if (state.DSM) {
Integer status=locality.getNodePreTempInfo(lb,ffn).get(ffn.getSrc());
if (status==LocalityAnalysis.GLOBAL) {
- String field=(ffn.getField().getClassDescriptor()==null?"":ffn.getField().getClassDescriptor().getSafeSymbol()) + ffn.getField().getSafeSymbol();
+ String field=ffn.getField().getSafeSymbol();
String src=generateTemp(fm, ffn.getSrc(),lb);
String dst=generateTemp(fm, ffn.getDst(),lb);
} else if (status==LocalityAnalysis.LOCAL) {
if (ffn.getField().getType().isPtr()&&
ffn.getField().isGlobal()) {
- String field=(ffn.getField().getClassDescriptor()==null?"":ffn.getField().getClassDescriptor().getSafeSymbol()) + ffn.getField().getSafeSymbol();
+ String field=ffn.getField().getSafeSymbol();
String src=generateTemp(fm, ffn.getSrc(),lb);
String dst=generateTemp(fm, ffn.getDst(),lb);
output.println(dst+"="+ src +"->"+field+ ";");
output.println(" global_defs_p->" + cn.getSafeSymbol()+"static_block_exe_flag = 1;");
}
output.println("}");
- output.println("#endif // MGC_STATIC_INIT_CHECK");
+ output.println("#endif // MGC_STATIC_INIT_CHECK");
}
}
}
output.println(generateTemp(fm, ffn.getDst(),lb)+"=global_defs_p->"+
ffn.getField().getClassDescriptor().getSafeSymbol()+ffn.getField().getSafeSymbol()+";");
} else {
- output.println(generateTemp(fm, ffn.getDst(),lb)+"=*"+ generateTemp(fm,ffn.getSrc(),lb)+"->"+
- (ffn.getField().getClassDescriptor()==null?"":ffn.getField().getClassDescriptor().getSafeSymbol()) + ffn.getField().getSafeSymbol()+";");
+ output.println(generateTemp(fm, ffn.getDst(),lb)+"=*"+ generateTemp(fm,ffn.getSrc(),lb)+"->"+ ffn.getField().getSafeSymbol()+";");
}
} else if (ffn.getField().isEnum()) {
// an Enum value, directly replace the field access as int
output.println(generateTemp(fm, ffn.getDst(), lb) + "=" + ffn.getField().enumValue() + ";");
} else {
- output.println(generateTemp(fm, ffn.getDst(),lb)+"="+ generateTemp(fm,ffn.getSrc(),lb)+"->"+
- (ffn.getField().getClassDescriptor()==null?"":ffn.getField().getClassDescriptor().getSafeSymbol()) + ffn.getField().getSafeSymbol()+";");
- }
+ output.println(generateTemp(fm, ffn.getDst(),lb)+"="+ generateTemp(fm,ffn.getSrc(),lb)+"->"+ ffn.getField().getSafeSymbol()+";");
+ }
} else {
- output.println(generateTemp(fm, ffn.getDst(),lb)+"="+ generateTemp(fm,ffn.getSrc(),lb)+"->"+
- (ffn.getField().getClassDescriptor()==null?"":ffn.getField().getClassDescriptor().getSafeSymbol()) + ffn.getField().getSafeSymbol()+";");
+ output.println(generateTemp(fm, ffn.getDst(),lb)+"="+ generateTemp(fm,ffn.getSrc(),lb)+"->"+ ffn.getField().getSafeSymbol()+";");
}
}
}
import java.util.*;
public class FieldShadow {
- public static void handleFieldShadow(State state) {
+ public static void handleFieldShadow(State state) {
Iterator classit=state.getClassSymbolTable().getDescriptorsIterator();
- HashMap<ClassDescriptor, HashMap<String,Integer>> namemap=new HashMap<ClassDescriptor,HashMap<String, Integer>>();
+ HashMap<ClassDescriptor, HashMap<String,Integer>> namemap=new HashMap<ClassDescriptor,HashMap<String, Integer>>();
while(classit.hasNext()) {
ClassDescriptor cd=(ClassDescriptor)classit.next();
- handleClass(cd, state, namemap);
+ handleClass(cd, state, namemap);
}
- }
-
- private static void handleClass(ClassDescriptor cd, State state, HashMap<ClassDescriptor, HashMap<String, Integer>> namemap) {
- if (cd.getSuperDesc()!=null&&!namemap.containsKey(cd.getSuperDesc()))
- handleClass(cd.getSuperDesc(), state, namemap);
- HashMap<String, Integer> supermap=cd.getSuperDesc()!=null?namemap.get(cd.getSuperDesc()):new HashMap<String, Integer>();
-
- HashMap<String, Integer> fieldmap=new HashMap<String, Integer>();
- namemap.put(cd, fieldmap);
-
- for(Iterator fieldit=cd.getFields();fieldit.hasNext();) {
- FieldDescriptor fd=(FieldDescriptor)fieldit.next();
- if (supermap.containsKey(fd.getSymbol())) {
- Integer oldint=supermap.get(fd.getSymbol());
- int newint=oldint.intValue()+1;
- namemap.put(fd.getSymbol(), new Integer(newint));
- fd.changeSafeSymbol(newint);
- } else {
- namemap.put(fd.getSymbol(), new Integer(0));
- }
- }
- }
+ }
+
+ private static void handleClass(ClassDescriptor cd, State state, HashMap<ClassDescriptor, HashMap<String, Integer>> namemap) {
+ if (cd.getSuperDesc()!=null&&!namemap.containsKey(cd.getSuperDesc()))
+ handleClass(cd.getSuperDesc(), state, namemap);
+ HashMap<String, Integer> supermap=cd.getSuperDesc()!=null?namemap.get(cd.getSuperDesc()):new HashMap<String, Integer>();
+
+ HashMap<String, Integer> fieldmap=new HashMap<String, Integer>();
+ namemap.put(cd, fieldmap);
+
+ for(Iterator fieldit=cd.getFields();fieldit.hasNext();) {
+ FieldDescriptor fd=(FieldDescriptor)fieldit.next();
+ if (supermap.containsKey(fd.getSymbol())) {
+ Integer oldint=supermap.get(fd.getSymbol());
+ int newint=oldint.intValue()+1;
+ fieldmap.put(fd.getSymbol(), new Integer(newint));
+ fd.changeSafeSymbol(newint);
+ } else {
+ fieldmap.put(fd.getSymbol(), new Integer(0));
+ }
+ }
+ }
}
\ No newline at end of file