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

Loading…
Cancel
Save