From 45d663809fc710fe4baec526912e3a2dad69ae3b Mon Sep 17 00:00:00 2001 From: Kenny Kerr Date: Fri, 19 Nov 2021 09:07:33 -0800 Subject: [PATCH 1/2] async setter --- cppwinrt/component_writers.h | 3 ++- test/test_component/Class.h | 11 +++++++++++ test/test_component/test_component.idl | 1 + 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/cppwinrt/component_writers.h b/cppwinrt/component_writers.h index 45970c538..6ad977a31 100644 --- a/cppwinrt/component_writers.h +++ b/cppwinrt/component_writers.h @@ -498,7 +498,7 @@ catch (...) { return winrt::to_hresult(); } { auto format = R"( % %::%(%) { - return @::implementation::%::%(%); + %@::implementation::%::%(%); } )"; @@ -508,6 +508,7 @@ catch (...) { return winrt::to_hresult(); } type_name, method_name, bind(signature), + is_put_overload(method) ? "" : "return ", type_namespace, type_name, method_name, diff --git a/test/test_component/Class.h b/test/test_component/Class.h index 22867b57f..4a134843d 100644 --- a/test/test_component/Class.h +++ b/test/test_component/Class.h @@ -113,6 +113,17 @@ namespace winrt::test_component::implementation Windows::Foundation::IAsyncOperation RaiseDeferrableEventAsync(); static bool TestNoMakeDetection(); + + static int32_t StaticPropertyWithAsyncSetter() + { + return 0; + } + + static fire_and_forget StaticPropertyWithAsyncSetter(int32_t) + { + co_return; + } + private: bool m_fail{}; diff --git a/test/test_component/test_component.idl b/test/test_component/test_component.idl index 31043c7e4..6c29f0fd1 100644 --- a/test/test_component/test_component.idl +++ b/test/test_component/test_component.idl @@ -156,6 +156,7 @@ namespace test_component Windows.Foundation.IAsyncOperation RaiseDeferrableEventAsync(); static Boolean TestNoMakeDetection(); + static Int32 StaticPropertyWithAsyncSetter; } namespace Structs From 9b0c0d84e5001423d5bbc9f906e7fea2d63da818 Mon Sep 17 00:00:00 2001 From: Kenny Kerr Date: Fri, 19 Nov 2021 13:53:00 -0800 Subject: [PATCH 2/2] methods --- cppwinrt/component_writers.h | 3 ++- test/test_component/Class.h | 5 +++++ test/test_component/test_component.idl | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/cppwinrt/component_writers.h b/cppwinrt/component_writers.h index 6ad977a31..f562dabef 100644 --- a/cppwinrt/component_writers.h +++ b/cppwinrt/component_writers.h @@ -502,13 +502,14 @@ catch (...) { return winrt::to_hresult(); } } )"; + bool ignore_return = is_put_overload(method) || !signature.return_signature(); w.write(format, signature.return_signature(), type_name, method_name, bind(signature), - is_put_overload(method) ? "" : "return ", + ignore_return ? "" : "return ", type_namespace, type_name, method_name, diff --git a/test/test_component/Class.h b/test/test_component/Class.h index 4a134843d..e3dada600 100644 --- a/test/test_component/Class.h +++ b/test/test_component/Class.h @@ -124,6 +124,11 @@ namespace winrt::test_component::implementation co_return; } + static fire_and_forget StaticMethodWithAsyncReturn() + { + co_return; + } + private: bool m_fail{}; diff --git a/test/test_component/test_component.idl b/test/test_component/test_component.idl index 6c29f0fd1..252e6d2f8 100644 --- a/test/test_component/test_component.idl +++ b/test/test_component/test_component.idl @@ -157,6 +157,7 @@ namespace test_component static Boolean TestNoMakeDetection(); static Int32 StaticPropertyWithAsyncSetter; + static void StaticMethodWithAsyncReturn(); } namespace Structs