diff options
author | Sanne Wouda <sanne.wouda@gmail.com> | 2015-03-11 23:53:24 +0100 |
---|---|---|
committer | David Adam <zanchey@ucc.gu.uwa.edu.au> | 2015-04-13 13:23:59 +0800 |
commit | fd731fb74f7e0af3151f5afd8bc8b789e0e47dd4 (patch) | |
tree | 9c42d4269b8ba8dc80e92031be9acd899187cb79 /parse_productions.cpp | |
parent | d1a56139e1d99530d38443f3681f3e7372e9923e (diff) |
Modify parser to accept 'begin' without ';'
Examples that work as expected (even completions don't get confused):
$ begin true; end;
$ begin if true; end; end
$ begin if true; echo hi; end
The last example correctly expects another 'end' to match 'begin'.
Fixes #1248.
Diffstat (limited to 'parse_productions.cpp')
-rw-r--r-- | parse_productions.cpp | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/parse_productions.cpp b/parse_productions.cpp index 1dd0ab7f..6ef03f50 100644 --- a/parse_productions.cpp +++ b/parse_productions.cpp @@ -298,7 +298,7 @@ RESOLVE(freestanding_argument_list) PRODUCTIONS(block_statement) = { - {symbol_block_header, parse_token_type_end, symbol_job_list, symbol_end_command, symbol_arguments_or_redirections_list} + {symbol_block_header, symbol_job_list, symbol_end_command, symbol_arguments_or_redirections_list} }; RESOLVE_ONLY(block_statement) @@ -328,25 +328,35 @@ RESOLVE(block_header) PRODUCTIONS(for_header) = { - {KEYWORD(parse_keyword_for), parse_token_type_string, KEYWORD(parse_keyword_in), symbol_argument_list} + {KEYWORD(parse_keyword_for), parse_token_type_string, KEYWORD + (parse_keyword_in), symbol_argument_list, parse_token_type_end} }; RESOLVE_ONLY(for_header) PRODUCTIONS(while_header) = { - {KEYWORD(parse_keyword_while), symbol_job} + {KEYWORD(parse_keyword_while), symbol_job, parse_token_type_end} }; RESOLVE_ONLY(while_header) PRODUCTIONS(begin_header) = { + {KEYWORD(parse_keyword_begin), parse_token_type_end}, {KEYWORD(parse_keyword_begin)} }; -RESOLVE_ONLY(begin_header) +RESOLVE(begin_header) +{ + switch (token2.type) { + case parse_token_type_end: + return 0; + default: + return 1; + } +} PRODUCTIONS(function_header) = { - {KEYWORD(parse_keyword_function), symbol_argument, symbol_argument_list} + {KEYWORD(parse_keyword_function), symbol_argument, symbol_argument_list, parse_token_type_end} }; RESOLVE_ONLY(function_header) |