mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-06-23 08:31:16 -03:00
Fix error propagation in parser_t::eval
It was unconditionally returning `parse_execution_success`. This was causing certain parser errors to incorrectly return after evaluation with `$status` equal to `0`, as reported after `eval`, `source`, or sub-`fish` execution.
This commit is contained in:
@@ -631,17 +631,17 @@ int parser_t::eval(wcstring cmd, const io_chain_t &io, enum block_type_t block_t
|
||||
std::fwprintf(stderr, L"%ls\n", backtrace_and_desc.c_str());
|
||||
return 1;
|
||||
}
|
||||
this->eval(ps, io, block_type);
|
||||
return 0;
|
||||
return this->eval(ps, io, block_type);
|
||||
}
|
||||
|
||||
void parser_t::eval(parsed_source_ref_t ps, const io_chain_t &io, enum block_type_t block_type) {
|
||||
int parser_t::eval(parsed_source_ref_t ps, const io_chain_t &io, enum block_type_t block_type) {
|
||||
assert(block_type == TOP || block_type == SUBST);
|
||||
if (!ps->tree.empty()) {
|
||||
// Execute the first node.
|
||||
tnode_t<grammar::job_list> start{&ps->tree, &ps->tree.front()};
|
||||
this->eval_node(ps, start, io, block_type, nullptr /* parent */);
|
||||
return this->eval_node(ps, start, io, block_type, nullptr /* parent */);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
|
||||
Reference in New Issue
Block a user