@@ -19,8 +19,8 @@ internal partial struct RuntimeTypeSystem_1 : IRuntimeTypeSystem
1919 private readonly Target _target ;
2020 private readonly TargetPointer _freeObjectMethodTablePointer ;
2121 private readonly TargetPointer _objectMethodTablePointer ;
22- private readonly TargetPointer _continuationMethodTablePointer ;
23- private readonly TargetPointer _continuationSingletonEEClassPointer ;
22+ private TargetPointer _continuationMethodTablePointer ;
23+ private TargetPointer _continuationSingletonEEClassPointer ;
2424 private readonly TargetPointer _multicastDelegateMethodTablePointer ;
2525 private readonly ulong _methodDescAlignment ;
2626 private readonly TypeValidation _typeValidation ;
@@ -436,7 +436,29 @@ internal RuntimeTypeSystem_1(Target target)
436436
437437 internal TargetPointer FreeObjectMethodTablePointer => _freeObjectMethodTablePointer ;
438438 internal TargetPointer ObjectMethodTablePointer => _objectMethodTablePointer ;
439- internal TargetPointer ContinuationMethodTablePointer => _continuationMethodTablePointer ;
439+ internal TargetPointer ContinuationMethodTablePointer
440+ {
441+ get
442+ {
443+ if ( _continuationMethodTablePointer != TargetPointer . Null )
444+ return _continuationMethodTablePointer ;
445+ _continuationMethodTablePointer = _target . ReadPointer (
446+ _target . ReadGlobalPointer ( Constants . Globals . ContinuationMethodTable ) ) ;
447+ return _continuationMethodTablePointer ;
448+ }
449+ }
450+
451+ internal TargetPointer ContinuationSingletonEEClassPointer
452+ {
453+ get
454+ {
455+ if ( _continuationSingletonEEClassPointer != TargetPointer . Null )
456+ return _continuationSingletonEEClassPointer ;
457+ _continuationSingletonEEClassPointer = _target . ReadPointer (
458+ _target . ReadGlobalPointer ( Constants . Globals . ContinuationSingletonEEClass ) ) ;
459+ return _continuationSingletonEEClassPointer ;
460+ }
461+ }
440462
441463 internal ulong MethodDescAlignment => _methodDescAlignment ;
442464
@@ -571,10 +593,10 @@ public bool IsObjRef(TypeHandle typeHandle)
571593 public bool ContainsGCPointers ( TypeHandle typeHandle ) => ! typeHandle . IsMethodTable ( ) ? false : _methodTables [ typeHandle . Address ] . Flags . ContainsGCPointers ;
572594 public bool RequiresAlign8 ( TypeHandle typeHandle ) => ! typeHandle . IsMethodTable ( ) ? false : _methodTables [ typeHandle . Address ] . Flags . RequiresAlign8 ;
573595 public bool IsContinuationWithoutMetadata ( TypeHandle typeHandle ) => typeHandle . IsMethodTable ( )
574- && _continuationMethodTablePointer != TargetPointer . Null
575- && _methodTables [ typeHandle . Address ] . ParentMethodTable == _continuationMethodTablePointer
576- && _continuationSingletonEEClassPointer != TargetPointer . Null
577- && GetClassPointer ( typeHandle ) == _continuationSingletonEEClassPointer ;
596+ && ContinuationMethodTablePointer != TargetPointer . Null
597+ && _methodTables [ typeHandle . Address ] . ParentMethodTable == ContinuationMethodTablePointer
598+ && ContinuationSingletonEEClassPointer != TargetPointer . Null
599+ && GetClassPointer ( typeHandle ) == ContinuationSingletonEEClassPointer ;
578600
579601 IEnumerable < ( uint Offset , uint Size ) > IRuntimeTypeSystem . GetGCDescSeries ( TypeHandle typeHandle , uint numComponents )
580602 {
0 commit comments