[svn] r5805: nemerle/trunk: ncc/generation/HierarchyEmitter.n
ncc/passes.n tools/nant-task/example.build
malekith
svnadmin at nemerle.org
Wed Oct 5 21:50:42 CEST 2005
Log:
Clean resolve_event handlers to avoid memory leak.
Author: malekith
Date: Wed Oct 5 21:50:41 2005
New Revision: 5805
Modified:
nemerle/trunk/ncc/generation/HierarchyEmitter.n
nemerle/trunk/ncc/passes.n
nemerle/trunk/tools/nant-task/example.build
Modified: nemerle/trunk/ncc/generation/HierarchyEmitter.n
==============================================================================
--- nemerle/trunk/ncc/generation/HierarchyEmitter.n (original)
+++ nemerle/trunk/ncc/generation/HierarchyEmitter.n Wed Oct 5 21:50:41 2005
@@ -77,7 +77,12 @@
Emit.AssemblyBuilderAccess.Save;
// workaround MS.NET bugs with some specific value / generic types hierarchy
- System.AppDomain.CurrentDomain.TypeResolve += resolve_hack;
+ def delegate_ = resolve_hack : System.ResolveEventHandler;
+ System.AppDomain.CurrentDomain.TypeResolve += delegate_;
+ // we need to later remove it to avoid garbage
+ Passes.CleanupOnce.Push (fun () {
+ System.AppDomain.CurrentDomain.TypeResolve -= delegate_;
+ });
def dir = Path.GetDirectoryName(Path.GetFullPath (_OutputFileName));
unless (Directory.Exists (dir))
Modified: nemerle/trunk/ncc/passes.n
==============================================================================
--- nemerle/trunk/ncc/passes.n (original)
+++ nemerle/trunk/ncc/passes.n Wed Oct 5 21:50:41 2005
@@ -72,6 +72,9 @@
public delegate InitDelegate () : void;
public event OnInit : InitDelegate;
+ /** Each function put here is executed once, after the compiler has finished. */
+ public CleanupOnce : Queue [void -> void] = Queue ();
+
/// initialize pipelines with default values
this () {
LexingPipeline = LexerFile;
@@ -130,6 +133,8 @@
Passes.Solver = Solver ();
Hierarchy = null;
when (OnInit != null) OnInit ();
+ while (! CleanupOnce.IsEmpty)
+ (CleanupOnce.Take ()) ();
}
internal LoadExternalLibraries () : void {
@@ -221,6 +226,8 @@
/// some cleanup
WarningOptions.Clean ();
+ while (! CleanupOnce.IsEmpty)
+ (CleanupOnce.Take ()) ();
}
}
}
Modified: nemerle/trunk/tools/nant-task/example.build
==============================================================================
--- nemerle/trunk/tools/nant-task/example.build (original)
+++ nemerle/trunk/tools/nant-task/example.build Wed Oct 5 21:50:41 2005
@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<project name="example" default="all" >
<target name="all">
- <ncc target="library" output="Nemerle.NAnt.Tasks.dll">
+ <ncc target="library" output="Nemerle.NAnt.Tasks.x.dll">
<sources>
<include name="*.n" />
</sources>
@@ -11,6 +11,7 @@
</lib>
<include name="NAnt.DotNetTasks.dll" />
<include name="NAnt.Core.dll" />
+ <include name="foo.dll" />
</references>
</ncc>
</target>
More information about the svn
mailing list