Example #1
0
 /// <summary>
 /// Instancia um objecto do tipo <see cref="SquareRoot{ObjectType}"/>.
 /// </summary>
 /// <param name="integerPart">A parte inteira da raiz qaudrada.</param>
 /// <param name="rootNumberFactorization">A facotorização do número inteiro.</param>
 /// <param name="multipliable">O objecto responsável pela multiplicação dos números.</param>
 public SquareRoot(
     ObjectType integerPart,
     Dictionary <ObjectType, int> rootNumberFactorization,
     IMultiplication <ObjectType> multipliable)
 {
     this.SetupParameters(integerPart, rootNumberFactorization, multipliable);
     this.ComputeRootNumber(multipliable);
 }
 public override void Visit(IMultiplication multiplication)
 {
     if (Process(multiplication))
     {
         visitor.Visit(multiplication);
     }
     base.Visit(multiplication);
 }
Example #3
0
        private HLLocation ProcessMultiplicationExpression(IMultiplication pExpression)
        {
            HLLocation locationLeftOperand  = ProcessExpression(pExpression.LeftOperand);
            HLLocation locationRightOperand = ProcessExpression(pExpression.RightOperand);
            HLLocation locationTemporary    = HLTemporaryLocation.Create(CreateTemporary(HLDomain.GetOrCreateType(pExpression.Type)));

            mCurrentBlock.EmitMultiply(locationTemporary, locationLeftOperand, locationRightOperand);
            return(pExpression.ResultIsUnmodifiedLeftOperand ? locationLeftOperand : locationTemporary);
        }
Example #4
0
 /// <summary>
 /// Determina o valor do radicando após o processamento.
 /// </summary>
 /// <param name="multipliable">O objecto responsável pelas multiplicações.</param>
 private void ComputeRootNumber(IMultiplication <ObjectType> multipliable)
 {
     this.rootNumber = multipliable.MultiplicativeUnity;
     foreach (var factKvp in rootNumberFactorization)
     {
         this.rootNumber = multipliable.Multiply(
             this.rootNumber,
             factKvp.Key);
     }
 }
Example #5
0
 /// <summary>
 /// Instancia um objecto do tipo <see cref="SquareRoot{ObjectType}"/>.
 /// </summary>
 /// <param name="integerPart">A parte inteira da raiz qaudrada.</param>
 /// <param name="rootNumber">The root number.</param>
 /// <param name="factorizationAlg">O algoritmo responsável pela factorização.</param>
 /// <param name="multipliable">O objecto responsável pela multiplicação dos números.</param>
 /// <param name="comparer">O comparador de números.</param>
 public SquareRoot(
     ObjectType integerPart,
     ObjectType rootNumber,
     IAlgorithm <ObjectType, Tuple <ObjectType, ObjectType> > factorizationAlg,
     IMultiplication <ObjectType> multipliable,
     IEqualityComparer <ObjectType> comparer)
 {
     this.SetupParameters(
         integerPart,
         rootNumber,
         factorizationAlg,
         multipliable,
         comparer);
     this.ComputeRootNumber(multipliable);
 }
Example #6
0
        /// <summary>
        /// Obtém o produto da raiz actual com outra raiz.
        /// </summary>
        /// <param name="right">A outra raiz.</param>
        /// <param name="multipliable">O objecto responsável pelas multiplicações.</param>
        /// <returns>O resultado do produto.</returns>
        /// <exception cref="ArgumentNullException">Se algum dos argumentos for nulo.</exception>
        public SquareRoot <ObjectType> Multiply(
            SquareRoot <ObjectType> right,
            IMultiplication <ObjectType> multipliable)
        {
            if (right == null)
            {
                throw new ArgumentNullException("right");
            }
            else if (multipliable == null)
            {
                throw new ArgumentNullException("multipliable");
            }
            else
            {
                var result = new SquareRoot <ObjectType>();
                result.integerPart             = multipliable.Multiply(this.integerPart, right.integerPart);
                result.rootNumberFactorization = new Dictionary <ObjectType, int>(
                    this.rootNumberFactorization.Comparer);
                var temporaryFactorization = new Dictionary <ObjectType, int>(this.rootNumberFactorization.Comparer);
                foreach (var kvp in right.rootNumberFactorization)
                {
                    temporaryFactorization.Add(kvp.Key, kvp.Value);
                }

                foreach (var kvp in this.rootNumberFactorization)
                {
                    if (temporaryFactorization.ContainsKey(kvp.Key))
                    {
                        result.integerPart = multipliable.Multiply(result.integerPart, kvp.Key);
                        temporaryFactorization.Remove(kvp.Key);
                    }
                    else
                    {
                        result.rootNumberFactorization.Add(kvp.Key, 1);
                    }
                }

                foreach (var kvp in temporaryFactorization)
                {
                    result.rootNumberFactorization.Add(kvp.Key, kvp.Value);
                }

                this.ComputeRootNumber(multipliable);
                return(result);
            }
        }
