Skip to content

Commit cf63145

Browse files
committed
Implement memory access for C# List.
1 parent 43dc8f3 commit cf63145

File tree

1 file changed

+21
-8
lines changed

1 file changed

+21
-8
lines changed

Visual_Studio_2015/GraphicalDebugging/ExpressionLoader.cs

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)