From 95547dbec896ebfcdbb6ce9909db864d57dafc3f Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Sun, 24 Aug 2014 15:19:08 +0300 Subject: [PATCH] Fixed default arguments with enums directly declared in headers. Signed-off-by: Dimitar Dobrev --- src/Generator/Passes/HandleDefaultParamValuesPass.cs | 6 ++++-- tests/CSharpTemp/CSharpTemp.cpp | 4 ++++ tests/CSharpTemp/CSharpTemp.h | 1 + 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/Generator/Passes/HandleDefaultParamValuesPass.cs b/src/Generator/Passes/HandleDefaultParamValuesPass.cs index 332a9dff..1d741c45 100644 --- a/src/Generator/Passes/HandleDefaultParamValuesPass.cs +++ b/src/Generator/Passes/HandleDefaultParamValuesPass.cs @@ -114,9 +114,11 @@ namespace CppSharp.Passes var enumItem = parameter.DefaultArgument.Declaration as Enumeration.Item; if (enumItem != null) { - parameter.DefaultArgument.String = string.Format("{0}{1}.{2}.{3}", + parameter.DefaultArgument.String = string.Format("{0}{1}{2}.{3}", desugared.IsPrimitiveType() ? "(int) " : string.Empty, - enumItem.Namespace.Namespace.Name, enumItem.Namespace.Name, enumItem.Name); + string.IsNullOrEmpty(enumItem.Namespace.Namespace.Name) + ? string.Empty + : enumItem.Namespace.Namespace.Name + ".", enumItem.Namespace.Name, enumItem.Name); return true; } diff --git a/tests/CSharpTemp/CSharpTemp.cpp b/tests/CSharpTemp/CSharpTemp.cpp index a21a8aa1..fc70487f 100644 --- a/tests/CSharpTemp/CSharpTemp.cpp +++ b/tests/CSharpTemp/CSharpTemp.cpp @@ -264,6 +264,10 @@ void MethodsWithDefaultValues::defaultRefAssignedValue(const Foo &fooRef) { } +void MethodsWithDefaultValues::defaultMappedToEnum(QFlags qFlags) +{ +} + void HasPrivateOverrideBase::privateOverride(int i) { } diff --git a/tests/CSharpTemp/CSharpTemp.h b/tests/CSharpTemp/CSharpTemp.h index 7d161481..c7798a40 100644 --- a/tests/CSharpTemp/CSharpTemp.h +++ b/tests/CSharpTemp/CSharpTemp.h @@ -219,6 +219,7 @@ public: void DefaultRefAssignedValue(const Foo& fooRef = Foo()); void defaultEnumAssignedBitwiseOr(Flags flags = Flags::Flag1 | Flags::Flag2); void defaultEnumAssignedBitwiseOrShort(UntypedFlags flags = Flag1 | Flag2); + void defaultMappedToEnum(QFlags qFlags = Flags::Flag1); }; class DLL_API HasPrivateOverrideBase