summaryrefslogtreecommitdiff
path: root/libguile/procprop.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2013-05-05 18:26:53 +0200
committerAndy Wingo <wingo@pobox.com>2013-06-09 19:52:10 +0200
commite65f80af42aefe13fe870b92b912cfd0156a1ac1 (patch)
tree483f3286e99848cd89a995c085c598920604b8e9 /libguile/procprop.c
parente2cbf527c48fba803ef0bada712c5514f45ec4e4 (diff)
downloadguile-e65f80af42aefe13fe870b92b912cfd0156a1ac1.tar.gz
RTL programs print with their name
* libguile/print.c (iprin1): Use scm_i_program_print for RTL programs too. * libguile/procprop.c (scm_procedure_name): For RTL programs, call scm_i_rtl_program_name if there is no override. * libguile/programs.h: * libguile/programs.c (scm_i_rtl_program_name): New helper, dispatches to (system vm program). (scm_i_program_print): For RTL programs, the fallback prints the code pointer too. * module/system/vm/program.scm (rtl-program-name): Use the debug info to get an RTL program name. (write-program): Work with RTL programs too. * test-suite/tests/rtl.test ("procedure name"): Add test.
Diffstat (limited to 'libguile/procprop.c')
-rw-r--r--libguile/procprop.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/libguile/procprop.c b/libguile/procprop.c
index 472a1cabd..480970266 100644
--- a/libguile/procprop.c
+++ b/libguile/procprop.c
@@ -223,10 +223,25 @@ SCM_DEFINE (scm_procedure_name, "procedure-name", 1, 0, 0,
"Return the name of the procedure @var{proc}")
#define FUNC_NAME s_scm_procedure_name
{
+ SCM props, ret;
+
SCM_VALIDATE_PROC (1, proc);
+
while (SCM_STRUCTP (proc) && SCM_STRUCT_APPLICABLE_P (proc))
proc = SCM_STRUCT_PROCEDURE (proc);
- return scm_procedure_property (proc, scm_sym_name);
+
+ props = scm_weak_table_refq (overrides, proc, SCM_BOOL_F);
+
+ if (scm_is_pair (props))
+ ret = scm_assq_ref (props, scm_sym_name);
+ else if (SCM_RTL_PROGRAM_P (proc))
+ ret = scm_i_rtl_program_name (proc);
+ else if (SCM_PROGRAM_P (proc))
+ ret = scm_assq_ref (scm_i_program_properties (proc), scm_sym_name);
+ else
+ ret = SCM_BOOL_F;
+
+ return ret;
}
#undef FUNC_NAME