From f4b8d8e58b82b29b3cc765c44045b86d6ec44054 Mon Sep 17 00:00:00 2001 From: Uko Kokņevičs Date: Sat, 18 Oct 2025 07:31:03 +0300 Subject: Utilise alexandria:with-gensyms --- src/tg/type-macros.lisp | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) (limited to 'src/tg/type-macros.lisp') diff --git a/src/tg/type-macros.lisp b/src/tg/type-macros.lisp index 390781f..5f99cba 100644 --- a/src/tg/type-macros.lisp +++ b/src/tg/type-macros.lisp @@ -3,6 +3,7 @@ (defpackage :ukkoclot/tg/type-macros (:documentation "Macros for easy defining TG types.") (:use :c2cl :iterate) + (:import-from :alexandria :with-gensyms) (:import-from :com.dieggsy.f-string :enable-f-strings) (:import-from :ukkoclot/serializing :parse-value) (:import-from :ukkoclot/hash-tables :gethash-lazy) @@ -54,7 +55,7 @@ `(list ,(field-hash-key field) ,value ',(field-type field))) (defun emit-collect-nondefault-fields (name fields obj collector) - (let ((value (gensym "VALUE"))) + (with-gensyms (value) (iter (for field in (reverse fields)) (collect (if (field-skip-if-default field) @@ -70,8 +71,7 @@ `(gethash-lazy ,(field-hash-key field) ,source ,(field-default field))) (defun emit-jzon-coerced-fields (name fields) - (let ((obj (gensym "OBJ")) - (result (gensym "RESULT"))) + (with-gensyms (obj result) `(defmethod jzon:coerced-fields ((,obj ,name)) (let (,result) ,@(emit-collect-nondefault-fields @@ -85,9 +85,8 @@ (parse-value ',(field-type field) ,(emit-gethash field source)))) (defun emit-parse-value (name fields) - (let ((type-sym (gensym "TYPE-SYM")) - (source (gensym "SOURCE"))) - `(defmethod parse-value ((,type-sym (eql ',name)) ,source) + (with-gensyms (source type) + `(defmethod parse-value ((,type (eql ',name)) ,source) (let (,@(iter (for field in fields) (collect (emit-let-gethash field source)))) (,(type-constructor name) @@ -95,10 +94,7 @@ (appending (emit-constructor-args field)))))))) (defun emit-printer (name printer-name fields) - (let ((obj (gensym "OBJ")) - (stream (gensym "STREAM")) - (depth (gensym "DEPTH")) - (pprint-args (gensym "PPRINT-ARGS"))) + (with-gensyms (depth obj pprint-args stream) `(defun ,printer-name (,obj ,stream ,depth) ; lint:suppress lambda-list-invalid (declare (ignore ,depth)) (let (,pprint-args) @@ -117,10 +113,10 @@ `(,(field-name field) ,(field-default field) :type ,(field-type field)))) (defmacro define-tg-type (name &body field-specs) - (let ((fields (parse-field-specs field-specs)) - (printer-name (gensym "PRINTER"))) - `(progn - ,(emit-struct name printer-name fields) - ,(emit-printer name printer-name fields) - ,(emit-parse-value name fields) - ,(emit-jzon-coerced-fields name fields)))) + (let ((fields (parse-field-specs field-specs))) + (with-gensyms (printer) + `(progn + ,(emit-struct name printer fields) + ,(emit-printer name printer fields) + ,(emit-parse-value name fields) + ,(emit-jzon-coerced-fields name fields))))) -- cgit v1.2.3