Browse Source

Generator: correctly deal with arbitrarily long inheritance chains

pull/1/head
Alexander Corrado 14 years ago
parent
commit
da3a8dbea4
  1. 11
      src/generator/Generator.cs

11
src/generator/Generator.cs

@ -227,7 +227,7 @@ public class Generator { @@ -227,7 +227,7 @@ public class Generator {
continue;
}
if ((!dtor && n.HasValue ("overrides") && klass.BaseClasses [0].Node.CheckValueList ("members", n.Attributes ["overrides"])) || // excl. virtual methods from primary base (except dtor)
if ((!dtor && n.HasValue ("overrides") && CheckPrimaryBases (klass, b => b.Node.CheckValueList ("members", n.Attributes ["overrides"]))) || // excl. virtual methods from primary base (except dtor)
(!n.IsTrue ("extern") && !n.IsTrue ("inline")))
continue;
@ -380,6 +380,15 @@ public class Generator { @@ -380,6 +380,15 @@ public class Generator {
return false;
}
// Checks klass's primary base, primary base's primary base, and so on up the hierarchy
bool CheckPrimaryBases (Class klass, Func<Class, bool> predicate)
{
if (klass.BaseClasses.Count == 0)
return false;
var primaryBase = klass.BaseClasses [0];
return predicate (primaryBase) || CheckPrimaryBases (primaryBase, predicate);
}
// Return a CppType for the type node N, return CppTypes.Unknown for unknown types
CppType GetType (Node n) {
return GetType (n, new CppType ());

Loading…
Cancel
Save