public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Petteri Räty" <betelgeuse@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/libbash:master commit in: /
Date: Thu, 14 Apr 2011 04:50:16 +0000 (UTC)	[thread overview]
Message-ID: <9b72788bf2f6cd763a4f99f39827b1a8c19e8cb2.betelgeuse@gentoo> (raw)

commit:     9b72788bf2f6cd763a4f99f39827b1a8c19e8cb2
Author:     Petteri Räty <petsku <AT> petteriraty <DOT> eu>
AuthorDate: Thu Apr 14 04:48:54 2011 +0000
Commit:     Petteri Räty <betelgeuse <AT> gentoo <DOT> org>
CommitDate: Thu Apr 14 04:48:54 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/libbash.git;a=commit;h=9b72788b

Merge remote-tracking branch 'mu/master'

Conflicts:
	src/core/interpreter.h


 bashast/bashast.g                           |   19 +++-
 bashast/features_script/features.sh.ast     |    2 +-
 bashast/gunit/arith_main.gunit              |   14 ++-
 bashast/gunit/array.gunit                   |    6 +-
 bashast/gunit/assoc_array.gunit             |    2 +-
 bashast/gunit/expansions.gunit              |    2 +-
 bashast/libbashWalker.g                     |  138 ++++++++++++++++++---------
 scripts/arithmetic_assignment.ebuild        |    2 +
 scripts/arithmetic_assignment.ebuild.result |    3 +
 scripts/binary_arithmetic.ebuild            |   30 ++++++-
 scripts/binary_arithmetic.ebuild.result     |   26 +++++-
 scripts/var_def.ebuild                      |   22 ++++-
 scripts/var_def.ebuild.result               |   14 +++-
 scripts/var_expansion.ebuild                |   15 +++-
 scripts/var_expansion.ebuild.result         |   14 +++
 src/core/interpreter.cpp                    |   36 +++++++
 src/core/interpreter.h                      |   89 ++++++++++++------
 src/core/symbols.hpp                        |   26 +++---
 src/core/tests/interpreter_test.cpp         |   17 +++-
 test/variable_printer.cpp                   |    4 +-
 test/walker_test.cpp                        |   13 +++
 21 files changed, 382 insertions(+), 112 deletions(-)

diff --cc src/core/interpreter.cpp
index 0086216,9f10949..c723173
--- a/src/core/interpreter.cpp
+++ b/src/core/interpreter.cpp
@@@ -21,3 -21,38 +21,39 @@@
  /// \author Mu Qiao
  /// \brief implementations for bash interpreter (visitor pattern).
  ///
+ 
+ #include "core/interpreter.h"
+ 
+ #include <boost/algorithm/string/join.hpp>
+ 
+ void interpreter::get_all_elements_joined(const std::string& name,
+                                           const std::string& delim,
+                                           std::string& result)
+ {
+   std::vector<std::string> source;
 -  std::shared_ptr<variable> value = members.resolve(name);
 -  if(value)
++
++  auto i = members.find(name);
++  if(i != members.end())
+   {
 -    value->get_all_values(source);
++    i->second->get_all_values(source);
+     result = boost::algorithm::join(source, delim);
+   }
+   else
+   {
+     result = "";
+   }
+ }
+ 
+ void interpreter::get_all_elements(const std::string& name,
+                                    std::string& result)
+ {
+   get_all_elements_joined(name, " ", result);
+ }
+ 
+ void interpreter::get_all_elements_IFS_joined(const std::string& name,
+                                               std::string& result)
+ {
+   get_all_elements_joined(name,
+                           resolve<std::string>("IFS").substr(0, 1),
+                           result);
+ }
diff --cc src/core/interpreter.h
index 3baf029,5ac5027..e61748a
--- a/src/core/interpreter.h
+++ b/src/core/interpreter.h
@@@ -394,13 -401,13 +403,13 @@@ public
    ///        if the variable is undefined
    /// \param variable name
    /// \return whether the value of the variable is null
-   bool is_unset_or_null(const std::string& name)
+   bool is_unset_or_null(const std::string& name, const unsigned index)
    {
 -    std::shared_ptr<variable> value = members.resolve(name);
 -    if(value)
 -      return value->is_null(index);
 -    else
 +    auto i = members.find(name);
 +    if(i == members.end())
        return true;
 +    else
-       return i->second->is_null();
++      return i->second->is_null(index);
    }
  
    /// \brief check whether the value of the variable is unset
@@@ -420,13 -427,14 +429,14 @@@
    template <typename T>
    const T& set_value(const std::string& name,
                       const T& new_value,
-                      const unsigned index=0)
+                      const unsigned index=0,
+                      bool is_null=false)
    {
 -    std::shared_ptr<variable> value = members.resolve(name);
 -    if(!value)
 +    auto i = members.find(name);
 +    if(i == members.end())
-       define(name, new_value, false);
+       define(name, new_value, false, is_null, index);
      else
-       i->second->set_value(new_value, index);
 -      value->set_value(new_value, index, is_null);
++      i->second->set_value(new_value, index, is_null);
      return new_value;
    }
  
