- SCM name, code;
- if (SCM_TYP16 (exp) == scm_tc16_macro)
- {
- /* Printing a macro. */
- prinmacro:
- name = scm_macro_name (exp);
- if (!SCM_CLOSUREP (SCM_CDR (exp)))
- {
- code = 0;
- scm_gen_puts (scm_regular_string, "#<primitive-",
- port);
- }
- else
- {
- code = SCM_CODE (SCM_CDR (exp));
- scm_gen_puts (scm_regular_string, "#<", port);
- }
- if (SCM_CAR (exp) & (3L << 16))
- scm_gen_puts (scm_regular_string, "macro", port);
- else
- scm_gen_puts (scm_regular_string, "syntax", port);
- if (SCM_CAR (exp) & (2L << 16))
- scm_gen_putc ('!', port);
- }
- else
- {
- /* Printing a closure. */
- name = scm_procedure_name (exp);
- code = SCM_CODE (exp);
- scm_gen_puts (scm_regular_string, "#<procedure",
- port);
- }
- if (SCM_NIMP (name) && SCM_ROSTRINGP (name))
- {
- scm_gen_putc (' ', port);
- scm_gen_puts (scm_regular_string, SCM_ROCHARS (name), port);
- }
- if (code)
- {
- scm_gen_putc (' ', port);
- scm_iprin1 (SCM_CAR (code), port, pstate);
- }
- if (code && SCM_PRINT_SOURCE_P)
+ SCM formals = SCM_CLOSURE_FORMALS (exp);
+ scm_puts ("#<procedure", port);
+ scm_putc (' ', port);
+ scm_iprin1 (scm_procedure_name (exp), port, pstate);
+ scm_putc (' ', port);
+ if (SCM_PRINT_SOURCE_P)