From d4216a3acafa6c8630d314224d8c988bf670bc15 Mon Sep 17 00:00:00 2001 From: Stelian Ionescu Date: Mon, 7 Nov 2022 18:32:26 -0500 Subject: [PATCH] Add compiler macro utils CONSTANT-FORM-P and CONSTANT-FORM-VALUE --- src/utils.lisp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/utils.lisp b/src/utils.lisp index 7afaccdef265..b42efd6e6744 100644 --- a/src/utils.lisp +++ b/src/utils.lisp @@ -82,3 +82,28 @@ set twos-complement bit." (the fixnum (1+ (the fixnum stop))) stop)) while stop))) + +(defun quoted-form-p (form) + (and (listp form) + (= 2 (length form)) + (eql 'quote (car form)))) + +(defun constant-form-p (form &optional env) + (let ((form (if (symbolp form) + (macroexpand form env) + form))) + (or (quoted-form-p form) + (constantp form env)))) + +(defun constant-form-value (form &optional env) + (declare (ignorable env)) + (cond + ((quoted-form-p form) + (second form)) + (t + #+clozure + (ccl::eval-constant form) + #+sbcl + (sb-int:constant-form-value form env) + #-(or clozure sbcl) + (eval form))))