Kenneth Tilton wrote:
Frank Goenninger wrote:
Hi all Cells-users:
It is the first time I get a
Current DP 1 not GE pulse 4 of cell (NIL . <vld>)<4:A ASCENDER/HELVETICA = NIL> [Condition of type SIMPLE-ERROR]
error. This code throws the error:
(defun c-pulse-update (c key) (declare (ignorable key)) (unless (find key '(:valid-uninfluenced)) (trc nil "!!!!!!! c-pulse-update updating !!!!!!!!!!" *data-pulse- id* c key :prior-pulse (c-pulse c))) (assert (>= *data-pulse-id* (c-pulse c)) () "Current DP ~a not GE pulse ~a of cell ~a" *data-pulse-id* (c- pulse c) c) (setf (c-pulse c) *data-pulse-id*))
Backtrace: 0: (ERROR "Current DP ~a not GE pulse ~a of cell ~a" 1 4 (NIL . <vld>)<4:A ASCENDER/HELVETICA = NIL>) 1: (CELLS::C-PULSE-UPDATE (NIL . <vld>)<4:A ASCENDER/HELVETICA = NIL> :VALID-UNINFLUENCED) Locals: CELLS::C = (NIL . <vld>)<4:A ASCENDER/HELVETICA = NIL> CELLS::KEY = :VALID-UNINFLUENCED CELLS::C = (NIL . <vld>)<4:A ASCENDER/HELVETICA = NIL> #:|g38499| = #(0 NIL ..) 2: (CELLS::ENSURE-VALUE-IS-CURRENT (NIL . <vld>)<4:A ASCENDER/ HELVETICA = NIL> :C-READ NIL) 3: ((:INTERNAL CELLS::CELL-READ 0) NIL NIL) 4: (CELLS::CALL-WITH-INTEGRITY NIL NIL #<Closure (:INTERNAL CELLS::CELL-READ 0) @ #x10e6b8da> NIL) 5: (CELLS::CELL-READ (NIL . <vld>)<4:A ASCENDER/HELVETICA = NIL>) 6: (CELLS::MD-SLOT-VALUE HELVETICA CNX::ASCENDER) 7: ((METHOD CNX::ASCENDER (CNX::CELLO-FONT)) HELVETICA) 8: ((METHOD CNX::FONT-ASCENDER (CNX::CELLO-CONTROL)) FRGO-TEXT-1) Locals: CELLS:SELF = FRGO-TEXT-1 9: ((:INTERNAL (MOP:CLASS-DEFAULT-INITARGS CNX::CNX-TEXT :LT) 0) dirty<0:A LT/FRGO-TEXT-1 = NIL>) 10: (CELLS::CALCULATE-AND-LINK dirty<0:A LT/FRGO-TEXT-1 = NIL>) 11: ((FLET CELLS::CALCULATE-AND-SET CELLS::BODY)) 12: (CELLS::CALCULATE-AND-SET dirty<0:A LT/FRGO-TEXT-1 = NIL> :FN- AWAKEN-CELL NIL) 13: ((METHOD CELLS::AWAKEN-CELL (CELLS::C-RULED)) dirty<0:A LT/FRGO- TEXT-1 = NIL>) 14: ((METHOD CELLS:MD-AWAKEN (CELLS::MODEL-OBJECT)) FRGO-TEXT-1) 15: ((METHOD CELLS:MD-AWAKEN :AROUND (CELLS::MODEL-OBJECT)) FRGO- TEXT-1) 16: ((:INTERNAL (:EFFECTIVE-METHOD 1 NIL NIL T T) 0) FRGO-TEXT-1) 17: ((:INTERNAL (:INTERNAL (METHOD SHARED-INITIALIZE :AFTER #) 0) 0) :AWAKEN FRGO-TEXT-1) 18: (CELLS::JUST-DO-IT :AWAKEN) 19: (CELLS::FINISH-BUSINESS) 20: ((FLET CELLS::CALL-WITH-INTEGRITY CELLS::GO-GO)) 21: (CELLS::CALL-WITH-INTEGRITY NIL NIL #<Closure (:INTERNAL CTK:: %RUN-WINDOW 0) [CELLO-NX-TEST-MAIN-WINDOW] @ #x10dd0fea> NIL) 22: (CTK::%RUN-WINDOW) 23: (CTK::%DO-RUN-WINDOW) 24: (CTK:RUN-WINDOW CNX-TEST::CELLO-NX-TEST-MAIN-WINDOW) 25: (CNX-TEST:TEST-MAIN)
Now - questions I have are:
What does :valid-uninfluenced actually mean?
When cell X changes, another cell C becomes current with that change aka valid one of two ways: cell C gets recalculated, or the cells engine determines C does not depend directly or indirectly on X. The latter case is "valid and uninfluenced".
Is the code above correct
Yes.
or should the assertion be inside the (unless ...) form? What is the logic behind?
The logic is that it is impossible for a cell pulse to get ahead of *data-pulse-id* without something being broken in the Cells engine, so the engine yells if it sees that.
I have encountered this myself, and it is indeed rare. It arose because I had a model instance lying around from a previous iteration.
Sorry, I forgot to explain. By "iteration" I mean the test iteration/application run that begins with cells-reset. So I would test some stuff, make some changes, and tkick off another test. cells-reset runs dropping the pulse to 1, but then some old instance from the prior test comes into play.
kt
I forget /exactly/ how I did that, but it was trickier than just doing something silly like use a global variable to hold onto some data. ie, It might take some digging to figure out how an old instance is still in play. Wish I could remember the deets.
kt
cells-devel site list cells-devel@common-lisp.net http://common-lisp.net/mailman/listinfo/cells-devel
No virus found in this incoming message. Checked by AVG - www.avg.com Version: 8.5.375 / Virus Database: 270.12.93/2206 - Release Date: 06/27/09 17:55:00