ee000f9c |
;; capitalizes symbols ---- possible information loss
(in-package :edn)
(defclass fset-lossy (fset)
()
(:documentation "An eden synthesizer that applies semantic
transformations that could lose information: in particular, when
it's translating a keyword or symbol, it uppercases the namespace
and name to match CL's symbol behavior"))
(defmethod synthesize-compound ((implementation fset-lossy) (discriminator (eql :list)) args)
(mapcar (lambda (a)
(synthesize implementation a))
args))
(defmethod synthesize-compound :around ((implementation fset-lossy) (discriminator (eql :keyword)) args)
(destructuring-bind (ns name) args
(call-next-method implementation
discriminator
(list (when ns (string-upcase ns))
(string-upcase name)))))
(defmethod synthesize-compound (implementation (discriminator (eql :string)) args)
(car args))
(defmethod synthesize-compound :around ((implementation fset-lossy) (discriminator (eql :symbol)) args)
(destructuring-bind (ns name) args
(call-next-method implementation
discriminator
(list (when ns (string-upcase ns))
(string-upcase name)))))
|