The Trunk: Kernel-fbs.785.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: Kernel-fbs.785.mcz

commits-2
Frank Shearar uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-fbs.785.mcz

==================== Summary ====================

Name: Kernel-fbs.785
Author: fbs
Time: 6 July 2013, 2:58:36.802 pm
UUID: c844ee59-dba5-ab4c-9ede-f6fb08725bcd
Ancestors: Kernel-fbs.784

Move ObjectOut to MorphicExtras-SqueakPage to be closer to the other sqp stuff. This at least separates SqueakPage code from Kernel, while we figure out how to properly disentagle things.

=============== Diff against Kernel-fbs.784 ===============

Item was removed:
- ProtoObject subclass: #ObjectOut
- instanceVariableNames: 'url page recursionFlag'
- classVariableNames: ''
- poolDictionaries: ''
- category: 'Kernel-Objects'!
-
- !ObjectOut commentStamp: '<historical>' prior: 0!
- I am a stand-in for an object that is out on the disk.  The object that is out on the disk is the head of a tree of objects that are out.  See SqueakPage.
-
- When any message is sent to me, I don't understand it, and bring in my true object.  I become myself with the objects and resend the message.  
-
- I may not represent the object nil.  
- The file is represented as a url, and that url may point at any file on the net.  
-
- page is a SqueakPage.
- If the cache already has an object, widely in use, that claims to be the object for my url, what do I do?  I can't become him, since others believe that he is the true object.  Run through memory and replace refs to me with refs to him.  Be careful not to trigger a fault.  Become me to a string, then find pointers and replace?
-
- [[[They don't want to end up holding an ObjectOut.  (would oscillate back and forth)  This is a problem.  A user could bring in two trees that both refer to a 3rd url.  (check with cache before installing any new ObjectOut) Two trees could be written to the same url.
- Or, I remain an ObjectOut, and keep getting notUnderstood, and keep returning the other guy.
- Or I smash the cache, and install MY page and object.  Other guy is a copy -- still in, but with no place in the cache.  When we both write to the same url, there will be trouble.]  No -- search and replace.]]]
- !

Item was removed:
- ----- Method: ObjectOut>>comeFullyUpOnReload: (in category 'object storage') -----
- comeFullyUpOnReload: smartRefStream
- "Normally this read-in object is exactly what we want to store.  Try to dock first.  If it is here already, use that one."
-
- | sp |
- "Transcript show: 'has ref to: ', url; cr."
- (sp := SqueakPageCache pageCache at: page ifAbsent: [nil]) ifNotNil: [
- sp isContentsInMemory ifTrue: [^ sp contentsMorph]].
- ^ self!

