2 // symbolwriter.cs: The symbol writer
5 // Martin Baulig (martin@ximian.com)
7 // (C) 2003 Ximian, Inc.
11 using System
.Collections
;
12 using System
.Reflection
;
13 using System
.Reflection
.Emit
;
15 using Mono
.CompilerServices
.SymbolWriter
;
17 namespace Mono
.CSharp
{
18 public class SymbolWriter
: MonoSymbolWriter
{
19 delegate int GetILOffsetFunc (ILGenerator ig
);
20 delegate Guid
GetGuidFunc (ModuleBuilder mb
);
22 GetILOffsetFunc get_il_offset_func
;
23 GetGuidFunc get_guid_func
;
25 ModuleBuilder module_builder
;
27 protected SymbolWriter (ModuleBuilder module_builder
, string filename
)
30 this.module_builder
= module_builder
;
35 MethodInfo mi
= typeof (ILGenerator
).GetMethod (
36 "Mono_GetCurrentOffset",
37 BindingFlags
.Static
| BindingFlags
.NonPublic
);
41 get_il_offset_func
= (GetILOffsetFunc
) System
.Delegate
.CreateDelegate (
42 typeof (GetILOffsetFunc
), mi
);
44 mi
= typeof (ModuleBuilder
).GetMethod (
46 BindingFlags
.Static
| BindingFlags
.NonPublic
);
50 get_guid_func
= (GetGuidFunc
) System
.Delegate
.CreateDelegate (
51 typeof (GetGuidFunc
), mi
);
53 Location
.DefineSymbolDocuments (this);
54 Namespace
.DefineNamespaces (this);
59 public void DefineLocalVariable (string name
, LocalBuilder builder
)
61 SignatureHelper sighelper
= SignatureHelper
.GetLocalVarSigHelper (
63 sighelper
.AddArgument (builder
.LocalType
);
64 byte[] signature
= sighelper
.GetSignature ();
66 DefineLocalVariable (name
, signature
);
69 public void MarkSequencePoint (ILGenerator ig
, int row
, int column
)
71 int offset
= get_il_offset_func (ig
);
72 MarkSequencePoint (offset
, row
, column
);
75 public void WriteSymbolFile ()
77 Guid guid
= get_guid_func (module_builder
);
78 WriteSymbolFile (guid
);
81 public static SymbolWriter
GetSymbolWriter (ModuleBuilder module
,
84 SymbolWriter writer
= new SymbolWriter (module
, filename
);
85 if (!writer
.Initialize ())