Example #7
0
 /// <summary>
 /// Instancia um objecto do tipo <see cref="SquareRoot{ObjectType}"/>.
 /// </summary>
 /// <param name="integerPart">A parte inteira da raiz qaudrada.</param>
 /// <param name="rootNumber">O número na raiz.</param>
 /// <param name="factorizationAlg">O algoritmo responsável pela factorização.</param>
 /// <param name="multipliable">O objecto responsável pela multiplicação dos números.</param>
 /// <exception cref="ArgumentNullException">Se o algorimo da factorização for nulo.</exception>
 public SquareRoot(
     ObjectType integerPart,
     ObjectType rootNumber,
     IAlgorithm <ObjectType, Dictionary <ObjectType, int> > factorizationAlg,
     IMultiplication <ObjectType> multipliable)
 {
     if (factorizationAlg == null)
     {
         throw new ArgumentNullException("factorizationAlg");
     }
     else
     {
         var factorization = factorizationAlg.Run(rootNumber);
         this.SetupParameters(integerPart, factorization, multipliable);
         this.ComputeRootNumber(multipliable);
     }
 }
Example #8
0
        /// <summary>
        /// Cria um nova instância de um objecto do tipo <see cref="FractionComparer{CoeffType}"/>.
        /// </summary>
        /// <param name="comparer">O comparador de coeficientes das fracções.</param>
        /// <param name="multipliable">
        /// O objecto responsável pelas operações de multiplicação dos coeficientes
        /// da fracções.
        /// </param>
        /// <exception cref="ArgumentNullException">
        /// Caso o objecto responsável pelas multiplicações seja nulo.
        /// </exception>
        public FractionComparer(IComparer <CoeffType> comparer, IMultiplication <CoeffType> multipliable)
        {
            if (multipliable == null)
            {
                throw new ArgumentNullException("multipliable");
            }
            else
            {
                if (comparer == null)
                {
                    this.comparer = Comparer <CoeffType> .Default;
                }
                else
                {
                    this.comparer = comparer;
                }

                this.multipliable = multipliable;
            }
        }
