@ -73,34 +73,60 @@ void Parser::SetupHeader()
@@ -73,34 +73,60 @@ void Parser::SetupHeader()
using namespace clang ;
using namespace clix ;
const char * args [ ] =
{
std : : vector < const char * > args ;
args . push_back ( " -cc1 " ) ;
// Enable C++ language mode
" -xc++ " , " -std=c++11 " , " -fno-rtti " ,
args . push_back ( " -xc++ " ) ;
args . push_back ( " -std=gnu++11 " ) ;
//args.push_back("-Wno-undefined-inline");
args . push_back ( " -fno-rtti " ) ;
// Enable the Microsoft parsing extensions
" -fms-extensions " , " -fms-compatibility " , " -fdelayed-template-parsing " ,
// Enable the Microsoft ABI
//"-Xclang", "-cxx-abi", "-Xclang", "microsoft"
} ;
if ( Opts - > MicrosoftMode )
{
args . push_back ( " -fms-extensions " ) ;
args . push_back ( " -fms-compatibility " ) ;
args . push_back ( " -fdelayed-template-parsing " ) ;
}
C . reset ( new CompilerInstance ( ) ) ;
C - > createDiagnostics ( ) ;
CompilerInvocation * Inv = new CompilerInvocation ( ) ;
CompilerInvocation : : CreateFromArgs ( * Inv , args , args + ARRAY_SIZE ( args ) ,
CompilerInvocation : : CreateFromArgs ( * Inv , args . data ( ) , args . data ( ) + args . size ( ) ,
C - > getDiagnostics ( ) ) ;
C - > setInvocation ( Inv ) ;
TargetOptions & TO = Inv - > getTargetOpts ( ) ;
if ( ! System : : String : : IsNullOrWhiteSpace ( Opts - > TargetTriple ) )
TO . Triple = marshalString < E_UTF8 > ( Opts - > TargetTriple ) ;
else
TO . Triple = llvm : : sys : : getDefaultTargetTriple ( ) ;
TargetABI = Opts - > MicrosoftMode ? TargetCXXABI : : Microsoft
: TargetCXXABI : : GenericItanium ;
TargetInfo * TI = TargetInfo : : CreateTargetInfo ( C - > getDiagnostics ( ) , & TO ) ;
TI - > setCXXABI ( TargetCXXABI : : Microsoft ) ;
TI - > setCXXABI ( TargetABI ) ;
C - > setTarget ( TI ) ;
C - > createFileManager ( ) ;
C - > createSourceManager ( C - > getFileManager ( ) ) ;
if ( Opts - > NoStandardIncludes )
{
auto HSOpts = C - > getHeaderSearchOpts ( ) ;
HSOpts . UseStandardSystemIncludes = false ;
HSOpts . UseStandardCXXIncludes = false ;
}
if ( Opts - > NoBuiltinIncludes )
{
auto HSOpts = C - > getHeaderSearchOpts ( ) ;
HSOpts . UseBuiltinIncludes = false ;
}
if ( Opts - > Verbose )
C - > getHeaderSearchOpts ( ) . Verbose = true ;
@ -110,6 +136,12 @@ void Parser::SetupHeader()
@@ -110,6 +136,12 @@ void Parser::SetupHeader()
C - > getHeaderSearchOpts ( ) . AddPath ( s , frontend : : Angled , false , false ) ;
}
for each ( System : : String ^ % include in Opts - > SystemIncludeDirs )
{
String s = marshalString < E_UTF8 > ( include ) ;
C - > getHeaderSearchOpts ( ) . AddPath ( s , frontend : : System , false , false ) ;
}
for each ( System : : String ^ % def in Opts - > Defines )
{
String s = marshalString < E_UTF8 > ( def ) ;
@ -123,6 +155,8 @@ void Parser::SetupHeader()
@@ -123,6 +155,8 @@ void Parser::SetupHeader()
clang : : frontend : : System , false , false ) ;
# ifdef _MSC_VER
if ( ! Opts - > NoBuiltinIncludes )
{
std : : vector < std : : string > SystemDirs = GetWindowsSystemIncludeDirs ( ) ;
clang : : HeaderSearchOptions & HSOpts = C - > getHeaderSearchOpts ( ) ;
@ -130,6 +164,7 @@ void Parser::SetupHeader()
@@ -130,6 +164,7 @@ void Parser::SetupHeader()
{
HSOpts . AddPath ( SystemDirs [ i ] , frontend : : System , false , false ) ;
}
}
# endif
C - > createPreprocessor ( ) ;
@ -1165,7 +1200,7 @@ void Parser::WalkFunction(clang::FunctionDecl* FD, CppSharp::Function^ F,
@@ -1165,7 +1200,7 @@ void Parser::WalkFunction(clang::FunctionDecl* FD, CppSharp::Function^ F,
}
F - > ReturnType = WalkType ( FD - > getResultType ( ) , & RTL ) ;
String Mangled = GetDeclMangledName ( FD , TargetCXX ABI : : Microsoft , IsDependent ) ;
String Mangled = GetDeclMangledName ( FD , TargetABI , IsDependent ) ;
F - > Mangled = marshalString < E_UTF8 > ( Mangled ) ;
for ( auto it = FD - > param_begin ( ) ; it ! = FD - > param_end ( ) ; + + it )
@ -1374,7 +1409,7 @@ CppSharp::Variable^ Parser::WalkVariable(clang::VarDecl *VD)
@@ -1374,7 +1409,7 @@ CppSharp::Variable^ Parser::WalkVariable(clang::VarDecl *VD)
auto TL = VD - > getTypeSourceInfo ( ) - > getTypeLoc ( ) ;
Var - > QualifiedType = GetQualifiedType ( VD - > getType ( ) , WalkType ( VD - > getType ( ) , & TL ) ) ;
auto Mangled = GetDeclMangledName ( VD , TargetCXX ABI : : Microsoft , /*IsDependent=*/ false ) ;
auto Mangled = GetDeclMangledName ( VD , TargetABI , /*IsDependent=*/ false ) ;
Var - > Mangled = marshalString < E_UTF8 > ( Mangled ) ;
return Var ;