HRESULT Library_corlib_native_System_Reflection_FieldInfo::Initialize( CLR_RT_StackFrame& stack, CLR_RT_FieldDef_Instance& instFD, CLR_RT_TypeDef_Instance& instTD, CLR_RT_HeapBlock*& obj ) { NATIVE_PROFILE_CLR_CORE(); TINYCLR_HEADER(); CLR_RT_HeapBlock* hbField = stack.Arg0().Dereference(); if(CLR_RT_ReflectionDef_Index::Convert( *hbField, instFD ) == false || instTD.InitializeFromField ( instFD ) == false ) { TINYCLR_SET_AND_LEAVE(CLR_E_WRONG_TYPE); } if(instFD.m_target->flags & CLR_RECORD_FIELDDEF::FD_Static) { obj = CLR_RT_ExecutionEngine::AccessStaticField( instFD ); if(obj == NULL) TINYCLR_SET_AND_LEAVE(CLR_E_WRONG_TYPE); } else { TINYCLR_CHECK_HRESULT(stack.Arg1().EnsureObjectReference( obj )); if(CLR_RT_ExecutionEngine::IsInstanceOf( *obj, instTD ) == false) { TINYCLR_SET_AND_LEAVE(CLR_E_WRONG_TYPE); } obj = &obj[ instFD.CrossReference().m_offset ]; } TINYCLR_NOCLEANUP(); }
HRESULT Library_corlib_native_System_Reflection_RuntimeFieldInfo::get_DeclaringType___SystemType( CLR_RT_StackFrame& stack ) { NATIVE_PROFILE_CLR_CORE(); TINYCLR_HEADER(); CLR_RT_FieldDef_Instance fd; CLR_RT_TypeDef_Instance cls; if(GetFieldDescriptor( stack, stack.Arg0(), fd ) == false) TINYCLR_SET_AND_LEAVE(CLR_E_NULL_REFERENCE); if(cls.InitializeFromField( fd ) == false) TINYCLR_SET_AND_LEAVE(CLR_E_WRONG_TYPE); { CLR_RT_HeapBlock& top = stack.PushValue(); top.SetReflection( cls ); } TINYCLR_NOCLEANUP(); }