<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />

NameManager

class NameManager
using System.Threading; namespace Microsoft.CSharp.RuntimeBinder.Syntax { internal class NameManager { internal class KnownName : Name { private PredefinedName _id = PredefinedName.PN_COUNT; public override PredefinedName PredefinedName => _id; public KnownName(string text) : base(text) { } public KnownName(string text, PredefinedName id) : base(text) { _id = id; } } private static NameTable s_knownNames; private static KnownName[] s_predefinedNames = new KnownName[103] { new KnownName(".ctor", PredefinedName.PN_CTOR), new KnownName("Finalize", PredefinedName.PN_DTOR), new KnownName(".cctor", PredefinedName.PN_STATCTOR), new KnownName("*", PredefinedName.PN_PTR), new KnownName("?*", PredefinedName.PN_NUB), new KnownName("#", PredefinedName.PN_OUTPARAM), new KnownName("&", PredefinedName.PN_REFPARAM), new KnownName("[X01", PredefinedName.PN_ARRAY0), new KnownName("[X02", PredefinedName.PN_ARRAY1), new KnownName("[X03", PredefinedName.PN_ARRAY2), new KnownName("[G01", PredefinedName.PN_GARRAY0), new KnownName("[G02", PredefinedName.PN_GARRAY1), new KnownName("[G03", PredefinedName.PN_GARRAY2), new KnownName("Invoke", PredefinedName.PN_INVOKE), new KnownName("Length", PredefinedName.PN_LENGTH), new KnownName("Item", PredefinedName.PN_INDEXER), new KnownName("$Item$", PredefinedName.PN_INDEXERINTERNAL), new KnownName("Combine", PredefinedName.PN_COMBINE), new KnownName("Remove", PredefinedName.PN_REMOVE), new KnownName("op_Explicit", PredefinedName.PN_OPEXPLICITMN), new KnownName("op_Implicit", PredefinedName.PN_OPIMPLICITMN), new KnownName("op_UnaryPlus", PredefinedName.PN_OPUNARYPLUS), new KnownName("op_UnaryNegation", PredefinedName.PN_OPUNARYMINUS), new KnownName("op_OnesComplement", PredefinedName.PN_OPCOMPLEMENT), new KnownName("op_Increment", PredefinedName.PN_OPINCREMENT), new KnownName("op_Decrement", PredefinedName.PN_OPDECREMENT), new KnownName("op_Addition", PredefinedName.PN_OPPLUS), new KnownName("op_Subtraction", PredefinedName.PN_OPMINUS), new KnownName("op_Multiply", PredefinedName.PN_OPMULTIPLY), new KnownName("op_Division", PredefinedName.PN_OPDIVISION), new KnownName("op_Modulus", PredefinedName.PN_OPMODULUS), new KnownName("op_ExclusiveOr", PredefinedName.PN_OPXOR), new KnownName("op_BitwiseAnd", PredefinedName.PN_OPBITWISEAND), new KnownName("op_BitwiseOr", PredefinedName.PN_OPBITWISEOR), new KnownName("op_LeftShift", PredefinedName.PN_OPLEFTSHIFT), new KnownName("op_RightShift", PredefinedName.PN_OPRIGHTSHIFT), new KnownName("op_Equals", PredefinedName.PN_OPEQUALS), new KnownName("op_Compare", PredefinedName.PN_OPCOMPARE), new KnownName("op_Equality", PredefinedName.PN_OPEQUALITY), new KnownName("op_Inequality", PredefinedName.PN_OPINEQUALITY), new KnownName("op_GreaterThan", PredefinedName.PN_OPGREATERTHAN), new KnownName("op_LessThan", PredefinedName.PN_OPLESSTHAN), new KnownName("op_GreaterThanOrEqual", PredefinedName.PN_OPGREATERTHANOREQUAL), new KnownName("op_LessThanOrEqual", PredefinedName.PN_OPLESSTHANOREQUAL), new KnownName("op_True", PredefinedName.PN_OPTRUE), new KnownName("op_False", PredefinedName.PN_OPFALSE), new KnownName("op_LogicalNot", PredefinedName.PN_OPNEGATION), new KnownName("Concat", PredefinedName.PN_CONCAT), new KnownName("Add", PredefinedName.PN_ADD), new KnownName("get_Length", PredefinedName.PN_GETLENGTH), new KnownName("get_Chars", PredefinedName.PN_GETCHARS), new KnownName("CreateDelegate", PredefinedName.PN_CREATEDELEGATE), new KnownName("FixedElementField", PredefinedName.PN_FIXEDELEMENT), new KnownName("HasValue", PredefinedName.PN_HASVALUE), new KnownName("get_HasValue", PredefinedName.PN_GETHASVALUE), new KnownName("Value", PredefinedName.PN_CAP_VALUE), new KnownName("get_Value", PredefinedName.PN_GETVALUE), new KnownName("GetValueOrDefault", PredefinedName.PN_GET_VALUE_OR_DEF), new KnownName("?", PredefinedName.PN_MISSING), new KnownName("<?>", PredefinedName.PN_MISSINGSYM), new KnownName("Lambda", PredefinedName.PN_LAMBDA), new KnownName("Parameter", PredefinedName.PN_PARAMETER), new KnownName("Constant", PredefinedName.PN_CONSTANT), new KnownName("Convert", PredefinedName.PN_CONVERT), new KnownName("ConvertChecked", PredefinedName.PN_CONVERTCHECKED), new KnownName("AddChecked", PredefinedName.PN_ADDCHECKED), new KnownName("Divide", PredefinedName.PN_DIVIDE), new KnownName("Modulo", PredefinedName.PN_MODULO), new KnownName("Multiply", PredefinedName.PN_MULTIPLY), new KnownName("MultiplyChecked", PredefinedName.PN_MULTIPLYCHECKED), new KnownName("Subtract", PredefinedName.PN_SUBTRACT), new KnownName("SubtractChecked", PredefinedName.PN_SUBTRACTCHECKED), new KnownName("And", PredefinedName.PN_AND), new KnownName("Or", PredefinedName.PN_OR), new KnownName("ExclusiveOr", PredefinedName.PN_EXCLUSIVEOR), new KnownName("LeftShift", PredefinedName.PN_LEFTSHIFT), new KnownName("RightShift", PredefinedName.PN_RIGHTSHIFT), new KnownName("AndAlso", PredefinedName.PN_ANDALSO), new KnownName("OrElse", PredefinedName.PN_ORELSE), new KnownName("Equal", PredefinedName.PN_EQUAL), new KnownName("NotEqual", PredefinedName.PN_NOTEQUAL), new KnownName("GreaterThanOrEqual", PredefinedName.PN_GREATERTHANOREQUAL), new KnownName("GreaterThan", PredefinedName.PN_GREATERTHAN), new KnownName("LessThan", PredefinedName.PN_LESSTHAN), new KnownName("LessThanOrEqual", PredefinedName.PN_LESSTHANOREQUAL), new KnownName("ArrayIndex", PredefinedName.PN_ARRAYINDEX), new KnownName("Assign", PredefinedName.PN_ASSIGN), new KnownName("Condition", PredefinedName.PN_CONDITION), new KnownName("Field", PredefinedName.PN_CAP_FIELD), new KnownName("Call", PredefinedName.PN_CALL), new KnownName("New", PredefinedName.PN_NEW), new KnownName("Quote", PredefinedName.PN_QUOTE), new KnownName("ArrayLength", PredefinedName.PN_ARRAYLENGTH), new KnownName("UnaryPlus", PredefinedName.PN_PLUS), new KnownName("Negate", PredefinedName.PN_NEGATE), new KnownName("NegateChecked", PredefinedName.PN_NEGATECHECKED), new KnownName("Not", PredefinedName.PN_NOT), new KnownName("NewArrayInit", PredefinedName.PN_NEWARRAYINIT), new KnownName("Property", PredefinedName.PN_EXPRESSION_PROPERTY), new KnownName("AddEventHandler", PredefinedName.PN_ADDEVENTHANDLER), new KnownName("RemoveEventHandler", PredefinedName.PN_REMOVEEVENTHANDLER), new KnownName("InvocationList", PredefinedName.PN_INVOCATIONLIST), new KnownName("GetOrCreateEventRegistrationTokenTable", PredefinedName.PN_GETORCREATEEVENTREGISTRATIONTOKENTABLE) }; private static KnownName[] s_otherNames = new KnownName[17] { new KnownName("true"), new KnownName("false"), new KnownName("null"), new KnownName("base"), new KnownName("this"), new KnownName("explicit"), new KnownName("implicit"), new KnownName("__arglist"), new KnownName("__makeref"), new KnownName("__reftype"), new KnownName("__refvalue"), new KnownName("as"), new KnownName("checked"), new KnownName("is"), new KnownName("typeof"), new KnownName("unchecked"), new KnownName("void") }; private NameTable _names; private void InitKnownNames() { if (s_knownNames == null) { NameTable nameTable = new NameTable(); int i = 0; for (int num = s_predefinedNames.Length; i < num; i++) { Name name = s_predefinedNames[i]; nameTable.Add(name); } KnownName[] array = s_otherNames; foreach (KnownName name2 in array) { nameTable.Add(name2); } Interlocked.CompareExchange(ref s_knownNames, nameTable, null); } } internal NameManager() : this(new NameTable()) { } internal NameManager(NameTable nameTable) { _names = nameTable; InitKnownNames(); } internal Name Add(string key) { if (key == null) throw Error.InternalCompilerError(); Name name = s_knownNames.Lookup(key); if (name == null) name = _names.Add(key); return name; } internal Name Lookup(string key) { if (key == null) throw Error.InternalCompilerError(); Name name = s_knownNames.Lookup(key); if (name == null) name = _names.Lookup(key); return name; } internal Name GetPredefinedName(PredefinedName id) { return s_predefinedNames[(int)id]; } internal Name GetPredefName(PredefinedName id) { return GetPredefinedName(id); } } }