Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ GetMethodTokenNoLock()

int System.Reflection.Emit.ModuleBuilder.GetMethodTokenNoLock ( MethodInfo method,
bool getGenericTypeDefinition )
inlineprivate

Definition at line 898 of file ModuleBuilder.cs.

899 {
900 if (method == null)
901 {
902 throw new ArgumentNullException("method");
903 }
904 int num = 0;
905 int tr;
906 if (method is MethodBuilder { MetadataToken: var metadataToken })
907 {
908 if (method.Module.Equals(this))
909 {
910 return metadataToken;
911 }
912 if (method.DeclaringType == null)
913 {
914 throw new InvalidOperationException(SR.InvalidOperation_CannotImportGlobalFromDifferentModule);
915 }
916 tr = (getGenericTypeDefinition ? GetTypeToken(method.DeclaringType) : GetTypeTokenInternal(method.DeclaringType));
917 return GetMemberRef(method.DeclaringType.Module, tr, metadataToken);
918 }
919 if (method is MethodOnTypeBuilderInstantiation)
920 {
921 return GetMemberRefToken(method, null);
922 }
923 if (method is SymbolMethod symbolMethod)
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 {
934 throw new InvalidOperationException(SR.InvalidOperation_CannotImportGlobalFromDifferentModule);
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 }
946 if (method is RuntimeMethodInfo method2)
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 }
962 SignatureHelper methodSigHelper;
963 try
964 {
965 methodSigHelper = SignatureHelper.GetMethodSigHelper(this, method.CallingConvention, method.ReturnType, method.ReturnParameter.GetRequiredCustomModifiers(), method.ReturnParameter.GetOptionalCustomModifiers(), array2, array3, array4);
966 }
967 catch (NotImplementedException)
968 {
969 methodSigHelper = SignatureHelper.GetMethodSigHelper(this, method.ReturnType, array2);
970 }
971 int length;
972 byte[] signature = methodSigHelper.InternalGetSignature(out length);
974 }
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)
static int GetMemberRefOfMethodInfo(QCallModule module, int tr, RuntimeMethodHandleInternal method)
static int GetMemberRefFromSignature(QCallModule module, int tr, string methodName, byte[] signature, int length)

References System.array, System.Reflection.Emit.ModuleBuilder.GetArrayMethodToken(), System.Reflection.Emit.ModuleBuilder.GetMemberRef(), System.Reflection.Emit.ModuleBuilder.GetMemberRefFromSignature(), System.Reflection.Emit.ModuleBuilder.GetMemberRefOfMethodInfo(), System.Reflection.Emit.ModuleBuilder.GetMemberRefToken(), System.Reflection.Emit.SignatureHelper.GetMethodSigHelper(), System.Reflection.Emit.ModuleBuilder.GetTypeToken(), System.Reflection.Emit.ModuleBuilder.GetTypeTokenInternal(), System.SR.InvalidOperation_CannotImportGlobalFromDifferentModule, System.length, System.Reflection.Emit.ModuleBuilder.MetadataToken, and System.Reflection.ParameterInfo.ParameterType.

Referenced by System.Reflection.Emit.ModuleBuilder.GetMethodToken().