From 030035bd25b3ededb2f78be1f576f2fe0e7d9c90 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Tue, 23 Oct 2018 09:52:46 +0200 Subject: Move invalid_argument handler from default_thunk() to call() This way we let a custom thunk catch derived exception (like invalid_path). --- build2/function.cxx | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) (limited to 'build2/function.cxx') diff --git a/build2/function.cxx b/build2/function.cxx index 44bda57..47d4733 100644 --- a/build2/function.cxx +++ b/build2/function.cxx @@ -238,7 +238,20 @@ namespace build2 } } - return make_pair (f->impl (base, move (args), *f), true); + try + { + return make_pair (f->impl (base, move (args), *f), true); + } + catch (const invalid_argument& e) + { + diag_record dr (fail); + dr << "invalid argument"; + + if (*e.what () != '\0') + dr << ": " << e; + + dr << endf; + } } case 0: { @@ -298,7 +311,6 @@ namespace build2 default_thunk (const scope* base, vector_view args, const function_overload& f) - try { // Call the cast thunk. // @@ -310,16 +322,6 @@ namespace build2 auto d (reinterpret_cast (&f.data)); return d->thunk (base, move (args), d); } - catch (const invalid_argument& e) - { - diag_record dr (fail); - dr << "invalid argument"; - - if (*e.what () != '\0') - dr << ": " << e; - - dr << endf; - } #if !defined(_MSC_VER) || _MSC_VER > 1910 constexpr const optional* function_args<>::types; -- cgit v1.1