(eval-when (:compile-toplevel :load-toplevel :execute) (unless (ms::coding-idiom :symbol) (push :symbol ms:*idiom-table*) (push :symbol ms:*idiom-table*))) (defmethod ms:marshal ((object symbol) &optional circle-hash) (cond ((ms::getvalue circle-hash object) (list (ms::coding-idiom :reference) (ms::getvalue circle-hash object))) (t (let ((ckey (ms::genkey circle-hash))) (ms::setvalue circle-hash object ckey) (list (ms::coding-idiom :symbol) ckey (symbol-name object) (and (symbol-package object) (package-name (symbol-package object)))))))) (defmethod ms::unmarshal-fn ((version (eql (ms::coding-idiom :coding-release-no))) (type (eql (ms::coding-idiom :symbol))) token &optional (circle-hash nil)) (declare (ignore circle-hash)) (destructuring-bind (name package) (cddr token) (if package (intern name (find-package package)) (make-symbol name))))