From 9161e58cf8e942a00e81ad7479b1d840bbc19358 Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Fri, 16 Aug 2013 01:59:08 +0300 Subject: [PATCH] Ignored functions not found in library symbols. Signed-off-by: Dimitar Dobrev --- src/Generator/Driver.cs | 1 + .../Generators/CSharp/CSharpTextTemplate.cs | 18 ++-------------- src/Generator/Passes/FindSymbolsPass.cs | 21 +++++++++++++++++++ 3 files changed, 24 insertions(+), 16 deletions(-) create mode 100644 src/Generator/Passes/FindSymbolsPass.cs diff --git a/src/Generator/Driver.cs b/src/Generator/Driver.cs index 8ca07a0f..287fe4e4 100644 --- a/src/Generator/Driver.cs +++ b/src/Generator/Driver.cs @@ -132,6 +132,7 @@ namespace CppSharp TranslationUnitPasses.AddPass(new SortDeclarationsPass()); TranslationUnitPasses.AddPass(new ResolveIncompleteDeclsPass()); TranslationUnitPasses.AddPass(new CheckIgnoredDeclsPass()); + TranslationUnitPasses.AddPass(new FindSymbolsPass()); library.SetupPasses(this); diff --git a/src/Generator/Generators/CSharp/CSharpTextTemplate.cs b/src/Generator/Generators/CSharp/CSharpTextTemplate.cs index 98a2a205..1185430c 100644 --- a/src/Generator/Generators/CSharp/CSharpTextTemplate.cs +++ b/src/Generator/Generators/CSharp/CSharpTextTemplate.cs @@ -2068,19 +2068,6 @@ namespace CppSharp.Generators.CSharp return name; } - bool FindMangledDeclLibrary(IMangledDecl decl, out NativeLibrary library) - { - string symbol; - if (!FindMangledDeclSymbol(decl, out symbol)) - { - library = null; - return false; - } - - Driver.LibrarySymbols.FindLibraryBySymbol(symbol, out library); - return true; - } - bool FindMangledDeclSymbol(IMangledDecl decl, out string symbol) { symbol = decl.Mangled; @@ -2109,10 +2096,9 @@ namespace CppSharp.Generators.CSharp if (Options.CheckSymbols) { NativeLibrary library; - FindMangledDeclLibrary(function, out library); + Driver.LibrarySymbols.FindLibraryBySymbol(function.Mangled, out library); - libName = (library != null) ? library.FileName : "SymbolNotFound"; - libName = Path.GetFileNameWithoutExtension(libName); + libName = Path.GetFileNameWithoutExtension(library.FileName); } if (libName != null && libName.Length > 3 && libName.StartsWith("lib")) { diff --git a/src/Generator/Passes/FindSymbolsPass.cs b/src/Generator/Passes/FindSymbolsPass.cs new file mode 100644 index 00000000..5e2ef008 --- /dev/null +++ b/src/Generator/Passes/FindSymbolsPass.cs @@ -0,0 +1,21 @@ +using CppSharp.AST; + +namespace CppSharp.Passes +{ + public class FindSymbolsPass : TranslationUnitPass + { + public override bool VisitFunctionDecl(Function function) + { + string symbol = function.Mangled; + if (!Driver.LibrarySymbols.FindSymbol(ref symbol)) + { + Driver.Diagnostics.EmitWarning(DiagnosticId.SymbolNotFound, + "Symbol not found: {0}", symbol); + function.ExplicityIgnored = true; + return false; + } + function.Mangled = symbol; + return base.VisitFunctionDecl(function); + } + } +}