Lines Matching refs:ex
76 getdyn(Expr_t* ex, register Exnode_t* expr, void* env, Exassoc_t** assoc)
85 v = eval(ex, expr->data.variable.index, env);
296 print(Expr_t* ex, Exnode_t* expr, void* env, Sfio_t* sp)
304 v = eval(ex, expr->data.print.descriptor, env);
305 if (v.integer < 0 || v.integer >= elementsof(ex->file) || !(sp = ex->file[v.integer]) && !(sp = ex->file[v.integer] = sfnew(NiL, NiL, SF_UNBOUND, v.integer, SF_READ|SF_WRITE)))
314 fmt.expr = ex;
331 v = eval(ex, x->arg->data.operand.left, env);
402 scan(Expr_t* ex, Exnode_t* expr, void* env, Sfio_t* sp)
413 v = eval(ex, expr->data.scan.descriptor, env);
419 if (v.integer < 0 || v.integer >= elementsof(ex->file) || !(sp = ex->file[v.integer]) && !(sp = ex->file[v.integer] = sfnew(NiL, NiL, SF_UNBOUND, v.integer, SF_READ|SF_WRITE)))
429 fmt.expr = ex;
431 u = eval(ex, expr->data.scan.format, env);
445 str_add(Expr_t* ex, register char* l, register char* r)
447 sfprintf(ex->tmp, "%s%s", l, r);
448 return exstash(ex->tmp, ex->ve);
456 str_ior(Expr_t* ex, register char* l, register char* r)
463 sfputc(ex->tmp, c);
466 sfputc(ex->tmp, c);
467 return exstash(ex->tmp, ex->ve);
475 str_and(Expr_t* ex, register char* l, register char* r)
481 sfputc(ex->tmp, c);
482 return exstash(ex->tmp, ex->ve);
490 str_xor(Expr_t* ex, register char* l, register char* r)
497 sfputc(ex->tmp, c);
500 sfputc(ex->tmp, c);
501 return exstash(ex->tmp, ex->ve);
509 str_mod(Expr_t* ex, register char* l, register char* r)
515 sfputc(ex->tmp, c);
516 return exstash(ex->tmp, ex->ve);
524 str_mpy(Expr_t* ex, register char* l, register char* r)
530 sfputc(ex->tmp, lc == rc ? lc : ' ');
531 return exstash(ex->tmp, ex->ve);
539 eval(Expr_t* ex, register Exnode_t* expr, void* env)
554 if (!expr || ex->loopcount)
564 v = eval(ex, x, env);
565 ex->loopcount = v.integer;
566 ex->loopop = expr->op;
574 r = getdyn(ex, x, env, &assoc);
578 i = eval(ex, x->data.variable.index, env);
581 r = (*ex->disc->getf)(ex, x, x->data.variable.symbol, x->data.variable.reference, env, (int)i.integer, ex->disc);
601 v.string = vmstrdup(ex->vm, v.string);
603 vmfree(ex->vm, e);
613 i = eval(ex, x->data.variable.index, env);
616 if ((*ex->disc->setf)(ex, x, x->data.variable.symbol, x->data.variable.reference, env, (int)i.integer, v, ex->disc) < 0)
623 return getdyn(ex, expr, env, &assoc);
625 v = eval(ex, x, env);
631 v = eval(ex, x, env);
633 eval(ex, expr->data.operand.right->data.operand.left, env);
635 eval(ex, expr->data.operand.right->data.operand.right, env);
643 r = eval(ex, x, env);
651 eval(ex, expr->data.operand.right, env);
652 if (ex->loopcount > 0 && (--ex->loopcount > 0 || ex->loopop != CONTINUE))
659 eval(ex, expr->data.operand.left, env);
663 v = eval(ex, x, env);
684 if ((ex->disc->version >= 19981111L && ex->disc->matchf) ? (*ex->disc->matchf)(ex, x, (*t)->string, expr->data.operand.left, v.string, env, ex->disc) : strmatch((*t)->string, v.string))
702 r = eval(ex, x->data.select.statement, env);
703 if (ex->loopcount > 0)
705 ex->loopcount--;
712 r = eval(ex, a, env);
713 if (ex->loopcount > 0)
714 ex->loopcount--;
729 eval(ex, expr->data.generate.statement, env);
730 if (ex->loopcount > 0 && (--ex->loopcount > 0 || ex->loopop != CONTINUE))
739 r = (*ex->disc->getf)(ex, expr, expr->data.generate.array->data.variable.symbol, expr->data.generate.array->data.variable.reference, env, 0, ex->disc);
743 eval(ex, expr->data.generate.statement, env);
744 if (ex->loopcount > 0 && (--ex->loopcount > 0 || ex->loopop != CONTINUE))
759 args[n++] = eval(ex, x->data.operand.left, env);
762 a->data.operand.left->data.variable.symbol->value->data.constant.value = eval(ex, x->data.operand.left, env);
771 v = exeval(ex, expr->data.call.procedure->value->data.procedure.body, env);
779 args[n++] = eval(ex, x->data.operand.left, env);
780 return (*ex->disc->getf)(ex, expr->data.operand.left, expr->data.operand.left->data.variable.symbol, expr->data.operand.left->data.variable.reference, args+1, EX_CALL, ex->disc);
783 i = eval(ex, expr->data.variable.index, env);
786 return (*ex->disc->getf)(ex, expr, expr->data.variable.symbol, expr->data.variable.reference, env, (int)i.integer, ex->disc);
791 v.integer = print(ex, expr, env, NiL);
794 print(ex, expr, env, sfstderr);
798 ex->loopret = eval(ex, x, env);
799 ex->loopcount = 32767;
800 ex->loopop = expr->op;
801 return ex->loopret;
804 v.integer = scan(ex, expr, env, NiL);
807 print(ex, expr, env, ex->tmp);
808 v.string = exstash(ex->tmp, ex->ve);
811 v = eval(ex, expr->data.operand.right, env);
816 v = getdyn(ex, x, env, &assoc);
820 v = eval(ex, x->data.variable.index, env);
823 v = (*ex->disc->getf)(ex, x, x->data.variable.symbol, x->data.variable.reference, env, (int)v.integer, ex->disc);
922 v.string = str_add(ex, v.string, r.string);
925 v.string = str_ior(ex, v.string, r.string);
928 v.string = str_and(ex, v.string, r.string);
931 v.string = str_xor(ex, v.string, r.string);
934 v.string = str_mod(ex, v.string, r.string);
937 v.string = str_mpy(ex, v.string, r.string);
948 getdyn(ex, x, env, &assoc);
955 v = eval(ex, x, env);
958 v = eval(ex, expr->data.operand.left, env);
959 if (ex->loopcount)
962 return expr ? eval(ex, expr, env) : v;
964 v = eval(ex, x, env);
965 return v.integer ? eval(ex, expr->data.operand.right->data.operand.left, env) : eval(ex, expr->data.operand.right->data.operand.right, env);
967 v = eval(ex, x, env);
968 return v.integer ? eval(ex, expr->data.operand.right, env) : v;
970 v = eval(ex, x, env);
971 return v.integer ? v : eval(ex, expr->data.operand.right, env);
973 v = eval(ex, x, env);
975 r = eval(ex, x, env);
989 sfprintf(ex->tmp, "%g", v.floating);
990 tmp.data.constant.value.string = exstash(ex->tmp, ex->ve);
992 else if ((*ex->disc->convertf)(ex, &tmp, STRING, expr->data.operand.right ? expr->data.operand.right->data.variable.symbol : (Exid_t*)0, 0, ex->disc))
999 if ((*ex->disc->convertf)(ex, &tmp, expr->type, expr->data.operand.right ? expr->data.operand.right->data.variable.symbol : (Exid_t*)0, 0, ex->disc))
1074 if ((*ex->disc->convertf)(ex, &tmp, FLOATING, expr->data.operand.right ? expr->data.operand.right->data.variable.symbol : (Exid_t*)0, 0, ex->disc))
1081 if ((*ex->disc->convertf)(ex, &tmp, INTEGER, expr->data.operand.right ? expr->data.operand.right->data.variable.symbol : (Exid_t*)0, 0, ex->disc))
1088 if ((*ex->disc->convertf)(ex, &tmp, STRING, expr->data.operand.right ? expr->data.operand.right->data.variable.symbol : (Exid_t*)0, 0, ex->disc))
1131 sfprintf(ex->tmp, "%I*u", sizeof(v.integer), v.integer);
1133 sfprintf(ex->tmp, "%I*d", sizeof(v.integer), v.integer);
1134 tmp.data.constant.value.string = exstash(ex->tmp, ex->ve);
1136 else if ((*ex->disc->convertf)(ex, &tmp, STRING, expr->data.operand.right ? expr->data.operand.right->data.variable.symbol : (Exid_t*)0, 0, ex->disc))
1143 if ((*ex->disc->convertf)(ex, &tmp, expr->type, expr->data.operand.right ? expr->data.operand.right->data.variable.symbol : (Exid_t*)0, 0, ex->disc))
1221 if ((*ex->disc->convertf)(ex, &tmp, FLOATING, expr->data.operand.right ? expr->data.operand.right->data.variable.symbol : (Exid_t*)0, 0, ex->disc))
1232 if ((*ex->disc->convertf)(ex, &tmp, INTEGER, expr->data.operand.right ? expr->data.operand.right->data.variable.symbol : (Exid_t*)0, 0, ex->disc))
1243 if ((*ex->disc->convertf)(ex, &tmp, expr->type, expr->data.operand.right ? expr->data.operand.right->data.variable.symbol : (Exid_t*)0, 0, ex->disc))
1249 v.integer = ((v.string && r.string) ? ((ex->disc->version >= 19981111L && ex->disc->matchf) ? (*ex->disc->matchf)(ex, expr->data.operand.left, v.string, expr->data.operand.right, r.string, env, ex->disc) : strmatch(v.string, r.string)) : (v.string == r.string)) == (expr->op == EQ);
1252 v.string = str_add(ex, v.string, r.string);
1255 v.string = str_ior(ex, v.string, r.string);
1258 v.string = str_and(ex, v.string, r.string);
1261 v.string = str_xor(ex, v.string, r.string);
1264 v.string = str_mod(ex, v.string, r.string);
1267 v.string = str_mpy(ex, v.string, r.string);
1301 exeval(Expr_t* ex, Exnode_t* expr, void* env)
1305 vmclear(ex->ve);
1311 v.floating = (*expr->compiled.floating)(ex->disc->data);
1314 v.string = (*expr->compiled.string)(ex->disc->data);
1317 v.integer = (*expr->compiled.integer)(ex->disc->data);
1323 v = eval(ex, expr, env);
1324 if (ex->loopcount > 0)
1326 ex->loopcount = 0;
1327 if (ex->loopop == RETURN)
1328 return ex->loopret;