Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Baulig <martin@novell.com>2004-12-09 02:45:12 +0300
committerMartin Baulig <martin@novell.com>2004-12-09 02:45:12 +0300
commitc6729ced2c3feef9d94ac9059c18728a09fa0e8a (patch)
tree482d0060db86a9b28a83b71c21bb42868b3ca9f0 /mcs/class/Mono.CSharp.Debugger/MonoSymbolTable.cs
parent1d87f158c3698a4cb58cadacca7b50e7b84ca830 (diff)
parentad934a4e832173b320419585362cc3caa052cb7c (diff)
2004-12-08 Martin Baulig <martin@ximian.com>
* Mono.CSharp.Debugger/: Renamed to Mono.CSharp.CompilerServices. (the DLL it creates has already been renamed a long time ago). svn path=/trunk/mcs/; revision=37445
Diffstat (limited to 'mcs/class/Mono.CSharp.Debugger/MonoSymbolTable.cs')
-rw-r--r--mcs/class/Mono.CSharp.Debugger/MonoSymbolTable.cs847
1 files changed, 0 insertions, 847 deletions
diff --git a/mcs/class/Mono.CSharp.Debugger/MonoSymbolTable.cs b/mcs/class/Mono.CSharp.Debugger/MonoSymbolTable.cs
deleted file mode 100644
index 4fadaf1e18b..00000000000
--- a/mcs/class/Mono.CSharp.Debugger/MonoSymbolTable.cs
+++ /dev/null
@@ -1,847 +0,0 @@
-//
-// Mono.CSharp.Debugger/MonoSymbolTable.cs
-//
-// Author:
-// Martin Baulig (martin@ximian.com)
-//
-// (C) 2002 Ximian, Inc. http://www.ximian.com
-//
-
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Collections;
-using System.Text;
-using System.IO;
-
-//
-// Parts which are actually written into the symbol file are marked with
-//
-// #region This is actually written to the symbol file
-// #endregion
-//
-// Please do not modify these regions without previously talking to me.
-//
-// All changes to the file format must be synchronized in several places:
-//
-// a) The fields in these regions (and their order) must match the actual
-// contents of the symbol file.
-//
-// This helps people to understand the symbol file format without reading
-// too much source code, ie. you look at the appropriate region and then
-// you know what's actually in the file.
-//
-// It is also required to help me enforce b).
-//
-// b) The regions must be kept in sync with the unmanaged code in
-// mono/metadata/debug-mono-symfile.h
-//
-// When making changes to the file format, you must also increase two version
-// numbers:
-//
-// i) OffsetTable.Version in this file.
-// ii) MONO_SYMBOL_FILE_VERSION in mono/metadata/debug-mono-symfile.h
-//
-// After doing so, recompile everything, including the debugger. Symbol files
-// with different versions are incompatible to each other and the debugger and
-// the runtime enfore this, so you need to recompile all your assemblies after
-// changing the file format.
-//
-
-namespace Mono.CompilerServices.SymbolWriter
-{
- public struct OffsetTable
- {
- public const int Version = 38;
- public const long Magic = 0x45e82623fd7fa614;
-
- #region This is actually written to the symbol file
- public int TotalFileSize;
- public int DataSectionOffset;
- public int DataSectionSize;
- public int SourceCount;
- public int SourceTableOffset;
- public int SourceTableSize;
- public int MethodCount;
- public int MethodTableOffset;
- public int MethodTableSize;
- public int TypeCount;
- #endregion
-
- internal OffsetTable (BinaryReader reader)
- {
- TotalFileSize = reader.ReadInt32 ();
- DataSectionOffset = reader.ReadInt32 ();
- DataSectionSize = reader.ReadInt32 ();
- SourceCount = reader.ReadInt32 ();
- SourceTableOffset = reader.ReadInt32 ();
- SourceTableSize = reader.ReadInt32 ();
- MethodCount = reader.ReadInt32 ();
- MethodTableOffset = reader.ReadInt32 ();
- MethodTableSize = reader.ReadInt32 ();
- TypeCount = reader.ReadInt32 ();
- }
-
- internal void Write (BinaryWriter bw)
- {
- bw.Write (TotalFileSize);
- bw.Write (DataSectionOffset);
- bw.Write (DataSectionSize);
- bw.Write (SourceCount);
- bw.Write (SourceTableOffset);
- bw.Write (SourceTableSize);
- bw.Write (MethodCount);
- bw.Write (MethodTableOffset);
- bw.Write (MethodTableSize);
- bw.Write (TypeCount);
- }
-
- public override string ToString ()
- {
- return String.Format (
- "OffsetTable [{0} - {1}:{2} - {3}:{4}:{5} - {6}:{7}:{8} - {9}]",
- TotalFileSize, DataSectionOffset, DataSectionSize, SourceCount,
- SourceTableOffset, SourceTableSize, MethodCount, MethodTableOffset,
- MethodTableSize, TypeCount);
- }
- }
-
- public struct LineNumberEntry
- {
- #region This is actually written to the symbol file
- public readonly int Row;
- public readonly int Offset;
- #endregion
-
- public LineNumberEntry (int row, int offset)
- {
- this.Row = row;
- this.Offset = offset;
- }
-
- public static LineNumberEntry Null = new LineNumberEntry (0, 0);
-
- internal LineNumberEntry (BinaryReader reader)
- {
- Row = reader.ReadInt32 ();
- Offset = reader.ReadInt32 ();
- }
-
- internal void Write (BinaryWriter bw)
- {
- bw.Write (Row);
- bw.Write (Offset);
- }
-
- private class OffsetComparerClass : IComparer
- {
- public int Compare (object a, object b)
- {
- LineNumberEntry l1 = (LineNumberEntry) a;
- LineNumberEntry l2 = (LineNumberEntry) b;
-
- if (l1.Offset < l2.Offset)
- return -1;
- else if (l1.Offset > l2.Offset)
- return 1;
- else
- return 0;
- }
- }
-
- private class RowComparerClass : IComparer
- {
- public int Compare (object a, object b)
- {
- LineNumberEntry l1 = (LineNumberEntry) a;
- LineNumberEntry l2 = (LineNumberEntry) b;
-
- if (l1.Row < l2.Row)
- return -1;
- else if (l1.Row > l2.Row)
- return 1;
- else
- return 0;
- }
- }
-
- public static readonly IComparer OffsetComparer = new OffsetComparerClass ();
- public static readonly IComparer RowComparer = new RowComparerClass ();
-
- public override string ToString ()
- {
- return String.Format ("[Line {0}:{1}]", Row, Offset);
- }
- }
-
- public class LexicalBlockEntry
- {
- public int Index;
- #region This is actually written to the symbol file
- public int StartOffset;
- public int EndOffset;
- #endregion
-
- public LexicalBlockEntry (int index, int start_offset)
- {
- this.Index = index;
- this.StartOffset = start_offset;
- }
-
- internal LexicalBlockEntry (int index, MyBinaryReader reader)
- {
- this.Index = index;
- this.StartOffset = reader.ReadInt32 ();
- this.EndOffset = reader.ReadInt32 ();
- }
-
- public void Close (int end_offset)
- {
- this.EndOffset = end_offset;
- }
-
- internal void Write (MyBinaryWriter bw)
- {
- bw.Write (StartOffset);
- bw.Write (EndOffset);
- }
-
- public override string ToString ()
- {
- return String.Format ("[LexicalBlock {0}:{1}]", StartOffset, EndOffset);
- }
- }
-
- public struct LocalVariableEntry
- {
- #region This is actually written to the symbol file
- public readonly string Name;
- public readonly byte[] Signature;
- public readonly int BlockIndex;
- #endregion
-
- public LocalVariableEntry (string Name, byte[] Signature, int BlockIndex)
- {
- this.Name = Name;
- this.Signature = Signature;
- this.BlockIndex = BlockIndex;
- }
-
- internal LocalVariableEntry (MyBinaryReader reader)
- {
- Name = reader.ReadString ();
- int sig_length = reader.ReadLeb128 ();
- Signature = reader.ReadBytes (sig_length);
- BlockIndex = reader.ReadLeb128 ();
- }
-
- internal void Write (MonoSymbolFile file, MyBinaryWriter bw)
- {
- bw.Write (Name);
- bw.WriteLeb128 ((int) Signature.Length);
- bw.Write (Signature);
- bw.WriteLeb128 (BlockIndex);
- }
-
- public override string ToString ()
- {
- return String.Format ("[LocalVariable {0}]", Name);
- }
- }
-
- public class SourceFileEntry
- {
- #region This is actually written to the symbol file
- public readonly int Index;
- int Count;
- int NamespaceCount;
- int NameOffset;
- int MethodOffset;
- int NamespaceTableOffset;
- #endregion
-
- MonoSymbolFile file;
- string file_name;
- ArrayList methods;
- ArrayList namespaces;
- bool creating;
-
- public static int Size {
- get { return 24; }
- }
-
- public SourceFileEntry (MonoSymbolFile file, string file_name)
- {
- this.file = file;
- this.file_name = file_name;
- this.Index = file.AddSource (this);
-
- creating = true;
- methods = new ArrayList ();
- namespaces = new ArrayList ();
- }
-
- public void DefineMethod (string name, int token, LocalVariableEntry[] locals,
- LineNumberEntry[] lines, LexicalBlockEntry[] blocks,
- int start, int end, int namespace_id)
- {
- if (!creating)
- throw new InvalidOperationException ();
-
- MethodEntry entry = new MethodEntry (
- file, this, name, (int) token, locals, lines, blocks,
- start, end, namespace_id);
-
- methods.Add (entry);
- file.AddMethod (entry);
- }
-
- public int DefineNamespace (string name, string[] using_clauses, int parent)
- {
- if (!creating)
- throw new InvalidOperationException ();
-
- int index = file.GetNextNamespaceIndex ();
- NamespaceEntry ns = new NamespaceEntry (name, index, using_clauses, parent);
- namespaces.Add (ns);
- return index;
- }
-
- internal void WriteData (MyBinaryWriter bw)
- {
- NameOffset = (int) bw.BaseStream.Position;
- bw.Write (file_name);
-
- ArrayList list = new ArrayList ();
- foreach (MethodEntry entry in methods)
- list.Add (entry.Write (file, bw));
- list.Sort ();
- Count = list.Count;
-
- MethodOffset = (int) bw.BaseStream.Position;
- foreach (MethodSourceEntry method in list)
- method.Write (bw);
-
- NamespaceCount = namespaces.Count;
- NamespaceTableOffset = (int) bw.BaseStream.Position;
- foreach (NamespaceEntry ns in namespaces)
- ns.Write (file, bw);
- }
-
- internal void Write (BinaryWriter bw)
- {
- bw.Write (Index);
- bw.Write (Count);
- bw.Write (NamespaceCount);
- bw.Write (NameOffset);
- bw.Write (MethodOffset);
- bw.Write (NamespaceTableOffset);
- }
-
- internal SourceFileEntry (MonoSymbolFile file, BinaryReader reader)
- {
- this.file = file;
-
- Index = reader.ReadInt32 ();
- Count = reader.ReadInt32 ();
- NamespaceCount = reader.ReadInt32 ();
- NameOffset = reader.ReadInt32 ();
- MethodOffset = reader.ReadInt32 ();
- NamespaceTableOffset = reader.ReadInt32 ();
-
- file_name = file.ReadString (NameOffset);
- }
-
- public string FileName {
- get { return file_name; }
- }
-
- public MethodSourceEntry[] Methods {
- get {
- if (creating)
- throw new InvalidOperationException ();
-
- BinaryReader reader = file.BinaryReader;
- int old_pos = (int) reader.BaseStream.Position;
-
- reader.BaseStream.Position = MethodOffset;
- ArrayList list = new ArrayList ();
- for (int i = 0; i < Count; i ++)
- list.Add (new MethodSourceEntry (reader));
- reader.BaseStream.Position = old_pos;
-
- MethodSourceEntry[] retval = new MethodSourceEntry [Count];
- list.CopyTo (retval, 0);
- return retval;
- }
- }
-
- public NamespaceEntry[] Namespaces {
- get {
- if (creating)
- throw new InvalidOperationException ();
-
- MyBinaryReader reader = file.BinaryReader;
- int old_pos = (int) reader.BaseStream.Position;
-
- reader.BaseStream.Position = NamespaceTableOffset;
- ArrayList list = new ArrayList ();
- for (int i = 0; i < NamespaceCount; i ++)
- list.Add (new NamespaceEntry (file, reader));
- reader.BaseStream.Position = old_pos;
-
- NamespaceEntry[] retval = new NamespaceEntry [list.Count];
- list.CopyTo (retval, 0);
- return retval;
- }
- }
-
- public override string ToString ()
- {
- return String.Format ("SourceFileEntry ({0}:{1}:{2})",
- Index, file_name, Count);
- }
- }
-
- public struct MethodSourceEntry : IComparable
- {
- #region This is actually written to the symbol file
- public readonly int Index;
- public readonly int FileOffset;
- public readonly int StartRow;
- public readonly int EndRow;
- #endregion
-
- public MethodSourceEntry (int index, int file_offset, int start, int end)
- {
- this.Index = index;
- this.FileOffset = file_offset;
- this.StartRow = start;
- this.EndRow = end;
- }
-
- internal MethodSourceEntry (BinaryReader reader)
- {
- Index = reader.ReadInt32 ();
- FileOffset = reader.ReadInt32 ();
- StartRow = reader.ReadInt32 ();
- EndRow = reader.ReadInt32 ();
- }
-
- public static int Size {
- get { return 16; }
- }
-
- internal void Write (BinaryWriter bw)
- {
- bw.Write (Index);
- bw.Write (FileOffset);
- bw.Write (StartRow);
- bw.Write (EndRow);
- }
-
- public int CompareTo (object obj)
- {
- MethodSourceEntry method = (MethodSourceEntry) obj;
-
- if (method.StartRow < StartRow)
- return -1;
- else if (method.StartRow > StartRow)
- return 1;
- else
- return 0;
- }
-
- public override string ToString ()
- {
- return String.Format ("MethodSourceEntry ({0}:{1}:{2}:{3})",
- Index, FileOffset, StartRow, EndRow);
- }
- }
-
- public struct MethodIndexEntry
- {
- #region This is actually written to the symbol file
- public readonly int FileOffset;
- public readonly int Token;
- #endregion
-
- public static int Size {
- get { return 8; }
- }
-
- public MethodIndexEntry (int offset, int token)
- {
- this.FileOffset = offset;
- this.Token = token;
- }
-
- internal MethodIndexEntry (BinaryReader reader)
- {
- FileOffset = reader.ReadInt32 ();
- Token = reader.ReadInt32 ();
- }
-
- internal void Write (BinaryWriter bw)
- {
- bw.Write (FileOffset);
- bw.Write (Token);
- }
-
- public override string ToString ()
- {
- return String.Format ("MethodIndexEntry ({0}:{1:x})",
- FileOffset, Token);
- }
- }
-
- public class MethodEntry : IComparable
- {
- #region This is actually written to the symbol file
- public readonly int SourceFileIndex;
- public readonly int Token;
- public readonly int StartRow;
- public readonly int EndRow;
- public readonly int NumLocals;
- public readonly int NumLineNumbers;
- public readonly int NamespaceID;
- public readonly bool LocalNamesAmbiguous;
-
- int NameOffset;
- int TypeIndexTableOffset;
- int LocalVariableTableOffset;
- int LineNumberTableOffset;
- int NumLexicalBlocks;
- int LexicalBlockTableOffset;
- #endregion
-
- int index;
- int file_offset;
-
- public readonly SourceFileEntry SourceFile;
- public readonly LineNumberEntry[] LineNumbers;
- public readonly int[] LocalTypeIndices;
- public readonly LocalVariableEntry[] Locals;
- public readonly LexicalBlockEntry[] LexicalBlocks;
-
- public readonly MonoSymbolFile SymbolFile;
-
- public int Index {
- get { return index; }
- set { index = value; }
- }
-
- public static int Size {
- get { return 52; }
- }
-
- internal MethodEntry (MonoSymbolFile file, MyBinaryReader reader, int index)
- {
- this.SymbolFile = file;
- this.index = index;
- SourceFileIndex = reader.ReadInt32 ();
- Token = reader.ReadInt32 ();
- StartRow = reader.ReadInt32 ();
- EndRow = reader.ReadInt32 ();
- NumLocals = reader.ReadInt32 ();
- NumLineNumbers = reader.ReadInt32 ();
- NameOffset = reader.ReadInt32 ();
- TypeIndexTableOffset = reader.ReadInt32 ();
- LocalVariableTableOffset = reader.ReadInt32 ();
- LineNumberTableOffset = reader.ReadInt32 ();
- NumLexicalBlocks = reader.ReadInt32 ();
- LexicalBlockTableOffset = reader.ReadInt32 ();
- NamespaceID = reader.ReadInt32 ();
- LocalNamesAmbiguous = reader.ReadInt32 () != 0;
-
- SourceFile = file.GetSourceFile (SourceFileIndex);
-
- if (LineNumberTableOffset != 0) {
- long old_pos = reader.BaseStream.Position;
- reader.BaseStream.Position = LineNumberTableOffset;
-
- LineNumbers = new LineNumberEntry [NumLineNumbers];
-
- for (int i = 0; i < NumLineNumbers; i++)
- LineNumbers [i] = new LineNumberEntry (reader);
-
- reader.BaseStream.Position = old_pos;
- }
-
- if (LocalVariableTableOffset != 0) {
- long old_pos = reader.BaseStream.Position;
- reader.BaseStream.Position = LocalVariableTableOffset;
-
- Locals = new LocalVariableEntry [NumLocals];
-
- for (int i = 0; i < NumLocals; i++)
- Locals [i] = new LocalVariableEntry (reader);
-
- reader.BaseStream.Position = old_pos;
- }
-
- if (TypeIndexTableOffset != 0) {
- long old_pos = reader.BaseStream.Position;
- reader.BaseStream.Position = TypeIndexTableOffset;
-
- LocalTypeIndices = new int [NumLocals];
-
- for (int i = 0; i < NumLocals; i++)
- LocalTypeIndices [i] = reader.ReadInt32 ();
-
- reader.BaseStream.Position = old_pos;
- }
-
- if (LexicalBlockTableOffset != 0) {
- long old_pos = reader.BaseStream.Position;
- reader.BaseStream.Position = LexicalBlockTableOffset;
-
- LexicalBlocks = new LexicalBlockEntry [NumLexicalBlocks];
- for (int i = 0; i < NumLexicalBlocks; i++)
- LexicalBlocks [i] = new LexicalBlockEntry (i, reader);
-
- reader.BaseStream.Position = old_pos;
- }
- }
-
- internal MethodEntry (MonoSymbolFile file, SourceFileEntry source,
- string name, int token, LocalVariableEntry[] locals,
- LineNumberEntry[] lines, LexicalBlockEntry[] blocks,
- int start_row, int end_row, int namespace_id)
- {
- this.SymbolFile = file;
-
- index = -1;
-
- Token = token;
- SourceFileIndex = source.Index;
- SourceFile = source;
- StartRow = start_row;
- EndRow = end_row;
- NamespaceID = namespace_id;
- LexicalBlocks = blocks;
- NumLexicalBlocks = LexicalBlocks != null ? LexicalBlocks.Length : 0;
-
- LineNumbers = BuildLineNumberTable (lines);
- NumLineNumbers = LineNumbers.Length;
-
- file.NumLineNumbers += NumLineNumbers;
-
- NumLocals = locals != null ? locals.Length : 0;
- Locals = locals;
-
- if (NumLocals <= 32) {
- // Most of the time, the O(n^2) factor is actually
- // less than the cost of allocating the hash table,
- // 32 is a rough number obtained through some testing.
-
- for (int i = 0; i < NumLocals; i ++) {
- string nm = locals [i].Name;
-
- for (int j = i + 1; j < NumLocals; j ++) {
- if (locals [j].Name == nm) {
- LocalNamesAmbiguous = true;
- goto locals_check_done;
- }
- }
- }
- locals_check_done :
- ;
- } else {
- Hashtable local_names = new Hashtable ();
- foreach (LocalVariableEntry local in locals) {
- if (local_names.Contains (local.Name)) {
- LocalNamesAmbiguous = true;
- break;
- }
- local_names.Add (local.Name, local);
- }
- }
-
- LocalTypeIndices = new int [NumLocals];
- for (int i = 0; i < NumLocals; i++)
- LocalTypeIndices [i] = file.GetNextTypeIndex ();
- }
-
- static LineNumberEntry [] tmp_buff = new LineNumberEntry [20];
-
- // BuildLineNumberTable() eliminates duplicate line numbers and ensures
- // we aren't going "backwards" since this would counfuse the runtime's
- // debugging code (and the debugger).
- //
- // In the line number table, the "offset" field most be strictly
- // monotonic increasing; that is, the next entry must not have an offset
- // which is equal to or less than the current one.
- //
- // The most common case is that our input (ie. the line number table as
- // we get it from mcs) contains several entries with the same offset
- // (and different line numbers) - but it may also happen that the offset
- // is decreasing (this can be considered as an exception, such lines will
- // simply be discarded).
- LineNumberEntry[] BuildLineNumberTable (LineNumberEntry[] line_numbers)
- {
- int pos = 0;
- int last_offset = -1;
- int last_row = -1;
-
- if (line_numbers == null)
- return new LineNumberEntry [0];
-
- if (tmp_buff.Length < (line_numbers.Length + 1))
- tmp_buff = new LineNumberEntry [(line_numbers.Length + 1) * 2];
-
- for (int i = 0; i < line_numbers.Length; i++) {
- LineNumberEntry line = line_numbers [i];
-
- if (line.Offset > last_offset) {
- if (last_row >= 0)
- tmp_buff [pos ++] = new LineNumberEntry (last_row, last_offset);
- last_row = line.Row;
- last_offset = line.Offset;
- } else if (line.Row > last_row) {
- last_row = line.Row;
- }
- }
-
- if (last_row >= 0)
- tmp_buff [pos ++] = new LineNumberEntry (last_row, last_offset);
-
- LineNumberEntry [] retval = new LineNumberEntry [pos];
- Array.Copy (tmp_buff, retval, pos);
- return retval;
- }
-
- internal MethodSourceEntry Write (MonoSymbolFile file, MyBinaryWriter bw)
- {
- if (index <= 0)
- throw new InvalidOperationException ();
-
- NameOffset = (int) bw.BaseStream.Position;
-
- TypeIndexTableOffset = (int) bw.BaseStream.Position;
-
- for (int i = 0; i < NumLocals; i++)
- bw.Write (LocalTypeIndices [i]);
-
- LocalVariableTableOffset = (int) bw.BaseStream.Position;
- for (int i = 0; i < NumLocals; i++)
- Locals [i].Write (file, bw);
- file.LocalCount += NumLocals;
-
- LineNumberTableOffset = (int) bw.BaseStream.Position;
- for (int i = 0; i < NumLineNumbers; i++)
- LineNumbers [i].Write (bw);
- file.LineNumberCount += NumLineNumbers;
-
- LexicalBlockTableOffset = (int) bw.BaseStream.Position;
- for (int i = 0; i < NumLexicalBlocks; i++)
- LexicalBlocks [i].Write (bw);
- file_offset = (int) bw.BaseStream.Position;
-
- bw.Write (SourceFileIndex);
- bw.Write (Token);
- bw.Write (StartRow);
- bw.Write (EndRow);
- bw.Write (NumLocals);
- bw.Write (NumLineNumbers);
- bw.Write (NameOffset);
- bw.Write (TypeIndexTableOffset);
- bw.Write (LocalVariableTableOffset);
- bw.Write (LineNumberTableOffset);
- bw.Write (NumLexicalBlocks);
- bw.Write (LexicalBlockTableOffset);
- bw.Write (NamespaceID);
- bw.Write (LocalNamesAmbiguous ? 1 : 0);
-
- return new MethodSourceEntry (index, file_offset, StartRow, EndRow);
- }
-
- internal void WriteIndex (BinaryWriter bw)
- {
- new MethodIndexEntry (file_offset, Token).Write (bw);
- }
-
- public int CompareTo (object obj)
- {
- MethodEntry method = (MethodEntry) obj;
-
- if (method.Token < Token)
- return 1;
- else if (method.Token > Token)
- return -1;
- else
- return 0;
- }
-
- public override string ToString ()
- {
- return String.Format ("[Method {0}:{1}:{2}:{3}:{4} - {6}:{7} - {5}]",
- index, Token, SourceFileIndex, StartRow, EndRow,
- SourceFile, NumLocals, NumLineNumbers);
- }
- }
-
- public struct NamespaceEntry
- {
- #region This is actually written to the symbol file
- public readonly string Name;
- public readonly int Index;
- public readonly int Parent;
- public readonly string[] UsingClauses;
- #endregion
-
- public NamespaceEntry (string name, int index, string[] using_clauses, int parent)
- {
- this.Name = name;
- this.Index = index;
- this.Parent = parent;
- this.UsingClauses = using_clauses != null ? using_clauses : new string [0];
- }
-
- internal NamespaceEntry (MonoSymbolFile file, MyBinaryReader reader)
- {
- Name = reader.ReadString ();
- Index = reader.ReadLeb128 ();
- Parent = reader.ReadLeb128 ();
-
- int count = reader.ReadLeb128 ();
- UsingClauses = new string [count];
- for (int i = 0; i < count; i++)
- UsingClauses [i] = reader.ReadString ();
- }
-
- internal void Write (MonoSymbolFile file, MyBinaryWriter bw)
- {
- bw.Write (Name);
- bw.WriteLeb128 (Index);
- bw.WriteLeb128 (Parent);
- bw.WriteLeb128 (UsingClauses.Length);
- foreach (string uc in UsingClauses)
- bw.Write (uc);
- }
-
- public override string ToString ()
- {
- return String.Format ("[Namespace {0}:{1}:{2}]", Name, Index, Parent);
- }
- }
-}