diff options
author | Dirk Herrmann <dirk@dirk-herrmanns-seiten.de> | 2000-04-25 09:45:16 +0000 |
---|---|---|
committer | Dirk Herrmann <dirk@dirk-herrmanns-seiten.de> | 2000-04-25 09:45:16 +0000 |
commit | e59bb5166217c2bd1db92ecf1b8bae23bedba606 (patch) | |
tree | 5bd8487bb3c092b6ed6ffd765d985cb067ca3db3 /libguile | |
parent | 820920e6a3e740fe9c3f4987d0071dfbbe0255ce (diff) | |
download | guile-e59bb5166217c2bd1db92ecf1b8bae23bedba606.tar.gz |
* Remove function scm_init_iprocs, remove struct scm_iproc and simplify
initialization of c[ad]+r functions.
* Remove structs scm_subr and scm_dsubr and access the function cell words
directly instead of casting a cell to a C struct.
Diffstat (limited to 'libguile')
-rw-r--r-- | libguile/ChangeLog | 11 | ||||
-rw-r--r-- | libguile/pairs.c | 70 | ||||
-rw-r--r-- | libguile/procs.c | 10 | ||||
-rw-r--r-- | libguile/procs.h | 23 |
4 files changed, 50 insertions, 64 deletions
diff --git a/libguile/ChangeLog b/libguile/ChangeLog index 958e345c5..752544c30 100644 --- a/libguile/ChangeLog +++ b/libguile/ChangeLog @@ -1,3 +1,14 @@ +2000-04-25 Dirk Herrmann <D.Herrmann@tu-bs.de> + + * pairs.c (cxrs, scm_init_pairs): Simplify initialization of + c[ad]+r functions. + + * procs.c (scm_init_iprocs), procs.h (scm_subr, scm_iproc, + scm_dsubr, scm_init_iprocs): Removed. + + * procs.h (SCM_SUBRF, SCM_DSUBRF): Access the cell words + directly instead of casting a cell to a C struct. + 2000-04-22 Mikael Djurfeldt <mdj@thalamus.nada.kth.se> Better modularization of GC extensions through new C level GC diff --git a/libguile/pairs.c b/libguile/pairs.c index d646becfb..847b140da 100644 --- a/libguile/pairs.c +++ b/libguile/pairs.c @@ -123,39 +123,39 @@ SCM_DEFINE (scm_set_cdr_x, "set-cdr!", 2, 0, 0, -static const scm_iproc cxrs[] = +static const char * cxrs[] = { - {"car", 0}, - {"cdr", 0}, - {"caar", 0}, - {"cadr", 0}, - {"cdar", 0}, - {"cddr", 0}, - {"caaar", 0}, - {"caadr", 0}, - {"cadar", 0}, - {"caddr", 0}, - {"cdaar", 0}, - {"cdadr", 0}, - {"cddar", 0}, - {"cdddr", 0}, - {"caaaar", 0}, - {"caaadr", 0}, - {"caadar", 0}, - {"caaddr", 0}, - {"cadaar", 0}, - {"cadadr", 0}, - {"caddar", 0}, - {"cadddr", 0}, - {"cdaaar", 0}, - {"cdaadr", 0}, - {"cdadar", 0}, - {"cdaddr", 0}, - {"cddaar", 0}, - {"cddadr", 0}, - {"cdddar", 0}, - {"cddddr", 0}, - {0, 0} + "car", + "cdr", + "caar", + "cadr", + "cdar", + "cddr", + "caaar", + "caadr", + "cadar", + "caddr", + "cdaar", + "cdadr", + "cddar", + "cdddr", + "caaaar", + "caaadr", + "caadar", + "caaddr", + "cadaar", + "cadadr", + "caddar", + "cadddr", + "cdaaar", + "cdaadr", + "cdadar", + "cdaddr", + "cddaar", + "cddadr", + "cdddar", + "cddddr", + 0 }; @@ -163,7 +163,11 @@ static const scm_iproc cxrs[] = void scm_init_pairs () { - scm_init_iprocs (cxrs, scm_tc7_cxr); + unsigned int subnr = 0; + + for (subnr = 0; cxrs [subnr]; subnr++) + scm_make_subr(cxrs [subnr], scm_tc7_cxr, NULL); + #include "libguile/pairs.x" } diff --git a/libguile/procs.c b/libguile/procs.c index 781557f4b..2affe9c81 100644 --- a/libguile/procs.c +++ b/libguile/procs.c @@ -371,16 +371,6 @@ scm_setter (SCM proc) void -scm_init_iprocs(const scm_iproc *subra, int type) -{ - for(;subra->scm_string; subra++) - scm_make_subr(subra->scm_string, - type, - subra->cproc); -} - - -void scm_init_subr_table () { scm_subr_table diff --git a/libguile/procs.h b/libguile/procs.h index bb7810bf2..ea266b7e2 100644 --- a/libguile/procs.h +++ b/libguile/procs.h @@ -55,24 +55,6 @@ /* Subrs */ -typedef struct scm_subr -{ - long sname; - SCM (*cproc) (); -} scm_subr; - -typedef struct scm_iproc -{ - char *scm_string; - SCM (*cproc) (); -} scm_iproc; - -typedef struct scm_dsubr -{ - long sname; - double (*dproc) (); -} scm_dsubr; - typedef struct { SCM handle; /* link back to procedure object */ @@ -89,8 +71,8 @@ typedef struct SCM_SET_CELL_WORD_0 (subr, (num << 8) + SCM_TYP7 (subr)) #define SCM_SUBR_ENTRY(x) (scm_subr_table[SCM_SUBRNUM (x)]) #define SCM_SNAME(x) (SCM_SUBR_ENTRY (x).name) -#define SCM_SUBRF(x) (((scm_subr *)(SCM2PTR(x)))->cproc) -#define SCM_DSUBRF(x) (((scm_dsubr *)(SCM2PTR(x)))->dproc) +#define SCM_SUBRF(x) ((SCM (*)()) SCM_CELL_WORD_1 (x)) +#define SCM_DSUBRF(x) ((double (*)()) SCM_CELL_WORD_1 (x)) #define SCM_CCLO_SUBR(x) (SCM_VELTS(x)[0]) #define SCM_SUBR_GENERIC(x) (SCM_SUBR_ENTRY (x).generic) @@ -189,7 +171,6 @@ extern SCM scm_procedure_with_setter_p (SCM obj); extern SCM scm_make_procedure_with_setter (SCM procedure, SCM setter); extern SCM scm_procedure (SCM proc); extern SCM scm_setter (SCM proc); -extern void scm_init_iprocs (const scm_iproc *subra, int type); extern void scm_init_subr_table (void); extern void scm_init_procs (void); |