Package it.unive.lisa.analysis
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>>
- java.lang.Object
-
- it.unive.lisa.analysis.SimpleAbstractState<H,V,T>
-
- Type Parameters:
H
- the type ofHeapDomain
embedded in this stateV
- the type ofValueDomain
embedded in this stateT
- the type ofTypeDomain
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 Summary
Constructors Constructor Description SimpleAbstractState(H heapState, V valueState, T typeState)
Builds a new abstract state.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description 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)
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)
SimpleAbstractState<H,V,T>
bottom()
boolean
equals(java.lang.Object obj)
SimpleAbstractState<H,V,T>
forgetIdentifier(it.unive.lisa.symbolic.value.Identifier id)
SimpleAbstractState<H,V,T>
forgetIdentifiersIf(java.util.function.Predicate<it.unive.lisa.symbolic.value.Identifier> test)
<D extends it.unive.lisa.analysis.SemanticDomain<?,?,?>>
java.util.Collection<D>getAllDomainInstances(java.lang.Class<D> domain)
H
getHeapState()
T
getTypeState()
V
getValueState()
SimpleAbstractState<H,V,T>
glbAux(SimpleAbstractState<H,V,T> other)
int
hashCode()
boolean
isBottom()
boolean
isTop()
boolean
lessOrEqualAux(SimpleAbstractState<H,V,T> other)
SimpleAbstractState<H,V,T>
lubAux(SimpleAbstractState<H,V,T> other)
SimpleAbstractState<H,V,T>
narrowingAux(SimpleAbstractState<H,V,T> other)
SimpleAbstractState<H,V,T>
popScope(it.unive.lisa.analysis.ScopeToken scope)
SimpleAbstractState<H,V,T>
pushScope(it.unive.lisa.analysis.ScopeToken scope)
it.unive.lisa.analysis.representation.DomainRepresentation
representation()
it.unive.lisa.analysis.SemanticDomain.Satisfiability
satisfies(it.unive.lisa.symbolic.SymbolicExpression expression, it.unive.lisa.program.cfg.ProgramPoint pp)
SimpleAbstractState<H,V,T>
smallStepSemantics(it.unive.lisa.symbolic.SymbolicExpression expression, it.unive.lisa.program.cfg.ProgramPoint pp)
SimpleAbstractState<H,V,T>
top()
java.lang.String
toString()
SimpleAbstractState<H,V,T>
wideningAux(SimpleAbstractState<H,V,T> other)
SimpleAbstractState<H,V,T>
withTopHeap()
SimpleAbstractState<H,V,T>
withTopType()
SimpleAbstractState<H,V,T>
withTopValue()
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
-
-
-
Constructor Detail
-
SimpleAbstractState
public SimpleAbstractState(H heapState, V valueState, T typeState)
Builds a new abstract state.- Parameters:
heapState
- the domain containing information regarding heap structuresvalueState
- the domain containing information regarding values of program variables and concretized memory locationstypeState
- the domain containing information regarding runtime types of program variables and concretized memory locations
-
-
Method Detail
-
getHeapState
public H getHeapState()
- Specified by:
getHeapState
in interfaceit.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 interfaceit.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 interfaceit.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
-
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
-
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
-
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
-
pushScope
public SimpleAbstractState<H,V,T> pushScope(it.unive.lisa.analysis.ScopeToken scope) 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
-
lubAux
public SimpleAbstractState<H,V,T> lubAux(SimpleAbstractState<H,V,T> other) throws it.unive.lisa.analysis.SemanticException
-
glbAux
public SimpleAbstractState<H,V,T> glbAux(SimpleAbstractState<H,V,T> other) throws it.unive.lisa.analysis.SemanticException
-
wideningAux
public SimpleAbstractState<H,V,T> wideningAux(SimpleAbstractState<H,V,T> other) throws it.unive.lisa.analysis.SemanticException
-
narrowingAux
public SimpleAbstractState<H,V,T> narrowingAux(SimpleAbstractState<H,V,T> other) throws it.unive.lisa.analysis.SemanticException
-
lessOrEqualAux
public boolean lessOrEqualAux(SimpleAbstractState<H,V,T> other) throws it.unive.lisa.analysis.SemanticException
-
top
public SimpleAbstractState<H,V,T> top()
-
bottom
public SimpleAbstractState<H,V,T> bottom()
-
isTop
public boolean isTop()
-
isBottom
public boolean isBottom()
-
forgetIdentifier
public SimpleAbstractState<H,V,T> forgetIdentifier(it.unive.lisa.symbolic.value.Identifier id) 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
-
hashCode
public int hashCode()
-
equals
public boolean equals(java.lang.Object obj)
-
representation
public it.unive.lisa.analysis.representation.DomainRepresentation representation()
-
toString
public java.lang.String toString()
-
getAllDomainInstances
public <D extends it.unive.lisa.analysis.SemanticDomain<?,?,?>> java.util.Collection<D> getAllDomainInstances(java.lang.Class<D> domain)
-
withTopHeap
public SimpleAbstractState<H,V,T> withTopHeap()
- Specified by:
withTopHeap
in interfaceit.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 interfaceit.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 interfaceit.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>>
-
-