Browse Source

Port declaration context handling to visitor model in C# generator.

pull/742/head
Joao Matos 9 years ago
parent
commit
08c089251a
  1. 13
      src/Generator/Generators/CSharp/CSharpSources.cs
  2. 15
      src/Generator/Generators/CodeTemplate.cs

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

@ -183,9 +183,7 @@ namespace CppSharp.Generators.CSharp
} }
foreach (var unit in TranslationUnits) foreach (var unit in TranslationUnits)
{ unit.Visit(this);
GenerateDeclContext(unit);
}
if (!string.IsNullOrEmpty(module.OutputNamespace)) if (!string.IsNullOrEmpty(module.OutputNamespace))
{ {
@ -206,7 +204,7 @@ namespace CppSharp.Generators.CSharp
PopBlock(); PopBlock();
} }
private void GenerateDeclContext(DeclarationContext context) public override bool VisitDeclContext(DeclarationContext context)
{ {
var isNamespace = context is Namespace; var isNamespace = context is Namespace;
var isTranslationUnit = context is TranslationUnit; var isTranslationUnit = context is TranslationUnit;
@ -306,13 +304,15 @@ namespace CppSharp.Generators.CSharp
} }
foreach(var childNamespace in context.Namespaces) foreach(var childNamespace in context.Namespaces)
GenerateDeclContext(childNamespace); childNamespace.Visit(this);
if (shouldGenerateNamespace) if (shouldGenerateNamespace)
{ {
WriteCloseBraceIndent(); WriteCloseBraceIndent();
PopBlock(NewLineKind.BeforeNextBlock); PopBlock(NewLineKind.BeforeNextBlock);
} }
return true;
} }
private void GenerateClassTemplateSpecializationInternal(Class classTemplate) private void GenerateClassTemplateSpecializationInternal(Class classTemplate)
@ -469,7 +469,8 @@ namespace CppSharp.Generators.CSharp
{ {
if (!@class.IsAbstractImpl) if (!@class.IsAbstractImpl)
GenerateClassInternals(@class); GenerateClassInternals(@class);
GenerateDeclContext(@class);
@class.Visit(this);
if (@class.IsDependent || !@class.IsGenerated) if (@class.IsDependent || !@class.IsGenerated)
goto exit; goto exit;

15
src/Generator/Generators/CodeTemplate.cs

@ -39,14 +39,23 @@ namespace CppSharp.Generators
#region Visitor methods #region Visitor methods
public bool VisitDeclaration(Declaration decl) public virtual bool VisitDeclaration(Declaration decl)
{ {
throw new NotImplementedException(); 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) public virtual bool VisitClassDecl(Class @class)
{ {
throw new NotImplementedException(); return VisitDeclContext(@class);
} }
public virtual bool VisitFieldDecl(Field field) public virtual bool VisitFieldDecl(Field field)
@ -101,7 +110,7 @@ namespace CppSharp.Generators
public virtual bool VisitNamespace(Namespace @namespace) public virtual bool VisitNamespace(Namespace @namespace)
{ {
throw new NotImplementedException(); return VisitDeclContext(@namespace);
} }
public virtual bool VisitEvent(Event @event) public virtual bool VisitEvent(Event @event)

Loading…
Cancel
Save