Exemple #1
0
static int pexp7 (void) {
    int ei0, ei1, ei2;

    ei0 = 0;
    switch (Ltok) {
    case L_FUNCTION:
        Lgtok ();
        ei0 =  pfunc ();
        break;
    case L_LP:
        ei0 = Cnew (C_PEXPR);
        Lgtok ();
        ei1 = pexpr ();
        GTOKIFEQ (L_RP);
        Csetfp (ei0, ei1);
        break;
    case L_LB:
        ei0 = ptcons ();
        break;
    case L_STRING:
    case L_NUMBER:
        ei0 = pcons ();
        break;
    case L_ID:
        ei0 = pvar ();
        if (Ltok == L_LP) { /* ie: it's really a function call */
            ei1 = ei0;
            ei0 = Cnew (C_FCALL);
            Csetfp (ei0, ei1);
            Lgtok ();
            ei2 = pargs ();
            Csetnext (ei1, ei2);
            GTOKIFEQ (L_RP);
        }
        break;
    default:
        err ("expected EXP7 type token, found: %s", Lnames[Ltok]);
    }
    return ei0;
}
Exemple #2
0
static int pexp7 (void) {
    int ei0, ei1;

    switch (EEltok) {
    case L_LP:
        if ((ei0 = EEcnew (C_PEXPR)) == -1) {
            SUwarning (0, "pexp7", "cannot create code");
            return -1;
        }
        EElgtok ();
        if ((ei1 = pexpr ()) == -1) {
            SUwarning (0, "pexp7", "cannot create expression");
            return -1;
        }
        GTOKIFEQ (L_RP);
        EEcsetfp (ei0, ei1);
        break;
    case L_STRING:
    case L_NUMBER:
        if ((ei0 = pcons ()) == -1) {
            SUwarning (0, "pexp7", "cannot create constant expression");
            return -1;
        }
        break;
    case L_ID:
        if ((ei0 = pvar ()) == -1) {
            SUwarning (0, "pexp7", "cannot create variable expression");
            return -1;
        }
        break;
    default:
        SUwarning (
            0, "pexp7",
            "unexpected token: %s, string: %s", EElnames[EEltok], EElgetstr ()
        );
    }
    return ei0;
}