summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libguile/debug.c2
-rw-r--r--libguile/evalext.c2
-rw-r--r--libguile/gc.c4
-rw-r--r--libguile/goops.c1
-rw-r--r--libguile/hash.c4
-rw-r--r--libguile/pairs.c211
-rw-r--r--libguile/pairs.h89
-rw-r--r--libguile/print.c2
-rw-r--r--libguile/procprop.c3
-rw-r--r--libguile/procs.c6
-rw-r--r--libguile/tags.h3
-rw-r--r--libguile/vm.c3
12 files changed, 173 insertions, 157 deletions
diff --git a/libguile/debug.c b/libguile/debug.c
index 91eef165b..0310ffbe1 100644
--- a/libguile/debug.c
+++ b/libguile/debug.c
@@ -138,7 +138,7 @@ SCM_DEFINE (scm_procedure_name, "procedure-name", 1, 0, 0,
{
SCM_VALIDATE_PROC (1, proc);
switch (SCM_TYP7 (proc)) {
- case scm_tcs_subrs:
+ case scm_tc7_gsubr:
return SCM_SUBR_NAME (proc);
default:
{
diff --git a/libguile/evalext.c b/libguile/evalext.c
index 78b666f65..1d5aa9319 100644
--- a/libguile/evalext.c
+++ b/libguile/evalext.c
@@ -84,7 +84,7 @@ SCM_DEFINE (scm_self_evaluating_p, "self-evaluating?", 1, 0, 0,
case scm_tc7_pws:
case scm_tc7_program:
case scm_tc7_bytevector:
- case scm_tcs_subrs:
+ case scm_tc7_gsubr:
case scm_tcs_struct:
return SCM_BOOL_T;
default:
diff --git a/libguile/gc.c b/libguile/gc.c
index a0715f084..15f424ab3 100644
--- a/libguile/gc.c
+++ b/libguile/gc.c
@@ -795,8 +795,8 @@ scm_i_tag_name (scm_t_bits tag)
case scm_tc7_variable:
return "variable";
break;
- case scm_tcs_subrs:
- return "subrs";
+ case scm_tc7_gsubr:
+ return "gsubr";
break;
case scm_tc7_port:
return "port";
diff --git a/libguile/goops.c b/libguile/goops.c
index 4fa5ef3a3..76ca14b28 100644
--- a/libguile/goops.c
+++ b/libguile/goops.c
@@ -225,7 +225,6 @@ SCM_DEFINE (scm_class_of, "class-of", 1, 0, 0,
case scm_tc16_fraction:
return scm_class_fraction;
}
- case scm_tc7_cxr:
case scm_tc7_gsubr:
if (SCM_SUBR_GENERIC (x) && *SCM_SUBR_GENERIC (x))
return scm_class_primitive_generic;
diff --git a/libguile/hash.c b/libguile/hash.c
index e6e38ba50..e352b1c25 100644
--- a/libguile/hash.c
+++ b/libguile/hash.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995,1996,1997, 2000, 2001, 2003, 2004, 2006, 2008 Free Software Foundation, Inc.
+/* Copyright (C) 1995,1996,1997, 2000, 2001, 2003, 2004, 2006, 2008, 2009 Free Software Foundation, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
@@ -170,7 +170,7 @@ scm_hasher(SCM obj, unsigned long n, size_t d)
case scm_tc7_port:
return ((SCM_RDNG & SCM_CELL_WORD_0 (obj)) ? 260 : 261) % n;
case scm_tcs_closures:
- case scm_tcs_subrs:
+ case scm_tc7_gsubr:
return 262 % n;
}
}
diff --git a/libguile/pairs.c b/libguile/pairs.c
index fb8b21f11..68fa4c901 100644
--- a/libguile/pairs.c
+++ b/libguile/pairs.c
@@ -96,36 +96,6 @@ SCM_DEFINE (scm_pair_p, "pair?", 1, 0, 0,
}
#undef FUNC_NAME
-SCM
-scm_car (SCM pair)
-{
- if (!scm_is_pair (pair))
- scm_wrong_type_arg_msg (NULL, 0, pair, "pair");
- return SCM_CAR (pair);
-}
-
-SCM
-scm_cdr (SCM pair)
-{
- if (!scm_is_pair (pair))
- scm_wrong_type_arg_msg (NULL, 0, pair, "pair");
- return SCM_CDR (pair);
-}
-
-SCM
-scm_i_chase_pairs (SCM tree, scm_t_uint32 pattern)
-{
- do
- {
- if (!scm_is_pair (tree))
- scm_wrong_type_arg_msg (NULL, 0, tree, "pair");
- tree = (pattern & 1) ? SCM_CAR (tree) : SCM_CDR (tree);
- pattern >>= 2;
- }
- while (pattern);
- return tree;
-}
-
SCM_DEFINE (scm_set_car_x, "set-car!", 2, 0, 0,
(SCM pair, SCM value),
"Stores @var{value} in the car field of @var{pair}. The value returned\n"
@@ -159,59 +129,146 @@ SCM_DEFINE (scm_set_cdr_x, "set-cdr!", 2, 0, 0,
* two bits is only needed to indicate when cxr-ing is ready. This is the
* case, when all remaining pairs of bits equal 00. */
-typedef struct {
- const char *name;
- unsigned char pattern;
-} t_cxr;
-
-static const t_cxr cxrs[] =
-{
- {"cdr", 0x02}, /* 00000010 */
- {"car", 0x03}, /* 00000011 */
- {"cddr", 0x0a}, /* 00001010 */
- {"cdar", 0x0b}, /* 00001011 */
- {"cadr", 0x0e}, /* 00001110 */
- {"caar", 0x0f}, /* 00001111 */
- {"cdddr", 0x2a}, /* 00101010 */
- {"cddar", 0x2b}, /* 00101011 */
- {"cdadr", 0x2e}, /* 00101110 */
- {"cdaar", 0x2f}, /* 00101111 */
- {"caddr", 0x3a}, /* 00111010 */
- {"cadar", 0x3b}, /* 00111011 */
- {"caadr", 0x3e}, /* 00111110 */
- {"caaar", 0x3f}, /* 00111111 */
- {"cddddr", 0xaa}, /* 10101010 */
- {"cdddar", 0xab}, /* 10101011 */
- {"cddadr", 0xae}, /* 10101110 */
- {"cddaar", 0xaf}, /* 10101111 */
- {"cdaddr", 0xba}, /* 10111010 */
- {"cdadar", 0xbb}, /* 10111011 */
- {"cdaadr", 0xbe}, /* 10111110 */
- {"cdaaar", 0xbf}, /* 10111111 */
- {"cadddr", 0xea}, /* 11101010 */
- {"caddar", 0xeb}, /* 11101011 */
- {"cadadr", 0xee}, /* 11101110 */
- {"cadaar", 0xef}, /* 11101111 */
- {"caaddr", 0xfa}, /* 11111010 */
- {"caadar", 0xfb}, /* 11111011 */
- {"caaadr", 0xfe}, /* 11111110 */
- {"caaaar", 0xff}, /* 11111111 */
- {0, 0}
-};
+/* The compiler should unroll this. */
+#define CHASE_PAIRS(tree, FUNC_NAME, pattern) \
+ scm_t_uint32 pattern_var = pattern; \
+ do \
+ { \
+ if (!scm_is_pair (tree)) \
+ scm_wrong_type_arg_msg (FUNC_NAME, 0, tree, "pair"); \
+ tree = (pattern_var & 1) ? SCM_CAR (tree) : SCM_CDR (tree); \
+ pattern_var >>= 2; \
+ } \
+ while (pattern_var); \
+ return tree
+
+
+SCM_DEFINE (scm_cdr, "cdr", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "cdr", 0x02); /* 00000010 */
+}
+SCM_DEFINE (scm_car, "car", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "car", 0x03); /* 00000011 */
+}
+SCM_DEFINE (scm_cddr, "cddr", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "cddr", 0x0a); /* 00001010 */
+}
+SCM_DEFINE (scm_cdar, "cdar", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "cdar", 0x0b); /* 00001011 */
+}
+SCM_DEFINE (scm_cadr, "cadr", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "cadr", 0x0e); /* 00001110 */
+}
+SCM_DEFINE (scm_caar, "caar", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "caar", 0x0f); /* 00001111 */
+}
+SCM_DEFINE (scm_cdddr, "cdddr", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "cdddr", 0x2a); /* 00101010 */
+}
+SCM_DEFINE (scm_cddar, "cddar", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "cddar", 0x2b); /* 00101011 */
+}
+SCM_DEFINE (scm_cdadr, "cdadr", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "cdadr", 0x2e); /* 00101110 */
+}
+SCM_DEFINE (scm_cdaar, "cdaar", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "cdaar", 0x2f); /* 00101111 */
+}
+SCM_DEFINE (scm_caddr, "caddr", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "caddr", 0x3a); /* 00111010 */
+}
+SCM_DEFINE (scm_cadar, "cadar", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "cadar", 0x3b); /* 00111011 */
+}
+SCM_DEFINE (scm_caadr, "caadr", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "caadr", 0x3e); /* 00111110 */
+}
+SCM_DEFINE (scm_caaar, "caaar", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "caaar", 0x3f); /* 00111111 */
+}
+SCM_DEFINE (scm_cddddr, "cddddr", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "cddddr", 0xaa); /* 10101010 */
+}
+SCM_DEFINE (scm_cdddar, "cdddar", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "cdddar", 0xab); /* 10101011 */
+}
+SCM_DEFINE (scm_cddadr, "cddadr", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "cddadr", 0xae); /* 10101110 */
+}
+SCM_DEFINE (scm_cddaar, "cddaar", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "cddaar", 0xaf); /* 10101111 */
+}
+SCM_DEFINE (scm_cdaddr, "cdaddr", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "cdaddr", 0xba); /* 10111010 */
+}
+SCM_DEFINE (scm_cdadar, "cdadar", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "cdadar", 0xbb); /* 10111011 */
+}
+SCM_DEFINE (scm_cdaadr, "cdaadr", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "cdaadr", 0xbe); /* 10111110 */
+}
+SCM_DEFINE (scm_cdaaar, "cdaaar", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "cdaaar", 0xbf); /* 10111111 */
+}
+SCM_DEFINE (scm_cadddr, "cadddr", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "cadddr", 0xea); /* 11101010 */
+}
+SCM_DEFINE (scm_caddar, "caddar", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "caddar", 0xeb); /* 11101011 */
+}
+SCM_DEFINE (scm_cadadr, "cadadr", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "cadadr", 0xee); /* 11101110 */
+}
+SCM_DEFINE (scm_cadaar, "cadaar", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "cadaar", 0xef); /* 11101111 */
+}
+SCM_DEFINE (scm_caaddr, "caaddr", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "caaddr", 0xfa); /* 11111010 */
+}
+SCM_DEFINE (scm_caadar, "caadar", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "caadar", 0xfb); /* 11111011 */
+}
+SCM_DEFINE (scm_caaadr, "caaadr", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "caaadr", 0xfe); /* 11111110 */
+}
+SCM_DEFINE (scm_caaaar, "caaaar", 1, 0, 0, (SCM x), "")
+{
+ CHASE_PAIRS (x, "caaaar", 0xff); /* 11111111 */
+}
void
scm_init_pairs ()
{
- unsigned int subnr = 0;
-
- for (subnr = 0; cxrs[subnr].name; subnr++)
- {
- SCM (*pattern) () = (SCM (*) ()) (scm_t_bits) cxrs[subnr].pattern;
- scm_c_define_subr (cxrs[subnr].name, scm_tc7_cxr, pattern);
- }
-
#include "libguile/pairs.x"
}
diff --git a/libguile/pairs.h b/libguile/pairs.h
index 47bb187ff..81d89b56b 100644
--- a/libguile/pairs.h
+++ b/libguile/pairs.h
@@ -112,67 +112,34 @@ SCM_API SCM scm_cdr (SCM x);
SCM_API SCM scm_set_car_x (SCM pair, SCM value);
SCM_API SCM scm_set_cdr_x (SCM pair, SCM value);
-#define SCM_I_D_PAT 0x02 /* 00000010 */
-#define SCM_I_A_PAT 0x03 /* 00000011 */
-#define SCM_I_DD_PAT 0x0a /* 00001010 */
-#define SCM_I_DA_PAT 0x0b /* 00001011 */
-#define SCM_I_AD_PAT 0x0e /* 00001110 */
-#define SCM_I_AA_PAT 0x0f /* 00001111 */
-#define SCM_I_DDD_PAT 0x2a /* 00101010 */
-#define SCM_I_DDA_PAT 0x2b /* 00101011 */
-#define SCM_I_DAD_PAT 0x2e /* 00101110 */
-#define SCM_I_DAA_PAT 0x2f /* 00101111 */
-#define SCM_I_ADD_PAT 0x3a /* 00111010 */
-#define SCM_I_ADA_PAT 0x3b /* 00111011 */
-#define SCM_I_AAD_PAT 0x3e /* 00111110 */
-#define SCM_I_AAA_PAT 0x3f /* 00111111 */
-#define SCM_I_DDDD_PAT 0xaa /* 10101010 */
-#define SCM_I_DDDA_PAT 0xab /* 10101011 */
-#define SCM_I_DDAD_PAT 0xae /* 10101110 */
-#define SCM_I_DDAA_PAT 0xaf /* 10101111 */
-#define SCM_I_DADD_PAT 0xba /* 10111010 */
-#define SCM_I_DADA_PAT 0xbb /* 10111011 */
-#define SCM_I_DAAD_PAT 0xbe /* 10111110 */
-#define SCM_I_DAAA_PAT 0xbf /* 10111111 */
-#define SCM_I_ADDD_PAT 0xea /* 11101010 */
-#define SCM_I_ADDA_PAT 0xeb /* 11101011 */
-#define SCM_I_ADAD_PAT 0xee /* 11101110 */
-#define SCM_I_ADAA_PAT 0xef /* 11101111 */
-#define SCM_I_AADD_PAT 0xfa /* 11111010 */
-#define SCM_I_AADA_PAT 0xfb /* 11111011 */
-#define SCM_I_AAAD_PAT 0xfe /* 11111110 */
-#define SCM_I_AAAA_PAT 0xff /* 11111111 */
-
-SCM_API SCM scm_i_chase_pairs (SCM x, scm_t_uint32 pattern);
-
-#define scm_cddr(x) scm_i_chase_pairs ((x), SCM_I_DD_PAT)
-#define scm_cdar(x) scm_i_chase_pairs ((x), SCM_I_DA_PAT)
-#define scm_cadr(x) scm_i_chase_pairs ((x), SCM_I_AD_PAT)
-#define scm_caar(x) scm_i_chase_pairs ((x), SCM_I_AA_PAT)
-#define scm_cdddr(x) scm_i_chase_pairs ((x), SCM_I_DDD_PAT)
-#define scm_cddar(x) scm_i_chase_pairs ((x), SCM_I_DDA_PAT)
-#define scm_cdadr(x) scm_i_chase_pairs ((x), SCM_I_DAD_PAT)
-#define scm_cdaar(x) scm_i_chase_pairs ((x), SCM_I_DAA_PAT)
-#define scm_caddr(x) scm_i_chase_pairs ((x), SCM_I_ADD_PAT)
-#define scm_cadar(x) scm_i_chase_pairs ((x), SCM_I_ADA_PAT)
-#define scm_caadr(x) scm_i_chase_pairs ((x), SCM_I_AAD_PAT)
-#define scm_caaar(x) scm_i_chase_pairs ((x), SCM_I_AAA_PAT)
-#define scm_cddddr(x) scm_i_chase_pairs ((x), SCM_I_DDDD_PAT)
-#define scm_cdddar(x) scm_i_chase_pairs ((x), SCM_I_DDDA_PAT)
-#define scm_cddadr(x) scm_i_chase_pairs ((x), SCM_I_DDAD_PAT)
-#define scm_cddaar(x) scm_i_chase_pairs ((x), SCM_I_DDAA_PAT)
-#define scm_cdaddr(x) scm_i_chase_pairs ((x), SCM_I_DADD_PAT)
-#define scm_cdadar(x) scm_i_chase_pairs ((x), SCM_I_DADA_PAT)
-#define scm_cdaadr(x) scm_i_chase_pairs ((x), SCM_I_DAAD_PAT)
-#define scm_cdaaar(x) scm_i_chase_pairs ((x), SCM_I_DAAA_PAT)
-#define scm_cadddr(x) scm_i_chase_pairs ((x), SCM_I_ADDD_PAT)
-#define scm_caddar(x) scm_i_chase_pairs ((x), SCM_I_ADDA_PAT)
-#define scm_cadadr(x) scm_i_chase_pairs ((x), SCM_I_ADAD_PAT)
-#define scm_cadaar(x) scm_i_chase_pairs ((x), SCM_I_ADAA_PAT)
-#define scm_caaddr(x) scm_i_chase_pairs ((x), SCM_I_AADD_PAT)
-#define scm_caadar(x) scm_i_chase_pairs ((x), SCM_I_AADA_PAT)
-#define scm_caaadr(x) scm_i_chase_pairs ((x), SCM_I_AAAD_PAT)
-#define scm_caaaar(x) scm_i_chase_pairs ((x), SCM_I_AAAA_PAT)
+SCM_API SCM scm_cddr (SCM x);
+SCM_API SCM scm_cdar (SCM x);
+SCM_API SCM scm_cadr (SCM x);
+SCM_API SCM scm_caar (SCM x);
+SCM_API SCM scm_cdddr (SCM x);
+SCM_API SCM scm_cddar (SCM x);
+SCM_API SCM scm_cdadr (SCM x);
+SCM_API SCM scm_cdaar (SCM x);
+SCM_API SCM scm_caddr (SCM x);
+SCM_API SCM scm_cadar (SCM x);
+SCM_API SCM scm_caadr (SCM x);
+SCM_API SCM scm_caaar (SCM x);
+SCM_API SCM scm_cddddr (SCM x);
+SCM_API SCM scm_cdddar (SCM x);
+SCM_API SCM scm_cddadr (SCM x);
+SCM_API SCM scm_cddaar (SCM x);
+SCM_API SCM scm_cdaddr (SCM x);
+SCM_API SCM scm_cdadar (SCM x);
+SCM_API SCM scm_cdaadr (SCM x);
+SCM_API SCM scm_cdaaar (SCM x);
+SCM_API SCM scm_cadddr (SCM x);
+SCM_API SCM scm_caddar (SCM x);
+SCM_API SCM scm_cadadr (SCM x);
+SCM_API SCM scm_cadaar (SCM x);
+SCM_API SCM scm_caaddr (SCM x);
+SCM_API SCM scm_caadar (SCM x);
+SCM_API SCM scm_caaadr (SCM x);
+SCM_API SCM scm_caaaar (SCM x);
SCM_INTERNAL void scm_init_pairs (void);
diff --git a/libguile/print.c b/libguile/print.c
index 3069edcb7..9d737c8e2 100644
--- a/libguile/print.c
+++ b/libguile/print.c
@@ -782,7 +782,7 @@ iprin1 (SCM exp, SCM port, scm_print_state *pstate)
}
EXIT_NESTED_DATA (pstate);
break;
- case scm_tcs_subrs:
+ case scm_tc7_gsubr:
{
SCM name = scm_symbol_to_string (SCM_SUBR_NAME (exp));
scm_puts (SCM_SUBR_GENERIC (exp)
diff --git a/libguile/procprop.c b/libguile/procprop.c
index 96b82ae12..c69dbd238 100644
--- a/libguile/procprop.c
+++ b/libguile/procprop.c
@@ -53,9 +53,6 @@ scm_i_procedure_arity (SCM proc)
loop:
switch (SCM_TYP7 (proc))
{
- case scm_tc7_cxr:
- a += 1;
- break;
case scm_tc7_program:
if (scm_i_program_arity (proc, &a, &o, &r))
break;
diff --git a/libguile/procs.c b/libguile/procs.c
index 1d1be06c4..c163bf6f1 100644
--- a/libguile/procs.c
+++ b/libguile/procs.c
@@ -101,7 +101,7 @@ SCM_DEFINE (scm_procedure_p, "procedure?", 1, 0, 0,
|| SCM_STRUCT_APPLICABLE_P (obj)))
break;
case scm_tcs_closures:
- case scm_tcs_subrs:
+ case scm_tc7_gsubr:
case scm_tc7_pws:
case scm_tc7_program:
return SCM_BOOL_T;
@@ -163,7 +163,7 @@ scm_subr_p (SCM obj)
if (SCM_NIMP (obj))
switch (SCM_TYP7 (obj))
{
- case scm_tcs_subrs:
+ case scm_tc7_gsubr:
return 1;
default:
;
@@ -232,7 +232,7 @@ SCM_DEFINE (scm_make_procedure_with_setter, "make-procedure-with-setter", 2, 0,
/* don't use procedure_name, because don't care enough to do a reverse
lookup */
switch (SCM_TYP7 (procedure)) {
- case scm_tcs_subrs:
+ case scm_tc7_gsubr:
name = SCM_SUBR_NAME (procedure);
break;
default:
diff --git a/libguile/tags.h b/libguile/tags.h
index aee2d5802..19260c301 100644
--- a/libguile/tags.h
+++ b/libguile/tags.h
@@ -431,7 +431,7 @@ typedef scm_t_uintptr scm_t_bits;
#define scm_tc7_program 79
#define scm_tc7_unused_9 85
#define scm_tc7_unused_10 87
-#define scm_tc7_cxr 93
+#define scm_tc7_unused_20 93
#define scm_tc7_unused_11 95
#define scm_tc7_unused_12 101
#define scm_tc7_unused_18 103
@@ -675,7 +675,6 @@ enum scm_tc8_tags
/* For subrs
*/
#define scm_tcs_subrs \
- scm_tc7_cxr:\
case scm_tc7_gsubr
diff --git a/libguile/vm.c b/libguile/vm.c
index ca6d747a3..fdca9ea54 100644
--- a/libguile/vm.c
+++ b/libguile/vm.c
@@ -277,9 +277,6 @@ apply_foreign (SCM proc, SCM *args, int nargs, int headroom)
arglist = scm_cons (args[nargs], arglist);
return scm_closure_apply (proc, arglist);
}
- case scm_tc7_cxr:
- if (nargs != 1) scm_wrong_num_args (proc);
- return scm_i_chase_pairs (args[0], (scm_t_bits) SCM_SUBRF (proc));
case scm_tc7_smob:
if (!SCM_SMOB_APPLICABLE_P (proc))
goto badproc;