Fixing -x combined with -m.

This commit is contained in:
Alex Shinn 2015-06-21 22:47:21 +09:00
parent ad2b9efcdc
commit 74cc4372be

35
main.c
View file

@ -339,25 +339,31 @@ static sexp check_exception (sexp ctx, sexp res) {
return res; return res;
} }
static sexp sexp_add_import_binding (sexp ctx, sexp env) {
sexp_gc_var2(sym, tmp);
sexp_gc_preserve2(ctx, sym, tmp);
sym = sexp_intern(ctx, "repl-import", -1);
tmp = sexp_env_ref(ctx, sexp_meta_env(ctx), sym, SEXP_VOID);
sym = sexp_intern(ctx, "import", -1);
sexp_env_define(ctx, env, sym, tmp);
sexp_gc_release3(ctx);
return env;
}
static sexp sexp_load_standard_repl_env (sexp ctx, sexp env, sexp k, int bootp) { static sexp sexp_load_standard_repl_env (sexp ctx, sexp env, sexp k, int bootp) {
sexp_gc_var3(e, sym, tmp); sexp_gc_var1(e);
sexp_gc_preserve3(ctx, e, sym, tmp); sexp_gc_preserve1(ctx, e);
e = sexp_load_standard_env(ctx, env, k); e = sexp_load_standard_env(ctx, env, k);
if (!sexp_exceptionp(e)) { if (!sexp_exceptionp(e)) {
#if SEXP_USE_MODULES #if SEXP_USE_MODULES
if (!bootp) { if (!bootp)
e = sexp_eval_string(ctx, sexp_default_environment, -1, sexp_global(ctx, SEXP_G_META_ENV)); e = sexp_eval_string(ctx, sexp_default_environment, -1, sexp_global(ctx, SEXP_G_META_ENV));
sym = sexp_intern(ctx, "repl-import", -1); sexp_add_import_binding(ctx, e);
tmp = sexp_env_ref(ctx, sexp_meta_env(ctx), sym, SEXP_VOID);
sym = sexp_intern(ctx, "import", -1);
sexp_env_define(ctx, e, sym, tmp);
}
#endif #endif
if (!sexp_exceptionp(e)) { if (!sexp_exceptionp(e))
e = sexp_load_standard_params(ctx, e); e = sexp_load_standard_params(ctx, e);
}
} }
sexp_gc_release3(ctx); sexp_gc_release1(ctx);
return e; return e;
} }
@ -452,8 +458,7 @@ void run_main (int argc, char **argv) {
suffix = sexp_import_suffix; suffix = sexp_import_suffix;
} }
mods_loaded = 1; mods_loaded = 1;
load_init(c == 'x'); /* only load the meta-env if we're */ load_init(c == 'x');
/* explicitly setting a language */
#if SEXP_USE_MODULES #if SEXP_USE_MODULES
check_nonull_arg(c, arg); check_nonull_arg(c, arg);
impmod = make_import(prefix, arg, suffix); impmod = make_import(prefix, arg, suffix);
@ -462,9 +467,11 @@ void run_main (int argc, char **argv) {
if (c == 'x') { if (c == 'x') {
sexp_set_parameter(ctx, sexp_global(ctx, SEXP_G_META_ENV), sexp_global(ctx, SEXP_G_INTERACTION_ENV_SYMBOL), tmp); sexp_set_parameter(ctx, sexp_global(ctx, SEXP_G_META_ENV), sexp_global(ctx, SEXP_G_INTERACTION_ENV_SYMBOL), tmp);
sexp_context_env(ctx) = env = tmp; sexp_context_env(ctx) = env = tmp;
sexp_add_import_binding(ctx, env);
tmp = sexp_param_ref(ctx, env, sexp_global(ctx, SEXP_G_CUR_OUT_SYMBOL)); tmp = sexp_param_ref(ctx, env, sexp_global(ctx, SEXP_G_CUR_OUT_SYMBOL));
if (tmp != NULL && !sexp_oportp(tmp)) if (tmp != NULL && !sexp_oportp(tmp)) {
sexp_load_standard_ports(ctx, env, stdin, stdout, stderr, 0); sexp_load_standard_ports(ctx, env, stdin, stdout, stderr, 0);
}
} }
#endif #endif
break; break;