Class Parity

  • All Implemented Interfaces:
    it.unive.lisa.analysis.BaseLattice<Parity>, it.unive.lisa.analysis.Lattice<Parity>, it.unive.lisa.analysis.nonrelational.NonRelationalDomain<Parity,​it.unive.lisa.symbolic.value.ValueExpression,​it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Parity>>, it.unive.lisa.analysis.nonrelational.NonRelationalElement<Parity,​it.unive.lisa.symbolic.value.ValueExpression,​it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Parity>>, it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Parity>, it.unive.lisa.analysis.nonrelational.value.NonRelationalValueDomain<Parity>, it.unive.lisa.analysis.SemanticEvaluator, it.unive.lisa.util.representation.StructuredObject

    public class Parity
    extends java.lang.Object
    implements it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Parity>
    The overflow-insensitive Parity abstract domain, tracking if a numeric value is even or odd, implemented as a BaseNonRelationalValueDomain, handling top and bottom values for the expression evaluation and bottom values for the expression satisfiability. Top and bottom cases for least upper bound, widening and less or equals operations are handled by BaseLattice in BaseLattice.lub(L), BaseLattice.widening(L) and BaseLattice.lessOrEqual(L) methods, respectively.
    • Nested Class Summary

      • Nested classes/interfaces inherited from interface it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain

        it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain.EvaluationVisitor<T extends it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<T>>
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static Parity BOTTOM
      The abstract bottom element.
      static Parity EVEN
      The abstract even element.
      static Parity ODD
      The abstract odd element.
      static Parity TOP
      The abstract top element.
      • Fields inherited from interface it.unive.lisa.analysis.Lattice

        BOTTOM_STRING, TOP_STRING
    • Constructor Summary

      Constructors 
      Constructor Description
      Parity()
      Builds the parity abstract domain, representing the top of the parity abstract domain.
      Parity​(byte parity)
      Builds the parity instance for the given parity value.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Parity> assumeBinaryExpression​(it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Parity> 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)  
      Parity bottom()  
      boolean equals​(java.lang.Object obj)  
      Parity evalBinaryExpression​(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, Parity left, Parity right, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)  
      Parity evalNonNullConstant​(it.unive.lisa.symbolic.value.Constant constant, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)  
      Parity evalNullConstant​(it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)  
      Parity evalUnaryExpression​(it.unive.lisa.symbolic.value.operator.unary.UnaryOperator operator, Parity arg, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)  
      int hashCode()  
      boolean isEven()
      Yields whether or not this is the even parity.
      boolean isOdd()
      Yields whether or not this is the odd parity.
      boolean lessOrEqualAux​(Parity other)  
      Parity lubAux​(Parity other)  
      it.unive.lisa.util.representation.StructuredRepresentation representation()  
      Parity 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, evalTernaryExpression, evalTypeCast, evalTypeConv, satisfies, satisfiesAbstractValue, satisfiesBinaryExpression, satisfiesNonNullConstant, satisfiesNullConstant, satisfiesTernaryExpression, satisfiesUnaryExpression
      • Methods inherited from interface it.unive.lisa.analysis.Lattice

        isBottom, isTop
      • Methods inherited from interface it.unive.lisa.analysis.nonrelational.NonRelationalElement

        fixedVariable, unknownVariable
    • Field Detail

      • EVEN

        public static final Parity EVEN
        The abstract even element.
      • ODD

        public static final Parity ODD
        The abstract odd element.
      • TOP

        public static final Parity TOP
        The abstract top element.
      • BOTTOM

        public static final Parity BOTTOM
        The abstract bottom element.
    • Constructor Detail

      • Parity

        public Parity()
        Builds the parity abstract domain, representing the top of the parity abstract domain.
      • Parity

        public Parity​(byte parity)
        Builds the parity instance for the given parity value.
        Parameters:
        parity - the sign (0 = top, 1 = bottom, 2 = odd, 3 = even)
    • Method Detail

      • top

        public Parity top()
        Specified by:
        top in interface it.unive.lisa.analysis.Lattice<Parity>
      • bottom

        public Parity bottom()
        Specified by:
        bottom in interface it.unive.lisa.analysis.Lattice<Parity>
      • representation

        public it.unive.lisa.util.representation.StructuredRepresentation representation()
        Specified by:
        representation in interface it.unive.lisa.util.representation.StructuredObject
      • evalNullConstant

        public Parity evalNullConstant​(it.unive.lisa.program.cfg.ProgramPoint pp,
                                       it.unive.lisa.analysis.SemanticOracle oracle)
        Specified by:
        evalNullConstant in interface it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Parity>
      • evalNonNullConstant

        public Parity 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 interface it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Parity>
      • isEven

        public boolean isEven()
        Yields whether or not this is the even parity.
        Returns:
        true if that condition holds
      • isOdd

        public boolean isOdd()
        Yields whether or not this is the odd parity.
        Returns:
        true if that condition holds
      • evalUnaryExpression

        public Parity evalUnaryExpression​(it.unive.lisa.symbolic.value.operator.unary.UnaryOperator operator,
                                          Parity arg,
                                          it.unive.lisa.program.cfg.ProgramPoint pp,
                                          it.unive.lisa.analysis.SemanticOracle oracle)
        Specified by:
        evalUnaryExpression in interface it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Parity>
      • evalBinaryExpression

        public Parity evalBinaryExpression​(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator,
                                           Parity left,
                                           Parity right,
                                           it.unive.lisa.program.cfg.ProgramPoint pp,
                                           it.unive.lisa.analysis.SemanticOracle oracle)
        Specified by:
        evalBinaryExpression in interface it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Parity>
      • lubAux

        public Parity lubAux​(Parity other)
                      throws it.unive.lisa.analysis.SemanticException
        Specified by:
        lubAux in interface it.unive.lisa.analysis.BaseLattice<Parity>
        Throws:
        it.unive.lisa.analysis.SemanticException
      • lessOrEqualAux

        public boolean lessOrEqualAux​(Parity other)
                               throws it.unive.lisa.analysis.SemanticException
        Specified by:
        lessOrEqualAux in interface it.unive.lisa.analysis.BaseLattice<Parity>
        Throws:
        it.unive.lisa.analysis.SemanticException
      • hashCode

        public int hashCode()
        Specified by:
        hashCode in interface it.unive.lisa.analysis.BaseLattice<Parity>
        Overrides:
        hashCode in class java.lang.Object
      • equals

        public boolean equals​(java.lang.Object obj)
        Specified by:
        equals in interface it.unive.lisa.analysis.BaseLattice<Parity>
        Overrides:
        equals in class java.lang.Object
      • assumeBinaryExpression

        public it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Parity> assumeBinaryExpression​(it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Parity> 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 interface it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Parity>
        Throws:
        it.unive.lisa.analysis.SemanticException