[prev in list] [next in list] [prev in thread] [next in thread] 

List:       olpc-etoys
Subject:    [etoys-dev] Etoys: System-bf.57.mcz
From:       commits () source ! squeak ! org
Date:       2012-03-24 0:05:17
[Download RAW message or body]

Bert Freudenberg uploaded a new version of System to project Etoys:
http://source.squeak.org/etoys/System-bf.57.mcz

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

Name: System-bf.57
Author: bf
Time: 24 March 2012, 1:05:05 am
UUID: e513f00e-2caa-458d-b1cb-976b26b0db83
Ancestors: System-kfr.56

Fix loading classes from image segments if they changed shape.

=============== Diff against System-kfr.56 ===============

Item was changed:
  ----- Method: ImageSegment>>comeFullyUpOnReload: (in category 'fileIn/Out') -----
  comeFullyUpOnReload: smartRefStream
  	"fix up the objects in the segment that changed size.  An object in the segment is \
the wrong size for the modern version of the class. Construct a fake class that is \
the old size.  Replace the modern class with the old one in outPointers.  Load the \
segment. Traverse the instances, making new instances by copying fields, and running \
conversion messages.  Keep the new instances.  Bulk forward become the old to the \
new.  Let go of the fake objects and classes.  After the install (below), \
arrayOfRoots is filled in. Globalize new classes.  Caller may want to do some special \
install on certain objects in arrayOfRoots.  May want to write the segment out to \
disk in its new form."  
  	| mapFakeClassesToReal ccFixups receiverClasses rootsToUnhiberhate myProject \
existing forgetDoItsClass |  
  	forgetDoItsClass _ Set new.
  	RecentlyRenamedClasses _ nil.		"in case old data hanging around"
  	mapFakeClassesToReal _ smartRefStream reshapedClassesIn: outPointers.
  		"Dictionary of just the ones that change shape. Substitute them in outPointers."
  	ccFixups _ self remapCompactClasses: mapFakeClassesToReal
  				refStrm: smartRefStream.
  	ccFixups ifFalse: [^ self error: 'A class in the file is not compatible'].
  	endMarker _ segment nextObject. 	"for enumeration of objects"
  	endMarker == 0 ifTrue: [endMarker _ 'End' clone].
  	self fixCapitalizationOfSymbols.
  	arrayOfRoots _ self loadSegmentFrom: segment outPointers: outPointers.
  		"Can't use install.  Not ready for rehashSets"
  	mapFakeClassesToReal isEmpty ifFalse: [
  		self reshapeClasses: mapFakeClassesToReal refStream: smartRefStream
  	].
  	"When a Project is stored, arrayOfRoots has all objects in the project, except \
those in outPointers"  arrayOfRoots do: [:importedObject |
  		((importedObject isMemberOf: WideString) or: [importedObject isMemberOf: \
WideSymbol]) ifTrue: [  importedObject mutateJISX0208StringToUnicode.
  			importedObject class = WideSymbol ifTrue: [
  				"self halt."
  				Symbol hasInterned: importedObject asString ifTrue: [:multiSymbol |
  					multiSymbol == importedObject ifFalse: [
  						importedObject becomeForward: multiSymbol.
  					].
  				].
  			].
  		].
  		(importedObject isMemberOf: TTCFontSet) ifTrue: [
  			existing _ TTCFontSet familyName: importedObject familyName
  						pointSize: importedObject pointSize.	"supplies default"
  			existing == importedObject ifFalse: [importedObject becomeForward: existing].
  		].
  	].
  
  	receiverClasses _ self restoreEndianness.		"rehash sets"
  	smartRefStream checkFatalReshape: receiverClasses.
  
  	"Classes in this segment."
  	arrayOfRoots do: [:importedObject |
  		importedObject class class == Metaclass ifTrue: [forgetDoItsClass add: \
importedObject. self  declare: importedObject]].  rootsToUnhiberhate := \
OrderedCollection new.  arrayOfRoots do: [:importedObject |
  		((importedObject isMemberOf: ScriptEditorMorph)
  			or: [(importedObject isKindOf: TileMorph)
  				or: [(importedObject isMemberOf: ScriptingTileHolder)
  					or: [importedObject isKindOf: CompoundTileMorph]]]) ifTrue: [
  			rootsToUnhiberhate add: importedObject
  		].
  		(importedObject isMemberOf: CompiledMethod) ifTrue: [
  			importedObject sourcePointer > 0 ifTrue: [importedObject zapSourcePointer]].
  		(importedObject isMemberOf: Project) ifTrue: [
  			myProject _ importedObject.
  			importedObject ensureChangeSetNameUnique.
  			Project addingProject: importedObject.
  			importedObject restoreReferences.
  			self dependentsRestore: importedObject.
  			ScriptEditorMorph writingUniversalTiles:
  				((importedObject projectPreferenceAt: #universalTiles) ifNil: [false])]].
  
  	myProject ifNotNil: [
  		myProject world setProperty: #thingsToUnhibernate toValue: rootsToUnhiberhate \
asArray.  ].
  
  	mapFakeClassesToReal isEmpty ifFalse: [
+ 		mapFakeClassesToReal keysAndValuesDo: [:aFake :aReal |
- 		mapFakeClassesToReal keys do: [:aFake |
  			aFake indexIfCompact > 0 ifTrue: [aFake becomeUncompact].
+ 			aFake removeFromSystemUnlogged.
+ 			aFake becomeForward: aReal].
- 			aFake removeFromSystemUnlogged].
  		SystemOrganization removeEmptyCategories].
  	forgetDoItsClass do: [:c | c forgetDoIts].
  	"^ self"
  !

_______________________________________________
etoys-dev mailing list
etoys-dev@squeakland.org
http://lists.squeakland.org/mailman/listinfo/etoys-dev


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic