You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
parent
a569aebcfd
commit
e79aa3c0ed
@ -0,0 +1,68 @@
|
||||
//---------------------------------------------------------------------
|
||||
// <copyright file="SymbolTable.cs" company="Microsoft">
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// </copyright>
|
||||
//
|
||||
// @owner [....]
|
||||
// @backupOwner [....]
|
||||
//---------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Data.SqlClient;
|
||||
using System.Data.Metadata.Edm;
|
||||
using System.Data.Common.CommandTrees;
|
||||
|
||||
namespace System.Data.SqlClient.SqlGen
|
||||
{
|
||||
/// <summary>
|
||||
/// The symbol table is quite primitive - it is a stack with a new entry for
|
||||
/// each scope. Lookups search from the top of the stack to the bottom, until
|
||||
/// an entry is found.
|
||||
///
|
||||
/// The symbols are of the following kinds
|
||||
/// <list type="bullet">
|
||||
/// <item><see cref="Symbol"/> represents tables (extents/nested selects/unnests)</item>
|
||||
/// <item><see cref="JoinSymbol"/> represents Join nodes</item>
|
||||
/// <item><see cref="Symbol"/> columns.</item>
|
||||
/// </list>
|
||||
///
|
||||
/// Symbols represent names <see cref="SqlGenerator.Visit(DbVariableReferenceExpression)"/> to be resolved,
|
||||
/// or things to be renamed.
|
||||
/// </summary>
|
||||
internal sealed class SymbolTable
|
||||
{
|
||||
private List<Dictionary<string, Symbol>> symbols = new List<Dictionary<string, Symbol>>();
|
||||
|
||||
internal void EnterScope()
|
||||
{
|
||||
symbols.Add(new Dictionary<string, Symbol>(StringComparer.OrdinalIgnoreCase));
|
||||
}
|
||||
|
||||
internal void ExitScope()
|
||||
{
|
||||
symbols.RemoveAt(symbols.Count - 1);
|
||||
}
|
||||
|
||||
internal void Add(string name, Symbol value)
|
||||
{
|
||||
symbols[symbols.Count - 1][name] = value;
|
||||
}
|
||||
|
||||
internal Symbol Lookup(string name)
|
||||
{
|
||||
for (int i = symbols.Count - 1; i >= 0; --i)
|
||||
{
|
||||
if (symbols[i].ContainsKey(name))
|
||||
{
|
||||
return symbols[i][name];
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user