From 7639263bed0482579b4dc03f1fe72cddaa803024 Mon Sep 17 00:00:00 2001 From: John Lorentzson Date: Thu, 22 May 2025 12:18:56 +0200 Subject: [PATCH] Make TRANSFORM return OBJ if it's already TO-TYPE --- wip-duuqnd/user-side-compiler/transform.lisp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/wip-duuqnd/user-side-compiler/transform.lisp b/wip-duuqnd/user-side-compiler/transform.lisp index 99906e7..11340d2 100644 --- a/wip-duuqnd/user-side-compiler/transform.lisp +++ b/wip-duuqnd/user-side-compiler/transform.lisp @@ -57,12 +57,16 @@ that has been somehow created using OBJ as a starting point." (let* ((from-type (case (type-of obj) ((bit number integer fixnum) 'integer) (t (type-of obj)))) - (path (transform-path from-type to-type))) - (if (listp path) - (loop :for intermediate :in path - :do (setf obj (%direct-transform obj intermediate)) - :finally (return (%direct-transform obj to-type))) - (%direct-transform obj to-type)))) + (path (if (typep obj to-type) + obj + (transform-path from-type to-type)))) + (cond ((listp path) + (loop :for intermediate :in path + :do (setf obj (%direct-transform obj intermediate)) + :finally (return (%direct-transform obj to-type)))) + ((eql obj path) + obj) + (t (%direct-transform obj to-type))))) (defmacro define-transformation ((var-name (from-type to-type)) &body body) "Defines a transformation rule for objects going from FROM-TYPE to TO-TYPE.