Simplify StackFrame class (dotnet/coreclr#23483)
authorMarek Safar <marek.safar@gmail.com>
Fri, 29 Mar 2019 06:09:12 +0000 (07:09 +0100)
committerJan Kotas <jkotas@microsoft.com>
Fri, 29 Mar 2019 06:09:12 +0000 (23:09 -0700)
Commit migrated from https://github.com/dotnet/coreclr/commit/f3747cd376bd870e01eef9448de15dda97117ca1

src/coreclr/src/System.Private.CoreLib/src/System/Diagnostics/StackFrame.CoreCLR.cs
src/coreclr/src/System.Private.CoreLib/src/System/Diagnostics/StackTrace.CoreCLR.cs
src/libraries/System.Private.CoreLib/src/System/Diagnostics/StackFrame.cs
src/libraries/System.Private.CoreLib/src/System/Diagnostics/StackTrace.cs

index a08496a..e78734f 100644 (file)
@@ -3,23 +3,27 @@
 // See the LICENSE file in the project root for more information.
 
 using System.Text;
-using System;
-using System.IO;
-using System.Reflection;
 
 namespace System.Diagnostics
 {
-    /// <summary>
-    /// There is no good reason for the methods of this class to be virtual.
-    /// </summary>
     public partial class StackFrame
     {
         /// <summary>
         /// Called from the class "StackTrace"
         /// </summary>
-        internal StackFrame(bool DummyFlag1, bool DummyFlag2)
+        internal StackFrame(StackFrameHelper stackFrameHelper, int skipFrames, bool needFileInfo)
         {
-            InitMembers();
+            _method = stackFrameHelper.GetMethodBase(skipFrames);
+            _nativeOffset = stackFrameHelper.GetOffset(skipFrames);
+            _ilOffset = stackFrameHelper.GetILOffset(skipFrames);
+            _isLastFrameFromForeignExceptionStackTrace = stackFrameHelper.IsLastFrameFromForeignExceptionStackTrace(skipFrames);
+
+            if (needFileInfo)
+            {
+                _fileName = stackFrameHelper.GetFilename(skipFrames);
+                _lineNumber = stackFrameHelper.GetLineNumber(skipFrames);
+                _columnNumber = stackFrameHelper.GetColumnNumber(skipFrames);
+            }
         }
 
         private void BuildStackFrame(int skipFrames, bool needFileInfo)
index ba66b33..5c8a8c5 100644 (file)
@@ -74,24 +74,7 @@ namespace System.Diagnostics
 
                 for (int i = 0; i < _numOfFrames; i++)
                 {
-                    bool fDummy1 = true;
-                    bool fDummy2 = true;
-                    StackFrame sfTemp = new StackFrame(fDummy1, fDummy2);
-
-                    sfTemp.SetMethodBase(StackF.GetMethodBase(i));
-                    sfTemp.SetOffset(StackF.GetOffset(i));
-                    sfTemp.SetILOffset(StackF.GetILOffset(i));
-
-                    sfTemp.SetIsLastFrameFromForeignExceptionStackTrace(StackF.IsLastFrameFromForeignExceptionStackTrace(i));
-
-                    if (fNeedFileInfo)
-                    {
-                        sfTemp.SetFileName(StackF.GetFilename(i));
-                        sfTemp.SetLineNumber(StackF.GetLineNumber(i));
-                        sfTemp.SetColumnNumber(StackF.GetColumnNumber(i));
-                    }
-
-                    _stackFrames[i] = sfTemp;
+                    _stackFrames[i] = new StackFrame(StackF, i, fNeedFileInfo);
                 }
 
                 // CalculateFramesToSkip skips all frames in the System.Diagnostics namespace,
index 22c9b83..8c3d7af 100644 (file)
@@ -3,8 +3,6 @@
 // See the LICENSE file in the project root for more information.
 
 using System.Text;
-using System;
-using System.IO;
 using System.Reflection;
 
 namespace System.Diagnostics
@@ -53,13 +51,8 @@ namespace System.Diagnostics
 
         private void InitMembers()
         {
-            _method = null;
             _nativeOffset = OFFSET_UNKNOWN;
             _ilOffset = OFFSET_UNKNOWN;
-            _fileName = null;
-            _lineNumber = 0;
-            _columnNumber = 0;
-            _isLastFrameFromForeignExceptionStackTrace = false;
         }
 
         /// <summary>
@@ -68,7 +61,7 @@ namespace System.Diagnostics
         public StackFrame()
         {
             InitMembers();
-            BuildStackFrame(0 + StackTrace.METHODS_TO_SKIP, false);
+            BuildStackFrame(StackTrace.METHODS_TO_SKIP, false);
         }
 
         /// <summary>
@@ -77,7 +70,7 @@ namespace System.Diagnostics
         public StackFrame(bool needFileInfo)
         {
             InitMembers();
-            BuildStackFrame(0 + StackTrace.METHODS_TO_SKIP, needFileInfo);
+            BuildStackFrame(StackTrace.METHODS_TO_SKIP, needFileInfo);
         }
 
         /// <summary>
@@ -106,10 +99,10 @@ namespace System.Diagnostics
         public StackFrame(string fileName, int lineNumber)
         {
             InitMembers();
+
             BuildStackFrame(StackTrace.METHODS_TO_SKIP, false);
             _fileName = fileName;
             _lineNumber = lineNumber;
-            _columnNumber = 0;
         }
 
         /// <summary>
@@ -118,11 +111,8 @@ namespace System.Diagnostics
         /// use the debugger's line mapping logic.
         /// </summary>
         public StackFrame(string fileName, int lineNumber, int colNumber)
+            : this (fileName, lineNumber)
         {
-            InitMembers();
-            BuildStackFrame(StackTrace.METHODS_TO_SKIP, false);
-            _fileName = fileName;
-            _lineNumber = lineNumber;
             _columnNumber = colNumber;
         }
 
@@ -131,45 +121,7 @@ namespace System.Diagnostics
         /// </summary>
         public const int OFFSET_UNKNOWN = -1;
 
-        internal virtual void SetMethodBase(MethodBase mb)
-        {
-            _method = mb;
-        }
-
-        internal virtual void SetOffset(int iOffset)
-        {
-            _nativeOffset = iOffset;
-        }
-
-        internal virtual void SetILOffset(int iOffset)
-        {
-            _ilOffset = iOffset;
-        }
-
-        internal virtual void SetFileName(string strFName)
-        {
-            _fileName = strFName;
-        }
-
-        internal virtual void SetLineNumber(int iLine)
-        {
-            _lineNumber = iLine;
-        }
-
-        internal virtual void SetColumnNumber(int iCol)
-        {
-            _columnNumber = iCol;
-        }
-
-        internal virtual void SetIsLastFrameFromForeignExceptionStackTrace(bool fIsLastFrame)
-        {
-            _isLastFrameFromForeignExceptionStackTrace = fIsLastFrame;
-        }
-
-        internal virtual bool GetIsLastFrameFromForeignExceptionStackTrace()
-        {
-            return _isLastFrameFromForeignExceptionStackTrace;
-        }
+        internal bool IsLastFrameFromForeignExceptionStackTrace => _isLastFrameFromForeignExceptionStackTrace;
 
         /// <summary>
         /// Returns the method the frame is executing
@@ -278,13 +230,7 @@ namespace System.Diagnostics
                     sb.Append(_nativeOffset);
 
                 sb.Append(" in file:line:column ");
-
-                bool useFileName = (_fileName != null);
-
-                if (!useFileName)
-                    sb.Append("<filename unknown>");
-                else
-                    sb.Append(_fileName);
+                sb.Append(_fileName ?? "<filename unknown>");
                 sb.Append(':');
                 sb.Append(_lineNumber);
                 sb.Append(':');
index bec0e24..7b612a4 100644 (file)
@@ -320,8 +320,8 @@ namespace System.Diagnostics
                         }
                     }
 
-                    if (sf.GetIsLastFrameFromForeignExceptionStackTrace() &&
-                        !isAsync) // Skip EDI boundary for async
+                    // Skip EDI boundary for async
+                    if (sf.IsLastFrameFromForeignExceptionStackTrace && !isAsync)
                     {
                         sb.Append(Environment.NewLine);
                         sb.Append(SR.Exception_EndStackTraceFromPreviousThrow);