Fix the compilation warnings with gcc:
../../../src/CppParser/Parser.cpp: In member function ‘CppSharp::CppParser::AST::DeclarationContext*
CppSharp::CppParser::Parser::GetNamespace(clang::Decl*, clang::DeclContext*)’:
../../../src/CppParser/Parser.cpp:1119:68: warning: format ‘%s’ expects argument of type ‘char*’, but argument 2 has type ‘llvm::StringRef’ [-Wformat=]
printf("Unhandled declaration context kind: %s\n", Kind);
^
../../../src/CppParser/Parser.cpp: In member function ‘CppSharp::CppParser::AST::Declaration* CppSharp::CppParser::Parser::WalkDeclaration(clang::Decl*, bool, bool)’:
../../../src/CppParser/Parser.cpp:2430:51: warning: format ‘%s’ expects argument of type ‘char*’, but argument 2 has type ‘llvm::StringRef’ [-Wformat=]
Debug(" %s (line %u)\n", FileName, LineNo);
^
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@iki.fi>
* Implemented missing parts in regards to class templates.
* Fixed couple of class member initialization issues in C++ AST classes.
* Make code more look alike so it's easier to compare them.
* All tests pass now with old and new parser. Especially the nasty STL one with the ostream typedef.
This fixes some non-deterministic behavior in the new parser but it means we are keeping around all the memory for parsing until the end of the process. This is a bit messy right now but at least we keep the API compatible between parsers. After all the new parser bugs are squashed, this will be reworked.
Clang reports a wrong source range for function parameters and since we already process them specially we should not process them in HandleDeclaration too, else we get duplicated entities.
Basically we need to lock in the MS inheritance model in a record when it appears as part of a member pointer type else we get some fun Clang code gen internals assert.
The previous version did not handle methods properly and lead to duplicate definitions since it did not check for existing templates with the same signature.