2016-08-03 10:59:49 +00:00
|
|
|
//---------------------------------------------------------------------
|
|
|
|
// <copyright file="AnciliaryOps.cs" company="Microsoft">
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
// </copyright>
|
|
|
|
//
|
2017-08-21 15:34:15 +00:00
|
|
|
// @owner Microsoft
|
|
|
|
// @backupOwner Microsoft
|
2016-08-03 10:59:49 +00:00
|
|
|
//---------------------------------------------------------------------
|
|
|
|
|
|
|
|
using System;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using System.Diagnostics;
|
|
|
|
using System.Globalization;
|
|
|
|
|
|
|
|
namespace System.Data.Query.InternalTrees
|
|
|
|
{
|
|
|
|
/// <summary>
|
|
|
|
/// A definition of a variable
|
|
|
|
/// </summary>
|
|
|
|
internal sealed class VarDefOp : AncillaryOp
|
|
|
|
{
|
|
|
|
#region private state
|
|
|
|
private Var m_var;
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region constructors
|
|
|
|
internal VarDefOp(Var v) : this()
|
|
|
|
{
|
|
|
|
m_var = v;
|
|
|
|
}
|
|
|
|
private VarDefOp() : base(OpType.VarDef) { }
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region public methods
|
|
|
|
internal static readonly VarDefOp Pattern = new VarDefOp();
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 1 child - the defining expression
|
|
|
|
/// </summary>
|
|
|
|
internal override int Arity { get { return 1; } }
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// The Var being defined
|
|
|
|
/// </summary>
|
|
|
|
internal Var Var { get { return m_var; } }
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Visitor pattern method
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="v">The BasicOpVisitor that is visiting this Op</param>
|
|
|
|
/// <param name="n">The Node that references this Op</param>
|
|
|
|
[DebuggerNonUserCode]
|
|
|
|
internal override void Accept(BasicOpVisitor v, Node n) { v.Visit(this, n); }
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Visitor pattern method for visitors with a return value
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="v">The visitor</param>
|
|
|
|
/// <param name="n">The node in question</param>
|
|
|
|
/// <returns>An instance of TResultType</returns>
|
|
|
|
[DebuggerNonUserCode]
|
|
|
|
internal override TResultType Accept<TResultType>(BasicOpVisitorOfT<TResultType> v, Node n) { return v.Visit(this, n); }
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Helps define a list of VarDefOp
|
|
|
|
/// </summary>
|
|
|
|
internal sealed class VarDefListOp : AncillaryOp
|
|
|
|
{
|
|
|
|
#region constructors
|
|
|
|
private VarDefListOp() : base(OpType.VarDefList) { }
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region public methods
|
|
|
|
/// <summary>
|
|
|
|
/// singleton instance
|
|
|
|
/// </summary>
|
|
|
|
internal static readonly VarDefListOp Instance = new VarDefListOp();
|
|
|
|
internal static readonly VarDefListOp Pattern = Instance;
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Visitor pattern method
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="v">The BasicOpVisitor that is visiting this Op</param>
|
|
|
|
/// <param name="n">The Node that references this Op</param>
|
|
|
|
[DebuggerNonUserCode]
|
|
|
|
internal override void Accept(BasicOpVisitor v, Node n) { v.Visit(this, n); }
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Visitor pattern method for visitors with a return value
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="v">The visitor</param>
|
|
|
|
/// <param name="n">The node in question</param>
|
|
|
|
/// <returns>An instance of TResultType</returns>
|
|
|
|
[DebuggerNonUserCode]
|
|
|
|
internal override TResultType Accept<TResultType>(BasicOpVisitorOfT<TResultType> v, Node n) { return v.Visit(this, n); }
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
}
|