Saving morph books....

Mark Mayfield mmayfield at
Thu Aug 19 22:09:41 UTC 1999

When saving a morph book to a file in version 2.5 I get an error in 
the following method...

uniClassInstVarsRefs: dummy
	"If some of the objects seen so far are instances UniClasses, 
check the UniClasses for extra class inst vars, and send them to the 
steam also.  The new objects get added to (dummy references), where 
they will be noticed by the caller.  They will wind up in the 
structures array and will be written on the disk by class."

| uniClasses normal more aUniClass mySize |
"Any classes used in the structure of classInstVars must be written out also!
	dummy nextPut: (OrderedCollection new).
But for now, only uses Arrays."

uniClasses := Set new.
normal := Object class instSize.
more := true.
[more] whileTrue: [
	more := false.
	dummy references keysDo: [:each | "any faster way to do this?"
		(aUniClass := each class) isSystemDefined ifFalse: [
			(uniClasses includes: aUniClass name) ifFalse: [
				mySize := aUniClass class instSize.
				normal+1 to: mySize do: [:ii |
					more := true.
					dummy nextPut: (aUniClass 
instVarAt: ii)].
				uniClasses add: aUniClass name]]]].
"References dictionary is modified as the loop proceeds, but we will 
catch any we missed on the next cycle."

The error occurs in the following line:

			(aUniClass := each class) isSystemDefined ifFalse: [

When I inspect the objects within the debugger, each is a 
PasteUpMorph object, BUT aUniClass is a MorphObjectOut. When a 
MorphObjectOut is sent the message isSystemDefine, I get the error. 
Why wouldn't the assignment aUniClass := each class not assign 
aUniClass the class of the object referenced by each?



More information about the Squeak-dev mailing list