git.fiddlerwoaroof.com
fset-lossy-synthesize.lisp
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)))))