|
|
@ -157,6 +157,8 @@ Parser::Parser(CppParserOptions* Opts) |
|
|
|
{ |
|
|
|
{ |
|
|
|
supportedStdTypes.insert("allocator"); |
|
|
|
supportedStdTypes.insert("allocator"); |
|
|
|
supportedStdTypes.insert("basic_string"); |
|
|
|
supportedStdTypes.insert("basic_string"); |
|
|
|
|
|
|
|
supportedStdTypes.insert("optional"); |
|
|
|
|
|
|
|
supportedStdTypes.insert("vector"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
LayoutField Parser::WalkVTablePointer(Class* Class, |
|
|
|
LayoutField Parser::WalkVTablePointer(Class* Class, |
|
|
@ -1011,15 +1013,44 @@ bool Parser::IsSupported(const clang::CXXMethodDecl* MD) |
|
|
|
{ |
|
|
|
{ |
|
|
|
using namespace clang; |
|
|
|
using namespace clang; |
|
|
|
|
|
|
|
|
|
|
|
return !c->getSourceManager().isInSystemHeader(MD->getBeginLoc()) || |
|
|
|
if (!c->getSourceManager().isInSystemHeader(MD->getBeginLoc())) |
|
|
|
(isa<CXXConstructorDecl>(MD) && MD->getNumParams() == 0) || |
|
|
|
return true; |
|
|
|
isa<CXXDestructorDecl>(MD) || |
|
|
|
|
|
|
|
(MD->getDeclName().isIdentifier() && |
|
|
|
if (isa<CXXConstructorDecl>(MD)) |
|
|
|
((MD->getName() == "data" && MD->getNumParams() == 0 && MD->isConst()) || |
|
|
|
return MD->getNumParams() == 0; |
|
|
|
(MD->getName() == "assign" && MD->getNumParams() == 1 && |
|
|
|
|
|
|
|
MD->parameters()[0]->getType()->isPointerType())) && |
|
|
|
if (isa<CXXDestructorDecl>(MD)) |
|
|
|
supportedStdTypes.find(MD->getParent()->getName().str()) != |
|
|
|
return true; |
|
|
|
supportedStdTypes.end()); |
|
|
|
|
|
|
|
|
|
|
|
if (!MD->getDeclName().isIdentifier()) |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (supportedStdTypes.find(MD->getParent()->getName().str()) == supportedStdTypes.end()) |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
switch (MD->getNumParams()) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
case 0: |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (!MD->isConst()) |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return MD->getName() == "data" || |
|
|
|
|
|
|
|
MD->getName() == "has_value" || |
|
|
|
|
|
|
|
MD->getName() == "value"; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
case 1: |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (!MD->parameters()[0]->getType()->isPointerType()) |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return MD->getName() == "assign"; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
default: |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static RecordArgABI GetRecordArgABI( |
|
|
|
static RecordArgABI GetRecordArgABI( |
|
|
|