]> gitweb.factorcode.org Git - factor.git/blobdiff - vm/byte_arrays.cpp
GC maps for more compact inline GC checks
[factor.git] / vm / byte_arrays.cpp
index d59563d81c448d82b434819fc8f52808c5d0c385..fb1b44c91e95f658e9d19f2b73641ff02057a82b 100644 (file)
@@ -35,16 +35,18 @@ void factor_vm::primitive_resize_byte_array()
        ctx->push(tag<byte_array>(reallot_array(array.untagged(),capacity)));
 }
 
-void growable_byte_array::append_bytes(void *elts, cell len)
+void growable_byte_array::grow_bytes(cell len)
 {
-       cell new_size = count + len;
-       factor_vm *parent = elements.parent;
-       if(new_size >= array_capacity(elements.untagged()))
-               elements = parent->reallot_array(elements.untagged(),new_size * 2);
-
-       memcpy(&elements->data<u8>()[count],elts,len);
-
        count += len;
+       if(count >= array_capacity(elements.untagged()))
+               elements = elements.parent->reallot_array(elements.untagged(),count * 2);
+}
+
+void growable_byte_array::append_bytes(void *elts, cell len)
+{
+       cell old_count = count;
+       grow_bytes(len);
+       memcpy(&elements->data<u8>()[old_count],elts,len);
 }
 
 void growable_byte_array::append_byte_array(cell byte_array_)