Skip to content

Commit da5608a

Browse files
committed
Static fields in closed generic types now simply initialized the ref
1 parent 161fe48 commit da5608a

File tree

1 file changed

+1
-49
lines changed

1 file changed

+1
-49
lines changed

src/CLR/Core/TypeSystem.cpp

Lines changed: 1 addition & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -4993,55 +4993,7 @@ HRESULT CLR_RT_Assembly::ResolveAllocateGenericTypeStaticFields()
49934993
// initialize the storage: call InitializeReference for that field def (ownerAsm context)
49944994
const CLR_RECORD_FIELDDEF *pFd = ownerAsm->GetFieldDef(fieldIndex);
49954995

4996-
CLR_RT_SignatureParser parser{};
4997-
parser.Initialize_FieldDef(ownerAsm, pFd);
4998-
4999-
CLR_RT_SignatureParser::Element element{};
5000-
5001-
NANOCLR_CHECK_HRESULT(parser.Advance(element));
5002-
5003-
if (element.Levels > 0)
5004-
{
5005-
// this is an array
5006-
pHeap[staticField].SetDataId(CLR_RT_HEAPBLOCK_RAW_ID(DATATYPE_OBJECT, CLR_RT_HeapBlock::HB_Alive, 1));
5007-
pHeap[staticField].ClearData();
5008-
5009-
NanoCLRDataType dt;
5010-
CLR_RT_TypeDef_Index realTypeDef{};
5011-
dt = element.DataType;
5012-
realTypeDef.data = element.Class.data;
5013-
5014-
if (element.DataType == DATATYPE_CLASS || element.DataType == DATATYPE_VALUETYPE)
5015-
{
5016-
realTypeDef = element.Class;
5017-
}
5018-
if (element.DataType == DATATYPE_VAR)
5019-
{
5020-
genericTypeInstance.assembly->FindGenericParamAtTypeSpec(
5021-
genericTypeInstance.data,
5022-
element.GenericParamPosition,
5023-
realTypeDef,
5024-
dt);
5025-
5026-
// goto process_datatype;
5027-
}
5028-
else if (element.DataType == DATATYPE_MVAR)
5029-
{
5030-
_ASSERTE(true);
5031-
5032-
// goto process_datatype;
5033-
}
5034-
else
5035-
{
5036-
_ASSERTE(true);
5037-
}
5038-
5039-
CLR_RT_HeapBlock_Array::CreateInstance(pHeap[staticField], 0, realTypeDef);
5040-
}
5041-
else
5042-
{
5043-
g_CLR_RT_ExecutionEngine.InitializeReference(pHeap[staticField], pFd, ownerAsm, &genericTypeInstance);
5044-
}
4996+
g_CLR_RT_ExecutionEngine.InitializeReference(pHeap[staticField], pFd, ownerAsm, &genericTypeInstance);
50454997
}
50464998

50474999
// store in typespec crossref (this storage is per-assembly typespec)

0 commit comments

Comments
 (0)