Adding placeholder Span debugger proxy (#14749)
authorAhson Khan <ahkha@microsoft.com>
Wed, 8 Nov 2017 22:29:51 +0000 (14:29 -0800)
committerGitHub <noreply@github.com>
Wed, 8 Nov 2017 22:29:51 +0000 (14:29 -0800)
* Adding placeholder Span debugger proxy.

* Remove unnecessary unsafe keyword.

src/mscorlib/shared/System.Private.CoreLib.Shared.projitems
src/mscorlib/shared/System/ReadOnlySpan.cs
src/mscorlib/shared/System/Span.cs
src/mscorlib/shared/System/SpanDebugView.cs [new file with mode: 0644]

index 5b7629f..6823437 100644 (file)
     <Compile Include="$(MSBuildThisFileDirectory)System\SerializableAttribute.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)System\Single.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)System\Span.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)System\SpanDebugView.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)System\Span.NonGeneric.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)System\String.Searching.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)System\StringSpanHelpers.cs" />
index c5f301a..a0a0cf9 100644 (file)
@@ -15,6 +15,7 @@ namespace System
     /// ReadOnlySpan represents a contiguous region of arbitrary memory. Unlike arrays, it can point to either managed
     /// or native memory, or to memory allocated on the stack. It is type- and memory-safe.
     /// </summary>
+    [DebuggerTypeProxy(typeof(SpanDebugView<>))]
     [DebuggerDisplay("{DebuggerDisplay,nq}")]
     [NonVersionable]
     public readonly ref struct ReadOnlySpan<T>
index 261b15c..f885c63 100644 (file)
@@ -21,6 +21,7 @@ namespace System
     /// Span represents a contiguous region of arbitrary memory. Unlike arrays, it can point to either managed
     /// or native memory, or to memory allocated on the stack. It is type- and memory-safe.
     /// </summary>
+    [DebuggerTypeProxy(typeof(SpanDebugView<>))]
     [DebuggerDisplay("{DebuggerDisplay,nq}")]
     [NonVersionable]
     public readonly ref struct Span<T>
diff --git a/src/mscorlib/shared/System/SpanDebugView.cs b/src/mscorlib/shared/System/SpanDebugView.cs
new file mode 100644 (file)
index 0000000..caa12ef
--- /dev/null
@@ -0,0 +1,28 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Diagnostics;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+namespace System
+{
+    internal sealed class SpanDebugView<T>
+    {
+        private readonly T[] _array;
+
+        public SpanDebugView(Span<T> span)
+        {
+           _array = span.ToArray();
+        }
+
+        public SpanDebugView(ReadOnlySpan<T> span)
+        {
+            _array = span.ToArray();
+        }
+
+        [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]
+        public T[] Items => _array;
+    }
+}