private void setNextParameter() { int i = paramInd; for ( ; i < numParams; i++) { int parameter = symbolTable.getParameter(i); TypeAbstraction t = ti.getType(parameter); if (t != null) { nextParameter = parameter; break; } } paramInd = ++i; }
public static TypeInference make(IR ir, boolean doPrimitives) { return new TypeInference(ir, doPrimitives); }
@Override protected void initializeWorkList() { addAllStatementsToWorkList(); }
/** * add nodes for parameters and return values */ private void addNodesForParameters(CGNode node) { // TODO Auto-generated method stub IR ir = node.getIR(); TypeInference ti = TypeInference.make(ir, false); SymbolTable symbolTable = ir.getSymbolTable(); for (int i = 0; i < symbolTable.getNumberOfParameters(); i++) { int parameter = symbolTable.getParameter(i); TypeAbstraction t = ti.getType(parameter); if (t != null) { PointerKey paramPk = heapModel.getPointerKeyForLocal(node, parameter); addNode(paramPk); params.put(paramPk, node); } } addNode(heapModel.getPointerKeyForReturnValue(node)); addNode(heapModel.getPointerKeyForExceptionalReturnValue(node)); }
protected TypeInference(IR ir, boolean doPrimitives) { if (ir == null) { throw new IllegalArgumentException("ir is null"); } this.language = ir.getMethod().getDeclaringClass().getClassLoader().getLanguage(); this.cha = ir.getMethod().getDeclaringClass().getClassHierarchy(); this.ir = ir; this.doPrimitives = doPrimitives; this.BOTTOM = new ConeType(cha.getRootClass()); initialize(); solve(); }
TypeVariable v = getVariable(parameterValueNumbers[i]); TypeReference t = ir.getParameterType(i); for (int i = 0; i <= st.getMaxValueNumber(); i++) { if (st.isConstant(i)) { TypeVariable v = getVariable(i); v.setType(getConstantType(i)); if (s instanceof SSAAbstractInvokeInstruction) { SSAAbstractInvokeInstruction call = (SSAAbstractInvokeInstruction) s; TypeVariable v = getVariable(call.getException()); Collection<TypeReference> defaultExceptions = call.getExceptionTypes(); if (defaultExceptions.size() == 0) {
public PointerParamValueNumIterator(CGNode node) throws IllegalArgumentException { if (node == null) { throw new IllegalArgumentException("node == null"); } IR ir = node.getIR(); ti = TypeInference.make(ir, false); symbolTable = ir.getSymbolTable(); numParams = symbolTable.getNumberOfParameters(); paramInd = 0; setNextParameter(); }
public boolean isUndefined(int valueNumber) { // TODO: Julian, you seem to be using BOTTOM in the European style. // Steve's code assumes American style (god forbid), so what you're getting // here // is not undefined, but java.lang.Object [NR/EY] if (getVariable(valueNumber) == null) { return true; } TypeAbstraction ta = getVariable(valueNumber).getType(); return ta == BOTTOM || ta.getType() == null; }
public TypeAbstraction getConstantType(int valueNumber) { if (ir.getSymbolTable().isStringConstant(valueNumber)) { return new PointType(cha.lookupClass(language.getStringType())); } else { return getConstantPrimitiveType(valueNumber); } }
public boolean solve() { return solve(null); }
protected void initialize() { init(ir, this.new TypeVarFactory(), this.new TypeOperatorFactory()); }
/** * add nodes for parameters and return values */ private void addNodesForParameters(CGNode node) { // TODO Auto-generated method stub IR ir = node.getIR(); TypeInference ti = TypeInference.make(ir, false); SymbolTable symbolTable = ir.getSymbolTable(); for (int i = 0; i < symbolTable.getNumberOfParameters(); i++) { int parameter = symbolTable.getParameter(i); TypeAbstraction t = ti.getType(parameter); if (t != null) { PointerKey paramPk = heapModel.getPointerKeyForLocal(node, parameter); addNode(paramPk); params.put(paramPk, node); } } addNode(heapModel.getPointerKeyForReturnValue(node)); addNode(heapModel.getPointerKeyForExceptionalReturnValue(node)); }
protected TypeInference(IR ir, boolean doPrimitives) { if (ir == null) { throw new IllegalArgumentException("ir is null"); } this.language = ir.getMethod().getDeclaringClass().getClassLoader().getLanguage(); this.cha = ir.getMethod().getDeclaringClass().getClassHierarchy(); this.ir = ir; this.doPrimitives = doPrimitives; this.BOTTOM = new ConeType(cha.getRootClass()); initialize(); solve(); }
TypeVariable v = getVariable(parameterValueNumbers[i]); TypeReference t = ir.getParameterType(i); for (int i = 0; i <= st.getMaxValueNumber(); i++) { if (st.isConstant(i)) { TypeVariable v = getVariable(i); v.setType(getConstantType(i)); if (s instanceof SSAAbstractInvokeInstruction) { SSAAbstractInvokeInstruction call = (SSAAbstractInvokeInstruction) s; TypeVariable v = getVariable(call.getException()); Collection<TypeReference> defaultExceptions = call.getExceptionTypes(); if (defaultExceptions.size() == 0) {
public PointerParamValueNumIterator(CGNode node) throws IllegalArgumentException { if (node == null) { throw new IllegalArgumentException("node == null"); } IR ir = node.getIR(); ti = TypeInference.make(ir, false); symbolTable = ir.getSymbolTable(); numParams = symbolTable.getNumberOfParameters(); paramInd = 0; setNextParameter(); }
/** * Return the type computed for a particular value number */ public TypeAbstraction getType(int valueNumber) { if (valueNumber < 0) { throw new IllegalArgumentException("bad value number " + valueNumber); } TypeVariable variable = getVariable(valueNumber); assert variable != null : "null variable for value number " + valueNumber; return variable.getType(); }
public TypeAbstraction getConstantType(int valueNumber) { if (ir.getSymbolTable().isStringConstant(valueNumber)) { return new PointType(cha.lookupClass(language.getStringType())); } else { return getConstantPrimitiveType(valueNumber); } }
public boolean solve() { return solve(null); }
protected void initialize() { init(ir, this.new TypeVarFactory(), this.new TypeOperatorFactory()); }