Browse Source

Fixed the TypeCompletionChecker pass to not walk recursively through all the types as that can lead to some wrong ignore behavior.

pull/1/head
triton 12 years ago
parent
commit
d73b631115
  1. 52
      src/Generator/Types/Types.cs

52
src/Generator/Types/Types.cs

@ -9,45 +9,18 @@ namespace CppSharp
/// </summary> /// </summary>
public class TypeCompletionChecker : AstVisitor public class TypeCompletionChecker : AstVisitor
{ {
public override bool VisitDeclaration(Declaration decl) public TypeCompletionChecker()
{ {
if (decl.CompleteDeclaration != null) Options.VisitClassBases = false;
return true; Options.VisitTemplateArguments = false;
return !decl.IsIncomplete;
}
public override bool VisitBuiltinType(BuiltinType builtin, TypeQualifiers quals)
{
return true;
} }
public override bool VisitFunctionType(FunctionType function, TypeQualifiers quals) public override bool VisitDeclaration(Declaration decl)
{
if (!function.ReturnType.Visit(this))
return false;
foreach (var arg in function.Parameters)
{ {
if (!arg.Type.Visit(this)) if (decl.CompleteDeclaration != null)
return false;
}
return true; return true;
}
public override bool VisitFunctionDecl(Function function) return !decl.IsIncomplete;
{
if (!function.ReturnType.Type.Visit(this, function.ReturnType.Qualifiers))
return false;
foreach (var param in function.Parameters)
{
if (!param.Visit(this))
return false;
}
return true;
} }
} }
@ -62,7 +35,8 @@ namespace CppSharp
public TypeIgnoreChecker(ITypeMapDatabase database) public TypeIgnoreChecker(ITypeMapDatabase database)
{ {
TypeMapDatabase = database; TypeMapDatabase = database;
IsIgnored = false; Options.VisitClassBases = false;
Options.VisitTemplateArguments = false;
} }
void Ignore() void Ignore()
@ -88,6 +62,12 @@ namespace CppSharp
return true; return true;
} }
public override bool VisitClassDecl(Class @class)
{
VisitDeclaration(@class);
return false;
}
public override bool VisitTypedefType(TypedefType typedef, public override bool VisitTypedefType(TypedefType typedef,
TypeQualifiers quals) TypeQualifiers quals)
{ {
@ -121,9 +101,9 @@ namespace CppSharp
var decl = template.Template.TemplatedDecl; var decl = template.Template.TemplatedDecl;
TypeMap typeMap; TypeMap typeMap;
if (TypeMapDatabase.FindTypeMap(decl, out typeMap) if (TypeMapDatabase.FindTypeMap(decl, out typeMap))
&& typeMap.IsIgnored)
{ {
if (typeMap.IsIgnored)
Ignore(); Ignore();
return false; return false;
} }

Loading…
Cancel
Save