diff --git a/src/AST/Function.cs b/src/AST/Function.cs index f509a9ab..fc01d9b8 100644 --- a/src/AST/Function.cs +++ b/src/AST/Function.cs @@ -93,7 +93,8 @@ namespace CppSharp.AST None, ComplementOperator, AbstractImplCall, - DefaultValueOverload + DefaultValueOverload, + InterfaceInstance } public class Function : Declaration, ITypedDecl, IMangledDecl diff --git a/src/AST/Property.cs b/src/AST/Property.cs index a5524f3a..0b530cd2 100644 --- a/src/AST/Property.cs +++ b/src/AST/Property.cs @@ -115,6 +115,11 @@ namespace CppSharp.AST } } + public bool IsSynthetized + { + get { return GetMethod != null && GetMethod.IsSynthetized; } + } + public override T Visit(IDeclVisitor visitor) { return visitor.VisitProperty(this); diff --git a/src/Generator/Passes/CleanInvalidDeclNamesPass.cs b/src/Generator/Passes/CleanInvalidDeclNamesPass.cs index 113b871f..70ecfc9b 100644 --- a/src/Generator/Passes/CleanInvalidDeclNamesPass.cs +++ b/src/Generator/Passes/CleanInvalidDeclNamesPass.cs @@ -35,7 +35,7 @@ namespace CppSharp.Passes // types with empty names are assumed to be private if (decl is Class && string.IsNullOrWhiteSpace(decl.Name)) { - decl.Name = "_"; + decl.Name = decl.Namespace.Name == "_" ? "__" : "_"; decl.ExplicitlyIgnore(); return false; } diff --git a/src/Generator/Passes/GetterSetterToPropertyAdvancedPass.cs b/src/Generator/Passes/GetterSetterToPropertyAdvancedPass.cs index 899b86dd..bcfc44e9 100644 --- a/src/Generator/Passes/GetterSetterToPropertyAdvancedPass.cs +++ b/src/Generator/Passes/GetterSetterToPropertyAdvancedPass.cs @@ -271,17 +271,14 @@ namespace CppSharp.Passes public GetterSetterToPropertyAdvancedPass() { Options.VisitClassProperties = false; + Options.VisitFunctionParameters = false; } public override bool VisitClassDecl(Class @class) { - if (!AlreadyVisited(@class)) + if (base.VisitClassDecl(@class)) { - bool result = base.VisitClassDecl(@class); - new PropertyGenerator(@class, Log).GenerateProperties(); - - return result; } return false; } diff --git a/src/Generator/Passes/MultipleInheritancePass.cs b/src/Generator/Passes/MultipleInheritancePass.cs index edfd4469..23bd1ee7 100644 --- a/src/Generator/Passes/MultipleInheritancePass.cs +++ b/src/Generator/Passes/MultipleInheritancePass.cs @@ -84,7 +84,11 @@ namespace CppSharp.Passes instance.Namespace = @interface; instance.Name = Helpers.InstanceIdentifier; instance.QualifiedType = new QualifiedType(new BuiltinType(PrimitiveType.IntPtr)); - instance.GetMethod = new Method { Namespace = @interface }; + instance.GetMethod = new Method + { + SynthKind = FunctionSynthKind.InterfaceInstance, + Namespace = @interface + }; @interface.Properties.Add(instance); } diff --git a/tests/Basic/Basic.h b/tests/Basic/Basic.h index a3c0bf42..7627f08e 100644 --- a/tests/Basic/Basic.h +++ b/tests/Basic/Basic.h @@ -561,3 +561,13 @@ public: }; DLL_API void va_listFunction(va_list v); + +struct DLL_API TestEmptyName +{ + struct + { + struct + { + }; + }; +};