X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcompiler%2Fmacros.lisp;h=dd15d8c2144fab06bdd1c4294122733675e64523;hb=c7de1989d006e0b3a4f26143b7a81c9bdb754101;hp=d105f777691f423e53797b9ff85dc1477a8aa024;hpb=85029815128ff53d16013d51ad0beb79b0eb3744;p=sbcl.git diff --git a/src/compiler/macros.lisp b/src/compiler/macros.lisp index d105f77..dd15d8c 100644 --- a/src/compiler/macros.lisp +++ b/src/compiler/macros.lisp @@ -161,7 +161,8 @@ (def!macro !def-boolean-attribute (name &rest attribute-names) (let ((translations-name (symbolicate "*" name "-ATTRIBUTE-TRANSLATIONS*")) - (test-name (symbolicate name "-ATTRIBUTEP"))) + (test-name (symbolicate name "-ATTRIBUTEP")) + (decoder-name (symbolicate "DECODE-" name "-ATTRIBUTES"))) (collect ((alist)) (do ((mask 1 (ash mask 1)) (names attribute-names (cdr names))) @@ -186,7 +187,11 @@ ;; building the xc and when building the target compiler. (!def-boolean-attribute-setter ,test-name ,translations-name - ,@attribute-names))))) + ,@attribute-names) + (defun ,decoder-name (attributes) + (loop for (name . mask) in ,translations-name + when (logtest mask attributes) + collect name)))))) ;; It seems to be difficult to express in DEF!MACRO machinery what ;; to do with target-vs-host GET-SETF-EXPANSION in here, so we just