Item was removed:
- ----- Method: ObjectOut>>doesNotUnderstand: (in category 'fetch from disk') -----
- doesNotUnderstand: aMessage
- "Bring in the object, install, then resend aMessage"
- | realObject oldFlag response |
- oldFlag := recursionFlag.
- recursionFlag := true.
- "fetch the object"
- realObject := self xxxFetch. "watch out for the become!!"
- "Now we ARE the realObject"
- oldFlag == true ifTrue: [
- response := (UIManager default chooseFrom: #('proceed normally' 'debug')
- title: 'Object being fetched for a second time.
- Should not happen, and needs to be fixed later.').
- response = 2 ifTrue: [self halt]]. "We are already the new object"
-
- "Can't be a super message, since this is the first message sent to this object"
- ^ realObject perform: aMessage selector withArguments: aMessage arguments!

Item was removed:
- ----- Method: ObjectOut>>isInMemory (in category 'basics') -----
- isInMemory
- "We are a place holder for an object that is out."
- ^ false!

Item was removed:
- ----- Method: ObjectOut>>objectForDataStream: (in category 'object storage') -----
- objectForDataStream: refStrm
-     "Return an object to store on a data stream (externalize myself)."
-
-     ^ self!

Item was removed:
- ----- Method: ObjectOut>>readDataFrom:size: (in category 'object storage') -----
- readDataFrom: aDataStream size: varsOnDisk
- "Make self be an object based on the contents of aDataStream, which was generated by the object's storeDataOn: method. Return self."
- | cntInstVars |
- cntInstVars := self xxxClass instSize.
- self xxxClass isVariable
- ifTrue: [self xxxClass error: 'needs updating'] "assume no variable subclasses"
- ifFalse: [cntInstVars := varsOnDisk].
-
- aDataStream beginReference: self.
- 1 to: cntInstVars do:
- [:i | self xxxInstVarAt: i put: aDataStream next].
- " 1 to: cntIndexedVars do:
- [:i | self basicAt: i put: aDataStream next].
- "
- ^ self!

Item was removed:
- ----- Method: ObjectOut>>storeDataOn: (in category 'object storage') -----
- storeDataOn: aDataStream
- "Store myself on a DataStream. See also objectToStoreOnDataStream.
- must send 'aDataStream beginInstance:size:'"
- | cntInstVars |
-
- cntInstVars := self class instSize.
- "cntIndexedVars := self basicSize."
- aDataStream
- beginInstance: self xxxClass
- size: cntInstVars "+ cntIndexedVars".
- 1 to: cntInstVars do:
- [:i | aDataStream nextPut: (self xxxInstVarAt: i)].
- " 1 to: cntIndexedVars do:
- [:i | aDataStream nextPut: (self basicAt: i)]
- "!

Item was removed:
- ----- Method: ObjectOut>>url: (in category 'access') -----
- url: aString
-
- url := aString!

Item was removed:
- ----- Method: ObjectOut>>veryDeepCopyWith: (in category 'object storage') -----
- veryDeepCopyWith: deepCopier
- "Copy me and the entire tree of objects I point to.  An object in the tree twice is copied once, and both references point to him.  deepCopier holds a dictionary of objects we have seen.  Some classes refuse to be copied.  Some classes are picky about which fields get deep copied."
- | class index sub subAss new absent |
- new := deepCopier references at: self ifAbsent: [absent := true].
- absent ifNil: [^ new]. "already done"
- class := self xxxClass.
- class isMeta ifTrue: [^ self]. "a class"
- new := self xxxClone.
- "not a uniClass"
- deepCopier references at: self put: new. "remember"
- "class is not variable"
- index := class instSize.
- [index > 0] whileTrue:
- [sub := self xxxInstVarAt: index.
- (subAss := deepCopier references associationAt: sub ifAbsent: [nil])
- ifNil: [new xxxInstVarAt: index put: (sub veryDeepCopyWith: deepCopier)]
- ifNotNil: [new xxxInstVarAt: index put: subAss value].
- index := index - 1].
- new rehash. "force Sets and Dictionaries to rehash"
- ^ new
- !

Item was removed:
- ----- Method: ObjectOut>>xxxClass (in category 'basics') -----
- xxxClass
- "Primitive. Answer the object which is the receiver's class. Essential. See
- Object documentation whatIsAPrimitive."
-
- <primitive: 111>
- self primitiveFailed!

Item was removed:
- ----- Method: ObjectOut>>xxxClone (in category 'basics') -----
- xxxClone
-
- <primitive: 148>
- self primitiveFailed!

Item was removed:
- ----- Method: ObjectOut>>xxxInstVarAt: (in category 'basics') -----
- xxxInstVarAt: index
- "Primitive. Answer a fixed variable in an object. The numbering of the
- variables corresponds to the named instance variables. Fail if the index
- is not an Integer or is not the index of a fixed variable. Essential. See
- Object documentation whatIsAPrimitive."
-
- <primitive: 73>
- self primitiveFailed !

Item was removed:
- ----- Method: ObjectOut>>xxxInstVarAt:put: (in category 'basics') -----
- xxxInstVarAt: anInteger put: anObject
- "Primitive. Store a value into a fixed variable in the receiver. The
- numbering of the variables corresponds to the named instance variables.
- Fail if the index is not an Integer or is not the index of a fixed variable.
- Answer the value stored as the result. Using this message violates the
- principle that each object has sovereign control over the storing of
- values into its instance variables. Essential. See Object documentation
- whatIsAPrimitive."
-
- <primitive: 74>
- self primitiveFailed !

Item was removed:
- ----- Method: ObjectOut>>xxxReset (in category 'access') -----
- xxxReset
- "mark as never brought in"
- recursionFlag := nil!