diff --git a/src/AST/Namespace.cs b/src/AST/Namespace.cs index 63997dc9..03846a85 100644 --- a/src/AST/Namespace.cs +++ b/src/AST/Namespace.cs @@ -24,6 +24,9 @@ namespace CppSharp.AST // Used to keep track of anonymous declarations. public Dictionary Anonymous; + // True if the context is inside an extern "C" context. + public bool IsExternCContext; + protected DeclarationContext() { Namespaces = new List(); diff --git a/src/Core/Parser/ASTConverter.cs b/src/Core/Parser/ASTConverter.cs index dde486bd..fd488c3d 100644 --- a/src/Core/Parser/ASTConverter.cs +++ b/src/Core/Parser/ASTConverter.cs @@ -1039,6 +1039,7 @@ namespace CppSharp _class.HasNonTrivialDefaultConstructor = @class.HasNonTrivialDefaultConstructor; _class.HasNonTrivialCopyConstructor = @class.HasNonTrivialCopyConstructor; _class.HasNonTrivialDestructor = @class.HasNonTrivialDestructor; + _class.IsExternCContext = @class.IsExternCContext; _class.Layout = VisitClassLayout(@class.Layout); } diff --git a/src/CppParser/AST.h b/src/CppParser/AST.h index 4e040218..cdc73d9f 100644 --- a/src/CppParser/AST.h +++ b/src/CppParser/AST.h @@ -618,6 +618,7 @@ struct CS_API Class : public DeclarationContext bool HasNonTrivialDefaultConstructor; bool HasNonTrivialCopyConstructor; bool HasNonTrivialDestructor; + bool IsExternCContext; ClassLayout Layout; }; diff --git a/src/CppParser/Parser.cpp b/src/CppParser/Parser.cpp index e083390e..2606cc4d 100644 --- a/src/CppParser/Parser.cpp +++ b/src/CppParser/Parser.cpp @@ -598,6 +598,8 @@ void Parser::WalkRecordCXX(clang::CXXRecordDecl* Record, Class* RC) RC->HasNonTrivialCopyConstructor = Record->hasNonTrivialCopyConstructor(); RC->HasNonTrivialDestructor = Record->hasNonTrivialDestructor(); + RC->IsExternCContext = Record->isExternCContext(); + bool hasLayout = !Record->isDependentType() && !Record->isInvalidDecl(); // Get the record layout information. diff --git a/src/Parser/Parser.cpp b/src/Parser/Parser.cpp index 2cc716b4..c200dd08 100644 --- a/src/Parser/Parser.cpp +++ b/src/Parser/Parser.cpp @@ -557,6 +557,8 @@ void Parser::WalkRecordCXX(clang::CXXRecordDecl* Record, RC->HasNonTrivialCopyConstructor = Record->hasNonTrivialCopyConstructor(); RC->HasNonTrivialDestructor = Record->hasNonTrivialDestructor(); + RC->IsExternCContext = Record->isExternCContext(); + bool hasLayout = !Record->isDependentType() && !Record->isInvalidDecl(); // Get the record layout information.