Browse Source

Use GenerateClassFields to generate internal class fields instead of duplicating the logic. Fixes struct inheritance handling.

pull/1/head
triton 12 years ago
parent
commit
1467c086b6
  1. 39
      src/Generator/Generators/CSharp/CSharpTextTemplate.cs

39
src/Generator/Generators/CSharp/CSharpTextTemplate.cs

@ -309,20 +309,7 @@ namespace CppSharp.Generators.CSharp @@ -309,20 +309,7 @@ namespace CppSharp.Generators.CSharp
ResetNewLine();
foreach (var field in @class.Fields)
{
NewLineIfNeeded();
if (field.Ignore)
continue;
WriteLine("[FieldOffset({0})]", field.OffsetInBytes);
WriteLine("public {0} {1};", field.Type,
SafeIdentifier(field.OriginalName));
NeedNewLine();
}
GenerateClassFields(@class, isInternal: true);
foreach (var ctor in @class.Constructors)
{
@ -446,21 +433,22 @@ namespace CppSharp.Generators.CSharp @@ -446,21 +433,22 @@ namespace CppSharp.Generators.CSharp
Write("IDisposable");
}
public void GenerateClassFields(Class @class)
public void GenerateClassFields(Class @class, bool isInternal = false)
{
// Handle value-type inheritance
if (@class.IsValueType)
{
foreach (var @base in @class.Bases)
{
Class baseClass;
if (!@base.Type.IsTagDecl(out baseClass))
if (!@base.IsClass)
continue;
var baseClass = @base.Class;
if (!baseClass.IsValueType || baseClass.Ignore)
continue;
GenerateClassFields(baseClass);
GenerateClassFields(baseClass, isInternal);
}
}
@ -470,7 +458,20 @@ namespace CppSharp.Generators.CSharp @@ -470,7 +458,20 @@ namespace CppSharp.Generators.CSharp
NewLineIfNeeded();
if (@class.IsRefType)
if (isInternal)
{
WriteLine("[FieldOffset({0})]", field.OffsetInBytes);
var result = field.Type.Visit(TypePrinter, field.QualifiedType.Qualifiers);
Write("public {0} {1}", result.Type, SafeIdentifier(field.OriginalName));
if (!string.IsNullOrWhiteSpace(result.NameSuffix))
Write(result.NameSuffix);
WriteLine(";");
}
else if (@class.IsRefType)
{
GenerateFieldProperty(field);
}

Loading…
Cancel
Save