Example #9
0
 /// <summary>
 /// Establece os parâmetros internos com base nos argumentos externos.
 /// </summary>
 /// <param name="integerPart">A parte inteira da raiz.</param>
 /// <param name="rootNumberFactorization">A factorização do radicando.</param>
 /// <param name="multipliable">O objecto responsável pela multiplicação de coeficientes.</param>
 /// <exception cref="ArgumentNullException">Se algum dos argumentos for nulo.</exception>
 private void SetupParameters(
     ObjectType integerPart,
     Dictionary <ObjectType, int> rootNumberFactorization,
     IMultiplication <ObjectType> multipliable)
 {
     if (integerPart == null)
     {
         throw new ArgumentNullException("integerPart");
     }
     else if (rootNumberFactorization == null)
     {
         throw new ArgumentNullException("rootNumberFactorization");
     }
     else if (multipliable == null)
     {
         throw new ArgumentNullException("multipliable");
     }
     else
     {
         this.integerPart             = integerPart;
         this.rootNumberFactorization = new Dictionary <ObjectType, int>(rootNumberFactorization.Comparer);
         foreach (var fact in rootNumberFactorization)
         {
             var factDegree       = fact.Value;
             var factSquaredValue = factDegree / 2;
             var factRem          = factDegree % 2;
             this.integerPart = multipliable.Multiply(
                 this.integerPart,
                 MathFunctions.Power(fact.Key, factSquaredValue, multipliable));
             if (factRem == 1)
             {
                 rootNumberFactorization.Add(fact.Key, 1);
             }
         }
     }
 }
        /// <summary>
        /// Determina o produto de duas matrizes multidimensionais.
        /// </summary>
        /// <param name="right">A matriz multidimensional a ser somada.</param>
        /// <param name="multiplyable">O objeto responsável pelas operações sobre os coeficientes.</param>
        /// <returns>O resultado do produto.</returns>
        /// <exception cref="ArgumentNullException">Se um dos argumentos for nulo.</exception>
        public MultiDimensionalMathRange <T> Multiply(MultiDimensionalMathRange <T> right, IMultiplication <T> multiplyable)
        {
            if (right == null)
            {
                throw new ArgumentNullException("right");
            }

            if (multiplyable == null)
            {
                throw new ArgumentNullException("A multiplyable structure is needed.");
            }

            var result = new MultiDimensionalMathRange <T>();

            if (this.configuration.Length == 0 || right.configuration.Length == 0)
            {
                result.configuration = new int[0];
                result.elements      = new T[0];
            }
            else
            {
                var p = 1;
                var q = 1;
                for (int i = 0; i < this.configuration.Length; ++i)
                {
                    p *= this.configuration[i];
                }

                for (int i = 0; i < right.configuration[i]; ++i)
                {
                    q *= right.configuration[i];
                }

                result.elements      = new T[p * q];
                result.configuration = new int[this.configuration.Length + right.configuration.Length];
                for (int i = 0; i < this.configuration.Length; ++i)
                {
                    result.configuration[i] = this.configuration[i];
                }

                for (int i = 0; i < right.configuration.Length; ++i)
                {
                    result.configuration[this.configuration.Length + i] = right.configuration[i];
                }

                for (int i = 0; i < p; ++i)
                {
                    for (int j = 0; j < q; ++j)
                    {
                        result.elements[j * p + i] = multiplyable.Multiply(this.elements[i], right.elements[j]);
                    }
                }
            }

            return(result);
        }
Example #11
0
 /// <summary>
 /// Performs some computation with the given multiplication expression.
 /// </summary>
 /// <param name="multiplication"></param>
 public virtual void Visit(IMultiplication multiplication)
 {
     this.Visit((IBinaryOperation)multiplication);
 }
Example #12
0
 public void Visit(IMultiplication multiplication)
 {
     throw new NotImplementedException();
 }
Example #13
0
 /// <summary>
 /// Performs some computation with the given multiplication expression.
 /// </summary>
 /// <param name="multiplication"></param>
 public virtual void Visit(IMultiplication multiplication)
 {
 }
Example #14
0
 /// <summary>
 /// Traverses the children of the multiplication expression.
 /// </summary>
 public virtual void TraverseChildren(IMultiplication multiplication)
 {
     Contract.Requires(multiplication != null);
       this.TraverseChildren((IBinaryOperation)multiplication);
 }
Example #15
0
 /// <summary>
 /// Returns a shallow copy of the given multiplication expression.
 /// </summary>
 /// <param name="multiplication"></param>
 public Multiplication Copy(IMultiplication multiplication)
 {
     return new Multiplication(multiplication);
 }
Example #16
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="multiplication"></param>
 public Multiplication(IMultiplication multiplication)
   : base(multiplication) {
   this.CheckOverflow = multiplication.CheckOverflow;
   this.TreatOperandsAsUnsignedIntegers = multiplication.TreatOperandsAsUnsignedIntegers;
 }
Example #17
0
 /// <summary>
 /// Generates IL for the specified multiplication.
 /// </summary>
 /// <param name="multiplication">The multiplication.</param>
 public override void TraverseChildren(IMultiplication multiplication)
 {
     this.Traverse(multiplication.LeftOperand);
       this.Traverse(multiplication.RightOperand);
       OperationCode operationCode = OperationCode.Mul;
       if (multiplication.CheckOverflow) {
     if (multiplication.TreatOperandsAsUnsignedIntegers)
       operationCode = OperationCode.Mul_Ovf_Un;
     else
       operationCode = OperationCode.Mul_Ovf;
       }
       this.generator.Emit(operationCode);
       this.StackSize--;
 }
 public override void TraverseChildren(IMultiplication multiplication)
 {
   var targetExpression = multiplication.LeftOperand as ITargetExpression;
   if (targetExpression != null) { // x *= e
     bool statement = this.currentExpressionIsOpAssignStatement;
     this.currentExpressionIsOpAssignStatement = false;
     this.VisitAssignment(targetExpression, multiplication, (IExpression e) => this.TraverseMultiplicationRightOperandAndDoOperation(e),
       treatAsStatement: statement, pushTargetRValue: true, resultIsInitialTargetRValue: multiplication.ResultIsUnmodifiedLeftOperand);
   } else { // x * e
     this.Traverse(multiplication.LeftOperand);
     this.TraverseMultiplicationRightOperandAndDoOperation(multiplication);
   }
 }
