diff options
author | ridiculousfish <corydoras@ridiculousfish.com> | 2014-03-27 11:17:05 -0700 |
---|---|---|
committer | ridiculousfish <corydoras@ridiculousfish.com> | 2014-03-27 11:17:05 -0700 |
commit | 62b3ed17ba42150e1107b87b0e719cf793ae8d0f (patch) | |
tree | 2eb16f6f505416d311c2c45b9125af53f8368b2f /parse_productions.cpp | |
parent | 31bf50b2d495222925371556169f61c1c5a81ed7 (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.cpp | 21 |
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) |