Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 21 additions & 3 deletions src/CLR/Core/TypeSystem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6244,12 +6244,17 @@ HRESULT CLR_RT_TypeSystem::QueueStringToBuffer(char *&szBuffer, size_t &iBuffer,
NANOCLR_NOCLEANUP();
}

HRESULT CLR_RT_TypeSystem::BuildTypeName(const CLR_RT_TypeSpec_Index &typeIndex, char *&szBuffer, size_t &iBuffer)
HRESULT CLR_RT_TypeSystem::BuildTypeName(
const CLR_RT_TypeSpec_Index &typeIndex,
char *&szBuffer,
size_t &iBuffer,
CLR_UINT32 levels)
{
NATIVE_PROFILE_CLR_CORE();
NANOCLR_HEADER();

CLR_RT_TypeSpec_Instance instance;
bool closeGenericSignature = false;

if (instance.InitializeFromIndex(typeIndex) == false)
{
Expand All @@ -6269,7 +6274,12 @@ HRESULT CLR_RT_TypeSystem::BuildTypeName(const CLR_RT_TypeSpec_Index &typeIndex,

BuildTypeName(typeDef, szBuffer, iBuffer);

NANOCLR_CHECK_HRESULT(QueueStringToBuffer(szBuffer, iBuffer, "<"));
if (parser.GenParamCount > 0)
{
NANOCLR_CHECK_HRESULT(QueueStringToBuffer(szBuffer, iBuffer, "<"));

closeGenericSignature = true;
}

for (int i = 0; i < parser.GenParamCount; i++)
{
Expand Down Expand Up @@ -6307,7 +6317,15 @@ HRESULT CLR_RT_TypeSystem::BuildTypeName(const CLR_RT_TypeSpec_Index &typeIndex,
}
}

NANOCLR_CHECK_HRESULT(QueueStringToBuffer(szBuffer, iBuffer, ">"));
if (closeGenericSignature)
{
NANOCLR_CHECK_HRESULT(QueueStringToBuffer(szBuffer, iBuffer, ">"));
}

while (levels-- > 0)
{
NANOCLR_CHECK_HRESULT(QueueStringToBuffer(szBuffer, iBuffer, "[]"));
}

NANOCLR_NOCLEANUP();
}
Expand Down
19 changes: 9 additions & 10 deletions src/CLR/Diagnostics/Info.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -452,7 +452,7 @@ void CLR_RT_Assembly::DumpToken(CLR_UINT32 token, const CLR_RT_TypeSpec_Index *g
// Build the closed‐generic owner name
char rgType[256], *sz = rgType;
size_t cb = sizeof(rgType);
g_CLR_RT_TypeSystem.BuildTypeName(*genericType, sz, cb);
g_CLR_RT_TypeSystem.BuildTypeName(*genericType, sz, cb, 0);

// Append the field name
CLR_SafeSprintf(sz, cb, "::%s", GetString(fr->name));
Expand Down Expand Up @@ -554,7 +554,7 @@ void CLR_RT_Assembly::DumpToken(CLR_UINT32 token, const CLR_RT_TypeSpec_Index *g
char bufCorrupt[256];
char *pCorrupt = bufCorrupt;
size_t cbCorrupt = sizeof(bufCorrupt);
g_CLR_RT_TypeSystem.BuildTypeName(tsIdx, pCorrupt, cbCorrupt);
g_CLR_RT_TypeSystem.BuildTypeName(tsIdx, pCorrupt, cbCorrupt, elem.Levels);
CLR_Debug::Printf("%s", bufCorrupt);
break;
}
Expand Down Expand Up @@ -596,8 +596,7 @@ void CLR_RT_Assembly::DumpToken(CLR_UINT32 token, const CLR_RT_TypeSpec_Index *g
}
break;
}

if (elem.DataType == DATATYPE_SZARRAY)
else if (elem.DataType == DATATYPE_SZARRAY)
{
// advance to see what’s inside the array
if (FAILED(parser.Advance(elem)))
Expand Down Expand Up @@ -648,18 +647,18 @@ void CLR_RT_Assembly::DumpToken(CLR_UINT32 token, const CLR_RT_TypeSpec_Index *g
char bufArr[256];
char *pArr = bufArr;
size_t cbArr = sizeof(bufArr);
g_CLR_RT_TypeSystem.BuildTypeName(tsIdx, pArr, cbArr);
g_CLR_RT_TypeSystem.BuildTypeName(tsIdx, pArr, cbArr, elem.Levels);
CLR_Debug::Printf("%s", bufArr);
break;
}
}

// now all the rest: just print the full type name
char bufGeneric[256];
char *pGeneric = bufGeneric;
size_t cbGeneric = sizeof(bufGeneric);
g_CLR_RT_TypeSystem.BuildTypeName(tsIdx, pGeneric, cbGeneric);
CLR_Debug::Printf("%s", bufGeneric);
char bufTypeName[256];
char *pTypeName = bufTypeName;
size_t cbType = sizeof(bufTypeName);
g_CLR_RT_TypeSystem.BuildTypeName(tsIdx, pTypeName, cbType, elem.Levels);
CLR_Debug::Printf("%s", bufTypeName);
break;
}

Expand Down
2 changes: 1 addition & 1 deletion src/CLR/Include/nanoCLR_Runtime.h
Original file line number Diff line number Diff line change
Expand Up @@ -2000,7 +2000,7 @@ struct CLR_RT_TypeSystem // EVENT HEAP - NO RELOCATION -
const CLR_RECORD_RESOURCE *&res,
CLR_UINT32 &size);

HRESULT BuildTypeName(const CLR_RT_TypeSpec_Index &typeIndex, char *&szBuffer, size_t &iBuffer);
HRESULT BuildTypeName(const CLR_RT_TypeSpec_Index &typeIndex, char *&szBuffer, size_t &iBuffer, CLR_UINT32 levels);
HRESULT BuildTypeName(
const CLR_RT_TypeDef_Index &cls,
char *&szBuffer,
Expand Down