mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 20:00:19 +02:00
remove CONS macro in VM; use scm_cons instead
* libguile/vm-engine.c (CONS): Remove. Callers should use scm_cons instead, syncing registers beforehand. (POP_LIST): Adapt, only synchronizing once. (POP_LIST_MARK, POP_CONS_MARK): Remove unused macros. * libguile/vm-i-scheme.c (cons): * libguile/vm-i-system.c (push-rest, bind-rest): Adapt.
This commit is contained in:
parent
eac1202483
commit
52182d5280
3 changed files with 8 additions and 42 deletions
|
@ -315,17 +315,6 @@
|
||||||
#define POP2(x,y) do { PRE_CHECK_UNDERFLOW (2); x = *sp--; y = *sp--; NULLSTACK (2); } while (0)
|
#define POP2(x,y) do { PRE_CHECK_UNDERFLOW (2); x = *sp--; y = *sp--; NULLSTACK (2); } while (0)
|
||||||
#define POP3(x,y,z) do { PRE_CHECK_UNDERFLOW (3); x = *sp--; y = *sp--; z = *sp--; NULLSTACK (3); } while (0)
|
#define POP3(x,y,z) do { PRE_CHECK_UNDERFLOW (3); x = *sp--; y = *sp--; z = *sp--; NULLSTACK (3); } while (0)
|
||||||
|
|
||||||
/* A fast CONS. This has to be fast since its used, for instance, by
|
|
||||||
POP_LIST when fetching a function's argument list. Note: `scm_cell' is an
|
|
||||||
inlined function in Guile 1.7. Unfortunately, it calls
|
|
||||||
`scm_gc_for_newcell ()' which is _not_ inlined and allocated cells on the
|
|
||||||
heap. XXX */
|
|
||||||
#define CONS(x,y,z) \
|
|
||||||
{ \
|
|
||||||
SYNC_BEFORE_GC (); \
|
|
||||||
x = scm_cell (SCM_UNPACK (y), SCM_UNPACK (z)); \
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Pop the N objects on top of the stack and push a list that contains
|
/* Pop the N objects on top of the stack and push a list that contains
|
||||||
them. */
|
them. */
|
||||||
#define POP_LIST(n) \
|
#define POP_LIST(n) \
|
||||||
|
@ -333,10 +322,11 @@ do \
|
||||||
{ \
|
{ \
|
||||||
int i; \
|
int i; \
|
||||||
SCM l = SCM_EOL, x; \
|
SCM l = SCM_EOL, x; \
|
||||||
|
SYNC_BEFORE_GC (); \
|
||||||
for (i = n; i; i--) \
|
for (i = n; i; i--) \
|
||||||
{ \
|
{ \
|
||||||
POP (x); \
|
POP (x); \
|
||||||
CONS (l, x, l); \
|
l = scm_cons (x, l); \
|
||||||
} \
|
} \
|
||||||
PUSH (l); \
|
PUSH (l); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
@ -350,33 +340,6 @@ do \
|
||||||
VM_ASSERT (NILP (l), vm_error_improper_list (l)); \
|
VM_ASSERT (NILP (l), vm_error_improper_list (l)); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
|
||||||
#define POP_LIST_MARK() \
|
|
||||||
do { \
|
|
||||||
SCM o; \
|
|
||||||
SCM l = SCM_EOL; \
|
|
||||||
POP (o); \
|
|
||||||
while (!SCM_UNBNDP (o)) \
|
|
||||||
{ \
|
|
||||||
CONS (l, o, l); \
|
|
||||||
POP (o); \
|
|
||||||
} \
|
|
||||||
PUSH (l); \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define POP_CONS_MARK() \
|
|
||||||
do { \
|
|
||||||
SCM o, l; \
|
|
||||||
POP (l); \
|
|
||||||
POP (o); \
|
|
||||||
while (!SCM_UNBNDP (o)) \
|
|
||||||
{ \
|
|
||||||
CONS (l, o, l); \
|
|
||||||
POP (o); \
|
|
||||||
} \
|
|
||||||
PUSH (l); \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Instruction operation
|
* Instruction operation
|
||||||
|
|
|
@ -131,7 +131,8 @@ VM_DEFINE_FUNCTION (141, vectorp, "vector?", 1)
|
||||||
VM_DEFINE_FUNCTION (142, cons, "cons", 2)
|
VM_DEFINE_FUNCTION (142, cons, "cons", 2)
|
||||||
{
|
{
|
||||||
ARGS2 (x, y);
|
ARGS2 (x, y);
|
||||||
CONS (x, x, y);
|
SYNC_BEFORE_GC ();
|
||||||
|
x = scm_cons (x, y);
|
||||||
RETURN (x);
|
RETURN (x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -715,9 +715,10 @@ VM_DEFINE_INSTRUCTION (51, push_rest, "push-rest", 2, -1, -1)
|
||||||
SCM rest = SCM_EOL;
|
SCM rest = SCM_EOL;
|
||||||
n = FETCH () << 8;
|
n = FETCH () << 8;
|
||||||
n += FETCH ();
|
n += FETCH ();
|
||||||
|
SYNC_BEFORE_GC ();
|
||||||
while (sp - (fp - 1) > n)
|
while (sp - (fp - 1) > n)
|
||||||
/* No need to check for underflow. */
|
/* No need to check for underflow. */
|
||||||
CONS (rest, *sp--, rest);
|
rest = scm_cons (*sp--, rest);
|
||||||
PUSH (rest);
|
PUSH (rest);
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
@ -731,9 +732,10 @@ VM_DEFINE_INSTRUCTION (52, bind_rest, "bind-rest", 4, -1, -1)
|
||||||
n += FETCH ();
|
n += FETCH ();
|
||||||
i = FETCH () << 8;
|
i = FETCH () << 8;
|
||||||
i += FETCH ();
|
i += FETCH ();
|
||||||
|
SYNC_BEFORE_GC ();
|
||||||
while (sp - (fp - 1) > n)
|
while (sp - (fp - 1) > n)
|
||||||
/* No need to check for underflow. */
|
/* No need to check for underflow. */
|
||||||
CONS (rest, *sp--, rest);
|
rest = scm_cons (*sp--, rest);
|
||||||
LOCAL_SET (i, rest);
|
LOCAL_SET (i, rest);
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue