Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
SymbolType.cs
Go to the documentation of this file.
3
5
6internal sealed class SymbolType : TypeInfo
7{
9
10 internal Type m_baseType;
11
12 internal int m_cRank;
13
14 internal int[] m_iaLowerBound;
15
16 internal int[] m_iaUpperBound;
17
18 private string m_format;
19
20 private bool m_isSzArray = true;
21
22 public override bool IsTypeDefinition => false;
23
24 public override bool IsSZArray
25 {
26 get
27 {
28 if (m_cRank <= 1)
29 {
30 return m_isSzArray;
31 }
32 return false;
33 }
34 }
35
36 public override Guid GUID
37 {
38 get
39 {
41 }
42 }
43
44 public override Module Module
45 {
46 get
47 {
48 Type baseType = m_baseType;
49 while (baseType is SymbolType)
50 {
51 baseType = ((SymbolType)baseType).m_baseType;
52 }
53 return baseType.Module;
54 }
55 }
56
57 public override Assembly Assembly
58 {
59 get
60 {
61 Type baseType = m_baseType;
62 while (baseType is SymbolType)
63 {
64 baseType = ((SymbolType)baseType).m_baseType;
65 }
66 return baseType.Assembly;
67 }
68 }
69
71 {
72 get
73 {
75 }
76 }
77
78 public override string Name
79 {
80 get
81 {
82 string text = m_format;
83 Type baseType = m_baseType;
84 while (baseType is SymbolType)
85 {
86 text = ((SymbolType)baseType).m_format + text;
87 baseType = ((SymbolType)baseType).m_baseType;
88 }
89 return baseType.Name + text;
90 }
91 }
92
93 public override string FullName => TypeNameBuilder.ToString(this, TypeNameBuilder.Format.FullName);
94
95 public override string AssemblyQualifiedName => TypeNameBuilder.ToString(this, TypeNameBuilder.Format.AssemblyQualifiedName);
96
97 public override string Namespace => m_baseType.Namespace;
98
99 public override Type BaseType => typeof(Array);
100
101 public override bool IsConstructedGenericType => false;
102
103 public override Type UnderlyingSystemType => this;
104
105 public override bool IsAssignableFrom([NotNullWhen(true)] TypeInfo typeInfo)
106 {
107 if (typeInfo == null)
108 {
109 return false;
110 }
111 return IsAssignableFrom(typeInfo.AsType());
112 }
113
114 internal static Type FormCompoundType(string format, Type baseType, int curIndex)
115 {
116 if (format == null || curIndex == format.Length)
117 {
118 return baseType;
119 }
120 if (format[curIndex] == '&')
121 {
122 SymbolType symbolType = new SymbolType(TypeKind.IsByRef);
123 symbolType.SetFormat(format, curIndex, 1);
124 curIndex++;
125 if (curIndex != format.Length)
126 {
128 }
129 symbolType.SetElementType(baseType);
130 return symbolType;
131 }
132 if (format[curIndex] == '[')
133 {
134 SymbolType symbolType = new SymbolType(TypeKind.IsArray);
135 int num = curIndex;
136 curIndex++;
137 int num2 = 0;
138 int num3 = -1;
139 while (format[curIndex] != ']')
140 {
141 if (format[curIndex] == '*')
142 {
143 symbolType.m_isSzArray = false;
144 curIndex++;
145 }
146 if ((format[curIndex] >= '0' && format[curIndex] <= '9') || format[curIndex] == '-')
147 {
148 bool flag = false;
149 if (format[curIndex] == '-')
150 {
151 flag = true;
152 curIndex++;
153 }
154 while (format[curIndex] >= '0' && format[curIndex] <= '9')
155 {
156 num2 *= 10;
157 num2 += format[curIndex] - 48;
158 curIndex++;
159 }
160 if (flag)
161 {
162 num2 = -num2;
163 }
164 num3 = num2 - 1;
165 }
166 if (format[curIndex] == '.')
167 {
168 curIndex++;
169 if (format[curIndex] != '.')
170 {
172 }
173 curIndex++;
174 if ((format[curIndex] >= '0' && format[curIndex] <= '9') || format[curIndex] == '-')
175 {
176 bool flag2 = false;
177 num3 = 0;
178 if (format[curIndex] == '-')
179 {
180 flag2 = true;
181 curIndex++;
182 }
183 while (format[curIndex] >= '0' && format[curIndex] <= '9')
184 {
185 num3 *= 10;
186 num3 += format[curIndex] - 48;
187 curIndex++;
188 }
189 if (flag2)
190 {
191 num3 = -num3;
192 }
193 if (num3 < num2)
194 {
196 }
197 }
198 }
199 if (format[curIndex] == ',')
200 {
201 curIndex++;
202 symbolType.SetBounds(num2, num3);
203 num2 = 0;
204 num3 = -1;
205 }
206 else if (format[curIndex] != ']')
207 {
209 }
210 }
211 symbolType.SetBounds(num2, num3);
212 curIndex++;
213 symbolType.SetFormat(format, num, curIndex - num);
214 symbolType.SetElementType(baseType);
215 return FormCompoundType(format, symbolType, curIndex);
216 }
217 if (format[curIndex] == '*')
218 {
219 SymbolType symbolType = new SymbolType(TypeKind.IsPointer);
220 symbolType.SetFormat(format, curIndex, 1);
221 curIndex++;
222 symbolType.SetElementType(baseType);
223 return FormCompoundType(format, symbolType, curIndex);
224 }
225 return null;
226 }
227
228 internal SymbolType(TypeKind typeKind)
229 {
230 m_typeKind = typeKind;
231 m_iaLowerBound = new int[4];
232 m_iaUpperBound = new int[4];
233 }
234
235 internal void SetElementType(Type baseType)
236 {
237 if ((object)baseType == null)
238 {
239 throw new ArgumentNullException("baseType");
240 }
241 m_baseType = baseType;
242 }
243
244 private void SetBounds(int lower, int upper)
245 {
246 if (lower != 0 || upper != -1)
247 {
248 m_isSzArray = false;
249 }
250 if (m_iaLowerBound.Length <= m_cRank)
251 {
252 int[] array = new int[m_cRank * 2];
257 }
258 m_iaLowerBound[m_cRank] = lower;
259 m_iaUpperBound[m_cRank] = upper;
260 m_cRank++;
261 }
262
263 internal void SetFormat(string format, int curIndex, int length)
264 {
265 m_format = format.Substring(curIndex, length);
266 }
267
268 public override Type MakePointerType()
269 {
270 return FormCompoundType(m_format + "*", m_baseType, 0);
271 }
272
273 public override Type MakeByRefType()
274 {
275 return FormCompoundType(m_format + "&", m_baseType, 0);
276 }
277
278 public override Type MakeArrayType()
279 {
280 return FormCompoundType(m_format + "[]", m_baseType, 0);
281 }
282
283 public override Type MakeArrayType(int rank)
284 {
285 string rankString = TypeInfo.GetRankString(rank);
286 return FormCompoundType(m_format + rankString, m_baseType, 0) as SymbolType;
287 }
288
289 public override int GetArrayRank()
290 {
291 if (!base.IsArray)
292 {
294 }
295 return m_cRank;
296 }
297
298 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
299 public override object InvokeMember(string name, BindingFlags invokeAttr, Binder binder, object target, object[] args, ParameterModifier[] modifiers, CultureInfo culture, string[] namedParameters)
300 {
302 }
303
304 public override string ToString()
305 {
306 return TypeNameBuilder.ToString(this, TypeNameBuilder.Format.ToString);
307 }
308
309 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors)]
310 protected override ConstructorInfo GetConstructorImpl(BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers)
311 {
313 }
314
315 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors)]
316 public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr)
317 {
319 }
320
321 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.NonPublicMethods)]
322 protected override MethodInfo GetMethodImpl(string name, BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers)
323 {
325 }
326
327 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.NonPublicMethods)]
328 public override MethodInfo[] GetMethods(BindingFlags bindingAttr)
329 {
331 }
332
333 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields)]
334 public override FieldInfo GetField(string name, BindingFlags bindingAttr)
335 {
337 }
338
339 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields)]
340 public override FieldInfo[] GetFields(BindingFlags bindingAttr)
341 {
343 }
344
345 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.Interfaces)]
346 [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2063:UnrecognizedReflectionPattern", Justification = "Linker doesn't recognize always throwing method. https://github.com/mono/linker/issues/2025")]
347 [return: DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.Interfaces)]
348 public override Type GetInterface(string name, bool ignoreCase)
349 {
351 }
352
353 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.Interfaces)]
354 public override Type[] GetInterfaces()
355 {
357 }
358
359 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicEvents | DynamicallyAccessedMemberTypes.NonPublicEvents)]
360 public override EventInfo GetEvent(string name, BindingFlags bindingAttr)
361 {
363 }
364
365 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicEvents)]
366 public override EventInfo[] GetEvents()
367 {
369 }
370
371 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties)]
372 protected override PropertyInfo GetPropertyImpl(string name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers)
373 {
375 }
376
377 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties)]
378 public override PropertyInfo[] GetProperties(BindingFlags bindingAttr)
379 {
381 }
382
383 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes)]
384 public override Type[] GetNestedTypes(BindingFlags bindingAttr)
385 {
387 }
388
389 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes)]
390 public override Type GetNestedType(string name, BindingFlags bindingAttr)
391 {
393 }
394
395 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors | DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.NonPublicMethods | DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties | DynamicallyAccessedMemberTypes.PublicEvents | DynamicallyAccessedMemberTypes.NonPublicEvents)]
396 public override MemberInfo[] GetMember(string name, MemberTypes type, BindingFlags bindingAttr)
397 {
399 }
400
401 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors | DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.NonPublicMethods | DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties | DynamicallyAccessedMemberTypes.PublicEvents | DynamicallyAccessedMemberTypes.NonPublicEvents)]
402 public override MemberInfo[] GetMembers(BindingFlags bindingAttr)
403 {
405 }
406
407 public override InterfaceMapping GetInterfaceMap([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.NonPublicMethods)] Type interfaceType)
408 {
410 }
411
412 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicEvents | DynamicallyAccessedMemberTypes.NonPublicEvents)]
413 public override EventInfo[] GetEvents(BindingFlags bindingAttr)
414 {
416 }
417
419 {
420 Type baseType = m_baseType;
421 while (baseType is SymbolType)
422 {
423 baseType = ((SymbolType)baseType).m_baseType;
424 }
425 return baseType.Attributes;
426 }
427
428 protected override bool IsArrayImpl()
429 {
430 return m_typeKind == TypeKind.IsArray;
431 }
432
433 protected override bool IsPointerImpl()
434 {
435 return m_typeKind == TypeKind.IsPointer;
436 }
437
438 protected override bool IsByRefImpl()
439 {
440 return m_typeKind == TypeKind.IsByRef;
441 }
442
443 protected override bool IsPrimitiveImpl()
444 {
445 return false;
446 }
447
448 protected override bool IsValueTypeImpl()
449 {
450 return false;
451 }
452
453 protected override bool IsCOMObjectImpl()
454 {
455 return false;
456 }
457
458 public override Type GetElementType()
459 {
460 return m_baseType;
461 }
462
463 protected override bool HasElementTypeImpl()
464 {
465 return m_baseType != null;
466 }
467
468 public override object[] GetCustomAttributes(bool inherit)
469 {
471 }
472
473 public override object[] GetCustomAttributes(Type attributeType, bool inherit)
474 {
476 }
477
478 public override bool IsDefined(Type attributeType, bool inherit)
479 {
481 }
482}
static unsafe void Copy(Array sourceArray, Array destinationArray, int length)
Definition Array.cs:624
override Type[] GetNestedTypes(BindingFlags bindingAttr)
override MethodInfo GetMethodImpl(string name, BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers)
void SetElementType(Type baseType)
override InterfaceMapping GetInterfaceMap([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods|DynamicallyAccessedMemberTypes.NonPublicMethods)] Type interfaceType)
override RuntimeTypeHandle TypeHandle
Definition SymbolType.cs:71
override Type MakeArrayType(int rank)
override object InvokeMember(string name, BindingFlags invokeAttr, Binder binder, object target, object[] args, ParameterModifier[] modifiers, CultureInfo culture, string[] namedParameters)
override PropertyInfo[] GetProperties(BindingFlags bindingAttr)
override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr)
override EventInfo[] GetEvents()
override object[] GetCustomAttributes(bool inherit)
static Type FormCompoundType(string format, Type baseType, int curIndex)
override MemberInfo[] GetMember(string name, MemberTypes type, BindingFlags bindingAttr)
override EventInfo GetEvent(string name, BindingFlags bindingAttr)
void SetFormat(string format, int curIndex, int length)
override MemberInfo[] GetMembers(BindingFlags bindingAttr)
override object[] GetCustomAttributes(Type attributeType, bool inherit)
override FieldInfo GetField(string name, BindingFlags bindingAttr)
override Type GetInterface(string name, bool ignoreCase)
override ConstructorInfo GetConstructorImpl(BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers)
override TypeAttributes GetAttributeFlagsImpl()
override PropertyInfo GetPropertyImpl(string name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers)
override bool IsDefined(Type attributeType, bool inherit)
override EventInfo[] GetEvents(BindingFlags bindingAttr)
void SetBounds(int lower, int upper)
override FieldInfo[] GetFields(BindingFlags bindingAttr)
override string AssemblyQualifiedName
Definition SymbolType.cs:95
override bool IsAssignableFrom([NotNullWhen(true)] TypeInfo typeInfo)
override Type GetNestedType(string name, BindingFlags bindingAttr)
override MethodInfo[] GetMethods(BindingFlags bindingAttr)
virtual Type AsType()
Definition TypeInfo.cs:106
static string GetRankString(int rank)
Definition TypeInfo.cs:192
static string NotSupported_NonReflectedType
Definition SR.cs:1692
static string Argument_BadSigFormat
Definition SR.cs:504
static string NotSupported_SubclassOverride
Definition SR.cs:1714
Definition SR.cs:7
TypeAttributes Attributes
Definition Type.cs:173
string? Namespace
Definition Type.cs:43
Assembly Assembly
Definition Type.cs:49
new Module Module
Definition Type.cs:51