parse_util: Only reject time in a pipeline without decorator

This allows e.g. `foo | command time`, while still rejecting `foo | time`.

(this should really be done in the ast itself, but tbh most of
parse_util kinda should)

Fixes #9985
This commit is contained in:
Fabian Boehm
2023-08-25 19:34:24 +02:00
parent b48fa1f1a0
commit 482616f101
3 changed files with 37 additions and 8 deletions

View File

@@ -961,8 +961,16 @@ static bool detect_errors_in_decorated_statement(const wcstring &buff_src,
// Similarly for time (#8841).
if (command == L"time") {
errored = append_syntax_error(parse_errors, source_start, source_length,
TIME_IN_PIPELINE_ERR_MSG);
// We only reject it if we have no decoration.
// `echo foo | command time something`
// is entirely fair and valid.
// Other current decorations like "exec"
// are already forbidden.
const auto &deco = dst.decoration();
if (deco == statement_decoration_t::none) {
errored = append_syntax_error(parse_errors, source_start, source_length,
TIME_IN_PIPELINE_ERR_MSG);
}
}
}