Advertisement
EddyCZ

testDynMethods_Resolver

Jan 2nd, 2019
268
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.91 KB | None | 0 0
  1. internal static void Resolve(ref byte[] buffer, int[] index, Type[] resTypes, string[] resVars, Type[][] funParamTypes, DynamicILInfo dil)
  2. {
  3.     int value = 0;
  4.     for (int i = 0; i < index.Length; i++)
  5.     {
  6.         MemberInfo[] member = resTypes[i].GetMember(resVars[i], BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
  7.         bool flag = false;
  8.         if (member.Length == 0)
  9.         {
  10.             value = dil.GetTokenFor(resTypes[i].TypeHandle);
  11.             flag = true;
  12.         }
  13.         else
  14.         {
  15.             int j = 0;
  16.             while (j < member.Length)
  17.             {
  18.                 MemberTypes memberType = member[j].MemberType;
  19.                 if (memberType == MemberTypes.Constructor)
  20.                 {
  21.                     goto IL_7C;
  22.                 }
  23.                 if (memberType == MemberTypes.Field)
  24.                 {
  25.                     FieldInfo fieldInfo = member[j] as FieldInfo;
  26.                     value = dil.GetTokenFor(fieldInfo.FieldHandle);
  27.                     flag = true;
  28.                     goto IL_F0;
  29.                 }
  30.                 if (memberType != MemberTypes.Method)
  31.                 {
  32.                     goto IL_F0;
  33.                 }
  34.                 goto IL_7C;
  35.                 IL_F3:
  36.                 j++;
  37.                 continue;
  38.                 IL_7C:
  39.                 Type[] array = funParamTypes[i];
  40.                 MethodBase methodBase = member[j] as MethodBase;
  41.                 ParameterInfo[] parameters = methodBase.GetParameters();
  42.                 if (array.Length != parameters.Length)
  43.                 {
  44.                     goto IL_F3;
  45.                 }
  46.                 bool flag2 = true;
  47.                 for (int k = 0; k < parameters.Length; k++)
  48.                 {
  49.                     if (parameters[k].ParameterType != array[parameters[k].Position])
  50.                     {
  51.                         flag2 = false;
  52.                         break;
  53.                     }
  54.                 }
  55.                 if (!flag2)
  56.                 {
  57.                     goto IL_F3;
  58.                 }
  59.                 value = dil.GetTokenFor((member[j] as MethodBase).MethodHandle);
  60.                 flag = true;
  61.                 IL_F0:
  62.                 if (!flag)
  63.                 {
  64.                     goto IL_F3;
  65.                 }
  66.                 break;
  67.             }
  68.         }
  69.         if (!flag)
  70.         {
  71.             throw new ApplicationException(string.Format("Can not resolve token for type {0}, value {0}", resTypes[i].ToString(), resVars[i]));
  72.         }
  73.         byte[] bytes = BitConverter.GetBytes(value);
  74.         Buffer.BlockCopy(bytes, 0, buffer, index[i], bytes.Length);
  75.     }
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement