- for (int i = 0; i < descTuple.size(); i++) {
- Descriptor curDesc = descTuple.get(i);
- Location loc;
- if (i == 0) {
- loc = new Location(md, curDesc.getSymbol());
- loc.setLocDescriptor(md);
- cd = ((VarDescriptor) curDesc).getType().getClassDesc();
- } else {
- loc = new Location(cd, curDesc.getSymbol());
- loc.setLocDescriptor(curDesc);
- cd = ((FieldDescriptor) curDesc).getType().getClassDesc();
+ Descriptor localDesc = fn.getDescTuple().get(0);
+ if (localDesc.getSymbol().equals(LocationInference.TOPLOC)) {
+ Location topLoc = new Location(md, Location.TOP);
+ locTuple.add(topLoc);
+ } else if (localDesc.getSymbol().equals(LocationInference.GLOBALLOC)) {
+ Location topLoc = new Location(md, LocationInference.GLOBALLOC);
+ locTuple.add(topLoc);
+ } else {
+ // normal case
+ for (int i = 0; i < descTuple.size(); i++) {
+ Descriptor curDesc = descTuple.get(i);
+ Location loc;
+ if (i == 0) {
+ loc = new Location(md, curDesc.getSymbol());
+ loc.setLocDescriptor(md);
+ cd = ((VarDescriptor) curDesc).getType().getClassDesc();
+ } else {
+ loc = new Location(cd, curDesc.getSymbol());
+ loc.setLocDescriptor(curDesc);
+ cd = ((FieldDescriptor) curDesc).getType().getClassDesc();
+ }
+ locTuple.add(loc);