@@ -33,6 +33,7 @@ public unsafe class MethodTableTests
3333 { nameof ( Data . EEClass . MethodTable ) , new ( ) { Offset = 8 , Type = DataType . pointer } } ,
3434 { nameof ( Data . EEClass . CorTypeAttr ) , new ( ) { Offset = 16 , Type = DataType . uint32 } } ,
3535 { nameof ( Data . EEClass . NumMethods ) , new ( ) { Offset = 20 , Type = DataType . uint16 } } ,
36+ { nameof ( Data . EEClass . NumNonVirtualSlots ) , new ( ) { Offset = 22 , Type = DataType . uint16 } } ,
3637 }
3738 } ;
3839
@@ -46,6 +47,7 @@ private static readonly (DataType Type, Target.TypeInfo Info)[] RTSTypes =
4647 private static readonly ( string Name , ulong Value , string ? Type ) [ ] RTSGlobals =
4748 [
4849 ( nameof ( Constants . Globals . FreeObjectMethodTable ) , TestFreeObjectMethodTableGlobalAddress , null ) ,
50+ ( nameof ( Constants . Globals . MethodDescAlignment ) , 8 , nameof ( DataType . uint64 ) ) ,
4951 ] ;
5052
5153 private static MockMemorySpace . Builder AddFreeObjectMethodTable ( TargetTestHelpers targetTestHelpers , MockMemorySpace . Builder builder )
@@ -58,13 +60,14 @@ private static MockMemorySpace.Builder AddFreeObjectMethodTable(TargetTestHelper
5860 ] ) ;
5961 }
6062
61- private static MockMemorySpace . Builder AddEEClass ( TargetTestHelpers targetTestHelpers , MockMemorySpace . Builder builder , TargetPointer eeClassPtr , string name , TargetPointer canonMTPtr , uint attr , ushort numMethods )
63+ private static MockMemorySpace . Builder AddEEClass ( TargetTestHelpers targetTestHelpers , MockMemorySpace . Builder builder , TargetPointer eeClassPtr , string name , TargetPointer canonMTPtr , uint attr , ushort numMethods , ushort numNonVirtualSlots )
6264 {
6365 MockMemorySpace . HeapFragment eeClassFragment = new ( ) { Name = $ "EEClass '{ name } '", Address = eeClassPtr , Data = new byte [ targetTestHelpers . SizeOfTypeInfo ( EEClassTypeInfo ) ] } ;
6466 Span < byte > dest = eeClassFragment . Data ;
6567 targetTestHelpers . WritePointer ( dest . Slice ( EEClassTypeInfo . Fields [ nameof ( Data . EEClass . MethodTable ) ] . Offset ) , canonMTPtr ) ;
6668 targetTestHelpers . Write ( dest . Slice ( EEClassTypeInfo . Fields [ nameof ( Data . EEClass . CorTypeAttr ) ] . Offset ) , attr ) ;
6769 targetTestHelpers . Write ( dest . Slice ( EEClassTypeInfo . Fields [ nameof ( Data . EEClass . NumMethods ) ] . Offset ) , numMethods ) ;
70+ targetTestHelpers . Write ( dest . Slice ( EEClassTypeInfo . Fields [ nameof ( Data . EEClass . NumNonVirtualSlots ) ] . Offset ) , numNonVirtualSlots ) ;
6871 return builder . AddHeapFragment ( eeClassFragment ) ;
6972
7073 }
@@ -161,7 +164,7 @@ private static MockMemorySpace.Builder AddSystemObject(TargetTestHelpers targetT
161164 System . Reflection . TypeAttributes typeAttributes = System . Reflection . TypeAttributes . Public | System . Reflection . TypeAttributes . Class ;
162165 const int numMethods = 8 ; // System.Object has 8 methods
163166 const int numVirtuals = 3 ; // System.Object has 3 virtual methods
164- builder = AddEEClass ( targetTestHelpers , builder , systemObjectEEClassPtr , "System.Object" , systemObjectMethodTablePtr , attr : ( uint ) typeAttributes , numMethods : numMethods ) ;
167+ builder = AddEEClass ( targetTestHelpers , builder , systemObjectEEClassPtr , "System.Object" , systemObjectMethodTablePtr , attr : ( uint ) typeAttributes , numMethods : numMethods , numNonVirtualSlots : 0 ) ;
165168 builder = AddMethodTable ( targetTestHelpers , builder , systemObjectMethodTablePtr , "System.Object" , systemObjectEEClassPtr ,
166169 mtflags : default , mtflags2 : default , baseSize : targetTestHelpers . ObjectBaseSize ,
167170 module : TargetPointer . Null , parentMethodTable : TargetPointer . Null , numInterfaces : 0 , numVirtuals : numVirtuals ) ;
@@ -216,7 +219,7 @@ public void ValidateSystemStringMethodTable(MockTarget.Architecture arch)
216219 const int numInterfaces = 8 ; // Arbitrary
217220 const int numVirtuals = 3 ; // at least as many as System.Object
218221 uint mtflags = ( uint ) RuntimeTypeSystem_1 . WFLAGS_HIGH . HasComponentSize | /*componentSize: */ 2 ;
219- builder = AddEEClass ( targetTestHelpers , builder , systemStringEEClassPtr , "System.String" , systemStringMethodTablePtr , attr : ( uint ) typeAttributes , numMethods : numMethods ) ;
222+ builder = AddEEClass ( targetTestHelpers , builder , systemStringEEClassPtr , "System.String" , systemStringMethodTablePtr , attr : ( uint ) typeAttributes , numMethods : numMethods , numNonVirtualSlots : 0 ) ;
220223 builder = AddMethodTable ( targetTestHelpers , builder , systemStringMethodTablePtr , "System.String" , systemStringEEClassPtr ,
221224 mtflags : mtflags , mtflags2 : default , baseSize : targetTestHelpers . StringBaseSize ,
222225 module : TargetPointer . Null , parentMethodTable : systemObjectMethodTablePtr , numInterfaces : numInterfaces , numVirtuals : numVirtuals ) ;
@@ -291,7 +294,7 @@ public void ValidateGenericInstMethodTable(MockTarget.Architecture arch)
291294 const int numInterfaces = 0 ;
292295 const int numVirtuals = 3 ;
293296 const uint gtd_mtflags = 0x00000030 ; // TODO: GenericsMask_TypicalInst
294- builder = AddEEClass ( targetTestHelpers , builder , genericDefinitionEEClassPtr , "EEClass GenericDefinition" , genericDefinitionMethodTablePtr , attr : ( uint ) typeAttributes , numMethods : numMethods ) ;
297+ builder = AddEEClass ( targetTestHelpers , builder , genericDefinitionEEClassPtr , "EEClass GenericDefinition" , genericDefinitionMethodTablePtr , attr : ( uint ) typeAttributes , numMethods : numMethods , numNonVirtualSlots : 0 ) ;
295298 builder = AddMethodTable ( targetTestHelpers , builder , genericDefinitionMethodTablePtr , "MethodTable GenericDefinition" , genericDefinitionEEClassPtr ,
296299 mtflags : gtd_mtflags , mtflags2 : default , baseSize : targetTestHelpers . ObjectBaseSize ,
297300 module : TargetPointer . Null , parentMethodTable : systemObjectMethodTablePtr , numInterfaces : numInterfaces , numVirtuals : numVirtuals ) ;
@@ -346,15 +349,15 @@ public void ValidateArrayInstMethodTable(MockTarget.Architecture arch)
346349 const ushort systemArrayNumMethods = 37 ; // Arbitrary. Not trying to exactly match the real System.Array
347350 const uint systemArrayCorTypeAttr = ( uint ) ( System . Reflection . TypeAttributes . Public | System . Reflection . TypeAttributes . Class ) ;
348351
349- builder = AddEEClass ( targetTestHelpers , builder , systemArrayEEClassPtr , "EEClass System.Array" , systemArrayMethodTablePtr , attr : systemArrayCorTypeAttr , numMethods : systemArrayNumMethods ) ;
352+ builder = AddEEClass ( targetTestHelpers , builder , systemArrayEEClassPtr , "EEClass System.Array" , systemArrayMethodTablePtr , attr : systemArrayCorTypeAttr , numMethods : systemArrayNumMethods , numNonVirtualSlots : 0 ) ;
350353 builder = AddMethodTable ( targetTestHelpers , builder , systemArrayMethodTablePtr , "MethodTable System.Array" , systemArrayEEClassPtr ,
351354 mtflags : default , mtflags2 : default , baseSize : targetTestHelpers . ObjectBaseSize ,
352355 module : TargetPointer . Null , parentMethodTable : systemObjectMethodTablePtr , numInterfaces : systemArrayNumInterfaces , numVirtuals : 3 ) ;
353356
354357 const uint arrayInst_mtflags = ( uint ) ( RuntimeTypeSystem_1 . WFLAGS_HIGH . HasComponentSize | RuntimeTypeSystem_1 . WFLAGS_HIGH . Category_Array ) | arrayInstanceComponentSize ;
355358 const uint arrayInstCorTypeAttr = ( uint ) ( System . Reflection . TypeAttributes . Public | System . Reflection . TypeAttributes . Class | System . Reflection . TypeAttributes . Sealed ) ;
356359
357- builder = AddEEClass ( targetTestHelpers , builder , arrayInstanceEEClassPtr , "EEClass ArrayInstance" , arrayInstanceMethodTablePtr , attr : arrayInstCorTypeAttr , numMethods : systemArrayNumMethods ) ;
360+ builder = AddEEClass ( targetTestHelpers , builder , arrayInstanceEEClassPtr , "EEClass ArrayInstance" , arrayInstanceMethodTablePtr , attr : arrayInstCorTypeAttr , numMethods : systemArrayNumMethods , numNonVirtualSlots : 0 ) ;
358361 builder = AddMethodTable ( targetTestHelpers , builder , arrayInstanceMethodTablePtr , "MethodTable ArrayInstance" , arrayInstanceEEClassPtr ,
359362 mtflags : arrayInst_mtflags , mtflags2 : default , baseSize : targetTestHelpers . ObjectBaseSize ,
360363 module : TargetPointer . Null , parentMethodTable : systemArrayMethodTablePtr , numInterfaces : systemArrayNumInterfaces , numVirtuals : 3 ) ;
0 commit comments