diff --git a/code/reader/generic-functions.lisp b/code/reader/generic-functions.lisp index b049c9d..00050cf 100644 --- a/code/reader/generic-functions.lisp +++ b/code/reader/generic-functions.lisp @@ -181,6 +181,10 @@ (declare (ignore client)) (list 'unquote-splicing form))) +(defgeneric wrap-in-unquote-nsplicing (client form) + (:method (client form) + (wrap-in-unquote-splicing client form))) + (defgeneric wrap-in-function (client name) (:method (client name) (declare (ignore client)) diff --git a/code/reader/macro-functions.lisp b/code/reader/macro-functions.lisp index 62d7b4e..e0459ef 100644 --- a/code/reader/macro-functions.lisp +++ b/code/reader/macro-functions.lisp @@ -233,9 +233,12 @@ (return-from comma (read-material)))) (let* ((*backquote-depth* (1- depth)) (form (read-material))) - (if splicing-p - (wrap-in-unquote-splicing client form) - (wrap-in-unquote client form)))))) + (cond ((not splicing-p) + (wrap-in-unquote client form)) + ((eql char2 #\.) + (wrap-in-unquote-nsplicing client form)) + (t + (wrap-in-unquote-splicing client form))))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; diff --git a/code/reader/package.lisp b/code/reader/package.lisp index 3a07cc5..1fca334 100644 --- a/code/reader/package.lisp +++ b/code/reader/package.lisp @@ -133,6 +133,7 @@ #:wrap-in-quasiquote #:wrap-in-unquote #:wrap-in-unquote-splicing + #:wrap-in-unquote-nsplicing #:wrap-in-function)