deduplicate parsing constant

This commit is contained in:
zawz 2021-06-23 16:54:21 +02:00
parent 3dc60ff7e3
commit 0e6fc1262d
2 changed files with 5 additions and 6 deletions

View file

@ -18,7 +18,6 @@
#define CONTROL_END "#)" #define CONTROL_END "#)"
#define PIPELINE_END "\n;#()&" #define PIPELINE_END "\n;#()&"
#define ARGLIST_END "\n;#()&|" #define ARGLIST_END "\n;#()&|"
#define SPECIAL_TOKENS "\n;#()&|"
#define ALL_TOKENS "\n;#()&|{}" #define ALL_TOKENS "\n;#()&|{}"
#define ARITHMETIC_OPERATOR_END " \t\n$)" #define ARITHMETIC_OPERATOR_END " \t\n$)"
@ -93,7 +92,7 @@ std::pair<variable*, parse_context> parse_var(parse_context ct, bool specialvars
std::pair<arithmetic*, parse_context> parse_arithmetic(parse_context ct); std::pair<arithmetic*, parse_context> parse_arithmetic(parse_context ct);
std::pair<variable*, parse_context> parse_manipulation(parse_context ct); std::pair<variable*, parse_context> parse_manipulation(parse_context ct);
// arg parser // arg parser
std::pair<arg*, parse_context> parse_arg(parse_context ct, const char* end=ARG_END, const char* unexpected=SPECIAL_TOKENS, bool doquote=true); std::pair<arg*, parse_context> parse_arg(parse_context ct, const char* end=ARG_END, const char* unexpected=ARGLIST_END, bool doquote=true);
// redirect parser // redirect parser
std::pair<redirect*, parse_context> parse_redirect(parse_context ct); std::pair<redirect*, parse_context> parse_redirect(parse_context ct);
// arglist parser // arglist parser

View file

@ -803,7 +803,7 @@ std::pair<arglist*, parse_context> parse_arglist(parse_context ctx, bool hard_er
} }
} }
} }
else if(is_in(ctx[ctx.i], SPECIAL_TOKENS) && !word_eq("&>", ctx)) else if(is_in(ctx[ctx.i], ARGLIST_END) && !word_eq("&>", ctx))
{ {
if(hard_error) if(hard_error)
{ {
@ -861,7 +861,7 @@ std::pair<arglist*, parse_context> parse_arglist(parse_context ctx, bool hard_er
} }
if(ctx.i>=ctx.size) if(ctx.i>=ctx.size)
return std::make_pair(ret, ctx); return std::make_pair(ret, ctx);
if( is_in(ctx[ctx.i], SPECIAL_TOKENS) ) if( is_in(ctx[ctx.i], ARGLIST_END) )
return std::make_pair(ret, ctx); return std::make_pair(ret, ctx);
} }
@ -1278,7 +1278,7 @@ std::pair<cmd*, parse_context> parse_cmd(parse_context ctx)
ctx = parse_cmd_varassigns(ret, ctx, true, wp.first); ctx = parse_cmd_varassigns(ret, ctx, true, wp.first);
} }
if(!is_in(ctx[ctx.i], SPECIAL_TOKENS)) if(!is_in(ctx[ctx.i], ARGLIST_END))
{ {
auto pp=parse_arglist(ctx, true, &ret->redirs); auto pp=parse_arglist(ctx, true, &ret->redirs);
ret->args = pp.first; ret->args = pp.first;
@ -1342,7 +1342,7 @@ std::pair<case_block*, parse_context> parse_case(parse_context ctx)
} }
if(ctx[ctx.i] == ')') if(ctx[ctx.i] == ')')
break; break;
if(ctx[ctx.i] != '|' && is_in(ctx[ctx.i], SPECIAL_TOKENS)) if(is_in(ctx[ctx.i], PIPELINE_END))
{ {
parse_error( unexpected_token(ctx[ctx.i])+", expecting ')'", ctx ); parse_error( unexpected_token(ctx[ctx.i])+", expecting ')'", ctx );
} }