Class Call
- java.lang.Object
-
- it.unive.lisa.program.cfg.statement.Statement
-
- it.unive.lisa.program.cfg.statement.Expression
-
- it.unive.lisa.program.cfg.statement.Call
-
- All Implemented Interfaces:
ProgramPoint,CodeElement,Node<Statement,Edge,CFG>,java.lang.Comparable<Statement>
- Direct Known Subclasses:
CFGCall,HybridCall,NativeCall,OpenCall,UnresolvedCall
public abstract class Call extends Expression
A call to another procedure. This concrete instance of this class determines whether this class represent a true call to another CFG (either in or out of the analysis), or if it represents the invocation of one of the native constructs of the language.
-
-
Constructor Summary
Constructors Modifier Constructor Description protectedCall(CFG cfg, CodeLocation location, Type staticType, Expression... parameters)Builds a call happening at the given source location.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description <V> booleanaccept(GraphVisitor<CFG,Statement,Edge,V> visitor, V tool)Accepts the givenGraphVisitor.abstract <A extends AbstractState<A,H,V>,H extends HeapDomain<H>,V extends ValueDomain<V>>
AnalysisState<A,H,V>callSemantics(AnalysisState<A,H,V> entryState, InterproceduralAnalysis<A,H,V> interprocedural, AnalysisState<A,H,V>[] computedStates, ExpressionSet<SymbolicExpression>[] params)Computes the semantics of the call, after the semantics of all parameters have been computed.booleanequals(java.lang.Object obj)Expression[]getParameters()Yields the parameters of this call.inthashCode()<A extends AbstractState<A,H,V>,H extends HeapDomain<H>,V extends ValueDomain<V>>
AnalysisState<A,H,V>semantics(AnalysisState<A,H,V> entryState, InterproceduralAnalysis<A,H,V> interprocedural, StatementStore<A,H,V> expressions)Semantics of a call statement is evaluated by computing the semantics of its parameters, from left to right, using the analysis state from each parameter's computation as entry state for the next one.intsetOffset(int offset)Sets the offset of this node to the given value, and then proceeds by setting the one of its nested nodes (if any) to subsequent values.-
Methods inherited from class it.unive.lisa.program.cfg.statement.Expression
getDynamicType, getMetaVariables, getParentStatement, getRootStatement, getRuntimeTypes, getStaticType, setParentStatement, setRuntimeTypes
-
Methods inherited from class it.unive.lisa.program.cfg.statement.Statement
compareTo, getCFG, getLocation, getOffset, stopsExecution, throwsError, toString
-
-
-
-
Constructor Detail
-
Call
protected Call(CFG cfg, CodeLocation location, Type staticType, Expression... parameters)
Builds a call happening at the given source location.- Parameters:
cfg- the cfg that this expression belongs tolocation- the location where the expression is defined within the source file. If unknown, usenullparameters- the parameters of this callstaticType- the static type of this call
-
-
Method Detail
-
getParameters
public final Expression[] getParameters()
Yields the parameters of this call.- Returns:
- the parameters of this call
-
setOffset
public final int setOffset(int offset)
Description copied from interface:NodeSets the offset of this node to the given value, and then proceeds by setting the one of its nested nodes (if any) to subsequent values. The last offset used is returned.- Parameters:
offset- the offset to set- Returns:
- the last offset used while setting the offsets of nested nodes
-
hashCode
public int hashCode()
- Overrides:
hashCodein classExpression
-
equals
public boolean equals(java.lang.Object obj)
- Overrides:
equalsin classExpression
-
semantics
public final <A extends AbstractState<A,H,V>,H extends HeapDomain<H>,V extends ValueDomain<V>> AnalysisState<A,H,V> semantics(AnalysisState<A,H,V> entryState, InterproceduralAnalysis<A,H,V> interprocedural, StatementStore<A,H,V> expressions) throws SemanticException
Semantics of a call statement is evaluated by computing the semantics of its parameters, from left to right, using the analysis state from each parameter's computation as entry state for the next one. Then, the semantics of the call itself is evaluated.
Computes the semantics of the statement, expressing how semantic information is transformed by the execution of this statement. This method is also responsible for recursively invoking theStatement.semantics(AnalysisState, InterproceduralAnalysis, StatementStore)of each nestedExpression, saving the result of each call inexpressions.- Specified by:
semanticsin classStatement- Type Parameters:
A- the type ofAbstractStateH- the type of theHeapDomainV- the type of theValueDomain- Parameters:
entryState- the entry state that represents the abstract values of each program variable and memory location when the execution reaches this statementinterprocedural- the interprocedural analysis of the program to analyzeexpressions- the cache where analysis states of intermediate expressions must be stored- Returns:
- the
AnalysisStaterepresenting the abstract result of the execution of this statement - Throws:
SemanticException- if something goes wrong during the computation
-
callSemantics
public abstract <A extends AbstractState<A,H,V>,H extends HeapDomain<H>,V extends ValueDomain<V>> AnalysisState<A,H,V> callSemantics(AnalysisState<A,H,V> entryState, InterproceduralAnalysis<A,H,V> interprocedural, AnalysisState<A,H,V>[] computedStates, ExpressionSet<SymbolicExpression>[] params) throws SemanticException
Computes the semantics of the call, after the semantics of all parameters have been computed. Meta variables from the parameters will be forgotten after this call returns.- Type Parameters:
A- the type ofAbstractStateH- the type of theHeapDomainV- the type of theValueDomain- Parameters:
entryState- the entry state of this callinterprocedural- the interprocedural analysis of the program to analyzecomputedStates- the array of states chaining the parameters' semantics evaluation starting fromentryState, namelycomputedState[i]corresponds to the state obtained by the evaluation ofparams[i]in the statecomputedState[i-1](params[0]is evaluated inentryState)params- the symbolic expressions representing the computed values of the parameters of this call- Returns:
- the
AnalysisStaterepresenting the abstract result of the execution of this call - Throws:
SemanticException- if something goes wrong during the computation
-
accept
public <V> boolean accept(GraphVisitor<CFG,Statement,Edge,V> visitor, V tool)
Description copied from interface:NodeAccepts the givenGraphVisitor. Implementors of this method are responsible for invokingGraphVisitor.visit(Object, Graph, Node)on this node afterNode.accept(GraphVisitor, Object)has been invoked on all nested nodes, if any. The visiting should stop at the first of such calls that returnfalse.- Type Parameters:
V- the type of auxiliary tool thatvisitorcan use- Parameters:
visitor- the visitor that is visiting theGraphcontaining this nodetool- the auxiliary tool thatvisitorcan use- Returns:
- whether or not the visiting should stop when this call returns, as decided by the visitor itself
-
-