/// <summary> /// Traverses the expression. /// </summary> public void Traverse(IExpression expression) { Contract.Requires(expression != null); expression.Dispatch(this.dispatchingVisitor); }
/// <summary> /// Traverses the given expression. /// </summary> /// <param name="expression"></param> public virtual void Visit(IExpression expression) { if (this.stopTraversal) return; expression.Dispatch(this); }
/// <summary> /// A dispatcher method that calls the type-specific Substitute for <paramref name="expression"/>. /// </summary> /// <param name="expression"></param> /// <returns></returns> public virtual IExpression Substitute(IExpression expression) { expression.Dispatch(this.createMutableType); return this.createMutableType.resultExpression; }
/// <summary> /// Returns a shallow copy of the given expression. /// </summary> /// <param name="expression"></param> public Expression Copy(IExpression expression) { expression.Dispatch(this.Dispatcher); return (Expression)this.Dispatcher.result; }
/// <summary> /// Returns a shallow copy of the given expression. /// </summary> /// <param name="expression"></param> public Expression Copy(IExpression expression) { Contract.Requires(expression != null); Contract.Ensures(Contract.Result<Expression>() != null); expression.Dispatch(this.Dispatcher); return (Expression)this.Dispatcher.result; }
/// <summary> /// Rewrites the given expression. /// </summary> /// <param name="expression"></param> public virtual IExpression Rewrite(IExpression expression) { expression.Dispatch(this.dispatchingVisitor); return (IExpression)this.dispatchingVisitor.result; }