@@@ -439,11 -447,12 +449,12 @@@
    void define(const std::string& name,
                const T& value,
                bool readonly=false,
-               bool is_null=false)
+               bool is_null=false,
+               const unsigned index=0)
    {
      std::shared_ptr<variable> target(
-         new variable(name, value, readonly, is_null));
+         new variable(name, value, readonly, is_null, index));
 -    members.define(target);
 +    members[name] = target;
    }
  
    /// \brief perform ${parameter:−word} expansion
@@@ -509,11 -525,25 +527,26 @@@
    /// \return the length
    unsigned get_length(const std::string& name, const unsigned index=0)
    {
 -    std::shared_ptr<variable> value = members.resolve(name);
 -    if(!value)
 +    auto i = members.find(name);
 +    if(i == members.end())
        return 0;
 -    return value->get_length(index);
 +    return i->second->get_length(index);
    }
  
+   /// \brief get the length of an array
+   /// \param the name of the array
+   /// \return the length of the array
+   unsigned get_array_length(const std::string& name)
+   {
 -    std::shared_ptr<variable> value = members.resolve(name);
 -    if(!value)
++    auto i = members.find(name);
++    if(i == members.end())
+       return 0;
 -    return value->get_array_length();
++    else
++      return i->second->get_array_length();
+   }
+ 
+   void get_all_elements(const std::string&, std::string&);
+ 
+   void get_all_elements_IFS_joined(const std::string&, std::string&);
  };
  #endif



             reply	other threads:[~2011-04-14  4:51 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-04-14  4:50 Petteri Räty [this message]
  -- strict thread matches above, loose matches on Subject: below --
2012-08-19 14:54 [gentoo-commits] proj/libbash:master commit in: / Petteri Räty
2012-06-03  9:08 Petteri Räty
2011-08-04 14:24 Petteri Räty
2011-08-04 14:24 Petteri Räty
2011-08-04 14:24 Petteri Räty
2011-08-04 14:24 Petteri Räty
2011-08-04 14:24 Petteri Räty
2011-08-04 14:24 Petteri Räty
2011-08-04 13:53 Petteri Räty
2011-07-20 14:01 Petteri Räty
2011-07-08 14:03 Petteri Räty
2011-07-08 14:03 Petteri Räty
2011-07-03 20:21 Petteri Räty
2011-06-26 13:38 Petteri Räty
2011-06-26 13:38 Petteri Räty
2011-06-25 10:30 Petteri Räty
2011-06-25 10:05 Petteri Räty
2011-06-16 16:53 Petteri Räty
2011-06-11  8:52 Petteri Räty
2011-06-11  8:52 Petteri Räty
2011-06-11  8:24 Petteri Räty
2011-06-03 14:48 Petteri Räty
2011-06-03 12:43 Petteri Räty
2011-05-27 23:03 Petteri Räty
2011-05-24 14:50 Petteri Räty
2011-05-14 14:58 Petteri Räty
2011-05-14 14:58 Petteri Räty
2011-05-12 14:06 Petteri Räty
2011-05-11  7:19 Petteri Räty
2011-05-08 13:07 Petteri Räty
2011-05-07 12:25 Petteri Räty
2011-04-27 15:11 Petteri Räty
2011-04-20 11:26 Petteri Räty
2011-04-17 10:58 Petteri Räty
2011-04-14  4:50 Petteri Räty
2011-04-12 18:29 Petteri Räty
2011-04-11  6:50 Petteri Räty
2011-04-09 13:08 Petteri Räty
2011-04-08 11:12 Petteri Räty
2011-04-07 16:44 Petteri Räty
2011-04-03 13:46 Petteri Räty
2011-04-03 13:46 Petteri Räty
2011-04-02 15:50 Petteri Räty
2011-03-30 12:48 Petteri Räty
2011-03-27  8:56 Petteri Räty
2011-03-26 19:08 Petteri Räty
2011-03-26 19:08 Petteri Räty
2011-03-26 12:24 Petteri Räty
2011-03-26 12:24 Petteri Räty
2011-03-26 12:24 Petteri Räty
2011-03-26 12:24 Petteri Räty
2011-03-26 12:24 Petteri Räty
2011-03-26 12:24 Petteri Räty
2011-03-26 12:24 Petteri Räty
2011-03-26 12:24 Petteri Räty
2011-03-25 12:11 Petteri Räty
2011-03-17  9:44 Petteri Räty
2011-03-12 11:53 Petteri Räty
2011-03-06 12:05 Petteri Räty

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=9b72788bf2f6cd763a4f99f39827b1a8c19e8cb2.betelgeuse@gentoo \
    --to=betelgeuse@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox