From: "Petteri Räty" <betelgeuse@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/libbash:master commit in: scripts/, src/core/, bashast/
Date: Mon, 4 Apr 2011 16:09:43 +0000 (UTC) [thread overview]
Message-ID: <e399dff749def2cd11ab44cf53896c849f1429a8.betelgeuse@gentoo> (raw)
commit: e399dff749def2cd11ab44cf53896c849f1429a8
Author: Mu Qiao <qiaomuf <AT> gentoo <DOT> org>
AuthorDate: Mon Apr 4 08:57:46 2011 +0000
Commit: Petteri Räty <betelgeuse <AT> gentoo <DOT> org>
CommitDate: Mon Apr 4 15:57:05 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/libbash.git;a=commit;h=e399dff7
Implement parameter expansion: ${parameter:-word}
---
bashast/libbashWalker.g | 26 ++++++++++++++++++++++++--
scripts/var_expansion.ebuild | 2 ++
scripts/var_expansion.ebuild.result | 2 ++
src/core/interpreter.h | 6 ++++++
4 files changed, 34 insertions(+), 2 deletions(-)
diff --git a/bashast/libbashWalker.g b/bashast/libbashWalker.g
index ddfef7a..d0f89bf 100644
--- a/bashast/libbashWalker.g
+++ b/bashast/libbashWalker.g
@@ -62,7 +62,8 @@ var_def:
string_expr returns[std::string libbash_value]:
^(STRING libbash_string=string_expr) { $libbash_value = libbash_string; }
- |^(DOUBLE_QUOTED_STRING (libbash_string=dqstr { $libbash_value += libbash_string; })*);
+ |^(DOUBLE_QUOTED_STRING (libbash_string=dqstr { $libbash_value += libbash_string; })*)
+ |^(STRING libbash_string=dqstr) { $libbash_value = libbash_string; };
//A rule for filenames/strings
res_word_str returns[std::string libbash_value]
@@ -109,9 +110,30 @@ dqstr returns[std::string libbash_value]:
| libbash_string=var_ref { $libbash_value = libbash_string; }
| ^(ARITHMETIC_EXPRESSION value=arithmetics) { $libbash_value = boost::lexical_cast<std::string>(value); };
+//Allowable variable names in the variable expansion
+var_name returns[std::string libbash_value]
+@after {
+ $libbash_value = walker->get_string($var_name.start);
+}:
+ num|name|TIMES|AT;
+
+var_exp returns[std::string libbash_value]:
+ ^(USE_DEFAULT var_name libbash_word=word) {
+ libbash_value = walker->do_default_expansion($var_name.libbash_value, libbash_word);
+ };
+
+word returns[std::string libbash_value]:
+ // Avoid conflict with arithmetics (both have VAR_DEF)
+ (var_ref) => libbash_string=var_ref { $libbash_value = libbash_string; }
+ // Avoid conflict with arithmetics (both have num)
+ |(num) => libbash_string=num { $libbash_value = libbash_string; }
+ |libbash_string=string_expr { $libbash_value = libbash_string; }
+ |value=arithmetics { $libbash_value = boost::lexical_cast<std::string>(value); };
+
//variable reference
var_ref returns[std::string libbash_value]:
- ^(VAR_REF libbash_name=name) { $libbash_value=walker->resolve<std::string>(libbash_name); };
+ ^(VAR_REF libbash_name=name) { $libbash_value = walker->resolve<std::string>(libbash_name); }
+ |^(VAR_REF libbash_string=var_exp) { $libbash_value = libbash_string; };
// shell arithmetic
arithmetics returns[int value]
diff --git a/scripts/var_expansion.ebuild b/scripts/var_expansion.ebuild
index a5cadb6..62e95c3 100644
--- a/scripts/var_expansion.ebuild
+++ b/scripts/var_expansion.ebuild
@@ -1,2 +1,4 @@
EAPI="3"
EAPI4="$(($EAPI+1))"
+FOO="${EAPI:-hello}"
+FOO2="${EAPI3:-hello}"
diff --git a/scripts/var_expansion.ebuild.result b/scripts/var_expansion.ebuild.result
index cec88e4..f92abe4 100644
--- a/scripts/var_expansion.ebuild.result
+++ b/scripts/var_expansion.ebuild.result
@@ -1,2 +1,4 @@
EAPI=3
EAPI4=4
+FOO=3
+FOO2=hello
diff --git a/src/core/interpreter.h b/src/core/interpreter.h
index 1ce1076..2fc8703 100644
--- a/src/core/interpreter.h
+++ b/src/core/interpreter.h
@@ -410,5 +410,11 @@ public:
new variable(name, value, readonly, is_null));
members.define(target);
}
+
+ const std::string do_default_expansion(const std::string& name,
+ const std::string& value)
+ {
+ return (is_null(name)? value : resolve<std::string>(name));
+ }
};
#endif
next reply other threads:[~2011-04-04 16:09 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-04 16:09 Petteri Räty [this message]
-- strict thread matches above, loose matches on Subject: below --
2011-04-06 7:43 [gentoo-commits] proj/libbash:master commit in: scripts/, src/core/, bashast/ Petteri Räty
2011-04-06 15:07 Petteri Räty
2011-04-14 4:50 Petteri Räty
2011-04-20 14:04 Petteri Räty
2011-04-20 14:04 Petteri Räty
2011-04-20 14:04 Petteri Räty
2011-05-07 12:25 Petteri Räty
2011-05-11 7:19 Petteri Räty
2011-05-15 11:19 Petteri Räty
2011-06-03 14:48 Petteri Räty
2011-06-09 8:15 Petteri Räty
2011-08-04 13:53 Petteri Räty
2012-08-19 14:54 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=e399dff749def2cd11ab44cf53896c849f1429a8.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