diff options
author | Dirk Herrmann <dirk@dirk-herrmanns-seiten.de> | 2003-04-25 16:22:47 +0000 |
---|---|---|
committer | Dirk Herrmann <dirk@dirk-herrmanns-seiten.de> | 2003-04-25 16:22:47 +0000 |
commit | b0c5d67b98950641ec48ec87edcd6d02f4ff8cdc (patch) | |
tree | 9b77fdf7b154901e502c1cf84592a3b6e410646b /libguile/eval.c | |
parent | b9ad392e86906ef5eba54cb4219014d48356c3cc (diff) | |
download | guile-b0c5d67b98950641ec48ec87edcd6d02f4ff8cdc.tar.gz |
* eval.c, eval.h, goops.c, goops.h (scm_m_atslot_ref,
scm_m_atslot_set_x, scm_m_atdispatch): Move the declarations and
definitions of the special goops memoizers from goops.[ch] to
eval.[ch]. Hmm... it seems that scm_m_atdispatch is not used
throughout guile.
Diffstat (limited to 'libguile/eval.c')
-rw-r--r-- | libguile/eval.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/libguile/eval.c b/libguile/eval.c index decad0af9..37c820765 100644 --- a/libguile/eval.c +++ b/libguile/eval.c @@ -1149,6 +1149,62 @@ scm_m_atbind (SCM xorig, SCM env) SCM_CDDR (xorig))); } +SCM_SYNTAX (s_atslot_ref, "@slot-ref", scm_makmmacro, scm_m_atslot_ref); + +SCM +scm_m_atslot_ref (SCM xorig, SCM env SCM_UNUSED) +#define FUNC_NAME s_atslot_ref +{ + SCM x = SCM_CDR (xorig); + SCM_ASSYNT (scm_ilength (x) == 2, scm_s_expression, FUNC_NAME); + SCM_VALIDATE_INUM (SCM_ARG2, SCM_CADR (x)); + return scm_cons (SCM_IM_SLOT_REF, x); +} +#undef FUNC_NAME + + +SCM_SYNTAX (s_atslot_set_x, "@slot-set!", scm_makmmacro, scm_m_atslot_set_x); + +SCM +scm_m_atslot_set_x (SCM xorig, SCM env SCM_UNUSED) +#define FUNC_NAME s_atslot_set_x +{ + SCM x = SCM_CDR (xorig); + SCM_ASSYNT (scm_ilength (x) == 3, scm_s_expression, FUNC_NAME); + SCM_VALIDATE_INUM (SCM_ARG2, SCM_CADR (x)); + return scm_cons (SCM_IM_SLOT_SET_X, x); +} +#undef FUNC_NAME + + +SCM_SYNTAX (s_atdispatch, "@dispatch", scm_makmmacro, scm_m_atdispatch); + +SCM_SYMBOL (sym_atdispatch, s_atdispatch); + +SCM +scm_m_atdispatch (SCM xorig, SCM env) +#define FUNC_NAME s_atdispatch +{ + SCM args, n, v, gf, x = SCM_CDR (xorig); + SCM_ASSYNT (scm_ilength (x) == 4, scm_s_expression, FUNC_NAME); + args = SCM_CAR (x); + if (!SCM_CONSP (args) && !SCM_SYMBOLP (args)) + SCM_WRONG_TYPE_ARG (SCM_ARG1, args); + x = SCM_CDR (x); + n = SCM_XEVALCAR (x, env); + SCM_VALIDATE_INUM (SCM_ARG2, n); + SCM_ASSERT_RANGE (0, n, SCM_INUM (n) >= 1); + x = SCM_CDR (x); + v = SCM_XEVALCAR (x, env); + SCM_VALIDATE_VECTOR (SCM_ARG3, v); + x = SCM_CDR (x); + gf = SCM_XEVALCAR (x, env); + SCM_VALIDATE_PUREGENERIC (SCM_ARG4, gf); + return scm_list_5 (SCM_IM_DISPATCH, args, n, v, gf); +} +#undef FUNC_NAME + + SCM_SYNTAX (s_at_call_with_values, "@call-with-values", scm_makmmacro, scm_m_at_call_with_values); SCM_GLOBAL_SYMBOL(scm_sym_at_call_with_values, s_at_call_with_values); |