summaryrefslogtreecommitdiff
path: root/libguile/macros.c
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2009-03-22 15:28:35 +0100
committerLudovic Courtès <ludo@gnu.org>2009-03-22 15:28:35 +0100
commitd9e59f894e1b41958203ddda7f21f4817cfcfe37 (patch)
treef0d6b0b38ed000aabf327dba4e281c37c60f92a5 /libguile/macros.c
parentf307fbcec2cbaaa95b8c861395133b519c7519cf (diff)
parent80540f391498ebb0f955db2fafb6a36ed03b7886 (diff)
downloadguile-d9e59f894e1b41958203ddda7f21f4817cfcfe37.tar.gz
Merge branch 'master' into boehm-demers-weiser-gc
Conflicts: libguile/continuations.c libguile/gc-freelist.c libguile/gc-mark.c libguile/symbols.c libguile/threads.c module/ice-9/boot-9.scm
Diffstat (limited to 'libguile/macros.c')
-rw-r--r--libguile/macros.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/libguile/macros.c b/libguile/macros.c
index e8899f5a0..076b72dbb 100644
--- a/libguile/macros.c
+++ b/libguile/macros.c
@@ -31,6 +31,7 @@
#include "libguile/deprecation.h"
#include "libguile/validate.h"
+#include "libguile/programs.h"
#include "libguile/macros.h"
#include "libguile/private-options.h"
@@ -47,7 +48,7 @@ macro_print (SCM macro, SCM port, scm_print_state *pstate)
|| scm_is_false (scm_printer_apply (SCM_PRINT_CLOSURE,
macro, port, pstate)))
{
- if (!SCM_CLOSUREP (code))
+ if (!SCM_CLOSUREP (code) && !SCM_PROGRAM_P (code))
scm_puts ("#<primitive-", port);
else
scm_puts ("#<", port);
@@ -223,9 +224,15 @@ SCM_DEFINE (scm_macro_transformer, "macro-transformer", 1, 0, 0,
"Return the transformer of the macro @var{m}.")
#define FUNC_NAME s_scm_macro_transformer
{
+ SCM data;
+
SCM_VALIDATE_SMOB (1, m, macro);
- return ((SCM_CLOSUREP (SCM_PACK (SCM_SMOB_DATA (m)))) ?
- SCM_PACK(SCM_SMOB_DATA (m)) : SCM_BOOL_F);
+ data = SCM_PACK (SCM_SMOB_DATA (m));
+
+ if (SCM_CLOSUREP (data) || SCM_PROGRAM_P (data))
+ return data;
+ else
+ return SCM_BOOL_F;
}
#undef FUNC_NAME