protected override BaseExpression Visit(PreDecrement dec) { //Add(dec.Name); throw new NotImplementedException(); return(base.Visit(dec)); }
protected override IEnumerable <BaseStatement> Visit(PreDecrement dec) { return(new BaseStatement[] { // Increment in place new Assignment(dec.Name, new Decrement(dec.Name)), // Return modified value new Assignment(MkTmp(), new Variable(dec.Name)) }); }
/// <summary> /// Evaluates the operator. /// </summary> /// <param name="Operand">Operand.</param> /// <returns>Result</returns> public virtual IElement Evaluate(IElement Operand) { if (Operand is DoubleNumber DOp) { return(new DoubleNumber(DOp.Value - 1)); } else { return(PreDecrement.Decrement(Operand, this)); } }
protected override IEnumerable <BaseStatement> Visit(PreDecrement dec) { var tmp = MkTmp(); return(new BaseStatement[] { // Increment into a temp new Assignment(tmp, new Decrement(dec.Name)), // Copy in modified value back to original var new Assignment(dec.Name, new Variable(tmp)), // Return modified value new Assignment(MkTmp(), new Variable(dec.Name)) }); }
public virtual TResult Visit(BaseExpression expression) { return(expression switch { Phi a => Visit(a), Increment a => Visit(a), Decrement a => Visit(a), ErrorExpression a => Visit(a), Bracketed a => Visit(a), Abs a => Visit(a), Sqrt a => Visit(a), Sine a => Visit(a), Cosine a => Visit(a), Tangent a => Visit(a), ArcSine a => Visit(a), ArcCos a => Visit(a), ArcTan a => Visit(a), PostIncrement a => Visit(a), PreIncrement a => Visit(a), PostDecrement a => Visit(a), PreDecrement a => Visit(a), Add a => Visit(a), Subtract a => Visit(a), Multiply a => Visit(a), Divide a => Visit(a), Modulo a => Visit(a), Negate a => Visit(a), Exponent a => Visit(a), Or a => Visit(a), And a => Visit(a), Not a => Visit(a), Factorial a => Visit(a), Variable a => Visit(a), ConstantNumber a => Visit(a), ConstantString a => Visit(a), EqualTo a => Visit(a), NotEqualTo a => Visit(a), GreaterThan a => Visit(a), GreaterThanEqualTo a => Visit(a), LessThan a => Visit(a), LessThanEqualTo a => Visit(a), _ => VisitUnknown(expression) });
protected override bool Visit(PreDecrement dec) => throw new NotSupportedException();
protected override Type Visit(PreDecrement dec) => VariableRead(dec.Name);
[NotNull] protected abstract TResult Visit([NotNull] PreDecrement dec);
protected override BaseExpression Visit(PreDecrement dec) { _names.Add(dec.Name); return(base.Visit(dec)); }
protected override BaseExpression Visit(PreDecrement dec) { using (AppendLine($"--{dec.Name}")) return(dec); }
[NotNull] protected virtual BaseExpression Visit([NotNull] PreDecrement dec) { return(new PreDecrement(Visit(dec.Name))); }
protected override IDataFlowGraphExpressionNode Visit(PreDecrement dec) { throw new NotSupportedException("PreDecrement must be converted to Decrement before data flow analysis"); }
protected override bool Visit(PreDecrement dec) => true;