mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 11:40:18 +02:00
* eval.c (sym_instead): New symbol.
(ENTER_APPLY): Remove optional use of a continuation when making trap call. (scm_debug_opts): Change doc for 'cheap option to make clear that it is now obsolete. (CEVAL, SCM_APPLY): Remove optional use of a continuation when making trap calls, and implement substitution of eval expressions and return values using the values that the trap call handlers return. * debug.h (SCM_CHEAPTRAPS_P): Removed.
This commit is contained in:
parent
69b45df38b
commit
7c9c0169b4
3 changed files with 42 additions and 85 deletions
|
@ -1,3 +1,17 @@
|
||||||
|
2005-11-04 Neil Jerram <neil@ossau.uklinux.net>
|
||||||
|
|
||||||
|
* eval.c (sym_instead): New symbol.
|
||||||
|
(ENTER_APPLY): Remove optional use of a continuation when making
|
||||||
|
trap call.
|
||||||
|
(scm_debug_opts): Change doc for 'cheap option to make clear that
|
||||||
|
it is now obsolete.
|
||||||
|
(CEVAL, SCM_APPLY): Remove optional use of a continuation when
|
||||||
|
making trap calls, and implement substitution of eval expressions
|
||||||
|
and return values using the values that the trap call handlers
|
||||||
|
return.
|
||||||
|
|
||||||
|
* debug.h (SCM_CHEAPTRAPS_P): Removed.
|
||||||
|
|
||||||
2005-10-27 Ludovic Courtès <ludovic.courtes@laas.fr>
|
2005-10-27 Ludovic Courtès <ludovic.courtes@laas.fr>
|
||||||
|
|
||||||
* socket.c (scm_fill_sockaddr): No need to check NULL from scm_malloc.
|
* socket.c (scm_fill_sockaddr): No need to check NULL from scm_malloc.
|
||||||
|
|
|
@ -44,7 +44,6 @@
|
||||||
|
|
||||||
SCM_API scm_t_option scm_debug_opts[];
|
SCM_API scm_t_option scm_debug_opts[];
|
||||||
|
|
||||||
#define SCM_CHEAPTRAPS_P scm_debug_opts[0].val
|
|
||||||
#define SCM_BREAKPOINTS_P scm_debug_opts[1].val
|
#define SCM_BREAKPOINTS_P scm_debug_opts[1].val
|
||||||
#define SCM_TRACE_P scm_debug_opts[2].val
|
#define SCM_TRACE_P scm_debug_opts[2].val
|
||||||
#define SCM_REC_PROCNAMES_P scm_debug_opts[3].val
|
#define SCM_REC_PROCNAMES_P scm_debug_opts[3].val
|
||||||
|
|
112
libguile/eval.c
112
libguile/eval.c
|
@ -2537,6 +2537,7 @@ SCM_GLOBAL_SYMBOL (scm_sym_enter_frame, "enter-frame");
|
||||||
SCM_GLOBAL_SYMBOL (scm_sym_apply_frame, "apply-frame");
|
SCM_GLOBAL_SYMBOL (scm_sym_apply_frame, "apply-frame");
|
||||||
SCM_GLOBAL_SYMBOL (scm_sym_exit_frame, "exit-frame");
|
SCM_GLOBAL_SYMBOL (scm_sym_exit_frame, "exit-frame");
|
||||||
SCM_GLOBAL_SYMBOL (scm_sym_trace, "trace");
|
SCM_GLOBAL_SYMBOL (scm_sym_trace, "trace");
|
||||||
|
SCM_SYMBOL (sym_instead, "instead");
|
||||||
|
|
||||||
/* A function object to implement "apply" for non-closure functions. */
|
/* A function object to implement "apply" for non-closure functions. */
|
||||||
static SCM f_apply;
|
static SCM f_apply;
|
||||||
|
@ -3008,18 +3009,8 @@ do { \
|
||||||
SCM tmp, tail = scm_from_bool(SCM_TRACED_FRAME_P (debug)); \
|
SCM tmp, tail = scm_from_bool(SCM_TRACED_FRAME_P (debug)); \
|
||||||
SCM_SET_TRACED_FRAME (debug); \
|
SCM_SET_TRACED_FRAME (debug); \
|
||||||
SCM_TRAPS_P = 0;\
|
SCM_TRAPS_P = 0;\
|
||||||
if (SCM_CHEAPTRAPS_P)\
|
tmp = scm_make_debugobj (&debug);\
|
||||||
{\
|
scm_call_3 (SCM_APPLY_FRAME_HDLR, scm_sym_apply_frame, tmp, tail);\
|
||||||
tmp = scm_make_debugobj (&debug);\
|
|
||||||
scm_call_3 (SCM_APPLY_FRAME_HDLR, scm_sym_apply_frame, tmp, tail);\
|
|
||||||
}\
|
|
||||||
else\
|
|
||||||
{\
|
|
||||||
int first;\
|
|
||||||
tmp = scm_make_continuation (&first);\
|
|
||||||
if (first)\
|
|
||||||
scm_call_3 (SCM_APPLY_FRAME_HDLR, scm_sym_apply_frame, tmp, tail);\
|
|
||||||
}\
|
|
||||||
SCM_TRAPS_P = 1;\
|
SCM_TRAPS_P = 1;\
|
||||||
}\
|
}\
|
||||||
} while (0)
|
} while (0)
|
||||||
|
@ -3059,7 +3050,7 @@ scm_t_option scm_eval_opts[] = {
|
||||||
|
|
||||||
scm_t_option scm_debug_opts[] = {
|
scm_t_option scm_debug_opts[] = {
|
||||||
{ SCM_OPTION_BOOLEAN, "cheap", 1,
|
{ SCM_OPTION_BOOLEAN, "cheap", 1,
|
||||||
"*Flyweight representation of the stack at traps." },
|
"*This option is now obsolete. Setting it has no effect." },
|
||||||
{ SCM_OPTION_BOOLEAN, "breakpoints", 0, "*Check for breakpoints." },
|
{ SCM_OPTION_BOOLEAN, "breakpoints", 0, "*Check for breakpoints." },
|
||||||
{ SCM_OPTION_BOOLEAN, "trace", 0, "*Trace mode." },
|
{ SCM_OPTION_BOOLEAN, "trace", 0, "*Trace mode." },
|
||||||
{ SCM_OPTION_BOOLEAN, "procnames", 1,
|
{ SCM_OPTION_BOOLEAN, "procnames", 1,
|
||||||
|
@ -3287,33 +3278,23 @@ start:
|
||||||
SCM stackrep;
|
SCM stackrep;
|
||||||
SCM tail = scm_from_bool (SCM_TAILRECP (debug));
|
SCM tail = scm_from_bool (SCM_TAILRECP (debug));
|
||||||
SCM_SET_TAILREC (debug);
|
SCM_SET_TAILREC (debug);
|
||||||
if (SCM_CHEAPTRAPS_P)
|
stackrep = scm_make_debugobj (&debug);
|
||||||
stackrep = scm_make_debugobj (&debug);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int first;
|
|
||||||
SCM val = scm_make_continuation (&first);
|
|
||||||
|
|
||||||
if (first)
|
|
||||||
stackrep = val;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
x = val;
|
|
||||||
if (SCM_IMP (x))
|
|
||||||
RETURN (x);
|
|
||||||
else
|
|
||||||
/* This gives the possibility for the debugger to
|
|
||||||
modify the source expression before evaluation. */
|
|
||||||
goto dispatch;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SCM_TRAPS_P = 0;
|
SCM_TRAPS_P = 0;
|
||||||
scm_call_4 (SCM_ENTER_FRAME_HDLR,
|
stackrep = scm_call_4 (SCM_ENTER_FRAME_HDLR,
|
||||||
scm_sym_enter_frame,
|
scm_sym_enter_frame,
|
||||||
stackrep,
|
stackrep,
|
||||||
tail,
|
tail,
|
||||||
unmemoize_expression (x, env));
|
unmemoize_expression (x, env));
|
||||||
SCM_TRAPS_P = 1;
|
SCM_TRAPS_P = 1;
|
||||||
|
if (scm_is_pair (stackrep) &&
|
||||||
|
scm_is_eq (SCM_CAR (stackrep), sym_instead))
|
||||||
|
{
|
||||||
|
/* This gives the possibility for the debugger to modify
|
||||||
|
the source expression before evaluation. */
|
||||||
|
x = SCM_CDR (stackrep);
|
||||||
|
if (SCM_IMP (x))
|
||||||
|
RETURN (x);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -4596,26 +4577,13 @@ exit:
|
||||||
if (SCM_EXIT_FRAME_P || (SCM_TRACE_P && SCM_TRACED_FRAME_P (debug)))
|
if (SCM_EXIT_FRAME_P || (SCM_TRACE_P && SCM_TRACED_FRAME_P (debug)))
|
||||||
{
|
{
|
||||||
SCM_CLEAR_TRACED_FRAME (debug);
|
SCM_CLEAR_TRACED_FRAME (debug);
|
||||||
if (SCM_CHEAPTRAPS_P)
|
arg1 = scm_make_debugobj (&debug);
|
||||||
arg1 = scm_make_debugobj (&debug);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int first;
|
|
||||||
SCM val = scm_make_continuation (&first);
|
|
||||||
|
|
||||||
if (first)
|
|
||||||
arg1 = val;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
proc = val;
|
|
||||||
goto ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SCM_TRAPS_P = 0;
|
SCM_TRAPS_P = 0;
|
||||||
scm_call_3 (SCM_EXIT_FRAME_HDLR, scm_sym_exit_frame, arg1, proc);
|
arg1 = scm_call_3 (SCM_EXIT_FRAME_HDLR, scm_sym_exit_frame, arg1, proc);
|
||||||
SCM_TRAPS_P = 1;
|
SCM_TRAPS_P = 1;
|
||||||
|
if (scm_is_pair (arg1) && scm_is_eq (SCM_CAR (arg1), sym_instead))
|
||||||
|
proc = SCM_CDR (arg1);
|
||||||
}
|
}
|
||||||
ret:
|
|
||||||
scm_i_set_last_debug_frame (debug.prev);
|
scm_i_set_last_debug_frame (debug.prev);
|
||||||
return proc;
|
return proc;
|
||||||
#endif
|
#endif
|
||||||
|
@ -4825,22 +4793,11 @@ SCM_APPLY (SCM proc, SCM arg1, SCM args)
|
||||||
#ifdef DEVAL
|
#ifdef DEVAL
|
||||||
if (SCM_ENTER_FRAME_P && SCM_TRAPS_P)
|
if (SCM_ENTER_FRAME_P && SCM_TRAPS_P)
|
||||||
{
|
{
|
||||||
SCM tmp;
|
SCM tmp = scm_make_debugobj (&debug);
|
||||||
if (SCM_CHEAPTRAPS_P)
|
|
||||||
tmp = scm_make_debugobj (&debug);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int first;
|
|
||||||
|
|
||||||
tmp = scm_make_continuation (&first);
|
|
||||||
if (!first)
|
|
||||||
goto entap;
|
|
||||||
}
|
|
||||||
SCM_TRAPS_P = 0;
|
SCM_TRAPS_P = 0;
|
||||||
scm_call_2 (SCM_ENTER_FRAME_HDLR, scm_sym_enter_frame, tmp);
|
scm_call_2 (SCM_ENTER_FRAME_HDLR, scm_sym_enter_frame, tmp);
|
||||||
SCM_TRAPS_P = 1;
|
SCM_TRAPS_P = 1;
|
||||||
}
|
}
|
||||||
entap:
|
|
||||||
ENTER_APPLY;
|
ENTER_APPLY;
|
||||||
#endif
|
#endif
|
||||||
tail:
|
tail:
|
||||||
|
@ -5056,26 +5013,13 @@ exit:
|
||||||
if (SCM_EXIT_FRAME_P || (SCM_TRACE_P && SCM_TRACED_FRAME_P (debug)))
|
if (SCM_EXIT_FRAME_P || (SCM_TRACE_P && SCM_TRACED_FRAME_P (debug)))
|
||||||
{
|
{
|
||||||
SCM_CLEAR_TRACED_FRAME (debug);
|
SCM_CLEAR_TRACED_FRAME (debug);
|
||||||
if (SCM_CHEAPTRAPS_P)
|
arg1 = scm_make_debugobj (&debug);
|
||||||
arg1 = scm_make_debugobj (&debug);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int first;
|
|
||||||
SCM val = scm_make_continuation (&first);
|
|
||||||
|
|
||||||
if (first)
|
|
||||||
arg1 = val;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
proc = val;
|
|
||||||
goto ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SCM_TRAPS_P = 0;
|
SCM_TRAPS_P = 0;
|
||||||
scm_call_3 (SCM_EXIT_FRAME_HDLR, scm_sym_exit_frame, arg1, proc);
|
arg1 = scm_call_3 (SCM_EXIT_FRAME_HDLR, scm_sym_exit_frame, arg1, proc);
|
||||||
SCM_TRAPS_P = 1;
|
SCM_TRAPS_P = 1;
|
||||||
|
if (scm_is_pair (arg1) && scm_is_eq (SCM_CAR (arg1), sym_instead))
|
||||||
|
proc = SCM_CDR (arg1);
|
||||||
}
|
}
|
||||||
ret:
|
|
||||||
scm_i_set_last_debug_frame (debug.prev);
|
scm_i_set_last_debug_frame (debug.prev);
|
||||||
return proc;
|
return proc;
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue