The Trunk: System-cmm.600.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: System-cmm.600.mcz

commits-2
Chris Muller uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-cmm.600.mcz

==================== Summary ====================

Name: System-cmm.600
Author: cmm
Time: 3 October 2013, 2:49:50.903 pm
UUID: 1dc3ab37-822a-4ac0-93d0-c06542622247
Ancestors: System-fbs.599

- RecentMessages can now temporarily suspend, so it'll be able to avoid being blown away just from loading MC packages.
- API consistency.
- Test methods moved to Tests.

=============== Diff against System-fbs.599 ===============

Item was changed:
  Object subclass: #RecentMessages
+ instanceVariableNames: 'methodReferences size maximumSubmissionCount isSuspended'
- instanceVariableNames: 'methodReferences size maximumSubmissionCount'
  classVariableNames: 'Default NumberOfRecentSubmissionsToStore'
  poolDictionaries: ''
  category: 'System-Support'!

Item was changed:
  ----- Method: RecentMessages>>initialize (in category 'initialize-release') -----
  initialize
+ self initializeWithSize: self defaultSize!
- maximumSubmissionCount := self defaultSize.
- methodReferences := OrderedCollection new.!

Item was added:
+ ----- Method: RecentMessages>>leastRecent (in category 'accessing') -----
+ leastRecent
+ ^ methodReferences
+ ifEmpty: [nil]
+ ifNotEmpty: [methodReferences first].!

Item was removed:
- ----- Method: RecentMessages>>oldest (in category 'accessing') -----
- oldest
- ^ methodReferences
- ifEmpty: [nil]
- ifNotEmpty: [methodReferences first].!

Item was removed:
- ----- Method: RecentMessages>>purge: (in category 'accessing') -----
- purge: aMethodReference
- methodReferences remove: aMethodReference.!

Item was removed:
- ----- Method: RecentMessages>>purgeMissingMethods (in category 'accessing') -----
- purgeMissingMethods
- methodReferences := methodReferences select: [:mref | |cls|
- cls := mref actualClass.
- cls notNil
- and: [cls isInMemory]
- and: [mref selector == #Comment or: [(cls compiledMethodAt: mref selector ifAbsent: [nil]) notNil]]].!

Item was changed:
  ----- Method: RecentMessages>>recordSelector:forClass:inEnvironment: (in category 'accessing') -----
  recordSelector: aSelector forClass: aClass inEnvironment: anEnvironment
  | ref |
+ isSuspended = true ifTrue: [ ^ self ].
  ref := MethodReference
  class: aClass
  selector: aSelector
  environment: anEnvironment.
  aClass wantsChangeSetLogging ifFalse: [^ ref].
  ^ methodReferences
  detect: [:mref | mref = ref]
  ifNone: [methodReferences addLast: ref.
  self size > self maximumSubmissionCount
  ifTrue: [methodReferences removeFirst].
  ref].!

Item was added:
+ ----- Method: RecentMessages>>suspendWhile: (in category 'accessing') -----
+ suspendWhile: aBlock
+ | priorSuspended |
+ priorSuspended := isSuspended.
+ isSuspended := true.
+ aBlock ensure: [ isSuspended := priorSuspended ]!


Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: System-cmm.600.mcz

Frank Shearar-3
On 04 Oct 2013, at 8:37, [hidden email] wrote:

> Chris Muller uploaded a new version of System to project The Trunk:
> http://source.squeak.org/trunk/System-cmm.600.mcz
>
> ==================== Summary ====================
>
> Name: System-cmm.600
> Author: cmm
> Time: 3 October 2013, 2:49:50.903 pm
> UUID: 1dc3ab37-822a-4ac0-93d0-c06542622247
> Ancestors: System-fbs.599
>
> - RecentMessages can now temporarily suspend, so it'll be able to avoid being blown away just from loading MC packages.
> - API consistency.
> - Test methods moved to Tests.
>
> =============== Diff against System-fbs.599 ===============
>
> Item was changed:
>  Object subclass: #RecentMessages
> +    instanceVariableNames: 'methodReferences size maximumSubmissionCount isSuspended'
> -    instanceVariableNames: 'methodReferences size maximumSubmissionCount'
>      classVariableNames: 'Default NumberOfRecentSubmissionsToStore'
>      poolDictionaries: ''
>      category: 'System-Support'!
>
> Item was changed:
>  ----- Method: RecentMessages>>initialize (in category 'initialize-release') -----
>  initialize
> +    self initializeWithSize: self defaultSize!
> -    maximumSubmissionCount := self defaultSize.
> -    methodReferences := OrderedCollection new.!
>
> Item was added:
> + ----- Method: RecentMessages>>leastRecent (in category 'accessing') -----
> + leastRecent
> +    ^ methodReferences
> +        ifEmpty: [nil]
> +        ifNotEmpty: [methodReferences first].!
>
> Item was removed:
> - ----- Method: RecentMessages>>oldest (in category 'accessing') -----
> - oldest
> -    ^ methodReferences
> -        ifEmpty: [nil]
> -        ifNotEmpty: [methodReferences first].!
>
> Item was removed:
> - ----- Method: RecentMessages>>purge: (in category 'accessing') -----
> - purge: aMethodReference
> -    methodReferences remove: aMethodReference.!
>
> Item was removed:
> - ----- Method: RecentMessages>>purgeMissingMethods (in category 'accessing') -----
> - purgeMissingMethods
> -    methodReferences := methodReferences select: [:mref | |cls|
> -        cls := mref actualClass.
> -        cls notNil
> -            and: [cls isInMemory]
> -            and: [mref selector == #Comment or: [(cls compiledMethodAt: mref selector ifAbsent: [nil]) notNil]]].!

I don't understand why you've ripped out purging. You now allow RecentMessages to have MethodReferences that will blow up whenever you try to resolve them.

I mean, the brokenness of #actualClass aside (*) why the removal?

(*) #actualClass and friends make no sense in a multi-Environment world: what a class name means depends on the context nowadays.

frank

> Item was changed:
>  ----- Method: RecentMessages>>recordSelector:forClass:inEnvironment: (in category 'accessing') -----
>  recordSelector: aSelector forClass: aClass inEnvironment: anEnvironment
>      | ref |
> +    isSuspended = true ifTrue: [ ^ self ].
>      ref := MethodReference
>              class: aClass
>              selector: aSelector
>              environment: anEnvironment.
>      aClass wantsChangeSetLogging ifFalse: [^ ref].
>      ^ methodReferences
>          detect: [:mref | mref = ref]
>          ifNone: [methodReferences addLast: ref.
>              self size > self maximumSubmissionCount
>                  ifTrue: [methodReferences removeFirst].
>              ref].!
>
> Item was added:
> + ----- Method: RecentMessages>>suspendWhile: (in category 'accessing') -----
> + suspendWhile: aBlock
> +    | priorSuspended |
> +    priorSuspended := isSuspended.
> +    isSuspended := true.
> +    aBlock ensure: [ isSuspended := priorSuspended ]!
>
>