[squeak-dev] The Trunk: Kernel-eem.740.mcz
commits at source.squeak.org
commits at source.squeak.org
Sun Feb 24 01:43:37 UTC 2013
Eliot Miranda uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-eem.740.mcz
==================== Summary ====================
Name: Kernel-eem.740
Author: eem
Time: 23 February 2013, 5:42:23.379 pm
UUID: 9dce4ab5-fac8-4dc8-bbb7-9f9ca5b37fc6
Ancestors: Kernel-fbs.739
Move the code to set the owning method of an
AdditionalMethodState to the setter away from clients.
Add an anti-sharing check.
=============== Diff against Kernel-fbs.739 ===============
Item was added:
+ ----- Method: AdditionalMethodState>>method (in category 'accessing') -----
+ method
+ ^method!
Item was changed:
----- Method: CompiledMethod>>copyWithTrailerBytes: (in category 'copying') -----
copyWithTrailerBytes: trailer
"Testing:
(CompiledMethod compiledMethodAt: #copyWithTrailerBytes:)
tempNamesPut: 'copy end '
"
+ | copy end start |
- | copy end start penultimateLiteral |
start := self initialPC.
end := self endPC.
copy := trailer createMethod: end - start + 1 class: self class header: self header.
1 to: self numLiterals do: [:i | copy literalAt: i put: (self literalAt: i)].
- (penultimateLiteral := self penultimateLiteral) isMethodProperties ifTrue:
- [copy penultimateLiteral: (penultimateLiteral copy
- setMethod: copy;
- yourself)].
start to: end do: [:i | copy at: i put: (self at: i)].
+ copy postCopy.
^copy!
Item was changed:
----- Method: CompiledMethod>>penultimateLiteral: (in category 'private') -----
penultimateLiteral: anObject
+ "Set the penultimate literal of the receiver, which holds either the
+ receiver's selector or its properties (which will hold the selector).
+ If it is an AdditionalMethodState set the state's ownership to this
+ method"
- "Answer the penultimate literal of the receiver, which holds either
- the receiver's selector or its properties (which will hold the selector)."
| pIndex |
+ (pIndex := self numLiterals - 1) <= 0 ifTrue:
+ [self error: 'insufficient literals'].
+ self literalAt: pIndex put: anObject.
+ anObject isMethodProperties ifTrue:
+ [(anObject method ~~ nil
+ and: [anObject method ~~ self
+ and: [anObject method penultimateLiteral == anObject]]) ifTrue:
+ [self error: 'a method''s AdditionalMethodState should not be shared'].
+ anObject setMethod: self.
+ anObject pragmas do: [:p| p setMethod: self]]!
- (pIndex := self numLiterals - 1) > 0
- ifTrue: [self literalAt: pIndex put: anObject]
- ifFalse: [self error: 'insufficient literals']!
Item was changed:
----- Method: CompiledMethod>>postCopy (in category 'copying') -----
postCopy
| penultimateLiteral |
(penultimateLiteral := self penultimateLiteral) isMethodProperties ifTrue:
+ [self penultimateLiteral: penultimateLiteral copy]!
- [self penultimateLiteral: (penultimateLiteral copy
- setMethod: self;
- yourself).
- self pragmas do:
- [:p| p setMethod: self]]!
Item was changed:
----- Method: CompiledMethod>>propertyValueAt:put: (in category 'accessing-pragmas & properties') -----
propertyValueAt: propName put: propValue
"Set or add the property with key propName and value propValue.
If the receiver does not yet have a method properties create one and replace
the selector with it. Otherwise, either relace propValue in the method properties
or replace method properties with one containing the new property."
| propertiesOrSelector |
(propertiesOrSelector := self penultimateLiteral) isMethodProperties ifFalse:
+ [self penultimateLiteral: (self class methodPropertiesClass
- [self penultimateLiteral: ((self class methodPropertiesClass
selector: propertiesOrSelector
with: (Association
key: propName asSymbol
+ value: propValue)).
- value: propValue))
- setMethod: self;
- yourself).
^propValue].
(propertiesOrSelector includesProperty: propName) ifTrue:
[^propertiesOrSelector at: propName put: propValue].
self penultimateLiteral: (propertiesOrSelector
copyWith: (Association
+ key: propName asSymbol
+ value: propValue)).
- key: propName asSymbol
- value: propValue)).
^propValue!
More information about the Squeak-dev
mailing list
|