Browse Source

Improved ABI kind handling in the parser.

pull/355/head
triton 11 years ago
parent
commit
67a4821a8e
  1. 27
      src/CppParser/Parser.cpp

27
src/CppParser/Parser.cpp

@ -103,6 +103,24 @@ static std::string GetCXXABIString(clang::TargetCXXABI::Kind Kind) @@ -103,6 +103,24 @@ static std::string GetCXXABIString(clang::TargetCXXABI::Kind Kind)
std::vector<std::string> GetWindowsSystemIncludeDirs();
#endif
static clang::TargetCXXABI::Kind
ConvertToClangTargetCXXABI(CppSharp::CppParser::AST::CppAbi abi)
{
using namespace clang;
switch (abi)
{
case CppSharp::CppParser::AST::CppAbi::Itanium:
return TargetCXXABI::GenericItanium;
case CppSharp::CppParser::AST::CppAbi::Microsoft:
return TargetCXXABI::Microsoft;
case CppSharp::CppParser::AST::CppAbi::ARM:
return TargetCXXABI::GenericARM;
}
llvm_unreachable("Unsupported C++ ABI.");
}
void Parser::SetupHeader()
{
using namespace clang;
@ -149,8 +167,7 @@ void Parser::SetupHeader() @@ -149,8 +167,7 @@ void Parser::SetupHeader()
C->setInvocation(Inv);
auto& TO = Inv->TargetOpts;
TargetABI = (Opts->Abi == CppAbi::Microsoft) ? TargetCXXABI::Microsoft
: TargetCXXABI::GenericItanium;
TargetABI = ConvertToClangTargetCXXABI(Opts->Abi);
TO->Triple = llvm::sys::getDefaultTargetTriple();
if (!Opts->TargetTriple.empty())
@ -267,9 +284,6 @@ std::string Parser::GetDeclMangledName(clang::Decl* D, clang::TargetCXXABI ABI, @@ -267,9 +284,6 @@ std::string Parser::GetDeclMangledName(clang::Decl* D, clang::TargetCXXABI ABI,
switch(ABI.getKind())
{
default:
llvm_unreachable("Unknown mangling ABI");
break;
case TargetCXXABI::GenericItanium:
MC.reset(ItaniumMangleContext::create(*AST, AST->getDiagnostics()));
break;
case TargetCXXABI::Microsoft:
@ -277,6 +291,9 @@ std::string Parser::GetDeclMangledName(clang::Decl* D, clang::TargetCXXABI ABI, @@ -277,6 +291,9 @@ std::string Parser::GetDeclMangledName(clang::Decl* D, clang::TargetCXXABI ABI,
break;
}
if (!MC)
llvm_unreachable("Unknown mangling ABI");
std::string Mangled;
llvm::raw_string_ostream Out(Mangled);

Loading…
Cancel
Save