Class Replace
- java.lang.Object
-
- it.unive.lisa.program.cfg.statement.Statement
-
- it.unive.lisa.program.cfg.statement.Expression
-
- it.unive.lisa.program.cfg.statement.NaryExpression
-
- it.unive.lisa.program.cfg.statement.TernaryExpression
-
- it.unive.lisa.program.cfg.statement.string.Replace
-
- All Implemented Interfaces:
it.unive.lisa.program.cfg.ProgramPoint
,it.unive.lisa.program.CodeElement
,it.unive.lisa.util.datastructures.graph.code.CodeNode<it.unive.lisa.program.cfg.CFG,it.unive.lisa.program.cfg.statement.Statement,it.unive.lisa.program.cfg.edge.Edge>
,it.unive.lisa.util.datastructures.graph.Node<it.unive.lisa.program.cfg.CFG,it.unive.lisa.program.cfg.statement.Statement,it.unive.lisa.program.cfg.edge.Edge>
,java.lang.Comparable<it.unive.lisa.program.cfg.statement.Statement>
public class Replace extends it.unive.lisa.program.cfg.statement.TernaryExpression
An expression modeling the string replace operation. The type of all three operands must beStringType
. The type of this expression is theStringType
.
Since in most languages string operations are provided through calls to library functions, this class contains a field whose purpose is to optionally store aStatement
that is rewritten to an instance of this class (i.e., a call to aNativeCFG
modeling the library function). If present, such statement will be used asProgramPoint
for semantics computations. This allows subclasses to implementPluggableStatement
easily without redefining the semantics provided by this class.
-
-
Field Summary
Fields Modifier and Type Field Description protected it.unive.lisa.program.cfg.statement.Statement
originating
Statement that has been rewritten to this operation, if any.
-
Constructor Summary
Constructors Constructor Description Replace(it.unive.lisa.program.cfg.CFG cfg, it.unive.lisa.program.cfg.CodeLocation location, it.unive.lisa.program.cfg.statement.Expression left, it.unive.lisa.program.cfg.statement.Expression middle, it.unive.lisa.program.cfg.statement.Expression right)
Builds the replace.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected int
compareSameClassAndParams(it.unive.lisa.program.cfg.statement.Statement o)
<A extends it.unive.lisa.analysis.AbstractState<A>>
it.unive.lisa.analysis.AnalysisState<A>fwdTernarySemantics(it.unive.lisa.interprocedural.InterproceduralAnalysis<A> interprocedural, it.unive.lisa.analysis.AnalysisState<A> state, it.unive.lisa.symbolic.SymbolicExpression left, it.unive.lisa.symbolic.SymbolicExpression middle, it.unive.lisa.symbolic.SymbolicExpression right, it.unive.lisa.analysis.StatementStore<A> expressions)
-
Methods inherited from class it.unive.lisa.program.cfg.statement.TernaryExpression
backwardSemanticsAux, bwdTernarySemantics, forwardSemanticsAux, getLeft, getMiddle, getRight
-
Methods inherited from class it.unive.lisa.program.cfg.statement.NaryExpression
accept, backwardSemantics, compareSameClass, equals, forwardSemantics, getConstructName, getOrder, getStatementEvaluatedAfter, getStatementEvaluatedBefore, getSubExpressions, hashCode, toString
-
Methods inherited from class it.unive.lisa.program.cfg.statement.Expression
getMetaVariables, getParentStatement, getRootStatement, getStaticType, setParentStatement
-
Methods inherited from class it.unive.lisa.program.cfg.statement.Statement
compareTo, getCFG, getEvaluationPredecessor, getEvaluationSuccessor, getLocation, stopsExecution, throwsError
-
-
-
-
Field Detail
-
originating
protected it.unive.lisa.program.cfg.statement.Statement originating
Statement that has been rewritten to this operation, if any. This is to accomodate the fact that, in most languages, string operations are performed through calls, and one might want to provide the semantics of those calls throughNativeCFG
that rewrites to instances of this class.
-
-
Constructor Detail
-
Replace
public Replace(it.unive.lisa.program.cfg.CFG cfg, it.unive.lisa.program.cfg.CodeLocation location, it.unive.lisa.program.cfg.statement.Expression left, it.unive.lisa.program.cfg.statement.Expression middle, it.unive.lisa.program.cfg.statement.Expression right)
Builds the replace.- Parameters:
cfg
- theCFG
where this operation lieslocation
- the code location where this operation is definedleft
- the left-hand side of this operationmiddle
- the middle operand of this operationright
- the right-hand side of this operation
-
-
Method Detail
-
compareSameClassAndParams
protected int compareSameClassAndParams(it.unive.lisa.program.cfg.statement.Statement o)
- Specified by:
compareSameClassAndParams
in classit.unive.lisa.program.cfg.statement.NaryExpression
-
fwdTernarySemantics
public <A extends it.unive.lisa.analysis.AbstractState<A>> it.unive.lisa.analysis.AnalysisState<A> fwdTernarySemantics(it.unive.lisa.interprocedural.InterproceduralAnalysis<A> interprocedural, it.unive.lisa.analysis.AnalysisState<A> state, it.unive.lisa.symbolic.SymbolicExpression left, it.unive.lisa.symbolic.SymbolicExpression middle, it.unive.lisa.symbolic.SymbolicExpression right, it.unive.lisa.analysis.StatementStore<A> expressions) throws it.unive.lisa.analysis.SemanticException
- Specified by:
fwdTernarySemantics
in classit.unive.lisa.program.cfg.statement.TernaryExpression
- Throws:
it.unive.lisa.analysis.SemanticException
-
-