]> gitweb.factorcode.org Git - factor.git/commitdiff
fix array size fep
authorSlava Pestov <slava@factorcode.org>
Sat, 5 Nov 2005 03:50:26 +0000 (03:50 +0000)
committerSlava Pestov <slava@factorcode.org>
Sat, 5 Nov 2005 03:50:26 +0000 (03:50 +0000)
library/bootstrap/init.factor
library/test/math/float.factor
native/array.c
native/array.h
native/vector.c

index 338ce5be6fc7fa6f40f1e8cc38189169707ade22..1b1fe7b2829e7861484945bb6bbf54b2dde4b570 100644 (file)
@@ -14,4 +14,4 @@ parser threads words ;
     init-error-handler
     default-cli-args
     parse-command-line
-    "null-stdio" get [ T{ null-stream } stdio set ] when ;
+    "null-stdio" get [ T{ null-stream } stdio set ] when ;
index 2bc397039b830b114ce4d0a7089d4d9e895a9c08..744edfde89a9f7d812bb0627f86c7776902ff990 100644 (file)
@@ -32,3 +32,6 @@ USE: test
 
 [ t ] [ pi double>bits bits>double pi = ] unit-test
 [ t ] [ e double>bits bits>double e = ] unit-test
+
+[ 2.0 ] [ 1.0 1+ ] unit-test
+[ 0.0 ] [ 1.0 1- ] unit-test
index 6b7dd068fbe4552ad3ee9b3406aac2c8c3a6f2ac..ce70bea2c27411871fc7e6c861177a43c59f31ee 100644 (file)
@@ -2,7 +2,7 @@
 
 /* the array is full of undefined data, and must be correctly filled before the
 next GC. */
-F_ARRAY* allot_array(CELL type, CELL capacity)
+F_ARRAY* allot_array(CELL type, F_FIXNUM capacity)
 {
        F_ARRAY *array;
 
@@ -20,7 +20,7 @@ either be F or a fixnum.
 if you want to use pass a pointer, you _must_ hit
 the write barrier manually with a write_barrier()
 call with the returned object. */
-F_ARRAY* array(CELL type, CELL capacity, CELL fill)
+F_ARRAY* array(CELL type, F_FIXNUM capacity, CELL fill)
 {
        int i; F_ARRAY* array = allot_array(type, capacity);
        for(i = 0; i < capacity; i++)
@@ -30,27 +30,27 @@ F_ARRAY* array(CELL type, CELL capacity, CELL fill)
 
 void primitive_array(void)
 {
-       CELL size = to_fixnum(dpop());
+       F_FIXNUM size = to_fixnum(dpop());
        maybe_gc(array_size(size));
        dpush(tag_object(array(ARRAY_TYPE,size,F)));
 }
 
 void primitive_tuple(void)
 {
-       CELL size = to_fixnum(dpop());
+       F_FIXNUM size = to_fixnum(dpop());
        maybe_gc(array_size(size));
        dpush(tag_object(array(TUPLE_TYPE,size,F)));
 }
 
 void primitive_byte_array(void)
 {
-       CELL size = to_fixnum(dpop());
+       F_FIXNUM size = to_fixnum(dpop());
        maybe_gc(array_size(size));
        dpush(tag_object(array(BYTE_ARRAY_TYPE,size,0)));
 }
 
 /* see note about fill in array() */
-F_ARRAY* resize_array(F_ARRAY* array, CELL capacity, CELL fill)
+F_ARRAY* resize_array(F_ARRAY* array, F_FIXNUM capacity, CELL fill)
 {
        int i;
        F_ARRAY* new_array;
@@ -72,7 +72,7 @@ F_ARRAY* resize_array(F_ARRAY* array, CELL capacity, CELL fill)
 void primitive_resize_array(void)
 {
        F_ARRAY* array;
-       CELL capacity = to_fixnum(dpeek2());
+       F_FIXNUM capacity = to_fixnum(dpeek2());
        maybe_gc(array_size(capacity));
        array = untag_array(dpop());
        drepl(tag_object(resize_array(array,capacity,F)));
index 73e0be9501f76f1b85809f66bf97284c592a101a..b2dbbad44c6788b90a7a7f1d41a9ed7e143b97dd 100644 (file)
@@ -25,14 +25,14 @@ INLINE CELL array_size(CELL size)
        return align8(sizeof(F_ARRAY) + size * CELLS);
 }
 
-F_ARRAY* allot_array(CELL type, CELL capacity);
-F_ARRAY* array(CELL type, CELL capacity, CELL fill);
+F_ARRAY* allot_array(CELL type, F_FIXNUM capacity);
+F_ARRAY* array(CELL type, F_FIXNUM capacity, CELL fill);
 
 void primitive_array(void);
 void primitive_tuple(void);
 void primitive_byte_array(void);
 
-F_ARRAY* resize_array(F_ARRAY* array, CELL capacity, CELL fill);
+F_ARRAY* resize_array(F_ARRAY* array, F_FIXNUM capacity, CELL fill);
 void primitive_resize_array(void);
 void primitive_array_to_tuple(void);
 void primitive_tuple_to_array(void);
index 0740f5d9d84ec676c1bf9833c09729086783af2c..927a4911711fcd3fcf78eebb64aaffe40ecba78d 100644 (file)
@@ -2,10 +2,7 @@
 
 F_VECTOR* vector(F_FIXNUM capacity)
 {
-       F_VECTOR* vector;
-       if(capacity < 0)
-               general_error(ERROR_NEGATIVE_ARRAY_SIZE,tag_fixnum(capacity));
-       vector = allot_object(VECTOR_TYPE,sizeof(F_VECTOR));
+       F_VECTOR* vector = allot_object(VECTOR_TYPE,sizeof(F_VECTOR));
        vector->top = tag_fixnum(0);
        vector->array = tag_object(array(ARRAY_TYPE,capacity,F));
        return vector;