From 575649b5da1827c12b33f109685c22e44237d8ca Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Wed, 9 Dec 2015 23:58:23 +0200 Subject: [PATCH] Fixed a memory leak in the code generators. Signed-off-by: Dimitar Dobrev --- src/Generator.Tests/Passes/TestPasses.cs | 9 ++++++++- src/Generator/Driver.cs | 2 ++ src/Generator/Generator.cs | 10 +++++++++- src/Generator/Generators/CLI/CLIGenerator.cs | 6 +++++- src/Generator/Generators/CSharp/CSharpGenerator.cs | 6 +++++- 5 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/Generator.Tests/Passes/TestPasses.cs b/src/Generator.Tests/Passes/TestPasses.cs index d9cb4189..e59f75f9 100644 --- a/src/Generator.Tests/Passes/TestPasses.cs +++ b/src/Generator.Tests/Passes/TestPasses.cs @@ -70,7 +70,7 @@ namespace CppSharp.Generator.Tests.Passes [Test] public void TestCaseRenamePass() { - Type.TypePrinterDelegate += type => type.Visit(new CSharpTypePrinter(Driver)).Type; + CppSharp.AST.Type.TypePrinterDelegate += TypePrinterDelegate; var c = AstContext.Class("TestRename"); @@ -82,6 +82,8 @@ namespace CppSharp.Generator.Tests.Passes Assert.That(method.Name, Is.EqualTo("LowerCaseMethod")); Assert.That(field.Name, Is.EqualTo("LowerCaseField")); + + CppSharp.AST.Type.TypePrinterDelegate -= TypePrinterDelegate; } [Test] @@ -202,5 +204,10 @@ namespace CppSharp.Generator.Tests.Passes passBuilder.RunPasses(pass => pass.VisitLibrary(AstContext)); Assert.AreEqual(method.Access , AccessSpecifier.Internal); } + + private string TypePrinterDelegate(CppSharp.AST.Type type) + { + return type.Visit(new CSharpTypePrinter(Driver)).Type; + } } } diff --git a/src/Generator/Driver.cs b/src/Generator/Driver.cs index 3689a38e..86cf072e 100644 --- a/src/Generator/Driver.cs +++ b/src/Generator/Driver.cs @@ -496,6 +496,8 @@ namespace CppSharp if (driver.Options.IsCSharpGenerator && driver.Options.CompileCode) driver.CompileCode(); } + + driver.Generator.Dispose(); } } } \ No newline at end of file diff --git a/src/Generator/Generator.cs b/src/Generator/Generator.cs index 69d0dac4..a31f023a 100644 --- a/src/Generator/Generator.cs +++ b/src/Generator/Generator.cs @@ -33,13 +33,14 @@ namespace CppSharp.Generators /// /// Generators are the base class for each language backend. /// - public abstract class Generator + public abstract class Generator : IDisposable { public Driver Driver { get; private set; } protected Generator(Driver driver) { Driver = driver; + CppSharp.AST.Type.TypePrinterDelegate += TypePrinterDelegate; } /// @@ -119,9 +120,16 @@ namespace CppSharp.Generators /// public abstract List