Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
ModuleBuilder.cs
Go to the documentation of this file.
5
7
8public class ModuleBuilder : Module
9{
11
13
15
17
19
21
23
24 [RequiresAssemblyFiles("Returns <Unknown> for modules with no file path")]
25 public override string FullyQualifiedName => _moduleData._moduleName;
26
28
30
32
33 public override string ScopeName => InternalModule.ScopeName;
34
35 [RequiresAssemblyFiles("Returns <Unknown> for modules with no file path")]
36 public override string Name => InternalModule.Name;
37
39
40 internal static string UnmangleTypeName(string typeName)
41 {
42 int startIndex = typeName.Length - 1;
43 while (true)
44 {
45 startIndex = typeName.LastIndexOf('+', startIndex);
46 if (startIndex == -1)
47 {
48 break;
49 }
50 bool flag = true;
51 int num = startIndex;
52 while (typeName[--num] == '\\')
53 {
54 flag = !flag;
55 }
56 if (flag)
57 {
58 break;
59 }
60 startIndex = num;
61 }
62 return typeName.Substring(startIndex + 1);
63 }
64
70
71 internal void AddType(string name, Type type)
72 {
74 }
75
77 {
78 if (_typeBuilderDict.TryGetValue(strTypeName, out var value) && (object)value.DeclaringType == enclosingType)
79 {
81 }
82 }
83
84 private static Type GetType(string strFormat, Type baseType)
85 {
86 if (string.IsNullOrEmpty(strFormat))
87 {
88 return baseType;
89 }
91 }
92
93 [DllImport("QCall", CharSet = CharSet.Unicode)]
95
96 [DllImport("QCall", CharSet = CharSet.Unicode)]
97 private static extern int GetMemberRef(QCallModule module, QCallModule refedModule, int tr, int defToken);
98
105
106 [DllImport("QCall", CharSet = CharSet.Unicode)]
107 private static extern int GetMemberRefFromSignature(QCallModule module, int tr, string methodName, byte[] signature, int length);
108
109 private int GetMemberRefFromSignature(int tr, string methodName, byte[] signature, int length)
110 {
111 ModuleBuilder module = this;
113 }
114
115 [DllImport("QCall", CharSet = CharSet.Unicode)]
117
125
133
134 [DllImport("QCall", CharSet = CharSet.Unicode)]
136
142
143 [DllImport("QCall", CharSet = CharSet.Unicode)]
144 private static extern int GetTokenFromTypeSpec(QCallModule pModule, byte[] signature, int length);
145
146 private int GetTokenFromTypeSpec(byte[] signature, int length)
147 {
148 ModuleBuilder module = this;
150 }
151
152 [DllImport("QCall", CharSet = CharSet.Unicode)]
153 private static extern int GetArrayMethodToken(QCallModule module, int tkTypeSpec, string methodName, byte[] signature, int sigLength);
154
155 [DllImport("QCall", CharSet = CharSet.Unicode)]
156 private static extern int GetStringConstant(QCallModule module, string str, int length);
157
158 [DllImport("QCall", CharSet = CharSet.Unicode)]
159 internal static extern void SetFieldRVAContent(QCallModule module, int fdToken, byte[] data, int length);
160
161 internal virtual Type FindTypeBuilderWithName(string strTypeName, bool ignoreCase)
162 {
163 Type value;
164 if (ignoreCase)
165 {
166 foreach (string key in _typeBuilderDict.Keys)
167 {
168 if (string.Equals(key, strTypeName, StringComparison.OrdinalIgnoreCase))
169 {
170 return _typeBuilderDict[key];
171 }
172 }
173 }
175 {
176 return value;
177 }
178 return null;
179 }
180
195
197 {
198 if (con == null)
199 {
200 throw new ArgumentNullException("con");
201 }
204 {
205 if (!usingRef && constructorBuilder.Module.Equals(this))
206 {
207 return constructorBuilder.MetadataToken;
208 }
210 return GetMemberRef(con.ReflectedType.Module, typeTokenInternal, constructorBuilder.MetadataToken);
211 }
213 {
214 if (usingRef)
215 {
216 throw new InvalidOperationException();
217 }
219 return GetMemberRef(con.DeclaringType.Module, typeTokenInternal, constructorOnTypeBuilderInstantiation.MetadataToken);
220 }
221 if (con is RuntimeConstructorInfo method && !con.ReflectedType.IsArray)
222 {
225 }
226 ParameterInfo[] parameters = con.GetParameters();
227 if (parameters == null)
228 {
230 }
231 Type[] array = new Type[parameters.Length];
232 Type[][] array2 = new Type[parameters.Length][];
233 Type[][] array3 = new Type[parameters.Length][];
234 for (int i = 0; i < parameters.Length; i++)
235 {
236 if (parameters[i] == null)
237 {
239 }
240 array[i] = parameters[i].ParameterType;
241 array2[i] = parameters[i].GetRequiredCustomModifiers();
242 array3[i] = parameters[i].GetOptionalCustomModifiers();
243 }
245 SignatureHelper methodSigHelper = SignatureHelper.GetMethodSigHelper(this, con.CallingConvention, null, null, null, array, array2, array3);
246 int length;
247 byte[] signature = methodSigHelper.InternalGetSignature(out length);
249 }
250
251 internal void Init(string strModuleName)
252 {
255 }
256
258 {
259 return new ModuleHandle(InternalModule);
260 }
261
263 {
265 if (moduleBuilder != null)
266 {
267 return moduleBuilder.InternalModule;
268 }
269 return m as RuntimeModule;
270 }
271
273 {
274 int cGenericParameters = 0;
275 if (method.IsGenericMethod)
276 {
277 if (!method.IsGenericMethodDefinition)
278 {
279 throw new InvalidOperationException();
280 }
281 cGenericParameters = method.GetGenericArguments().Length;
282 }
283 if (optionalParameterTypes != null && (method.CallingConvention & CallingConventions.VarArgs) == 0)
284 {
286 }
289 if (method.DeclaringType.IsGenericType)
290 {
293 }
294 else
295 {
297 }
298 if (optionalParameterTypes != null && optionalParameterTypes.Length != 0)
299 {
300 memberRefSignature.AddSentinel();
301 memberRefSignature.AddArguments(optionalParameterTypes, null, null);
302 }
303 int length;
304 byte[] signature = memberRefSignature.InternalGetSignature(out length);
305 int tr;
306 if (!method.DeclaringType.IsGenericType)
307 {
308 tr = ((!method.Module.Equals(this)) ? GetTypeToken(method.DeclaringType) : ((!(methodInfo != null)) ? GetConstructorToken(method as ConstructorInfo) : GetMethodToken(methodInfo)));
309 }
310 else
311 {
312 int length2;
313 byte[] signature2 = SignatureHelper.GetTypeSigToken(this, method.DeclaringType).InternalGetSignature(out length2);
315 }
317 }
318
329
330 [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:RequiresUnreferencedCode", Justification = "Module.ResolveMethod is marked as RequiresUnreferencedCode because it relies on tokens which are not guaranteed to be stable across trimming. So if somebody hardcodes a token it could break. The usage here is not like that as all these tokens come from existing metadata loaded from some IL and so trimming has no effect (the tokens are read AFTER trimming occured).")]
332 {
335 {
336 return methodOnTypeBuilderInstantiation.m_method;
337 }
339 {
341 }
343 {
344 return methodBase;
345 }
346 if (methodBase.IsGenericMethod)
347 {
348 MethodBase genericMethodDefinition = methodInfo.GetGenericMethodDefinition();
349 return genericMethodDefinition.Module.ResolveMethod(methodBase.MetadataToken, genericMethodDefinition.DeclaringType?.GetGenericArguments(), genericMethodDefinition.GetGenericArguments());
350 }
351 return methodBase.Module.ResolveMethod(methodBase.MetadataToken, methodBase.DeclaringType?.GetGenericArguments(), null);
352 }
353
355 {
358 {
360 {
362 {
364 {
366 {
367 return constructorBuilder2.GetMethodSignature();
368 }
371 }
372 }
373 else
374 {
376 {
377 return methodBuilder2.GetMethodSignature();
378 }
381 }
382 ParameterInfo[] parametersNoCopy = method.GetParametersNoCopy();
383 Type[] array = new Type[parametersNoCopy.Length];
384 Type[][] array2 = new Type[array.Length][];
385 Type[][] array3 = new Type[array.Length][];
386 for (int i = 0; i < parametersNoCopy.Length; i++)
387 {
388 array[i] = parametersNoCopy[i].ParameterType;
389 array2[i] = parametersNoCopy[i].GetRequiredCustomModifiers();
390 array3[i] = parametersNoCopy[i].GetOptionalCustomModifiers();
391 }
392 ParameterInfo parameterInfo = ((method is MethodInfo methodInfo) ? methodInfo.ReturnParameter : null);
393 return SignatureHelper.GetMethodSigHelper(this, method.CallingConvention, cGenericParameters, parameterInfo?.ParameterType, parameterInfo?.GetRequiredCustomModifiers(), parameterInfo?.GetOptionalCustomModifiers(), array, array2, array3);
394 }
395 return constructorBuilder.GetMethodSignature();
396 }
397 return methodBuilder.GetMethodSignature();
398 }
399
400 public override bool Equals(object? obj)
401 {
402 return InternalModule.Equals(obj);
403 }
404
405 public override int GetHashCode()
406 {
408 }
409
410 public override object[] GetCustomAttributes(bool inherit)
411 {
413 }
414
415 public override object[] GetCustomAttributes(Type attributeType, bool inherit)
416 {
417 return InternalModule.GetCustomAttributes(attributeType, inherit);
418 }
419
420 public override bool IsDefined(Type attributeType, bool inherit)
421 {
422 return InternalModule.IsDefined(attributeType, inherit);
423 }
424
429
430 [RequiresUnreferencedCode("Types might be removed")]
431 public override Type[] GetTypes()
432 {
433 lock (SyncRoot)
434 {
435 return GetTypesNoLock();
436 }
437 }
438
439 internal Type[] GetTypesNoLock()
440 {
442 int num = 0;
443 foreach (Type value in _typeBuilderDict.Values)
444 {
446 TypeBuilder typeBuilder = ((!(enumBuilder != null)) ? ((TypeBuilder)value) : enumBuilder.m_typeBuilder);
447 if (typeBuilder.IsCreated())
448 {
449 array[num++] = typeBuilder.UnderlyingSystemType;
450 }
451 else
452 {
453 array[num++] = value;
454 }
455 }
456 return array;
457 }
458
459 [RequiresUnreferencedCode("Types might be removed")]
460 public override Type? GetType(string className)
461 {
462 return GetType(className, throwOnError: false, ignoreCase: false);
463 }
464
465 [RequiresUnreferencedCode("Types might be removed")]
466 public override Type? GetType(string className, bool ignoreCase)
467 {
468 return GetType(className, throwOnError: false, ignoreCase);
469 }
470
471 [RequiresUnreferencedCode("Types might be removed")]
472 public override Type? GetType(string className, bool throwOnError, bool ignoreCase)
473 {
474 lock (SyncRoot)
475 {
477 }
478 }
479
480 [RequiresUnreferencedCode("Types might be removed")]
482 {
484 if (type != null)
485 {
486 return type;
487 }
488 string text = null;
489 string text2 = null;
490 int num = 0;
491 while (num <= className.Length)
492 {
493 int num2 = className.AsSpan(num).IndexOfAny('[', '*', '&');
494 if (num2 == -1)
495 {
496 text = className;
497 text2 = null;
498 break;
499 }
500 num2 += num;
501 int num3 = 0;
502 int num4 = num2 - 1;
503 while (num4 >= 0 && className[num4] == '\\')
504 {
505 num3++;
506 num4--;
507 }
508 if (num3 % 2 == 1)
509 {
510 num = num2 + 1;
511 continue;
512 }
513 text = className.Substring(0, num2);
514 text2 = className.Substring(num2);
515 break;
516 }
517 if (text == null)
518 {
519 text = className;
520 text2 = null;
521 }
522 text = text.Replace("\\\\", "\\").Replace("\\[", "[").Replace("\\*", "*")
523 .Replace("\\&", "&");
524 if (text2 != null)
525 {
527 }
528 if (type == null)
529 {
531 if (type == null && Assembly is AssemblyBuilder)
532 {
535 for (int i = 0; i < count; i++)
536 {
537 if (!(type == null))
538 {
539 break;
540 }
542 type = moduleBuilder.FindTypeBuilderWithName(text, ignoreCase);
543 }
544 }
545 if (type == null)
546 {
547 return null;
548 }
549 }
550 if (text2 == null)
551 {
552 return type;
553 }
554 return GetType(text2, type);
555 }
556
557 [RequiresUnreferencedCode("Trimming changes metadata tokens")]
558 public override byte[] ResolveSignature(int metadataToken)
559 {
561 }
562
563 [RequiresUnreferencedCode("Trimming changes metadata tokens")]
568
569 [RequiresUnreferencedCode("Trimming changes metadata tokens")]
574
575 [RequiresUnreferencedCode("Trimming changes metadata tokens")]
580
581 [RequiresUnreferencedCode("Trimming changes metadata tokens")]
586
587 [RequiresUnreferencedCode("Trimming changes metadata tokens")]
588 public override string ResolveString(int metadataToken)
589 {
591 }
592
597
598 public override bool IsResource()
599 {
600 return InternalModule.IsResource();
601 }
602
603 [RequiresUnreferencedCode("Fields might be removed")]
608
609 [RequiresUnreferencedCode("Fields might be removed")]
610 public override FieldInfo? GetField(string name, BindingFlags bindingAttr)
611 {
612 return InternalModule.GetField(name, bindingAttr);
613 }
614
615 [RequiresUnreferencedCode("Methods might be removed")]
620
621 [RequiresUnreferencedCode("Methods might be removed")]
626
627 public TypeBuilder DefineType(string name)
628 {
629 lock (SyncRoot)
630 {
631 return DefineTypeNoLock(name, TypeAttributes.NotPublic, null, null, PackingSize.Unspecified, 0);
632 }
633 }
634
636 {
637 lock (SyncRoot)
638 {
639 return DefineTypeNoLock(name, attr, null, null, PackingSize.Unspecified, 0);
640 }
641 }
642
644 {
645 lock (SyncRoot)
646 {
648 return DefineTypeNoLock(name, attr, parent, null, PackingSize.Unspecified, 0);
649 }
650 }
651
653 {
654 lock (SyncRoot)
655 {
656 return DefineTypeNoLock(name, attr, parent, null, PackingSize.Unspecified, typesize);
657 }
658 }
659
661 {
662 lock (SyncRoot)
663 {
664 return DefineTypeNoLock(name, attr, parent, null, packingSize, typesize);
665 }
666 }
667
669 {
670 lock (SyncRoot)
671 {
672 return DefineTypeNoLock(name, attr, parent, interfaces, PackingSize.Unspecified, 0);
673 }
674 }
675
677 {
678 return new TypeBuilder(name, attr, parent, interfaces, this, packingSize, typesize, null);
679 }
680
682 {
683 lock (SyncRoot)
684 {
685 return DefineTypeNoLock(name, attr, parent, packsize);
686 }
687 }
688
690 {
691 return new TypeBuilder(name, attr, parent, null, this, packsize, 0, null);
692 }
693
704
706 {
707 return new EnumBuilder(name, underlyingType, visibility, this);
708 }
709
710 [RequiresUnreferencedCode("P/Invoke marshalling may dynamically access members that could be trimmed.")]
715
716 [RequiresUnreferencedCode("P/Invoke marshalling may dynamically access members that could be trimmed.")]
730
732 {
733 return DefineGlobalMethod(name, attributes, CallingConventions.Standard, returnType, parameterTypes);
734 }
735
737 {
738 return DefineGlobalMethod(name, attributes, callingConvention, returnType, null, null, parameterTypes, null, null);
739 }
740
748
773
775 {
776 lock (SyncRoot)
777 {
779 }
780 }
781
783 {
785 {
787 }
789 _moduleData._hasGlobalBeenCreated = true;
790 }
791
792 public FieldBuilder DefineInitializedData(string name, byte[] data, FieldAttributes attributes)
793 {
794 lock (SyncRoot)
795 {
796 return DefineInitializedDataNoLock(name, data, attributes);
797 }
798 }
799
800 private FieldBuilder DefineInitializedDataNoLock(string name, byte[] data, FieldAttributes attributes)
801 {
803 {
805 }
806 return _moduleData._globalTypeBuilder.DefineInitializedData(name, data, attributes);
807 }
808
809 public FieldBuilder DefineUninitializedData(string name, int size, FieldAttributes attributes)
810 {
811 lock (SyncRoot)
812 {
813 return DefineUninitializedDataNoLock(name, size, attributes);
814 }
815 }
816
817 private FieldBuilder DefineUninitializedDataNoLock(string name, int size, FieldAttributes attributes)
818 {
820 {
822 }
823 return _moduleData._globalTypeBuilder.DefineUninitializedData(name, size, attributes);
824 }
825
827 {
829 }
830
838
839 internal int GetTypeToken(Type type)
840 {
842 }
843
845 {
846 if (type == null)
847 {
848 throw new ArgumentNullException("type");
849 }
851 if (type.IsByRef)
852 {
854 }
855 if ((type.IsGenericType && (!type.IsGenericTypeDefinition || !getGenericDefinition)) || type.IsGenericParameter || type.IsArray || type.IsPointer)
856 {
857 int length;
858 byte[] signature = SignatureHelper.GetTypeSigToken(this, type).InternalGetSignature(out length);
860 }
861 Module module = type.Module;
862 if (module.Equals(this))
863 {
864 TypeBuilder typeBuilder = null;
866 typeBuilder = ((enumBuilder != null) ? enumBuilder.m_typeBuilder : (type as TypeBuilder));
867 if (typeBuilder != null)
868 {
869 return typeBuilder.TypeToken;
870 }
872 {
873 return genericTypeParameterBuilder.MetadataToken;
874 }
875 return GetTypeRefNested(type, this, string.Empty);
876 }
878 string strRefedModuleFileName = string.Empty;
879 if (module.Assembly.Equals(Assembly))
880 {
881 if (moduleBuilder == null)
882 {
884 }
885 strRefedModuleFileName = moduleBuilder._moduleData._moduleName;
886 }
888 }
889
891 {
892 lock (SyncRoot)
893 {
895 }
896 }
897
899 {
900 if (method == null)
901 {
902 throw new ArgumentNullException("method");
903 }
904 int num = 0;
905 int tr;
907 {
908 if (method.Module.Equals(this))
909 {
910 return metadataToken;
911 }
912 if (method.DeclaringType == null)
913 {
915 }
916 tr = (getGenericTypeDefinition ? GetTypeToken(method.DeclaringType) : GetTypeTokenInternal(method.DeclaringType));
917 return GetMemberRef(method.DeclaringType.Module, tr, metadataToken);
918 }
920 {
921 return GetMemberRefToken(method, null);
922 }
924 {
925 if (symbolMethod.GetModule() == this)
926 {
927 return symbolMethod.MetadataToken;
928 }
929 return symbolMethod.GetToken(this);
930 }
931 Type declaringType = method.DeclaringType;
932 if (declaringType == null)
933 {
935 }
936 if (declaringType.IsArray)
937 {
938 ParameterInfo[] parameters = method.GetParameters();
939 Type[] array = new Type[parameters.Length];
940 for (int i = 0; i < parameters.Length; i++)
941 {
942 array[i] = parameters[i].ParameterType;
943 }
944 return GetArrayMethodToken(declaringType, method.Name, method.CallingConvention, method.ReturnType, array);
945 }
947 {
950 }
951 ParameterInfo[] parameters2 = method.GetParameters();
952 Type[] array2 = new Type[parameters2.Length];
953 Type[][] array3 = new Type[array2.Length][];
954 Type[][] array4 = new Type[array2.Length][];
955 for (int j = 0; j < parameters2.Length; j++)
956 {
957 array2[j] = parameters2[j].ParameterType;
958 array3[j] = parameters2[j].GetRequiredCustomModifiers();
959 array4[j] = parameters2[j].GetOptionalCustomModifiers();
960 }
963 try
964 {
965 methodSigHelper = SignatureHelper.GetMethodSigHelper(this, method.CallingConvention, method.ReturnType, method.ReturnParameter.GetRequiredCustomModifiers(), method.ReturnParameter.GetOptionalCustomModifiers(), array2, array3, array4);
966 }
968 {
970 }
971 int length;
972 byte[] signature = methodSigHelper.InternalGetSignature(out length);
974 }
975
977 {
979 if (method.IsGenericMethod)
980 {
982 bool isGenericMethodDefinition = methodInfo.IsGenericMethodDefinition;
984 {
985 methodInfo2 = methodInfo.GetGenericMethodDefinition();
986 }
987 int num = ((Equals(methodInfo2.Module) && (!(methodInfo2.DeclaringType != null) || !methodInfo2.DeclaringType.IsGenericType)) ? GetMethodToken(methodInfo2) : GetMemberRefToken(methodInfo2, null));
989 {
990 return num;
991 }
992 int length;
993 byte[] signature = SignatureHelper.GetMethodSpecSigHelper(this, methodInfo.GetGenericArguments()).InternalGetSignature(out length);
994 ModuleBuilder module = this;
996 }
997 if ((method.CallingConvention & CallingConventions.VarArgs) == 0 && (method.DeclaringType == null || !method.DeclaringType.IsGenericType))
998 {
999 if (methodInfo != null)
1000 {
1001 return GetMethodToken(methodInfo);
1002 }
1004 }
1006 }
1007
1015
1017 {
1018 if (arrayClass == null)
1019 {
1020 throw new ArgumentNullException("arrayClass");
1021 }
1022 if (methodName == null)
1023 {
1024 throw new ArgumentNullException("methodName");
1025 }
1026 if (methodName.Length == 0)
1027 {
1028 throw new ArgumentException(SR.Argument_EmptyName, "methodName");
1029 }
1030 if (!arrayClass.IsArray)
1031 {
1033 }
1037 int length;
1038 byte[] signature = methodSigHelper.InternalGetSignature(out length);
1040 ModuleBuilder module = this;
1042 }
1043
1051
1053 {
1055 }
1056
1058 {
1059 lock (SyncRoot)
1060 {
1061 return GetFieldTokenNoLock(field);
1062 }
1063 }
1064
1066 {
1067 if (field == null)
1068 {
1069 throw new ArgumentNullException("field");
1070 }
1071 int num = 0;
1074 {
1075 if (field.DeclaringType != null && field.DeclaringType.IsGenericType)
1076 {
1077 int length;
1078 byte[] signature = SignatureHelper.GetTypeSigToken(this, field.DeclaringType).InternalGetSignature(out length);
1080 return GetMemberRef(this, tokenFromTypeSpec, fieldBuilder.MetadataToken);
1081 }
1082 if (fieldBuilder.Module.Equals(this))
1083 {
1084 return fieldBuilder.MetadataToken;
1085 }
1086 if (field.DeclaringType == null)
1087 {
1089 }
1091 return GetMemberRef(field.ReflectedType.Module, tokenFromTypeSpec, fieldBuilder.MetadataToken);
1092 }
1094 {
1095 if (field.DeclaringType == null)
1096 {
1098 }
1099 if (field.DeclaringType != null && field.DeclaringType.IsGenericType)
1100 {
1101 int length2;
1102 byte[] signature2 = SignatureHelper.GetTypeSigToken(this, field.DeclaringType).InternalGetSignature(out length2);
1104 return GetMemberRefOfFieldInfo(tokenFromTypeSpec, field.DeclaringType.GetTypeHandleInternal(), runtimeField);
1105 }
1107 return GetMemberRefOfFieldInfo(tokenFromTypeSpec, field.DeclaringType.GetTypeHandleInternal(), runtimeField);
1108 }
1110 {
1111 int length3;
1112 byte[] signature3 = SignatureHelper.GetTypeSigToken(this, field.DeclaringType).InternalGetSignature(out length3);
1114 return GetMemberRef(fieldInfo.ReflectedType.Module, tokenFromTypeSpec, fieldOnTypeBuilderInstantiation.MetadataToken);
1115 }
1118 fieldSigHelper.AddArgument(field.FieldType, field.GetRequiredCustomModifiers(), field.GetOptionalCustomModifiers());
1119 int length4;
1120 byte[] signature4 = fieldSigHelper.InternalGetSignature(out length4);
1122 }
1123
1124 internal int GetStringConstant(string str)
1125 {
1126 if (str == null)
1127 {
1128 throw new ArgumentNullException("str");
1129 }
1130 ModuleBuilder module = this;
1131 return GetStringConstant(new QCallModule(ref module), str, str.Length);
1132 }
1133
1135 {
1136 if (sigHelper == null)
1137 {
1138 throw new ArgumentNullException("sigHelper");
1139 }
1140 int length;
1141 byte[] signature = sigHelper.InternalGetSignature(out length);
1142 ModuleBuilder module = this;
1144 }
1145
1147 {
1148 if (con == null)
1149 {
1150 throw new ArgumentNullException("con");
1151 }
1152 if (binaryAttribute == null)
1153 {
1154 throw new ArgumentNullException("binaryAttribute");
1155 }
1157 }
1158
1160 {
1161 if (customBuilder == null)
1162 {
1163 throw new ArgumentNullException("customBuilder");
1164 }
1165 customBuilder.CreateCustomAttribute(this, 1);
1166 }
1167}
bool TryGetValue(TKey key, [MaybeNullWhen(false)] out TValue value)
void Add(TKey key, TValue value)
static void KeepAlive(object? obj)
Definition GC.cs:180
Definition GC.cs:8
readonly List< ModuleBuilder > _moduleBuilderList
static void CheckContext(params Type[][] typess)
ModuleBuilder GetModuleBuilder(InternalModuleBuilder module)
override bool IsDefined(Type attributeType, bool inherit)
static int GetTokenFromTypeSpec(QCallModule pModule, byte[] signature, int length)
Type GetTypeNoLock(string className, bool throwOnError, bool ignoreCase)
void CheckTypeNameConflict(string strTypeName, Type enclosingType)
TypeBuilder DefineTypeNoLock(string name, TypeAttributes attr, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type parent, Type[] interfaces, PackingSize packingSize, int typesize)
int GetConstructorToken(ConstructorInfo con)
int GetMethodTokenInternal(MethodBase method, Type[] optionalParameterTypes, bool useMethodDef)
int GetTypeRefNested(Type type, Module refedModule, string strRefedModuleFileName)
override void GetPEKind(out PortableExecutableKinds peKind, out ImageFileMachine machine)
override FieldInfo[] GetFields(BindingFlags bindingFlags)
FieldBuilder DefineInitializedDataNoLock(string name, byte[] data, FieldAttributes attributes)
FieldBuilder DefineUninitializedDataNoLock(string name, int size, FieldAttributes attributes)
void SetCustomAttribute(ConstructorInfo con, byte[] binaryAttribute)
static int GetMemberRefOfFieldInfo(QCallModule module, int tkType, QCallTypeHandle declaringType, int tkField)
readonly AssemblyBuilder _assemblyBuilder
int GetTypeTokenInternal(Type type, bool getGenericDefinition)
override? FieldInfo GetField(string name, BindingFlags bindingAttr)
static MethodBase GetGenericMethodBaseDefinition(MethodBase methodBase)
TypeBuilder DefineType(string name, TypeAttributes attr, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type? parent, int typesize)
TypeBuilder DefineType(string name)
override? Type GetType(string className)
int GetArrayMethodTokenNoLock(Type arrayClass, string methodName, CallingConventions callingConvention, Type returnType, Type[] parameterTypes)
static int GetArrayMethodToken(QCallModule module, int tkTypeSpec, string methodName, byte[] signature, int sigLength)
static int GetMemberRef(QCallModule module, QCallModule refedModule, int tr, int defToken)
int GetMemberRefToken(MethodBase method, Type[] optionalParameterTypes)
FieldBuilder DefineInitializedData(string name, byte[] data, FieldAttributes attributes)
MethodBuilder DefineGlobalMethod(string name, MethodAttributes attributes, CallingConventions callingConvention, Type? returnType, Type[]? parameterTypes)
SignatureHelper GetMemberRefSignature(CallingConventions call, Type returnType, Type[] parameterTypes, Type[][] requiredCustomModifiers, Type[][] optionalCustomModifiers, Type[] optionalParameterTypes, int cGenericParameters)
static int GetStringConstant(QCallModule module, string str, int length)
TypeBuilder DefineType(string name, TypeAttributes attr, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type? parent, Type[]? interfaces)
int GetTypeTokenWorkerNoLock(Type type, bool getGenericDefinition)
override? MethodInfo GetMethodImpl(string name, BindingFlags bindingAttr, Binder? binder, CallingConventions callConvention, Type[]? types, ParameterModifier[]? modifiers)
MethodBuilder DefinePInvokeMethod(string name, string dllName, string entryName, MethodAttributes attributes, CallingConventions callingConvention, Type? returnType, Type[]? parameterTypes, CallingConvention nativeCallConv, CharSet nativeCharSet)
void Init(string strModuleName)
override object[] GetCustomAttributes(bool inherit)
int GetMemberRefOfMethodInfo(int tr, RuntimeConstructorInfo method)
TypeBuilder DefineType(string name, TypeAttributes attr, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type? parent)
FieldBuilder DefineUninitializedData(string name, int size, FieldAttributes attributes)
MethodBuilder DefineGlobalMethod(string name, MethodAttributes attributes, CallingConventions callingConvention, Type? returnType, Type[]? requiredReturnTypeCustomModifiers, Type[]? optionalReturnTypeCustomModifiers, Type[]? parameterTypes, Type[][]? requiredParameterTypeCustomModifiers, Type[][]? optionalParameterTypeCustomModifiers)
override MethodInfo[] GetMethods(BindingFlags bindingFlags)
static int GetMemberRefOfMethodInfo(QCallModule module, int tr, RuntimeMethodHandleInternal method)
override ModuleHandle GetModuleHandleImpl()
InternalModuleBuilder InternalModule
int GetMethodTokenNoLock(MethodInfo method, bool getGenericTypeDefinition)
int GetMemberRefFromSignature(int tr, string methodName, byte[] signature, int length)
int InternalGetConstructorToken(ConstructorInfo con, bool usingRef)
int GetTokenFromTypeSpec(byte[] signature, int length)
MethodBuilder DefineGlobalMethod(string name, MethodAttributes attributes, Type? returnType, Type[]? parameterTypes)
EnumBuilder DefineEnum(string name, TypeAttributes visibility, Type underlyingType)
override string ResolveString(int metadataToken)
static int GetTypeRef(QCallModule module, string strFullName, QCallModule refedModule, string strRefedModuleFileName, int tkResolution)
InternalModuleBuilder _internalModuleBuilder
int GetMemberRefOfMethodInfo(int tr, RuntimeMethodInfo method)
override? MethodBase ResolveMethod(int metadataToken, Type[]? genericTypeArguments, Type[]? genericMethodArguments)
ModuleBuilder(AssemblyBuilder assemblyBuilder, InternalModuleBuilder internalModuleBuilder)
MethodBuilder DefineGlobalMethodNoLock(string name, MethodAttributes attributes, CallingConventions callingConvention, Type returnType, Type[] requiredReturnTypeCustomModifiers, Type[] optionalReturnTypeCustomModifiers, Type[] parameterTypes, Type[][] requiredParameterTypeCustomModifiers, Type[][] optionalParameterTypeCustomModifiers)
int GetMemberRefOfFieldInfo(int tkType, RuntimeTypeHandle declaringType, RuntimeFieldInfo runtimeField)
static Type GetType(string strFormat, Type baseType)
static RuntimeModule GetRuntimeModuleFromModule(Module m)
override byte[] ResolveSignature(int metadataToken)
int GetArrayMethodToken(Type arrayClass, string methodName, CallingConventions callingConvention, Type returnType, Type[] parameterTypes)
void AddType(string name, Type type)
Dictionary< string, Type > _typeBuilderDict
override Type ResolveType(int metadataToken, Type[]? genericTypeArguments, Type[]? genericMethodArguments)
void SetCustomAttribute(CustomAttributeBuilder customBuilder)
int GetMemberRef(Module refedModule, int tr, int defToken)
static string UnmangleTypeName(string typeName)
MethodInfo GetArrayMethod(Type arrayClass, string methodName, CallingConventions callingConvention, Type? returnType, Type[]? parameterTypes)
TypeBuilder DefineType(string name, TypeAttributes attr)
EnumBuilder DefineEnumNoLock(string name, TypeAttributes visibility, Type underlyingType)
static int GetMemberRefFromSignature(QCallModule module, int tr, string methodName, byte[] signature, int length)
TypeBuilder DefineTypeNoLock(string name, TypeAttributes attr, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type parent, PackingSize packsize)
TypeBuilder DefineType(string name, TypeAttributes attr, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type? parent, PackingSize packingSize, int typesize)
override? Type GetType(string className, bool throwOnError, bool ignoreCase)
int GetMethodToken(MethodInfo method)
virtual Type FindTypeBuilderWithName(string strTypeName, bool ignoreCase)
override? FieldInfo ResolveField(int metadataToken, Type[]? genericTypeArguments, Type[]? genericMethodArguments)
int GetSignatureToken(SignatureHelper sigHelper)
TypeBuilder DefineType(string name, TypeAttributes attr, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type? parent, PackingSize packsize)
override? MemberInfo ResolveMember(int metadataToken, Type[]? genericTypeArguments, Type[]? genericMethodArguments)
MethodBuilder DefinePInvokeMethod(string name, string dllName, MethodAttributes attributes, CallingConventions callingConvention, Type? returnType, Type[]? parameterTypes, CallingConvention nativeCallConv, CharSet nativeCharSet)
static void SetFieldRVAContent(QCallModule module, int fdToken, byte[] data, int length)
SignatureHelper GetMemberRefSignature(MethodBase method, int cGenericParameters)
override bool Equals(object? obj)
override object[] GetCustomAttributes(Type attributeType, bool inherit)
override? Type GetType(string className, bool ignoreCase)
override IList< CustomAttributeData > GetCustomAttributesData()
static SignatureHelper GetTypeSigToken(Module module, Type type)
static SignatureHelper GetFieldSigHelper(Module? mod)
static SignatureHelper GetMethodSigHelper(Module? mod, Type? returnType, Type[]? parameterTypes)
static SignatureHelper GetMethodSpecSigHelper(Module scope, Type[] inst)
static Type FormCompoundType(string format, Type baseType, int curIndex)
static int DefineMethod(QCallModule module, int tkParent, string name, byte[] signature, int sigLength, MethodAttributes attributes)
static int GetTokenFromSig(QCallModule module, byte[] signature, int sigLength)
FieldBuilder DefineInitializedData(string name, byte[] data, FieldAttributes attributes)
FieldBuilder DefineUninitializedData(string name, int size, FieldAttributes attributes)
static void DefineCustomAttribute(QCallModule module, int tkAssociate, int tkConstructor, byte[] attr, int attrLength)
static int DefineMethodSpec(QCallModule module, int tkParent, byte[] signature, int sigLength)
MethodBuilder DefinePInvokeMethod(string name, string dllName, MethodAttributes attributes, CallingConventions callingConvention, Type? returnType, Type[]? parameterTypes, CallingConvention nativeCallConv, CharSet nativeCharSet)
ModuleHandle ModuleHandle
Definition Module.cs:64
virtual Type[] GetRequiredCustomModifiers()
virtual Type[] GetOptionalCustomModifiers()
unsafe override MethodBase ResolveMethod(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
static bool IsResource(RuntimeModule module)
static void GetType(QCallModule module, string className, bool throwOnError, bool ignoreCase, ObjectHandleOnStack type, ObjectHandleOnStack keepAlive)
override FieldInfo[] GetFields(BindingFlags bindingFlags)
unsafe override FieldInfo ResolveField(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
override IList< CustomAttributeData > GetCustomAttributesData()
override string ResolveString(int metadataToken)
override object[] GetCustomAttributes(bool inherit)
unsafe override MemberInfo ResolveMember(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
override MethodInfo[] GetMethods(BindingFlags bindingFlags)
MethodInfo GetMethodInternal(string name, BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers)
override Type ResolveType(int metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
override FieldInfo GetField(string name, BindingFlags bindingAttr)
override void GetPEKind(out PortableExecutableKinds peKind, out ImageFileMachine machine)
override byte[] ResolveSignature(int metadataToken)
override bool IsDefined(Type attributeType, bool inherit)
static string Argument_GlobalFunctionHasToBeStatic
Definition SR.cs:612
static string Argument_CannotGetTypeTokenForByRef
Definition SR.cs:518
static string InvalidOperation_NotAVarArgCallingConvention
Definition SR.cs:1482
static string Argument_InvalidConstructorInfo
Definition SR.cs:658
static string InvalidOperation_CannotImportGlobalFromDifferentModule
Definition SR.cs:1414
static string InvalidOperation_NotADebugModule
Definition SR.cs:1478
static string Argument_HasToBeArrayClass
Definition SR.cs:614
static string Argument_EmptyName
Definition SR.cs:584
static string Argument_DuplicateTypeName
Definition SR.cs:576
static string InvalidOperation_GlobalsHaveBeenCreated
Definition SR.cs:1452
Definition SR.cs:7