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;
|
Scheme_Object *v;
|
||||||
if (!params->can_read_reader) {
|
if (!params->can_read_reader) {
|
||||||
scheme_read_err(port, stxsrc, line, col, pos, 2, 0, indentation,
|
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;
|
return NULL;
|
||||||
}
|
}
|
||||||
v = read_lang(port, stxsrc, line, col, pos, ht, indentation, params, ch);
|
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;
|
SCHEME_VEC_ELS(vec)[i] = cv;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (l) {
|
|
||||||
SCHEME_SET_IMMUTABLE(vec);
|
SCHEME_SET_IMMUTABLE(vec);
|
||||||
}
|
|
||||||
|
|
||||||
v = vec;
|
v = vec;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2752,7 +2752,6 @@ static Scheme_Object *stx_activate_certs(Scheme_Object *o, Scheme_Cert **cp)
|
||||||
SCHEME_VEC_ELS(v2)[i] = e;
|
SCHEME_VEC_ELS(v2)[i] = e;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (size)
|
|
||||||
SCHEME_SET_IMMUTABLE(v2);
|
SCHEME_SET_IMMUTABLE(v2);
|
||||||
return v2;
|
return v2;
|
||||||
} else if (prefab_p(o)) {
|
} else if (prefab_p(o)) {
|
||||||
|
@ -5196,7 +5195,6 @@ static Scheme_Object *syntax_to_datum_inner(Scheme_Object *o,
|
||||||
}
|
}
|
||||||
|
|
||||||
result = r;
|
result = r;
|
||||||
if (size)
|
|
||||||
SCHEME_SET_IMMUTABLE(result);
|
SCHEME_SET_IMMUTABLE(result);
|
||||||
} else if (prefab_p(v)) {
|
} else if (prefab_p(v)) {
|
||||||
Scheme_Structure *s = (Scheme_Structure *)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;
|
SCHEME_VEC_ELS(result)[i] = a;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (size)
|
|
||||||
SCHEME_SET_VECTOR_IMMUTABLE(result);
|
SCHEME_SET_VECTOR_IMMUTABLE(result);
|
||||||
} else if (prefab_p(o)) {
|
} else if (prefab_p(o)) {
|
||||||
Scheme_Structure *s = (Scheme_Structure *)o;
|
Scheme_Structure *s = (Scheme_Structure *)o;
|
||||||
|
|
|
@ -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_immutable (int argc, Scheme_Object *argv[]);
|
||||||
static Scheme_Object *vector_to_values (int argc, Scheme_Object *argv[]);
|
static Scheme_Object *vector_to_values (int argc, Scheme_Object *argv[]);
|
||||||
|
|
||||||
static Scheme_Object *zero_length_vector;
|
|
||||||
|
|
||||||
void
|
void
|
||||||
scheme_init_vector (Scheme_Env *env)
|
scheme_init_vector (Scheme_Env *env)
|
||||||
{
|
{
|
||||||
Scheme_Object *p;
|
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);
|
p = scheme_make_folding_prim(vector_p, "vector?", 1, 1, 1);
|
||||||
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED;
|
SCHEME_PRIM_PROC_FLAGS(p) |= SCHEME_PRIM_IS_UNARY_INLINED;
|
||||||
scheme_add_global_constant("vector?", p, env);
|
scheme_add_global_constant("vector?", p, env);
|
||||||
|
@ -127,12 +119,9 @@ scheme_make_vector (int size, Scheme_Object *fill)
|
||||||
Scheme_Object *vec;
|
Scheme_Object *vec;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (size <= 0) {
|
if (size < 0) {
|
||||||
if (size) {
|
|
||||||
vec = scheme_make_integer(size);
|
vec = scheme_make_integer(size);
|
||||||
scheme_wrong_type("make-vector", "non-negative exact integer", -1, 0, &vec);
|
scheme_wrong_type("make-vector", "non-negative exact integer", -1, 0, &vec);
|
||||||
} else
|
|
||||||
return zero_length_vector;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (size < 1024) {
|
if (size < 1024) {
|
||||||
|
@ -207,7 +196,6 @@ vector_immutable (int argc, Scheme_Object *argv[])
|
||||||
Scheme_Object *vec;
|
Scheme_Object *vec;
|
||||||
|
|
||||||
vec = vector(argc, argv);
|
vec = vector(argc, argv);
|
||||||
if (argc)
|
|
||||||
SCHEME_SET_IMMUTABLE(vec);
|
SCHEME_SET_IMMUTABLE(vec);
|
||||||
|
|
||||||
return vec;
|
return vec;
|
||||||
|
@ -411,8 +399,6 @@ static Scheme_Object *vector_to_immutable (int argc, Scheme_Object *argv[])
|
||||||
|
|
||||||
ovec = argv[0];
|
ovec = argv[0];
|
||||||
len = SCHEME_VEC_SIZE(ovec);
|
len = SCHEME_VEC_SIZE(ovec);
|
||||||
if (!len)
|
|
||||||
return ovec;
|
|
||||||
|
|
||||||
vec = scheme_make_vector(len, NULL);
|
vec = scheme_make_vector(len, NULL);
|
||||||
for (i = 0; i < len; i++) {
|
for (i = 0; i < len; i++) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user