e.printStackTrace();
System.exit(-1);
}
+
+ /* Fix field safe symbols due to shadowing */
+ FieldShadow.handleFieldShadow(state);
/* Build the virtual dispatch tables */
super.buildVirtualTables(outvirtual);
+
+ /* Tag the methods that are invoked by static blocks */
+ super.tagMethodInvokedByStaticBlock();
/* Output includes */
outmethodheader.println("#ifndef METHODHEADERS_H");
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);
+
+ Iterator it_sifs = cd.getSuperInterfaces();
+ while(it_sifs.hasNext()) {
+ ClassDescriptor sif = (ClassDescriptor)it_sifs.next();
+ if (!namemap.containsKey(sif))
+ handleClass(sif, state, namemap);
+ }
+
HashMap<String, Integer> supermap=cd.getSuperDesc()!=null?namemap.get(cd.getSuperDesc()):new HashMap<String, Integer>();
+ Vector<HashMap<String, Integer>> superifmaps = new Vector<HashMap<String, Integer>>();
+ it_sifs = cd.getSuperInterfaces();
+ while(it_sifs.hasNext()) {
+ ClassDescriptor sif = (ClassDescriptor)it_sifs.next();
+ superifmaps.addElement(namemap.get(sif));
+ }
+
HashMap<String, Integer> fieldmap=new HashMap<String, Integer>();
namemap.put(cd, fieldmap);
fieldmap.put(fd.getSymbol(), new Integer(newint));
fd.changeSafeSymbol(newint);
} else {
+ // the fields in interfaces are defaultely static & final, so do not need to
+ // check them, they will always have the interface name as prefix
fieldmap.put(fd.getSymbol(), new Integer(0));
}
}