UNIX — универсальная среда программирования - Керниган Брайан Уилсон
На этом ресурсе Вы можете бесплатно читать книгу онлайн UNIX — универсальная среда программирования - Керниган Брайан Уилсон. Жанр: ОС и Сети / Интернет . На сайте booksdaily.club Вы можете онлайн читать полную версию книги без регистрации и sms. Так же Вы можете ознакомится с содержанием, описанием, предисловием о произведении
d = pop(); /* preserve function return value */ ret(); push(d);}procret() /* return from a procedure */{ if (fp->sp->type == FUNCTION) execerror(fp->sp->name, "(func) returns no value"); ret();}double *getarg() /* return pointer to argument */{ int nargs = (int)*pc++; if (nargs > fp->nargs) execerror(fp->sp->name, "not enough arguments"); return &fp->argn[nargs - fp->nargs].val;}arg() /* push argument onto stack */{ Datum d; d.val = *getarg(); push(d);}argassign() /* store top of stack in argument */{ Datum d; d = pop(); push(d); /* leave value on stack */ *getarg() = d.val;}bltin() { Datum d; d = pop(); d.val = (*(double(*)())*pc++)(d.val); push(d);}eval() /* evaluate variable on stack */{ Datum d; d = pop(); if (d.sym->type != VAR && d.sym->type != UNDEF) execerror("attempt to evaluate non-variable", d.sym->name); if (d.sym->type == UNDEF) execerror("undefined variable", d.sym->name); d.val = d.sym->u.val; push(d);}add() { Datum d1, d2; d2 = pop(); d1 = pop(); d1.val += d2.val; push(d1);}sub() { Datum d1, d2; d2 = pop(); d1 = pop(); d1.val -= d2.val; push(d1);}mul() { Datum d1, d2; d2 = pop(); d1 = pop(); d1.val *= d2.val; push(d1);}div() { Datum d1, d2; d2 = pop(); if (d2.val == 0.0) execerror("division by zero", (char *)0); d1 = pop(); d1.val /= d2.val; push(d1);}negate() { Datum d; d = pop(); d.val = -d.val; push(d);}gt() { Datum d1, d2; d2 = pop(); d1 = pop(); d1.val = (double)(d1.val > d2.val); push(d1);}lt() { Datum d1, d2; d2 = pop(); d1 = pop(); d1.val = (double)(d1.val < d2.val); push(d1);}ge() { Datum d1, d2; d2 = pop(); d1 = pop(); d1.val = (double)(d1.val >= d2.val); push(d1);}le() { Datum d1, d2; d2 = pop(); d1 = pop();