Hi,
Hi YHC,
I'm trying to do a make_tuple of 11 elements.
Is the correct structure to do:
MAKE_NODE(ret, G_infoTuple, N_NORMAL);
...
node->args[0] = thing0
node->args[1] = thing1
node->args[2] = thing2
node->args[3] = thing3
...
node->args[10] = thing10
Then, how does the garbage collector know the number of elements?
I would have thought that it would basically have been make_array, but
make array uses data, not args; how does data help the situation?
My first question is to ask why you need to make an 11 tuple from the C
code. I guess you must be adding support for some library, but the
normal way to do that is using the FFI. Only one or two specialised
things in the prelude are coded directly using the C interface.
In any case I've just pushed a patch that makes it much easier to make
tuples from the C code. You can now use
Node* make_nTuple(int num, ...);
To make a tuple of any size (including 0). So now you can do
return make_nTuple(3, a, b, c);
Finally, I would think that I would nead to heap_pushGlobal any time I
call anything that calls heap_alloc, but not all functions do this:
Node* _primIntegerQuotRem(Node* node){
Node* quot = _primIntegerQuot(node);
Node* rem = _primIntegerRem(node);
return make_tuple(quot, rem);
}
Could the GC not be called during _primIntegerRem, and collect quot?
Oops, yes that's a bug. This is partly why we've moved to using the FFI
for primitives where possible. It's so easy to make mistakes.
Thanks
Tom
_______________________________________________
Yhc mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/yhc