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; }
@Override public void visitGetCaughtException(SSAGetCaughtExceptionInstruction instruction) { TypeAbstraction type = meetDeclaredExceptionTypes(instruction); result = new DeclaredTypeOperator(type); }
/** * TODO: work on efficiency shortcuts for this. */ @Override public byte evaluate(TypeVariable lhs, TypeVariable[] rhsOperands) { TypeAbstraction lhsType = lhs.getType(); TypeVariable rhs = rhsOperands[0]; TypeAbstraction rhsType = rhs.getType(); if (lhsType.equals(rhsType)) { return NOT_CHANGED; } else { lhs.setType(rhsType); return CHANGED; } }
protected void initialize() { init(ir, this.new TypeVarFactory(), this.new TypeOperatorFactory()); }
/** * 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(); }
@Override public void visitIsDefined(AstIsDefinedInstruction inst) { if (doPrimitives) { result = new DeclaredTypeOperator(booleanType); } }
@Override public boolean equals(Object o) { if (o instanceof DeclaredTypeOperator) { DeclaredTypeOperator d = (DeclaredTypeOperator) o; return type.equals(d.type); } else { return false; } } }
@Override @SuppressWarnings("static-access") public PrimitiveType getPrimitive(TypeReference reference) { return JavaPrimitiveType.getPrimitive(reference); }
@Override public void visitArrayLoad(SSAArrayLoadInstruction instruction) { result = new GetElementType(instruction); }
@Override public int hashCode() { return 6367 * type.hashCode(); }
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; }
@Override public void visitGetCaughtException(SSAGetCaughtExceptionInstruction instruction) { TypeAbstraction type = meetDeclaredExceptionTypes(instruction); result = new DeclaredTypeOperator(type); }
protected void initialize() { init(ir, this.new TypeVarFactory(), this.new TypeOperatorFactory()); }
/** * 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(); }
@Override public void visitIsDefined(AstIsDefinedInstruction inst) { if (doPrimitives) { result = new DeclaredTypeOperator(booleanType); } }
@Override public boolean equals(Object o) { if (o instanceof DeclaredTypeOperator) { DeclaredTypeOperator d = (DeclaredTypeOperator) o; return type.equals(d.type); } else { return false; } } }
@Override @SuppressWarnings("static-access") public PrimitiveType getPrimitive(TypeReference reference) { return JavaPrimitiveType.getPrimitive(reference); }
@Override public void visitArrayLoad(SSAArrayLoadInstruction instruction) { result = new GetElementType(instruction); }