Class Interval

  • All Implemented Interfaces:
    it.unive.lisa.analysis.Lattice<Interval>, it.unive.lisa.analysis.nonrelational.NonRelationalDomain<Interval,​it.unive.lisa.symbolic.value.ValueExpression,​it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Interval>>, it.unive.lisa.analysis.nonrelational.NonRelationalElement<Interval,​it.unive.lisa.symbolic.value.ValueExpression,​it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Interval>>, it.unive.lisa.analysis.nonrelational.value.NonRelationalValueDomain<Interval>, it.unive.lisa.analysis.SemanticEvaluator

    public class Interval
    extends it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
    The overflow-insensitive interval abstract domain, approximating integer values as the minimum integer interval containing them. It is 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
      Interval()
      Builds the top interval.
    • Method Summary

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

        assume, assumeTernaryExpression, assumeUnaryExpression, canProcess, eval, evalIdentifier, evalNullConstant, evalPushAny, evalTernaryExpression, evalTypeCast, evalTypeConv, glb, satisfies, satisfiesAbstractValue, satisfiesNonNullConstant, satisfiesNullConstant, satisfiesTernaryExpression, 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

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

        variable
    • Constructor Detail

      • Interval

        public Interval()
        Builds the top interval.
    • Method Detail

      • isTop

        public boolean isTop()
      • isBottom

        public boolean isBottom()
      • representation

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

        protected Interval 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<Interval>
      • evalUnaryExpression

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

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

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

        protected Interval glbAux​(Interval other)
        Overrides:
        glbAux in class it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
      • wideningAux

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

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

        protected it.unive.lisa.analysis.SemanticDomain.Satisfiability satisfiesBinaryExpression​(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator,
                                                                                                 Interval left,
                                                                                                 Interval right,
                                                                                                 it.unive.lisa.program.cfg.ProgramPoint pp)
        Overrides:
        satisfiesBinaryExpression in class it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
      • hashCode

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

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

        protected it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Interval> assumeBinaryExpression​(it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Interval> 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<Interval>
        Throws:
        it.unive.lisa.analysis.SemanticException