diff --git a/src/coreclr/System.Private.CoreLib/src/System/Diagnostics/Debugger.cs b/src/coreclr/System.Private.CoreLib/src/System/Diagnostics/Debugger.cs index 1c2dcd8dcb5407..469065aa1ce611 100644 --- a/src/coreclr/System.Private.CoreLib/src/System/Diagnostics/Debugger.cs +++ b/src/coreclr/System.Private.CoreLib/src/System/Diagnostics/Debugger.cs @@ -95,5 +95,11 @@ static void NotifyOfCrossThreadDependencySlow() // report the notification depending on its settings. [LibraryImport(RuntimeHelpers.QCall, EntryPoint = "DebugDebugger_CustomNotification")] private static partial void CustomNotification(ObjectHandleOnStack data); + + // implementation of CORINFO_HELP_USER_BREAKPOINT + [StackTraceHidden] + [DebuggerStepThrough] + [DebuggerHidden] + internal static void UserBreakpoint() => Break(); } } diff --git a/src/coreclr/System.Private.CoreLib/src/System/Runtime/CompilerServices/RuntimeHelpers.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/Runtime/CompilerServices/RuntimeHelpers.CoreCLR.cs index 2fcc827abcf058..d60b48ec0e552e 100644 --- a/src/coreclr/System.Private.CoreLib/src/System/Runtime/CompilerServices/RuntimeHelpers.CoreCLR.cs +++ b/src/coreclr/System.Private.CoreLib/src/System/Runtime/CompilerServices/RuntimeHelpers.CoreCLR.cs @@ -932,6 +932,22 @@ public uint GetNumInstanceFieldBytesIfContainsGCPointers() } } + // Subset of src\vm\typedesc.h + [StructLayout(LayoutKind.Sequential)] + internal unsafe struct TypeDesc + { + private uint _typeAndFlags; + private nint _exposedClassObject; + + public RuntimeType? ExposedClassObject + { + get + { + return *(RuntimeType*)Unsafe.AsPointer(ref _exposedClassObject); + } + } + } + [StructLayout(LayoutKind.Sequential)] internal unsafe ref struct DynamicStaticsInfo { @@ -1090,6 +1106,18 @@ public bool IsTypeDesc return (MethodTable*)m_asTAddr; } + /// + /// Gets the pointer wrapped by the current instance. + /// + /// This is only safe to call if returned . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public TypeDesc* AsTypeDesc() + { + Debug.Assert(IsTypeDesc); + + return (TypeDesc*)((nint)m_asTAddr & ~2); // Drop the second lowest bit. + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static TypeHandle TypeHandleOf() { diff --git a/src/coreclr/System.Private.CoreLib/src/System/RuntimeHandles.cs b/src/coreclr/System.Private.CoreLib/src/System/RuntimeHandles.cs index da6a3bb66bd054..1d70bed0c21445 100644 --- a/src/coreclr/System.Private.CoreLib/src/System/RuntimeHandles.cs +++ b/src/coreclr/System.Private.CoreLib/src/System/RuntimeHandles.cs @@ -31,7 +31,7 @@ internal RuntimeType GetRuntimeTypeChecked() => /// An IntPtr handle to a RuntimeType to create a object from. /// A new object that corresponds to the value parameter. public static RuntimeTypeHandle FromIntPtr(IntPtr value) => - new RuntimeTypeHandle(value == IntPtr.Zero ? null : GetRuntimeTypeFromHandle(value)); + new RuntimeTypeHandle(GetRuntimeTypeFromHandleMaybeNull(value)); [LibraryImport(RuntimeHelpers.QCall, EntryPoint = "RuntimeTypeHandle_GetRuntimeTypeFromHandleSlow")] private static partial void GetRuntimeTypeFromHandleSlow( @@ -46,12 +46,24 @@ private static RuntimeType GetRuntimeTypeFromHandleSlow(IntPtr handle) return typeObject!; } - [MethodImpl(MethodImplOptions.InternalCall)] - private static extern RuntimeType? GetRuntimeTypeFromHandleIfExists(IntPtr handle); + // implementation of CORINFO_HELP_GETSYNCFROMCLASSHANDLE, CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE, CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPEHANDLE + internal static unsafe RuntimeType GetRuntimeTypeFromHandle(IntPtr handle) + { + TypeHandle h = new((void*)handle); + return (h.IsTypeDesc + ? h.AsTypeDesc()->ExposedClassObject + : h.AsMethodTable()->AuxiliaryData->ExposedClassObject) ?? GetRuntimeTypeFromHandleSlow(handle); + } - private static RuntimeType GetRuntimeTypeFromHandle(IntPtr handle) + // implementation of CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE_MAYBENULL, CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPEHANDLE_MAYBENULL + internal static RuntimeType? GetRuntimeTypeFromHandleMaybeNull(IntPtr handle) { - return GetRuntimeTypeFromHandleIfExists(handle) ?? GetRuntimeTypeFromHandleSlow(handle); + if (handle == IntPtr.Zero) + { + return null; + } + + return GetRuntimeTypeFromHandle(handle); } [MethodImpl(MethodImplOptions.AggressiveInlining)] diff --git a/src/coreclr/debug/ee/frameinfo.h b/src/coreclr/debug/ee/frameinfo.h index 3403e39fb925fc..0a60c516bb95c2 100644 --- a/src/coreclr/debug/ee/frameinfo.h +++ b/src/coreclr/debug/ee/frameinfo.h @@ -62,7 +62,7 @@ struct FrameInfo // Set to true if we are dealing with an internal explicit frame. Currently this is only true // for prestub frames, security frames, funceval frames, and certain debugger-specific frames - // (e.g. DebuggerClassInitMarkFrame, DebuggerSecurityCodeMarkFrame). + // (e.g. DebuggerClassInitMarkFrame). // This affects HasMethodFrame() below. bool internal; diff --git a/src/coreclr/inc/jithelpers.h b/src/coreclr/inc/jithelpers.h index e331ea817c1dff..b34f77518b9d98 100644 --- a/src/coreclr/inc/jithelpers.h +++ b/src/coreclr/inc/jithelpers.h @@ -124,7 +124,7 @@ // Exceptions DYNAMICJITHELPER(CORINFO_HELP_THROW, IL_Throw, METHOD__NIL) DYNAMICJITHELPER(CORINFO_HELP_RETHROW, IL_Rethrow, METHOD__NIL) - JITHELPER(CORINFO_HELP_USER_BREAKPOINT, JIT_UserBreakpoint, METHOD__NIL) + DYNAMICJITHELPER(CORINFO_HELP_USER_BREAKPOINT, NULL, METHOD__DEBUGGER__USERBREAKPOINT) DYNAMICJITHELPER_NOINDIRECT(CORINFO_HELP_RNGCHKFAIL, NULL, METHOD__THROWHELPERS__THROWINDEXOUTOFRANGEEXCEPTION) DYNAMICJITHELPER_NOINDIRECT(CORINFO_HELP_OVERFLOW, NULL, METHOD__THROWHELPERS__THROWOVERFLOWEXCEPTION) DYNAMICJITHELPER_NOINDIRECT(CORINFO_HELP_THROWDIVZERO, NULL, METHOD__THROWHELPERS__THROWDIVIDEBYZEROEXCEPTION) @@ -145,7 +145,7 @@ JITHELPER(CORINFO_HELP_MON_EXIT, JIT_MonExitWorker, METHOD__NIL) JITHELPER(CORINFO_HELP_GETCLASSFROMMETHODPARAM, JIT_GetClassFromMethodParam, METHOD__NIL) - JITHELPER(CORINFO_HELP_GETSYNCFROMCLASSHANDLE, JIT_GetRuntimeType, METHOD__NIL) + DYNAMICJITHELPER(CORINFO_HELP_GETSYNCFROMCLASSHANDLE, NULL, METHOD__RT_TYPE_HANDLE__GETRUNTIMETYPEFROMHANDLE) // GC support DYNAMICJITHELPER(CORINFO_HELP_STOP_FOR_GC, JIT_RareDisableHelper, METHOD__NIL) @@ -228,12 +228,12 @@ // Generics DYNAMICJITHELPER(CORINFO_HELP_RUNTIMEHANDLE_METHOD, NULL, METHOD__GENERICSHELPERS__METHOD) DYNAMICJITHELPER(CORINFO_HELP_RUNTIMEHANDLE_CLASS, NULL, METHOD__GENERICSHELPERS__CLASS) - JITHELPER(CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE, JIT_GetRuntimeType, METHOD__NIL) - JITHELPER(CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE_MAYBENULL, JIT_GetRuntimeType_MaybeNull, METHOD__NIL) + DYNAMICJITHELPER(CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE, NULL, METHOD__RT_TYPE_HANDLE__GETRUNTIMETYPEFROMHANDLE) + DYNAMICJITHELPER(CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPE_MAYBENULL, NULL, METHOD__RT_TYPE_HANDLE__GETRUNTIMETYPEFROMHANDLEMAYBENULL) DYNAMICJITHELPER(CORINFO_HELP_METHODDESC_TO_STUBRUNTIMEMETHOD, NULL, METHOD__STUBMETHODINFO__FROMPTR) DYNAMICJITHELPER(CORINFO_HELP_FIELDDESC_TO_STUBRUNTIMEFIELD, NULL, METHOD__STUBFIELDINFO__FROMPTR) - JITHELPER(CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPEHANDLE, JIT_GetRuntimeType, METHOD__NIL) - JITHELPER(CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPEHANDLE_MAYBENULL, JIT_GetRuntimeType_MaybeNull, METHOD__NIL) + DYNAMICJITHELPER(CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPEHANDLE, NULL, METHOD__RT_TYPE_HANDLE__GETRUNTIMETYPEFROMHANDLE) + DYNAMICJITHELPER(CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPEHANDLE_MAYBENULL, NULL, METHOD__RT_TYPE_HANDLE__GETRUNTIMETYPEFROMHANDLEMAYBENULL) DYNAMICJITHELPER(CORINFO_HELP_VIRTUAL_FUNC_PTR, NULL, METHOD__VIRTUALDISPATCHHELPERS__VIRTUALFUNCTIONPOINTER) diff --git a/src/coreclr/inc/vptr_list.h b/src/coreclr/inc/vptr_list.h index f0d686f139ceaf..127341c769d314 100644 --- a/src/coreclr/inc/vptr_list.h +++ b/src/coreclr/inc/vptr_list.h @@ -51,7 +51,6 @@ VPTR_CLASS(ComPrestubMethodFrame) VPTR_CLASS(InterpreterFrame) #endif // FEATURE_INTERPRETER VPTR_CLASS(DebuggerClassInitMarkFrame) -VPTR_CLASS(DebuggerSecurityCodeMarkFrame) VPTR_CLASS(DebuggerExitFrame) VPTR_CLASS(DebuggerU2MCatchHandlerFrame) VPTR_CLASS(FaultingExceptionFrame) diff --git a/src/coreclr/vm/corelib.h b/src/coreclr/vm/corelib.h index 92c4653cbd764d..e8eaf0ca12c224 100644 --- a/src/coreclr/vm/corelib.h +++ b/src/coreclr/vm/corelib.h @@ -341,6 +341,8 @@ DEFINE_METHOD(THREAD_START_EXCEPTION,EX_CTOR, .ctor, DEFINE_CLASS(TYPE_HANDLE, System, RuntimeTypeHandle) DEFINE_CLASS(RT_TYPE_HANDLE, System, RuntimeTypeHandle) DEFINE_METHOD(RT_TYPE_HANDLE, PVOID_CTOR, .ctor, IM_RuntimeType_RetVoid) +DEFINE_METHOD(RT_TYPE_HANDLE, GETRUNTIMETYPEFROMHANDLE,GetRuntimeTypeFromHandle, SM_IntPtr_RetRuntimeType) +DEFINE_METHOD(RT_TYPE_HANDLE, GETRUNTIMETYPEFROMHANDLEMAYBENULL,GetRuntimeTypeFromHandleMaybeNull, SM_IntPtr_RetRuntimeType) DEFINE_METHOD(RT_TYPE_HANDLE, TO_INTPTR, ToIntPtr, SM_RuntimeTypeHandle_RetIntPtr) #ifdef FEATURE_COMINTEROP DEFINE_METHOD(RT_TYPE_HANDLE, ALLOCATECOMOBJECT, AllocateComObject, SM_VoidPtr_RetObj) @@ -929,7 +931,7 @@ DEFINE_CLASS(WEAKREFERENCE, System, WeakReference) DEFINE_CLASS(WEAKREFERENCEGENERIC, System, WeakReference`1) DEFINE_CLASS(DEBUGGER, Diagnostics, Debugger) -DEFINE_METHOD(DEBUGGER, BREAK, Break, SM_RetVoid) +DEFINE_METHOD(DEBUGGER, USERBREAKPOINT, UserBreakpoint, SM_RetVoid) DEFINE_CLASS(BUFFER, System, Buffer) DEFINE_METHOD(BUFFER, MEMCPY_PTRBYTE_ARRBYTE, Memcpy, SM_PtrByte_Int_ArrByte_Int_Int_RetVoid) diff --git a/src/coreclr/vm/ecalllist.h b/src/coreclr/vm/ecalllist.h index d6fd867a53ff0a..6758a6f007d132 100644 --- a/src/coreclr/vm/ecalllist.h +++ b/src/coreclr/vm/ecalllist.h @@ -97,7 +97,6 @@ FCFuncStart(gCOMTypeHandleFuncs) FCFuncElement("ContainsGenericVariables", RuntimeTypeHandle::ContainsGenericVariables) FCFuncElement("IsUnmanagedFunctionPointer", RuntimeTypeHandle::IsUnmanagedFunctionPointer) FCFuncElement("CompareCanonicalHandles", RuntimeTypeHandle::CompareCanonicalHandles) - FCFuncElement("GetRuntimeTypeFromHandleIfExists", RuntimeTypeHandle::GetRuntimeTypeFromHandleIfExists) FCFuncEnd() FCFuncStart(gMetaDataImport) diff --git a/src/coreclr/vm/frames.cpp b/src/coreclr/vm/frames.cpp index ffa0b535e82883..f8a04f46a7a302 100644 --- a/src/coreclr/vm/frames.cpp +++ b/src/coreclr/vm/frames.cpp @@ -311,15 +311,11 @@ bool Frame::HasValidVTablePtr(Frame * pFrame) #ifndef DACCESS_COMPILE TADDR vptr = pFrame->GetVTablePtr(); // - // Helper MethodFrame,GCFrame,DebuggerSecurityCodeMarkFrame are the most - // common frame types, explicitly check for them. + // Explicitly check for the most common frames. // if (vptr == HelperMethodFrame::GetMethodFrameVPtr()) return true; - if (vptr == DebuggerSecurityCodeMarkFrame::GetMethodFrameVPtr()) - return true; - // // otherwise consult the hashtable // diff --git a/src/coreclr/vm/frames.h b/src/coreclr/vm/frames.h index f89d8cf4f32c3f..69c8a802a5af0e 100644 --- a/src/coreclr/vm/frames.h +++ b/src/coreclr/vm/frames.h @@ -112,9 +112,7 @@ // | // +-DebuggerClassInitMarkFrame - marker frame to indicate that "class init" code is running // | -// +-DebuggerSecurityCodeMarkFrame - marker frame to indicate that security code is running -// | -// +-DebuggerExitFrame - marker frame to indicate that a "break" IL instruction is being executed +// +-DebuggerExitFrame - marker frame to indicate control flow has left the runtime // | // +-DebuggerU2MCatchHandlerFrame - marker frame to indicate that native code is going to catch and // | swallow a managed exception @@ -225,7 +223,6 @@ FRAME_TYPE_NAME(InterpreterFrame) FRAME_TYPE_NAME(ProtectByRefsFrame) FRAME_TYPE_NAME(ProtectValueClassFrame) FRAME_TYPE_NAME(DebuggerClassInitMarkFrame) -FRAME_TYPE_NAME(DebuggerSecurityCodeMarkFrame) FRAME_TYPE_NAME(DebuggerExitFrame) FRAME_TYPE_NAME(DebuggerU2MCatchHandlerFrame) FRAME_TYPE_NAME(InlinedCallFrame) @@ -2671,50 +2668,10 @@ class DebuggerClassInitMarkFrame : public Frame DEFINE_VTABLE_GETTER_AND_DTOR(DebuggerClassInitMarkFrame) }; - -//------------------------------------------------------------------------ -// DebuggerSecurityCodeMarkFrame is a small frame whose only purpose in -// life is to mark for the debugger that "security code" is -// being run. It does nothing useful except return good values from -// GetFrameType and GetInterception. -//------------------------------------------------------------------------ - -class DebuggerSecurityCodeMarkFrame : public Frame -{ - VPTR_VTABLE_CLASS(DebuggerSecurityCodeMarkFrame, Frame) - -public: -#ifndef DACCESS_COMPILE - DebuggerSecurityCodeMarkFrame() - { - WRAPPER_NO_CONTRACT; - Push(); - } -#endif - - virtual int GetFrameType() - { - LIMITED_METHOD_DAC_CONTRACT; - return TYPE_INTERCEPTION; - } - - virtual Interception GetInterception() - { - LIMITED_METHOD_DAC_CONTRACT; - return INTERCEPTION_SECURITY; - } - - // Keep as last entry in class - DEFINE_VTABLE_GETTER_AND_DTOR(DebuggerSecurityCodeMarkFrame) -}; - //------------------------------------------------------------------------ // DebuggerExitFrame is a small frame whose only purpose in -// life is to mark for the debugger that there is an exit transiton on -// the stack. This is special cased for the "break" IL instruction since -// it is an fcall using a helper frame which returns TYPE_CALL instead of -// an ecall (as in System.Diagnostics.Debugger.Break()) which returns -// TYPE_EXIT. This just makes the two consistent for debugging services. +// life is to mark for the debugger that there is an exit transition on +// the stack. //------------------------------------------------------------------------ class DebuggerExitFrame : public Frame diff --git a/src/coreclr/vm/jithelpers.cpp b/src/coreclr/vm/jithelpers.cpp index f5c2ac8ad4fee0..ddb07e65d25437 100644 --- a/src/coreclr/vm/jithelpers.cpp +++ b/src/coreclr/vm/jithelpers.cpp @@ -1508,61 +1508,6 @@ HCIMPL3(void, Jit_NativeMemSet, void* pDest, int value, size_t length) } HCIMPLEND -NOINLINE HCIMPL1(Object*, JIT_GetRuntimeType_Framed, CORINFO_CLASS_HANDLE type) -{ - FCALL_CONTRACT; - - TypeHandle typeHandle(type); - - // Array/other type handle case. - OBJECTREF refType = typeHandle.GetManagedClassObjectIfExists(); - if (refType == NULL) - { - HELPER_METHOD_FRAME_BEGIN_RET_1(refType); - refType = typeHandle.GetManagedClassObject(); - HELPER_METHOD_FRAME_END(); - } - - return OBJECTREFToObject(refType); -} -HCIMPLEND - -#include -HCIMPL1(Object*, JIT_GetRuntimeType, CORINFO_CLASS_HANDLE type) -{ - FCALL_CONTRACT; - - TypeHandle typeHnd(type); - - if (!typeHnd.IsTypeDesc()) - { - // Most common... and fastest case - OBJECTREF typePtr = typeHnd.AsMethodTable()->GetManagedClassObjectIfExists(); - if (typePtr != NULL) - { - return OBJECTREFToObject(typePtr); - } - } - - ENDFORBIDGC(); - return HCCALL1(JIT_GetRuntimeType_Framed, type); -} -HCIMPLEND - -HCIMPL1(Object*, JIT_GetRuntimeType_MaybeNull, CORINFO_CLASS_HANDLE type) -{ - FCALL_CONTRACT; - - if (type == NULL) - return NULL;; - - ENDFORBIDGC(); - return HCCALL1(JIT_GetRuntimeType, type); -} -HCIMPLEND -#include - - // Helper for synchronized static methods in shared generics code #include HCIMPL1(CORINFO_CLASS_HANDLE, JIT_GetClassFromMethodParam, CORINFO_METHOD_HANDLE methHnd_) @@ -2100,31 +2045,6 @@ HCIMPLEND // //======================================================================== -/*********************************************************************/ -// Called by the JIT whenever a cee_break instruction should be executed. -// -HCIMPL0(void, JIT_UserBreakpoint) -{ - FCALL_CONTRACT; - - HELPER_METHOD_FRAME_BEGIN_NOPOLL(); // Set up a frame - -#ifdef DEBUGGING_SUPPORTED - FrameWithCookie __def; - - MethodDescCallSite debuggerBreak(METHOD__DEBUGGER__BREAK); - - debuggerBreak.Call((ARG_SLOT*)NULL); - - __def.Pop(); -#else // !DEBUGGING_SUPPORTED - _ASSERTE(!"JIT_UserBreakpoint called, but debugging support is not available in this build."); -#endif // !DEBUGGING_SUPPORTED - - HELPER_METHOD_FRAME_END_POLL(); -} -HCIMPLEND - #if defined(_MSC_VER) // VC++ Compiler intrinsic. extern "C" void * _ReturnAddress(void); diff --git a/src/coreclr/vm/metasig.h b/src/coreclr/vm/metasig.h index 46d5b3dd3d7c0a..3d279240f0cbb3 100644 --- a/src/coreclr/vm/metasig.h +++ b/src/coreclr/vm/metasig.h @@ -519,6 +519,7 @@ DEFINE_METASIG(IM(ArrChar_Int_Int_RetVoid, a(u) i i, v)) DEFINE_METASIG_T(IM(ArrType_ArrException_Str_RetVoid, a(C(TYPE)) a(C(EXCEPTION)) s, v)) DEFINE_METASIG(IM(RefInt_RefInt_RefInt_RetArrByte, r(i) r(i) r(i), a(b))) DEFINE_METASIG_T(IM(RefInt_RetRuntimeType, r(i) , C(CLASS))) +DEFINE_METASIG_T(SM(IntPtr_RetRuntimeType, I , C(CLASS))) DEFINE_METASIG_T(IM(RuntimeType_RetVoid, C(CLASS) , v)) DEFINE_METASIG_T(IM(RuntimeArgumentHandle_PtrVoid_RetVoid, g(ARGUMENT_HANDLE) P(v), v)) diff --git a/src/coreclr/vm/runtimehandles.cpp b/src/coreclr/vm/runtimehandles.cpp index b48290ac5b4311..7ac7928f6e2266 100644 --- a/src/coreclr/vm/runtimehandles.cpp +++ b/src/coreclr/vm/runtimehandles.cpp @@ -157,17 +157,6 @@ extern "C" void QCALLTYPE RuntimeTypeHandle_GetRuntimeTypeFromHandleSlow( END_QCALL; } -FCIMPL1(ReflectClassBaseObject*, RuntimeTypeHandle::GetRuntimeTypeFromHandleIfExists, EnregisteredTypeHandle th) -{ - FCALL_CONTRACT; - - _ASSERTE(th != NULL); - - TypeHandle typeHandle = TypeHandle::FromPtr(th); - return (ReflectClassBaseObject*)OBJECTREFToObject(typeHandle.GetManagedClassObjectIfExists()); -} -FCIMPLEND - #ifdef FEATURE_TYPEEQUIVALENCE extern "C" BOOL QCALLTYPE RuntimeTypeHandle_IsEquivalentTo(QCall::TypeHandle rtType1, QCall::TypeHandle rtType2) { diff --git a/src/coreclr/vm/runtimehandles.h b/src/coreclr/vm/runtimehandles.h index 084b5fc1f69bee..bf672af0f8900d 100644 --- a/src/coreclr/vm/runtimehandles.h +++ b/src/coreclr/vm/runtimehandles.h @@ -104,8 +104,6 @@ class RuntimeTypeHandle ReflectClassBaseObject *pRuntimeTypeDONOTUSEDIRECTLY; // Static method on RuntimeTypeHandle - static FCDECL1(ReflectClassBaseObject*, GetRuntimeTypeFromHandleIfExists, EnregisteredTypeHandle th); - static FCDECL1(AssemblyBaseObject*, GetAssemblyIfExists, ReflectClassBaseObject *pType); static FCDECL1(ReflectModuleBaseObject*, GetModuleIfExists, ReflectClassBaseObject* pType); static FCDECL1(INT32, GetAttributes, ReflectClassBaseObject* pType); diff --git a/src/coreclr/vm/typedesc.cpp b/src/coreclr/vm/typedesc.cpp index 1d2ac6960da308..15dcc3bd2715b1 100644 --- a/src/coreclr/vm/typedesc.cpp +++ b/src/coreclr/vm/typedesc.cpp @@ -511,9 +511,9 @@ OBJECTREF TypeDesc::GetManagedClassObject() } CONTRACTL_END; - if (m_hExposedClassObject == 0) + if (_exposedClassObject == 0) { - TypeHandle(this).AllocateManagedClassObject(&m_hExposedClassObject); + TypeHandle(this).AllocateManagedClassObject(&_exposedClassObject); } return GetManagedClassObjectIfExists(); } @@ -527,9 +527,9 @@ ClassLoadLevel TypeDesc::GetLoadLevel() STATIC_CONTRACT_FORBID_FAULT; SUPPORTS_DAC; - if (m_typeAndFlags & TypeDesc::enum_flag_IsNotFullyLoaded) + if (_typeAndFlags & TypeDesc::enum_flag_IsNotFullyLoaded) { - if (m_typeAndFlags & TypeDesc::enum_flag_DependenciesLoaded) + if (_typeAndFlags & TypeDesc::enum_flag_DependenciesLoaded) { return CLASS_DEPENDENCIES_LOADED; } @@ -640,7 +640,7 @@ void TypeDesc::DoFullyLoad(Generics::RecursionGraph *pVisited, ClassLoadLevel le switch (level) { case CLASS_DEPENDENCIES_LOADED: - InterlockedOr((LONG*)&m_typeAndFlags, TypeDesc::enum_flag_DependenciesLoaded); + InterlockedOr((LONG*)&_typeAndFlags, TypeDesc::enum_flag_DependenciesLoaded); break; case CLASS_LOADED: diff --git a/src/coreclr/vm/typedesc.h b/src/coreclr/vm/typedesc.h index 62905fea99f254..8cff26f064e657 100644 --- a/src/coreclr/vm/typedesc.h +++ b/src/coreclr/vm/typedesc.h @@ -35,7 +35,7 @@ class TypeDesc TypeDesc(CorElementType type) { LIMITED_METHOD_CONTRACT; - m_typeAndFlags = type; + _typeAndFlags = type; } #endif @@ -44,7 +44,7 @@ class TypeDesc inline CorElementType GetInternalCorElementType() { LIMITED_METHOD_DAC_CONTRACT; - return (CorElementType) (m_typeAndFlags & 0xff); + return (CorElementType) (_typeAndFlags & 0xff); } // Get the exact parent (superclass) of this type @@ -116,20 +116,20 @@ class TypeDesc BOOL HasTypeEquivalence() const { LIMITED_METHOD_CONTRACT; - return (m_typeAndFlags & TypeDesc::enum_flag_HasTypeEquivalence) != 0; + return (_typeAndFlags & TypeDesc::enum_flag_HasTypeEquivalence) != 0; } BOOL IsFullyLoaded() const { LIMITED_METHOD_CONTRACT; - return (m_typeAndFlags & TypeDesc::enum_flag_IsNotFullyLoaded) == 0; + return (_typeAndFlags & TypeDesc::enum_flag_IsNotFullyLoaded) == 0; } VOID SetIsFullyLoaded() { LIMITED_METHOD_CONTRACT; - InterlockedAnd((LONG*)&m_typeAndFlags, ~TypeDesc::enum_flag_IsNotFullyLoaded); + InterlockedAnd((LONG*)&_typeAndFlags, ~TypeDesc::enum_flag_IsNotFullyLoaded); } ClassLoadLevel GetLoadLevel(); @@ -176,7 +176,7 @@ class TypeDesc } CONTRACTL_END; - const RUNTIMETYPEHANDLE handle = m_hExposedClassObject; + const RUNTIMETYPEHANDLE handle = _exposedClassObject; OBJECTREF retVal = ObjectToOBJECTREF(handle); return retVal; } @@ -200,17 +200,17 @@ class TypeDesc // // The remaining bits are available for flags // - DWORD m_typeAndFlags; + DWORD _typeAndFlags; // internal RuntimeType object handle - RUNTIMETYPEHANDLE m_hExposedClassObject; + RUNTIMETYPEHANDLE _exposedClassObject; friend struct ::cdac_data; }; template<> struct cdac_data { - static constexpr size_t TypeAndFlags = offsetof(TypeDesc, m_typeAndFlags); + static constexpr size_t TypeAndFlags = offsetof(TypeDesc, _typeAndFlags); }; /*************************************************************************/ @@ -233,12 +233,12 @@ class ParamTypeDesc : public TypeDesc { LIMITED_METHOD_CONTRACT; // ParamTypeDescs start out life not fully loaded - m_typeAndFlags |= TypeDesc::enum_flag_IsNotFullyLoaded; + _typeAndFlags |= TypeDesc::enum_flag_IsNotFullyLoaded; // Param type descs can only be equivalent if their constituent bits are equivalent. if (arg.HasTypeEquivalence()) { - m_typeAndFlags |= TypeDesc::enum_flag_HasTypeEquivalence; + _typeAndFlags |= TypeDesc::enum_flag_HasTypeEquivalence; } INDEBUGIMPL(Verify()); @@ -265,7 +265,7 @@ class ParamTypeDesc : public TypeDesc { friend class ArrayOpLinker; protected: - // the m_typeAndFlags field in TypeDesc tell what kind of parameterized type we have + // the _typeAndFlags field in TypeDesc tell what kind of parameterized type we have // The type that is being modified TypeHandle m_Arg;