aboutsummaryrefslogtreecommitdiff
path: root/build2/function.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'build2/function.cxx')
-rw-r--r--build2/function.cxx26
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;