HRESULT CLR_RT_HeapBlock_Array::ClearElements( int index, int length ) { NATIVE_PROFILE_CLR_CORE(); TINYCLR_HEADER(); const CLR_RT_ReflectionDef_Index& reflex = ReflectionDataConst(); CLR_UINT8* data = GetElement( index ); CLR_RT_Memory::ZeroFill( data, length * m_sizeOfElement ); if(m_fReference) { CLR_DataType dt = (CLR_DataType)m_typeOfElement; bool fAllocate = (reflex.m_levels == 1 && dt == DATATYPE_VALUETYPE); CLR_RT_HeapBlock* ptr = (CLR_RT_HeapBlock*)data; switch(dt) { case DATATYPE_VALUETYPE: case DATATYPE_CLASS: case DATATYPE_WEAKCLASS: dt = DATATYPE_OBJECT; break; } while(length > 0) { ptr->SetDataId( CLR_RT_HEAPBLOCK_RAW_ID(dt,0,1) ); if(fAllocate) { TINYCLR_CHECK_HRESULT(g_CLR_RT_ExecutionEngine.NewObjectFromIndex( *ptr, reflex.m_data.m_type )); } ptr++; length--; } } TINYCLR_NOCLEANUP(); }