diff options
author | Mikael Djurfeldt <djurfeldt@nada.kth.se> | 1999-07-29 09:54:10 +0000 |
---|---|---|
committer | Mikael Djurfeldt <djurfeldt@nada.kth.se> | 1999-07-29 09:54:10 +0000 |
commit | ca4be6ea9e3116af708019f812479eeeb850bf56 (patch) | |
tree | fcdf749853cc4f7f9bfa4e86c5f20630b0fca7d7 /libguile/eval.c | |
parent | 294b1b2e3eba176d66ecc873b61de3fd1fd7ec30 (diff) | |
download | guile-ca4be6ea9e3116af708019f812479eeeb850bf56.tar.gz |
* eval.c (SCM_IM_DISPATCH, SCM_IM_HASH_DISPATCH): Don't use
improper lists in the low-level representation, since that will
cause a begin to be prepended at macro expansion.
* eval.c, tags.h, print.c (SCM_IM_SLOT_REF, SCM_IM_SLOT_SET_X):
New isym operations.
Diffstat (limited to 'libguile/eval.c')
-rw-r--r-- | libguile/eval.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/libguile/eval.c b/libguile/eval.c index 1c48d72c0..6ea0ca1a4 100644 --- a/libguile/eval.c +++ b/libguile/eval.c @@ -2077,7 +2077,7 @@ dispatch: { int i, end, mask; mask = -1; - proc = SCM_CDR (x); + proc = SCM_CADR (x); i = 0; end = SCM_LENGTH (proc); find_method: @@ -2093,7 +2093,7 @@ dispatch: arg2 = SCM_CDR (arg2); } while (SCM_NIMP (t.arg1)); - x = SCM_CAR (arg2); + x = arg2; env = scm_cons (SCM_CAR (env), SCM_CDR (arg2)); goto begin; next_method: @@ -2106,7 +2106,7 @@ dispatch: { int hashset = SCM_INUM (SCM_CADR (x)); mask = SCM_INUM (SCM_CADDR (x)); - proc = SCM_CDDDR (x); + proc = SCM_CADDDR (x); i = 0; t.arg1 = SCM_CDDAR (env); do @@ -2121,6 +2121,19 @@ dispatch: goto find_method; } + case (SCM_ISYMNUM (SCM_IM_SLOT_REF)): + x = SCM_CDR (x); + t.arg1 = EVALCAR (x, env); + RETURN (SCM_STRUCT_DATA (t.arg1)[SCM_INUM (SCM_CADR (x))]); + + case (SCM_ISYMNUM (SCM_IM_SLOT_SET_X)): + x = SCM_CDR (x); + t.arg1 = EVALCAR (x, env); + x = SCM_CDR (x); + proc = SCM_CDR (x); + RETURN (SCM_STRUCT_DATA (t.arg1)[SCM_INUM (SCM_CAR (x))] + = EVALCAR (proc, env)); + case (SCM_ISYMNUM (SCM_IM_NIL_COND)): proc = SCM_CDR (x); while (SCM_NIMP (x = SCM_CDR (proc))) |