remove cxrs
authorAndy Wingo <wingo@pobox.com>
Fri, 4 Dec 2009 15:39:34 +0000 (16:39 +0100)
committerAndy Wingo <wingo@pobox.com>
Fri, 4 Dec 2009 15:39:34 +0000 (16:39 +0100)
commitf36878ba2d04427e76b85a9e91fce71f56ba7c7f
tree85419d043601b4ab673269a208b840aa216f5ae0
parent8a1f4f98e121c4ba90eb992203713cf493d45c71
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.
12 files changed:
libguile/debug.c
libguile/evalext.c
libguile/gc.c
libguile/goops.c
libguile/hash.c
libguile/pairs.c
libguile/pairs.h
libguile/print.c
libguile/procprop.c
libguile/procs.c
libguile/tags.h
libguile/vm.c