summaryrefslogtreecommitdiff
path: root/libguile/pairs.h
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2009-12-04 16:39:34 +0100
committerAndy Wingo <wingo@pobox.com>2009-12-04 16:39:34 +0100
commitf36878ba2d04427e76b85a9e91fce71f56ba7c7f (patch)
tree85419d043601b4ab673269a208b840aa216f5ae0 /libguile/pairs.h
parent8a1f4f98e121c4ba90eb992203713cf493d45c71 (diff)
downloadguile-f36878ba2d04427e76b85a9e91fce71f56ba7c7f.tar.gz
remove cxrs
* libguile/pairs.h: * libguile/pairs.c: Previously scm_cdadr et al were implemented as #defines that called scm_i_chase_pairs, and the Scheme-exposed functions themselves were cxr subrs, which got special help in the interpreter. Since now the special help is unnecessary (because the compiler inlines and expands calls to car, cdadr, etc), the complexity is a loss. So just implement cdadr etc using normal functions. There's an advantage too, in that the compiler can unroll the cxring, reducing branches. * libguile/tags.h (scm_tc7_cxr): Remove this tag. (scm_tcs_subrs): Now there's only one kind of subr, yay! * libguile/debug.c (scm_procedure_name) * libguile/evalext.c (scm_self_evaluating_p) * libguile/gc.c (scm_i_tag_name) * libguile/goops.c (scm_class_of) * libguile/hash.c (scm_hasher) * libguile/print.c (iprin1) * libguile/procprop.c (scm_i_procedure_arity) * libguile/procs.c (scm_procedure_p, scm_subr_p) (scm_make_procedure_with_setter) * libguile/vm.c (apply_foreign): Remove cxr cases. Replace uses of scm_tcs_subrs with scm_tc7_gsubr.
Diffstat (limited to 'libguile/pairs.h')
-rw-r--r--libguile/pairs.h89
1 files changed, 28 insertions, 61 deletions
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);