Class CartesianProduct<C extends CartesianProduct<C,T1,T2,E,I>,T1 extends it.unive.lisa.analysis.SemanticDomain<T1,E,I> & it.unive.lisa.analysis.Lattice<T1>,T2 extends it.unive.lisa.analysis.SemanticDomain<T2,E,I> & it.unive.lisa.analysis.Lattice<T2>,E extends it.unive.lisa.symbolic.SymbolicExpression,I extends it.unive.lisa.symbolic.value.Identifier>
- java.lang.Object
-
- it.unive.lisa.analysis.combination.CartesianProduct<C,T1,T2,E,I>
-
- Type Parameters:
C
- the concrete type of the Cartesian productT1
- the concrete instance of the left-hand side abstract domain of the Cartesian productT2
- the concrete instance of the right-hand side abstract domain of the Cartesian productE
- the type ofSymbolicExpression
that<T1>
and<T2>
, and in turn this domain, can processI
- the type ofIdentifier
that<T1>
and<T2>
, and in turn this domain, handle
- All Implemented Interfaces:
it.unive.lisa.analysis.Lattice<C>
,it.unive.lisa.analysis.ScopedObject<C>
,it.unive.lisa.analysis.SemanticDomain<C,E,I>
,it.unive.lisa.util.representation.StructuredObject
- Direct Known Subclasses:
ValueCartesianProduct
public abstract class CartesianProduct<C extends CartesianProduct<C,T1,T2,E,I>,T1 extends it.unive.lisa.analysis.SemanticDomain<T1,E,I> & it.unive.lisa.analysis.Lattice<T1>,T2 extends it.unive.lisa.analysis.SemanticDomain<T2,E,I> & it.unive.lisa.analysis.Lattice<T2>,E extends it.unive.lisa.symbolic.SymbolicExpression,I extends it.unive.lisa.symbolic.value.Identifier> extends java.lang.Object implements it.unive.lisa.analysis.SemanticDomain<C,E,I>, it.unive.lisa.analysis.Lattice<C>
A generic Cartesian product abstract domain between two non-communicatingSemanticDomain
s (i.e., no exchange of information between the abstract domains), assigning the sameIdentifier
s and handling instances of the sameSymbolicExpression
s.
-
-
Constructor Summary
Constructors Constructor Description CartesianProduct(T1 left, T2 right)
Builds the Cartesian product abstract domain.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description C
assign(I id, E expression, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
C
assume(E expression, it.unive.lisa.program.cfg.ProgramPoint src, it.unive.lisa.program.cfg.ProgramPoint dest, it.unive.lisa.analysis.SemanticOracle oracle)
C
bottom()
boolean
equals(java.lang.Object obj)
C
forgetIdentifier(it.unive.lisa.symbolic.value.Identifier id)
C
forgetIdentifiersIf(java.util.function.Predicate<it.unive.lisa.symbolic.value.Identifier> test)
<T extends it.unive.lisa.analysis.SemanticDomain<?,?,?>>
java.util.Collection<T>getAllDomainInstances(java.lang.Class<T> domain)
int
hashCode()
boolean
isBottom()
boolean
isTop()
boolean
lessOrEqual(C other)
C
lub(C other)
abstract C
mk(T1 left, T2 right)
Builds a new instance of Cartesian product.C
popScope(it.unive.lisa.analysis.ScopeToken scope)
C
pushScope(it.unive.lisa.analysis.ScopeToken scope)
it.unive.lisa.util.representation.StructuredRepresentation
representation()
it.unive.lisa.analysis.lattices.Satisfiability
satisfies(E expression, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
C
smallStepSemantics(E expression, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
C
top()
java.lang.String
toString()
C
widening(C other)
-
-
-
Method Detail
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classjava.lang.Object
-
equals
public boolean equals(java.lang.Object obj)
- Overrides:
equals
in classjava.lang.Object
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
mk
public abstract C mk(T1 left, T2 right)
Builds a new instance of Cartesian product.- Parameters:
left
- the first domainright
- the second domain- Returns:
- the new instance of product
-
representation
public it.unive.lisa.util.representation.StructuredRepresentation representation()
- Specified by:
representation
in interfaceit.unive.lisa.util.representation.StructuredObject
-
assign
public C assign(I id, E expression, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle) throws it.unive.lisa.analysis.SemanticException
- Specified by:
assign
in interfaceit.unive.lisa.analysis.SemanticDomain<C extends CartesianProduct<C,T1,T2,E,I>,T1 extends it.unive.lisa.analysis.SemanticDomain<T1,E,I> & it.unive.lisa.analysis.Lattice<T1>,T2 extends it.unive.lisa.analysis.SemanticDomain<T2,E,I> & it.unive.lisa.analysis.Lattice<T2>>
- Throws:
it.unive.lisa.analysis.SemanticException
-
smallStepSemantics
public C smallStepSemantics(E expression, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle) throws it.unive.lisa.analysis.SemanticException
- Specified by:
smallStepSemantics
in interfaceit.unive.lisa.analysis.SemanticDomain<C extends CartesianProduct<C,T1,T2,E,I>,T1 extends it.unive.lisa.analysis.SemanticDomain<T1,E,I> & it.unive.lisa.analysis.Lattice<T1>,T2 extends it.unive.lisa.analysis.SemanticDomain<T2,E,I> & it.unive.lisa.analysis.Lattice<T2>>
- Throws:
it.unive.lisa.analysis.SemanticException
-
assume
public C assume(E expression, it.unive.lisa.program.cfg.ProgramPoint src, it.unive.lisa.program.cfg.ProgramPoint dest, it.unive.lisa.analysis.SemanticOracle oracle) throws it.unive.lisa.analysis.SemanticException
- Specified by:
assume
in interfaceit.unive.lisa.analysis.SemanticDomain<C extends CartesianProduct<C,T1,T2,E,I>,T1 extends it.unive.lisa.analysis.SemanticDomain<T1,E,I> & it.unive.lisa.analysis.Lattice<T1>,T2 extends it.unive.lisa.analysis.SemanticDomain<T2,E,I> & it.unive.lisa.analysis.Lattice<T2>>
- Throws:
it.unive.lisa.analysis.SemanticException
-
forgetIdentifier
public C forgetIdentifier(it.unive.lisa.symbolic.value.Identifier id) throws it.unive.lisa.analysis.SemanticException
- Specified by:
forgetIdentifier
in interfaceit.unive.lisa.analysis.SemanticDomain<C extends CartesianProduct<C,T1,T2,E,I>,T1 extends it.unive.lisa.analysis.SemanticDomain<T1,E,I> & it.unive.lisa.analysis.Lattice<T1>,T2 extends it.unive.lisa.analysis.SemanticDomain<T2,E,I> & it.unive.lisa.analysis.Lattice<T2>>
- Throws:
it.unive.lisa.analysis.SemanticException
-
forgetIdentifiersIf
public C forgetIdentifiersIf(java.util.function.Predicate<it.unive.lisa.symbolic.value.Identifier> test) throws it.unive.lisa.analysis.SemanticException
- Specified by:
forgetIdentifiersIf
in interfaceit.unive.lisa.analysis.SemanticDomain<C extends CartesianProduct<C,T1,T2,E,I>,T1 extends it.unive.lisa.analysis.SemanticDomain<T1,E,I> & it.unive.lisa.analysis.Lattice<T1>,T2 extends it.unive.lisa.analysis.SemanticDomain<T2,E,I> & it.unive.lisa.analysis.Lattice<T2>>
- Throws:
it.unive.lisa.analysis.SemanticException
-
pushScope
public C pushScope(it.unive.lisa.analysis.ScopeToken scope) throws it.unive.lisa.analysis.SemanticException
-
popScope
public C popScope(it.unive.lisa.analysis.ScopeToken scope) throws it.unive.lisa.analysis.SemanticException
-
satisfies
public it.unive.lisa.analysis.lattices.Satisfiability satisfies(E expression, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle) throws it.unive.lisa.analysis.SemanticException
- Specified by:
satisfies
in interfaceit.unive.lisa.analysis.SemanticDomain<C extends CartesianProduct<C,T1,T2,E,I>,T1 extends it.unive.lisa.analysis.SemanticDomain<T1,E,I> & it.unive.lisa.analysis.Lattice<T1>,T2 extends it.unive.lisa.analysis.SemanticDomain<T2,E,I> & it.unive.lisa.analysis.Lattice<T2>>
- Throws:
it.unive.lisa.analysis.SemanticException
-
lessOrEqual
public boolean lessOrEqual(C other) throws it.unive.lisa.analysis.SemanticException
-
top
public C top()
-
isTop
public boolean isTop()
-
bottom
public C bottom()
-
isBottom
public boolean isBottom()
-
getAllDomainInstances
public <T extends it.unive.lisa.analysis.SemanticDomain<?,?,?>> java.util.Collection<T> getAllDomainInstances(java.lang.Class<T> domain)
- Specified by:
getAllDomainInstances
in interfaceit.unive.lisa.analysis.SemanticDomain<C extends CartesianProduct<C,T1,T2,E,I>,T1 extends it.unive.lisa.analysis.SemanticDomain<T1,E,I> & it.unive.lisa.analysis.Lattice<T1>,T2 extends it.unive.lisa.analysis.SemanticDomain<T2,E,I> & it.unive.lisa.analysis.Lattice<T2>>
-
-