From 66ea1cd62c211739f8984e76eea48da7e4c76048 Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Fri, 16 Aug 2013 14:19:41 +0300 Subject: [PATCH] Ignore any mangled declaration not found in library symbols. Signed-off-by: Dimitar Dobrev --- .../Generators/CSharp/CSharpTextTemplate.cs | 22 ++---------------- src/Generator/Passes/FindSymbolsPass.cs | 23 +++++++++++++------ 2 files changed, 18 insertions(+), 27 deletions(-) diff --git a/src/Generator/Generators/CSharp/CSharpTextTemplate.cs b/src/Generator/Generators/CSharp/CSharpTextTemplate.cs index b7e4d70f..baec30d1 100644 --- a/src/Generator/Generators/CSharp/CSharpTextTemplate.cs +++ b/src/Generator/Generators/CSharp/CSharpTextTemplate.cs @@ -696,22 +696,18 @@ namespace CppSharp.Generators.CSharp private Tuple GetDeclarationLibrarySymbol(IMangledDecl decl) { var library = Options.SharedLibraryName; - var symbol = decl.Mangled; if (!Options.CheckSymbols) goto Out; - if (!FindMangledDeclSymbol(decl, out symbol)) - goto Out; - NativeLibrary nativeLib; - if (!Driver.LibrarySymbols.FindLibraryBySymbol(symbol, out nativeLib)) + if (!Driver.LibrarySymbols.FindLibraryBySymbol(decl.Mangled, out nativeLib)) goto Out; library = Path.GetFileNameWithoutExtension(nativeLib.FileName); Out: - return Tuple.Create(library, symbol); + return Tuple.Create(library, decl.Mangled); } private void GeneratePropertySetter(T decl, Class @class) @@ -2071,20 +2067,6 @@ namespace CppSharp.Generators.CSharp return name; } - bool FindMangledDeclSymbol(IMangledDecl decl, out string symbol) - { - symbol = decl.Mangled; - if (!Driver.LibrarySymbols.FindSymbol(ref symbol)) - { - Driver.Diagnostics.EmitError(DiagnosticId.SymbolNotFound, - "Symbol not found: {0}", symbol); - symbol = null; - return false; - } - - return true; - } - public void GenerateInternalFunction(Function function) { if (!function.IsProcessed || function.ExplicityIgnored) diff --git a/src/Generator/Passes/FindSymbolsPass.cs b/src/Generator/Passes/FindSymbolsPass.cs index 5e2ef008..39fc80a1 100644 --- a/src/Generator/Passes/FindSymbolsPass.cs +++ b/src/Generator/Passes/FindSymbolsPass.cs @@ -4,18 +4,27 @@ namespace CppSharp.Passes { public class FindSymbolsPass : TranslationUnitPass { - public override bool VisitFunctionDecl(Function function) + public override bool VisitDeclaration(Declaration decl) { - string symbol = function.Mangled; + IMangledDecl mangledDecl = decl as IMangledDecl; + if (mangledDecl != null && !VisitMangledDeclaration(mangledDecl)) + { + decl.ExplicityIgnored = true; + return false; + } + return base.VisitDeclaration(decl); + } + + private bool VisitMangledDeclaration(IMangledDecl mangledDecl) + { + string symbol = mangledDecl.Mangled; if (!Driver.LibrarySymbols.FindSymbol(ref symbol)) { - Driver.Diagnostics.EmitWarning(DiagnosticId.SymbolNotFound, - "Symbol not found: {0}", symbol); - function.ExplicityIgnored = true; + Driver.Diagnostics.EmitWarning(DiagnosticId.SymbolNotFound, "Symbol not found: {0}", symbol); return false; } - function.Mangled = symbol; - return base.VisitFunctionDecl(function); + mangledDecl.Mangled = symbol; + return true; } } }