VALUES forms are more efficiently inlined.

This commit is contained in:
Juan Jose Garcia Ripoll 2010-05-13 10:04:37 +02:00
parent dbf16619eb
commit f6bddc7b0b
2 changed files with 11 additions and 4 deletions

View file

@ -182,7 +182,7 @@
(c1form-sp-change dest) (c1form-sp-change new-fields)
(c1form-side-effects dest) (c1form-side-effects new-fields)
(c1form-volatile dest) (c1form-volatile new-fields)
(c1form-name dest) 'PROGN
(c1form-name dest) 'VALUES
(c1form-args dest) (list (list new-fields))))
(defun copy-c1form (form)

View file

@ -73,11 +73,18 @@
(defun emit-inlined-progn (form expected-type forms)
(let ((args (c1form-arg 0 form)))
(loop while (rest args)
do (let ((*destination* 'TRASH))
(c2expr* (pop args))))
(loop with *destination* = 'TRASH
while (rest args)
do (c2expr* (pop args)))
(emit-inline-form (first args) expected-type forms)))
(defun emit-inlined-values (form expected-type forms)
(let ((args (c1form-arg 0 form)))
(prog1 (emit-inline-form form expected-type forms)
(loop with *destination* = 'TRASH
while (rest args)
do (c2expr* (pop args))))))
(defun emit-inlined-structure-ref (form expected-type rest-forms)
(let ((type (c1form-primary-type form)))
(if (args-cause-side-effect rest-forms)