2using System.Diagnostics.SymbolStore;
7 internal sealed class LocalSymInfo
13 #region Internal Data Members
14 internal string[] m_strName =
null!;
15 internal byte[][] m_ubSignature =
null!;
16 internal int[] m_iLocalSlot =
null!;
17 internal int[] m_iStartOffset =
null!;
18 internal int[] m_iEndOffset =
null!;
19 internal int m_iLocalSymCount;
20 internal string[] m_namespace =
null!;
21 internal int m_iNameSpaceCount;
22 internal const int InitialSize = 16;
26 internal LocalSymInfo()
30 m_iNameSpaceCount = 0;
34 #region Private Members
35 private void EnsureCapacityNamespace()
37 if (m_iNameSpaceCount == 0)
39 m_namespace =
new string[InitialSize];
41 else if (m_iNameSpaceCount == m_namespace.Length)
43 string[] strTemp =
new string[checked(m_iNameSpaceCount * 2)];
44 Array.Copy(m_namespace, strTemp, m_iNameSpaceCount);
45 m_namespace = strTemp;
49 private void EnsureCapacity()
51 if (m_iLocalSymCount == 0)
54 m_strName =
new string[InitialSize];
55 m_ubSignature =
new byte[InitialSize][];
56 m_iLocalSlot =
new int[InitialSize];
57 m_iStartOffset =
new int[InitialSize];
58 m_iEndOffset =
new int[InitialSize];
60 else if (m_iLocalSymCount == m_strName.Length)
64 int newSize = checked(m_iLocalSymCount * 2);
65 int[] temp =
new int[newSize];
66 Array.Copy(m_iLocalSlot, temp, m_iLocalSymCount);
69 temp =
new int[newSize];
70 Array.Copy(m_iStartOffset, temp, m_iLocalSymCount);
71 m_iStartOffset = temp;
73 temp =
new int[newSize];
74 Array.Copy(m_iEndOffset, temp, m_iLocalSymCount);
77 string[] strTemp =
new string[newSize];
78 Array.Copy(m_strName, strTemp, m_iLocalSymCount);
81 byte[][] ubTemp =
new byte[newSize][];
82 Array.Copy(m_ubSignature, ubTemp, m_iLocalSymCount);
83 m_ubSignature = ubTemp;
89 #region Internal Members
90 internal void AddLocalSymInfo(
string strName,
byte[] signature,
int slot,
int startOffset,
int endOffset)
94 m_iStartOffset[m_iLocalSymCount] = startOffset;
95 m_iEndOffset[m_iLocalSymCount] = endOffset;
96 m_iLocalSlot[m_iLocalSymCount] = slot;
97 m_strName[m_iLocalSymCount] = strName;
98 m_ubSignature[m_iLocalSymCount] = signature;
99 checked { m_iLocalSymCount++; }
102 internal void AddUsingNamespace(
string strNamespace)
104 EnsureCapacityNamespace();
105 m_namespace[m_iNameSpaceCount] = strNamespace;
106 checked { m_iNameSpaceCount++; }
108 internal void EmitLocalSymInfo(ISymbolWriter symWriter)
112 for (i = 0; i < m_iLocalSymCount; i++)
114 symWriter.DefineLocalVariable(
116 System.Reflection.FieldAttributes.PrivateScope,
118 SymAddressKind.ILOffset,
125 for (i = 0; i < m_iNameSpaceCount; i++)
127 symWriter.UsingNamespace(m_namespace[i]);