altos/scheme: swap BIGINT and STRING types
[fw/altos] / src / scheme / ao_scheme_vector.c
index 0114c5a925fa056228337138672551a16313bca2..a4127f64d8b43635c86b423d5291cc1429e128c1 100644 (file)
@@ -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;
 }