[squeak-dev] The Trunk: Kernel-ul.964.mcz

commits at source.squeak.org commits at source.squeak.org
Mon Nov 2 02:57:06 UTC 2015


Levente Uzonyi uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-ul.964.mcz

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

Name: Kernel-ul.964
Author: ul
Time: 2 November 2015, 4:56:32.76 am
UUID: 5dbe95ce-96e3-4f4d-bdb1-520c50def26c
Ancestors: Kernel-nice.963

Spur-compatible Object >> #inboundPointersExcluding:.

=============== Diff against Kernel-nice.963 ===============

Item was changed:
  ----- Method: Object>>inboundPointersExcluding: (in category 'tracing') -----
  inboundPointersExcluding: objectsToExclude
  	"Answer a list of all objects in the system that hold a reference to me, excluding those in the collection of objectsToExclude."
  
  	| pointers object objectsToAlwaysExclude |
  	Smalltalk garbageCollect.
  	pointers := OrderedCollection new.
+ 	self systemNavigation allObjectsOrNil ifNotNil: [ :allObjects |
+ 		objectsToAlwaysExclude := {
+ 			allObjects.
+ 			thisContext.
+ 			thisContext sender.
+ 			thisContext sender sender.
+ 			objectsToExclude.
+ 		}.
+ 		1 to: allObjects size do: [ :index |
+ 			object := allObjects at: index.
+ 			(object pointsTo: self) ifTrue: [
+ 				((objectsToAlwaysExclude identityIncludes: object)
+ 					or: [ objectsToExclude identityIncludes: object ])
+ 					ifFalse: [ pointers add: object ] ] ].
+ 		^pointers ].
  	"SystemNavigation >> #allObjectsDo: is inlined here with a slight modification: the marker object is pointers. This gives better results, because the value of pointers, it's inner objects and transient method contexts will not be iterated over."
  	object := self someObject.
  	[ object == pointers ] whileFalse: [
  		(object isInMemory and: [ object pointsTo: self ]) ifTrue: [
  			pointers add: object ].
  		object := object nextObject ].
  	objectsToAlwaysExclude := {
  		thisContext.
  		thisContext sender.
  		thisContext sender sender.
  		objectsToExclude.
  	}.
  	^pointers removeAllSuchThat: [ :ea |
  		(objectsToAlwaysExclude identityIncludes: ea)
  			or: [ objectsToExclude identityIncludes: ea ] ]!



More information about the Squeak-dev mailing list