1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-13 15:10:34 +02:00

* 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.
This commit is contained in:
Mikael Djurfeldt 1999-07-29 09:54:10 +00:00
parent 294b1b2e3e
commit ca4be6ea9e

View file

@ -2077,7 +2077,7 @@ dispatch:
{ {
int i, end, mask; int i, end, mask;
mask = -1; mask = -1;
proc = SCM_CDR (x); proc = SCM_CADR (x);
i = 0; i = 0;
end = SCM_LENGTH (proc); end = SCM_LENGTH (proc);
find_method: find_method:
@ -2093,7 +2093,7 @@ dispatch:
arg2 = SCM_CDR (arg2); arg2 = SCM_CDR (arg2);
} }
while (SCM_NIMP (t.arg1)); while (SCM_NIMP (t.arg1));
x = SCM_CAR (arg2); x = arg2;
env = scm_cons (SCM_CAR (env), SCM_CDR (arg2)); env = scm_cons (SCM_CAR (env), SCM_CDR (arg2));
goto begin; goto begin;
next_method: next_method:
@ -2106,7 +2106,7 @@ dispatch:
{ {
int hashset = SCM_INUM (SCM_CADR (x)); int hashset = SCM_INUM (SCM_CADR (x));
mask = SCM_INUM (SCM_CADDR (x)); mask = SCM_INUM (SCM_CADDR (x));
proc = SCM_CDDDR (x); proc = SCM_CADDDR (x);
i = 0; i = 0;
t.arg1 = SCM_CDDAR (env); t.arg1 = SCM_CDDAR (env);
do do
@ -2121,6 +2121,19 @@ dispatch:
goto find_method; 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)): case (SCM_ISYMNUM (SCM_IM_NIL_COND)):
proc = SCM_CDR (x); proc = SCM_CDR (x);
while (SCM_NIMP (x = SCM_CDR (proc))) while (SCM_NIMP (x = SCM_CDR (proc)))