[squeak-dev] The Trunk: System-bf.914.mcz
commits at source.squeak.org
commits at source.squeak.org
Thu Sep 8 19:51:34 UTC 2016
Bert Freudenberg uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-bf.914.mcz
==================== Summary ====================
Name: System-bf.914
Author: bf
Time: 8 September 2016, 9:49:26.777611 pm
UUID: 5fae5167-168c-4c08-8f4f-a624c6f39fb5
Ancestors: System-cmm.913
Fix DataStream reading of Characters on Spur.
=============== Diff against System-cmm.913 ===============
Item was changed:
----- Method: DataStream>>readCharacterOfSize: (in category 'write and read') -----
readCharacterOfSize: instSize
+ "Character changed to an immediate class in Spur"
| refPosn val |
self assert: instSize = 1.
refPosn := self getCurrentReference.
+ self setCurrentReference: refPosn. "before recursion - not really needed for integer"
- self setCurrentReference: refPosn.
val := self next.
+ self assert: val isInteger.
+ self setCurrentReference: refPosn. "before returning to next"
^ Character value: val.
!
Item was changed:
----- Method: DataStream>>readInstance (in category 'write and read') -----
readInstance
"PRIVATE -- Read the contents of an arbitrary instance.
ASSUMES: readDataFrom:size: sends me beginReference: after it
instantiates the new object but before reading nested objects.
NOTE: We must restore the current reference position after
recursive calls to next.
Let the instance, not the class read the data. "
| instSize aSymbol refPosn anObject newClass |
instSize := (byteStream nextNumber: 4) - 1.
refPosn := self getCurrentReference.
aSymbol := self next.
+ (aSymbol == #Character or: [aSymbol isCharacter "hack - why does this happen?"])
- aSymbol == #Character
ifTrue: [^ self readCharacterOfSize: instSize].
newClass := Smalltalk at: aSymbol asSymbol.
anObject := newClass isVariable "Create object here"
ifFalse: [newClass basicNew]
ifTrue: [newClass basicNew: instSize - (newClass instSize)].
self setCurrentReference: refPosn. "before readDataFrom:size:"
anObject := anObject readDataFrom: self size: instSize.
self setCurrentReference: refPosn. "before returning to next"
^ anObject!
Item was changed:
----- Method: DataStream>>vacantRef (in category 'other') -----
vacantRef
"Answer the magic 32-bit constant we use ***ON DISK*** as a stream 'reference
position' to identify a reference that's not yet filled in. This must be a
value that won't be used as an ordinary reference. Cf. outputReference: and
readReference. --
NOTE: We could use a different type ID for vacant-refs rather than writing
object-references with a magic value. (The type ID and value are
overwritten by ordinary object-references when weak refs are fullfilled.)"
+ ^1073741823 "Hardcode former SmallInteger maxVal"!
- ^ SmallInteger maxVal!
More information about the Squeak-dev
mailing list
|