X-Git-Url: http://repo.macrolet.net/gitweb/?p=jscl.git;a=blobdiff_plain;f=src%2Fsymbol.lisp;fp=src%2Fsymbol.lisp;h=0234232803c81177750dc524ffceb0591676dfd7;hp=0000000000000000000000000000000000000000;hb=9fef9535299d5f5dafae9deb2c4bc41843bb178c;hpb=ac605fc4fba4b53a8624a5812e00dd98b589de4c diff --git a/src/symbol.lisp b/src/symbol.lisp new file mode 100644 index 0000000..0234232 --- /dev/null +++ b/src/symbol.lisp @@ -0,0 +1,37 @@ +;;; symbols --- + +;; JSCL is free software: you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation, either version 3 of the +;; License, or (at your option) any later version. +;; +;; JSCL is distributed in the hope that it will be useful, but +;; WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;; General Public License for more details. +;; +;; You should have received a copy of the GNU General Public License +;; along with JSCL. If not, see . + +(defun symbol-plist (x) + (cond + ((symbolp x) (error "`~a' is not a symbol." x)) + ((in "plist" x) (oget* x "plist")))) + +(defun set-symbol-plist (new-value x) + (if (symbolp x) + (oset* new-value x "plist") + (error "`~a' is not a symbol." x))) + +(define-setf-expander symbol-plist (x) + (let ((g!x (gensym)) + (g!value (gensym))) + (list (list g!x) + (list x) + (list g!value) + `(set-symbol-plist ,g!value ,g!x) + `(symbol-plist ,g!value)))) + +(defun get (symbol indicator &optional default) + (getf (symbol-plist symbol) indicator default)) +