Шрифт:
Интервал:
Закладка:
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();
- QNX/UNIX: Анатомия параллелизма - Цилюрик Олег Иванович - Интернет
- Архитектура операционной системы UNIX (ЛП) - Бах Морис Дж. - Интернет
- Политики безопасности компании при работе в Интернет - Сергей Петренко - Интернет
- Wi-Fi: Все, что Вы хотели знать, но боялись спросить - А. Щербаков - Интернет
- CSS3 для веб-дизайнеров - Дэн Сидерхолм - Интернет
- Халявные антивирусы и другие бесплатные программы из Интернета! - Василий Халявин - Интернет
- Современные компьютерные технологии - Денис Тунцев - Интернет
- Криминальный Runet. Темные стороны Интернета - Филипп Гросс - Интернет
- Skype: бесплатные звонки через Интернет. Начали! - Виктор Гольцман - Интернет
- Управление репутацией в интернете - Никита Прохоров - Интернет