From a9286f1dacfdce6f88f7da6fbe0ee5200238bb80 Mon Sep 17 00:00:00 2001 From: "Tarn W. Burton" Date: Thu, 28 Sep 2023 12:42:55 -0400 Subject: [PATCH] Minimal extension for ,. syntax --- code/reader/generic-functions.lisp | 4 ++++ code/reader/macro-functions.lisp | 9 ++++++--- code/reader/package.lisp | 1 + 3 files changed, 11 insertions(+), 3 deletions(-) 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)