From 3b45bc6ecf3428a18d9ab3488eb423f0d32da450 Mon Sep 17 00:00:00 2001 From: Juan Jose Garcia Ripoll Date: Sat, 17 Dec 2011 20:30:38 +0100 Subject: [PATCH] Parsing of &optional arguments in DEFMACRO led to erroneous C code. --- src/lsp/defmacro.lsp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/lsp/defmacro.lsp b/src/lsp/defmacro.lsp index b0d860118..4626c6fad 100644 --- a/src/lsp/defmacro.lsp +++ b/src/lsp/defmacro.lsp @@ -111,12 +111,13 @@ (init (second opts)) (sv (third opts))) (setq opts (cdddr opts)) - (let ((pointer-value `(if ,pointer ,unsafe-car ,init))) - (cond (sv - (dm-v x pointer-value) - (dm-v sv `(prog1 (not (null ,pointer)) ,unsafe-pop))) - (t - (dm-v x `(prog1 ,pointer-value ,unsafe-pop))))))) + (cond (sv + (dm-v x `(if ,pointer ,unsafe-car ,init)) + (dm-v sv `(and ,pointer (progn ,unsafe-pop t)))) + (t + (dm-v x `(if ,pointer + (prog1 ,unsafe-car ,unsafe-pop) + ,init)))))) (when rest (dm-v rest pointer) (setq no-check t))