* backtrace.c (display_expression, display_frame): Call
scm_i_unmemoize_expr for unmemoizing a memoized object holding a single memoized expression. * debug.c (memoized_print): Don't try to unmemoize the memoized object, since we can't know whether it holds a single expression or a body. (scm_mem_to_proc): Removed check for lambda expression, since it was moot anyway. Whoever uses these functions for debugging purposes should know what they do: Creating invalid memoized code will cause crashes, independent of whether this check is present or not. (scm_proc_to_mem): Take the closure's code as it is and don't append a SCM_IM_LAMBDA isym. To allow easier debugging, the memoized code should not be modified. * debug.[ch] (scm_unmemoize, scm_i_unmemoize_expr): Removed scm_unmemoize from public use, but made scm_i_unmemoize_expr available as a guile internal function instead. However, scm_i_unmemoize_expr will only work on memoized objects that hold a single memoized expression. It won't work with bodies. * debug.c (scm_procedure_source), macros.c (macro_print), print.c (scm_iprin1): Call scm_i_unmemocopy_body for unmemoizing a body, i. e. a list of expressions. * eval.c (unmemoize_exprs): Drop internal body markers from the output during unmemoization. * eval.[ch] (scm_unmemocopy, scm_i_unmemocopy_expr, scm_i_unmemocopy_body): Removed scm_unmemocopy from public use, but made scm_i_unmemocopy_expr and scm_i_unmemocopy_body available as guile internal functions instead. scm_i_unmemoize_expr will only work on a single memoized expression, while scm_i_unmemocopy_body will only work on bodies.
This commit is contained in:
parent
90df793f67
commit
9fcf3cbb81
9 changed files with 98 additions and 36 deletions
|
|
@ -128,7 +128,6 @@ SCM_API SCM scm_sym_args;
|
|||
|
||||
SCM_API SCM * scm_ilookup (SCM iloc, SCM env);
|
||||
SCM_API SCM * scm_lookupcar (SCM vloc, SCM genv, int check);
|
||||
SCM_API SCM scm_unmemocopy (SCM form, SCM env);
|
||||
SCM_API SCM scm_eval_car (SCM pair, SCM env);
|
||||
SCM_API SCM scm_eval_body (SCM code, SCM env);
|
||||
SCM_API SCM scm_eval_args (SCM i, SCM env, SCM proc);
|
||||
|
|
@ -197,6 +196,8 @@ SCM_API SCM scm_eval_x (SCM exp, SCM module);
|
|||
|
||||
SCM_API void scm_i_print_iloc (SCM /*iloc*/, SCM /*port*/);
|
||||
SCM_API void scm_i_print_isym (SCM /*isym*/, SCM /*port*/);
|
||||
SCM_API SCM scm_i_unmemocopy_expr (SCM expr, SCM env);
|
||||
SCM_API SCM scm_i_unmemocopy_body (SCM forms, SCM env);
|
||||
SCM_API void scm_init_eval (void);
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue