Package it.unive.lisa.analysis.dataflow
Class DefiniteForwardDataflowDomain<E extends DataflowElement<DefiniteForwardDataflowDomain<E>,E>>
- java.lang.Object
-
- it.unive.lisa.analysis.BaseLattice<D>
-
- it.unive.lisa.analysis.dataflow.DataflowDomain<DefiniteForwardDataflowDomain<E>,E>
-
- it.unive.lisa.analysis.dataflow.DefiniteForwardDataflowDomain<E>
-
- Type Parameters:
E- the type ofDataflowElementcontained in this domain
- All Implemented Interfaces:
Lattice<DefiniteForwardDataflowDomain<E>>,SemanticDomain<DefiniteForwardDataflowDomain<E>,ValueExpression,Identifier>,ValueDomain<DefiniteForwardDataflowDomain<E>>
public class DefiniteForwardDataflowDomain<E extends DataflowElement<DefiniteForwardDataflowDomain<E>,E>> extends DataflowDomain<DefiniteForwardDataflowDomain<E>,E>
ADataflowDomainfor forward and definite dataflow analysis. Being definite means that this domain is an instance ofInverseSetLattice, i.e., is a set whose join operation is the set intersection.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface it.unive.lisa.analysis.SemanticDomain
SemanticDomain.Satisfiability
-
-
Field Summary
-
Fields inherited from class it.unive.lisa.analysis.dataflow.DataflowDomain
domain
-
Fields inherited from interface it.unive.lisa.analysis.Lattice
BOTTOM_REPR, BOTTOM_STRING, TOP_REPR, TOP_STRING
-
-
Constructor Summary
Constructors Constructor Description DefiniteForwardDataflowDomain(E domain)Builds an empty domain.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected booleanlessOrEqualAux(DefiniteForwardDataflowDomain<E> other)Yieldstrueif and only if this lattice element is in relation with (usually represented through ≤) the given one, assuming that base cases have already been handled.protected DefiniteForwardDataflowDomain<E>lubAux(DefiniteForwardDataflowDomain<E> other)Performs the least upper bound operation between this lattice element and the given one, assuming that base cases have already been handled.protected DefiniteForwardDataflowDomain<E>mk(E domain, java.util.Set<E> elements, boolean isTop, boolean isBottom)Utility for creating a concrete instance ofDataflowDomaingiven its core fields.-
Methods inherited from class it.unive.lisa.analysis.dataflow.DataflowDomain
assign, assume, bottom, equals, forgetIdentifier, getDataflowElements, hashCode, isBottom, isTop, popScope, pushScope, representation, satisfies, smallStepSemantics, top, toString, wideningAux
-
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.SemanticDomain
forgetIdentifiers, getDomainInstance
-
Methods inherited from interface it.unive.lisa.analysis.value.ValueDomain
applySubstitution
-
-
-
-
Constructor Detail
-
DefiniteForwardDataflowDomain
public DefiniteForwardDataflowDomain(E domain)
Builds an empty domain.- Parameters:
domain- a singleton instance to be used during semantic operations to perform kill and gen operations
-
-
Method Detail
-
mk
protected DefiniteForwardDataflowDomain<E> mk(E domain, java.util.Set<E> elements, boolean isTop, boolean isBottom)
Description copied from class:DataflowDomainUtility for creating a concrete instance ofDataflowDomaingiven its core fields.- Specified by:
mkin classDataflowDomain<DefiniteForwardDataflowDomain<E extends DataflowElement<DefiniteForwardDataflowDomain<E>,E>>,E extends DataflowElement<DefiniteForwardDataflowDomain<E>,E>>- Parameters:
domain- the underlying domainelements- the elements contained in the instance to be createdisTop- whether the created domain is the top element of the latticeisBottom- whether the created domain is the bottom element of the lattice- Returns:
- the concrete instance of domain
-
lubAux
protected DefiniteForwardDataflowDomain<E> lubAux(DefiniteForwardDataflowDomain<E> other) throws SemanticException
Description copied from class:BaseLatticePerforms the least upper bound operation between this lattice element and the given one, assuming that base cases have already been handled. In particular, it is guaranteed that:otheris notnullotheris neither top nor bottomthisis neither top nor bottomthisandotherare not the same object (according both to==and toObject.equals(Object))
- Specified by:
lubAuxin classBaseLattice<DefiniteForwardDataflowDomain<E extends DataflowElement<DefiniteForwardDataflowDomain<E>,E>>>- Parameters:
other- the other lattice element- Returns:
- the least upper bound between this and other
- Throws:
SemanticException- if an error occurs during the computation
-
lessOrEqualAux
protected boolean lessOrEqualAux(DefiniteForwardDataflowDomain<E> other) throws SemanticException
Description copied from class:BaseLatticeYieldstrueif and only if this lattice element is in relation with (usually represented through ≤) the given one, assuming that base cases have already been handled. In particular, it is guaranteed that:otheris notnullotheris neither top nor bottomthisis neither top nor bottomthisandotherare not the same object (according both to==and toObject.equals(Object))
- Specified by:
lessOrEqualAuxin classBaseLattice<DefiniteForwardDataflowDomain<E extends DataflowElement<DefiniteForwardDataflowDomain<E>,E>>>- Parameters:
other- the other lattice element- Returns:
trueif and only if that condition holds- Throws:
SemanticException- if an error occurs during the computation
-
-