protected override BaseStatement Visit(TypedAssignment ass) { if (_toRemove.Contains(ass.Left)) return new EmptyStatement(); else return base.Visit(ass); }
protected override BaseStatement Visit(TypedAssignment ass) { if (IsBoolean(ass.Right)) { _names.Add(ass.Left); } return(base.Visit(ass)); }
protected override BaseStatement Visit(TypedAssignment ass) { if (ass.Left.Equals(_var)) { return(new EmptyStatement()); } else { return(base.Visit(ass)); } }
protected override BaseStatement Visit(TypedAssignment ass) { var r = base.Visit(ass.Right); if (r is ErrorExpression) { return(new ErrorStatement()); } return(ass); }
protected override BaseStatement Visit(TypedAssignment ass) { if (_toRemove.Contains(ass.Left)) { return(new EmptyStatement()); } else { return(base.Visit(ass)); } }
public TResult Visit(BaseStatement statement) { return(statement switch { Conditional a => Visit(a), TypedAssignment a => Visit(a), ErrorStatement a => Visit(a), CompoundAssignment a => Visit(a), Assignment a => Visit(a), ExpressionWrapper a => Visit(a), Goto a => Visit(a), If a => Visit(a), StatementList a => Visit(a), EmptyStatement a => Visit(a), _ => VisitUnknown(statement) });
protected override BaseStatement Visit(TypedAssignment ass) { if (!ass.Left.IsExternal && new ExpressionConstantFinder(_constants).Visit(ass.Right)) { if (_constants.ContainsKey(ass.Left)) { if (!_constants[ass.Left].Equals(ass.Right)) { throw new InvalidOperationException("Variable has already been marked constant with a different value (variable is assigned multiple times, SSA form not correct"); } } else { _constants.Add(ass.Left, ass.Right); } } return(base.Visit(ass)); }
protected override BaseStatement Visit(TypedAssignment ass) { if (ass.Left.IsExternal) { return(base.Visit(ass)); } if (!(ass.Right is Variable v)) { return(base.Visit(ass)); } if (ass.Left == v.Name) { return(new EmptyStatement()); } return(base.Visit(ass)); }
protected override BaseStatement Visit(TypedAssignment ass) { return(Visit((Assignment)ass)); }
[NotNull] protected abstract TResult Visit([NotNull] TypedAssignment ass);
protected override BaseStatement Visit(TypedAssignment ass) { _names.Add(ass.Left); return(base.Visit(ass)); }
[NotNull] protected virtual BaseStatement Visit([NotNull] TypedAssignment ass) { var expr = Visit(ass.Right); return(new TypedAssignment(ass.Type, Visit(ass.Left), expr)); }
protected override BaseStatement Visit(TypedAssignment ass) { return(Visit(new Assignment(Visit(ass.Left), Visit(ass.Right)))); }
protected override IEnumerable <BaseStatement> Visit(TypedAssignment ass) { throw new NotSupportedException(); }
protected override BaseStatement Visit(TypedAssignment ass) { Add(ass.Left, ass.Right); return(base.Visit(ass)); }
protected override bool Visit(TypedAssignment ass) { return(_check.Visit(ass.Right)); }