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

15
src/Generator/Generators/CodeTemplate.cs

@ -39,14 +39,23 @@ namespace CppSharp.Generators @@ -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 @@ -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)

Loading…
Cancel
Save