Home | History | Annotate | Download | only in src

Lines Matching refs:es

203 	Expr_state * const es = &curstate;
227 exprtoken(es);
228 if (es->tok == END) {
229 es->tok = LIT;
230 es->val = tempvar();
232 v = intvar(es, evalexpr(es, MAX_PREC));
234 if (es->tok != END)
235 evalerr(es, ET_UNEXPECTED, NULL);
237 if (es->arith && es->natural)
240 setint_v(vp, v, es->arith);
251 evalerr(Expr_state *es, enum error_type type, const char *str)
256 es->arith = false;
259 switch (es->tok) {
261 s = es->val->name;
264 s = str_val(es->val);
270 tbuf[0] = *es->tokp;
275 s = opinfo[(int)es->tok].name;
277 warningf(true, "%s: %s '%s'", es->expression,
282 warningf(true, "%s: %s '%s'", es->expression,
287 warningf(true, "%s: %s '%s'", es->expression,
293 es->expression, str, "requires lvalue");
298 es->expression, str, "applied to read-only variable");
303 warningf(true, "%s: %s", es->expression, str);
311 do_ppmm(Expr_state *es, enum token op, struct tbl *vasn, bool is_prefix)
316 assign_check(es, op, vasn);
318 vl = intvar(es, vasn);
324 if (!es->noassign) {
326 setint_v(vasn, vl, es->arith);
338 evalexpr(Expr_state *es, unsigned int prec)
345 switch ((int)(op = es->tok)) {
350 exprtoken(es);
351 vl = intvar(es, evalexpr(es, P_PRIMARY));
369 exprtoken(es);
370 vl = evalexpr(es, MAX_PREC);
371 if (es->tok != CLOSE_PAREN)
372 evalerr(es, ET_STR, "missing )");
373 exprtoken(es);
378 exprtoken(es);
379 vl = do_ppmm(es, op, es->val, true);
380 exprtoken(es);
385 vl = es->val;
386 exprtoken(es);
390 evalerr(es, ET_UNEXPECTED, NULL);
394 if (es->tok == O_PLUSPLUS || es->tok == O_MINUSMINUS) {
395 vl = do_ppmm(es, es->tok, vl, false);
396 exprtoken(es);
403 vl = evalexpr(es, prec - 1);
404 while ((int)(op = es->tok) >= (int)O_EQ && (int)op <= (int)O_COMMA &&
406 exprtoken(es);
410 vl = intvar(es, vl);
412 if (!es->noassign)
413 assign_check(es, op, vasn);
414 vr = intvar(es, evalexpr(es, P_ASSIGN));
419 es->noassign++;
420 vl = evalexpr(es, MAX_PREC);
422 es->noassign--;
423 if (es->tok != CTERN)
424 evalerr(es, ET_STR, "missing :");
425 exprtoken(es);
427 es->noassign++;
428 vr = evalexpr(es, P_TERN);
430 es->noassign--;
434 vr = intvar(es, evalexpr(es, prec - 1));
443 if (!es->noassign)
444 evalerr(es, ET_STR, "zero divisor");
475 #define cmpop(op) (es->natural ? \
488 if (es->natural) {
495 if (es->natural) {
545 res = es->natural || vl->val.i >= 0 ?
581 es->noassign++;
582 vr = intvar(es, evalexpr(es, prec - 1));
585 es->noassign--;
589 es->noassign++;
590 vr = intvar(es, evalexpr(es, prec - 1));
593 es->noassign--;
605 if (!es->noassign) {
607 setint_v(vasn, vr, es->arith);
619 exprtoken(Expr_state *es)
621 const char *cp = es->tokp;
629 if (es->tokp == es->expression && c == '#') {
632 es->natural = true;
636 es->tokp = cp;
639 es->tok = END;
648 evalerr(es, ET_STR, "missing ]");
651 if (es->noassign) {
652 es->val = tempvar();
653 es->val->flag |= EXPRLVALUE;
655 strndupx(tvar, es->tokp, cp - es->tokp, ATEMP);
656 es->val = global(tvar);
659 es->tok = VAR;
663 strndupx(tvar, es->tokp, cp - es->tokp, ATEMP);
670 evalerr(es, ET_STR,
673 c = cp - es->tokp;
677 memcpy(tvar + 2, es->tokp + 1, c - 2);
684 strndupx(tvar, es->tokp, --cp - es->tokp, ATEMP);
686 es->val = tempvar();
687 es->val->flag &= ~INTEGER;
688 es->val->type = 0;
689 es->val->val.s = tvar;
690 if (setint_v(es->val, es->val, es->arith) == NULL)
691 evalerr(es, ET_BADLIT, tvar);
693 es->tok = LIT;
700 es->tok = (enum token)i;
705 es->tok = BAD;
707 es->tokp = cp;
711 assign_check(Expr_state *es, enum token op, struct tbl *vasn)
713 if (es->tok == END || !vasn ||
715 evalerr(es, ET_LVALUE, opinfo[(int)op].name);
717 evalerr(es, ET_RDONLY, opinfo[(int)op].name);
737 intvar(Expr_state *es, struct tbl *vp)
747 if (setint_v(vq, vp, es->arith) == NULL) {
749 evalerr(es, ET_RECURSIVE, vp->name);
750 es->evaling = vp;
752 v_evaluate(vq, str_val(vp), KSH_UNWIND_ERROR, es->arith);
754 es->evaling = NULL;