Browse Source

Don't export symbols for explicit specializations

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1281/head
Dimitar Dobrev 6 years ago committed by João Matos
parent
commit
ed2e45f609
  1. 11
      src/Generator/Passes/GenerateSymbolsPass.cs

11
src/Generator/Passes/GenerateSymbolsPass.cs

@ -116,18 +116,21 @@ namespace CppSharp.Passes
{ {
var mangled = function.Mangled; var mangled = function.Mangled;
var method = function as Method; var method = function as Method;
bool isInspecialization; bool isInImplicitSpecialization;
var declarationContext = function.Namespace; var declarationContext = function.Namespace;
do do
{ {
isInspecialization = declarationContext is ClassTemplateSpecialization; isInImplicitSpecialization =
declarationContext is ClassTemplateSpecialization specialization &&
specialization.SpecializationKind !=
TemplateSpecializationKind.ExplicitSpecialization;
declarationContext = declarationContext.Namespace; declarationContext = declarationContext.Namespace;
} while (!isInspecialization && declarationContext != null); } while (!isInImplicitSpecialization && declarationContext != null);
return function.IsGenerated && !function.IsDeleted && return function.IsGenerated && !function.IsDeleted &&
!function.IsDependent && !function.IsPure && function.Namespace.IsGenerated && !function.IsDependent && !function.IsPure && function.Namespace.IsGenerated &&
(!string.IsNullOrEmpty(function.Body) || (!string.IsNullOrEmpty(function.Body) ||
isInspecialization || function.IsImplicit) && isInImplicitSpecialization || function.IsImplicit) &&
// we don't need symbols for virtual functions anyway // we don't need symbols for virtual functions anyway
(method == null || (!method.IsVirtual && !method.IsSynthetized && (method == null || (!method.IsVirtual && !method.IsSynthetized &&
(!method.IsConstructor || !((Class) method.Namespace).IsAbstract))) && (!method.IsConstructor || !((Class) method.Namespace).IsAbstract))) &&

Loading…
Cancel
Save