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:
parent
2c63000098
commit
80ea260cdf
7 changed files with 64 additions and 17 deletions
|
@ -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
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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-",
|
||||||
|
|
|
@ -49,6 +49,7 @@
|
||||||
|
|
||||||
|
|
||||||
extern SCM scm_i_name;
|
extern SCM scm_i_name;
|
||||||
|
extern SCM scm_i_inner_name;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue