/// <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; } } }
/// <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; }