Пример #1
0
        internal void GenerateDebugInfo(ISymbolWriter symbolWriter)
        {
            if (sequencePointLists != null)
            {
                SequencePointList first = (SequencePointList)sequencePointLists [0];
                SequencePointList last  = (SequencePointList)sequencePointLists [sequencePointLists.Count - 1];
                symbolWriter.SetMethodSourceRange(first.Document, first.StartLine, first.StartColumn, last.Document, last.EndLine, last.EndColumn);

                foreach (SequencePointList list in sequencePointLists)
                {
                    symbolWriter.DefineSequencePoints(list.Document, list.GetOffsets(), list.GetLines(), list.GetColumns(), list.GetEndLines(), list.GetEndColumns());
                }

                if (locals != null)
                {
                    foreach (LocalBuilder local in locals)
                    {
                        if (local.Name != null && local.Name.Length > 0)
                        {
                            SignatureHelper sighelper = SignatureHelper.GetLocalVarSigHelper(module as ModuleBuilder);
                            sighelper.AddArgument(local.LocalType);
                            byte[] signature = sighelper.GetSignature();
                            symbolWriter.DefineLocalVariable(local.Name, FieldAttributes.Public, signature, SymAddressKind.ILOffset, local.position, 0, 0, local.StartOffset, local.EndOffset);
                        }
                    }
                }
                sequencePointLists = null;
            }
        }
 internal void EmitLineNumberInfo(ISymbolWriter symWriter)
 {
     if (this.m_iLineNumberCount != 0)
     {
         int[] destinationArray = new int[this.m_iLineNumberCount];
         Array.Copy(this.m_iOffsets, destinationArray, this.m_iLineNumberCount);
         int[] numArray2 = new int[this.m_iLineNumberCount];
         Array.Copy(this.m_iLines, numArray2, this.m_iLineNumberCount);
         int[] numArray3 = new int[this.m_iLineNumberCount];
         Array.Copy(this.m_iColumns, numArray3, this.m_iLineNumberCount);
         int[] numArray4 = new int[this.m_iLineNumberCount];
         Array.Copy(this.m_iEndLines, numArray4, this.m_iLineNumberCount);
         int[] numArray5 = new int[this.m_iLineNumberCount];
         Array.Copy(this.m_iEndColumns, numArray5, this.m_iLineNumberCount);
         symWriter.DefineSequencePoints(this.m_document, destinationArray, numArray2, numArray3, numArray4, numArray5);
     }
 }
 internal void EmitLineNumberInfo(ISymbolWriter symWriter)
 {
     if (this.m_iLineNumberCount != 0)
     {
         int[] destinationArray = new int[this.m_iLineNumberCount];
         Array.Copy(this.m_iOffsets, destinationArray, this.m_iLineNumberCount);
         int[] numArray2 = new int[this.m_iLineNumberCount];
         Array.Copy(this.m_iLines, numArray2, this.m_iLineNumberCount);
         int[] numArray3 = new int[this.m_iLineNumberCount];
         Array.Copy(this.m_iColumns, numArray3, this.m_iLineNumberCount);
         int[] numArray4 = new int[this.m_iLineNumberCount];
         Array.Copy(this.m_iEndLines, numArray4, this.m_iLineNumberCount);
         int[] numArray5 = new int[this.m_iLineNumberCount];
         Array.Copy(this.m_iEndColumns, numArray5, this.m_iLineNumberCount);
         symWriter.DefineSequencePoints(this.m_document, destinationArray, numArray2, numArray3, numArray4, numArray5);
     }
 }
Пример #4
0
 internal void EmitLineNumberInfo(ISymbolWriter symWriter)
 {
     if (this.m_iLineNumberCount == 0)
     {
         return;
     }
     int[] offsets = new int[this.m_iLineNumberCount];
     Array.Copy((Array)this.m_iOffsets, (Array)offsets, this.m_iLineNumberCount);
     int[] lines = new int[this.m_iLineNumberCount];
     Array.Copy((Array)this.m_iLines, (Array)lines, this.m_iLineNumberCount);
     int[] columns = new int[this.m_iLineNumberCount];
     Array.Copy((Array)this.m_iColumns, (Array)columns, this.m_iLineNumberCount);
     int[] endLines = new int[this.m_iLineNumberCount];
     Array.Copy((Array)this.m_iEndLines, (Array)endLines, this.m_iLineNumberCount);
     int[] endColumns = new int[this.m_iLineNumberCount];
     Array.Copy((Array)this.m_iEndColumns, (Array)endColumns, this.m_iLineNumberCount);
     symWriter.DefineSequencePoints(this.m_document, offsets, lines, columns, endLines, endColumns);
 }
Пример #5
0
 // Token: 0x060049E5 RID: 18917 RVA: 0x0010B324 File Offset: 0x00109524
 internal void EmitLineNumberInfo(ISymbolWriter symWriter)
 {
     if (this.m_iLineNumberCount == 0)
     {
         return;
     }
     int[] array = new int[this.m_iLineNumberCount];
     Array.Copy(this.m_iOffsets, array, this.m_iLineNumberCount);
     int[] array2 = new int[this.m_iLineNumberCount];
     Array.Copy(this.m_iLines, array2, this.m_iLineNumberCount);
     int[] array3 = new int[this.m_iLineNumberCount];
     Array.Copy(this.m_iColumns, array3, this.m_iLineNumberCount);
     int[] array4 = new int[this.m_iLineNumberCount];
     Array.Copy(this.m_iEndLines, array4, this.m_iLineNumberCount);
     int[] array5 = new int[this.m_iLineNumberCount];
     Array.Copy(this.m_iEndColumns, array5, this.m_iLineNumberCount);
     symWriter.DefineSequencePoints(this.m_document, array, array2, array3, array4, array5);
 }
