Yeah I have several issues with those overrides right now. I should make a pass and be more careful.
2015-05-30 1:48 GMT+02:00 commits@source.squeak.org:
Eliot Miranda uploaded a new version of Cog to project VM Maker: http://source.squeak.org/VMMaker/Cog-eem.268.mcz
==================== Summary ====================
Name: Cog-eem.268 Author: eem Time: 29 May 2015, 4:48:40.605 pm UUID: c91565e3-8964-404c-b95f-45e1669c87a2 Ancestors: Cog-eem.267
Spur Bootstrap: Get the category right for the inadvertent *Scorch override of callPrimitive:.
=============== Diff against Cog-eem.267 ===============
Item was changed: ----- Method: SpurBootstrap class>>categoryForClass:meta:selector: (in category 'method prototype categorization') ----- categoryForClass: className meta: isMeta selector: selector ^(isMeta ifTrue: [{ className. #class. selector }] ifFalse: [{ className. selector }]) caseOf: { [#(Behavior allInstancesOrNil)] -> [#enumerating]. [#(Behavior byteSizeOfInstance)] -> [#'accessing instances and variables']. [#(Behavior byteSizeOfInstanceOfSize:)] -> [#'accessing instances and variables']. [#(Behavior elementSize)] -> [#'accessing instances and variables']. [#(Behavior handleFailingBasicNew)] -> [#private]. [#(Behavior handleFailingBasicNew:)] -> [#private]. [#(Behavior handleFailingFailingBasicNew)] -> [#private]. [#(Behavior handleFailingFailingBasicNew:)] -> [#private]. [#(Behavior identityHash)] -> [#comparing]. [#(Behavior isCompiledMethodClass)] -> [#testing]. [#(Behavior isEphemeronClass)] -> [#testing]. [#(Behavior isImmediateClass)] -> [#testing]. [#(BoxedFloat64 class basicNew)] -> [#'instance creation']. [#(BoxedFloat64 class basicNew:)] -> [#'instance creation']. [#(Character identityHash)] -> [#comparing]. [#(Character setValue:)] -> [#accessing]. [#(Class immediateSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category:)]
-> [#'subclass creation']. [#(ClassBuilder
superclass:immediateSubclass:instanceVariableNames:classVariableNames:poolDictionaries:category:)]
-> [#public]. [#(CompiledMethod bytecodeSetName)] ->
[#accessing]. [#(CompiledMethod class handleFailingFailingNewMethod:header:)]
-> [#private]. [#(CompiledMethod class
handleFailingNewMethod:header:)]
-> [#private]. [#(CompiledMethod class headerFlagForEncoder:)] -> [#'method encoding']. [#(CompiledMethod class
installPrimaryBytecodeSet:)]
-> [#'class initialization']. [#(CompiledMethod class
installSecondaryBytecodeSet:)]
-> [#'class initialization']. [#(Context class allInstances)] -> [#enumerating]. [#(Context class allInstancesDo:)] -> [#enumerating]. [#(Context failPrimitiveWith:)] -> [#'system simulation']. [#(Context isPrimFailToken:)] -> [#private]. [#(Context send:to:with:lookupIn:)] -> [#controlling]. [#(ContextPart isPrimFailToken:)] -> [#private]. [#(ContextPart send:to:with:lookupIn:)] -> [#controlling]. [#(EncoderForV3
computeMethodHeaderForNumArgs:numTemps:numLits:primitive:)]
-> [#'method encoding']. [#(EncoderForV3PlusClosures genCallPrimitive:)] -> [#'bytecode generation']. [#(EncoderForV3PlusClosures class
callPrimitiveCode)]
-> [#'bytecode decoding'].
-> [#'system simulation']. [#(MethodContext class allInstances)] -> [#enumerating]. [#(MethodContext class allInstancesDo:)] -> [#enumerating]. [#(Object isPinned)] -> [#'system primitives']. [#(Object pin)] -> [#'system primitives']. [#(Object setPinned:)] -> [#'system primitives']. [#(Object unpin)] -> [#'system primitives']. [#(SmallFloat64 class basicNew)] -> [#'instance creation']. [#(SmallFloat64 class basicNew:)] -> [#'instance creation']. [#(SmallFloat64 clone)] -> [#copying]. [#(SmallFloat64 copy)] -> [#copying]. [#(SmallFloat64 deepCopy)] -> [#copying]. [#(SmallFloat64 identityHash)] -> [#comparing]. [#(SmallFloat64 shallowCopy)] -> [#copying]. [#(SmallFloat64 veryDeepCopyWith:)] -> [#copying]. [#(SmallInteger asCharacter)] -> [#converting]. [#(SmalltalkImage growMemoryByAtLeast:)] ->[#(InstructionClient callPrimitive:)] -> [#'instruction decoding']. [#(MethodContext failPrimitiveWith:)]
[#'memory space']. [#(SmalltalkImage maxIdentityHash)] -> [#'system attributes']. [#(SystemDictionary growMemoryByAtLeast:)] -> [#'memory space']. [#(SystemDictionary maxIdentityHash)] -> [#'system attributes']. [#(SystemDictionary setGCParameters)] -> [#'snapshot and quit']. [#(SystemNavigation allObjects)] -> [#query]. [#(SystemNavigation allObjectsOrNil)] -> [#query]. } otherwise: [Transcript nextPutAll: className. isMeta ifTrue: [Transcript nextPutAll: ' class']. Transcript nextPutAll: '>>'; store: selector; nextPutAll: ' is unclassified'; cr; flush. ^Categorizer default]!
Item was changed: ----- Method: SpurBootstrap>>fileOutPrototypesFor: (in category 'public access') ----- fileOutPrototypesFor: imageTypeOrArrayOfTypes "SpurBootstrap new fileOutPrototypesFor: 'squeak'" | internalStream | imageTypes := imageTypeOrArrayOfTypes isString ifTrue: [{imageTypeOrArrayOfTypes}] ifFalse: [imageTypeOrArrayOfTypes asArray]. internalStream := WriteStream on: (String new: 1000). internalStream header; timeStamp. self prototypeClassNameMetaSelectorMethodDo: [:className :isMeta :selector :method| | classNameString class category preamble source | class := Smalltalk classNamed: className. isMeta ifTrue: [class := class class. classNameString := className, ' class'] ifFalse: [classNameString := className]. (method pragmaAt: #remove) ifNil:
[category := class ifNotNil: [class
organization categoryOfElement: selector].
(category notNil and: [category first =
$*]) ifTrue:
[category := nil].
category ifNil:
[category := self class
categoryForClass: className meta: isMeta selector: selector].
[category := (class ifNotNil: [class
organization categoryOfElement: selector]) ifNil:
[self
class categoryForClass: className meta: isMeta selector: selector]. preamble := classNameString, ' methodsFor: ' , category asString printString, ' stamp: ''', method timeStamp, ''''. internalStream nextPut: $!!; nextChunkPut: preamble; cr. source := method getSourceFromFile asString. source := source copyFrom: (source indexOfSubCollection: 'PROTOTYPE') + 9 to: source size. (self selectorForPrototypeMethod: method) isBinary ifTrue: [source := (self selectorForPrototypeMethod: method), (source copyFrom: (source indexOf: Character space) to: source size)]. internalStream nextChunkPut: source; space; nextPut: $!!; cr; cr] ifNotNil: [source := classNameString, ' removeSelector: ', selector storeString. internalStream nextChunkPut: source; cr; cr]]. internalStream trailer.
FileStream writeSourceCodeFrom: internalStream baseName: ('SpurBootstrapPrototypes-', (imageTypes fold:
[:a :b| a, '-', b]) replaceAll: Character space with: $_) isSt: true useHtml: false!
Item was changed: ----- Method: SpurBootstrapMonticelloPackagePatcher>>packagesAndPatches (in category 'private-accessing') ----- packagesAndPatches "SpurBootstrapMonticelloPackagePatcher new packagesAndPatches" | spurBootstrap | packagesAndPatches ifNotNil: [^packagesAndPatches]. packagesAndPatches := Dictionary new. spurBootstrap := SpurBootstrap new. imageTypes ifNotNil: [spurBootstrap imageTypes: imageTypes]. spurBootstrap prototypeClassNameMetaSelectorMethodDo: [:className :isMeta :selector :method| | package category source definition | (Smalltalk classNamed: className) ifNil: [package := self packageForMissingClassNamed: className] ifNotNil: [:behavior| | class methodReference | class := isMeta ifTrue: [behavior class] ifFalse: [behavior]. (class includesSelector: selector) ifTrue: [methodReference := (class >> selector) methodReference.
category := methodReference
category.
category first = $* ifTrue:
[category := nil]].
category := methodReference
category]. package := (methodReference isNil or: [methodReference category = Categorizer default or: [methodReference category first = $*]]) "This for Scorch's override of InstructionClient>>classPrimitive:" ifTrue: [PackageOrganizer default packageOfClass: class] ifFalse: [PackageOrganizer default packageOfMethod: methodReference]]. source := method getSourceFromFile asString allButFirst: method selector size - selector size. source first ~= selector first ifTrue: [source replaceFrom: 1 to: selector size with: selector startingAt: 1]. definition := MCAddition of: (MCMethodDefinition new
initializeWithClassName: className classIsMeta: isMeta selector: selector category: (category ifNil: [SpurBootstrap
categoryForClass: className
meta: isMeta selector:
selector])
timeStamp: method timeStamp source: source). (method pragmaAt: #remove) ifNotNil: [definition := definition inverse]. (packagesAndPatches at: package ifAbsentPut:
[OrderedCollection new]) add: definition]. ^packagesAndPatches!
vm-dev@lists.squeakfoundation.org