mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-07-07 13:16:36 +02:00
Adding auto-trace feature with -t<module>.<identifier>.
This commit is contained in:
parent
02205669d7
commit
fbaed38714
2 changed files with 24 additions and 0 deletions
|
@ -28,6 +28,9 @@ chibi-scheme \- a tiny Scheme interpreter
|
||||||
[-p
|
[-p
|
||||||
.I expr
|
.I expr
|
||||||
]
|
]
|
||||||
|
[-t
|
||||||
|
.I module.id
|
||||||
|
]
|
||||||
[-d
|
[-d
|
||||||
.I image-file
|
.I image-file
|
||||||
]
|
]
|
||||||
|
@ -171,6 +174,12 @@ Evaluates the Scheme expression
|
||||||
.I expr
|
.I expr
|
||||||
then prints the result to stdout.
|
then prints the result to stdout.
|
||||||
.TP
|
.TP
|
||||||
|
.BI -t module.id
|
||||||
|
Enables tracing for the given identifier
|
||||||
|
.I id
|
||||||
|
in the module
|
||||||
|
.I module.
|
||||||
|
.TP
|
||||||
.BI -d image-file
|
.BI -d image-file
|
||||||
Dumps the current Scheme heap to
|
Dumps the current Scheme heap to
|
||||||
.I image-file
|
.I image-file
|
||||||
|
|
15
main.c
15
main.c
|
@ -529,6 +529,21 @@ void run_main (int argc, char **argv) {
|
||||||
case 's':
|
case 's':
|
||||||
init_context(); sexp_global(ctx, SEXP_G_STRICT_P) = SEXP_TRUE;
|
init_context(); sexp_global(ctx, SEXP_G_STRICT_P) = SEXP_TRUE;
|
||||||
break;
|
break;
|
||||||
|
case 't':
|
||||||
|
mods_loaded = 1;
|
||||||
|
load_init(0);
|
||||||
|
arg = ((argv[i][2] == '\0') ? argv[++i] : argv[i]+2);
|
||||||
|
suffix = strrchr(arg, '.');
|
||||||
|
sym = sexp_intern(ctx, suffix + 1, -1);
|
||||||
|
*(char*)suffix = '\0';
|
||||||
|
impmod = make_import(sexp_environment_prefix, arg, sexp_environment_suffix);
|
||||||
|
tmp = check_exception(ctx, sexp_eval_string(ctx, impmod, -1, sexp_meta_env(ctx)));
|
||||||
|
free(impmod);
|
||||||
|
sym = sexp_list1(ctx, sexp_env_cell(ctx, tmp, sym, 0));
|
||||||
|
tmp = check_exception(ctx, sexp_eval_string(ctx, "(environment '(chibi trace))", -1, sexp_meta_env(ctx)));
|
||||||
|
tmp = sexp_env_ref(ctx, tmp, sexp_intern(ctx, "trace-cell", -1), 0);
|
||||||
|
check_exception(ctx, sexp_apply(ctx, tmp, sym));
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "unknown option: %s\n", argv[i]);
|
fprintf(stderr, "unknown option: %s\n", argv[i]);
|
||||||
/* ... FALLTHROUGH ... */
|
/* ... FALLTHROUGH ... */
|
||||||
|
|
Loading…
Add table
Reference in a new issue