Package it.unive.lisa.analysis.numeric
Class Sign
- java.lang.Object
-
- it.unive.lisa.analysis.numeric.Sign
-
- All Implemented Interfaces:
it.unive.lisa.analysis.BaseLattice<Sign>
,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.BaseNonRelationalValueDomain<Sign>
,it.unive.lisa.analysis.nonrelational.value.NonRelationalValueDomain<Sign>
,it.unive.lisa.analysis.SemanticEvaluator
,it.unive.lisa.util.representation.StructuredObject
public class Sign extends java.lang.Object implements 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 byBaseLattice
inBaseLattice.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 src, it.unive.lisa.program.cfg.ProgramPoint dest, it.unive.lisa.analysis.SemanticOracle oracle)
Sign
bottom()
it.unive.lisa.analysis.lattices.Satisfiability
eq(Sign other)
Tests if this instance is equal to the given one, returning aSatisfiability
element.boolean
equals(java.lang.Object obj)
Sign
evalBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, Sign left, Sign right, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
Sign
evalNonNullConstant(it.unive.lisa.symbolic.value.Constant constant, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
Sign
evalNullConstant(it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
Sign
evalUnaryExpression(it.unive.lisa.symbolic.value.operator.unary.UnaryOperator operator, Sign arg, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
it.unive.lisa.analysis.lattices.Satisfiability
gt(Sign other)
Tests if this instance is greater than the given one, returning aSatisfiability
element.int
hashCode()
boolean
isNegative()
Yields whether or not this is the negative sign.boolean
isPositive()
Yields whether or not this is the positive sign.boolean
isZero()
Yields whether or not this is the zero sign.boolean
lessOrEqualAux(Sign other)
Sign
lubAux(Sign other)
Sign
opposite()
Yields the sign opposite to this one.it.unive.lisa.util.representation.StructuredRepresentation
representation()
it.unive.lisa.analysis.lattices.Satisfiability
satisfiesBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, Sign left, Sign right, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
it.unive.lisa.analysis.lattices.Satisfiability
satisfiesTernaryExpression(it.unive.lisa.symbolic.value.operator.ternary.TernaryOperator operator, Sign left, Sign middle, Sign right, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
Sign
top()
java.lang.String
toString()
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface it.unive.lisa.analysis.BaseLattice
glb, glbAux, lessOrEqual, lub, narrowing, narrowingAux, widening, wideningAux
-
Methods inherited from interface it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain
assume, assumeTernaryExpression, assumeUnaryExpression, canProcess, eval, evalIdentifier, evalPushAny, evalPushInv, evalSkip, evalTernaryExpression, evalTypeCast, evalTypeConv, evalValueExpression, satisfies, satisfiesAbstractValue, satisfiesNonNullConstant, satisfiesNullConstant, satisfiesUnaryExpression
-
-
-
-
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
-
toString
public java.lang.String toString()
- Specified by:
toString
in interfaceit.unive.lisa.analysis.BaseLattice<Sign>
- Overrides:
toString
in classjava.lang.Object
-
representation
public it.unive.lisa.util.representation.StructuredRepresentation representation()
- Specified by:
representation
in interfaceit.unive.lisa.util.representation.StructuredObject
-
evalNullConstant
public Sign 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<Sign>
-
evalNonNullConstant
public Sign 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<Sign>
-
isPositive
public boolean isPositive()
Yields whether or not this is the positive sign.- Returns:
true
if that condition holds
-
isZero
public boolean isZero()
Yields whether or not this is the zero sign.- Returns:
true
if that condition holds
-
isNegative
public boolean isNegative()
Yields whether or not this is the negative sign.- Returns:
true
if 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, it.unive.lisa.analysis.SemanticOracle oracle)
- Specified by:
evalUnaryExpression
in interfaceit.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, it.unive.lisa.analysis.SemanticOracle oracle)
- Specified by:
evalBinaryExpression
in interfaceit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Sign>
-
lubAux
public Sign lubAux(Sign other) throws it.unive.lisa.analysis.SemanticException
- Specified by:
lubAux
in interfaceit.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:
lessOrEqualAux
in interfaceit.unive.lisa.analysis.BaseLattice<Sign>
- Throws:
it.unive.lisa.analysis.SemanticException
-
hashCode
public int hashCode()
- Specified by:
hashCode
in interfaceit.unive.lisa.analysis.BaseLattice<Sign>
- Overrides:
hashCode
in classjava.lang.Object
-
equals
public boolean equals(java.lang.Object obj)
- Specified by:
equals
in interfaceit.unive.lisa.analysis.BaseLattice<Sign>
- Overrides:
equals
in classjava.lang.Object
-
satisfiesBinaryExpression
public it.unive.lisa.analysis.lattices.Satisfiability satisfiesBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, Sign left, Sign 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<Sign>
-
eq
public it.unive.lisa.analysis.lattices.Satisfiability eq(Sign other)
Tests if this instance is equal to the given one, returning aSatisfiability
element.- Parameters:
other
- the instance- Returns:
- the satisfiability of
this = other
-
gt
public it.unive.lisa.analysis.lattices.Satisfiability gt(Sign other)
Tests if this instance is greater than the given one, returning aSatisfiability
element.- Parameters:
other
- the instance- Returns:
- the satisfiability of
this > other
-
satisfiesTernaryExpression
public it.unive.lisa.analysis.lattices.Satisfiability satisfiesTernaryExpression(it.unive.lisa.symbolic.value.operator.ternary.TernaryOperator operator, Sign left, Sign middle, Sign right, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
- Specified by:
satisfiesTernaryExpression
in interfaceit.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 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<Sign>
- Throws:
it.unive.lisa.analysis.SemanticException
-
-