From adc16e38779fe69b12f18ed32cd11ea80fd0deb7 Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Thu, 30 Jan 2014 18:02:31 +0200 Subject: [PATCH] Cleared up and fixed the exported symbols of libraries. Signed-off-by: Dimitar Dobrev --- src/AST/SymbolContext.cs | 40 +++++++++++++++------------------------- 1 file changed, 15 insertions(+), 25 deletions(-) diff --git a/src/AST/SymbolContext.cs b/src/AST/SymbolContext.cs index 8acca9a9..cb43ebc3 100644 --- a/src/AST/SymbolContext.cs +++ b/src/AST/SymbolContext.cs @@ -41,10 +41,13 @@ namespace CppSharp.AST /// public Dictionary Symbols; + private readonly Dictionary compiledSymbols; + public SymbolContext() { Libraries = new List(); Symbols = new Dictionary(); + compiledSymbols = new Dictionary(); } public NativeLibrary FindOrCreateLibrary(string file) @@ -65,42 +68,29 @@ namespace CppSharp.AST foreach (var library in Libraries) { foreach (var symbol in library.Symbols) + { Symbols[symbol] = library; + if (!symbol.StartsWith("_imp_") && !symbol.StartsWith("__imp_") && + !symbol.StartsWith("_head") && !symbol.StartsWith("__head")) + { + if (symbol.StartsWith("__")) + compiledSymbols[symbol.Substring(1)] = library; + else + compiledSymbols[symbol] = library; + } + } } } public bool FindSymbol(ref string symbol) { NativeLibrary lib; - - if (FindLibraryBySymbol(symbol, out lib)) - return true; - - // Check for C symbols with a leading underscore. - if (FindLibraryBySymbol("_" + symbol, out lib)) - { - symbol = "_" + symbol; - return true; - } - - if (FindLibraryBySymbol("_imp_" + symbol, out lib)) - { - symbol = "_imp_" + symbol; - return true; - } - - if (FindLibraryBySymbol("__imp_" + symbol, out lib)) - { - symbol = "__imp_" + symbol; - return true; - } - - return false; + return FindLibraryBySymbol(symbol, out lib); } public bool FindLibraryBySymbol(string symbol, out NativeLibrary library) { - return Symbols.TryGetValue(symbol, out library); + return compiledSymbols.TryGetValue(symbol, out library); } } }