From 2e9a09fc1ea8934874c36f524f8bccd864356eb2 Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Sat, 13 Mar 2010 18:31:30 +0900 Subject: [PATCH] type checking env arg to eval (issue #44) --- eval.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/eval.c b/eval.c index a3b2a0d7..5d42e74d 100644 --- a/eval.c +++ b/eval.c @@ -2745,14 +2745,15 @@ sexp sexp_eval (sexp ctx, sexp obj, sexp env) { sexp_sint_t top; sexp ctx2; sexp_gc_var2(res, err_handler); + if (! env) + env = sexp_context_env(ctx); + else if (! sexp_envp(env)) + return sexp_type_exception(ctx, "eval: not an env", env); sexp_gc_preserve2(ctx, res, err_handler); top = sexp_context_top(ctx); err_handler = sexp_cdr(sexp_global(ctx, SEXP_G_ERR_HANDLER)); sexp_cdr(sexp_global(ctx, SEXP_G_ERR_HANDLER)) = SEXP_FALSE; - ctx2 = sexp_make_eval_context(ctx, - sexp_context_stack(ctx), - (env ? env : sexp_context_env(ctx)), - 0); + ctx2 = sexp_make_eval_context(ctx, sexp_context_stack(ctx), env, 0); res = sexp_compile(ctx2, obj); if (! sexp_exceptionp(res)) res = sexp_apply(ctx2, res, SEXP_NULL);