Browse Source

Extended declarations to store their packing. (#871)

pull/873/head
Kimon Topouzidis 8 years ago committed by Dimitar Dobrev
parent
commit
1298634804
  1. 1
      src/AST/Declaration.cs
  2. 1
      src/CppParser/AST.cpp
  3. 3
      src/CppParser/AST.h
  4. 10
      src/CppParser/Bindings/CLI/AST.cpp
  5. 6
      src/CppParser/Bindings/CLI/AST.h
  6. 1611
      src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs
  7. 1609
      src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs
  8. 1611
      src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs
  9. 1613
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs
  10. 1611
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs
  11. 1613
      src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs
  12. 29
      src/CppParser/Parser.cpp
  13. 2
      src/Parser/ASTConverter.cs
  14. 19
      tests/Common/Common.h

1
src/AST/Declaration.cs

@ -54,6 +54,7 @@ namespace CppSharp.AST @@ -54,6 +54,7 @@ namespace CppSharp.AST
public int LineNumberStart { get; set; }
public int LineNumberEnd { get; set; }
public bool IsImplicit { get; set; }
public int MaxFieldAlignment { get; set; }
private DeclarationContext @namespace;
public DeclarationContext OriginalNamespace;

1
src/CppParser/AST.cpp

@ -251,6 +251,7 @@ Declaration::Declaration(DeclarationKind kind) @@ -251,6 +251,7 @@ Declaration::Declaration(DeclarationKind kind)
, completeDeclaration(0)
, definitionOrder(0)
, originalPtr(0)
, maxFieldAlignment(0)
{
}

3
src/CppParser/AST.h

@ -446,7 +446,7 @@ enum class DeclarationKind @@ -446,7 +446,7 @@ enum class DeclarationKind
NonTypeTemplateParm,
VarTemplate,
VarTemplateSpecialization,
VarTemplatePartialSpecialization,
VarTemplatePartialSpecialization
};
#define DECLARE_DECL_KIND(klass, kind) \
@ -471,6 +471,7 @@ public: @@ -471,6 +471,7 @@ public:
~Declaration();
DeclarationKind kind;
int maxFieldAlignment;
AccessSpecifier access;
DeclarationContext* _namespace;
SourceLocation location;

10
src/CppParser/Bindings/CLI/AST.cpp

@ -2118,6 +2118,16 @@ void CppSharp::Parser::AST::Declaration::Kind::set(CppSharp::Parser::AST::Declar @@ -2118,6 +2118,16 @@ void CppSharp::Parser::AST::Declaration::Kind::set(CppSharp::Parser::AST::Declar
((::CppSharp::CppParser::AST::Declaration*)NativePtr)->kind = (::CppSharp::CppParser::AST::DeclarationKind)value;
}
int CppSharp::Parser::AST::Declaration::MaxFieldAlignment::get()
{
return ((::CppSharp::CppParser::AST::Declaration*)NativePtr)->maxFieldAlignment;
}
void CppSharp::Parser::AST::Declaration::MaxFieldAlignment::set(int value)
{
((::CppSharp::CppParser::AST::Declaration*)NativePtr)->maxFieldAlignment = value;
}
CppSharp::Parser::AST::AccessSpecifier CppSharp::Parser::AST::Declaration::Access::get()
{
return (CppSharp::Parser::AST::AccessSpecifier)((::CppSharp::CppParser::AST::Declaration*)NativePtr)->access;

6
src/CppParser/Bindings/CLI/AST.h

@ -1442,6 +1442,12 @@ namespace CppSharp @@ -1442,6 +1442,12 @@ namespace CppSharp
void set(CppSharp::Parser::AST::DeclarationKind);
}
property int MaxFieldAlignment
{
int get();
void set(int);
}
property CppSharp::Parser::AST::AccessSpecifier Access
{
CppSharp::Parser::AST::AccessSpecifier get();

1611
src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs

File diff suppressed because it is too large Load Diff

1609
src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs

File diff suppressed because it is too large Load Diff

1611
src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs

File diff suppressed because it is too large Load Diff

1613
src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs

File diff suppressed because it is too large Load Diff

1611
src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs

File diff suppressed because it is too large Load Diff

1613
src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs

File diff suppressed because it is too large Load Diff

29
src/CppParser/Parser.cpp

@ -3523,22 +3523,6 @@ Declaration* Parser::WalkDeclaration(const clang::Decl* D, @@ -3523,22 +3523,6 @@ Declaration* Parser::WalkDeclaration(const clang::Decl* D,
{
using namespace clang;
if (D->hasAttrs())
{
for (auto it = D->attr_begin(); it != D->attr_end(); ++it)
{
Attr* Attr = (*it);
if (Attr->getKind() != clang::attr::Annotate)
continue;
AnnotateAttr* Annotation = cast<AnnotateAttr>(Attr);
assert(Annotation != nullptr);
StringRef AnnotationText = Annotation->getAnnotation();
}
}
Declaration* Decl = nullptr;
auto Kind = D->getKind();
@ -3828,6 +3812,19 @@ Declaration* Parser::WalkDeclaration(const clang::Decl* D, @@ -3828,6 +3812,19 @@ Declaration* Parser::WalkDeclaration(const clang::Decl* D,
break;
} };
if (Decl && D->hasAttrs())
{
for (auto it = D->attr_begin(); it != D->attr_end(); ++it)
{
Attr* Attr = (*it);
if (Attr->getKind() == clang::attr::Kind::MaxFieldAlignment)
{
auto MFA = cast<clang::MaxFieldAlignmentAttr>(Attr);
Decl->maxFieldAlignment = MFA->getAlignment();
}
}
}
return Decl;
}

2
src/Parser/ASTConverter.cs

@ -941,6 +941,8 @@ namespace CppSharp @@ -941,6 +941,8 @@ namespace CppSharp
_decl.IsIncomplete = decl.IsIncomplete;
_decl.IsDependent = decl.IsDependent;
_decl.DefinitionOrder = decl.DefinitionOrder;
_decl.MaxFieldAlignment = decl.MaxFieldAlignment;
if (decl.CompleteDeclaration != null)
_decl.CompleteDeclaration = Visit(decl.CompleteDeclaration);
if (decl.Comment != null)

19
tests/Common/Common.h

@ -7,6 +7,25 @@ @@ -7,6 +7,25 @@
#include <string>
#include <vector>
#pragma pack(4)
class TestPacking
{
public:
int integer;
bool boolean;
double dble;
int i2;
};
#pragma pack(2)
struct TestP
{
char b;
bool c;
double d;
};
class DLL_API IgnoredType
{
class IgnoredNested

Loading…
Cancel
Save