Package it.unive.lisa.analysis.numeric
Class IntegerConstantPropagation
- java.lang.Object
-
- it.unive.lisa.analysis.numeric.IntegerConstantPropagation
-
- All Implemented Interfaces:
it.unive.lisa.analysis.BaseLattice<IntegerConstantPropagation>
,it.unive.lisa.analysis.Lattice<IntegerConstantPropagation>
,it.unive.lisa.analysis.nonrelational.NonRelationalDomain<IntegerConstantPropagation,it.unive.lisa.symbolic.value.ValueExpression,it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<IntegerConstantPropagation>>
,it.unive.lisa.analysis.nonrelational.NonRelationalElement<IntegerConstantPropagation,it.unive.lisa.symbolic.value.ValueExpression,it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<IntegerConstantPropagation>>
,it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<IntegerConstantPropagation>
,it.unive.lisa.analysis.nonrelational.value.NonRelationalValueDomain<IntegerConstantPropagation>
,it.unive.lisa.analysis.SemanticEvaluator
,it.unive.lisa.util.representation.StructuredObject
public class IntegerConstantPropagation extends java.lang.Object implements it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<IntegerConstantPropagation>
The overflow-insensitive basic integer constant propagation abstract domain, tracking if a certain integer value has constant value or not, implemented as aBaseNonRelationalValueDomain
, handling top and bottom values for the expression evaluation and bottom values for the expression satisfiability. Top and bottom cases for least upper bounds, widening and less or equals operations are handled byBaseLattice
inBaseLattice.lub(L)
,BaseLattice.widening(L)
andBaseLattice.lessOrEqual(L)
, respectively.
-
-
Constructor Summary
Constructors Constructor Description IntegerConstantPropagation()
Builds the top abstract value.IntegerConstantPropagation(java.lang.Integer value)
Builds the abstract value for the given constant.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<IntegerConstantPropagation>
assumeBinaryExpression(it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<IntegerConstantPropagation> environment, it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, it.unive.lisa.symbolic.value.ValueExpression left, it.unive.lisa.symbolic.value.ValueExpression right, it.unive.lisa.program.cfg.ProgramPoint src, it.unive.lisa.program.cfg.ProgramPoint dest, it.unive.lisa.analysis.SemanticOracle oracle)
IntegerConstantPropagation
bottom()
boolean
equals(java.lang.Object obj)
IntegerConstantPropagation
evalBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, IntegerConstantPropagation left, IntegerConstantPropagation right, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
IntegerConstantPropagation
evalNonNullConstant(it.unive.lisa.symbolic.value.Constant constant, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
IntegerConstantPropagation
evalNullConstant(it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
IntegerConstantPropagation
evalTernaryExpression(it.unive.lisa.symbolic.value.operator.ternary.TernaryOperator operator, IntegerConstantPropagation left, IntegerConstantPropagation middle, IntegerConstantPropagation right, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
IntegerConstantPropagation
evalUnaryExpression(it.unive.lisa.symbolic.value.operator.unary.UnaryOperator operator, IntegerConstantPropagation arg, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
int
hashCode()
boolean
isTop()
boolean
lessOrEqualAux(IntegerConstantPropagation other)
IntegerConstantPropagation
lubAux(IntegerConstantPropagation other)
it.unive.lisa.util.representation.StructuredRepresentation
representation()
it.unive.lisa.analysis.lattices.Satisfiability
satisfiesBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, IntegerConstantPropagation left, IntegerConstantPropagation right, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
IntegerConstantPropagation
top()
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface it.unive.lisa.analysis.BaseLattice
glb, glbAux, lessOrEqual, lub, narrowing, narrowingAux, toString, widening, wideningAux
-
Methods inherited from interface it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain
assume, assumeTernaryExpression, assumeUnaryExpression, canProcess, eval, evalIdentifier, evalPushAny, evalPushInv, evalSkip, evalTypeCast, evalTypeConv, evalValueExpression, satisfies, satisfiesAbstractValue, satisfiesNonNullConstant, satisfiesNullConstant, satisfiesTernaryExpression, satisfiesUnaryExpression
-
-
-
-
Method Detail
-
top
public IntegerConstantPropagation top()
- Specified by:
top
in interfaceit.unive.lisa.analysis.Lattice<IntegerConstantPropagation>
-
isTop
public boolean isTop()
- Specified by:
isTop
in interfaceit.unive.lisa.analysis.Lattice<IntegerConstantPropagation>
-
bottom
public IntegerConstantPropagation bottom()
- Specified by:
bottom
in interfaceit.unive.lisa.analysis.Lattice<IntegerConstantPropagation>
-
representation
public it.unive.lisa.util.representation.StructuredRepresentation representation()
- Specified by:
representation
in interfaceit.unive.lisa.util.representation.StructuredObject
-
evalNullConstant
public IntegerConstantPropagation evalNullConstant(it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
- Specified by:
evalNullConstant
in interfaceit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<IntegerConstantPropagation>
-
evalNonNullConstant
public IntegerConstantPropagation evalNonNullConstant(it.unive.lisa.symbolic.value.Constant constant, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
- Specified by:
evalNonNullConstant
in interfaceit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<IntegerConstantPropagation>
-
evalUnaryExpression
public IntegerConstantPropagation evalUnaryExpression(it.unive.lisa.symbolic.value.operator.unary.UnaryOperator operator, IntegerConstantPropagation arg, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
- Specified by:
evalUnaryExpression
in interfaceit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<IntegerConstantPropagation>
-
evalBinaryExpression
public IntegerConstantPropagation evalBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, IntegerConstantPropagation left, IntegerConstantPropagation right, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
- Specified by:
evalBinaryExpression
in interfaceit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<IntegerConstantPropagation>
-
evalTernaryExpression
public IntegerConstantPropagation evalTernaryExpression(it.unive.lisa.symbolic.value.operator.ternary.TernaryOperator operator, IntegerConstantPropagation left, IntegerConstantPropagation middle, IntegerConstantPropagation right, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
- Specified by:
evalTernaryExpression
in interfaceit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<IntegerConstantPropagation>
-
lubAux
public IntegerConstantPropagation lubAux(IntegerConstantPropagation other) throws it.unive.lisa.analysis.SemanticException
- Specified by:
lubAux
in interfaceit.unive.lisa.analysis.BaseLattice<IntegerConstantPropagation>
- Throws:
it.unive.lisa.analysis.SemanticException
-
lessOrEqualAux
public boolean lessOrEqualAux(IntegerConstantPropagation other) throws it.unive.lisa.analysis.SemanticException
- Specified by:
lessOrEqualAux
in interfaceit.unive.lisa.analysis.BaseLattice<IntegerConstantPropagation>
- Throws:
it.unive.lisa.analysis.SemanticException
-
hashCode
public int hashCode()
- Specified by:
hashCode
in interfaceit.unive.lisa.analysis.BaseLattice<IntegerConstantPropagation>
- Overrides:
hashCode
in classjava.lang.Object
-
equals
public boolean equals(java.lang.Object obj)
- Specified by:
equals
in interfaceit.unive.lisa.analysis.BaseLattice<IntegerConstantPropagation>
- Overrides:
equals
in classjava.lang.Object
-
satisfiesBinaryExpression
public it.unive.lisa.analysis.lattices.Satisfiability satisfiesBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, IntegerConstantPropagation left, IntegerConstantPropagation right, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
- Specified by:
satisfiesBinaryExpression
in interfaceit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<IntegerConstantPropagation>
-
assumeBinaryExpression
public it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<IntegerConstantPropagation> assumeBinaryExpression(it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<IntegerConstantPropagation> environment, it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, it.unive.lisa.symbolic.value.ValueExpression left, it.unive.lisa.symbolic.value.ValueExpression right, it.unive.lisa.program.cfg.ProgramPoint src, it.unive.lisa.program.cfg.ProgramPoint dest, it.unive.lisa.analysis.SemanticOracle oracle) throws it.unive.lisa.analysis.SemanticException
- Specified by:
assumeBinaryExpression
in interfaceit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<IntegerConstantPropagation>
- Throws:
it.unive.lisa.analysis.SemanticException
-
-