add source-level names to dump of IR

git-svn-id: https://wala.svn.sourceforge.net/svnroot/wala/trunk@4522 f5eafffb-2e1d-0410-98e4-8ec43c5233c4
This commit is contained in:
dolby-oss 2012-02-21 13:46:11 +00:00
parent f4a1544a2d
commit c187dcaeb0
1 changed files with 28 additions and 0 deletions

View File

@ -13,6 +13,7 @@ package com.ibm.wala.ssa;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import com.ibm.wala.cfg.ControlFlowGraph;
import com.ibm.wala.classLoader.CallSiteReference;
@ -24,6 +25,7 @@ import com.ibm.wala.ssa.SSACFG.ExceptionHandlerBasicBlock;
import com.ibm.wala.types.TypeReference;
import com.ibm.wala.util.collections.CompoundIterator;
import com.ibm.wala.util.collections.HashMapFactory;
import com.ibm.wala.util.collections.HashSetFactory;
import com.ibm.wala.util.debug.Assertions;
import com.ibm.wala.util.intset.BasicNaturalRelation;
import com.ibm.wala.util.intset.IntIterator;
@ -188,7 +190,22 @@ public abstract class IR {
StringStuff.padWithSpaces(x, 45);
result.append(x);
result.append(instructionPosition(j));
Map<Integer,Set<String>> valNames = HashMapFactory.make();
for(int v = 0; v < instructions[j].getNumberOfDefs(); v++) {
int valNum = instructions[j].getDef(v);
addNames(j, valNames, valNum);
}
for(int v = 0; v < instructions[j].getNumberOfUses(); v++) {
int valNum = instructions[j].getUse(v);
addNames(j, valNames, valNum);
}
if (!valNames.isEmpty()) {
result.append(" ").append(valNames);
}
result.append("\n");
if (names != null) {
boolean any = false;
for(SSAIndirectionData.Name n : names) {
@ -213,6 +230,17 @@ public abstract class IR {
return result.toString();
}
private void addNames(int j, Map<Integer, Set<String>> valNames, int valNum) {
if (getLocalNames(j, valNum) != null && getLocalNames(j, valNum).length > 0) {
if (! valNames.containsKey(valNum)) {
valNames.put(valNum, HashSetFactory.<String>make());
}
for(String s : getLocalNames(j, valNum)) {
valNames.get(valNum).add(s);
}
}
}
/**
* Returns the normal instructions. Does not include {@link SSAPhiInstruction}, {@link SSAPiInstruction}, or
* {@link SSAGetCaughtExceptionInstruction}s, which are currently managed by {@link BasicBlock}. Entries in the returned array