This library defines a CLOS-based protocol to be used by Common Lisp
compilers for environment query and update. In addition, library authors
can use the trucler-native
interface to inspect native environments.
Trucler supports introspection for variables, functions, tags, blocks and
optimization policies.
The following macro can be used to ensure the presence of a local symbol macro, and to see whether it has the expected expansion:
(eval-when (:compile-toplevel :load-toplevel :execute)
(defvar *client* (make-instance 'trucler-native:client)))
(defmacro assert-local-symbol-macro-description
(name &key (expansion nil expansion-p) &environment env)
(let ((description (trucler:describe-variable *client* env name)))
(check-type description trucler:local-symbol-macro-description)
(when expansion-p
(assert (equal expansion (trucler:expansion description))))
`(values)))
Trucler can also be used to inspect the runtime environment - here with an
example of querying the state of the variable *print-array*
.
(trucler:describe-variable
(make-instance 'trucler-native:client)
nil
'*print-array*)
; => #<trucler-native-sbcl::global-special-variable-description {100A7E5A23}>
Trucler can be seen as a modern, extensible version of the protocol described in section 8.5 of the second edition of Guy Steele’s book Common Lisp, the Language.