public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [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