preserving file names during load in main

This commit is contained in:
Alex Shinn 2009-06-14 23:49:39 +09:00
parent d6b850b5aa
commit d374a7e185

14
main.c
View file

@ -37,8 +37,10 @@ void repl (sexp ctx) {
void run_main (int argc, char **argv) { void run_main (int argc, char **argv) {
sexp env, out=NULL, res, ctx, perr_cell, err_cell, err_handler; sexp env, out=NULL, res, ctx, perr_cell, err_cell, err_handler;
sexp_uint_t i, quit=0, init_loaded=0; sexp_uint_t i, quit=0, init_loaded=0;
sexp_gc_var(ctx, str, s_str);
ctx = sexp_make_context(NULL, NULL, NULL); ctx = sexp_make_context(NULL, NULL, NULL);
sexp_gc_preserve(ctx, str, s_str);
env = sexp_context_env(ctx); env = sexp_context_env(ctx);
env_define(ctx, env, the_interaction_env_symbol, env); env_define(ctx, env, the_interaction_env_symbol, env);
out = env_global_ref(env, the_cur_out_symbol, SEXP_FALSE); out = env_global_ref(env, the_cur_out_symbol, SEXP_FALSE);
@ -69,7 +71,7 @@ void run_main (int argc, char **argv) {
case 'e': case 'e':
case 'p': case 'p':
if (! init_loaded++) if (! init_loaded++)
sexp_load(ctx, sexp_c_string(ctx, sexp_init_file, -1), env); sexp_load(ctx, str=sexp_c_string(ctx, sexp_init_file, -1), env);
res = sexp_read_from_string(ctx, argv[i+1]); res = sexp_read_from_string(ctx, argv[i+1]);
if (! sexp_exceptionp(res)) if (! sexp_exceptionp(res))
res = eval_in_context(ctx, res); res = eval_in_context(ctx, res);
@ -85,8 +87,8 @@ void run_main (int argc, char **argv) {
#endif #endif
case 'l': case 'l':
if (! init_loaded++) if (! init_loaded++)
sexp_load(ctx, sexp_c_string(ctx, sexp_init_file, -1), env); sexp_load(ctx, str=sexp_c_string(ctx, sexp_init_file, -1), env);
sexp_load(ctx, sexp_c_string(ctx, argv[++i], -1), env); sexp_load(ctx, str=sexp_c_string(ctx, argv[++i], -1), env);
break; break;
case 'q': case 'q':
init_loaded = 1; init_loaded = 1;
@ -98,13 +100,15 @@ void run_main (int argc, char **argv) {
if (! quit) { if (! quit) {
if (! init_loaded) if (! init_loaded)
sexp_load(ctx, sexp_c_string(ctx, sexp_init_file, -1), env); sexp_load(ctx, str=sexp_c_string(ctx, sexp_init_file, -1), env);
if (i < argc) if (i < argc)
for ( ; i < argc; i++) for ( ; i < argc; i++)
sexp_load(ctx, sexp_c_string(ctx, argv[i], -1), env); sexp_load(ctx, str=sexp_c_string(ctx, argv[i], -1), env);
else else
repl(ctx); repl(ctx);
} }
sexp_gc_release(ctx, str, s_str);
} }
int main (int argc, char **argv) { int main (int argc, char **argv) {