Attila Lendvai wrote:

After someone asked on c.l.l I spent a day on making a defparameter a
Cell. The test worked but then I think I tried it live and it failed and
I decided I better get back to work on Algebra (but apparently never
took it out of my LPR).


while making a clet in computed-class i've also played with the idea
of a cell in a defparameter, but i couldn't come up with anything
without symbol-macrolet. i think that can't be done transparently with
standard common lisp constructs.

I just added variables.lisp to CVS just so folks can find it, and at the same time modified cells.lpr /not/ to show it.

From there, the macro:

(defmacro def-c-variable (v-name cell &key ephemeral owning unchanged-if)
 (declare (ignore unchanged-if))
 (let ((c 'whathef)) ;;(gensym)))
   `(progn
      (eval-when (:compile-toplevel :load-toplevel)
        (define-symbol-macro ,v-name (c-variable-accessor ',v-name))
(setf (md-slot-cell-type 'null ',v-name) (when ,ephemeral :ephemeral))
        (when ,owning
          (setf (md-slot-owning 'null ',v-name) t)))
      (eval-when (:load-toplevel)
        (let ((,c ,cell))
          (md-install-cell nil ',v-name ,c)
          (awaken-cell ,c)))
      ',v-name)))

So this:
   (def-c-variable *kenny* (c-in nil))

Expands to this:
(progn
 (eval-when (:compile-toplevel :load-toplevel)
   (define-symbol-macro *kenny* (c-variable-accessor '*kenny*))
   (setf (md-slot-cell-type 'null '*kenny*) (when nil :ephemeral))
   (when nil (setf (md-slot-owning 'null '*kenny*) t)))
 (eval-when (:load-toplevel)
   (let ((whathef (c-in nil)))
(md-install-cell nil '*kenny* whathef) (awaken-cell whathef))) '*kenny*)

Obviously still experimental. :)

ken



begin:vcard
fn:Kenneth Tilton
n:Tilton;Kenneth
email;internet:[EMAIL PROTECTED]
tel;work:732-359-6038
tel;home:732-359-6038
tel;cell:646-269-1077
version:2.1
end:vcard

_______________________________________________
cells-devel site list
[email protected]
http://common-lisp.net/mailman/listinfo/cells-devel

Reply via email to