]> gitweb.factorcode.org Git - factor.git/commitdiff
moved arrays fns into vm
authorPhil Dawes <phil@phildawes.net>
Mon, 17 Aug 2009 20:37:06 +0000 (21:37 +0100)
committerPhil Dawes <phil@phildawes.net>
Wed, 16 Sep 2009 07:16:19 +0000 (08:16 +0100)
vm/arrays.cpp
vm/vm.hpp

index f9a3f211d0cccfc39521e838cac383f789f91bab..236f2d9c54087d3291b2c3325cbd35cb35f32f24 100644 (file)
@@ -4,7 +4,7 @@ namespace factor
 {
 
 /* make a new array with an initial element */
-array *allot_array(cell capacity, cell fill_)
+array *factorvm::allot_array(cell capacity, cell fill_)
 {
        gc_root<object> fill(fill_);
        gc_root<array> new_array(allot_array_internal<array>(capacity));
@@ -23,15 +23,25 @@ array *allot_array(cell capacity, cell fill_)
        return new_array.untagged();
 }
 
+array *allot_array(cell capacity, cell fill_)
+{
+       return vm->allot_array(capacity,fill_);
+}
+
 /* push a new array on the stack */
-PRIMITIVE(array)
+inline void factorvm::vmprim_array()
 {
        cell initial = dpop();
        cell size = unbox_array_size();
        dpush(tag<array>(allot_array(size,initial)));
 }
 
-cell allot_array_1(cell obj_)
+PRIMITIVE(array)
+{
+       PRIMITIVE_GETVM()->vmprim_array();
+}
+
+cell factorvm::allot_array_1(cell obj_)
 {
        gc_root<object> obj(obj_);
        gc_root<array> a(allot_array_internal<array>(1));
@@ -39,7 +49,12 @@ cell allot_array_1(cell obj_)
        return a.value();
 }
 
-cell allot_array_2(cell v1_, cell v2_)
+cell allot_array_1(cell obj_)
+{
+       return vm->allot_array_1(obj_);
+}
+
+cell factorvm::allot_array_2(cell v1_, cell v2_)
 {
        gc_root<object> v1(v1_);
        gc_root<object> v2(v2_);
@@ -49,7 +64,12 @@ cell allot_array_2(cell v1_, cell v2_)
        return a.value();
 }
 
-cell allot_array_4(cell v1_, cell v2_, cell v3_, cell v4_)
+cell allot_array_2(cell v1_, cell v2_)
+{
+       return vm->allot_array_2(v1_,v2_);
+}
+
+cell factorvm::allot_array_4(cell v1_, cell v2_, cell v3_, cell v4_)
 {
        gc_root<object> v1(v1_);
        gc_root<object> v2(v2_);
@@ -63,13 +83,23 @@ cell allot_array_4(cell v1_, cell v2_, cell v3_, cell v4_)
        return a.value();
 }
 
-PRIMITIVE(resize_array)
+cell allot_array_4(cell v1_, cell v2_, cell v3_, cell v4_)
+{
+       return vm->allot_array_4(v1_,v2_,v3_,v4_);
+}
+
+inline void factorvm::vmprim_resize_array()
 {
        array* a = untag_check<array>(dpop());
        cell capacity = unbox_array_size();
        dpush(tag<array>(reallot_array(a,capacity)));
 }
 
+PRIMITIVE(resize_array)
+{
+       PRIMITIVE_GETVM()->vmprim_resize_array();
+}
+
 void growable_array::add(cell elt_)
 {
        gc_root<object> elt(elt_);
index 6a4b85012a6ebfd96f80dd72f6b24b35d1c69b6d..65fea6f9f20b93a9e7ee6c60f55584a29c08cd1f 100644 (file)
--- a/vm/vm.hpp
+++ b/vm/vm.hpp
@@ -197,6 +197,14 @@ struct factorvm {
        void dump_code_heap();
        void factorbug();
        inline void vmprim_die();
+
+       //arrays
+       array *allot_array(cell capacity, cell fill_);
+       inline void vmprim_array();
+       cell allot_array_1(cell obj_);
+       cell allot_array_2(cell v1_, cell v2_);
+       cell allot_array_4(cell v1_, cell v2_, cell v3_, cell v4_);
+       inline void vmprim_resize_array();
        // next method here: