The objects in the segment's byte array are "instantiated" by the primitive #loadSegmentFrom:outPointers:. In fact they are not instantiated, but the byte array is just twisted a bit to represent real objects on the heap (internal references and indexes into outPointers are remapped).
Adrian On Dec 10, 2009, at 01:59 , Sheridan Mahoney wrote: > > > > Adrian Lienhard wrote: >> >> >> On Dec 8, 2009, at 12:08 , Mariano Martinez Peck wrote: >> >>> On Fri, Dec 4, 2009 at 12:05 PM, Adrian Lienhard <[email protected]> >>> wrote: >> >>> When you are creating your root of objects and you put symbols >>> inside, they >>> are not put in ourPointers but in ByteArray. >>> This is due to the fact that the only object who is pointing to that >>> symbol >>> is inside the segment ? >> >> To be precise, the symbols are also pointed to by the symbol table, >> but only by weak references. Since image segments use the GC mark >> logic, these pointers are not considered. >> >> > > Martin and I had been working towards the idea that ImageSegments > should > never create non-Canonical symbols, and the user should not have to > use > manual techniques to preserve symbols they are interested in keeping > alive. > > I ended up getting stuck however, in trying to discover what process > ImageSegment > goes through while it is installing objects - ImageSegment #install > has a > call to an > unimplemented method #readFromFileWithSymbols which it seems it > should be > using, but isn't....(wha' the?) > > > install > "This operation retrieves the segment if necessary from file storage, > installs it in memory, and replaces (using become:) all the root > stubs with > the reconstructed roots of the segment." > > | newRoots | > state = #onFile ifTrue: [self readFromFile]. > state = #onFileWithSymbols ifTrue: [self readFromFileWithSymbols. > endMarker := segment nextObject. "for enumeration of > objects" > endMarker == 0 ifTrue: [endMarker := 'End' clone]]. > (state = #active) | (state = #imported) ifFalse: [self > errorWrongState]. > newRoots := self loadSegmentFrom: segment outPointers: outPointers. > state = #imported > ifTrue: ["just came in from exported file" > arrayOfRoots := newRoots] > ifFalse: [ > arrayOfRoots elementsForwardIdentityTo: newRoots]. > state := #inactive. > Beeper beepPrimitive > > > I think the next step in this trajectory is to trace is how the > state is > getting > set - right now it is kind of a mystery... > > Does this seem reasonable? > > Thanks, > > Sheri > > > -- > View this message in context: > http://n2.nabble.com/Re-getting-rid-of-Symbol-new-tp4109230p4143090.html > Sent from the Pharo Smalltalk mailing list archive at Nabble.com. > > _______________________________________________ > Pharo-project mailing list > [email protected] > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project _______________________________________________ Pharo-project mailing list [email protected] http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
