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)
((::CppSharp::CppParser::CppParserOptions*)NativePtr)->unityBuild = 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() unsigned int CppSharp::Parser::CppParserOptions::ArgumentsCount::get()
{ {
auto __ret = ((::CppSharp::CppParser::CppParserOptions*)NativePtr)->getArgumentsCount(); auto __ret = ((::CppSharp::CppParser::CppParserOptions*)NativePtr)->getArgumentsCount();

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

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

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

@ -18041,6 +18041,9 @@ namespace CppSharp
[FieldOffset(148)] [FieldOffset(148)]
internal byte unityBuild; internal byte unityBuild;
[FieldOffset(149)]
internal byte skipPrivateDeclarations;
[SuppressUnmanagedCodeSecurity] [SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser16CppParserOptionsC2Ev")] EntryPoint="_ZN8CppSharp9CppParser16CppParserOptionsC2Ev")]
@ -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 public uint ArgumentsCount
{ {
get get

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

@ -18041,6 +18041,9 @@ namespace CppSharp
[FieldOffset(184)] [FieldOffset(184)]
internal byte unityBuild; internal byte unityBuild;
[FieldOffset(185)]
internal byte skipPrivateDeclarations;
[SuppressUnmanagedCodeSecurity] [SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall, [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.ThisCall,
EntryPoint="??0CppParserOptions@CppParser@CppSharp@@QAE@XZ")] EntryPoint="??0CppParserOptions@CppParser@CppSharp@@QAE@XZ")]
@ -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 public uint ArgumentsCount
{ {
get get

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

@ -18040,6 +18040,9 @@ namespace CppSharp
[FieldOffset(288)] [FieldOffset(288)]
internal byte unityBuild; internal byte unityBuild;
[FieldOffset(289)]
internal byte skipPrivateDeclarations;
[SuppressUnmanagedCodeSecurity] [SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser16CppParserOptionsC2Ev")] EntryPoint="_ZN8CppSharp9CppParser16CppParserOptionsC2Ev")]
@ -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 public uint ArgumentsCount
{ {
get get

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

@ -18040,6 +18040,9 @@ namespace CppSharp
[FieldOffset(312)] [FieldOffset(312)]
internal byte unityBuild; internal byte unityBuild;
[FieldOffset(313)]
internal byte skipPrivateDeclarations;
[SuppressUnmanagedCodeSecurity] [SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser16CppParserOptionsC2Ev")] EntryPoint="_ZN8CppSharp9CppParser16CppParserOptionsC2Ev")]
@ -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 public uint ArgumentsCount
{ {
get get

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

@ -18040,6 +18040,9 @@ namespace CppSharp
[FieldOffset(240)] [FieldOffset(240)]
internal byte unityBuild; internal byte unityBuild;
[FieldOffset(241)]
internal byte skipPrivateDeclarations;
[SuppressUnmanagedCodeSecurity] [SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, [DllImport("CppSharp.CppParser", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="_ZN8CppSharp9CppParser16CppParserOptionsC2Ev")] EntryPoint="_ZN8CppSharp9CppParser16CppParserOptionsC2Ev")]
@ -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 public uint ArgumentsCount
{ {
get get

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

@ -18041,6 +18041,9 @@ namespace CppSharp
[FieldOffset(312)] [FieldOffset(312)]
internal byte unityBuild; internal byte unityBuild;
[FieldOffset(313)]
internal byte skipPrivateDeclarations;
[SuppressUnmanagedCodeSecurity] [SuppressUnmanagedCodeSecurity]
[DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl, [DllImport("CppSharp.CppParser.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
EntryPoint="??0CppParserOptions@CppParser@CppSharp@@QEAA@XZ")] EntryPoint="??0CppParserOptions@CppParser@CppSharp@@QEAA@XZ")]
@ -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 public uint ArgumentsCount
{ {
get get

1
src/CppParser/CppParser.cpp

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

1
src/CppParser/CppParser.h

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

32
src/CppParser/Parser.cpp

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

1
src/Generator.Tests/ASTTestFixture.cs

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

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

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

Loading…
Cancel
Save