aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'bashast/libbashWalker.g')
-rw-r--r--bashast/libbashWalker.g15
1 files changed, 15 insertions, 0 deletions
diff --git a/bashast/libbashWalker.g b/bashast/libbashWalker.g
index 9b2281d..67a39fc 100644
--- a/bashast/libbashWalker.g
+++ b/bashast/libbashWalker.g
@@ -447,10 +447,25 @@ var_name returns[std::string libbash_value, unsigned index]
$libbash_value = $name.libbash_value;
$index = $name.index;
}
+ |^(VAR_REF libbash_string=var_name_for_bang) {
+ $libbash_value = walker->resolve<std::string>(libbash_string);
+ }
+ |^(VAR_REF POUND) { // for ${!#}
+ int index = walker->get_array_length("*");
+ $libbash_value = (index != 0 ? "*" : "0");
+ }
|MINUS {
$libbash_value = "-";
};
+var_name_for_bang returns[std::string libbash_value]
+ :libbash_string=num {
+ $libbash_value = libbash_string;
+ }
+ |name {
+ $libbash_value = $name.libbash_value;
+ };
+
array_name returns[std::string libbash_value]
:^(ARRAY name (AT|TIMES)) { $libbash_value = $name.libbash_value; }
// We do not care the difference between TIMES and AT for now