aboutsummaryrefslogtreecommitdiffhomepage
path: root/parse_productions.cpp
diff options
context:
space:
mode:
authorGravatar ridiculousfish <corydoras@ridiculousfish.com>2014-03-27 11:17:05 -0700
committerGravatar ridiculousfish <corydoras@ridiculousfish.com>2014-03-27 11:17:05 -0700
commit62b3ed17ba42150e1107b87b0e719cf793ae8d0f (patch)
tree2eb16f6f505416d311c2c45b9125af53f8368b2f /parse_productions.cpp
parent31bf50b2d495222925371556169f61c1c5a81ed7 (diff)
Teach parser_t how to parse an argument list that contains newlines, for
complete -a support. Fixes #1369
Diffstat (limited to 'parse_productions.cpp')
-rw-r--r--parse_productions.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/parse_productions.cpp b/parse_productions.cpp
index d559a0d9..3d65e629 100644
--- a/parse_productions.cpp
+++ b/parse_productions.cpp
@@ -276,6 +276,26 @@ RESOLVE(argument_list)
}
}
+PRODUCTIONS(freestanding_argument_list) =
+{
+ {},
+ {symbol_argument, symbol_freestanding_argument_list},
+ {parse_token_type_end, symbol_freestanding_argument_list},
+};
+RESOLVE(freestanding_argument_list)
+{
+ switch (token1.type)
+ {
+ case parse_token_type_string:
+ return 1;
+ case parse_token_type_end:
+ return 2;
+ default:
+ return 0;
+ }
+}
+
+
PRODUCTIONS(block_statement) =
{
{symbol_block_header, parse_token_type_end, symbol_job_list, symbol_end_command, symbol_arguments_or_redirections_list}
@@ -485,6 +505,7 @@ const production_t *parse_productions::production_for_token(parse_token_type_t n
TEST(case_item_list)
TEST(case_item)
TEST(argument_list)
+ TEST(freestanding_argument_list)
TEST(block_header)
TEST(for_header)
TEST(while_header)