Shell: Allow builtins and functions as conditions for 'if'

This commit is contained in:
AnotherTest 2020-09-14 14:57:30 +04:30 committed by Andreas Kling
commit cd0ddf27f3
Notes: sideshowbarker 2024-07-19 02:24:50 +09:00
2 changed files with 12 additions and 13 deletions

View file

@ -1209,16 +1209,16 @@ void IfCond::dump(int level) const
RefPtr<Value> IfCond::run(RefPtr<Shell> shell)
{
auto cond = m_condition->run(shell)->resolve_without_cast(shell);
ASSERT(cond->is_job());
// The condition could be a builtin, in which case it has already run and exited.
if (cond && cond->is_job()) {
auto cond_job_value = static_cast<const JobValue*>(cond.ptr());
auto cond_job = cond_job_value->job();
auto cond_job_value = static_cast<const JobValue*>(cond.ptr());
auto cond_job = cond_job_value->job();
shell->block_on_job(cond_job);
if (cond_job->signaled())
return create<ListValue>({}); // Exit early.
shell->block_on_job(cond_job);
if (cond_job->signaled())
return create<ListValue>({}); // Exit early.
}
if (shell->last_return_code == 0) {
if (m_true_branch)
return m_true_branch->run(shell);