diff options
-rw-r--r-- | eval.c | 4 | ||||
-rw-r--r-- | parser.c | 11 |
2 files changed, 12 insertions, 3 deletions
@@ -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; @@ -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); |