/* xleval - evaluate an xlisp expression (checking for *evalhook*) */ LVAL xleval(LVAL expr) { /* check for control codes */ if (--xlsample <= 0) { xlsample = SAMPLE; oscheck(); } /* check for *evalhook* */ if (getvalue(s_evalhook)) return (evalhook(expr)); /* check for nil */ if (null(expr)) return (NIL); /* dispatch on the node type */ switch (ntype(expr)) { case CONS: return (evform(expr)); case SYMBOL: return (xlgetvalue(expr)); default: return (expr); } }
/* xleval - evaluate an xlisp expression (checking for *evalhook*) */ NODE *xleval(NODE *expr) { /* check for control codes */ if (--xlsample <= 0) { xlsample = SAMPLE; oscheck(); } /* check for *evalhook* */ if (getvalue(s_evalhook)) return (evalhook(expr)); /* add trace entry */ if (++xltrace < TDEPTH) trace_stack[xltrace] = expr; /* check type of value */ if (consp(expr)) expr = evform(expr); else if (symbolp(expr)) expr = xlgetvalue(expr); /* remove trace entry */ --xltrace; /* return the value */ return (expr); }
/* xlxeval - evaluate an xlisp expression (bypassing *evalhook*) */ NODE *xlxeval(NODE *expr) { /* check type of value */ if (consp(expr)) expr = evform(expr); else if (symbolp(expr)) expr = xlgetvalue(expr); /* return the value */ return (expr); }
/* xlxeval - evaluate an xlisp expression (bypassing *evalhook*) */ LVAL xlxeval(LVAL expr) { /* check for nil */ if (null(expr)) return (NIL); /* dispatch on node type */ switch (ntype(expr)) { case CONS: return (evform(expr)); case SYMBOL: return (xlgetvalue(expr)); default: return (expr); } }