summaryrefslogtreecommitdiff
path: root/libguile/smob.h
diff options
context:
space:
mode:
authorKeisuke Nishida <kxn30@po.cwru.edu>2000-08-25 02:26:22 +0000
committerKeisuke Nishida <kxn30@po.cwru.edu>2000-08-25 02:26:22 +0000
commit0717dfd87115916e2354b3762b7360bd011270fc (patch)
tree4939f09fbcb20b52df3bccd60ae0408aff70adc9 /libguile/smob.h
parent665fc4e600f6088ab102a1d31b01baba9dc18eae (diff)
downloadguile-0717dfd87115916e2354b3762b7360bd011270fc.tar.gz
* smob.h (scm_smob_descriptor): Added `apply\' and `gsubr_type\'.
* smob.c (scm_make_smob_type): Initialize `apply\' and `gsubr_type\'. (scm_set_smob_apply): New function. (scm_smob_apply_0, scm_smob_apply_1, scm_smob_apply_2, scm_smob_apply_3): New functions. * eval.c (SCM_CEVAL, SCM_APPLY): Added dispatch for applicable smobs. * procs.c (s_scm_procedure_p): Check applicable smobs.
Diffstat (limited to 'libguile/smob.h')
-rw-r--r--libguile/smob.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/libguile/smob.h b/libguile/smob.h
index 87839de3b..b6de488b6 100644
--- a/libguile/smob.h
+++ b/libguile/smob.h
@@ -57,6 +57,8 @@ typedef struct scm_smob_descriptor
scm_sizet (*free) (SCM);
int (*print) (SCM exp, SCM port, scm_print_state *pstate);
SCM (*equalp) (SCM, SCM);
+ SCM (*apply) ();
+ int gsubr_type;
} scm_smob_descriptor;
@@ -112,6 +114,7 @@ do { \
#define SCM_SMOBNAME(smobnum) (scm_smobs[smobnum].name)
#define SCM_SMOB_PREDICATE(tag, obj) (SCM_NIMP (obj) \
&& SCM_TYP16 (obj) == (tag))
+#define SCM_SMOB_DESCRIPTOR(x) (scm_smobs[SCM_SMOBNUM (x)])
extern int scm_numsmob;
extern scm_smob_descriptor *scm_smobs;
@@ -124,6 +127,10 @@ extern scm_sizet scm_free0 (SCM ptr);
extern scm_sizet scm_smob_free (SCM obj);
extern int scm_smob_print (SCM exp, SCM port, scm_print_state *pstate);
+extern SCM scm_smob_apply_0 (SCM smob);
+extern SCM scm_smob_apply_1 (SCM smob, SCM a1);
+extern SCM scm_smob_apply_2 (SCM smob, SCM a1, SCM a2);
+extern SCM scm_smob_apply_3 (SCM smob, SCM a1, SCM a2, SCM rest);
/* The following set of functions is the standard way to create new
* SMOB types.
@@ -141,6 +148,7 @@ extern void scm_set_smob_print (long tc, int (*print) (SCM,
SCM,
scm_print_state*));
extern void scm_set_smob_equalp (long tc, SCM (*equalp) (SCM, SCM));
+extern void scm_set_smob_apply (long tc, SCM (*apply) (), int req, int opt, int rst);
/* Functions for registering multiple handler functions simultaneously.