- 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.
- Are you using multiple inheritance for your Node type? The casts may cause problems in this case.
No inheritance at all.
- 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>
- 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