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()
{ {
} }
DEF_VECTOR_STRING(ParserOptions, Arguments)
DEF_STRING(ParserOptions, FileName) DEF_STRING(ParserOptions, FileName)
DEF_VECTOR_STRING(ParserOptions, IncludeDirs) DEF_VECTOR_STRING(ParserOptions, IncludeDirs)
DEF_VECTOR_STRING(ParserOptions, SystemIncludeDirs) DEF_VECTOR_STRING(ParserOptions, SystemIncludeDirs)

2
src/CppParser/CppParser.h

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

9
src/CppParser/Parser.cpp

@ -99,6 +99,12 @@ void Parser::SetupHeader()
args.push_back("-std=gnu++11"); args.push_back("-std=gnu++11");
args.push_back("-fno-rtti"); 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 // Enable the Microsoft parsing extensions
if (Opts->MicrosoftMode) if (Opts->MicrosoftMode)
{ {
@ -2517,6 +2523,9 @@ ParserResult* Parser::ParseHeader(const std::string& File)
auto FileName = FileEntry->getName(); auto FileName = FileEntry->getName();
auto Unit = Lib->FindOrCreateModule(FileName); auto Unit = Lib->FindOrCreateModule(FileName);
if (Unit->OriginalPtr == nullptr)
Unit->OriginalPtr = (void*) FileEntry;
auto TU = AST->getTranslationUnitDecl(); auto TU = AST->getTranslationUnitDecl();
HandleDeclaration(TU, Unit); HandleDeclaration(TU, Unit);

7
src/Generator/Driver.cs

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

3
src/Parser/Options.h

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

6
src/Parser/Parser.cpp

@ -110,6 +110,12 @@ void Parser::SetupHeader()
args.push_back("-fdelayed-template-parsing"); 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.reset(new CompilerInstance());
C->createDiagnostics(); C->createDiagnostics();

Loading…
Cancel
Save