Example #1
0
    /// <summary>
    /// Compute the interProc mapping between callee and caller.
    /// This is a fixpoint of steps 1,2 and 3
    /// </summary>
    /// <param name="caller"></param>
    /// <param name="callee"></param>
    /// <param name="thisRef"></param>
    /// <param name="arguments"></param>
    /// <returns></returns>
    private static InterProcMapping ComputeInterMapping(PTGraph callerPTG, PTGraph calleePTG,
        Variable thisRef, ExpressionList arguments, Variable vr)
    {
      /*
      // Be sure that every parameter has its value or load node
      foreach (Parameter p in callerPTG.ParameterMap.Keys)
      {
          callerPTG.GetValuesIfEmptyLoadNode(p, callerPTG.MethodLabel);
      }
      */
      InterProcMapping ipm = new InterProcMapping(callerPTG, calleePTG, thisRef, arguments);
      ipm.RelateParams();

      InterProcMapping oldImp = new InterProcMapping(ipm);


      do
      {
        oldImp = new InterProcMapping(ipm);
        ipm.MatchOutsideEdges();
        ipm.MatchOutsideWithInsideInCallee();

      } while (change(oldImp, ipm));

      return ipm;
    }