1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-16 08:40:19 +02:00

Don't use GNU extensions for SCM_MAKE_CHAR macro

Since the contents of SCM_MAKE_CHAR are evaluated more than once,
don't use it in situations where this could cause side-effects.

        * libguile/vm-i-system.c (make-char8): avoid side-effects with
        SCM_MAKE_CHAR call

        * libguile/chars.h (SCM_MAKE_CHAR): modified
This commit is contained in:
Michael Gran 2009-08-01 10:15:20 -07:00
parent 64bad3f5a8
commit 4c402b889e
2 changed files with 11 additions and 5 deletions

View file

@ -171,7 +171,13 @@ VM_DEFINE_INSTRUCTION (15, make_uint64, "make-uint64", 8, 0, 1)
VM_DEFINE_INSTRUCTION (16, make_char8, "make-char8", 1, 0, 1)
{
PUSH (SCM_MAKE_CHAR (FETCH ()));
scm_t_uint8 v = 0;
v = FETCH ();
PUSH (SCM_MAKE_CHAR (v));
/* Don't simplify this to PUSH (SCM_MAKE_CHAR (FETCH ())). The
contents of SCM_MAKE_CHAR may be evaluated more than once,
resulting in a double fetch. */
NEXT;
}