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

Loading…
Cancel
Save