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:
parent
294b1b2e3e
commit
ca4be6ea9e
1 changed files with 16 additions and 3 deletions
|
@ -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)))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue