1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
|
using System;
using System.IO;
using System.Text;
using System.Collections;
using System.Runtime.InteropServices;
using Mono.Debugger.Backend;
namespace Mono.Debugger
{
// <summary>
// A single source file. It is used to find a breakpoint's location by method
// name or source file.
// </summary>
[Serializable]
public class SourceFile
{
public string Name {
get {
return Path.GetFileName (filename);
}
}
// <summary>
// The file's full pathname.
// </summary>
public string FileName {
get {
return Path.GetFullPath (filename);
}
}
public Module Module {
get {
return module;
}
}
public int ID {
get {
return id;
}
}
// <summary>
// Returns a list of SourceMethod's which is sorted by source lines.
// It is used when inserting a breakpoint by source line to find the
// method this line is contained in.
// </summary>
public MethodSource[] Methods {
get {
return module.GetMethods (this);
}
}
public MethodSource FindMethod (int line)
{
MethodSource[] methods = module.GetMethods (this);
foreach (MethodSource method in methods) {
if (!method.HasSourceFile)
continue;
if ((method.StartRow <= line) && (method.EndRow >= line))
return method;
}
return null;
}
public SourceLocation FindLine (int line)
{
MethodSource[] methods = module.GetMethods (this);
foreach (MethodSource method in methods) {
if (!method.HasSourceFile)
continue;
if ((method.StartRow <= line) && (method.EndRow >= line))
return new SourceLocation (method, this, line);
}
return new SourceLocation (this, line);
}
public SourceFile (Module module, string filename)
{
this.id = ++next_id;
this.module = module;
this.filename = filename;
}
public override int GetHashCode ()
{
return id;
}
public override bool Equals (object o)
{
SourceFile file = o as SourceFile;
if (file == null)
return false;
return (id == file.id) && (filename == file.filename) && (module == file.module);
}
string filename;
Module module;
int id;
static int next_id = 0;
public override string ToString ()
{
return String.Format ("SourceFile ({0}:{1})", ID, FileName);
}
}
}
|