Class SimpleAbstractState<H extends it.unive.lisa.analysis.heap.HeapDomain<H>,​V extends it.unive.lisa.analysis.value.ValueDomain<V>,​T extends it.unive.lisa.analysis.value.TypeDomain<T>>

  • Type Parameters:
    H - the type of HeapDomain embedded in this state
    V - the type of ValueDomain embedded in this state
    T - the type of TypeDomain embedded in this state
    All Implemented Interfaces:
    it.unive.lisa.analysis.AbstractState<SimpleAbstractState<H,​V,​T>,​H,​V,​T>, it.unive.lisa.analysis.BaseLattice<SimpleAbstractState<H,​V,​T>>, it.unive.lisa.analysis.Lattice<SimpleAbstractState<H,​V,​T>>, it.unive.lisa.analysis.SemanticDomain<SimpleAbstractState<H,​V,​T>,​it.unive.lisa.symbolic.SymbolicExpression,​it.unive.lisa.symbolic.value.Identifier>

    public class SimpleAbstractState<H extends it.unive.lisa.analysis.heap.HeapDomain<H>,​V extends it.unive.lisa.analysis.value.ValueDomain<V>,​T extends it.unive.lisa.analysis.value.TypeDomain<T>>
    extends java.lang.Object
    implements it.unive.lisa.analysis.BaseLattice<SimpleAbstractState<H,​V,​T>>, it.unive.lisa.analysis.AbstractState<SimpleAbstractState<H,​V,​T>,​H,​V,​T>
    An abstract state of the analysis, composed by a heap state modeling the memory layout and a value state modeling values of program variables and memory locations.
    • Constructor Detail

      • SimpleAbstractState

        public SimpleAbstractState​(H heapState,
                                   V valueState,
                                   T typeState)
        Builds a new abstract state.
        Parameters:
        heapState - the domain containing information regarding heap structures
        valueState - the domain containing information regarding values of program variables and concretized memory locations
        typeState - the domain containing information regarding runtime types of program variables and concretized memory locations
    • Method Detail

      • getHeapState

        public H getHeapState()
        Specified by:
        getHeapState in interface it.unive.lisa.analysis.AbstractState<SimpleAbstractState<H extends it.unive.lisa.analysis.heap.HeapDomain<H>,​V extends it.unive.lisa.analysis.value.ValueDomain<V>,​T extends it.unive.lisa.analysis.value.TypeDomain<T>>,​H extends it.unive.lisa.analysis.heap.HeapDomain<H>,​V extends it.unive.lisa.analysis.value.ValueDomain<V>,​T extends it.unive.lisa.analysis.value.TypeDomain<T>>
      • getValueState

        public V getValueState()
        Specified by:
        getValueState in interface it.unive.lisa.analysis.AbstractState<SimpleAbstractState<H extends it.unive.lisa.analysis.heap.HeapDomain<H>,​V extends it.unive.lisa.analysis.value.ValueDomain<V>,​T extends it.unive.lisa.analysis.value.TypeDomain<T>>,​H extends it.unive.lisa.analysis.heap.HeapDomain<H>,​V extends it.unive.lisa.analysis.value.ValueDomain<V>,​T extends it.unive.lisa.analysis.value.TypeDomain<T>>
      • getTypeState

        public T getTypeState()
        Specified by:
        getTypeState in interface it.unive.lisa.analysis.AbstractState<SimpleAbstractState<H extends it.unive.lisa.analysis.heap.HeapDomain<H>,​V extends it.unive.lisa.analysis.value.ValueDomain<V>,​T extends it.unive.lisa.analysis.value.TypeDomain<T>>,​H extends it.unive.lisa.analysis.heap.HeapDomain<H>,​V extends it.unive.lisa.analysis.value.ValueDomain<V>,​T extends it.unive.lisa.analysis.value.TypeDomain<T>>
      • assign

        public SimpleAbstractState<H,​V,​T> assign​(it.unive.lisa.symbolic.value.Identifier id,
                                                             it.unive.lisa.symbolic.SymbolicExpression expression,
                                                             it.unive.lisa.program.cfg.ProgramPoint pp)
                                                      throws it.unive.lisa.analysis.SemanticException
        Specified by:
        assign in interface it.unive.lisa.analysis.SemanticDomain<H extends it.unive.lisa.analysis.heap.HeapDomain<H>,​V extends it.unive.lisa.analysis.value.ValueDomain<V>,​T extends it.unive.lisa.analysis.value.TypeDomain<T>>
        Throws:
        it.unive.lisa.analysis.SemanticException
      • smallStepSemantics

        public SimpleAbstractState<H,​V,​T> smallStepSemantics​(it.unive.lisa.symbolic.SymbolicExpression expression,
                                                                         it.unive.lisa.program.cfg.ProgramPoint pp)
                                                                  throws it.unive.lisa.analysis.SemanticException
        Specified by:
        smallStepSemantics in interface it.unive.lisa.analysis.SemanticDomain<H extends it.unive.lisa.analysis.heap.HeapDomain<H>,​V extends it.unive.lisa.analysis.value.ValueDomain<V>,​T extends it.unive.lisa.analysis.value.TypeDomain<T>>
        Throws:
        it.unive.lisa.analysis.SemanticException
      • assume

        public SimpleAbstractState<H,​V,​T> assume​(it.unive.lisa.symbolic.SymbolicExpression expression,
                                                             it.unive.lisa.program.cfg.ProgramPoint src,
                                                             it.unive.lisa.program.cfg.ProgramPoint dest)
                                                      throws it.unive.lisa.analysis.SemanticException
        Specified by:
        assume in interface it.unive.lisa.analysis.SemanticDomain<H extends it.unive.lisa.analysis.heap.HeapDomain<H>,​V extends it.unive.lisa.analysis.value.ValueDomain<V>,​T extends it.unive.lisa.analysis.value.TypeDomain<T>>
        Throws:
        it.unive.lisa.analysis.SemanticException
      • satisfies

        public it.unive.lisa.analysis.SemanticDomain.Satisfiability satisfies​(it.unive.lisa.symbolic.SymbolicExpression expression,
                                                                              it.unive.lisa.program.cfg.ProgramPoint pp)
                                                                       throws it.unive.lisa.analysis.SemanticException
        Specified by:
        satisfies in interface it.unive.lisa.analysis.SemanticDomain<H extends it.unive.lisa.analysis.heap.HeapDomain<H>,​V extends it.unive.lisa.analysis.value.ValueDomain<V>,​T extends it.unive.lisa.analysis.value.TypeDomain<T>>
        Throws:
        it.unive.lisa.analysis.SemanticException
      • pushScope

        public SimpleAbstractState<H,​V,​T> pushScope​(it.unive.lisa.analysis.ScopeToken scope)
                                                         throws it.unive.lisa.analysis.SemanticException
        Specified by:
        pushScope in interface it.unive.lisa.analysis.SemanticDomain<H extends it.unive.lisa.analysis.heap.HeapDomain<H>,​V extends it.unive.lisa.analysis.value.ValueDomain<V>,​T extends it.unive.lisa.analysis.value.TypeDomain<T>>
        Throws:
        it.unive.lisa.analysis.SemanticException
      • popScope

        public SimpleAbstractState<H,​V,​T> popScope​(it.unive.lisa.analysis.ScopeToken scope)
                                                        throws it.unive.lisa.analysis.SemanticException
        Specified by:
        popScope in interface it.unive.lisa.analysis.SemanticDomain<H extends it.unive.lisa.analysis.heap.HeapDomain<H>,​V extends it.unive.lisa.analysis.value.ValueDomain<V>,​T extends it.unive.lisa.analysis.value.TypeDomain<T>>
        Throws:
        it.unive.lisa.analysis.SemanticException
      • lubAux

        public SimpleAbstractState<H,​V,​T> lubAux​(SimpleAbstractState<H,​V,​T> other)
                                                      throws it.unive.lisa.analysis.SemanticException
        Specified by:
        lubAux in interface it.unive.lisa.analysis.BaseLattice<H extends it.unive.lisa.analysis.heap.HeapDomain<H>>
        Throws:
        it.unive.lisa.analysis.SemanticException
      • glbAux

        public SimpleAbstractState<H,​V,​T> glbAux​(SimpleAbstractState<H,​V,​T> other)
                                                      throws it.unive.lisa.analysis.SemanticException
        Specified by:
        glbAux in interface it.unive.lisa.analysis.BaseLattice<H extends it.unive.lisa.analysis.heap.HeapDomain<H>>
        Throws:
        it.unive.lisa.analysis.SemanticException
      • wideningAux

        public SimpleAbstractState<H,​V,​T> wideningAux​(SimpleAbstractState<H,​V,​T> other)
                                                           throws it.unive.lisa.analysis.SemanticException
        Specified by:
        wideningAux in interface it.unive.lisa.analysis.BaseLattice<H extends it.unive.lisa.analysis.heap.HeapDomain<H>>
        Throws:
        it.unive.lisa.analysis.SemanticException
      • narrowingAux

        public SimpleAbstractState<H,​V,​T> narrowingAux​(SimpleAbstractState<H,​V,​T> other)
                                                            throws it.unive.lisa.analysis.SemanticException
        Specified by:
        narrowingAux in interface it.unive.lisa.analysis.BaseLattice<H extends it.unive.lisa.analysis.heap.HeapDomain<H>>
        Throws:
        it.unive.lisa.analysis.SemanticException
      • lessOrEqualAux

        public boolean lessOrEqualAux​(SimpleAbstractState<H,​V,​T> other)
                               throws it.unive.lisa.analysis.SemanticException
        Specified by:
        lessOrEqualAux in interface it.unive.lisa.analysis.BaseLattice<H extends it.unive.lisa.analysis.heap.HeapDomain<H>>
        Throws:
        it.unive.lisa.analysis.SemanticException
      • top

        public SimpleAbstractState<H,​V,​T> top()
        Specified by:
        top in interface it.unive.lisa.analysis.Lattice<H extends it.unive.lisa.analysis.heap.HeapDomain<H>>
      • bottom

        public SimpleAbstractState<H,​V,​T> bottom()
        Specified by:
        bottom in interface it.unive.lisa.analysis.Lattice<H extends it.unive.lisa.analysis.heap.HeapDomain<H>>
      • isTop

        public boolean isTop()
        Specified by:
        isTop in interface it.unive.lisa.analysis.Lattice<H extends it.unive.lisa.analysis.heap.HeapDomain<H>>
      • isBottom

        public boolean isBottom()
        Specified by:
        isBottom in interface it.unive.lisa.analysis.Lattice<H extends it.unive.lisa.analysis.heap.HeapDomain<H>>
      • forgetIdentifier

        public SimpleAbstractState<H,​V,​T> forgetIdentifier​(it.unive.lisa.symbolic.value.Identifier id)
                                                                throws it.unive.lisa.analysis.SemanticException
        Specified by:
        forgetIdentifier in interface it.unive.lisa.analysis.SemanticDomain<H extends it.unive.lisa.analysis.heap.HeapDomain<H>,​V extends it.unive.lisa.analysis.value.ValueDomain<V>,​T extends it.unive.lisa.analysis.value.TypeDomain<T>>
        Throws:
        it.unive.lisa.analysis.SemanticException
      • forgetIdentifiersIf

        public SimpleAbstractState<H,​V,​T> forgetIdentifiersIf​(java.util.function.Predicate<it.unive.lisa.symbolic.value.Identifier> test)
                                                                   throws it.unive.lisa.analysis.SemanticException
        Specified by:
        forgetIdentifiersIf in interface it.unive.lisa.analysis.SemanticDomain<H extends it.unive.lisa.analysis.heap.HeapDomain<H>,​V extends it.unive.lisa.analysis.value.ValueDomain<V>,​T extends it.unive.lisa.analysis.value.TypeDomain<T>>
        Throws:
        it.unive.lisa.analysis.SemanticException
      • hashCode

        public int hashCode()
        Specified by:
        hashCode in interface it.unive.lisa.analysis.BaseLattice<H extends it.unive.lisa.analysis.heap.HeapDomain<H>>
        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<H extends it.unive.lisa.analysis.heap.HeapDomain<H>>
        Overrides:
        equals in class java.lang.Object
      • representation

        public it.unive.lisa.analysis.representation.DomainRepresentation representation()
        Specified by:
        representation in interface it.unive.lisa.analysis.SemanticDomain<H extends it.unive.lisa.analysis.heap.HeapDomain<H>,​V extends it.unive.lisa.analysis.value.ValueDomain<V>,​T extends it.unive.lisa.analysis.value.TypeDomain<T>>
      • toString

        public java.lang.String toString()
        Specified by:
        toString in interface it.unive.lisa.analysis.BaseLattice<H extends it.unive.lisa.analysis.heap.HeapDomain<H>>
        Overrides:
        toString in class java.lang.Object
      • getAllDomainInstances

        public <D extends it.unive.lisa.analysis.SemanticDomain<?,​?,​?>> java.util.Collection<D> getAllDomainInstances​(java.lang.Class<D> domain)
        Specified by:
        getAllDomainInstances in interface it.unive.lisa.analysis.SemanticDomain<H extends it.unive.lisa.analysis.heap.HeapDomain<H>,​V extends it.unive.lisa.analysis.value.ValueDomain<V>,​T extends it.unive.lisa.analysis.value.TypeDomain<T>>
      • withTopHeap

        public SimpleAbstractState<H,​V,​T> withTopHeap()
        Specified by:
        withTopHeap in interface it.unive.lisa.analysis.AbstractState<SimpleAbstractState<H extends it.unive.lisa.analysis.heap.HeapDomain<H>,​V extends it.unive.lisa.analysis.value.ValueDomain<V>,​T extends it.unive.lisa.analysis.value.TypeDomain<T>>,​H extends it.unive.lisa.analysis.heap.HeapDomain<H>,​V extends it.unive.lisa.analysis.value.ValueDomain<V>,​T extends it.unive.lisa.analysis.value.TypeDomain<T>>
      • withTopValue

        public SimpleAbstractState<H,​V,​T> withTopValue()
        Specified by:
        withTopValue in interface it.unive.lisa.analysis.AbstractState<SimpleAbstractState<H extends it.unive.lisa.analysis.heap.HeapDomain<H>,​V extends it.unive.lisa.analysis.value.ValueDomain<V>,​T extends it.unive.lisa.analysis.value.TypeDomain<T>>,​H extends it.unive.lisa.analysis.heap.HeapDomain<H>,​V extends it.unive.lisa.analysis.value.ValueDomain<V>,​T extends it.unive.lisa.analysis.value.TypeDomain<T>>
      • withTopType

        public SimpleAbstractState<H,​V,​T> withTopType()
        Specified by:
        withTopType in interface it.unive.lisa.analysis.AbstractState<SimpleAbstractState<H extends it.unive.lisa.analysis.heap.HeapDomain<H>,​V extends it.unive.lisa.analysis.value.ValueDomain<V>,​T extends it.unive.lisa.analysis.value.TypeDomain<T>>,​H extends it.unive.lisa.analysis.heap.HeapDomain<H>,​V extends it.unive.lisa.analysis.value.ValueDomain<V>,​T extends it.unive.lisa.analysis.value.TypeDomain<T>>