Felix Filozov ffilozov@gmail.com writes:
Maybe we can even do this using lexical binding, since GET-ERRNO could be a macro that expands to a lexical variable introduced by WITH-ERRNO.
The issue there is that foreign-funcall will be setting errno.
Could you elaborate where there's a consing issue, if errno is returned as the last, or first, value?
So, the pseudo-code for the implementation in foreign-funcall would be something like:
(multiple-value-bind (return-value errno) (%foreign-funcal ...) (let ((translated-return-values (multiple-value-list (translate-from-foreign ...)))) (values-list (cons errno translated-return-values)) ;; or (values-list (nconc translated-return-values (list errno))) ))
Right now I'm inclined to discard all but the first translated return value. (This is your initial solution, isn't it?)
Luís