mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-20 06:09:18 +02:00
preserving file names during load in main
This commit is contained in:
parent
d6b850b5aa
commit
d374a7e185
1 changed files with 9 additions and 5 deletions
14
main.c
14
main.c
|
@ -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) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue