1 // Licensed to the .NET Foundation under one or more agreements. 2 // The .NET Foundation licenses this file to you under the MIT license. 3 // See the LICENSE file in the project root for more information. 4 5 using System.Diagnostics; 6 7 namespace Microsoft.CSharp.RuntimeBinder.Syntax 8 { 9 internal static class NameManager 10 { 11 private static readonly Name[] s_predefinedNames = { 12 new Name(".ctor"), 13 new Name("Finalize"), 14 new Name(".cctor"), 15 new Name("*"), 16 new Name("?*"), 17 new Name("#"), 18 new Name("&"), 19 new Name("[X\001"), 20 new Name("[X\002"), 21 new Name("[X\003"), 22 new Name("[G\001"), 23 new Name("[G\002"), 24 new Name("[G\003"), 25 new Name("Invoke"), 26 new Name("Length"), 27 new Name("Item"), 28 new Name("$Item$"), 29 new Name("Combine"), 30 new Name("Remove"), 31 new Name("op_Explicit"), 32 new Name("op_Implicit"), 33 new Name("op_UnaryPlus"), 34 new Name("op_UnaryNegation"), 35 new Name("op_OnesComplement"), 36 new Name("op_Increment"), 37 new Name("op_Decrement"), 38 new Name("op_Addition"), 39 new Name("op_Subtraction"), 40 new Name("op_Multiply"), 41 new Name("op_Division"), 42 new Name("op_Modulus"), 43 new Name("op_ExclusiveOr"), 44 new Name("op_BitwiseAnd"), 45 new Name("op_BitwiseOr"), 46 new Name("op_LeftShift"), 47 new Name("op_RightShift"), 48 new Name("op_Equals"), 49 new Name("op_Compare"), 50 new Name("op_Equality"), 51 new Name("op_Inequality"), 52 new Name("op_GreaterThan"), 53 new Name("op_LessThan"), 54 new Name("op_GreaterThanOrEqual"), 55 new Name("op_LessThanOrEqual"), 56 new Name("op_True"), 57 new Name("op_False"), 58 new Name("op_LogicalNot"), 59 new Name("Concat"), 60 new Name("Add"), 61 new Name("get_Length"), 62 new Name("get_Chars"), 63 new Name("CreateDelegate"), 64 new Name("FixedElementField"), 65 new Name("HasValue"), 66 new Name("get_HasValue"), 67 new Name("Value"), 68 new Name("get_Value"), 69 new Name("GetValueOrDefault"), 70 new Name("?"), 71 new Name("<?>"), 72 new Name("Lambda"), 73 new Name("Parameter"), 74 new Name("Constant"), 75 new Name("Convert"), 76 new Name("ConvertChecked"), 77 new Name("AddChecked"), 78 new Name("Divide"), 79 new Name("Modulo"), 80 new Name("Multiply"), 81 new Name("MultiplyChecked"), 82 new Name("Subtract"), 83 new Name("SubtractChecked"), 84 new Name("And"), 85 new Name("Or"), 86 new Name("ExclusiveOr"), 87 new Name("LeftShift"), 88 new Name("RightShift"), 89 new Name("AndAlso"), 90 new Name("OrElse"), 91 new Name("Equal"), 92 new Name("NotEqual"), 93 new Name("GreaterThanOrEqual"), 94 new Name("GreaterThan"), 95 new Name("LessThan"), 96 new Name("LessThanOrEqual"), 97 new Name("ArrayIndex"), 98 new Name("Assign"), 99 new Name("Condition"), 100 new Name("Field"), 101 new Name("Call"), 102 new Name("New"), 103 new Name("Quote"), 104 new Name("ArrayLength"), 105 new Name("UnaryPlus"), 106 new Name("Negate"), 107 new Name("NegateChecked"), 108 new Name("Not"), 109 new Name("NewArrayInit"), 110 new Name("Property"), 111 new Name("AddEventHandler"), 112 new Name("RemoveEventHandler"), 113 new Name("InvocationList"), 114 new Name("GetOrCreateEventRegistrationTokenTable"), 115 new Name("void"), 116 new Name(""), 117 /* Above here corresponds with PredefinedName enum */ 118 new Name("true"), 119 new Name("false"), 120 new Name("null"), 121 new Name("base"), 122 new Name("this"), 123 new Name("explicit"), 124 new Name("implicit"), 125 new Name("__arglist"), 126 new Name("__makeref"), 127 new Name("__reftype"), 128 new Name("__refvalue"), 129 new Name("as"), 130 new Name("checked"), 131 new Name("is"), 132 new Name("typeof"), 133 new Name("unchecked") 134 }; 135 136 private static readonly NameTable s_names = GetKnownNames(); 137 GetKnownNames()138 private static NameTable GetKnownNames() 139 { 140 NameTable table = new NameTable(); 141 142 foreach (Name name in s_predefinedNames) 143 { 144 table.Add(name); 145 } 146 147 return table; 148 } 149 Add(string key)150 internal static Name Add(string key) 151 { 152 if (key == null) 153 { 154 throw Error.InternalCompilerError(); 155 } 156 157 return s_names.Add(key); 158 } 159 Add(string key, int length)160 internal static Name Add(string key, int length) 161 { 162 Debug.Assert(key != null); 163 Debug.Assert(key.Length >= length); 164 return s_names.Add(key, length); 165 } 166 GetPredefinedName(PredefinedName id)167 internal static Name GetPredefinedName(PredefinedName id) 168 { 169 Debug.Assert(id < PredefinedName.PN_COUNT); 170 return s_predefinedNames[(int)id]; 171 } 172 } 173 } 174