unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
* GOOPS %modify-[instance|class]
@ 2003-01-09  2:51 Clinton Ebadi
  2003-01-10 10:12 ` Mikael Djurfeldt
  0 siblings, 1 reply; 5+ messages in thread
From: Clinton Ebadi @ 2003-01-09  2:51 UTC (permalink / raw)


I think %modify-instance and -class should be public.

I specialized change-class and change-object-class (to the same thing, just to 
be safe because the manual says either one may be called but not both). I 
seem to have a problem: when I return the updated class, all my pointers to 
the old class are invalidated! And then it seems that GOOPS continues in an 
infinite loops updated the same objects over and over again.

goops.c is using SCM_CAR and SCM_CDR to write to the cell of memory itself. 
Maybe I could use the low level object struct and modify it somehow?
-- 
http://unknownlamer.org
The root of unspoken fear
The root grows deep in my heart
A dark cold sound tears at my life


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://mail.gnu.org/mailman/listinfo/guile-user


^ permalink raw reply	[flat|nested] 5+ messages in thread
* Re: GOOPS %modify-[instance|class]
@ 2003-01-20  4:01 Clinton Ebadi
  0 siblings, 0 replies; 5+ messages in thread
From: Clinton Ebadi @ 2003-01-20  4:01 UTC (permalink / raw)


On Wednesday 15 January 2003 07:38, Mikael Djurfeldt wrote:
> BTW, (oop goops save) seems to do something related to what you want
> to do.

In fact, it does almost everything I need. I was trying to use class
redefinition to
handle cycles in objects by storing an object in a proxy object and then (at
the end of serialization) resolving all cycles by converting all remaining
proxy objects into the objects they held. The save module does what my code
used to: have each object that contains another object recieve a copy of the
object instead of a pointer to the original object (which causes problems).

The first bug was that I was using #:init-key instead of #:init-keyword.
 After fixing that it doesn't explode but still doesn't work quite right. Is
 there anyway to use the MOP to lazily update all instances of one class to
 some unspecified second class in place? I can't see anything that would
 allow me to do handle recursive cycles in objects unless I integrated the
 serializer in the GC (and therefore written in C, something I do not want to
 do).

[ten minutes later]

This new method works:

(define-method (change-class (obj <unserializing>) (new <class>))
  (format #t "change-class: ~A:~A " obj (class-of obj))
  (let ((object (slot-ref obj 'object)))
    (%modify-instance obj (shallow-clone object))))

I changed some other stuff, but if %modify-instance is made public I can very
easily handle cycles in objects and my object serializer works (I do need to
go in and make it more efficient, but the point is that it /works/). The
project that I am writing this for is supposed to be 100% Scheme, but if I
have to I'll just include a copy of %modify-instance if I have to. The only
problem I have is that if I try to serialize an unserialized object I get
"Slot `object' is unbound in object #<<unserializing1> [address]>"  which
appears to be because the class <unserializing> is now invalid (is there a
way to make it valid again?)

--
http://unknownlamer.org


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://mail.gnu.org/mailman/listinfo/guile-user


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2003-01-20  4:01 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-01-09  2:51 GOOPS %modify-[instance|class] Clinton Ebadi
2003-01-10 10:12 ` Mikael Djurfeldt
2003-01-12 21:45   ` Clinton Ebadi
2003-01-15 12:38     ` Mikael Djurfeldt
  -- strict thread matches above, loose matches on Subject: below --
2003-01-20  4:01 Clinton Ebadi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).