Ejemplo n.º 1
0
/*
 *  handles the "directive" state after the "ignore" state
 */
static int direce(lex_t *t)
{
    int i = NELEM(dtab), ign;

    assert(cond_ignore());
    ign = cond_list->f.ignore;

    NEXTSP(t);    /* consumes # */
    if (t->id == LEX_ID) {
        const char *n = LEX_SPELL(t);
        for (i = 0; i < NELEM(dtab); i++)
            if (strcmp(n, dtab[i].name) == 0)
                break;
        switch(i) {
            case DINCLUDE:
            case DDEFINE:
            case DUNDEF:
            case DLINE:
            case DERROR:
            case DPRAGMA:
            default:
                i = NELEM(dtab);
                break;
            case DIF:
                t = dif(t->pos, COND_KIF, 1);
                break;
            case DIFDEF:
                t = dif(t->pos, COND_KIFDEF, 1);
                break;
            case DIFNDEF:
                t = dif(t->pos, COND_KIFNDEF, 1);
                break;
            case DELIF:
                t = delif(t->pos);
                break;
            case DELSE:
                t = delse(t->pos);
                break;
            case DENDIF:
                t = dendif(t->pos);
                break;
        }
    }

    if (warnxtra[i] && ign != 2) {
        SKIPSP(t);
        if (t->id != LEX_NEWLINE)
            t = xtratok(t);
    }
    SKIPNL(t);
    lst_discard(1);
    lex_direc = 0;

    return 0;
}
Ejemplo n.º 2
0
/* xdelifnot - built-in function 'delete-if-not' */
LVAL xdelifnot(void)
{
    LVAL delif();
    return (delif(FALSE));
}
Ejemplo n.º 3
0
/* xdelif - built-in function 'delete-if' */
LVAL xdelif(void)
{
    LVAL delif();
    return (delif(TRUE));
}
Ejemplo n.º 4
0
/*
 *  handles the "directive" state after the "normal" state
 */
static int direci(lex_t *t)
{
    int i = NELEM(dtab);

    assert(!cond_ignore());

    NEXTSP(t);    /* consumes # */
    if (t->id == LEX_ID) {
        const char *n = LEX_SPELL(t);
        for (i = 0; i < NELEM(dtab); i++)
            if (strcmp(n, dtab[i].name) == 0)
                break;
        switch(i) {
            case DINCLUDE:
                t = dinclude(t->pos);
                break;
            case DDEFINE:
                /* ddefine() moved into mcr.c for macros from -D */
                t = mcr_define(t->pos, 0);
                break;
            case DUNDEF:
                t = dundef(t->pos);
                break;
            case DIF:
                t = dif(t->pos, COND_KIF, 0);
                break;
            case DIFDEF:
                t = dif(t->pos, COND_KIFDEF, 0);
                break;
            case DIFNDEF:
                t = dif(t->pos, COND_KIFNDEF, 0);
                break;
            case DELIF:
                t = delif(t->pos);
                break;
            case DELSE:
                t = delse(t->pos);
                break;
            case DENDIF:
                t = dendif(t->pos);
                break;
            case DLINE:
                t = dline(t->pos);
                break;
            case DERROR:
                t = derror(t->pos, 0);
                break;
            case DPRAGMA:
                t = dpragma(t->pos);
                break;
            case DWARNING:
                t = derror(t->pos, 1);
                break;
            default:
                err_dpos(t->pos, ERR_PP_UNKNOWNDIR);
                break;
        }
    } else
        i = DUNDEF;

    if (warnxtra[i]) {
        SKIPSP(t);
        if (t->id != LEX_NEWLINE)
            t = xtratok(t);
    }
    SKIPNL(t);
    lst_discard(1);
    lex_direc = 0;

    return 0;
}