[cells-cvs] CVS cells
ktilton
ktilton at common-lisp.net
Wed Dec 13 18:05:08 UTC 2006
Update of /project/cells/cvsroot/cells
In directory clnet:/tmp/cvs-serv6305
Modified Files:
cells.lpr constructors.lisp family.lisp
Added Files:
variables.lisp
Log Message:
--- /project/cells/cvsroot/cells/cells.lpr 2006/12/12 15:58:42 1.25
+++ /project/cells/cvsroot/cells/cells.lpr 2006/12/13 18:05:08 1.26
@@ -23,8 +23,7 @@
(make-instance 'module :name "md-utilities.lisp")
(make-instance 'module :name "family.lisp")
(make-instance 'module :name "fm-utilities.lisp")
- (make-instance 'module :name "family-values.lisp")
- (make-instance 'module :name "variables.lisp"))
+ (make-instance 'module :name "family-values.lisp"))
:projects (list (make-instance 'project-module :name
"utils-kt\\utils-kt"))
:libraries nil
--- /project/cells/cvsroot/cells/constructors.lisp 2006/12/12 15:58:42 1.14
+++ /project/cells/cvsroot/cells/constructors.lisp 2006/12/13 18:05:08 1.15
@@ -62,7 +62,8 @@
:rule (c-lambda , at body)
, at args))
-(export! c?once c?n-until c?1)
+(export! c?once c?n-until c?1 c_1)
+
(defmacro c?once (&body body)
`(make-c-dependent
:code '(without-c-dependency , at body)
@@ -70,6 +71,14 @@
:value-state :unevaluated
:rule (c-lambda (without-c-dependency , at body))))
+(defmacro c_1 (&body body)
+ `(make-c-dependent
+ :code '(without-c-dependency , at body)
+ :inputp nil
+ :lazy t
+ :value-state :unevaluated
+ :rule (c-lambda (without-c-dependency , at body))))
+
(defmacro c?1 (&body body)
`(c?once , at body))
--- /project/cells/cvsroot/cells/family.lisp 2006/11/13 05:28:08 1.17
+++ /project/cells/cvsroot/cells/family.lisp 2006/12/13 18:05:08 1.18
@@ -19,12 +19,14 @@
(in-package :cells)
(eval-when (:compile-toplevel :execute :load-toplevel)
- (export '(model value family kids kid1 ^k1 kid2 ^k2 last-kid ^k-last perishable)))
+ (export '(model value family dbg
+ kids kid1 ^k1 kid2 ^k2 last-kid ^k-last perishable)))
(defmodel model ()
((.md-name :cell nil :initform nil :initarg :md-name :accessor md-name)
(.fm-parent :cell nil :initform nil :initarg :fm-parent :accessor fm-parent)
- (.value :initform nil :accessor value :initarg :value)))
+ (.value :initform nil :accessor value :initarg :value)
+ (zdbg :initform nil :accessor dbg :initarg :dbg)))
(defmethod fm-parent (other)
--- /project/cells/cvsroot/cells/variables.lisp 2006/12/13 18:05:08 NONE
+++ /project/cells/cvsroot/cells/variables.lisp 2006/12/13 18:05:08 1.1
;; -*- mode: Lisp; Syntax: Common-Lisp; Package: cells; -*-
#|
Cells -- Automatic Dataflow Managememnt
Copyright (C) 1995, 2006 by Kenneth Tilton
This library is free software; you can redistribute it and/or
modify it under the terms of the Lisp Lesser GNU Public License
(http://opensource.franz.com/preamble.html), known as the LLGPL.
This library is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the Lisp Lesser GNU Public License for more details.
|#
(in-package :cells)
(defun c-variable-accessor (symbol)
(assert (symbolp symbol))
(c-variable-reader symbol))
(defun (setf c-variable-accessor) (value symbol)
(assert (symbolp symbol))
(c-variable-writer value symbol))
(defun c-variable-reader (symbol)
(assert (symbolp symbol))
(assert (get symbol 'cell))
(cell-read (get symbol 'cell)))
(defun c-variable-writer (value symbol)
(assert (symbolp symbol))
(setf (md-slot-value nil symbol) value)
(setf (symbol-value symbol) value))
(export! def-c-variable)
(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)))
(defobserver *kenny* ()
(trcx kenny-obs new-value old-value old-value-boundp))
#+test
(def-c-variable *kenny* (c-in nil))
#+test
(defmd kenny-watcher ()
(twice (c? (bwhen (k *kenny*)
(* 2 k)))))
(defobserver twice ()
(trc "twice kenny is:" new-value self old-value old-value-boundp))
#+test-ephem
(progn
(cells-reset)
(let ((tvw (make-instance 'kenny-watcher)))
(trcx twice-read (twice tvw))
(setf *c-debug* nil)
(setf *kenny* 42)
(setf *kenny* 42)
(trcx post-setf-kenny *kenny*)
(trcx print-twice (twice tvw))
))
#+test
(let ((*kenny* 13)) (print *kenny*))
#+test
(let ((c (c-in 42)))
(md-install-cell '*test-c-variable* '*test-c-variable* c)
(awaken-cell c)
(let ((tvw (make-instance 'test-var-watcher)))
(trcx twice-read (twice tvw))
(setf *test-c-variable* 69)
(trcx print-testvar *test-c-variable*)
(trcx print-twice (twice tvw))
(unless (eql (twice tvw) 138)
(inspect (md-slot-cell tvw 'twice))
(inspect c)
))
)
#+test2
(let ((tvw (make-instance 'test-var-watcher :twice (c-in 42))))
(let ((c (c? (trcx joggggggggging!!!!!!!!!!!!!!!)
(floor (twice tvw) 2))))
(md-install-cell '*test-c-variable* '*test-c-variable* c)
(awaken-cell c)
(trcx print-testvar *test-c-variable*)
(trcx twice-read (twice tvw))
(setf (twice tvw) 138)
(trcx print-twice (twice tvw))
(trcx print-testvar *test-c-variable*)
(unless (eql *test-c-variable* 69)
(inspect (md-slot-cell tvw 'twice))
(inspect c)
))
)
More information about the Cells-cvs
mailing list