Example #19
0
    /// <summary>
    /// Returns a shallow copy of the given multiplication expression.
    /// </summary>
    /// <param name="multiplication"></param>
    public Multiplication Copy(IMultiplication multiplication) {
      Contract.Requires(multiplication != null);
      Contract.Ensures(Contract.Result<Multiplication>() != null);

      return new Multiplication(multiplication);
    }
Example #20
0
    /// <summary>
    /// Returns a deep copy of the given multiplication expression.
    /// </summary>
    /// <param name="multiplication"></param>
    public Multiplication Copy(IMultiplication multiplication) {
      Contract.Requires(multiplication != null);
      Contract.Ensures(Contract.Result<Multiplication>() != null);

      var mutableCopy = this.shallowCopier.Copy(multiplication);
      this.CopyChildren((BinaryOperation)mutableCopy);
      return mutableCopy;
    }
Example #21
0
 public override void TraverseChildren(IMultiplication multiplication) {
   base.TraverseChildren(multiplication);
   ((Multiplication)multiplication).Type = this.GetBinaryNumericOperationType(multiplication, multiplication.TreatOperandsAsUnsignedIntegers);
 }
 /// <summary>
 /// Rewrites the given multiplication expression.
 /// </summary>
 /// <param name="multiplication"></param>
 public virtual IExpression Rewrite(IMultiplication multiplication)
 {
     return multiplication;
 }
Example #23
0
 public override void Visit(IMultiplication multiplication)
 {
     allElements.Add(new InvokInfo(Traverser, "IMultiplication", multiplication));
 }
 public override void Visit(IMultiplication multiplication)
 {
     if(Process(multiplication)){visitor.Visit(multiplication);}
     base.Visit(multiplication);
 }
Example #25
0
 public override IExpression Rewrite(IMultiplication operation)
 {
     return(ReplaceOperation(operation));
 }
Example #26
0
 /// <summary>
 /// Returns a deep copy of the given multiplication expression.
 /// </summary>
 /// <param name="multiplication"></param>
 public Multiplication Copy(IMultiplication multiplication)
 {
     var mutableCopy = this.shallowCopier.Copy(multiplication);
       this.CopyChildren((BinaryOperation)mutableCopy);
       return mutableCopy;
 }
        public override void TraverseChildren(IMultiplication multiplication)
{ MethodEnter(multiplication);
            base.TraverseChildren(multiplication);
     MethodExit();   }
Example #28
0
 public void Visit(IMultiplication multiplication)
 {
     this.result = this.copier.Copy(multiplication);
 }
Example #29
0
 public override void TraverseChildren(IMultiplication multiplication)
 {
     base.TraverseChildren(multiplication);
     ((Multiplication)multiplication).Type = this.GetBinaryNumericOperationType(multiplication, multiplication.TreatOperandsAsUnsignedIntegers);
 }
Example #30
0
 public virtual void onASTElement(IMultiplication multiplication)
 {
 }
