Package it.unive.lisa.analysis.numeric
Class IntegerConstantPropagation
- java.lang.Object
-
- it.unive.lisa.analysis.BaseLattice<T>
-
- it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<IntegerConstantPropagation>
-
- it.unive.lisa.analysis.numeric.IntegerConstantPropagation
-
- All Implemented Interfaces:
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.NonRelationalValueDomain<IntegerConstantPropagation>
,it.unive.lisa.analysis.SemanticEvaluator
public class IntegerConstantPropagation extends 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 pp)
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)
IntegerConstantPropagation
evalNonNullConstant(it.unive.lisa.symbolic.value.Constant constant, it.unive.lisa.program.cfg.ProgramPoint pp)
IntegerConstantPropagation
evalNullConstant(it.unive.lisa.program.cfg.ProgramPoint pp)
IntegerConstantPropagation
evalTernaryExpression(it.unive.lisa.symbolic.value.operator.ternary.TernaryOperator operator, IntegerConstantPropagation left, IntegerConstantPropagation middle, IntegerConstantPropagation right, it.unive.lisa.program.cfg.ProgramPoint pp)
IntegerConstantPropagation
evalUnaryExpression(it.unive.lisa.symbolic.value.operator.unary.UnaryOperator operator, IntegerConstantPropagation arg, it.unive.lisa.program.cfg.ProgramPoint pp)
int
hashCode()
boolean
isTop()
boolean
lessOrEqualAux(IntegerConstantPropagation other)
IntegerConstantPropagation
lubAux(IntegerConstantPropagation other)
it.unive.lisa.analysis.representation.DomainRepresentation
representation()
it.unive.lisa.analysis.SemanticDomain.Satisfiability
satisfiesBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, IntegerConstantPropagation left, IntegerConstantPropagation right, it.unive.lisa.program.cfg.ProgramPoint pp)
IntegerConstantPropagation
top()
-
Methods inherited from class it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain
assume, assumeTernaryExpression, assumeUnaryExpression, canProcess, eval, evalIdentifier, evalPushAny, evalTypeCast, evalTypeConv, glb, glbAux, satisfies, satisfiesAbstractValue, satisfiesNonNullConstant, satisfiesNullConstant, satisfiesTernaryExpression, satisfiesUnaryExpression, toString, tracksIdentifiers
-
Methods inherited from class it.unive.lisa.analysis.BaseLattice
lessOrEqual, lub, widening, wideningAux
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
-
-
-
Method Detail
-
top
public IntegerConstantPropagation top()
-
isTop
public boolean isTop()
-
bottom
public IntegerConstantPropagation bottom()
-
representation
public it.unive.lisa.analysis.representation.DomainRepresentation representation()
-
evalNullConstant
public IntegerConstantPropagation evalNullConstant(it.unive.lisa.program.cfg.ProgramPoint pp)
- Overrides:
evalNullConstant
in classit.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)
- Overrides:
evalNonNullConstant
in classit.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)
- Overrides:
evalUnaryExpression
in classit.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)
- Overrides:
evalBinaryExpression
in classit.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)
- Overrides:
evalTernaryExpression
in classit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<IntegerConstantPropagation>
-
lubAux
public IntegerConstantPropagation lubAux(IntegerConstantPropagation other) throws it.unive.lisa.analysis.SemanticException
- Specified by:
lubAux
in classit.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 classit.unive.lisa.analysis.BaseLattice<IntegerConstantPropagation>
- Throws:
it.unive.lisa.analysis.SemanticException
-
hashCode
public int hashCode()
- Specified by:
hashCode
in classit.unive.lisa.analysis.BaseLattice<IntegerConstantPropagation>
-
equals
public boolean equals(java.lang.Object obj)
- Specified by:
equals
in classit.unive.lisa.analysis.BaseLattice<IntegerConstantPropagation>
-
satisfiesBinaryExpression
public it.unive.lisa.analysis.SemanticDomain.Satisfiability satisfiesBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, IntegerConstantPropagation left, IntegerConstantPropagation right, it.unive.lisa.program.cfg.ProgramPoint pp)
- Overrides:
satisfiesBinaryExpression
in classit.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 pp) throws it.unive.lisa.analysis.SemanticException
- Overrides:
assumeBinaryExpression
in classit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<IntegerConstantPropagation>
- Throws:
it.unive.lisa.analysis.SemanticException
-
-