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; }
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; }