* [gentoo-commits] proj/libbash:master commit in: src/, src/builtins/tests/, src/core/
@ 2011-04-28 6:19 Petteri Räty
0 siblings, 0 replies; only message in thread
From: Petteri Räty @ 2011-04-28 6:19 UTC (permalink / raw
To: gentoo-commits
commit: 059d8f2c5263bd3e82406d2890f063782e7ca76b
Author: Mu Qiao <qiaomuf <AT> gentoo <DOT> org>
AuthorDate: Thu Apr 21 11:02:46 2011 +0000
Commit: Petteri Räty <betelgeuse <AT> gentoo <DOT> org>
CommitDate: Thu Apr 28 02:52:42 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/libbash.git;a=commit;h=059d8f2c
Builtin: add interpreter object as a protected member
Many builtins use the internal interpreter class so we add it to
the cppbash_builtin class.
---
src/builtins/tests/boolean_tests.cpp | 11 ++++++++---
src/builtins/tests/echo_tests.cpp | 8 ++++++--
src/core/interpreter.h | 5 +++--
src/cppbash_builtin.cpp | 2 +-
src/cppbash_builtin.h | 19 +++++++++++++------
5 files changed, 31 insertions(+), 14 deletions(-)
diff --git a/src/builtins/tests/boolean_tests.cpp b/src/builtins/tests/boolean_tests.cpp
index 5ba3d34..4c9616b 100644
--- a/src/builtins/tests/boolean_tests.cpp
+++ b/src/builtins/tests/boolean_tests.cpp
@@ -21,19 +21,24 @@
/// \brief series of unit tests for echo built in
///
#include <iostream>
-#include "../../cppbash_builtin.h"
+
#include <gtest/gtest.h>
+#include "core/interpreter.h"
+#include "cppbash_builtin.h"
+
using namespace std;
TEST(boolean_builtin_test, true)
{
- int result = cppbash_builtin::exec("true", {}, std::cout, std::cerr, std::cin);
+ interpreter walker;
+ int result = cppbash_builtin::exec("true", {}, std::cout, std::cerr, std::cin, walker);
ASSERT_EQ(0, result);
}
TEST(boolean_builtin_test, false)
{
- int result = cppbash_builtin::exec("false", {}, std::cout, std::cerr, std::cin);
+ interpreter walker;
+ int result = cppbash_builtin::exec("false", {}, std::cout, std::cerr, std::cin, walker);
ASSERT_EQ(1, result);
}
diff --git a/src/builtins/tests/echo_tests.cpp b/src/builtins/tests/echo_tests.cpp
index 2a606d4..bee9be5 100644
--- a/src/builtins/tests/echo_tests.cpp
+++ b/src/builtins/tests/echo_tests.cpp
@@ -22,17 +22,21 @@
/// \author Nathan Eloe
///
#include <iostream>
-#include "../../cppbash_builtin.h"
#include <sstream>
#include <vector>
+
#include <gtest/gtest.h>
+#include "core/interpreter.h"
+#include "cppbash_builtin.h"
+
using namespace std;
static void test_echo(const string& expected, std::initializer_list<string> args)
{
stringstream test_output;
- cppbash_builtin::exec("echo",args,test_output,cerr,cin);
+ interpreter walker;
+ cppbash_builtin::exec("echo",args,test_output,cerr,cin,walker);
ASSERT_EQ(expected, test_output.str());
}
diff --git a/src/core/interpreter.h b/src/core/interpreter.h
index f2dfbeb..e471b94 100644
--- a/src/core/interpreter.h
+++ b/src/core/interpreter.h
@@ -46,7 +46,8 @@ typedef struct libbashWalker_Ctx_struct * plibbashWalker;
/// \class interpreter
/// \brief implementation for bash interpreter
///
-class interpreter{
+class interpreter
+{
/// \var private::members
/// \brief global symbol table for variables
@@ -547,7 +548,7 @@ public:
int execute_builtin(const std::string& name,
const std::vector<std::string>& args)
{
- return cppbash_builtin::exec(name, args, *out, *err, *in);
+ return cppbash_builtin::exec(name, args, *out, *err, *in, *this);
}
/// \brief perform ${parameter:−word} expansion
diff --git a/src/cppbash_builtin.cpp b/src/cppbash_builtin.cpp
index 8778173..38a6111 100644
--- a/src/cppbash_builtin.cpp
+++ b/src/cppbash_builtin.cpp
@@ -26,7 +26,7 @@
#include "builtins/echo_builtin.h"
#include "builtins/boolean_builtins.h"
-cppbash_builtin::cppbash_builtin(std::ostream &outstream, std::ostream &errstream, std::istream &instream): _out_stream(&outstream), _err_stream(&errstream), _inp_stream(&instream)
+cppbash_builtin::cppbash_builtin(BUILTIN_ARGS): _out_stream(&out), _err_stream(&err), _inp_stream(&in), _walker(walker)
{
}
diff --git a/src/cppbash_builtin.h b/src/cppbash_builtin.h
index 3bd3c46..e7b68ea 100644
--- a/src/cppbash_builtin.h
+++ b/src/cppbash_builtin.h
@@ -34,8 +34,9 @@
#include <boost/function.hpp>
#include <boost/scoped_ptr.hpp>
-#define STREAM_ARGS std::ostream &out, std::ostream &err, std::istream &in
+#define BUILTIN_ARGS std::ostream &out, std::ostream &err, std::istream &in, interpreter &walker
+class interpreter;
///
/// \class cppbash_builtin
/// \brief a virtual class to inherit builtin functions from
@@ -49,7 +50,7 @@ class cppbash_builtin
/// \param errstream where to send standard error. Default: cerr
/// \param instream where to get standard input from. Default: stdin
///
- explicit cppbash_builtin(STREAM_ARGS);
+ explicit cppbash_builtin(BUILTIN_ARGS);
/// prevent copying
cppbash_builtin(const cppbash_builtin& ) = delete;
const cppbash_builtin& operator=( const cppbash_builtin& ) = delete;
@@ -77,9 +78,11 @@ class cppbash_builtin
///
std::istream& input_buffer() {return *_inp_stream;}
- static int exec(const std::string& builtin, const std::vector<std::string>& args, STREAM_ARGS)
+ static int exec(const std::string& builtin,
+ const std::vector<std::string>& args,
+ BUILTIN_ARGS)
{
- boost::scoped_ptr<cppbash_builtin> p(builtins()[builtin](out,err,in));
+ boost::scoped_ptr<cppbash_builtin> p(builtins()[builtin](out,err,in,walker));
return p->exec(args);
}
@@ -110,15 +113,19 @@ class cppbash_builtin
/// \brief current standard input stream
///
std::istream *_inp_stream;
+
+ interpreter& _walker;
+
///
/// \var builtins
/// \brief holds factories for creating instances of child classes
///
- typedef std::map<std::string, boost::function< cppbash_builtin*(STREAM_ARGS) >> builtins_type;
+ typedef std::map<std::string, boost::function< cppbash_builtin*(BUILTIN_ARGS) >> builtins_type;
static builtins_type& builtins();
+
};
#define BUILTIN_CONSTRUCTOR(name) \
- name ## _builtin(STREAM_ARGS) : cppbash_builtin(out, err, in) {}
+ name ## _builtin(BUILTIN_ARGS) : cppbash_builtin(out, err, in, walker) {}
#endif
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2011-04-28 6:20 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-04-28 6:19 [gentoo-commits] proj/libbash:master commit in: src/, src/builtins/tests/, src/core/ Petteri Räty
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox