summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--eval.c4
-rw-r--r--parser.c11
2 files changed, 12 insertions, 3 deletions
diff --git a/eval.c b/eval.c
index 0a9ad60e..0aea1d2f 100644
--- a/eval.c
+++ b/eval.c
@@ -1263,7 +1263,9 @@ val eval_intrinsic(val form, val env)
val lfx_save = last_form_expanded;
val form_ex = (last_form_expanded = last_form_evaled = nil,
expand(form, nil));
- val ret = eval(form_ex, default_bool_arg(env), form);
+ val loading = cdr(lookup_var(dyn_env, load_recursive_s));
+ val ret = ((void) (loading || uw_dump_deferred_warnings(std_error)),
+ eval(form_ex, default_bool_arg(env), form));
last_form_expanded = lfx_save;
last_form_evaled = lfe_save;
return ret;
diff --git a/parser.c b/parser.c
index 756b6fae..53e20eb4 100644
--- a/parser.c
+++ b/parser.c
@@ -873,6 +873,9 @@ static val read_eval_ret_last(val env, val counter,
val error_val = gensym(nil);
val name = format(nil, lit("paste-~a"), counter, nao);
val value = nil;
+ val loading = cdr(lookup_var(dyn_env, load_recursive_s));
+ val saved_dyn_env = set_dyn_env(make_env(nil, nil, dyn_env));
+ env_vbind(dyn_env, load_recursive_s, t);
for (;; lineno = succ(lineno)) {
val form = lisp_parse(in_stream, out_stream, error_val, name, lineno);
@@ -890,6 +893,11 @@ static val read_eval_ret_last(val env, val counter,
break;
}
+ dyn_env = saved_dyn_env;
+
+ if (!loading)
+ uw_dump_deferred_warnings(out_stream);
+
prinl(value, out_stream);
return t;
}
@@ -910,9 +918,8 @@ static val get_home_path(void)
static val repl_warning(val out_stream, val exc, struct args *rest)
{
val args = args_get_list(rest);
- val loading = cdr(lookup_var(dyn_env, load_recursive_s));
- if (loading && cdr(args))
+ if (cdr(args))
uw_defer_warning(args);
else
format(out_stream, lit("** warning: ~!~a\n"), car(args), nao);