[Vm-dev] VM Maker: Cog-eem.196.mcz
commits at source.squeak.org
commits at source.squeak.org
Sat Aug 23 11:44:02 UTC 2014
Eliot Miranda uploaded a new version of Cog to project VM Maker:
http://source.squeak.org/VMMaker/Cog-eem.196.mcz
==================== Summary ====================
Name: Cog-eem.196
Author: eem
Time: 23 August 2014, 12:43:18.227 pm
UUID: ba7c10a8-52bd-4a00-9b14-80de8a855f2c
Ancestors: Cog-eem.195
Fix the <remove> code. There need to be two enumerators
of selectoeas, one including the removed, and excluding them.
=============== Diff against Cog-eem.195 ===============
Item was added:
+ ----- Method: SpurBootstrap>>allPrototypeMethodSelectors (in category 'method prototypes') -----
+ allPrototypeMethodSelectors
+ "Answer all prototype selectors except those marked <remove>"
+ ^(imageTypes
+ inject: (SpurBootstrap class organization listAtCategoryNamed: #'method prototypes')
+ into: [:prototypes :type|
+ prototypes, (SpurBootstrap class organization listAtCategoryNamed: #'method prototypes ', type)]) reject:
+ [:sel| ((SpurBootstrap class >> sel) pragmaAt: #remove) notNil]!
Item was removed:
- ----- Method: SpurBootstrap>>allPrototypeMethods (in category 'method prototypes') -----
- allPrototypeMethods
- ^(imageTypes
- inject: (SpurBootstrap class organization listAtCategoryNamed: #'method prototypes')
- into: [:prototypes :type|
- prototypes, (SpurBootstrap class organization listAtCategoryNamed: #'method prototypes ', type)]) reject:
- [:sel| ((SpurBootstrap class >> sel) pragmaAt: #remove) notNil]!
Item was added:
+ ----- Method: SpurBootstrap>>allPrototypeSelectors (in category 'method prototypes') -----
+ allPrototypeSelectors
+ "Answer all prototype selectors, including those marked <remove>"
+ ^imageTypes
+ inject: (SpurBootstrap class organization listAtCategoryNamed: #'method prototypes')
+ into: [:prototypes :type|
+ prototypes, (SpurBootstrap class organization listAtCategoryNamed: #'method prototypes ', type)]!
Item was changed:
----- Method: SpurBootstrap>>prototypeClassNameMetaSelectorMethodDo: (in category 'method prototypes') -----
prototypeClassNameMetaSelectorMethodDo: quaternaryBlock
"Evaluate aBlock with class name, class is meta, method and selector.
For now find methods in class-side category #'method prototypes'.
Scheme could be extended to have different protocols for different
Squeak/Pharo versions."
+ self allPrototypeMethodSelectors do:
- self allPrototypeMethods do:
[:protoSelector| | method className isMeta |
method := SpurBootstrap class >> protoSelector.
className := self classNameForPrototypeMethod: method.
(isMeta := className endsWith: 'class') ifTrue:
[className := (className allButLast: 5) asSymbol].
(method pragmaAt: #indirect) ifNotNil:
[method := (isMeta
ifTrue: [(Smalltalk classNamed: className) class]
ifFalse: [Smalltalk classNamed: className]) >> protoSelector].
quaternaryBlock
value: className
value: isMeta
value: (self selectorForPrototypeMethod: method)
value: method]!
Item was added:
+ ----- Method: SpurBootstrap>>removalClassNameMetaSelectorDo: (in category 'method prototypes') -----
+ removalClassNameMetaSelectorDo: quaternaryBlock
+ "Evaluate aBlock with class name, class is meta, and selector for
+ all prototypes marked <remove>."
+ self allPrototypeSelectors do:
+ [:protoSelector| | method className isMeta |
+ method := SpurBootstrap class >> protoSelector.
+ className := self classNameForPrototypeMethod: method.
+ (isMeta := className endsWith: 'class') ifTrue:
+ [className := (className allButLast: 5) asSymbol].
+ (method pragmaAt: #remove) ifNotNil:
+ [quaternaryBlock
+ value: className
+ value: isMeta
+ value: (self selectorForPrototypeMethod: method)]]!
Item was changed:
----- Method: SpurBootstrap>>removeMethods (in category 'bootstrap methods') -----
removeMethods
"Get the simulator to remove any methods marked with <remove>."
| removeSym |
removeSym := self findSymbol: #removeSelectorSilently:.
removeSym ifNil:
[removeSym := self findSymbol: #removeSelector:].
+ self removalClassNameMetaSelectorDo:
+ [:className :isMeta :selector| | class |
+ (self findClassNamed: (literalMap at: className)) ifNotNil:
+ [:theClass|
+ class := isMeta ifTrue: [oldHeap fetchClassOfNonImm: theClass] ifFalse: [theClass].
+ Transcript
+ cr;
+ nextPutAll: 'removing ';
+ nextPutAll: className;
+ nextPutAll: (isMeta ifTrue: [' class>>'] ifFalse: ['>>']);
+ store: selector;
+ flush.
+ self interpreter: oldInterpreter
+ object: class
+ perform: removeSym
+ withArguments: {literalMap at: selector}]]!
- self prototypeClassNameMetaSelectorMethodDo:
- [:className :isMeta :selector :method| | class |
- (method pragmaAt: #remove) ifNotNil:
- [(self findClassNamed: (literalMap at: className)) ifNotNil:
- [:theClass|
- class := isMeta ifTrue: [oldHeap fetchClassOfNonImm: theClass] ifFalse: [theClass].
- self interpreter: oldInterpreter
- object: class
- perform: removeSym
- withArguments: {literalMap at: selector}]]]!
More information about the Vm-dev
mailing list