X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fgmcs%2Flocation.cs;h=035de4841e5ea438a8ccd4ce92ae87430738153a;hb=9076dfdec8582c59a2c683da9943496514f8d2dd;hp=aeffec1a1d4f537c22a1657e073bcd6148d554b8;hpb=c7cfb1e7236af539cb992e125d29524e60e4d7ea;p=mono.git diff --git a/mcs/gmcs/location.cs b/mcs/gmcs/location.cs index aeffec1a1d4..035de4841e5 100644 --- a/mcs/gmcs/location.cs +++ b/mcs/gmcs/location.cs @@ -10,7 +10,7 @@ using System; using System.IO; using System.Collections; -using System.Diagnostics.SymbolStore; +using Mono.CompilerServices.SymbolWriter; namespace Mono.CSharp { /// @@ -20,11 +20,12 @@ namespace Mono.CSharp { /// This is intentionally a class and not a struct since we need /// to pass this by reference. /// - public sealed class SourceFile { + public sealed class SourceFile : ISourceFile { public readonly string Name; public readonly string Path; public readonly int Index; - public ISymbolDocumentWriter SymbolDocument; + public SourceFileEntry SourceFileEntry; + public bool HasLineDirective; public SourceFile (string name, string path, int index) { @@ -32,6 +33,16 @@ namespace Mono.CSharp { this.Name = name; this.Path = path; } + + SourceFileEntry ISourceFile.Entry { + get { return SourceFileEntry; } + } + + public override string ToString () + { + return String.Format ("SourceFile ({0}:{1}:{2}:{3})", + Name, Path, Index, SourceFileEntry); + } } /// @@ -53,7 +64,6 @@ namespace Mono.CSharp { static int source_bits; static int source_mask; static int source_count; - static int module_base; static int current_source; public readonly static Location Null; @@ -63,7 +73,6 @@ namespace Mono.CSharp { source_files = new Hashtable (); source_list = new ArrayList (); current_source = 0; - module_base = 0; Null.token = 0; } @@ -75,10 +84,8 @@ namespace Mono.CSharp { string path = Path.GetFullPath (name); if (source_files.Contains (path)){ - Report.Error ( - 1516, - "Source file `" + name + "' specified multiple times"); - Environment.Exit (1); + Report.Warning (2002, name, "Source file '{0}' specified multiple times"); + return; } source_files.Add (path, ++source_count); @@ -121,7 +128,7 @@ namespace Mono.CSharp { // static public SourceFile LookupFile (string name) { - string path = Path.GetFullPath (name); + string path = name == "" ? "" : Path.GetFullPath (name); if (!source_files.Contains (path)) { if (source_count >= (1 << source_bits)) @@ -140,17 +147,18 @@ namespace Mono.CSharp { static public void Push (SourceFile file) { current_source = file.Index; - module_base = current_source << source_bits; } // - // If we're compiling with debugging support, this is called between parsing and - // code generation to register all the source files with the symbol writer. // + // If we're compiling with debugging support, this is called between parsing + // and code generation to register all the source files with the + // symbol writer. // static public void DefineSymbolDocuments (SymbolWriter symwriter) { - foreach (SourceFile file in source_list) - file.SymbolDocument = symwriter.DefineDocument (file.Path); + foreach (SourceFile file in source_list) { + file.SourceFileEntry = symwriter.DefineDocument (file.Path); + } } public Location (int row) @@ -212,13 +220,12 @@ namespace Mono.CSharp { // to the location's source file. // // If we don't have a symbol writer, this property is always null. - public ISymbolDocumentWriter SymbolDocument { + public SourceFile SourceFile { get { int index = token & source_mask; if (index == 0) return null; - SourceFile file = (SourceFile) source_list [index - 1]; - return file.SymbolDocument; + return (SourceFile) source_list [index - 1]; } } }