aboutsummaryrefslogtreecommitdiff
path: root/build2/test/script/builtin
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2016-11-10 00:26:54 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2016-11-15 16:46:10 +0300
commita7efabf301f23364ac2335c80c5e1e712bc43204 (patch)
treedded192f09627702bc8e0566c5c6032825d6920c /build2/test/script/builtin
parent05b1d9e89a94ee5594168073b8dc363fada987f1 (diff)
Add cat, false and true builtins
Diffstat (limited to 'build2/test/script/builtin')
-rw-r--r--build2/test/script/builtin21
1 files changed, 13 insertions, 8 deletions
diff --git a/build2/test/script/builtin b/build2/test/script/builtin
index e3c16b3..bd5fe50 100644
--- a/build2/test/script/builtin
+++ b/build2/test/script/builtin
@@ -5,11 +5,11 @@
#ifndef BUILD2_TEST_SCRIPT_BUILTIN
#define BUILD2_TEST_SCRIPT_BUILTIN
+#include <map>
+
#include <build2/types>
#include <build2/utility>
-#include <map>
-
namespace build2
{
namespace test
@@ -18,21 +18,26 @@ namespace build2
{
class scope;
+ // Start builtin command. Throw system_error on failure.
+ //
// Note that unlike argc/argv, our args don't include the program name.
//
- using builtin = int (*) (scope&,
- const strings& args,
- auto_fd in, auto_fd out, auto_fd err);
+ // Also note that the future object being returned doesn't block in dtor
+ // until the builtin command terminates.
+ //
+ using builtin = future<uint8_t> (scope&,
+ const strings& args,
+ auto_fd in, auto_fd out, auto_fd err);
- class builtin_map: public std::map<string, builtin>
+ class builtin_map: public std::map<string, builtin*>
{
public:
- using base = std::map<string, builtin>;
+ using base = std::map<string, builtin*>;
using base::base;
// Return NULL if not a builtin.
//
- builtin
+ builtin*
find (const string& n) const
{
auto i (base::find (n));