[Vm-dev] VM Maker: Cog-eem.213.mcz
commits at source.squeak.org
commits at source.squeak.org
Fri Nov 14 20:49:08 UTC 2014
Eliot Miranda uploaded a new version of Cog to project VM Maker:
http://source.squeak.org/VMMaker/Cog-eem.213.mcz
==================== Summary ====================
Name: Cog-eem.213
Author: eem
Time: 14 November 2014, 12:48:53.089 pm
UUID: f6547b0d-188b-4b30-8a43-d2c7e78fc45c
Ancestors: Cog-eem.212
Eliminate an assignment to a block arg.
Update the processor simulator plugins to reflect
VMMaker.oscog-eem.933. Include the rwrite script
that produced VMMaker.oscog-eem.933.
=============== Diff against Cog-eem.212 ===============
Item was changed:
----- Method: BochsIA32Plugin>>sizeField: (in category 'alien support') -----
sizeField: rcvr
"Answer the first field of rcvr which is assumed to be an Alien of at least 8 bytes"
<inline: true>
+ ^self longAt: rcvr + interpreterProxy baseHeaderSize!
- ^self longAt: rcvr + BaseHeaderSize!
Item was changed:
----- Method: BochsIA32Plugin>>startOfData: (in category 'alien support') -----
startOfData: rcvr "<Alien oop> ^<Integer>"
"Answer the start of rcvr's data. For direct aliens this is the address of
the second field. For indirect and pointer aliens it is what the second field points to."
<inline: true>
^(self sizeField: rcvr) > 0
+ ifTrue: [rcvr + interpreterProxy baseHeaderSize + interpreterProxy bytesPerOop]
+ ifFalse: [self longAt: rcvr + interpreterProxy baseHeaderSize + interpreterProxy bytesPerOop]!
- ifTrue: [rcvr + BaseHeaderSize + BytesPerOop]
- ifFalse: [self longAt: rcvr + BaseHeaderSize + BytesPerOop]!
Item was added:
+ ----- Method: CogScripts class>>changeMethodsForBasicConstantSendsIn: (in category 'separate vm scripts') -----
+ changeMethodsForBasicConstantSendsIn: aClass
+ "CogScripts changedMethodsForBasicConstantSendsIn: StackInterpreter"
+ | receiver rules model env |
+ rules := RBParseTreeRewriter new.
+ receiver := ((aClass includesBehavior: ObjectMemory)
+ or: [aClass includesBehavior: SpurMemoryManager])
+ ifTrue: ['self']
+ ifFalse:
+ [#('objectMemory' 'manager' 'interpreterProxy') detect: [:ivn| (aClass instVarIndexFor: ivn ifAbsent: nil) notNil]].
+ rules
+ replace: 'BaseHeaderSize' with: receiver, ' baseHeaderSize';
+ replace: 'BytesPerOop' with: receiver, ' bytesPerOop';
+ replace: 'BytesPerWord' with: receiver, ' wordSize';
+ replace: 'ShiftForWord' with: receiver, ' shiftForWord'.
+ model := RBNamespace new.
+ env := RBBrowserEnvironment new forClasses: { aClass }.
+ env classesAndSelectorsDo:
+ [ :class :selector | | tree |
+ tree := class parseTreeFor: selector.
+ (rules executeTree: tree) ifTrue:
+ [model compile: rules tree newSource in: class classified: (class whichCategoryIncludesSelector: selector)]].
+
+ model changes changes do:
+ [:mr|
+ aClass
+ compile: mr source
+ classified: (aClass whichCategoryIncludesSelector: mr selector)
+ withStamp: (Utilities changeStamp copyReplaceAll: Utilities authorInitials with: Utilities authorInitials, ' (const to msg rewrite)')
+ notifying: nil]!
Item was changed:
----- Method: GdbARMPlugin>>sizeField: (in category 'alien support') -----
sizeField: rcvr
"Answer the first field of rcvr which is assumed to be an Alien of at least 8 bytes"
<inline: true>
+ ^self longAt: rcvr + interpreterProxy baseHeaderSize!
- ^self longAt: rcvr + BaseHeaderSize!
Item was changed:
----- Method: GdbARMPlugin>>startOfData: (in category 'alien support') -----
startOfData: rcvr "<Alien oop> ^<Integer>"
"Answer the start of rcvr's data. For direct aliens this is the address of
the second field. For indirect and pointer aliens it is what the second field points to."
<inline: true>
^(self sizeField: rcvr) > 0
+ ifTrue: [rcvr + interpreterProxy baseHeaderSize + interpreterProxy bytesPerOop]
+ ifFalse: [self longAt: rcvr + interpreterProxy baseHeaderSize + interpreterProxy bytesPerOop]!
- ifTrue: [rcvr + BaseHeaderSize + BytesPerOop]
- ifFalse: [self longAt: rcvr + BaseHeaderSize + BytesPerOop]!
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 allMethodPrototypes do:
+ [:methodArg| | method className isMeta |
+ className := self classNameForPrototypeMethod: (method := methodArg).
- [:method| | className isMeta |
- 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]) >> method selector].
quaternaryBlock
value: className
value: isMeta
value: (self selectorForPrototypeMethod: method)
value: method]!
More information about the Vm-dev
mailing list