@@ -2540,11 +2540,7 @@ public override bool MatchType(string type, string id)
25402540
25412541 public override string ElementType ( string type )
25422542 {
2543- string name = "" ;
2544- int begin = type . LastIndexOf ( '[' ) ;
2545- if ( begin > 0 )
2546- name = type . Substring ( 0 , begin ) ;
2547- return name ;
2543+ return ElemTypeFromType ( type ) ;
25482544 }
25492545
25502546 public override int LoadSize ( Debugger debugger , string name )
@@ -2574,9 +2570,19 @@ public override bool ForEachMemoryBlock(Debugger debugger, string name, MemoryRe
25742570 ElementPtrName ( name ) ,
25752571 elementConverter , memoryBlockPredicate ) ;
25762572 }
2573+
2574+ // type -> name[]
2575+ static public string ElemTypeFromType ( string type )
2576+ {
2577+ string name = "" ;
2578+ int begin = type . LastIndexOf ( '[' ) ;
2579+ if ( begin > 0 && begin + 1 < type . Length && type [ begin + 1 ] == ']' )
2580+ name = type . Substring ( 0 , begin ) ;
2581+ return name ;
2582+ }
25772583 }
25782584
2579- class CSList : RandomAccessContainer
2585+ class CSList : ContiguousContainer
25802586 {
25812587 public override string Id ( ) { return "System.Collections.Generic.List" ; }
25822588
@@ -2593,12 +2599,19 @@ public override int LoadSize(Debugger debugger, string name)
25932599
25942600 public override string ElementPtrName ( string name )
25952601 {
2596- return "" ;
2602+ return "(&" + name + "._items[0]) ";
25972603 }
25982604
25992605 public override bool ForEachMemoryBlock ( Debugger debugger , string name , MemoryReader . Converter < double > elementConverter , MemoryBlockPredicate memoryBlockPredicate )
26002606 {
2601- return false ;
2607+ Expression expr = debugger . GetExpression ( name + "._items" ) ;
2608+ if ( ! expr . IsValidValue || CSArray . ElemTypeFromType ( expr . Type ) . Length <= 0 )
2609+ return false ;
2610+
2611+ return this . ForEachMemoryBlock ( debugger ,
2612+ name ,
2613+ ElementPtrName ( name ) ,
2614+ elementConverter , memoryBlockPredicate ) ;
26022615 }
26032616 }
26042617
0 commit comments