diff options
Diffstat (limited to 'build2/function.cxx')
-rw-r--r-- | build2/function.cxx | 26 |
1 files changed, 14 insertions, 12 deletions
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<value> args, const function_overload& f) - try { // Call the cast thunk. // @@ -310,16 +322,6 @@ namespace build2 auto d (reinterpret_cast<const cast_data*> (&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<const value_type*>* function_args<>::types; |