Class Concat

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

    public class Concat
    extends BinaryNativeCall
    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​(AnalysisState<A,​H,​V> entryState,
                                                                                                                                                                             InterproceduralAnalysis<A,​H,​V> interprocedural,
                                                                                                                                                                             AnalysisState<A,​H,​V> leftState,
                                                                                                                                                                             SymbolicExpression leftExp,
                                                                                                                                                                             AnalysisState<A,​H,​V> rightState,
                                                                                                                                                                             SymbolicExpression rightExp)
                                                                                                                                                                      throws SemanticException
        Description copied from class: BinaryNativeCall
        Computes the semantics of the call, after the semantics of the parameters have been computed. Meta variables from the parameters will be forgotten after this call returns.
        Specified by:
        binarySemantics in class BinaryNativeCall
        Type Parameters:
        A - the type of AbstractState
        H - the type of the HeapDomain
        V - the type of the ValueDomain
        Parameters:
        entryState - the entry state of this binary call
        interprocedural - the interprocedural analysis of the program to analyze
        leftState - the state obtained by evaluating left in entryState
        leftExp - the symbolic expression representing the computed value of the first parameter of this call
        rightState - the state obtained by evaluating right in leftState
        rightExp - the symbolic expression representing the computed value of the second parameter of this call
        Returns:
        the AnalysisState representing the abstract result of the execution of this call
        Throws:
        SemanticException - if something goes wrong during the computation