From 32f6877288ea6b7eb1cae9a42fbe8e2c5dbb2f08 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 14 Dec 2017 23:04:39 -0800 Subject: altos/scheme: swap BIGINT and STRING types This lets BIGINT be a primitive type, allowing it to use all 32 bits for storage. This does make strings another byte longer, and also slightly harder to deal with. It's a trade off. Signed-off-by: Keith Packard --- src/scheme/ao_scheme_vector.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'src/scheme/ao_scheme_vector.c') diff --git a/src/scheme/ao_scheme_vector.c b/src/scheme/ao_scheme_vector.c index 0114c5a9..a4127f64 100644 --- a/src/scheme/ao_scheme_vector.c +++ b/src/scheme/ao_scheme_vector.c @@ -107,14 +107,15 @@ ao_scheme_vector_display(ao_poly v) 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; } @@ -125,7 +126,7 @@ ao_scheme_vector_get(ao_poly v, ao_poly i) 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]; } @@ -136,7 +137,7 @@ ao_scheme_vector_set(ao_poly v, ao_poly i, ao_poly p) 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; } -- cgit v1.2.3