192 {
193 typeHandle = default(IntPtr);
194 methodHandle = default(IntPtr);
195 fieldHandle = default(IntPtr);
198 {
199 throw new InvalidProgramException();
200 }
201 if (
obj is RuntimeTypeHandle)
202 {
203 typeHandle = ((RuntimeTypeHandle)
obj).Value;
204 return;
205 }
206 if (
obj is RuntimeMethodHandle)
207 {
208 methodHandle = ((RuntimeMethodHandle)
obj).Value;
209 return;
210 }
211 if (
obj is RuntimeFieldHandle)
212 {
213 fieldHandle = ((RuntimeFieldHandle)
obj).Value;
214 return;
215 }
216 DynamicMethod dynamicMethod =
obj as DynamicMethod;
217 if (dynamicMethod != null)
218 {
219 methodHandle = dynamicMethod.GetMethodDescriptor().Value;
220 }
221 else if (
obj is GenericMethodInfo genericMethodInfo)
222 {
223 methodHandle = genericMethodInfo.m_methodHandle.Value;
224 typeHandle = genericMethodInfo.m_context.Value;
225 }
226 else if (
obj is GenericFieldInfo genericFieldInfo)
227 {
228 fieldHandle = genericFieldInfo.m_fieldHandle.Value;
229 typeHandle = genericFieldInfo.m_context.Value;
230 }
231 else if (
obj is VarArgMethod varArgMethod)
232 {
233 if (varArgMethod.m_dynamicMethod == null)
234 {
235 methodHandle = varArgMethod.m_method.MethodHandle.Value;
236 typeHandle = varArgMethod.m_method.GetDeclaringTypeInternal().GetTypeHandleInternal().Value;
237 }
238 else
239 {
240 methodHandle = varArgMethod.m_dynamicMethod.GetMethodDescriptor().Value;
241 }
242 }
243 }