From f6bddc7b0b5b3c9909280ccab52b07aacb9ea68b Mon Sep 17 00:00:00 2001 From: Juan Jose Garcia Ripoll Date: Thu, 13 May 2010 10:04:37 +0200 Subject: [PATCH] VALUES forms are more efficiently inlined. --- src/cmp/cmpform.lsp | 2 +- src/cmp/cmpinline.lsp | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/cmp/cmpform.lsp b/src/cmp/cmpform.lsp index d7884a3ba..618941fc1 100644 --- a/src/cmp/cmpform.lsp +++ b/src/cmp/cmpform.lsp @@ -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) diff --git a/src/cmp/cmpinline.lsp b/src/cmp/cmpinline.lsp index ae56e62e2..875331b5d 100644 --- a/src/cmp/cmpinline.lsp +++ b/src/cmp/cmpinline.lsp @@ -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)