Example #31
0
        /// <summary>
        /// Establece os parâmetros internos com base nos argumentos externos.
        /// </summary>
        /// <param name="integerPart">A parte inteira da raiz qaudrada.</param>
        /// <param name="rootNumber">The root number.</param>
        /// <param name="factorizationAlg">O algoritmo responsável pela factorização.</param>
        /// <param name="multipliable">O objecto responsável pela multiplicação dos números.</param>
        /// <param name="comparer">O comparador de números.</param>
        /// <exception cref="ArgumentNullException">Se algum dos argumentos for nulo.</exception>
        private void SetupParameters(
            ObjectType integerPart,
            ObjectType rootNumber,
            IAlgorithm <ObjectType, Tuple <ObjectType, ObjectType> > factorizationAlg,
            IMultiplication <ObjectType> multipliable,
            IEqualityComparer <ObjectType> comparer)
        {
            if (integerPart == null)
            {
                throw new ArgumentNullException("integerPart");
            }
            else if (rootNumber == null)
            {
                throw new ArgumentNullException("rootNumber");
            }
            else if (factorizationAlg == null)
            {
                throw new ArgumentNullException("factorizationAlg");
            }
            else if (multipliable == null)
            {
                throw new ArgumentNullException("multipliable");
            }
            else if (comparer == null)
            {
                throw new ArgumentNullException("comparer");
            }
            else
            {
                this.integerPart             = integerPart;
                this.rootNumber              = rootNumber;
                this.rootNumberFactorization = new Dictionary <ObjectType, int>(
                    comparer);

                var alreadyComputed = new Dictionary <ObjectType, Tuple <ObjectType, ObjectType> >(
                    comparer
                    );
                var factorsStack = new Stack <ObjectType>();
                factorsStack.Push(rootNumber);
                while (factorsStack.Count > 0)
                {
                    var top       = factorsStack.Pop();
                    var topFactor = default(Tuple <ObjectType, ObjectType>);
                    if (!alreadyComputed.TryGetValue(top, out topFactor))
                    {
                        topFactor = factorizationAlg.Run(top);
                        alreadyComputed.Add(top, topFactor);
                    }

                    if (multipliable.IsMultiplicativeUnity(topFactor.Item1))
                    {
                        var deg = 0;
                        if (this.rootNumberFactorization.TryGetValue(topFactor.Item2, out deg))
                        {
                            this.rootNumberFactorization.Remove(topFactor.Item2);
                            this.integerPart = multipliable.Multiply(
                                this.integerPart,
                                topFactor.Item2);
                        }
                        else
                        {
                            this.rootNumberFactorization.Add(topFactor.Item2, 1);
                        }
                    }
                    else if (multipliable.IsMultiplicativeUnity(topFactor.Item2))
                    {
                        var deg = 0;
                        if (this.rootNumberFactorization.TryGetValue(topFactor.Item1, out deg))
                        {
                            this.rootNumberFactorization.Remove(topFactor.Item1);
                            this.integerPart = multipliable.Multiply(
                                this.integerPart,
                                topFactor.Item1);
                        }
                        else
                        {
                            this.rootNumberFactorization.Add(topFactor.Item1, 1);
                        }
                    }
                    else
                    {
                        factorsStack.Push(topFactor.Item1);
                        factorsStack.Push(topFactor.Item2);
                    }
                }
            }
        }
Example #32
0
 public override void Visit(IMultiplication operation)
 {
     ProcessOperation(operation);
 }
Example #33
0
 public void Visit(IMultiplication multiplication)
 {
     this.result = this.rewriter.Rewrite(multiplication);
 }
Example #34
0
 //^ ensures this.path.Count == old(this.path.Count);
 /// <summary>
 /// Traverses the given multiplication expression.
 /// </summary>
 /// <param name="multiplication"></param>
 public virtual void Visit(IMultiplication multiplication)
 {
     if (this.stopTraversal) return;
       //^ int oldCount = this.path.Count;
       this.path.Push(multiplication);
       this.Visit(multiplication.LeftOperand);
       this.Visit(multiplication.RightOperand);
       //^ assume this.path.Count == oldCount+1; //True because all of the virtual methods of this class promise not to decrease this.path.Count.or operation is not implemented.");
       this.path.Pop();
 }
Example #35
0
 /// <summary>
 /// Rewrites the given multiplication expression.
 /// </summary>
 /// <param name="multiplication"></param>
 public virtual IExpression Rewrite(IMultiplication multiplication)
 {
     var mutableMultiplication = multiplication as Multiplication;
       if (mutableMultiplication == null) return multiplication;
       this.RewriteChildren(mutableMultiplication);
       return mutableMultiplication;
 }
Example #36
0
 /// <summary>
 /// Traverses the multiplication expression.
 /// </summary>
 public void Traverse(IMultiplication multiplication)
 {
     Contract.Requires(multiplication != null);
       if (this.preorderVisitor != null) this.preorderVisitor.Visit(multiplication);
       if (this.StopTraversal) return;
       this.TraverseChildren(multiplication);
       if (this.StopTraversal) return;
       if (this.postorderVisitor != null) this.postorderVisitor.Visit(multiplication);
 }
