[cells-devel] A thing that does not work well with Cells... SOLVED! well, kind of...

Peder Chr. Nørgaard pcn at pogt.dk
Fri May 22 12:41:35 UTC 2009


Hello Jakub, Kenny
	Jakub beat me into making the PRINT-OBJECT method more robust.  Nevertheless:  
my problem - whatever it is - has disappeared.  I am not all that comfortable 
leaving behind me a problem (in SBCL or CELLS) that I don't understand.  But 
at least this solution of Jakub's cannot possible have any negative side 
effects.

	I still don't have a clue what the basic problem is - I have spent a few 
hours today trying to get the modified PRINT-OBJECT method print something or 
enter the debugger - no such luck.  I never see the output of the code 
snippet "(format s \"UNINITIALIZED-~a\" (type-of self)".  It seems that when 
the method is recoded to be more robust, it stops being invoked.  You 
confused?  I am!

	At any rate, thanks for the support, I can now get on with my project.  
Kenny, you might wish to enter this small modification in the main Cells CVS 
source.

	Jakub, you write "Perhaps I do not understand your problem".  I have been 
amiss explaining the manifestation of the problem.  It comes here:  with the 
origical Cells code, the first time I access - SETF or not - the PROTOTYPE 
slot af a newly defined PCL-CLASS - if the class in question is a model - the 
access fails.  The access should trigger an allocation of the prototype 
object.  The failure - whatever it is - is shadowed by the problem with 
PRINT-OBJECT.  But the result is, that the PROTOTYPE slot in the PCL-CLASS 
object representing the MODEL class - is no longer NIL, it is unbound.

	But never mind, don't worry about this.  Jakub's fix pushes this problem out 
of the real world, at least for me.


best regards
				--peder chr.


On Thursday 21 May 2009, you wrote:
> Hello,
>
> On Thu, May 21, 2009 at 1:08 PM, Peder Chr. Nørgaard <pcn at pogt.dk> wrote:
> >        Modifying the content of the prototype object of a class - which
> > is what your proposal does - is too likely to have some devastating side
> > effects - now .MD-STATE and .MD-NAME are no longer NIL by default, as
> > specified in the definition of MODEL, they are :PROTOTYPE...
>
> But in the prototype object they are not NIL anyway, but unbound,
> which is the problem. As far as I can tell the prototype object is
> used mostly for method computation.
>
> In any case changing relevant print-object method in family.lisp to [I
> pushed it to my mostly cosmetic fork of cells at
> http://github.com/Ramarren/cells/commit/b808dbd7cceea5573f09a1e02abbfb08e20
>478c7 ]
>
> (defmethod print-object ((self model) s)
>   #+shhh (format s "~a" (type-of self))
>   (if (and (slot-boundp self '.md-state)
>            (slot-boundp self '.md-name))
>       (format s "~a~a" (if (mdead self) "DEAD!" "")
>               (or (md-name self) (type-of self)))
>       (format s "UNINITIALIZED-~a" (type-of self))))
>
> seems to work as well. Perhaps I do not understand your problem, what
> I do is this (with the change above):
>
> CL-USER> (defmodel my-model (model)
>                  ((my-class-slot :cell nil :ALLOCATION :CLASS)))
> #<STANDARD-CLASS MY-MODEL>
> CL-USER> (sb-mop:finalize-inheritance (find-class 'my-model))
> NIL
> CL-USER> (setf (slot-value (sb-mop:class-prototype (FIND-CLASS 'my-model))
> 			       'my-class-slot) 'a-value)
> A-VALUE
> CL-USER> (slot-value (sb-mop:class-prototype (find-class 'my-model))
> 'my-class-slot)
> A-VALUE
>
> Regards,
> Jakub Higersberger



-- 
Peder Chr. Nørgaard     e-mail: pcn at pogt.dk
Gefionsvej 19
DK-8230 Åbyhøj          tel: +45 87 44 11 99
Denmark                 mob: +45 30 91 84 31





More information about the cells-devel mailing list