language changes

This commit is contained in:
Julian Dolby 2015-12-15 19:31:04 -05:00
parent f02c77ba08
commit dc552316b9
3 changed files with 10 additions and 3 deletions

View File

@ -38,7 +38,7 @@ public interface IBytecodeMethod extends IMethod {
*/
IInstruction[] getInstructions() throws InvalidClassFileException;
/**
/**there
* @return the call sites declared in the bytecode for this method
*/
Collection<CallSiteReference> getCallSites() throws InvalidClassFileException;

View File

@ -28,6 +28,7 @@ import com.ibm.wala.shrikeBT.IBinaryOpInstruction;
import com.ibm.wala.shrikeBT.IComparisonInstruction;
import com.ibm.wala.shrikeBT.IConditionalBranchInstruction;
import com.ibm.wala.shrikeBT.IInstruction;
import com.ibm.wala.shrikeBT.IInvokeInstruction;
import com.ibm.wala.shrikeBT.IUnaryOpInstruction;
import com.ibm.wala.shrikeBT.Instruction;
import com.ibm.wala.shrikeCT.BootstrapMethodsReader.BootstrapMethod;
@ -747,4 +748,10 @@ public class JavaLanguage extends LanguageImpl implements BytecodeLanguage, Cons
public PrimitiveType getPrimitive(TypeReference reference) {
return JavaPrimitiveType.getPrimitive(reference);
}
@Override
public MethodReference getInvokeMethodReference(ClassLoaderReference loader, IInvokeInstruction instruction) {
return MethodReference.findOrCreate(this, loader, instruction.getClassType(), instruction.getMethodName(),
instruction.getMethodSignature());
}
}

View File

@ -16,6 +16,7 @@ import com.ibm.wala.analysis.stackMachine.AbstractIntStackMachine;
import com.ibm.wala.cfg.IBasicBlock;
import com.ibm.wala.cfg.ShrikeCFG;
import com.ibm.wala.cfg.ShrikeCFG.BasicBlock;
import com.ibm.wala.classLoader.BytecodeLanguage;
import com.ibm.wala.classLoader.CallSiteReference;
import com.ibm.wala.classLoader.IBytecodeMethod;
import com.ibm.wala.classLoader.Language;
@ -585,8 +586,7 @@ public class SSABuilder extends AbstractIntStackMachine {
params[i] = workingState.pop();
}
Language lang = shrikeCFG.getMethod().getDeclaringClass().getClassLoader().getLanguage();
MethodReference m = MethodReference.findOrCreate(lang, loader, instruction.getClassType(), instruction.getMethodName(),
instruction.getMethodSignature());
MethodReference m = ((BytecodeLanguage)lang).getInvokeMethodReference(loader, instruction);
IInvokeInstruction.IDispatch code = instruction.getInvocationCode();
CallSiteReference site = CallSiteReference.make(getCurrentProgramCounter(), m, code);
int exc = reuseOrCreateException();