On 2005-nov-15, at 15:34, James Bielman wrote:
Well, I don't see the point of using a separate translator for callback return values versus setting foreign variables. If I understand :TO-C correctly, it is used when we have a Lisp value we need to convert to a C value with indefinite extent, which is the situation in both those cases.
Good point, that was the purpose of separating :TO-C from :TO-C-DYNAMIC.
The more I think about it, the more I like just specifying the built-in type translators for aggregate objects (which is just :STRING, right?) allocate their memory using malloc in the :TO-C case. I can't see any real good reason not to.
Right. Must not forget to document this well.
If I had an existing string I wanted to pass from a callback I would just declare it to return :POINTER instead. (What happens if you return a pointer from a function with a result-type of :STRING? Should it pass it unmodified or malloc a copy?)
Good question. My gut feeling is that it should be passed unmodified since if you're passing a pointer it probably means that you want to bypass the translator. But I'm not sure.