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:
parent
a7c9444f72
commit
a632e64d2f
|
@ -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);
|
||||
}
|
||||
SCHEME_SET_IMMUTABLE(vec);
|
||||
|
||||
v = vec;
|
||||
}
|
||||
|
|
|
@ -2752,8 +2752,7 @@ static Scheme_Object *stx_activate_certs(Scheme_Object *o, Scheme_Cert **cp)
|
|||
SCHEME_VEC_ELS(v2)[i] = e;
|
||||
}
|
||||
|
||||
if (size)
|
||||
SCHEME_SET_IMMUTABLE(v2);
|
||||
SCHEME_SET_IMMUTABLE(v2);
|
||||
return v2;
|
||||
} else if (prefab_p(o)) {
|
||||
Scheme_Object *e = NULL;
|
||||
|
@ -5196,8 +5195,7 @@ static Scheme_Object *syntax_to_datum_inner(Scheme_Object *o,
|
|||
}
|
||||
|
||||
result = r;
|
||||
if (size)
|
||||
SCHEME_SET_IMMUTABLE(result);
|
||||
SCHEME_SET_IMMUTABLE(result);
|
||||
} else if (prefab_p(v)) {
|
||||
Scheme_Structure *s = (Scheme_Structure *)v;
|
||||
Scheme_Object *a;
|
||||
|
@ -5945,8 +5943,7 @@ static Scheme_Object *datum_to_syntax_inner(Scheme_Object *o,
|
|||
SCHEME_VEC_ELS(result)[i] = a;
|
||||
}
|
||||
|
||||
if (size)
|
||||
SCHEME_SET_VECTOR_IMMUTABLE(result);
|
||||
SCHEME_SET_VECTOR_IMMUTABLE(result);
|
||||
} else if (prefab_p(o)) {
|
||||
Scheme_Structure *s = (Scheme_Structure *)o;
|
||||
Scheme_Object *a;
|
||||
|
|
|
@ -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) {
|
||||
vec = scheme_make_integer(size);
|
||||
scheme_wrong_type("make-vector", "non-negative exact integer", -1, 0, &vec);
|
||||
} else
|
||||
return zero_length_vector;
|
||||
if (size < 0) {
|
||||
vec = scheme_make_integer(size);
|
||||
scheme_wrong_type("make-vector", "non-negative exact integer", -1, 0, &vec);
|
||||
}
|
||||
|
||||
if (size < 1024) {
|
||||
|
@ -207,8 +196,7 @@ vector_immutable (int argc, Scheme_Object *argv[])
|
|||
Scheme_Object *vec;
|
||||
|
||||
vec = vector(argc, argv);
|
||||
if (argc)
|
||||
SCHEME_SET_IMMUTABLE(vec);
|
||||
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++) {
|
||||
|
|
Loading…
Reference in New Issue
Block a user