Skip to main content

loop

Function loop 

Source
pub fn loop(toplevel: i32, justonce: i32) -> i32
Expand 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;
}