protected override BaseExpression Visit(PostDecrement dec) { //Add(dec.Name, dec); throw new NotImplementedException(); return(base.Visit(dec)); }
protected override IEnumerable <BaseStatement> Visit(PostDecrement dec) { var tmp = MkTmp(); return(new BaseStatement[] { // Save original value new Assignment(tmp, new Variable(dec.Name)), // Increment it in place new Assignment(dec.Name, new Decrement(dec.Name)), // Return original value new Assignment(MkTmp(), new Variable(tmp)) }); }
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(PostDecrement dec) => throw new NotSupportedException();
protected override Type Visit(PostDecrement dec) => VariableRead(dec.Name);
[NotNull] protected abstract TResult Visit([NotNull] PostDecrement dec);
protected override BaseExpression Visit(PostDecrement dec) { _names.Add(dec.Name); return(base.Visit(dec)); }
protected override BaseExpression Visit(PostDecrement dec) { using (AppendLine($"{dec.Name}--")) return(dec); }
[NotNull] protected virtual BaseExpression Visit([NotNull] PostDecrement dec) { return(new PostDecrement(Visit(dec.Name))); }
protected override IDataFlowGraphExpressionNode Visit(PostDecrement dec) { throw new NotSupportedException("PostDecrement must be converted to Decrement before data flow analysis"); }
protected override bool Visit(PostDecrement dec) => true;