Skip to content
Prev Previous commit
Addressing @radical comments.
  • Loading branch information
thaystg committed Nov 16, 2021
commit 1d9162aba0867cac4ce082f4d4875a794748b3d9
20 changes: 11 additions & 9 deletions src/mono/wasm/debugger/BrowserDebugProxy/MonoSDBHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,8 @@ public override string ToString()
}
internal string GetArrayIndexString(int idx)
{
if (idx < 0 || idx >= TotalLength)
return "Invalid Index";
int boundLimit = 1;
int lastBoundLimit = 1;
int[] arrayStr = new int[Rank];
Expand Down Expand Up @@ -1496,7 +1498,7 @@ public async Task<string> GetStringValue(SessionId sessionId, int string_id, Can
}
return null;
}
public async Task<ArrayDimensions> GetArrayLength(SessionId sessionId, int object_id, CancellationToken token)
public async Task<ArrayDimensions> GetArrayDimensions(SessionId sessionId, int object_id, CancellationToken token)
{
var commandParams = new MemoryStream();
var commandParamsWriter = new MonoBinaryWriter(commandParams);
Expand All @@ -1507,7 +1509,7 @@ public async Task<ArrayDimensions> GetArrayLength(SessionId sessionId, int objec
for (int i = 0 ; i < length; i++)
{
rank[i] = retDebuggerCmdReader.ReadInt32();
retDebuggerCmdReader.ReadInt32();
retDebuggerCmdReader.ReadInt32(); //lower_bound
}
return new ArrayDimensions(rank);
}
Expand Down Expand Up @@ -1830,12 +1832,12 @@ public async Task<JObject> CreateJObjectForArray(SessionId sessionId, MonoBinary
var objectId = retDebuggerCmdReader.ReadInt32();
var className = await GetClassNameFromObject(sessionId, objectId, token);
var arrayType = className.ToString();
var length = await GetArrayLength(sessionId, objectId, token);
var length = await GetArrayDimensions(sessionId, objectId, token);
if (arrayType.LastIndexOf('[') > 0)
arrayType = arrayType.Insert(arrayType.LastIndexOf('[')+1, length.ToString());
if (className.LastIndexOf('[') > 0)
className = className.Insert(arrayType.LastIndexOf('[')+1, new string(',', length.Rank-1));
return CreateJObject<string>(null, "object", arrayType, false, className.ToString(), "dotnet:array:" + objectId, null, length.Rank == 1 ? "array" : null);
return CreateJObject<string>(null, "object", description : arrayType, writable : false, className.ToString(), "dotnet:array:" + objectId, null, subtype : length.Rank == 1 ? "array" : null);
}

public async Task<JObject> CreateJObjectForObject(SessionId sessionId, MonoBinaryReader retDebuggerCmdReader, int typeIdFromAttribute, bool forDebuggerDisplayAttribute, CancellationToken token)
Expand Down Expand Up @@ -2261,25 +2263,25 @@ public async Task<JArray> GetValueTypeProxy(SessionId sessionId, int valueTypeId

public async Task<JArray> GetArrayValues(SessionId sessionId, int arrayId, CancellationToken token)
{
var length = await GetArrayLength(sessionId, arrayId, token);
var dimensions = await GetArrayDimensions(sessionId, arrayId, token);
var commandParams = new MemoryStream();
var commandParamsWriter = new MonoBinaryWriter(commandParams);
commandParamsWriter.Write(arrayId);
commandParamsWriter.Write(0);
commandParamsWriter.Write(length.TotalLength);
commandParamsWriter.Write(dimensions.TotalLength);
var retDebuggerCmdReader = await SendDebuggerAgentCommand<CmdArray>(sessionId, CmdArray.GetValues, commandParams, token);
JArray array = new JArray();
for (int i = 0 ; i < length.TotalLength; i++)
for (int i = 0 ; i < dimensions.TotalLength; i++)
{
var var_json = await CreateJObjectForVariableValue(sessionId, retDebuggerCmdReader, length.GetArrayIndexString(i), false, -1, false, token);
var var_json = await CreateJObjectForVariableValue(sessionId, retDebuggerCmdReader, dimensions.GetArrayIndexString(i), isOwn : false, -1, forDebuggerDisplayAttribute : false, token);
array.Add(var_json);
}
return array;
}

public async Task<JObject> GetArrayValuesProxy(SessionId sessionId, int arrayId, CancellationToken token)
{
var length = await GetArrayLength(sessionId, arrayId, token);
var length = await GetArrayDimensions(sessionId, arrayId, token);
var arrayProxy = JObject.FromObject(new
{
items = await GetArrayValues(sessionId, arrayId, token),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GetArrayValues also calls GetArrayLength. Instead maybe GetArrayValues can return (JArray, ArrayDimensions), or it can take a `ArrayDimensions argument?

Expand Down