Browse Source

Added arguments options support to pass custom Clang options to the parser.

pull/169/head
triton 12 years ago
parent
commit
45b110e739
  1. 1
      src/CppParser/CppParser.cpp
  2. 2
      src/CppParser/CppParser.h
  3. 9
      src/CppParser/Parser.cpp
  4. 7
      src/Generator/Driver.cs
  5. 3
      src/Parser/Options.h
  6. 6
      src/Parser/Parser.cpp

1
src/CppParser/CppParser.cpp

@ -20,6 +20,7 @@ ParserOptions::ParserOptions() @@ -20,6 +20,7 @@ ParserOptions::ParserOptions()
{
}
DEF_VECTOR_STRING(ParserOptions, Arguments)
DEF_STRING(ParserOptions, FileName)
DEF_VECTOR_STRING(ParserOptions, IncludeDirs)
DEF_VECTOR_STRING(ParserOptions, SystemIncludeDirs)

2
src/CppParser/CppParser.h

@ -18,6 +18,8 @@ struct CS_API ParserOptions @@ -18,6 +18,8 @@ struct CS_API ParserOptions
{
ParserOptions();
VECTOR_STRING(Arguments)
// C/C++ header file name.
STRING(FileName)

9
src/CppParser/Parser.cpp

@ -99,6 +99,12 @@ void Parser::SetupHeader() @@ -99,6 +99,12 @@ void Parser::SetupHeader()
args.push_back("-std=gnu++11");
args.push_back("-fno-rtti");
for (unsigned I = 0, E = Opts->Arguments.size(); I != E; ++I)
{
const String& Arg = Opts->Arguments[I];
args.push_back(Arg.c_str());
}
// Enable the Microsoft parsing extensions
if (Opts->MicrosoftMode)
{
@ -2517,6 +2523,9 @@ ParserResult* Parser::ParseHeader(const std::string& File) @@ -2517,6 +2523,9 @@ ParserResult* Parser::ParseHeader(const std::string& File)
auto FileName = FileEntry->getName();
auto Unit = Lib->FindOrCreateModule(FileName);
if (Unit->OriginalPtr == nullptr)
Unit->OriginalPtr = (void*) FileEntry;
auto TU = AST->getTranslationUnitDecl();
HandleDeclaration(TU, Unit);

7
src/Generator/Driver.cs

@ -147,6 +147,7 @@ namespace CppSharp @@ -147,6 +147,7 @@ namespace CppSharp
{
FileName = file.Path,
#if OLD_PARSER
Arguments = Options.Arguments,
IncludeDirs = Options.IncludeDirs,
SystemIncludeDirs = Options.SystemIncludeDirs,
Defines = Options.Defines,
@ -162,6 +163,12 @@ namespace CppSharp @@ -162,6 +163,12 @@ namespace CppSharp
};
#if !OLD_PARSER
for (uint i = 0; i < Options.ArgumentsCount; ++i)
{
var arg = Options.getArguments(i);
options.addArguments(arg);
}
for (uint i = 0; i < Options.IncludeDirsCount; ++i)
{
var include = Options.getIncludeDirs(i);

3
src/Parser/Options.h

@ -19,6 +19,7 @@ public ref struct ParserOptions @@ -19,6 +19,7 @@ public ref struct ParserOptions
{
ParserOptions()
{
Arguments = gcnew List<System::String^>();
IncludeDirs = gcnew List<System::String^>();
SystemIncludeDirs = gcnew List<System::String^>();
Defines = gcnew List<System::String^>();
@ -28,6 +29,8 @@ public ref struct ParserOptions @@ -28,6 +29,8 @@ public ref struct ParserOptions
NoBuiltinIncludes = false;
}
List<System::String^>^ Arguments;
// Include directories
List<System::String^>^ IncludeDirs;
List<System::String^>^ SystemIncludeDirs;

6
src/Parser/Parser.cpp

@ -110,6 +110,12 @@ void Parser::SetupHeader() @@ -110,6 +110,12 @@ void Parser::SetupHeader()
args.push_back("-fdelayed-template-parsing");
}
for each (System::String^ arg in Opts->Arguments)
{
String s = marshalString<E_UTF8>(arg);
args.push_back(s.c_str());
}
C.reset(new CompilerInstance());
C->createDiagnostics();

Loading…
Cancel
Save