Revision: 3150 Author: eliot Date: 2014-11-25 15:33:58 -0800 (Tue, 25 Nov 2014) Log Message: ----------- Add MorphFloat.st which morphs the Float hierarchy to admit immediate floats. Add buildsqueaktrunkimage.sh to create image with morphed float hierarchy. Use UpdateSqueakTrunkImage.st in place of equivalent BuildSqueakTrunkImage.st.
Modified Paths: -------------- branches/Cog/image/UpdateSqueakTrunkImage.st branches/Cog/image/buildspurtrunkimage.sh
Added Paths: ----------- branches/Cog/image/MorphFloat.st branches/Cog/image/buildsqueaktrunkimage.sh
Removed Paths: ------------- branches/Cog/image/BuildSqueakTrunkImage.st
Deleted: branches/Cog/image/BuildSqueakTrunkImage.st =================================================================== --- branches/Cog/image/BuildSqueakTrunkImage.st 2014-11-24 22:09:18 UTC (rev 3149) +++ branches/Cog/image/BuildSqueakTrunkImage.st 2014-11-25 23:33:58 UTC (rev 3150) @@ -1,6 +0,0 @@ -"Change the update stream to trunk and update" -[MCMcmUpdater - defaultUpdateURL: 'http://source.squeak.org/trunk'; - updateFromServer] valueSupplyingAnswer: true. - -Smalltalk snapshot: true andQuit: true Added: branches/Cog/image/MorphFloat.st =================================================================== --- branches/Cog/image/MorphFloat.st (rev 0) +++ branches/Cog/image/MorphFloat.st 2014-11-25 23:33:58 UTC (rev 3150) @@ -0,0 +1,111 @@ +SystemChangeNotifier uniqueInstance doSilently: + [| boxedFloat floatClassVars soonToBeFloat smallFloat | + boxedFloat := Float. + floatClassVars := Float classVariablesString. + soonToBeFloat := Number subclass: #SoonToBeFloat + instanceVariableNames: '' + classVariableNames: '' + poolDictionaries: '' + category: 'Kernel-Numbers'. + smallFloat := soonToBeFloat subclass: #SmallFloat64 + instanceVariableNames: '' + classVariableNames: '' + poolDictionaries: '' + category: 'Kernel-Numbers'. + '!!SoonToBeFloat class methodsFor: ''instance creation'' stamp: ''eem 11/25/2014 7:54''!! +basicNew + ^Float basicNew: 2!! !! +!!SoonToBeFloat class methodsFor: ''instance creation'' stamp: ''eem 11/25/2014 7:54''!! +basicNew: anInteger + ^Float basicNew: 2!! !!' readStream fileIn. + + [soonToBeFloat variableWordSubclass: #Float + instanceVariableNames: '' + classVariableNames: floatClassVars + poolDictionaries: '' + category: 'Kernel-Numbers'] + on: Error, Warning + do: [:ex| + Transcript cr; nextPutAll: ex messageText; flush. + ex isResumable ifFalse: + [Notification adoptInstance: ex]. + ex resume: true]. + soonToBeFloat classPool: Float classPool. + Float classPool: nil. + soonToBeFloat + comment: Float comment asString + stamp: Float organization commentStamp. + Float class selectors do: + [:s| + (soonToBeFloat class includesSelector: s) ifFalse: + [soonToBeFloat class recompile: s from: Float class. + soonToBeFloat class organization + classify: s + under: (Float class organization categoryOfElement: s)]]. + + (Float selectors reject: [:s| (Float >> s) primitive between: 40 and: 59]) do: + [:s| + soonToBeFloat recompile: s from: Float. + soonToBeFloat organization + classify: s + under: (Float organization categoryOfElement: s). + Float removeSelector: s]. + [boxedFloat setName: #BoxedFloat64. + boxedFloat environment renameClass: Float from: #Float. + soonToBeFloat setName: #Float. + soonToBeFloat environment renameClass: soonToBeFloat from: #SoonToBeFloat] + on: AttemptToWriteReadOnlyGlobal + do: [:ex| ex resume: true]. + + '!!Float class methodsFor: ''instance creation'' stamp: ''eem 11/25/2014 7:54''!! +basicNew + ^BoxedFloat64 basicNew: 2!! !! + +!!Float class methodsFor: ''instance creation'' stamp: ''eem 11/25/2014 7:54''!! +basicNew: anInteger + ^BoxedFloat64 basicNew: 2!! !! +!!BoxedFloat64 class methodsFor: ''instance creation'' stamp: ''eem 11/25/2014 7:54''!! +basicNew: sizeRequested + "Primitive. Answer an instance of this class with the number + of indexable variables specified by the argument, sizeRequested. + Fail if this class is not indexable or if the argument is not a + positive Integer, or if there is not enough memory available. + Essential. See Object documentation whatIsAPrimitive." + + <primitive: 71> + sizeRequested isInteger ifTrue: + [^sizeRequested = 2 + ifTrue: "arg okay; space must be low." + [OutOfMemory signal. + self basicNew: sizeRequested] "retry if user proceeds" + ifFalse: + [self error: ''a Float shall always have two slots'']]. + self primitiveFailed!! !! + +!!SmallFloat64 class methodsFor: ''instance creation'' stamp: ''eem 11/25/2014 7:54''!! +basicNew: anInteger + ^self basicNew!! !! +!!SmallFloat64 class methodsFor: ''instance creation'' stamp: ''eem 11/25/2014 7:54''!! +basicNew + self error: ''SmallFloat64s can only be created by performing arithmetic''!! !!' readStream fileIn. + + boxedFloat class selectors do: + [:s| + ((#(basicNew basicNew:) includes: s) not + and: [soonToBeFloat class includesSelector: s]) ifTrue: + [boxedFloat class removeSelector: s]]. + + {boxedFloat. boxedFloat class. Float. Float class} do: + [:bfc| | binding | + binding := bfc binding. + bfc selectorsAndMethodsDo: + [:s :m| + m methodClassAssociation: binding]. + bfc organization removeEmptyCategories; sortCategories]. + + boxedFloat comment: 'My instances hold 64-bit Floats in heap objects. This is the only representation on 32-bit systems. But on 64-bit systems SmallFloat64 holds a subset of the full 64-bit double-precision range in immediate objects.' + stamp: 'eem 11/25/2014 7:54'. + smallFloat comment: 'My instances represent 64-bit Floats whose exponent fits in 8 bits as immediate objects. This representation is only available on 64-bit systems, not 32-bit systems.' + stamp: 'eem 11/25/2014 7:54'. + + Undeclared removeUnreferencedKeys] Modified: branches/Cog/image/UpdateSqueakTrunkImage.st =================================================================== --- branches/Cog/image/UpdateSqueakTrunkImage.st 2014-11-24 22:09:18 UTC (rev 3149) +++ branches/Cog/image/UpdateSqueakTrunkImage.st 2014-11-25 23:33:58 UTC (rev 3150) @@ -3,4 +3,6 @@ defaultUpdateURL: 'http://source.squeak.org/trunk'; updateFromServer] valueSupplyingAnswer: true.
+(FileStream oldFileNamed: 'MorphFloat.st') fileIn. + Smalltalk snapshot: true andQuit: true Modified: branches/Cog/image/buildspurtrunkimage.sh =================================================================== --- branches/Cog/image/buildspurtrunkimage.sh 2014-11-24 22:09:18 UTC (rev 3149) +++ branches/Cog/image/buildspurtrunkimage.sh 2014-11-25 23:33:58 UTC (rev 3150) @@ -7,8 +7,8 @@ cp -p $SQUEAK45.image trunk46forspur.image cp -p $SQUEAK45.changes trunk46forspur.changes
- echo $VM trunk46forspur.image BuildSqueakTrunkImage.st - $VM trunk46forspur.image BuildSqueakTrunkImage.st + echo $VM trunk46forspur.image UpdateSqueakTrunkImage.st + $VM trunk46forspur.image UpdateSqueakTrunkImage.st fi
#Old code pre patchAndUploadUnpatchedInTrunk
Added: branches/Cog/image/buildsqueaktrunkimage.sh =================================================================== --- branches/Cog/image/buildsqueaktrunkimage.sh (rev 0) +++ branches/Cog/image/buildsqueaktrunkimage.sh 2014-11-25 23:33:58 UTC (rev 3150) @@ -0,0 +1,12 @@ +#!/bin/sh +. ./envvars.sh +./getsqueak45.sh +. ./getGoodCogVM.sh + +cp -p $SQUEAK45.image trunk46forspur.image +cp -p $SQUEAK45.changes trunk46forspur.changes + +echo $VM trunk46forspur.image UpdateSqueakTrunkImage.st +$VM trunk46forspur.image UpdateSqueakTrunkImage.st + +./resizesqueakwindow.sh trunk46forspur.image 800 600
Property changes on: branches/Cog/image/buildsqueaktrunkimage.sh ___________________________________________________________________ Added: svn:executable + *
vm-dev@lists.squeakfoundation.org