From 08c089251a16186db924b41ed7ef71e0031fa48e Mon Sep 17 00:00:00 2001 From: Joao Matos Date: Fri, 3 Feb 2017 17:40:04 +0000 Subject: [PATCH] Port declaration context handling to visitor model in C# generator. --- src/Generator/Generators/CSharp/CSharpSources.cs | 13 +++++++------ src/Generator/Generators/CodeTemplate.cs | 15 ++++++++++++--- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/Generator/Generators/CSharp/CSharpSources.cs b/src/Generator/Generators/CSharp/CSharpSources.cs index 9ea867c0..3c5a9adc 100644 --- a/src/Generator/Generators/CSharp/CSharpSources.cs +++ b/src/Generator/Generators/CSharp/CSharpSources.cs @@ -183,9 +183,7 @@ namespace CppSharp.Generators.CSharp } foreach (var unit in TranslationUnits) - { - GenerateDeclContext(unit); - } + unit.Visit(this); if (!string.IsNullOrEmpty(module.OutputNamespace)) { @@ -206,7 +204,7 @@ namespace CppSharp.Generators.CSharp PopBlock(); } - private void GenerateDeclContext(DeclarationContext context) + public override bool VisitDeclContext(DeclarationContext context) { var isNamespace = context is Namespace; var isTranslationUnit = context is TranslationUnit; @@ -306,13 +304,15 @@ namespace CppSharp.Generators.CSharp } foreach(var childNamespace in context.Namespaces) - GenerateDeclContext(childNamespace); + childNamespace.Visit(this); if (shouldGenerateNamespace) { WriteCloseBraceIndent(); PopBlock(NewLineKind.BeforeNextBlock); } + + return true; } private void GenerateClassTemplateSpecializationInternal(Class classTemplate) @@ -469,7 +469,8 @@ namespace CppSharp.Generators.CSharp { if (!@class.IsAbstractImpl) GenerateClassInternals(@class); - GenerateDeclContext(@class); + + @class.Visit(this); if (@class.IsDependent || !@class.IsGenerated) goto exit; diff --git a/src/Generator/Generators/CodeTemplate.cs b/src/Generator/Generators/CodeTemplate.cs index 81945f86..fc4a63b5 100644 --- a/src/Generator/Generators/CodeTemplate.cs +++ b/src/Generator/Generators/CodeTemplate.cs @@ -39,14 +39,23 @@ namespace CppSharp.Generators #region Visitor methods - public bool VisitDeclaration(Declaration decl) + public virtual bool VisitDeclaration(Declaration decl) { throw new NotImplementedException(); } + public virtual bool VisitDeclContext(DeclarationContext context) + { + foreach (var decl in context.Declarations) + if (!decl.IsGenerated) + decl.Visit(this); + + return true; + } + public virtual bool VisitClassDecl(Class @class) { - throw new NotImplementedException(); + return VisitDeclContext(@class); } public virtual bool VisitFieldDecl(Field field) @@ -101,7 +110,7 @@ namespace CppSharp.Generators public virtual bool VisitNamespace(Namespace @namespace) { - throw new NotImplementedException(); + return VisitDeclContext(@namespace); } public virtual bool VisitEvent(Event @event)