Skip to content

Commit a285c86

Browse files
authored
Fix signature parser usage (#3215)
1 parent 834db0c commit a285c86

File tree

3 files changed

+28
-26
lines changed

3 files changed

+28
-26
lines changed

src/CLR/CorLib/corlib_native_System_Type.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ HRESULT Library_corlib_native_System_Type::GetGenericArguments___SZARRAY_SystemT
145145
NANOCLR_CHECK_HRESULT(parser.Advance(elem));
146146

147147
// get the number of generic parameters
148-
count = parser.GenParamCount;
148+
count = elem.GenParamCount;
149149

150150
// allocate an array to hold the generic arguments
151151
NANOCLR_CHECK_HRESULT(CLR_RT_HeapBlock_Array::CreateInstance(top, count, g_CLR_RT_WellKnownTypes.TypeStatic));
@@ -432,14 +432,14 @@ HRESULT Library_corlib_native_System_Type::get_IsGenericTypeDefinition___BOOLEAN
432432
parser.Advance(element);
433433

434434
// check if it has generic parameters
435-
if (parser.GenParamCount == 0)
435+
if (element.GenParamCount == 0)
436436
{
437437
isTypeDefinition = false;
438438
}
439439
else
440440
{
441441
// keep reading the generic parameters
442-
for (int i = 0; i < parser.GenParamCount; i++)
442+
for (int i = 0; i < element.GenParamCount; i++)
443443
{
444444
if (SUCCEEDED(parser.Advance(element)))
445445
{

src/CLR/Core/Execution.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2074,7 +2074,7 @@ HRESULT CLR_RT_ExecutionEngine::InitializeLocals(
20742074
varParser.Advance(varElement);
20752075

20762076
// consume parameters
2077-
for (int paramIndex = 0; paramIndex < varParser.GenParamCount; paramIndex++)
2077+
for (int paramIndex = 0; paramIndex < varElement.GenParamCount; paramIndex++)
20782078
{
20792079
NANOCLR_CHECK_HRESULT(varParser.Advance(varElement));
20802080
}
@@ -2100,15 +2100,15 @@ HRESULT CLR_RT_ExecutionEngine::InitializeLocals(
21002100
(const CLR_RT_TypeSpec_Index &)methodDefInstance.genericType->data);
21012101

21022102
typeSpec.assembly->FindGenericParamAtTypeSpec(
2103-
methodDefInstance.genericType->TypeSpec(),
2103+
methodDefInstance.genericType->data,
21042104
genericParamPosition,
21052105
cls,
21062106
dt);
21072107
}
21082108
else
21092109
{
21102110
assembly->FindGenericParamAtTypeSpec(
2111-
methodDefInstance.genericType->TypeSpec(),
2111+
methodDefInstance.genericType->data,
21122112
genericParamPosition,
21132113
cls,
21142114
dt);

src/CLR/Core/TypeSystem.cpp

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -800,8 +800,11 @@ bool CLR_RT_TypeSpec_Instance::ResolveToken(
800800

801801
NanoCLRDataType realDataType;
802802

803-
g_CLR_RT_TypeSystem.m_assemblies[caller->genericType->Assembly() - 1]
804-
->FindGenericParamAtTypeSpec(closedTsRow, (CLR_UINT32)pos, cachedElementType, realDataType);
803+
g_CLR_RT_TypeSystem.m_assemblies[caller->genericType->Assembly() - 1]->FindGenericParamAtTypeSpec(
804+
caller->genericType->data,
805+
(CLR_UINT32)pos,
806+
cachedElementType,
807+
realDataType);
805808
}
806809
else if (element.DataType == DATATYPE_MVAR)
807810
{
@@ -1156,16 +1159,17 @@ bool CLR_RT_TypeDef_Instance::ResolveToken(
11561159
return false;
11571160
}
11581161

1159-
auto &tsi = *caller->genericType;
1160-
CLR_UINT32 closedTsRow = tsi.TypeSpec();
1161-
11621162
CLR_RT_TypeDef_Index realTypeDef;
11631163
NanoCLRDataType realDataType;
11641164

11651165
// Only call this once to map (e.g. !T→Int32)
11661166

11671167
g_CLR_RT_TypeSystem.m_assemblies[caller->genericType->Assembly() - 1]
1168-
->FindGenericParamAtTypeSpec(closedTsRow, (CLR_UINT32)pos, realTypeDef, realDataType);
1168+
->FindGenericParamAtTypeSpec(
1169+
caller->genericType->data,
1170+
(CLR_UINT32)pos,
1171+
realTypeDef,
1172+
realDataType);
11691173

11701174
// populate this instance
11711175
data = realTypeDef.data;
@@ -1278,14 +1282,12 @@ bool CLR_RT_TypeDef_Instance::ResolveNullableType(
12781282
return false;
12791283
}
12801284

1281-
auto &tsi = *caller->genericType;
1282-
CLR_UINT32 closedTsRow = tsi.TypeSpec();
1283-
12841285
CLR_RT_TypeDef_Index realTypeDef;
12851286
NanoCLRDataType realDataType;
12861287

12871288
// Only call this once to map (e.g. !T→Int32)
1288-
caller->assembly->FindGenericParamAtTypeSpec(closedTsRow, (CLR_UINT32)pos, realTypeDef, realDataType);
1289+
caller->assembly
1290+
->FindGenericParamAtTypeSpec(caller->genericType->data, (CLR_UINT32)pos, realTypeDef, realDataType);
12891291

12901292
// populate this instance
12911293
data = realTypeDef.data;
@@ -1573,7 +1575,7 @@ bool CLR_RT_MethodDef_Instance::InitializeFromIndex(
15731575
CLR_RT_TypeDef_Index realOwner;
15741576
NanoCLRDataType dummyDT;
15751577

1576-
if (!tsAsm->FindGenericParamAtTypeSpec(typeSpec.TypeSpec(), elem.GenericParamPosition, realOwner, dummyDT))
1578+
if (!tsAsm->FindGenericParamAtTypeSpec(typeSpec.data, elem.GenericParamPosition, realOwner, dummyDT))
15771579
{
15781580
return false;
15791581
}
@@ -1877,7 +1879,7 @@ bool CLR_RT_MethodDef_Instance::GetDeclaringType(CLR_RT_TypeDef_Instance &declTy
18771879
CLR_RT_TypeDef_Index td;
18781880
NanoCLRDataType dt;
18791881
if (tsAsm == nullptr ||
1880-
tsAsm->FindGenericParamAtTypeSpec(genericType->TypeSpec(), (CLR_UINT32)pos, td, dt) == false)
1882+
tsAsm->FindGenericParamAtTypeSpec(genericType->data, (CLR_UINT32)pos, td, dt) == false)
18811883
{
18821884
return false;
18831885
}
@@ -2268,7 +2270,7 @@ HRESULT CLR_RT_TypeDescriptor::InitializeFromSignatureToken(
22682270
// !T: ask the CLR to map that slot into the *actual* argument
22692271
CLR_RT_TypeDef_Index td;
22702272
NanoCLRDataType dt;
2271-
assm->FindGenericParamAtTypeSpec(caller->genericType->TypeSpec(), elem.GenericParamPosition, td, dt);
2273+
assm->FindGenericParamAtTypeSpec(caller->genericType->data, elem.GenericParamPosition, td, dt);
22722274
this->InitializeFromTypeDef(td);
22732275
}
22742276
else if (elem.DataType == DATATYPE_MVAR)
@@ -5090,7 +5092,7 @@ bool CLR_RT_Assembly::FindGenericParamAtTypeSpec(
50905092
}
50915093

50925094
// sanity check for invalid parameter position
5093-
if (genericParameterPosition > parser.GenParamCount)
5095+
if (genericParameterPosition > element.GenParamCount)
50945096
{
50955097
// not enough parameters!!
50965098
return false;
@@ -6623,14 +6625,14 @@ HRESULT CLR_RT_TypeSystem::BuildTypeName(
66236625

66246626
BuildTypeName(typeDef, szBuffer, iBuffer);
66256627

6626-
if (parser.GenParamCount > 0)
6628+
if (element.GenParamCount > 0)
66276629
{
66286630
NANOCLR_CHECK_HRESULT(QueueStringToBuffer(szBuffer, iBuffer, "<"));
66296631

66306632
closeGenericSignature = true;
66316633
}
66326634

6633-
for (int i = 0; i < parser.GenParamCount; i++)
6635+
for (int i = 0; i < element.GenParamCount; i++)
66346636
{
66356637
// read the next element (should be either VAR, MVAR, or a concrete type)
66366638
parser.Advance(element);
@@ -6643,7 +6645,7 @@ HRESULT CLR_RT_TypeSystem::BuildTypeName(
66436645

66446646
// this will bind !T→System.Int32, etc.
66456647
typeSpecInstance.assembly->FindGenericParamAtTypeSpec(
6646-
typeIndex.TypeSpec(), // closed instantiation row
6648+
typeIndex.data,
66476649
element.GenericParamPosition, // the !N slot
66486650
realTd,
66496651
realDt);
@@ -6660,7 +6662,7 @@ HRESULT CLR_RT_TypeSystem::BuildTypeName(
66606662
BuildTypeName(td, szBuffer, iBuffer);
66616663
}
66626664

6663-
if (i + 1 < parser.GenParamCount)
6665+
if (i + 1 < element.GenParamCount)
66646666
{
66656667
NANOCLR_CHECK_HRESULT(QueueStringToBuffer(szBuffer, iBuffer, ","));
66666668
}
@@ -6895,7 +6897,7 @@ HRESULT CLR_RT_TypeSystem::BuildMethodRefName(const CLR_RT_MethodRef_Index &meth
68956897
CLR_SafeSprintf(szBuffer, iBuffer, c_CLR_RT_DataTypeLookup[element.DataType].m_name);
68966898
#endif
68976899

6898-
if (i + 1 < parser.GenParamCount)
6900+
if (i + 1 < element.GenParamCount)
68996901
{
69006902
CLR_SafeSprintf(szBuffer, iBuffer, ",");
69016903
}
@@ -6979,7 +6981,7 @@ HRESULT CLR_RT_TypeSystem::BuildMethodSpecName(const CLR_RT_MethodSpec_Index &ms
69796981
NANOCLR_CHECK_HRESULT(QueueStringToBuffer(szBuffer, iBuffer, c_CLR_RT_DataTypeLookup[element.DataType].m_name));
69806982
#endif
69816983

6982-
if (i + 1 < parser.GenParamCount)
6984+
if (i + 1 < element.GenParamCount)
69836985
{
69846986
NANOCLR_CHECK_HRESULT(QueueStringToBuffer(szBuffer, iBuffer, ","));
69856987
}

0 commit comments

Comments
 (0)