Skip to content

Commit aac76ed

Browse files
committed
Use Span.Reverse
1 parent 7e05e8e commit aac76ed

File tree

1 file changed

+25
-31
lines changed

1 file changed

+25
-31
lines changed

src/mono/wasm/debugger/BrowserDebugProxy/MonoSDBHelper.cs

Lines changed: 25 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -386,20 +386,6 @@ public MonoBinaryReader(Stream stream, bool hasError = false) : base(stream)
386386
HasError = hasError;
387387
}
388388

389-
internal static void SwapForBE(Span<byte> dest, Span<byte> src)
390-
{
391-
// SDB is big endian
392-
if (BitConverter.IsLittleEndian)
393-
{
394-
for (int i = 0; i < src.Length; i++)
395-
dest [src.Length - i - 1] = src [i];
396-
}
397-
else
398-
{
399-
src.CopyTo(dest);
400-
}
401-
}
402-
403389
public override string ReadString()
404390
{
405391
var valueLen = ReadInt32();
@@ -413,20 +399,24 @@ public override string ReadString()
413399
public override sbyte ReadSByte() => (sbyte)ReadInt32();
414400
public byte ReadUByte() => (byte)ReadUInt32();
415401
public ushort ReadUShort() => (ushort)ReadUInt32();
416-
public override unsafe int ReadInt32() => Read<int>();
402+
public override int ReadInt32() => ReadBigEndian<int>();
417403

418-
public override unsafe double ReadDouble() => Read<double>();
419-
public override unsafe uint ReadUInt32() => Read<uint>();
420-
public override unsafe float ReadSingle() => Read<float>();
421-
public override unsafe ulong ReadUInt64() => Read<ulong>();
422-
public override unsafe long ReadInt64() => Read<long>();
404+
public override double ReadDouble() => ReadBigEndian<double>();
405+
public override uint ReadUInt32() => ReadBigEndian<uint>();
406+
public override float ReadSingle() => ReadBigEndian<float>();
407+
public override ulong ReadUInt64() => ReadBigEndian<ulong>();
408+
public override long ReadInt64() => ReadBigEndian<long>();
423409

424-
protected unsafe T Read<T>() where T : struct
410+
protected unsafe T ReadBigEndian<T>() where T : struct
425411
{
426412
Span<byte> data = stackalloc byte[Unsafe.SizeOf<T>()];
427413
T ret = default;
428414
Read(data);
429-
SwapForBE(new Span<byte>(Unsafe.AsPointer(ref ret), data.Length), data);
415+
if (BitConverter.IsLittleEndian)
416+
{
417+
data.Reverse();
418+
}
419+
data.CopyTo(new Span<byte>(Unsafe.AsPointer(ref ret), data.Length));
430420
return ret;
431421
}
432422
}
@@ -435,20 +425,24 @@ internal class MonoBinaryWriter : BinaryWriter
435425
{
436426
public MonoBinaryWriter(Stream stream) : base(stream) {}
437427

438-
public void WriteString(string val)
428+
public override void Write(string val)
439429
{
440430
var bytes = Encoding.UTF8.GetBytes(val);
441431
Write(bytes.Length);
442432
Write(bytes);
443433
}
444434

445-
public override unsafe void Write(long val) => WriteType<long>(val);
446-
public override unsafe void Write(int val) => WriteType<int>(val);
435+
public override void Write(long val) => WriteBigEndian<long>(val);
436+
public override void Write(int val) => WriteBigEndian<int>(val);
447437

448-
protected unsafe void WriteType<T>(T val) where T : struct
438+
protected unsafe void WriteBigEndian<T>(T val) where T : struct
449439
{
450440
Span<byte> data = stackalloc byte[Unsafe.SizeOf<T>()];
451-
MonoBinaryReader.SwapForBE(data, new Span<byte>(Unsafe.AsPointer(ref val), data.Length));
441+
new Span<byte>(Unsafe.AsPointer(ref val), data.Length).CopyTo(data);
442+
if (BitConverter.IsLittleEndian)
443+
{
444+
data.Reverse();
445+
}
452446
base.Write(data);
453447
}
454448

@@ -821,7 +815,7 @@ public async Task<int> CreateString(SessionId sessionId, string value, Cancellat
821815
var retDebuggerCmdReader = await SendDebuggerAgentCommand<CmdAppDomain>(sessionId, CmdAppDomain.GetRootDomain, commandParams, token);
822816
var root_domain = retDebuggerCmdReader.ReadInt32();
823817
commandParamsWriter.Write(root_domain);
824-
commandParamsWriter.WriteString(value);
818+
commandParamsWriter.Write(value);
825819
retDebuggerCmdReader = await SendDebuggerAgentCommand<CmdAppDomain>(sessionId, CmdAppDomain.CreateString, commandParams, token);
826820
return retDebuggerCmdReader.ReadInt32();
827821
}
@@ -932,7 +926,7 @@ public async Task<int> GetAssemblyId(SessionId sessionId, string asm_name, Cance
932926
{
933927
var commandParams = new MemoryStream();
934928
var commandParamsWriter = new MonoBinaryWriter(commandParams);
935-
commandParamsWriter.WriteString(asm_name);
929+
commandParamsWriter.Write(asm_name);
936930

937931
var retDebuggerCmdReader = await SendDebuggerAgentCommand<CmdVM>(sessionId, CmdVM.GetAssemblyByName, commandParams, token);
938932
return retDebuggerCmdReader.ReadInt32();
@@ -1452,7 +1446,7 @@ public async Task<int> GetMethodIdByName(SessionId sessionId, int type_id, strin
14521446
var commandParams = new MemoryStream();
14531447
var commandParamsWriter = new MonoBinaryWriter(commandParams);
14541448
commandParamsWriter.Write((int)type_id);
1455-
commandParamsWriter.WriteString(method_name);
1449+
commandParamsWriter.Write(method_name);
14561450
commandParamsWriter.Write((int)(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static));
14571451
commandParamsWriter.Write((int)1); //case sensitive
14581452
var retDebuggerCmdReader = await SendDebuggerAgentCommand<CmdType>(sessionId, CmdType.GetMethodsByNameFlags, commandParams, token);
@@ -2198,7 +2192,7 @@ public async Task<int> GetTypeByName(SessionId sessionId, string typeToSearch, C
21982192
{
21992193
var commandParams = new MemoryStream();
22002194
var commandParamsWriter = new MonoBinaryWriter(commandParams);
2201-
commandParamsWriter.WriteString(typeToSearch);
2195+
commandParamsWriter.Write(typeToSearch);
22022196
var retDebuggerCmdReader = await SendDebuggerAgentCommand<CmdVM>(sessionId, CmdVM.GetTypes, commandParams, token);
22032197
var count = retDebuggerCmdReader.ReadInt32(); //count ret
22042198
return retDebuggerCmdReader.ReadInt32();

0 commit comments

Comments
 (0)