added tuples fns to vm

db4
Phil Dawes 2009-08-17 21:37:06 +01:00
parent fa46b90197
commit dbbc9bb2b1
2 changed files with 23 additions and 3 deletions

View File

@ -4,7 +4,7 @@ namespace factor
{
/* push a new tuple on the stack */
tuple *allot_tuple(cell layout_)
tuple *factorvm::allot_tuple(cell layout_)
{
gc_root<tuple_layout> layout(layout_);
gc_root<tuple> t(allot<tuple>(tuple_size(layout.untagged())));
@ -12,7 +12,12 @@ tuple *allot_tuple(cell layout_)
return t.untagged();
}
PRIMITIVE(tuple)
tuple *allot_tuple(cell layout_)
{
return vm->allot_tuple(layout_);
}
inline void factorvm::vmprim_tuple()
{
gc_root<tuple_layout> layout(dpop());
tuple *t = allot_tuple(layout.value());
@ -23,8 +28,13 @@ PRIMITIVE(tuple)
dpush(tag<tuple>(t));
}
PRIMITIVE(tuple)
{
PRIMITIVE_GETVM()->vmprim_tuple();
}
/* push a new tuple on the stack, filling its slots from the stack */
PRIMITIVE(tuple_boa)
inline void factorvm::vmprim_tuple_boa()
{
gc_root<tuple_layout> layout(dpop());
gc_root<tuple> t(allot_tuple(layout.value()));
@ -34,4 +44,9 @@ PRIMITIVE(tuple_boa)
dpush(t.value());
}
PRIMITIVE(tuple_boa)
{
PRIMITIVE_GETVM()->vmprim_tuple_boa();
}
}

View File

@ -231,6 +231,11 @@ struct factorvm {
inline void vmprim_byte_array();
inline void vmprim_uninitialized_byte_array();
inline void vmprim_resize_byte_array();
//tuples
tuple *allot_tuple(cell layout_);
inline void vmprim_tuple();
inline void vmprim_tuple_boa();
// next method here: