1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-11 14:21:10 +02:00

* procprop.h: Added declaration of scm_i_inner_name.

* gsubr.c: New global symbol scm_i_inner_name.

* debug.c (scm_procedure_name): Try procedure property
`inner-name' if `name' fails.

* print.c (scm_iprin1): Use scm_macro_name.

* eval.c (scm_m_define): Give names to macros as well; Only the
first top-level definition gives a procedure/macro a name.
Otherwise confusing names can turn up in backtraces.
(SCM_CEVAL): SCM_IM_DEFINE: Set `inner-name' property instead of
`name'; Give names to macros as well.

* procs.c (scm_closure_p), print.c (scm_iprin1), eval.c
(scm_macro_transformer): Use SCM_CLOSUREP instead of
scm_closure_p.
This commit is contained in:
Mikael Djurfeldt 1997-09-11 00:09:57 +00:00
parent 2c63000098
commit 80ea260cdf
7 changed files with 64 additions and 17 deletions

View file

@ -1,3 +1,24 @@
Thu Sep 11 00:59:17 1997 Mikael Djurfeldt <mdj@mdj.nada.kth.se>
* procprop.h: Added declaration of scm_i_inner_name.
* gsubr.c: New global symbol scm_i_inner_name.
* debug.c (scm_procedure_name): Try procedure property
`inner-name' if `name' fails.
* print.c (scm_iprin1): Use scm_macro_name.
* eval.c (scm_m_define): Give names to macros as well; Only the
first top-level definition gives a procedure/macro a name.
Otherwise confusing names can turn up in backtraces.
(SCM_CEVAL): SCM_IM_DEFINE: Set `inner-name' property instead of
`name'; Give names to macros as well.
* procs.c (scm_closure_p), print.c (scm_iprin1), eval.c
(scm_macro_transformer): Use SCM_CLOSUREP instead of
scm_closure_p.
Wed Sep 10 20:52:18 1997 Mikael Djurfeldt <mdj@mdj.nada.kth.se> Wed Sep 10 20:52:18 1997 Mikael Djurfeldt <mdj@mdj.nada.kth.se>
* * eval.c (macro?, macro-type, macro-name, macro-transfomer): New * * eval.c (macro?, macro-type, macro-name, macro-transfomer): New

View file

@ -214,11 +214,13 @@ scm_procedure_name (proc)
{ {
SCM name = scm_procedure_property (proc, scm_i_name); SCM name = scm_procedure_property (proc, scm_i_name);
#if 0 #if 0
/* Procedure property scm_i_procname not implemented yet... */ /* Source property scm_i_procname not implemented yet... */
SCM name = scm_source_property (SCM_CAR (SCM_CDR (SCM_CODE (proc))), scm_i_procname); SCM name = scm_source_property (SCM_CAR (SCM_CDR (SCM_CODE (proc))), scm_i_procname);
if (SCM_FALSEP (name)) if (SCM_FALSEP (name))
name = scm_procedure_property (proc, scm_i_name); name = scm_procedure_property (proc, scm_i_name);
#endif #endif
if (SCM_FALSEP (name))
name = scm_procedure_property (proc, scm_i_inner_name);
return name; return name;
} }
case scm_tcs_subrs: case scm_tcs_subrs:

View file

@ -879,8 +879,21 @@ scm_m_define (x, env)
{ {
x = evalcar (x, env); x = evalcar (x, env);
#ifdef DEBUG_EXTENSIONS #ifdef DEBUG_EXTENSIONS
if (SCM_REC_PROCNAMES_P && SCM_NIMP (x) && SCM_CLOSUREP (x)) if (SCM_REC_PROCNAMES_P && SCM_NIMP (x))
scm_set_procedure_property_x (x, scm_i_name, proc); {
arg1 = x;
proc:
if (SCM_CLOSUREP (arg1)
/* Only the first definition determines the name. */
&& scm_procedure_property (arg1, scm_i_name) == SCM_BOOL_F)
scm_set_procedure_property_x (arg1, scm_i_name, proc);
else if (SCM_TYP16 (arg1) == scm_tc16_macro
&& SCM_CDR (arg1) != arg1)
{
arg1 = SCM_CDR (arg1);
goto proc;
}
}
#endif #endif
arg1 = scm_sym2vcell (proc, env_top_level (env), SCM_BOOL_T); arg1 = scm_sym2vcell (proc, env_top_level (env), SCM_BOOL_T);
#if 0 #if 0
@ -1818,8 +1831,22 @@ dispatch:
x = SCM_CDR (x); x = SCM_CDR (x);
x = evalcar (x, env); x = evalcar (x, env);
#ifdef DEBUG_EXTENSIONS #ifdef DEBUG_EXTENSIONS
if (SCM_REC_PROCNAMES_P && SCM_NIMP (x) && SCM_CLOSUREP (x)) if (SCM_REC_PROCNAMES_P && SCM_NIMP (x))
scm_set_procedure_property_x (x, scm_i_name, proc); {
t.arg1 = x;
proc:
if (SCM_CLOSUREP (t.arg1)
/* Only the first definition determines the name. */
&& (scm_procedure_property (t.arg1, scm_i_inner_name)
== SCM_BOOL_F))
scm_set_procedure_property_x (t.arg1, scm_i_inner_name, proc);
else if (SCM_TYP16 (t.arg1) == scm_tc16_macro
&& SCM_CDR (t.arg1) != t.arg1)
{
t.arg1 = SCM_CDR (t.arg1);
goto proc;
}
}
#endif #endif
env = SCM_CAR (env); env = SCM_CAR (env);
SCM_DEFER_INTS; SCM_DEFER_INTS;
@ -2983,7 +3010,7 @@ scm_macro_transformer (m)
m, m,
SCM_ARG1, SCM_ARG1,
s_macro_transformer); s_macro_transformer);
return SCM_NFALSEP (scm_closure_p (SCM_CDR (m))) ? SCM_CDR (m) : SCM_BOOL_F; return SCM_CLOSUREP (SCM_CDR (m)) ? SCM_CDR (m) : SCM_BOOL_F;
} }

