fix chaperone bugs uncovered by 64-bit build

svn: r18651
This commit is contained in:
Matthew Flatt 2010-03-28 02:18:29 +00:00
parent 73807aef24
commit 4ecf61f413
2 changed files with 6 additions and 3 deletions

View File

@ -1753,7 +1753,7 @@ static void chaperone_struct_set(const char *who, Scheme_Object *o, int i, Schem
{
while (1) {
if (!SCHEME_CHAPERONEP(o)) {
SCHEME_VEC_ELS(o)[i] = v;
((Scheme_Structure *)o)->slots[i] = v;
return;
} else {
Scheme_Chaperone *px = (Scheme_Chaperone *)o;

View File

@ -364,7 +364,10 @@ void scheme_bad_vec_index(char *name, Scheme_Object *i, const char *what, Scheme
static Scheme_Object *
bad_index(char *name, Scheme_Object *i, Scheme_Object *vec, int bottom)
{
scheme_bad_vec_index(name, i, "vector", vec, bottom, SCHEME_VEC_SIZE(vec));
scheme_bad_vec_index(name, i, "vector", vec, bottom,
(SCHEME_NP_CHAPERONEP(vec)
? SCHEME_VEC_SIZE(SCHEME_CHAPERONE_VAL(vec))
: SCHEME_VEC_SIZE(vec)));
return NULL;
}
@ -491,7 +494,7 @@ scheme_checked_vector_set(int argc, Scheme_Object *argv[])
if (!SCHEME_MUTABLE_VECTORP(vec))
scheme_wrong_type("vector-set!", "mutable vector", 0, argc, argv);
len = SCHEME_VEC_SIZE(argv[0]);
len = SCHEME_VEC_SIZE(vec);
i = scheme_extract_index("vector-set!", 1, argc, argv, len, 0);