1) Have you compiled Gambit with the --enable-cplusplus option?
As far as i remember i only changed the compiler to g++. I updated from 4.6.0 to 4.6.1 and recompiled with --enable-cplusplus and it does not segfault anymore.
2) Are you using multiple inheritance for your Node type? The casts may cause problems in this case.
No inheritance at all.
3) You say your code segfaults when not using the #f to omit typechecks. This is strange. You should get an error message, not a segfault.
It works fine now, i dont even have to pass #f anymore. But the pointer still shows up as foreign of course. #<foreign #2 0x100855ad0>
4) The code:
(define get-childnodes (c-lambda (Node*) scheme-object "LIST_to_SCMOBJ<Node*>(___arg1->childs(), &___result);")))
is strange. The function LIST_to_SCMOBJ returns an error code, and a result in the second parameter. You are ignoring the error code, which is not a good idea. It is best to implement conversion operations on your type. For example:
Ah, yeah - i should check and handle the error. I will write the conversion operations and fiddle with it. But my original question remains, when i call POINTER_to_SCMOBJ, how can i pass the Node* type tag? like in: ___SCMOBJ NodeSTAR_to_SCMOBJ(Node *src, ___SCMOBJ *dst, int arg_num) { return ___POINTER_to_SCMOBJ(src, ?????, NULL, dst, arg_num); } ___FAL works there, but gives me pointers of type foreign, which now work after after my self build problem is gone. I can leave it at that, i just thought there might be a way to tell POINTER_to_SCMOBJ the right type, if it makes any sense at all. Thanks for looking into it! Till