[Etoys] Revised Etoys V3 files (The New Etoys image)

Yoshiki Ohshima yoshiki at vpri.org
Tue Feb 26 02:49:29 EST 2008


  We released the new Etoys V3 development files about a week ago, but
there was a big screw-up on my side.  The EtoysV3.sources was
corrupted, and also the image was inconsistent with the update stream.

  There was some discussion how to mitigate the situation internally,
and we concluded that we release the revised files under the same

  For those who are doing the code editing, please download the new
versions and substitute the old versions on your disk with them.

  http://tinlizzie.org/olpc/EtoysV3.sources   (18907980 bytes)
  http://tinlizzie.org/olpc/etoys-dev-3.0.zip  (9875796 bytes)

Also, please update the image.  Sorry for the confusion that is caused
by making these revisions.

  Thank you!

-- Yoshiki

  It could have been easily spotted by a simple test.  Very
embarassing kind of mistake, I have to say.

  BTW, there are some interesting issues I found during the process.
A test like the following collects all methods whose recompiled result
doesn't match with the current version:

| meth newMeth name |
col _ OrderedCollection new.
Smalltalk allClassesDo: [:c |
	{c. c class} do: [:cls |
		cls compilerClass = Compiler ifTrue: [
			cls organization categories do: [:cat |
				(cls organization listAtCategoryNamed: cat) do: [:sel |
					(name _ cls name, ' ', sel) displayAt: 700 at 75.
					meth _ cls compiledMethodAt: sel.
					ast _ cls compilerClass new compile: (cls sourceCodeAt: sel) in: cls notifying: nil ifFail: [self halt].
					newMeth _ ast generate: meth trailer.
					(sel ~= #cacheTempNames: and: [sel ~= #setTempNamesIfCached:]) ifTrue: [
						meth = newMeth ifFalse: [col add: name]]]]]]].

We indeed have several of these methods.

  One group of them has to do with automatically generated quick
methods (by Kedama).  The difference is only the trailer bytes so the
behavior of them are not affected and can be corrected by recompiling.
(One can argue that automatically generated methods shouldn't be in
the .sources file, though.)

  The second group is left-over from a compiler change about literal
arrays.  Squeak used to compile an expression:

  #(nil 'void*')

to an array with #nil and #'void*'.  There was a change (with some
opposition) to compile it to an array with nil (UndefinedObject) and
#'void*'.  However, some compiled method that were compiled by the old
compiler stayed.  ExternalStructures have these.  While we are not
using them, it would be nice to fix them at one point.

  The third group (only one method in it) has to do with character
encodings.  The method text of Character
class>>initializeClassificationTable is almost correct, but the actual
compiled method is compiled with old scheme of character encodings.
The method contains some pairs of characters but some of them were
dubious even before 3.8.  The conversion got it almost right, but
there is a pair (a character that looks like 'CE' and another that
looks like 'ce') that got messed up.  We should push an update to fix

More information about the Etoys mailing list