Example #37
0
 public override void Visit(IMultiplication binary)
 {
     _formattedValue = Format(binary.LeftOperand) + " * " + Format(binary.RightOperand);
 }
Example #38
0
 public void Visit(IMultiplication multiplication)
 {
     this.traverser.Traverse(multiplication);
 }
 public virtual void onASTElement(IMultiplication multiplication) { }
Example #40
0
 public void Visit(IMultiplication multiplication)
 {
     Contract.Requires(multiplication != null);
       throw new NotImplementedException();
 }
Example #41
0
 /// <summary>
 /// Visits the specified multiplication.
 /// </summary>
 /// <param name="multiplication">The multiplication.</param>
 public override void Visit(IMultiplication multiplication)
 {
     Multiplication mutableMultiplication = multiplication as Multiplication;
     if (alwaysMakeACopy || mutableMultiplication == null) mutableMultiplication = new Multiplication(multiplication);
     this.resultExpression = this.myCodeMutator.Visit(mutableMultiplication);
 }
Example #42
0
 public override void Visit(IMultiplication multiplication) {
   base.Visit(multiplication);
   Bpl.Expr rexp = TranslatedExpressions.Pop();
   Bpl.Expr lexp = TranslatedExpressions.Pop();
   TranslatedExpressions.Push(Bpl.Expr.Binary(Bpl.BinaryOperator.Opcode.Mul, lexp, rexp));
 }
Example #43
0
 /// <summary>
 /// Visits the specified multiplication.
 /// </summary>
 /// <param name="multiplication">The multiplication.</param>
 public override void Visit(IMultiplication multiplication)
 {
     Multiplication mutableMultiplication = new Multiplication(multiplication);
     this.resultExpression = this.myCodeCopier.DeepCopy(mutableMultiplication);
 }
Example #44
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="multiplication"></param>
 public Multiplication(IMultiplication multiplication)
     : base(multiplication)
 {
     this.CheckOverflow = multiplication.CheckOverflow;
 }
Example #45
0
 private HLLocation ProcessMultiplicationExpression(IMultiplication pExpression)
 {
     HLLocation locationLeftOperand = ProcessExpression(pExpression.LeftOperand);
     HLLocation locationRightOperand = ProcessExpression(pExpression.RightOperand);
     HLLocation locationTemporary = HLTemporaryLocation.Create(CreateTemporary(HLDomain.GetOrCreateType(pExpression.Type)));
     mCurrentBlock.EmitMultiply(locationTemporary, locationLeftOperand, locationRightOperand);
     return pExpression.ResultIsUnmodifiedLeftOperand ? locationLeftOperand : locationTemporary;
 }
    public override void TraverseChildren(IMultiplication multiplication) {

      var needsParen = LowerPrecedenceThanParentExpression(multiplication);
      var savedCurrentPrecedence = this.currentPrecedence;
      this.currentPrecedence = this.Precedence(multiplication);

      if (needsParen) this.sourceEmitterOutput.Write("(");
      this.Traverse(multiplication.LeftOperand);
      if (multiplication.LeftOperand is ITargetExpression)
        this.sourceEmitterOutput.Write(" *= ");
      else
        this.sourceEmitterOutput.Write(" * ");
      this.Traverse(multiplication.RightOperand);
      if (needsParen) this.sourceEmitterOutput.Write(")");

      this.currentPrecedence = savedCurrentPrecedence;
    }
 /// <summary>
 /// Performs some computation with the given multiplication expression.
 /// </summary>
 /// <param name="multiplication"></param>
 public virtual void Visit(IMultiplication multiplication)
 {
 }
Example #48
0
 public override void TraverseChildren(IMultiplication multiplication)
 {
     MethodEnter(multiplication);
     base.TraverseChildren(multiplication);
     MethodExit();
 }
Example #49
0
 /// <summary>
 /// Visits the specified multiplication.
 /// </summary>
 /// <param name="multiplication">The multiplication.</param>
 public override void Visit(IMultiplication multiplication)
 {
     Multiplication mutableMultiplication = multiplication as Multiplication;
     if (mutableMultiplication == null) {
       this.resultExpression = multiplication;
       return;
     }
     this.resultExpression = this.myCodeMutator.Visit(mutableMultiplication);
 }