|
|
|
@ -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) |
|
|
|
|