clean up zero-sized vector, so there can be an immutable variant (even though there's nothing to mutate in the mutable variant)

svn: r9315
This commit is contained in:
Matthew Flatt 2008-04-15 12:23:59 +00:00
parent a7c9444f72
commit a632e64d2f
3 changed files with 9 additions and 28 deletions

View File

@ -1703,7 +1703,7 @@ read_inner_inner(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table *
Scheme_Object *v;
if (!params->can_read_reader) {
scheme_read_err(port, stxsrc, line, col, pos, 2, 0, indentation,
"read: #! reader expressions not currently enabled");
"read: #! readerppppp expressions not currently enabled");
return NULL;
}
v = read_lang(port, stxsrc, line, col, pos, ht, indentation, params, ch);
@ -4638,9 +4638,7 @@ static Scheme_Object *read_compact(CPort *port, int use_stack)
SCHEME_VEC_ELS(vec)[i] = cv;
}
if (l) {
SCHEME_SET_IMMUTABLE(vec);
}
v = vec;
}

View File

@ -2752,7 +2752,6 @@ static Scheme_Object *stx_activate_certs(Scheme_Object *o, Scheme_Cert **cp)
SCHEME_VEC_ELS(v2)[i] = e;
}
if (size)
SCHEME_SET_IMMUTABLE(v2);
return v2;
} else if (prefab_p(o)) {
@ -5196,7 +5195,6 @@ static Scheme_Object *syntax_to_datum_inner(Scheme_Object *o,
}
result = r;
if (size)
SCHEME_SET_IMMUTABLE(result);
} else if (prefab_p(v)) {
Scheme_Structure *s = (Scheme_Structure *)v;
@ -5945,7 +5943,6 @@ static Scheme_Object *datum_to_syntax_inner(Scheme_Object *o,
SCHEME_VEC_ELS(result)[i] = a;
}
if (size)
SCHEME_SET_VECTOR_IMMUTABLE(result);
} else if (prefab_p(o)) {
Scheme_Structure *s = (Scheme_Structure *)o;

View File

@ -38,19 +38,11 @@ static Scheme_Object *vector_copy_bang(int argc, Scheme_Object *argv[]);
static Scheme_Object *vector_to_immutable (int argc, Scheme_Object *argv[]);
static Scheme_Object *vector_to_values (int argc, Scheme_Object *argv[]);
static Scheme_Object *zero_length_vector;
void
scheme_init_vector (Scheme_Env *env)
{
Scheme_Object *p;
REGISTER_SO(zero_length_vector);
zero_length_vector = (Scheme_Object *)scheme_malloc_tagged(sizeof(Scheme_Vector)
- sizeof(Scheme_Object *));
zero_length_vector->type = scheme_vector_type;
SCHEME_VEC_SIZE(zero_length_vector) = 0;
p = scheme_make_folding_prim(vector_p, "vector?", 1, 1, 1);
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED;
scheme_add_global_constant("vector?", p, env);
@ -127,12 +119,9 @@ scheme_make_vector (int size, Scheme_Object *fill)
Scheme_Object *vec;
int i;
if (size <= 0) {
if (size) {
if (size < 0) {
vec = scheme_make_integer(size);
scheme_wrong_type("make-vector", "non-negative exact integer", -1, 0, &vec);
} else
return zero_length_vector;
}
if (size < 1024) {
@ -207,7 +196,6 @@ vector_immutable (int argc, Scheme_Object *argv[])
Scheme_Object *vec;
vec = vector(argc, argv);
if (argc)
SCHEME_SET_IMMUTABLE(vec);
return vec;
@ -411,8 +399,6 @@ static Scheme_Object *vector_to_immutable (int argc, Scheme_Object *argv[])
ovec = argv[0];
len = SCHEME_VEC_SIZE(ovec);
if (!len)
return ovec;
vec = scheme_make_vector(len, NULL);
for (i = 0; i < len; i++) {