diff options
author | Andy Wingo <wingo@pobox.com> | 2010-04-01 09:05:59 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2010-04-01 09:05:59 +0200 |
commit | 7b702b5391fb54114307636934e4d28101655093 (patch) | |
tree | fbec1b841f8d612d67cabef6da8b902df4c5872e /libguile/vm-i-scheme.c | |
parent | a587d6a97338a0fd62173e60581ff07f55ec2042 (diff) | |
download | guile-7b702b5391fb54114307636934e4d28101655093.tar.gz |
fix vector-ref and vector-set opcodes for weak vectors
* libguile/vectors.h (SCM_I_IS_NONWEAK_VECTOR): New internal predicate.
* libguile/vm-i-scheme.c (vector-ref, vector-set): Only inline access to
nonweak vectors.
Diffstat (limited to 'libguile/vm-i-scheme.c')
-rw-r--r-- | libguile/vm-i-scheme.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/libguile/vm-i-scheme.c b/libguile/vm-i-scheme.c index df3181050..af052af1c 100644 --- a/libguile/vm-i-scheme.c +++ b/libguile/vm-i-scheme.c @@ -346,7 +346,7 @@ VM_DEFINE_FUNCTION (161, vector_ref, "vector-ref", 2) { long i = 0; ARGS2 (vect, idx); - if (SCM_LIKELY (SCM_I_IS_VECTOR (vect) + if (SCM_LIKELY (SCM_I_IS_NONWEAK_VECTOR (vect) && SCM_I_INUMP (idx) && ((i = SCM_I_INUM (idx)) >= 0) && i < SCM_I_VECTOR_LENGTH (vect))) @@ -363,7 +363,7 @@ VM_DEFINE_INSTRUCTION (162, vector_set, "vector-set", 0, 3, 0) long i = 0; SCM vect, idx, val; POP (val); POP (idx); POP (vect); - if (SCM_LIKELY (SCM_I_IS_VECTOR (vect) + if (SCM_LIKELY (SCM_I_IS_NONWEAK_VECTOR (vect) && SCM_I_INUMP (idx) && ((i = SCM_I_INUM (idx)) >= 0) && i < SCM_I_VECTOR_LENGTH (vect))) |