From 3fc5b16a4223d0230e052ba91a9fd85d002d8d21 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 30 Jan 2024 12:36:37 -0800 Subject: [PATCH 1/5] Write uniformly in objectwriter --- .../Core/Serialization/ObjectWriter.cs | 184 ++++++++---------- 1 file changed, 80 insertions(+), 104 deletions(-) diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Serialization/ObjectWriter.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Serialization/ObjectWriter.cs index 86574d9468595..0275202a4151d 100644 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Serialization/ObjectWriter.cs +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Serialization/ObjectWriter.cs @@ -134,7 +134,7 @@ public void WriteValue(object? value) if (value == null) { - _writer.Write((byte)TypeCode.Null); + WriteByte((byte)TypeCode.Null); return; } @@ -159,47 +159,47 @@ public void WriteValue(object? value) } else if (value.GetType() == typeof(double)) { - _writer.Write((byte)TypeCode.Float8); - _writer.Write((double)value); + WriteByte((byte)TypeCode.Float8); + WriteDouble((double)value); } else if (value.GetType() == typeof(bool)) { - _writer.Write((byte)((bool)value ? TypeCode.Boolean_True : TypeCode.Boolean_False)); + WriteByte((byte)((bool)value ? TypeCode.Boolean_True : TypeCode.Boolean_False)); } else if (value.GetType() == typeof(char)) { - _writer.Write((byte)TypeCode.Char); - _writer.Write((ushort)(char)value); // written as ushort because BinaryWriter fails on chars that are unicode surrogates + WriteByte((byte)TypeCode.Char); + WriteUInt16((ushort)(char)value); // written as ushort because BinaryWriter fails on chars that are unicode surrogates } else if (value.GetType() == typeof(byte)) { - _writer.Write((byte)TypeCode.UInt8); - _writer.Write((byte)value); + WriteByte((byte)TypeCode.UInt8); + WriteByte((byte)value); } else if (value.GetType() == typeof(short)) { - _writer.Write((byte)TypeCode.Int16); - _writer.Write((short)value); + WriteByte((byte)TypeCode.Int16); + WriteInt16((short)value); } else if (value.GetType() == typeof(long)) { - _writer.Write((byte)TypeCode.Int64); - _writer.Write((long)value); + WriteByte((byte)TypeCode.Int64); + WriteInt64((long)value); } else if (value.GetType() == typeof(sbyte)) { - _writer.Write((byte)TypeCode.Int8); - _writer.Write((sbyte)value); + WriteByte((byte)TypeCode.Int8); + WriteSByte((sbyte)value); } else if (value.GetType() == typeof(float)) { - _writer.Write((byte)TypeCode.Float4); - _writer.Write((float)value); + WriteByte((byte)TypeCode.Float4); + WriteSingle((float)value); } else if (value.GetType() == typeof(ushort)) { - _writer.Write((byte)TypeCode.UInt16); - _writer.Write((ushort)value); + WriteByte((byte)TypeCode.UInt16); + WriteUInt16((ushort)value); } else if (value.GetType() == typeof(uint)) { @@ -207,8 +207,8 @@ public void WriteValue(object? value) } else if (value.GetType() == typeof(ulong)) { - _writer.Write((byte)TypeCode.UInt64); - _writer.Write((ulong)value); + WriteByte((byte)TypeCode.UInt64); + WriteUInt64((ulong)value); } else { @@ -217,12 +217,12 @@ public void WriteValue(object? value) } else if (value.GetType() == typeof(decimal)) { - _writer.Write((byte)TypeCode.Decimal); - _writer.Write((decimal)value); + WriteByte((byte)TypeCode.Decimal); + WriteDecimal((decimal)value); } else if (value.GetType() == typeof(DateTime)) { - _writer.Write((byte)TypeCode.DateTime); + WriteByte((byte)TypeCode.DateTime); _writer.Write(((DateTime)value).ToBinary()); } else if (value.GetType() == typeof(string)) @@ -261,19 +261,19 @@ public void WriteValue(ReadOnlySpan span) switch (length) { case 0: - _writer.Write((byte)TypeCode.Array_0); + WriteByte((byte)TypeCode.Array_0); break; case 1: - _writer.Write((byte)TypeCode.Array_1); + WriteByte((byte)TypeCode.Array_1); break; case 2: - _writer.Write((byte)TypeCode.Array_2); + WriteByte((byte)TypeCode.Array_2); break; case 3: - _writer.Write((byte)TypeCode.Array_3); + WriteByte((byte)TypeCode.Array_3); break; default: - _writer.Write((byte)TypeCode.Array); + WriteByte((byte)TypeCode.Array); WriteCompressedUInt((uint)length); break; } @@ -303,22 +303,22 @@ private void WriteEncodedInt32(int v) { if (v >= 0 && v <= 10) { - _writer.Write((byte)((int)TypeCode.Int32_0 + v)); + WriteByte((byte)((int)TypeCode.Int32_0 + v)); } else if (v >= 0 && v < byte.MaxValue) { - _writer.Write((byte)TypeCode.Int32_1Byte); - _writer.Write((byte)v); + WriteByte((byte)TypeCode.Int32_1Byte); + WriteByte((byte)v); } else if (v >= 0 && v < ushort.MaxValue) { - _writer.Write((byte)TypeCode.Int32_2Bytes); - _writer.Write((ushort)v); + WriteByte((byte)TypeCode.Int32_2Bytes); + WriteUInt16((ushort)v); } else { - _writer.Write((byte)TypeCode.Int32); - _writer.Write(v); + WriteByte((byte)TypeCode.Int32); + WriteInt32(v); } } @@ -326,22 +326,22 @@ private void WriteEncodedUInt32(uint v) { if (v >= 0 && v <= 10) { - _writer.Write((byte)((int)TypeCode.UInt32_0 + v)); + WriteByte((byte)((int)TypeCode.UInt32_0 + v)); } else if (v >= 0 && v < byte.MaxValue) { - _writer.Write((byte)TypeCode.UInt32_1Byte); - _writer.Write((byte)v); + WriteByte((byte)TypeCode.UInt32_1Byte); + WriteByte((byte)v); } else if (v >= 0 && v < ushort.MaxValue) { - _writer.Write((byte)TypeCode.UInt32_2Bytes); - _writer.Write((ushort)v); + WriteByte((byte)TypeCode.UInt32_2Bytes); + WriteUInt16((ushort)v); } else { - _writer.Write((byte)TypeCode.UInt32); - _writer.Write(v); + WriteByte((byte)TypeCode.UInt32); + WriteUInt32(v); } } @@ -397,7 +397,7 @@ internal void WriteCompressedUInt(uint value) { if (value <= (byte.MaxValue >> 2)) { - _writer.Write((byte)value); + WriteByte((byte)value); } else if (value <= (ushort.MaxValue >> 2)) { @@ -405,8 +405,8 @@ internal void WriteCompressedUInt(uint value) var byte1 = (byte)(value & 0xFFu); // high-bytes to low-bytes - _writer.Write(byte0); - _writer.Write(byte1); + WriteByte(byte0); + WriteByte(byte1); } else if (value <= (uint.MaxValue >> 2)) { @@ -416,10 +416,10 @@ internal void WriteCompressedUInt(uint value) var byte3 = (byte)(value & 0xFFu); // high-bytes to low-bytes - _writer.Write(byte0); - _writer.Write(byte1); - _writer.Write(byte2); - _writer.Write(byte3); + WriteByte(byte0); + WriteByte(byte1); + WriteByte(byte2); + WriteByte(byte3); } else { @@ -431,7 +431,7 @@ private unsafe void WriteStringValue(string? value) { if (value == null) { - _writer.Write((byte)TypeCode.Null); + WriteByte((byte)TypeCode.Null); } else { @@ -440,18 +440,18 @@ private unsafe void WriteStringValue(string? value) Debug.Assert(id >= 0); if (id <= byte.MaxValue) { - _writer.Write((byte)TypeCode.StringRef_1Byte); - _writer.Write((byte)id); + WriteByte((byte)TypeCode.StringRef_1Byte); + WriteByte((byte)id); } else if (id <= ushort.MaxValue) { - _writer.Write((byte)TypeCode.StringRef_2Bytes); - _writer.Write((ushort)id); + WriteByte((byte)TypeCode.StringRef_2Bytes); + WriteUInt16((ushort)id); } else { - _writer.Write((byte)TypeCode.StringRef_4Bytes); - _writer.Write(id); + WriteByte((byte)TypeCode.StringRef_4Bytes); + WriteInt32(id); } } else @@ -463,12 +463,12 @@ private unsafe void WriteStringValue(string? value) // Usual case - the string can be encoded as UTF-8: // We can use the UTF-8 encoding of the binary writer. - _writer.Write((byte)TypeCode.StringUtf8); + WriteByte((byte)TypeCode.StringUtf8); _writer.Write(value); } else { - _writer.Write((byte)TypeCode.StringUtf16); + WriteByte((byte)TypeCode.StringUtf16); // This is rare, just allocate UTF16 bytes for simplicity. var bytes = new byte[(uint)value.Length * sizeof(char)]; @@ -491,20 +491,20 @@ private void WriteArray(Array array) switch (length) { case 0: - _writer.Write((byte)TypeCode.Array_0); + WriteByte((byte)TypeCode.Array_0); break; case 1: - _writer.Write((byte)TypeCode.Array_1); + WriteByte((byte)TypeCode.Array_1); break; case 2: - _writer.Write((byte)TypeCode.Array_2); + WriteByte((byte)TypeCode.Array_2); break; case 3: - _writer.Write((byte)TypeCode.Array_3); + WriteByte((byte)TypeCode.Array_3); break; default: - _writer.Write((byte)TypeCode.Array); - this.WriteCompressedUInt((uint)length); + WriteByte((byte)TypeCode.Array); + WriteCompressedUInt((uint)length); break; } @@ -512,8 +512,8 @@ private void WriteArray(Array array) if (s_typeMap.TryGetValue(elementType, out var elementKind)) { - this.WritePrimitiveType(elementType, elementKind); - this.WritePrimitiveTypeArrayElements(elementType, elementKind, array); + WritePrimitiveType(elementType, elementKind); + WritePrimitiveTypeArrayElements(elementType, elementKind, array); } else { @@ -524,9 +524,7 @@ private void WriteArray(Array array) private void WriteArrayValues(Array array) { for (var i = 0; i < array.Length; i++) - { - this.WriteValue(array.GetValue(i)); - } + WriteValue(array.GetValue(i)); } private void WritePrimitiveTypeArrayElements(Type type, TypeCode kind, Array instance) @@ -613,101 +611,79 @@ private void WriteBooleanArrayElements(bool[] array) private void WriteStringArrayElements(string[] array) { for (var i = 0; i < array.Length; i++) - { WriteStringValue(array[i]); - } } private void WriteInt8ArrayElements(sbyte[] array) { for (var i = 0; i < array.Length; i++) - { - _writer.Write(array[i]); - } + WriteSByte(array[i]); } private void WriteInt16ArrayElements(short[] array) { for (var i = 0; i < array.Length; i++) - { - _writer.Write(array[i]); - } + WriteInt16(array[i]); } private void WriteInt32ArrayElements(int[] array) { for (var i = 0; i < array.Length; i++) - { - _writer.Write(array[i]); - } + WriteInt32(array[i]); } private void WriteInt64ArrayElements(long[] array) { for (var i = 0; i < array.Length; i++) - { - _writer.Write(array[i]); - } + WriteInt64(array[i]); } private void WriteUInt16ArrayElements(ushort[] array) { for (var i = 0; i < array.Length; i++) - { - _writer.Write(array[i]); - } + WriteUInt16(array[i]); } private void WriteUInt32ArrayElements(uint[] array) { for (var i = 0; i < array.Length; i++) - { - _writer.Write(array[i]); - } + WriteUInt32(array[i]); } private void WriteUInt64ArrayElements(ulong[] array) { for (var i = 0; i < array.Length; i++) - { - _writer.Write(array[i]); - } + WriteUInt64(array[i]); } private void WriteDecimalArrayElements(decimal[] array) { for (var i = 0; i < array.Length; i++) - { - _writer.Write(array[i]); - } + WriteDecimal(array[i]); } private void WriteFloat4ArrayElements(float[] array) { for (var i = 0; i < array.Length; i++) - { - _writer.Write(array[i]); - } + WriteSingle(array[i]); } private void WriteFloat8ArrayElements(double[] array) { for (var i = 0; i < array.Length; i++) - { - _writer.Write(array[i]); - } + WriteDouble(array[i]); } private void WritePrimitiveType(Type type, TypeCode kind) { Debug.Assert(s_typeMap[type] == kind); - _writer.Write((byte)kind); + WriteByte((byte)kind); } public void WriteType(Type type) { - _writer.Write((byte)TypeCode.Type); - this.WriteString(type.AssemblyQualifiedName); + WriteByte((byte)TypeCode.Type); + WriteString(type.AssemblyQualifiedName); } public void WriteEncoding(Encoding? encoding) From 432d7467c0b5cd20ada542ee3174c205c57e0b69 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 30 Jan 2024 12:39:08 -0800 Subject: [PATCH 2/5] Read uniformly in objectwriter --- .../Core/Serialization/ObjectReader.cs | 104 +++++++----------- 1 file changed, 41 insertions(+), 63 deletions(-) diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Serialization/ObjectReader.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Serialization/ObjectReader.cs index aaf80406a685a..9d2b0aa00c87f 100644 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Serialization/ObjectReader.cs +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Serialization/ObjectReader.cs @@ -182,13 +182,13 @@ public object ReadValue() case TypeCode.Null: return null; case TypeCode.Boolean_True: return true; case TypeCode.Boolean_False: return false; - case TypeCode.Int8: return _reader.ReadSByte(); - case TypeCode.UInt8: return _reader.ReadByte(); - case TypeCode.Int16: return _reader.ReadInt16(); - case TypeCode.UInt16: return _reader.ReadUInt16(); - case TypeCode.Int32: return _reader.ReadInt32(); - case TypeCode.Int32_1Byte: return (int)_reader.ReadByte(); - case TypeCode.Int32_2Bytes: return (int)_reader.ReadUInt16(); + case TypeCode.Int8: return ReadSByte(); + case TypeCode.UInt8: return ReadByte(); + case TypeCode.Int16: return ReadInt16(); + case TypeCode.UInt16: return ReadUInt16(); + case TypeCode.Int32: return ReadInt32(); + case TypeCode.Int32_1Byte: return (int)ReadByte(); + case TypeCode.Int32_2Bytes: return (int)ReadUInt16(); case TypeCode.Int32_0: case TypeCode.Int32_1: case TypeCode.Int32_2: @@ -201,9 +201,9 @@ public object ReadValue() case TypeCode.Int32_9: case TypeCode.Int32_10: return (int)code - (int)TypeCode.Int32_0; - case TypeCode.UInt32: return _reader.ReadUInt32(); - case TypeCode.UInt32_1Byte: return (uint)_reader.ReadByte(); - case TypeCode.UInt32_2Bytes: return (uint)_reader.ReadUInt16(); + case TypeCode.UInt32: return ReadUInt32(); + case TypeCode.UInt32_1Byte: return (uint)ReadByte(); + case TypeCode.UInt32_2Bytes: return (uint)ReadUInt16(); case TypeCode.UInt32_0: case TypeCode.UInt32_1: case TypeCode.UInt32_2: @@ -216,14 +216,14 @@ public object ReadValue() case TypeCode.UInt32_9: case TypeCode.UInt32_10: return (uint)((int)code - (int)TypeCode.UInt32_0); - case TypeCode.Int64: return _reader.ReadInt64(); - case TypeCode.UInt64: return _reader.ReadUInt64(); - case TypeCode.Float4: return _reader.ReadSingle(); - case TypeCode.Float8: return _reader.ReadDouble(); - case TypeCode.Decimal: return _reader.ReadDecimal(); + case TypeCode.Int64: return ReadInt64(); + case TypeCode.UInt64: return ReadUInt64(); + case TypeCode.Float4: return ReadSingle(); + case TypeCode.Float8: return ReadDouble(); + case TypeCode.Decimal: return ReadDecimal(); case TypeCode.Char: // read as ushort because BinaryWriter fails on chars that are unicode surrogates - return (char)_reader.ReadUInt16(); + return (char)ReadUInt16(); case TypeCode.StringUtf8: case TypeCode.StringUtf16: case TypeCode.StringRef_4Bytes: @@ -231,7 +231,7 @@ public object ReadValue() case TypeCode.StringRef_2Bytes: return ReadStringValue(code); case TypeCode.DateTime: - return DateTime.FromBinary(_reader.ReadInt64()); + return DateTime.FromBinary(ReadInt64()); case TypeCode.Array: case TypeCode.Array_0: case TypeCode.Array_1: @@ -255,7 +255,7 @@ public object ReadValue() public (char[] array, int length) ReadCharArray(Func getArray) { - var kind = (TypeCode)_reader.ReadByte(); + var kind = (TypeCode)ReadByte(); (var length, _) = ReadArrayLengthAndElementKind(kind); var array = getArray(length); @@ -307,7 +307,7 @@ public T GetValue(int referenceId) internal uint ReadCompressedUInt() { - var info = _reader.ReadByte(); + var info = ReadByte(); var marker = (byte)(info & ObjectWriter.ByteMarkerMask); var byte0 = (byte)(info & ~ObjectWriter.ByteMarkerMask); @@ -318,15 +318,15 @@ internal uint ReadCompressedUInt() if (marker == ObjectWriter.Byte2Marker) { - var byte1 = _reader.ReadByte(); + var byte1 = ReadByte(); return (((uint)byte0) << 8) | byte1; } if (marker == ObjectWriter.Byte4Marker) { - var byte1 = _reader.ReadByte(); - var byte2 = _reader.ReadByte(); - var byte3 = _reader.ReadByte(); + var byte1 = ReadByte(); + var byte2 = ReadByte(); + var byte3 = ReadByte(); return (((uint)byte0) << 24) | (((uint)byte1) << 16) | (((uint)byte2) << 8) | byte3; } @@ -336,7 +336,7 @@ internal uint ReadCompressedUInt() private string ReadStringValue() { - var kind = (TypeCode)_reader.ReadByte(); + var kind = (TypeCode)ReadByte(); return kind == TypeCode.Null ? null : ReadStringValue(kind); } @@ -344,9 +344,9 @@ private string ReadStringValue(TypeCode kind) { return kind switch { - TypeCode.StringRef_1Byte => _stringReferenceMap.GetValue(_reader.ReadByte()), - TypeCode.StringRef_2Bytes => _stringReferenceMap.GetValue(_reader.ReadUInt16()), - TypeCode.StringRef_4Bytes => _stringReferenceMap.GetValue(_reader.ReadInt32()), + TypeCode.StringRef_1Byte => _stringReferenceMap.GetValue(ReadByte()), + TypeCode.StringRef_2Bytes => _stringReferenceMap.GetValue(ReadUInt16()), + TypeCode.StringRef_4Bytes => _stringReferenceMap.GetValue(ReadInt32()), TypeCode.StringUtf16 or TypeCode.StringUtf8 => ReadStringLiteral(kind), _ => throw ExceptionUtilities.UnexpectedValue(kind), }; @@ -357,7 +357,7 @@ private unsafe string ReadStringLiteral(TypeCode kind) string value; if (kind == TypeCode.StringUtf8) { - value = _reader.ReadString(); + value = ReadString(); } else { @@ -401,7 +401,7 @@ private Array ReadArray(TypeCode kind) }; // SUBTLE: If it was a primitive array, only the EncodingKind byte of the element type was written, instead of encoding as a type. - var elementKind = (TypeCode)_reader.ReadByte(); + var elementKind = (TypeCode)ReadByte(); return (length, elementKind); } @@ -450,7 +450,7 @@ private bool[] ReadBooleanArrayElements(bool[] array) var count = 0; for (var i = 0; i < wordLength; i++) { - var word = _reader.ReadUInt64(); + var word = ReadUInt64(); for (var p = 0; p < BitVector.BitsPerWord; p++) { @@ -482,9 +482,7 @@ private static T[] CreateArray(int length) private string[] ReadStringArrayElements(string[] array) { for (var i = 0; i < array.Length; i++) - { array[i] = this.ReadStringValue(); - } return array; } @@ -492,9 +490,7 @@ private string[] ReadStringArrayElements(string[] array) private sbyte[] ReadInt8ArrayElements(sbyte[] array) { for (var i = 0; i < array.Length; i++) - { - array[i] = _reader.ReadSByte(); - } + array[i] = ReadSByte(); return array; } @@ -502,9 +498,7 @@ private sbyte[] ReadInt8ArrayElements(sbyte[] array) private short[] ReadInt16ArrayElements(short[] array) { for (var i = 0; i < array.Length; i++) - { - array[i] = _reader.ReadInt16(); - } + array[i] = ReadInt16(); return array; } @@ -512,9 +506,7 @@ private short[] ReadInt16ArrayElements(short[] array) private int[] ReadInt32ArrayElements(int[] array) { for (var i = 0; i < array.Length; i++) - { - array[i] = _reader.ReadInt32(); - } + array[i] = ReadInt32(); return array; } @@ -522,9 +514,7 @@ private int[] ReadInt32ArrayElements(int[] array) private long[] ReadInt64ArrayElements(long[] array) { for (var i = 0; i < array.Length; i++) - { - array[i] = _reader.ReadInt64(); - } + array[i] = ReadInt64(); return array; } @@ -532,9 +522,7 @@ private long[] ReadInt64ArrayElements(long[] array) private ushort[] ReadUInt16ArrayElements(ushort[] array) { for (var i = 0; i < array.Length; i++) - { - array[i] = _reader.ReadUInt16(); - } + array[i] = ReadUInt16(); return array; } @@ -542,9 +530,7 @@ private ushort[] ReadUInt16ArrayElements(ushort[] array) private uint[] ReadUInt32ArrayElements(uint[] array) { for (var i = 0; i < array.Length; i++) - { - array[i] = _reader.ReadUInt32(); - } + array[i] = ReadUInt32(); return array; } @@ -552,9 +538,7 @@ private uint[] ReadUInt32ArrayElements(uint[] array) private ulong[] ReadUInt64ArrayElements(ulong[] array) { for (var i = 0; i < array.Length; i++) - { - array[i] = _reader.ReadUInt64(); - } + array[i] = ReadUInt64(); return array; } @@ -562,9 +546,7 @@ private ulong[] ReadUInt64ArrayElements(ulong[] array) private decimal[] ReadDecimalArrayElements(decimal[] array) { for (var i = 0; i < array.Length; i++) - { - array[i] = _reader.ReadDecimal(); - } + array[i] = ReadDecimal(); return array; } @@ -572,9 +554,7 @@ private decimal[] ReadDecimalArrayElements(decimal[] array) private float[] ReadFloat4ArrayElements(float[] array) { for (var i = 0; i < array.Length; i++) - { - array[i] = _reader.ReadSingle(); - } + array[i] = ReadSingle(); return array; } @@ -582,16 +562,14 @@ private float[] ReadFloat4ArrayElements(float[] array) private double[] ReadFloat8ArrayElements(double[] array) { for (var i = 0; i < array.Length; i++) - { - array[i] = _reader.ReadDouble(); - } + array[i] = ReadDouble(); return array; } public Type ReadType() { - _reader.ReadByte(); + ReadByte(); return Type.GetType(ReadString()); } From dacead23727864d3a3947870a53b0ca7008f24d2 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 30 Jan 2024 12:52:54 -0800 Subject: [PATCH 3/5] Fixup --- .../Compiler/Core/Serialization/ObjectReader.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Serialization/ObjectReader.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Serialization/ObjectReader.cs index 9d2b0aa00c87f..4e6db7b0aa91e 100644 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Serialization/ObjectReader.cs +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Serialization/ObjectReader.cs @@ -176,7 +176,7 @@ public Guid ReadGuid() public object ReadValue() { - var code = (TypeCode)_reader.ReadByte(); + var code = (TypeCode)ReadByte(); switch (code) { case TypeCode.Null: return null; From a84aabecac07f98ee875419b8e88c871b1b56d32 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 30 Jan 2024 12:53:36 -0800 Subject: [PATCH 4/5] Fixup --- .../Compiler/Core/Serialization/ObjectWriter.cs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Serialization/ObjectWriter.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Serialization/ObjectWriter.cs index 0275202a4151d..c704ef7c10216 100644 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Serialization/ObjectWriter.cs +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Serialization/ObjectWriter.cs @@ -80,8 +80,8 @@ public ObjectWriter( private void WriteVersion() { - _writer.Write(ObjectReader.VersionByte1); - _writer.Write(ObjectReader.VersionByte2); + WriteByte(ObjectReader.VersionByte1); + WriteByte(ObjectReader.VersionByte2); } public void Dispose() @@ -603,9 +603,7 @@ private void WriteBooleanArrayElements(bool[] array) // send over bit array foreach (var word in bits.Words()) - { - _writer.Write(word); - } + WriteUInt64(word); } private void WriteStringArrayElements(string[] array) From 0dfc52613e9d849f13b9e30e6c851684c1255e09 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Tue, 30 Jan 2024 13:52:19 -0800 Subject: [PATCH 5/5] Revert --- .../Compiler/Core/Serialization/ObjectReader.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Serialization/ObjectReader.cs b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Serialization/ObjectReader.cs index 4e6db7b0aa91e..b28c200bc21bc 100644 --- a/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Serialization/ObjectReader.cs +++ b/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Serialization/ObjectReader.cs @@ -357,7 +357,7 @@ private unsafe string ReadStringLiteral(TypeCode kind) string value; if (kind == TypeCode.StringUtf8) { - value = ReadString(); + value = _reader.ReadString(); } else {