|
| 1 | + |
| 2 | +#define CPP2_IMPORT_STD Yes |
| 3 | + |
| 4 | +//=== Cpp2 type declarations ==================================================== |
| 5 | + |
| 6 | + |
| 7 | +#include "cpp2util.h" |
| 8 | + |
| 9 | +#line 1 "pure2-bugfix-for-function-returning-funcptr.cpp2" |
| 10 | + |
| 11 | + |
| 12 | +//=== Cpp2 type definitions and function declarations =========================== |
| 13 | + |
| 14 | +#line 1 "pure2-bugfix-for-function-returning-funcptr.cpp2" |
| 15 | +extern std::optional<int> g_inttemplate; |
| 16 | +#line 2 "pure2-bugfix-for-function-returning-funcptr.cpp2" |
| 17 | +extern std::optional<void(*)([[maybe_unused]] cpp2::impl::in<int> unnamed_param_1)> g_template; |
| 18 | +extern std::unordered_map<int,void(*)([[maybe_unused]] cpp2::impl::in<int> unnamed_param_1)> g_signal_handlers; |
| 19 | + |
| 20 | +using intfuncptr = void(*)([[maybe_unused]] cpp2::impl::in<int> unnamed_param_1); |
| 21 | + |
| 22 | +[[nodiscard]] auto set_signal(cpp2::impl::in<int> signum, void(*handler)([[maybe_unused]] cpp2::impl::in<int> unnamed_param_1)) -> void(*)([[maybe_unused]] cpp2::impl::in<int> unnamed_param_1); |
| 23 | + |
| 24 | +#line 20 "pure2-bugfix-for-function-returning-funcptr.cpp2" |
| 25 | +extern cpp2::i64 g_signal; |
| 26 | +auto inc_signal(cpp2::impl::in<int> signum) -> void; |
| 27 | + |
| 28 | +#line 24 "pure2-bugfix-for-function-returning-funcptr.cpp2" |
| 29 | +auto dec_signal(cpp2::impl::in<int> signum) -> void; |
| 30 | + |
| 31 | +#line 28 "pure2-bugfix-for-function-returning-funcptr.cpp2" |
| 32 | +[[nodiscard]] auto main() -> int; |
| 33 | + |
| 34 | +//=== Cpp2 function definitions ================================================= |
| 35 | + |
| 36 | +#line 1 "pure2-bugfix-for-function-returning-funcptr.cpp2" |
| 37 | +std::optional<int> g_inttemplate {std::nullopt}; |
| 38 | +#line 2 "pure2-bugfix-for-function-returning-funcptr.cpp2" |
| 39 | +std::optional<void(*)([[maybe_unused]] cpp2::impl::in<int> unnamed_param_1)> g_template {std::nullopt}; |
| 40 | +std::unordered_map<int,void(*)([[maybe_unused]] cpp2::impl::in<int> unnamed_param_1)> g_signal_handlers {}; |
| 41 | + |
| 42 | +#line 7 "pure2-bugfix-for-function-returning-funcptr.cpp2" |
| 43 | +[[nodiscard]] auto set_signal(cpp2::impl::in<int> signum, void(*handler)([[maybe_unused]] cpp2::impl::in<int> unnamed_param_1)) -> void(*)([[maybe_unused]] cpp2::impl::in<int> unnamed_param_1){ |
| 44 | + auto default_handler {[](cpp2::impl::in<int> foo) -> void{ |
| 45 | + // Default handler does nothing |
| 46 | + static_cast<void>(foo); |
| 47 | + }}; |
| 48 | + intfuncptr old_handler {cpp2::move(default_handler)}; |
| 49 | + if (CPP2_UFCS(find)(g_signal_handlers, signum) != CPP2_UFCS(end)(g_signal_handlers)) { |
| 50 | + old_handler = CPP2_ASSERT_IN_BOUNDS(g_signal_handlers, signum); |
| 51 | + } |
| 52 | + CPP2_ASSERT_IN_BOUNDS(g_signal_handlers, signum) = handler; |
| 53 | + return old_handler; |
| 54 | +} |
| 55 | + |
| 56 | +cpp2::i64 g_signal {0}; |
| 57 | +#line 21 "pure2-bugfix-for-function-returning-funcptr.cpp2" |
| 58 | +auto inc_signal(cpp2::impl::in<int> signum) -> void{ |
| 59 | + g_signal += signum; |
| 60 | +} |
| 61 | +#line 24 "pure2-bugfix-for-function-returning-funcptr.cpp2" |
| 62 | +auto dec_signal(cpp2::impl::in<int> signum) -> void{ |
| 63 | + g_signal -= signum; |
| 64 | +} |
| 65 | + |
| 66 | +#line 28 "pure2-bugfix-for-function-returning-funcptr.cpp2" |
| 67 | +[[nodiscard]] auto main() -> int{ |
| 68 | + static_cast<void>(set_signal(1, inc_signal)); |
| 69 | + auto cmpx {set_signal(1, dec_signal)}; |
| 70 | + return cpp2::move(cmpx) != inc_signal; |
| 71 | +} |
| 72 | + |
0 commit comments