diff options
Diffstat (limited to 'libguile/procs.h')
-rw-r--r-- | libguile/procs.h | 53 |
1 files changed, 0 insertions, 53 deletions
diff --git a/libguile/procs.h b/libguile/procs.h index cb19e4c4b..a832cd06f 100644 --- a/libguile/procs.h +++ b/libguile/procs.h @@ -47,59 +47,6 @@ -/* Procedure-with-setter - - Four representations for procedure-with-setters were - considered before selecting this one: - - 1. A closure where the CODE and ENV slots are used to represent - the getter and a new SETTER slot is used for the setter. The - original getter is stored as a `getter' procedure property. For - closure getters, the CODE and ENV slots contains a copy of the - getter's CODE and ENV slots. For subr getters, the CODE contains - a call to the subr. - - 2. A compiled closure with a call to the getter in the cclo - procedure. The getter and setter are stored in slots 1 and 2. - - 3. An entity (i.e. a struct with an associated procedure) with a - call to the getter in the entity procedure and the setter stored - in slot 0. The original getter is stored in slot 1. - - 4. A new primitive procedure type supported in the evaluator. The - getter and setter are stored in a GETTER and SETTER slot. A call - to this procedure type results in a retrieval of the getter and a - jump back to the correct eval dispatcher. - - Representation 4 was selected because of efficiency and - simplicity. - - Rep 1 has the advantage that there is zero penalty for closure - getters, but primitive getters will get considerable overhead - because the procedure-with-getter will be a closure which calls - the getter. - - Rep 3 has the advantage that a GOOPS accessor can be a subclass of - <procedure-with-setter>, but together with rep 2 it suffers from a - three level dispatch for non-GOOPS getters: - - cclo/struct --> dispatch proc --> getter - - This is because the dispatch procedure must take an extra initial - argument (cclo for rep 2, struct for rep 3). - - Rep 4 has the single disadvantage that it uses up one tc7 type - code, but the plan for uniform vectors will very likely free tc7 - codes, so this is probably no big problem. Also note that the - GETTER and SETTER slots can live directly on the heap, using the - new four-word cells. */ - -#define SCM_PROCEDURE_WITH_SETTER_P(obj) (!SCM_IMP(obj) && (SCM_TYP7 (obj) == scm_tc7_pws)) -#define SCM_PROCEDURE(obj) SCM_CELL_OBJECT_1 (obj) -#define SCM_SETTER(obj) SCM_CELL_OBJECT_2 (obj) - - - SCM_API SCM scm_c_make_subr (const char *name, long type, SCM (*fcn)()); SCM_API SCM scm_c_make_subr_with_generic (const char *name, long type, |