/// <summary>
 /// Computes whether this APPLY statement has side effects
 /// </summary>
 /// <returns></returns>
 private void ComputeSideEffects()
 {
     SideEffectOnVariable = false;
     ReferenceVisitor visitor = new ReferenceVisitor(IteratorVariable);
     visitor.ConsiderInterpreterTreeNode(AppliedStatement);
     foreach (Usage usage in visitor.Usages)
     {
         // Simplification : we don't know if the procedure changes the value of the variable
         if (usage.Mode == Usage.ModeEnum.Parameter ||
             usage.Mode == Usage.ModeEnum.ReadAndWrite ||
             usage.Mode == Usage.ModeEnum.Write)
         {
             SideEffectOnVariable = true;
         }
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Provides the mode for the typed element provided
        /// </summary>
        /// <param name="element"></param>
        /// <returns></returns>
        public Usage.ModeEnum GetModeForTypedElement(ITypedElement element)
        {
            Usage.ModeEnum retVal = Usage.ModeEnum.Read;

            ReferenceVisitor visitor = new ReferenceVisitor(element);
            visitor.ConsiderInterpreterTreeNode(Statement);
            foreach (Usage usage in visitor.Usages)
            {
                if (usage.Mode != null && usage.Mode != Usage.ModeEnum.Read)
                {
                    retVal = (Usage.ModeEnum) usage.Mode;
                    break;
                }
            }

            return retVal;
        }