View file

@ -67,6 +67,7 @@
#define GSUBR_PROC(cclo) (SCM_VELTS(cclo)[2]) #define GSUBR_PROC(cclo) (SCM_VELTS(cclo)[2])
SCM scm_i_name; SCM scm_i_name;
SCM scm_i_inner_name;
static SCM f_gsubr_apply; static SCM f_gsubr_apply;
SCM SCM
@ -192,6 +193,8 @@ scm_init_gsubr()
f_gsubr_apply = scm_make_subr(s_gsubr_apply, scm_tc7_lsubr, scm_gsubr_apply); f_gsubr_apply = scm_make_subr(s_gsubr_apply, scm_tc7_lsubr, scm_gsubr_apply);
scm_i_name = SCM_CAR (scm_sysintern ("name", SCM_UNDEFINED)); scm_i_name = SCM_CAR (scm_sysintern ("name", SCM_UNDEFINED));
scm_permanent_object (scm_i_name); scm_permanent_object (scm_i_name);
scm_i_inner_name = SCM_CAR (scm_sysintern ("inner-name", SCM_UNDEFINED));
scm_permanent_object (scm_i_inner_name);
#ifdef GSUBR_TEST #ifdef GSUBR_TEST
scm_make_gsubr("gsubr-2-1-l", 2, 1, 1, gsubr_21l); /* example */ scm_make_gsubr("gsubr-2-1-l", 2, 1, 1, gsubr_21l); /* example */
#endif #endif

View file

@ -348,7 +348,7 @@ taloop:
print_circref (port, pstate, exp); print_circref (port, pstate, exp);
break; break;
macros: macros:
if (SCM_FALSEP (scm_closure_p (SCM_CDR (exp)))) if (!SCM_CLOSUREP (SCM_CDR (exp)))
goto prinmacro; goto prinmacro;
case scm_tcs_closures: case scm_tcs_closures:
/* The user supplied print closure procedure must handle /* The user supplied print closure procedure must handle
@ -369,8 +369,8 @@ taloop:
{ {
/* Printing a macro. */ /* Printing a macro. */
prinmacro: prinmacro:
name = scm_procedure_name (SCM_CDR (exp)); name = scm_macro_name (exp);
if (SCM_FALSEP (scm_closure_p (SCM_CDR (exp)))) if (!SCM_CLOSUREP (SCM_CDR (exp)))
{ {
code = 0; code = 0;
scm_gen_puts (scm_regular_string, "#<primitive-", scm_gen_puts (scm_regular_string, "#<primitive-",

View file

@ -49,6 +49,7 @@
extern SCM scm_i_name; extern SCM scm_i_name;
extern SCM scm_i_inner_name;

View file

@ -147,14 +147,7 @@ SCM
scm_closure_p (obj) scm_closure_p (obj)
SCM obj; SCM obj;
{ {
if (SCM_NIMP (obj)) return SCM_NIMP (obj) && SCM_CLOSUREP (obj) ? SCM_BOOL_T : SCM_BOOL_F;
switch (SCM_TYP7 (obj))
{
case scm_tcs_closures:
return SCM_BOOL_T;
default: ;
}
return SCM_BOOL_F;
} }
SCM_PROC(s_thunk_p, "thunk?", 1, 0, 0, scm_thunk_p); SCM_PROC(s_thunk_p, "thunk?", 1, 0, 0, scm_thunk_p);