Browse Source

Extract namespace-level functions and variable generation into its own method.

pull/818/head
Joao Matos 9 years ago
parent
commit
2bba0d6486
  1. 82
      src/Generator/Generators/CSharp/CSharpSources.cs

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

@ -219,73 +219,67 @@ namespace CppSharp.Generators.CSharp
public override bool VisitDeclContext(DeclarationContext context) public override bool VisitDeclContext(DeclarationContext context)
{ {
// Generate all the enum declarations.
foreach (var @enum in context.Enums) foreach (var @enum in context.Enums)
{
GenerateEnum(@enum); GenerateEnum(@enum);
}
// Generate all the typedef declarations.
foreach (var typedef in context.Typedefs) foreach (var typedef in context.Typedefs)
{
GenerateTypedef(typedef); GenerateTypedef(typedef);
}
// Generate all the struct/class declarations.
foreach (var @class in context.Classes) foreach (var @class in context.Classes)
{
@class.Visit(this); @class.Visit(this);
}
if (context.Functions.Any(f => f.IsGenerated) || foreach (var @event in context.Events)
(!(context is Class) && GenerateEvent(@event);
context.Variables.Any(
v => v.IsGenerated && v.Access == AccessSpecifier.Public)))
{
PushBlock(CSharpBlockKind.Functions);
var parentName = Helpers.SafeIdentifier(context.TranslationUnit.FileNameWithoutExtension);
WriteLine("public unsafe partial class {0}", parentName);
WriteStartBraceIndent();
PushBlock(CSharpBlockKind.InternalsClass); GenerateNamespaceFunctionsAndVariables(context);
GenerateClassInternalHead();
WriteStartBraceIndent();
// Generate all the internal function declarations. foreach(var childNamespace in context.Namespaces)
foreach (var function in context.Functions) childNamespace.Visit(this);
{
if ((!function.IsGenerated && !function.IsInternal) || function.IsSynthetized) continue;
GenerateInternalFunction(function); return true;
} }
WriteCloseBraceIndent(); void GenerateNamespaceFunctionsAndVariables(DeclarationContext context)
PopBlock(NewLineKind.BeforeNextBlock); {
var hasGlobalVariables = !(context is Class) && context.Variables.Any(
v => v.IsGenerated && v.Access == AccessSpecifier.Public);
foreach (var function in context.Functions) if (!context.Functions.Any(f => f.IsGenerated) && !hasGlobalVariables)
{ return;
if (!function.IsGenerated) continue;
GenerateFunction(function, parentName); PushBlock(CSharpBlockKind.Functions);
} var parentName = Helpers.SafeIdentifier(context.TranslationUnit.FileNameWithoutExtension);
WriteLine("public unsafe partial class {0}", parentName);
WriteStartBraceIndent();
foreach (var variable in context.Variables.Where( PushBlock(CSharpBlockKind.InternalsClass);
v => v.IsGenerated && v.Access == AccessSpecifier.Public)) GenerateClassInternalHead();
GenerateVariable(null, variable); WriteStartBraceIndent();
WriteCloseBraceIndent(); // Generate all the internal function declarations.
PopBlock(NewLineKind.BeforeNextBlock); foreach (var function in context.Functions)
{
if ((!function.IsGenerated && !function.IsInternal) || function.IsSynthetized) continue;
GenerateInternalFunction(function);
} }
foreach (var @event in context.Events) WriteCloseBraceIndent();
PopBlock(NewLineKind.BeforeNextBlock);
foreach (var function in context.Functions)
{ {
GenerateEvent(@event); if (!function.IsGenerated) continue;
GenerateFunction(function, parentName);
} }
foreach(var childNamespace in context.Namespaces) foreach (var variable in context.Variables.Where(
childNamespace.Visit(this); v => v.IsGenerated && v.Access == AccessSpecifier.Public))
GenerateVariable(null, variable);
return true; WriteCloseBraceIndent();
PopBlock(NewLineKind.BeforeNextBlock);
} }
private void GenerateClassTemplateSpecializationInternal(Class classTemplate) private void GenerateClassTemplateSpecializationInternal(Class classTemplate)

Loading…
Cancel
Save