diff options
Diffstat (limited to 'bashast')
-rw-r--r-- | bashast/bashast.g | 13 | ||||
-rw-r--r-- | bashast/gunit/array.gunit | 12 |
2 files changed, 24 insertions, 1 deletions
diff --git a/bashast/bashast.g b/bashast/bashast.g index 73249ef..92f4f92 100644 --- a/bashast/bashast.g +++ b/bashast/bashast.g @@ -461,7 +461,18 @@ array_atom ); builtin_variable_definition_item - : ((~EOL) => expansion_base)+; +scope { + int parens; +} +@init { + $builtin_variable_definition_item::parens = 0; +} + : ( + (LPAREN) => LPAREN { ++$builtin_variable_definition_item::parens; } + |(RPAREN) => RPAREN { --$builtin_variable_definition_item::parens; } + |(~EOL) => expansion_base + | {LA(1) == EOL && $builtin_variable_definition_item::parens > 0}? => EOL + )+; #ifdef OUTPUT_C builtin_variable_definitions[bool local] diff --git a/bashast/gunit/array.gunit b/bashast/gunit/array.gunit index ddfdfeb..1958836 100644 --- a/bashast/gunit/array.gunit +++ b/bashast/gunit/array.gunit @@ -34,6 +34,18 @@ variable_definition_atom: builtin_variable_definitions: "asdf=(a b c d) ade acd=bde" -> (LIST (COMMAND (VARIABLE_DEFINITIONS (= asdf (ARRAY (STRING a) (STRING b) (STRING c) (STRING d))) (EQUALS ade (STRING (VAR_REF ade))) (= acd (STRING bde))))) +builtin_variable_definition_item: +"local cmakeargs=( + abc + def + ghi +)" -> "local cmakeargs = ( \n abc \n def \n ghi \n )" +"export cmakeargs=( + abc + def + ghi +)" -> "export cmakeargs = ( \n abc \n def \n ghi \n )" + variable_reference: "$asdf" -> (VAR_REF asdf) "${asdf[0]:-default}" -> (VAR_REF (USE_DEFAULT_WHEN_UNSET_OR_NULL (asdf (ARITHMETIC 0)) (STRING default))) |