Пример #6
0
        [System.Security.SecurityCritical] // auto-generated
        #endif
        internal void EmitLineNumberInfo(ISymbolWriter symWriter)
        {
            int[]       iOffsetsTemp;
            int[]       iLinesTemp;
            int[]       iColumnsTemp;
            int[]       iEndLinesTemp;
            int[]       iEndColumnsTemp;

            if (m_iLineNumberCount == 0)
                return;
            // reduce the array size to be exact
            iOffsetsTemp = new int [m_iLineNumberCount];
            Array.Copy(m_iOffsets, iOffsetsTemp, m_iLineNumberCount);

            iLinesTemp = new int [m_iLineNumberCount];
            Array.Copy(m_iLines, iLinesTemp, m_iLineNumberCount);

            iColumnsTemp = new int [m_iLineNumberCount];
            Array.Copy(m_iColumns, iColumnsTemp, m_iLineNumberCount);

            iEndLinesTemp = new int [m_iLineNumberCount];
            Array.Copy(m_iEndLines, iEndLinesTemp, m_iLineNumberCount);

            iEndColumnsTemp = new int [m_iLineNumberCount];
            Array.Copy(m_iEndColumns, iEndColumnsTemp, m_iLineNumberCount);

            symWriter.DefineSequencePoints(m_document, iOffsetsTemp, iLinesTemp, iColumnsTemp, iEndLinesTemp, iEndColumnsTemp); 
        }
Пример #7
0
		internal void GenerateDebugInfo (ISymbolWriter symbolWriter)
		{
			if (sequencePointLists != null) {
				SequencePointList first = (SequencePointList) sequencePointLists [0];
				SequencePointList last = (SequencePointList) sequencePointLists [sequencePointLists.Count - 1];
				symbolWriter.SetMethodSourceRange (first.Document, first.StartLine, first.StartColumn, last.Document, last.EndLine, last.EndColumn);
				
				foreach (SequencePointList list in sequencePointLists)
					symbolWriter.DefineSequencePoints (list.Document, list.GetOffsets(), list.GetLines(), list.GetColumns(), list.GetEndLines(), list.GetEndColumns());
				
				if (locals != null) {
					foreach (LocalBuilder local in locals) {
						if (local.Name != null && local.Name.Length > 0) {
							SignatureHelper sighelper = SignatureHelper.GetLocalVarSigHelper (module as ModuleBuilder);
							sighelper.AddArgument (local.LocalType);
							byte[] signature = sighelper.GetSignature ();
							symbolWriter.DefineLocalVariable (local.Name, FieldAttributes.Public, signature, SymAddressKind.ILOffset, local.position, 0, 0, local.StartOffset, local.EndOffset);
						}
					}
				}
				sequencePointLists = null;
			}
		}
Пример #8
0
        void CreateScopes(MethodBody body, ScopeCollection scopes)
        {
            foreach (Scope s in scopes)
            {
                int startOffset = s.Start.Offset;
                int endOffset   = s.End == body.Instructions.Outside ?
                                  body.Instructions[body.Instructions.Count - 1].Offset + 1 :
                                  s.End.Offset;

                m_writer.OpenScope(startOffset);
                m_writer.UsingNamespace(body.Method.DeclaringType.Namespace);
                m_writer.OpenNamespace(body.Method.DeclaringType.Namespace);

                int start = Math.Max(0, body.Instructions.IndexOf(s.Start));
                int end   = s.End == body.Instructions.Outside ?
                            body.Instructions.Count - 1 :
                            body.Instructions.IndexOf(s.End);

                ArrayList instructions = new ArrayList();
                for (int i = start; i <= end; i++)
                {
                    if (body.Instructions[i] != null && body.Instructions[i].SequencePoint != null)
                    {
                        instructions.Add(body.Instructions [i]);
                    }
                }

                Document doc = null;

                int [] offsets   = new int [instructions.Count];
                int [] startRows = new int [instructions.Count];
                int [] startCols = new int [instructions.Count];
                int [] endRows   = new int [instructions.Count];
                int [] endCols   = new int [instructions.Count];

                for (int i = 0; i < instructions.Count; i++)
                {
                    Instruction instr = (Instruction)instructions [i];
                    offsets [i] = instr.Offset;

                    if (doc == null)
                    {
                        doc = instr.SequencePoint.Document;
                    }

                    startRows [i] = instr.SequencePoint.StartLine;
                    startCols [i] = instr.SequencePoint.StartColumn;
                    endRows [i]   = instr.SequencePoint.EndLine;
                    endCols [i]   = instr.SequencePoint.EndColumn;
                }

                if (doc != null)
                {
                    m_writer.DefineSequencePoints(GetDocument(doc),
                                                  offsets, startRows, startCols, endRows, endCols);
                }

                // Cecil PDB writer does not yet write the variable names.
                // This is not yet implemented.
                // TODO local variable support

                //CreateLocalVariable (s, startOffset, endOffset);

                //CreateScopes (body, s.Scopes);
                m_writer.CloseNamespace();

                m_writer.CloseScope(endOffset);
            }
        }