struct ao_scheme_vector *vector = ao_scheme_poly_vector(v);
unsigned int i;
- printf("#(");
- for (i = 0; i < vector->length; i++) {
- if (i != 0)
- printf(" ");
- if (vector->vals[i] == v)
- printf ("...");
- else
+ ao_scheme_print_start();
+ if (ao_scheme_print_mark_addr(vector))
+ printf ("...");
+ else {
+ printf("#(");
+ for (i = 0; i < vector->length; i++) {
+ if (i != 0)
+ printf(" ");
ao_scheme_poly_write(vector->vals[i]);
+ }
+ printf(")");
}
- printf(")");
+ ao_scheme_print_stop();
}
void
struct ao_scheme_vector *vector = ao_scheme_poly_vector(v);
unsigned int i;
- for (i = 0; i < vector->length; i++) {
- if (vector->vals[i] == v)
- printf("...");
- else
+ ao_scheme_print_start();
+ if (ao_scheme_print_mark_addr(vector))
+ printf ("...");
+ else {
+ for (i = 0; i < vector->length; i++)
ao_scheme_poly_display(vector->vals[i]);
}
}
static int32_t
ao_scheme_vector_offset(struct ao_scheme_vector *vector, ao_poly i)
{
- int32_t offset = ao_scheme_poly_integer(i);
+ bool fail;
+ int32_t offset = ao_scheme_poly_integer(i, &fail);
- if (offset == AO_SCHEME_NOT_INTEGER)
+ if (fail)
ao_scheme_error(AO_SCHEME_INVALID, "vector index %v not integer", i);
if (offset < 0 || vector->length <= offset) {
ao_scheme_error(AO_SCHEME_INVALID, "vector index %v out of range (max %d)",
i, vector->length);
- offset = AO_SCHEME_NOT_INTEGER;
+ offset = -1;
}
return offset;
}
struct ao_scheme_vector *vector = ao_scheme_poly_vector(v);
int32_t offset = ao_scheme_vector_offset(vector, i);
- if (offset == AO_SCHEME_NOT_INTEGER)
+ if (offset < 0)
return AO_SCHEME_NIL;
return vector->vals[offset];
}
struct ao_scheme_vector *vector = ao_scheme_poly_vector(v);
int32_t offset = ao_scheme_vector_offset(vector, i);
- if (offset == AO_SCHEME_NOT_INTEGER)
+ if (offset < 0)
return AO_SCHEME_NIL;
return vector->vals[offset] = p;
}