Class Concat

  • All Implemented Interfaces:
    ProgramPoint, CodeElement, Node<Statement,​Edge,​CFG>, java.lang.Comparable<Statement>

    public class Concat
    extends BinaryExpression
    An expression modeling the string contains operation. The type of both operands must be StringType. The type of this expression is the StringType.

    Since in most languages string operations are provided through calls to library functions, this class contains a field originating whose purpose is to optionally store a Statement that is rewritten to an instance of this class (i.e., a call to a NativeCFG modeling the library function). If present, such statement will be used as ProgramPoint for semantics computations. This allows subclasses to implement PluggableStatement easily without redefining the semantics provided by this class.
    • Field Detail

      • originating

        protected 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 through NativeCFG that rewrites to instances of this class.
    • Constructor Detail

      • Concat

        public Concat​(CFG cfg,
                      CodeLocation location,
                      Expression left,
                      Expression right)
        Builds the concat.
        Parameters:
        cfg - the CFG where this operation lies
        location - the code location where this operation is defined
        left - the left-hand side of this operation
        right - the right-hand side of this operation
    • Method Detail

      • binarySemantics

        protected <A extends AbstractState<A,​H,​V>,​H extends HeapDomain<H>,​V extends ValueDomain<V>> AnalysisState<A,​H,​V> binarySemantics​(InterproceduralAnalysis<A,​H,​V> interprocedural,
                                                                                                                                                                             AnalysisState<A,​H,​V> state,
                                                                                                                                                                             SymbolicExpression left,
                                                                                                                                                                             SymbolicExpression right)
                                                                                                                                                                      throws SemanticException
        Description copied from class: BinaryExpression
        Computes the semantics of the expression, after the semantics of the sub-expressions have been computed. Meta variables from the sub-expressions will be forgotten after this expression returns.
        Specified by:
        binarySemantics in class BinaryExpression
        Type Parameters:
        A - the type of AbstractState
        H - the type of the HeapDomain
        V - the type of the ValueDomain
        Parameters:
        interprocedural - the interprocedural analysis of the program to analyze
        state - the state where the expression is to be evaluated
        left - the symbolic expression representing the computed value of the first sub-expression of this expression
        right - the symbolic expression representing the computed value of the second sub-expression of this expression
        Returns:
        the AnalysisState representing the abstract result of the execution of this expression
        Throws:
        SemanticException - if something goes wrong during the computation