Browse Source

Removed the setting of zero size for types that have fields in a base or virtuals.

Signed-off-by: Dimitar Dobrev <dpldobrev@yahoo.com>
pull/520/head
Dimitar Dobrev 11 years ago
parent
commit
12fcb2b13e
  1. 14
      src/Generator/Passes/CheckAbiParameters.cs

14
src/Generator/Passes/CheckAbiParameters.cs

@ -1,4 +1,5 @@
using CppSharp.AST; using System.Linq;
using CppSharp.AST;
namespace CppSharp.Passes namespace CppSharp.Passes
{ {
@ -28,7 +29,9 @@ namespace CppSharp.Passes
if (!base.VisitClassDecl(@class)) if (!base.VisitClassDecl(@class))
return false; return false;
if (@class.Fields.Count == 0) if (HasFieldsOrVirtuals(@class))
return false;
@class.Layout.Size = @class.Layout.DataSize = 0; @class.Layout.Size = @class.Layout.DataSize = 0;
return true; return true;
@ -79,5 +82,12 @@ namespace CppSharp.Passes
return true; return true;
} }
private static bool HasFieldsOrVirtuals(Class @class)
{
if (@class.Fields.Count > 0 || @class.IsDynamic)
return true;
return @class.Bases.Any(@base => @base.IsClass && HasFieldsOrVirtuals(@base.Class));
}
} }
} }

Loading…
Cancel
Save