Browse Source

Added an option for skipping private declarations.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1154/head
Dimitar Dobrev 6 years ago
parent
commit
e203463a9d
  1. 10
      src/CppParser/Bindings/CLI/CppParser.cpp
  2. 6
      src/CppParser/Bindings/CLI/CppParser.h
  3. 16
      src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs
  4. 16
      src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs
  5. 16
      src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs
  6. 16
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs
  7. 16
      src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs
  8. 16
      src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs
  9. 1
      src/CppParser/CppParser.cpp
  10. 1
      src/CppParser/CppParser.h
  11. 32
      src/CppParser/Parser.cpp
  12. 1
      src/Generator.Tests/ASTTestFixture.cs
  13. 12
      src/Generator.Tests/Passes/TestPasses.cs

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

@ -490,6 +490,16 @@ void CppSharp::Parser::CppParserOptions::UnityBuild::set(bool value) @@ -490,6 +490,16 @@ void CppSharp::Parser::CppParserOptions::UnityBuild::set(bool value)
((::CppSharp::CppParser::CppParserOptions*)NativePtr)->unityBuild = value;
}
bool CppSharp::Parser::CppParserOptions::SkipPrivateDeclarations::get()
{
return ((::CppSharp::CppParser::CppParserOptions*)NativePtr)->skipPrivateDeclarations;
}
void CppSharp::Parser::CppParserOptions::SkipPrivateDeclarations::set(bool value)
{
((::CppSharp::CppParser::CppParserOptions*)NativePtr)->skipPrivateDeclarations = value;
}
unsigned int CppSharp::Parser::CppParserOptions::ArgumentsCount::get()
{
auto __ret = ((::CppSharp::CppParser::CppParserOptions*)NativePtr)->getArgumentsCount();

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

@ -193,6 +193,12 @@ namespace CppSharp @@ -193,6 +193,12 @@ namespace CppSharp
void set(bool);
}
property bool SkipPrivateDeclarations
{
bool get();
void set(bool);
}
property unsigned int ArgumentsCount
{
unsigned int get();

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

@ -18041,6 +18041,9 @@ namespace CppSharp @@ -18041,6 +18041,9 @@ namespace CppSharp
[FieldOffset(148)]
internal byte unityBuild;
[FieldOffset(149)]
internal byte skipPrivateDeclarations;
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser16CppParserOptionsC2Ev")]
@ -18578,6 +18581,19 @@ namespace CppSharp @@ -18578,6 +18581,19 @@ namespace CppSharp
}
}
public bool SkipPrivateDeclarations
{
get
{
return ((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->skipPrivateDeclarations != 0;
}
set
{
((global::CppSharp.Parser.CppParserOptions.__Internal*)__Instance)->skipPrivateDeclarations = (byte) (value ? 1 : 0);
}
}
public uint ArgumentsCount
{
get

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

@ -18041,6 +18041,9 @@ namespace CppSharp @@ -18041,6 +18041,9 @@ namespace CppSharp
[FieldOffset(184)]
internal byte unityBuild;
[FieldOffset(185)]
internal byte skipPrivateDeclarations;
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall,
EntryPoint="??0CppParserOptions@CppParser@CppSharp@@QAE@XZ")]
@ -18578,6 +18581,19 @@ namespace CppSharp @@ -18578,6 +18581,19 @@ namespace CppSharp
}
}
public bool SkipPrivateDeclarations
{
get
{
return ((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->skipPrivateDeclarations != 0;
}
set
{
((global::CppSharp.Parser.CppParserOptions.__Internal*)__Instance)->skipPrivateDeclarations = (byte) (value ? 1 : 0);
}
}
public uint ArgumentsCount
{
get

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

@ -18040,6 +18040,9 @@ namespace CppSharp @@ -18040,6 +18040,9 @@ namespace CppSharp
[FieldOffset(288)]
internal byte unityBuild;
[FieldOffset(289)]
internal byte skipPrivateDeclarations;
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser16CppParserOptionsC2Ev")]
@ -18577,6 +18580,19 @@ namespace CppSharp @@ -18577,6 +18580,19 @@ namespace CppSharp
}
}
public bool SkipPrivateDeclarations
{
get
{
return ((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->skipPrivateDeclarations != 0;
}
set
{
((global::CppSharp.Parser.CppParserOptions.__Internal*)__Instance)->skipPrivateDeclarations = (byte) (value ? 1 : 0);
}
}
public uint ArgumentsCount
{
get

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

@ -18040,6 +18040,9 @@ namespace CppSharp @@ -18040,6 +18040,9 @@ namespace CppSharp
[FieldOffset(312)]
internal byte unityBuild;
[FieldOffset(313)]
internal byte skipPrivateDeclarations;
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser16CppParserOptionsC2Ev")]
@ -18577,6 +18580,19 @@ namespace CppSharp @@ -18577,6 +18580,19 @@ namespace CppSharp
}
}
public bool SkipPrivateDeclarations
{
get
{
return ((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->skipPrivateDeclarations != 0;
}
set
{
((global::CppSharp.Parser.CppParserOptions.__Internal*)__Instance)->skipPrivateDeclarations = (byte) (value ? 1 : 0);
}
}
public uint ArgumentsCount
{
get

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

@ -18040,6 +18040,9 @@ namespace CppSharp @@ -18040,6 +18040,9 @@ namespace CppSharp
[FieldOffset(240)]
internal byte unityBuild;
[FieldOffset(241)]
internal byte skipPrivateDeclarations;
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser16CppParserOptionsC2Ev")]
@ -18577,6 +18580,19 @@ namespace CppSharp @@ -18577,6 +18580,19 @@ namespace CppSharp
}
}
public bool SkipPrivateDeclarations
{
get
{
return ((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->skipPrivateDeclarations != 0;
}
set
{
((global::CppSharp.Parser.CppParserOptions.__Internal*)__Instance)->skipPrivateDeclarations = (byte) (value ? 1 : 0);
}
}
public uint ArgumentsCount
{
get

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

@ -18041,6 +18041,9 @@ namespace CppSharp @@ -18041,6 +18041,9 @@ namespace CppSharp
[FieldOffset(312)]
internal byte unityBuild;
[FieldOffset(313)]
internal byte skipPrivateDeclarations;
[SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="??0CppParserOptions@CppParser@CppSharp@@QEAA@XZ")]
@ -18578,6 +18581,19 @@ namespace CppSharp @@ -18578,6 +18581,19 @@ namespace CppSharp
}
}
public bool SkipPrivateDeclarations
{
get
{
return ((global::CppSharp.Parser.CppParserOptions.__Internal*) __Instance)->skipPrivateDeclarations != 0;
}
set
{
((global::CppSharp.Parser.CppParserOptions.__Internal*)__Instance)->skipPrivateDeclarations = (byte) (value ? 1 : 0);
}
}
public uint ArgumentsCount
{
get

1
src/CppParser/CppParser.cpp

@ -19,6 +19,7 @@ CppParserOptions::CppParserOptions() @@ -19,6 +19,7 @@ CppParserOptions::CppParserOptions()
, microsoftMode(false)
, verbose(false)
, unityBuild(false)
, skipPrivateDeclarations(true)
{
}

1
src/CppParser/CppParser.h

@ -45,6 +45,7 @@ struct CS_API CppParserOptions @@ -45,6 +45,7 @@ struct CS_API CppParserOptions
bool microsoftMode;
bool verbose;
bool unityBuild;
bool skipPrivateDeclarations;
};
enum class ParserDiagnosticLevel

32
src/CppParser/Parser.cpp

@ -153,10 +153,8 @@ void Parser::ReadClassLayout(Class* Class, const clang::RecordDecl* RD, @@ -153,10 +153,8 @@ void Parser::ReadClassLayout(Class* Class, const clang::RecordDecl* RD,
// Dump fields.
uint64_t FieldNo = 0;
for (RecordDecl::field_iterator I = RD->field_begin(),
E = RD->field_end(); I != E; ++I, ++FieldNo) {
auto Field = *I;
uint64_t LocalFieldOffsetInBits = Layout.getFieldOffset(FieldNo);
for (const clang::FieldDecl* Field : RD->fields()) {
uint64_t LocalFieldOffsetInBits = Layout.getFieldOffset(FieldNo++);
CharUnits FieldOffset =
Offset + c->getASTContext().toCharUnitsFromBits(LocalFieldOffsetInBits);
@ -966,7 +964,7 @@ void Parser::WalkRecord(const clang::RecordDecl* Record, Class* RC) @@ -966,7 +964,7 @@ void Parser::WalkRecord(const clang::RecordDecl* Record, Class* RC)
{
auto MD = cast<CXXMethodDecl>(D);
if (IsSupported(MD))
WalkMethodCXX(MD);
WalkDeclaration(MD);
break;
}
}
@ -975,19 +973,14 @@ void Parser::WalkRecord(const clang::RecordDecl* Record, Class* RC) @@ -975,19 +973,14 @@ void Parser::WalkRecord(const clang::RecordDecl* Record, Class* RC)
return;
}
if (opts->skipPrivateDeclarations &&
Record->getAccess() == clang::AccessSpecifier::AS_private)
return;
for (auto D : Record->decls())
{
switch (D->getKind())
{
case Decl::CXXConstructor:
case Decl::CXXDestructor:
case Decl::CXXConversion:
case Decl::CXXMethod:
{
auto MD = cast<CXXMethodDecl>(D);
WalkMethodCXX(MD);
break;
}
case Decl::AccessSpec:
{
AccessSpecDecl* AS = cast<AccessSpecDecl>(D);
@ -1514,6 +1507,10 @@ TypeAliasTemplate* Parser::WalkTypeAliasTemplate( @@ -1514,6 +1507,10 @@ TypeAliasTemplate* Parser::WalkTypeAliasTemplate(
FunctionTemplate* Parser::WalkFunctionTemplate(const clang::FunctionTemplateDecl* TD)
{
if (opts->skipPrivateDeclarations &&
TD->getAccess() == clang::AccessSpecifier::AS_private)
return nullptr;
using namespace clang;
auto NS = GetNamespace(TD);
@ -1729,6 +1726,11 @@ static CXXOperatorKind GetOperatorKindFromDecl(clang::DeclarationName Name) @@ -1729,6 +1726,11 @@ static CXXOperatorKind GetOperatorKindFromDecl(clang::DeclarationName Name)
Method* Parser::WalkMethodCXX(const clang::CXXMethodDecl* MD)
{
if (opts->skipPrivateDeclarations &&
MD->getAccess() == clang::AccessSpecifier::AS_private &&
!MD->isVirtual())
return nullptr;
using namespace clang;
// We could be in a redeclaration, so process the primary context.
@ -3930,6 +3932,8 @@ Declaration* Parser::WalkDeclaration(const clang::Decl* D) @@ -3930,6 +3932,8 @@ Declaration* Parser::WalkDeclaration(const clang::Decl* D)
{
auto MD = cast<CXXMethodDecl>(D);
Decl = WalkMethodCXX(MD);
if (Decl == nullptr)
return Decl;
auto NS = GetNamespace(MD);
Decl->_namespace = NS;

1
src/Generator.Tests/ASTTestFixture.cs

@ -21,6 +21,7 @@ namespace CppSharp.Generator.Tests @@ -21,6 +21,7 @@ namespace CppSharp.Generator.Tests
var testsPath = GeneratorTest.GetTestsDirectory("Native");
ParserOptions.AddIncludeDirs(testsPath);
ParserOptions.SkipPrivateDeclarations = true;
var module = Options.AddModule("Test");
module.Headers.AddRange(files);

12
src/Generator.Tests/Passes/TestPasses.cs

@ -148,17 +148,11 @@ namespace CppSharp.Generator.Tests.Passes @@ -148,17 +148,11 @@ namespace CppSharp.Generator.Tests.Passes
}
[Test]
public void TestStructInheritance()
{
}
[Test]
public void TestIgnoringMethod()
public void TestSkippedPrivateMethod()
{
AstContext.IgnoreClassMethodWithName("Foo", "toIgnore");
Assert.IsFalse(AstContext.FindClass("Foo").First().Methods.Find(
m => m.Name == "toIgnore").IsGenerated);
Assert.That(AstContext.FindClass("Foo").First().Methods.Find(
m => m.Name == "toIgnore"), Is.Null);
}
[Test]

Loading…
Cancel
Save