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
next 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