Lines Matching refs:es

126 	Expr_state * const es = &curstate;
150 exprtoken(es);
151 if (es->tok == END) {
152 es->tok = LIT;
153 es->val = tempvar("");
155 v = intvar(es, evalexpr(es, MAX_PREC));
157 if (es->tok != END)
158 evalerr(es, ET_UNEXPECTED, NULL);
160 if (es->arith && es->natural)
163 setint_v(vp, v, es->arith);
174 evalerr(Expr_state *es, enum error_type type, const char *str)
179 es->arith = false;
182 switch (es->tok) {
184 s = es->val->name;
187 s = str_val(es->val);
193 tbuf[0] = *es->tokp;
198 s = opname[(int)es->tok];
200 warningf(true, Tf_sD_s_qs, es->expression,
205 warningf(true, Tf_sD_s_qs, es->expression,
210 warningf(true, Tf_sD_s_qs, es->expression,
216 es->expression, str, "requires lvalue");
221 es->expression, str, "applied to read-only variable");
226 warningf(true, Tf_sD_s, es->expression, str);
234 do_ppmm(Expr_state *es, enum token op, struct tbl *vasn, bool is_prefix)
239 assign_check(es, op, vasn);
241 vl = intvar(es, vasn);
247 if (!es->noassign) {
249 setint_v(vasn, vl, es->arith);
261 evalexpr(Expr_state *es, unsigned int prec)
268 switch ((int)(op = es->tok)) {
273 exprtoken(es);
274 vl = intvar(es, evalexpr(es, P_PRIMARY));
292 exprtoken(es);
293 vl = evalexpr(es, MAX_PREC);
294 if (es->tok != CLOSE_PAREN)
295 evalerr(es, ET_STR, "missing )");
296 exprtoken(es);
301 exprtoken(es);
302 vl = do_ppmm(es, op, es->val, true);
303 exprtoken(es);
308 vl = es->val;
309 exprtoken(es);
313 evalerr(es, ET_UNEXPECTED, NULL);
317 if (es->tok == O_PLUSPLUS || es->tok == O_MINUSMINUS) {
318 vl = do_ppmm(es, es->tok, vl, false);
319 exprtoken(es);
326 vl = evalexpr(es, prec - 1);
327 while ((int)(op = es->tok) >= (int)O_EQ && (int)op <= (int)O_COMMA &&
335 exprtoken(es);
341 vl = intvar(es, vl);
343 if (!es->noassign)
344 assign_check(es, op, vasn);
345 vr = intvar(es, evalexpr(es, P_ASSIGN));
350 es->noassign++;
351 exprtoken(es);
352 vl = evalexpr(es, MAX_PREC);
354 es->noassign--;
355 if (es->tok != CTERN)
356 evalerr(es, ET_STR, "missing :");
358 es->noassign++;
359 exprtoken(es);
360 vr = evalexpr(es, P_TERN);
362 es->noassign--;
366 vr = intvar(es, evalexpr(es, prec - 1));
375 if (!es->noassign)
376 evalerr(es, ET_STR, "zero divisor");
407 #define cmpop(op) (es->natural ? \
420 if (es->natural) {
427 if (es->natural) {
477 res = es->natural || vl->val.i >= 0 ?
513 es->noassign++;
514 exprtoken(es);
515 vr = intvar(es, evalexpr(es, prec - 1));
518 es->noassign--;
522 es->noassign++;
523 exprtoken(es);
524 vr = intvar(es, evalexpr(es, prec - 1));
527 es->noassign--;
539 if (!es->noassign) {
541 setint_v(vasn, vr, es->arith);
553 exprtoken(Expr_state *es)
555 const char *cp = es->tokp;
565 if (es->tokp == es->expression && (unsigned int)c == ORD('#')) {
568 es->natural = true;
572 es->tokp = cp;
575 es->tok = END;
585 evalerr(es, ET_STR, "missing ]");
588 if (es->noassign) {
589 es->val = tempvar("");
590 es->val->flag |= EXPRLVALUE;
592 strndupx(tvar, es->tokp, cp - es->tokp, ATEMP);
593 es->val = global(tvar);
596 es->tok = VAR;
601 strndupx(tvar, es->tokp, cp - es->tokp, ATEMP);
606 es->tok = END;
607 evalerr(es, ET_UNEXPECTED, NULL);
611 evalerr(es, ET_STR,
614 c = cp - es->tokp;
618 memcpy(tvar + 2, es->tokp + 1, c - 2);
625 strndupx(tvar, es->tokp, --cp - es->tokp, ATEMP);
627 es->val = tempvar("");
628 es->val->flag &= ~INTEGER;
629 es->val->type = 0;
630 es->val->val.s = tvar;
631 if (setint_v(es->val, es->val, es->arith) == NULL)
632 evalerr(es, ET_BADLIT, tvar);
634 es->tok = LIT;
641 es->tok = (enum token)i;
646 es->tok = BAD;
648 es->tokp = cp;
652 assign_check(Expr_state *es, enum token op, struct tbl *vasn)
654 if (es->tok == END || !vasn ||
656 evalerr(es, ET_LVALUE, opname[(int)op]);
658 evalerr(es, ET_RDONLY, opname[(int)op]);
680 intvar(Expr_state *es, struct tbl *vp)
690 if (setint_v(vq, vp, es->arith) == NULL) {
692 evalerr(es, ET_RECURSIVE, vp->name);
693 es->evaling = vp;
695 v_evaluate(vq, str_val(vp), KSH_UNWIND_ERROR, es->arith);
697 es->evaling = NULL;