Browse Source

Move class handling code from CSharpSources.VisitDeclContext to VisitClass.

pull/818/head
Joao Matos 9 years ago
parent
commit
3fb3c4840a
  1. 46
      src/Generator/Generators/CSharp/CSharpSources.cs

46
src/Generator/Generators/CSharp/CSharpSources.cs

@ -235,28 +235,9 @@ namespace CppSharp.Generators.CSharp
} }
// Generate all the struct/class declarations. // Generate all the struct/class declarations.
foreach (var @class in context.Classes.Where(c => !c.IsIncomplete)) foreach (var @class in context.Classes)
{ {
if (@class.IsInterface) @class.Visit(this);
{
GenerateInterface(@class);
continue;
}
var specialization = @class as ClassTemplateSpecialization;
if (specialization != null &&
specialization.SpecializationKind ==
TemplateSpecializationKind.ExplicitInstantiationDeclaration)
continue;
if (!@class.IsDependent)
{
@class.Visit(this);
continue;
}
if (!(@class.Namespace is Class))
GenerateClassTemplateSpecializationInternal(@class);
} }
if (context.Functions.Any(f => f.IsGenerated) || if (context.Functions.Any(f => f.IsGenerated) ||
@ -438,8 +419,27 @@ namespace CppSharp.Generators.CSharp
if (@class.IsIncomplete) if (@class.IsIncomplete)
return false; return false;
foreach (var nestedTemplate in @class.Classes.Where(c => !c.IsIncomplete && c.IsDependent)) if (@class.IsInterface)
GenerateClassTemplateSpecializationInternal(nestedTemplate); {
GenerateInterface(@class);
return true;
}
var specialization = @class as ClassTemplateSpecialization;
if (specialization != null && specialization.SpecializationKind ==
TemplateSpecializationKind.ExplicitInstantiationDeclaration)
return true;
if (@class.IsDependent)
{
foreach (var nestedTemplate in @class.Classes.Where(c => !c.IsIncomplete && c.IsDependent))
GenerateClassTemplateSpecializationInternal(nestedTemplate);
if (!(@class.Namespace is Class))
GenerateClassTemplateSpecializationInternal(@class);
return true;
}
System.Type typeMap = null; System.Type typeMap = null;
string key = string.Empty; string key = string.Empty;

Loading…
Cancel
Save