[Openmcl-devel] help with return values

Taoufik Dachraoui dachraoui.taoufik at gmail.com
Tue Jan 21 10:40:50 PST 2014


Hi

I am currently writing a program (a CL compiler) and I found a difficulty to
handle return values efficiently; an example will show what I mean

(comp form) -> returns (values compiled-code return-values)

for example when compiling a progn the return-values is the return of the
last form in the progn; since I do not know how many values the last form
returns I am forced to do as follow:

;;; the real code is not like this it is just a pseudo code to explain the
issue
(multiple-value-bind (c v) (comp form)
  (let ((x (new-var)))
    (values
       `(, at c (setq ,x (multiple-value-list ,(car v)))) ;;; return compiled
code
       '((values-list ,x))))   ;;; this will be used by the user of the form

for example if code is (+ 1 (progn 2 3))
the compiled code will be :
   2; (setq x (multiple-value-list 3)); (+ 1 (values-list x))

This works in all cases but it is inefficient because sometimes
multiple-value-list
and values-list are not necessary when the last form of progn returns
exactly one
value.

Any idea how to handle this more efficiently?

Kind regards
Taoufik
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.clozure.com/pipermail/openmcl-devel/attachments/20140121/47bfeae2/attachment.htm>


More information about the Openmcl-devel mailing list