Browse Source

Merge pull request #34 from ddobrev/ignore_functions_not_in_symbols

Ignored functions not found in library symbols.
pull/35/head
João Matos 12 years ago
parent
commit
5b725cfd4f
  1. 1
      src/Generator/Driver.cs
  2. 18
      src/Generator/Generators/CSharp/CSharpTextTemplate.cs
  3. 21
      src/Generator/Passes/FindSymbolsPass.cs

1
src/Generator/Driver.cs

@ -132,6 +132,7 @@ namespace CppSharp @@ -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);

18
src/Generator/Generators/CSharp/CSharpTextTemplate.cs

@ -2071,19 +2071,6 @@ namespace CppSharp.Generators.CSharp @@ -2071,19 +2071,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;
@ -2112,10 +2099,9 @@ namespace CppSharp.Generators.CSharp @@ -2112,10 +2099,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"))
{

21
src/Generator/Passes/FindSymbolsPass.cs

@ -0,0 +1,21 @@ @@ -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);
}
}
}
Loading…
Cancel
Save