diff options
Diffstat (limited to 'bashast/libbashWalker.g')
-rw-r--r-- | bashast/libbashWalker.g | 15 |
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 |