[squeak-dev] The Trunk: System-topa.743.mcz

commits at source.squeak.org commits at source.squeak.org
Thu Jun 25 08:29:29 UTC 2015

Tobias Pape uploaded a new version of System to project The Trunk:

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

Name: System-topa.743
Author: topa
Time: 25 June 2015, 10:28:42.468 am
UUID: c215550f-71ae-4d36-859e-c11709db1363
Ancestors: System-topa.742

Character special-casing: as for DataStream as for SmartRefStream

=============== Diff against System-topa.742 ===============

Item was changed:
  ----- Method: SmartRefStream>>readInstanceSize:clsname:refPosn: (in category 'read write') -----
  readInstanceSize: instSize clsname: className refPosn: refPosn
  	"The common code to 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.
  Three cases for files from older versions of the system:
  1) Class has not changed shape, read it straight.
  2) Class has changed instance variables (or needs fixup).  Call a particular method to do it.
  3) There is a new class instead.  Find it, call a particular method to read.
  	All classes used to construct the structures dictionary *itself* need to be in 'steady' and they must not change!!  See setStream:"
  	| anObject newName newClass dict oldInstVars isMultiSymbol |
  	self flag: #bobconv.	
  	self setCurrentReference: refPosn.  "remember pos before readDataFrom:size:"
  	newName := renamed at: className ifAbsent: [className].
+ 	newName == #Character
+ 		ifTrue: [^ self readCharacterOfSize:  instSize].
  	isMultiSymbol := newName = #MultiSymbol or: [newName = #WideSymbol].
  	"isMultiSymbol ifTrue: [self halt]."
  	newClass := Smalltalk at: newName asSymbol.
  	(steady includes: newClass) & (newName == className) ifTrue: [
  	 	anObject := newClass isVariable "Create it here"
  			ifFalse: [newClass basicNew]
  			ifTrue: [newClass basicNew: instSize - (newClass instSize)].
  		anObject := anObject readDataFrom: self size: instSize.
  		self setCurrentReference: refPosn.  "before returning to next"
  		isMultiSymbol ifTrue: [^ Symbol intern: anObject asString].
  		^ anObject].
  	oldInstVars := structures at: className ifAbsent: [
  			self error: 'class is not in structures list'].	"Missing in object file"
  	anObject := newClass createFrom: self size: instSize version: oldInstVars.
  		"only create the instance"
  	self beginReference: anObject.
  	dict := self catalogValues: oldInstVars size: instSize.
  		"indexed vars as (1 -> val) etc."
  	dict at: #ClassName put: className.	"so conversion method can know it"
  	"Give each superclass a chance to make its changes"
  	self storeInstVarsIn: anObject from: dict.	"ones with the same names"
  	anObject := self applyConversionMethodsTo: anObject className: className varMap: dict.
  	self setCurrentReference: refPosn.  "before returning to next"
  	isMultiSymbol ifTrue: [^ Symbol intern: anObject asString].
  	^ anObject!

More information about the Squeak-dev mailing list