pub fn loop(toplevel: i32, justonce: i32) -> i32Expand description
Port of enum loop_return loop(int toplevel, int justonce) from Src/init.c:113.
Keep executing lists until EOF found. // c:109
enum loop_return
loop(int toplevel, int justonce)
{
Eprog prog;
int err, non_empty = 0;
queue_signals();
pushheap();
if (!toplevel)
zcontext_save();
for (;;) {
freeheap();
if (stophist == 3) hend(NULL);
hbegin(1);
if (isset(SHINSTDIN)) {
setblock_stdin();
if (interact && toplevel) { ... preprompt() ... }
}
use_exit_printed = 0;
intr();
lexinit();
if (!(prog = parse_event(ENDINPUT))) { ... }
if (hend(prog)) { ... preexec ... execode ... }
if (ferror(stderr)) { ... }
if (subsh) realexit();
if (((!interact || sourcelevel) && errflag) || retflag) break;
if (isset(SINGLECOMMAND) && toplevel) { dotrap(SIGEXIT); realexit(); }
if (justonce) break;
}
err = errflag;
if (!toplevel) zcontext_restore();
popheap();
unqueue_signals();
if (err) return LOOP_ERROR;
if (!non_empty) return LOOP_EMPTY;
return LOOP_OK;
}