Package it.unive.lisa.analysis.numeric
Class Sign
- java.lang.Object
-
- it.unive.lisa.analysis.BaseLattice<T>
-
- it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Sign>
-
- it.unive.lisa.analysis.numeric.Sign
-
- All Implemented Interfaces:
it.unive.lisa.analysis.Lattice<Sign>,it.unive.lisa.analysis.nonrelational.NonRelationalDomain<Sign,it.unive.lisa.symbolic.value.ValueExpression,it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Sign>>,it.unive.lisa.analysis.nonrelational.NonRelationalElement<Sign,it.unive.lisa.symbolic.value.ValueExpression,it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Sign>>,it.unive.lisa.analysis.nonrelational.value.NonRelationalValueDomain<Sign>,it.unive.lisa.analysis.SemanticEvaluator
public class Sign extends it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Sign>
The basic overflow-insensitive Sign abstract domain, tracking zero, strictly positive and strictly negative integer values, 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 byBaseLatticeinBaseLattice.lub(L),BaseLattice.widening(L)andBaseLattice.lessOrEqual(L)methods, respectively.
-
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Sign>assumeBinaryExpression(it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Sign> 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)Signbottom()it.unive.lisa.analysis.SemanticDomain.Satisfiabilityeq(Sign other)Tests if this instance is equal to the given one, returning aSemanticDomain.Satisfiabilityelement.booleanequals(java.lang.Object obj)SignevalBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, Sign left, Sign right, it.unive.lisa.program.cfg.ProgramPoint pp)SignevalNonNullConstant(it.unive.lisa.symbolic.value.Constant constant, it.unive.lisa.program.cfg.ProgramPoint pp)SignevalNullConstant(it.unive.lisa.program.cfg.ProgramPoint pp)SignevalUnaryExpression(it.unive.lisa.symbolic.value.operator.unary.UnaryOperator operator, Sign arg, it.unive.lisa.program.cfg.ProgramPoint pp)it.unive.lisa.analysis.SemanticDomain.Satisfiabilitygt(Sign other)Tests if this instance is greater than the given one, returning aSemanticDomain.Satisfiabilityelement.inthashCode()booleanisNegative()Yields whether or not this is the negative sign.booleanisPositive()Yields whether or not this is the positive sign.booleanisZero()Yields whether or not this is the zero sign.booleanlessOrEqualAux(Sign other)SignlubAux(Sign other)Signopposite()Yields the sign opposite to this one.it.unive.lisa.analysis.representation.DomainRepresentationrepresentation()it.unive.lisa.analysis.SemanticDomain.SatisfiabilitysatisfiesBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, Sign left, Sign right, it.unive.lisa.program.cfg.ProgramPoint pp)it.unive.lisa.analysis.SemanticDomain.SatisfiabilitysatisfiesTernaryExpression(it.unive.lisa.symbolic.value.operator.ternary.TernaryOperator operator, Sign left, Sign middle, Sign right, it.unive.lisa.program.cfg.ProgramPoint pp)Signtop()-
Methods inherited from class it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain
assume, assumeTernaryExpression, assumeUnaryExpression, canProcess, eval, evalIdentifier, evalPushAny, evalTernaryExpression, evalTypeCast, evalTypeConv, glb, glbAux, satisfies, satisfiesAbstractValue, satisfiesNonNullConstant, satisfiesNullConstant, 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
-
-
-
-
Field Detail
-
POS
public static final Sign POS
The abstract positive element.
-
NEG
public static final Sign NEG
The abstract negative element.
-
ZERO
public static final Sign ZERO
The abstract zero element.
-
TOP
public static final Sign TOP
The abstract top element.
-
BOTTOM
public static final Sign BOTTOM
The abstract bottom element.
-
-
Method Detail
-
top
public Sign top()
-
bottom
public Sign bottom()
-
representation
public it.unive.lisa.analysis.representation.DomainRepresentation representation()
-
evalNullConstant
public Sign evalNullConstant(it.unive.lisa.program.cfg.ProgramPoint pp)
- Overrides:
evalNullConstantin classit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Sign>
-
evalNonNullConstant
public Sign evalNonNullConstant(it.unive.lisa.symbolic.value.Constant constant, it.unive.lisa.program.cfg.ProgramPoint pp)
- Overrides:
evalNonNullConstantin classit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Sign>
-
isPositive
public boolean isPositive()
Yields whether or not this is the positive sign.- Returns:
trueif that condition holds
-
isZero
public boolean isZero()
Yields whether or not this is the zero sign.- Returns:
trueif that condition holds
-
isNegative
public boolean isNegative()
Yields whether or not this is the negative sign.- Returns:
trueif that condition holds
-
opposite
public Sign opposite()
Yields the sign opposite to this one. Top and bottom elements do not change.- Returns:
- the opposite sign
-
evalUnaryExpression
public Sign evalUnaryExpression(it.unive.lisa.symbolic.value.operator.unary.UnaryOperator operator, Sign arg, it.unive.lisa.program.cfg.ProgramPoint pp)
- Overrides:
evalUnaryExpressionin classit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Sign>
-
evalBinaryExpression
public Sign evalBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, Sign left, Sign right, it.unive.lisa.program.cfg.ProgramPoint pp)
- Overrides:
evalBinaryExpressionin classit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Sign>
-
lubAux
public Sign lubAux(Sign other) throws it.unive.lisa.analysis.SemanticException
- Specified by:
lubAuxin classit.unive.lisa.analysis.BaseLattice<Sign>- Throws:
it.unive.lisa.analysis.SemanticException
-
lessOrEqualAux
public boolean lessOrEqualAux(Sign other) throws it.unive.lisa.analysis.SemanticException
- Specified by:
lessOrEqualAuxin classit.unive.lisa.analysis.BaseLattice<Sign>- Throws:
it.unive.lisa.analysis.SemanticException
-
hashCode
public int hashCode()
- Specified by:
hashCodein classit.unive.lisa.analysis.BaseLattice<Sign>
-
equals
public boolean equals(java.lang.Object obj)
- Specified by:
equalsin classit.unive.lisa.analysis.BaseLattice<Sign>
-
satisfiesBinaryExpression
public it.unive.lisa.analysis.SemanticDomain.Satisfiability satisfiesBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, Sign left, Sign right, it.unive.lisa.program.cfg.ProgramPoint pp)- Overrides:
satisfiesBinaryExpressionin classit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Sign>
-
eq
public it.unive.lisa.analysis.SemanticDomain.Satisfiability eq(Sign other)
Tests if this instance is equal to the given one, returning aSemanticDomain.Satisfiabilityelement.- Parameters:
other- the instance- Returns:
- the satisfiability of
this = other
-
gt
public it.unive.lisa.analysis.SemanticDomain.Satisfiability gt(Sign other)
Tests if this instance is greater than the given one, returning aSemanticDomain.Satisfiabilityelement.- Parameters:
other- the instance- Returns:
- the satisfiability of
this > other
-
satisfiesTernaryExpression
public it.unive.lisa.analysis.SemanticDomain.Satisfiability satisfiesTernaryExpression(it.unive.lisa.symbolic.value.operator.ternary.TernaryOperator operator, Sign left, Sign middle, Sign right, it.unive.lisa.program.cfg.ProgramPoint pp)- Overrides:
satisfiesTernaryExpressionin classit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Sign>
-
assumeBinaryExpression
public it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Sign> assumeBinaryExpression(it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Sign> 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:
assumeBinaryExpressionin classit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Sign>- Throws:
it.unive.lisa.analysis.SemanticException
-
-