Class 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 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 bounds, widening and less or equals operations are handled by BaseLattice in BaseLattice.lub(L), BaseLattice.widening(L) and BaseLattice.lessOrEqual(L) methods, respectively.
    • Field Summary

      • Fields inherited from interface it.unive.lisa.analysis.Lattice

        BOTTOM_REPR, BOTTOM_STRING, TOP_REPR, TOP_STRING
    • Constructor Summary

      Constructors 
      Constructor Description
      Sign()
      Builds the sign abstract domain, representing the top of the sign abstract domain.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected 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)  
      Sign bottom()  
      boolean equals​(java.lang.Object obj)  
      protected Sign evalBinaryExpression​(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, Sign left, Sign right, it.unive.lisa.program.cfg.ProgramPoint pp)  
      protected Sign evalNonNullConstant​(it.unive.lisa.symbolic.value.Constant constant, it.unive.lisa.program.cfg.ProgramPoint pp)  
      protected Sign evalNullConstant​(it.unive.lisa.program.cfg.ProgramPoint pp)  
      protected Sign evalUnaryExpression​(it.unive.lisa.symbolic.value.operator.unary.UnaryOperator operator, Sign arg, it.unive.lisa.program.cfg.ProgramPoint pp)  
      int hashCode()  
      protected boolean lessOrEqualAux​(Sign other)  
      protected Sign lubAux​(Sign other)  
      it.unive.lisa.analysis.representation.DomainRepresentation representation()  
      protected 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)  
      protected 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)  
      Sign top()  
      protected Sign wideningAux​(Sign other)  
      • 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
      • Methods inherited from class java.lang.Object

        clone, finalize, getClass, notify, notifyAll, wait, wait, wait
      • Methods inherited from interface it.unive.lisa.analysis.Lattice

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

        variable
    • Constructor Detail

      • Sign

        public Sign()
        Builds the sign abstract domain, representing the top of the sign abstract domain.
    • Method Detail

      • top

        public Sign top()
      • bottom

        public Sign bottom()
      • representation

        public it.unive.lisa.analysis.representation.DomainRepresentation representation()
      • evalNullConstant

        protected Sign evalNullConstant​(it.unive.lisa.program.cfg.ProgramPoint pp)
        Overrides:
        evalNullConstant in class it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Sign>
      • evalNonNullConstant

        protected Sign evalNonNullConstant​(it.unive.lisa.symbolic.value.Constant constant,
                                           it.unive.lisa.program.cfg.ProgramPoint pp)
        Overrides:
        evalNonNullConstant in class it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Sign>
      • evalUnaryExpression

        protected Sign evalUnaryExpression​(it.unive.lisa.symbolic.value.operator.unary.UnaryOperator operator,
                                           Sign arg,
                                           it.unive.lisa.program.cfg.ProgramPoint pp)
        Overrides:
        evalUnaryExpression in class it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Sign>
      • evalBinaryExpression

        protected Sign evalBinaryExpression​(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator,
                                            Sign left,
                                            Sign right,
                                            it.unive.lisa.program.cfg.ProgramPoint pp)
        Overrides:
        evalBinaryExpression in class it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Sign>
      • lubAux

        protected Sign lubAux​(Sign other)
                       throws it.unive.lisa.analysis.SemanticException
        Specified by:
        lubAux in class it.unive.lisa.analysis.BaseLattice<Sign>
        Throws:
        it.unive.lisa.analysis.SemanticException
      • wideningAux

        protected Sign wideningAux​(Sign other)
                            throws it.unive.lisa.analysis.SemanticException
        Specified by:
        wideningAux in class it.unive.lisa.analysis.BaseLattice<Sign>
        Throws:
        it.unive.lisa.analysis.SemanticException
      • lessOrEqualAux

        protected boolean lessOrEqualAux​(Sign other)
                                  throws it.unive.lisa.analysis.SemanticException
        Specified by:
        lessOrEqualAux in class it.unive.lisa.analysis.BaseLattice<Sign>
        Throws:
        it.unive.lisa.analysis.SemanticException
      • hashCode

        public int hashCode()
        Specified by:
        hashCode in class it.unive.lisa.analysis.BaseLattice<Sign>
      • equals

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

        protected 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:
        satisfiesBinaryExpression in class it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Sign>
      • satisfiesTernaryExpression

        protected 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:
        satisfiesTernaryExpression in class it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Sign>
      • assumeBinaryExpression

        protected 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:
        assumeBinaryExpression in class it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Sign>
        Throws:
        it.unive.lisa.analysis.SemanticException