[squeak-dev] The Trunk: PackageInfo-Base-nice.35.mcz

commits at source.squeak.org commits at source.squeak.org
Sun Dec 27 03:14:15 UTC 2009

Nicolas Cellier uploaded a new version of PackageInfo-Base to project The Trunk:

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

Name: PackageInfo-Base-nice.35
Author: nice
Time: 27 December 2009, 4:14:08 am
UUID: 9d90fe10-b657-4063-8aef-78459cdedca9
Ancestors: PackageInfo-Base-ar.34

Cosmetic: move or remove a few temps inside closures

=============== Diff against PackageInfo-Base-ar.34 ===============

Item was changed:
  ----- Method: PackageInfo>>externalTraits (in category 'modifying') -----
- 	| behaviors |
  	^ Array streamContents: [:s |
+ 		| behaviors |
  		behaviors := self classesAndMetaClasses.
  		Smalltalk allTraits do: [:trait |
  			(behaviors includes: trait) ifFalse: [s nextPut: trait].
  			(behaviors includes: trait classSide) ifFalse: [s nextPut: trait classSide]]].			!

Item was changed:
  ----- Method: PackageInfo>>changeRecordForOverriddenMethod: (in category 'testing') -----
  changeRecordForOverriddenMethod: aMethodReference
+ 	| sourceFilesCopy method position |
- 	| position prevPos prevFileIndex preamble tokens sourceFilesCopy stamp method file methodCategory |
  	method := aMethodReference actualClass compiledMethodAt: aMethodReference methodSymbol.
  	position := method filePosition.
  	sourceFilesCopy := SourceFiles collect:
  		[:x | x isNil ifTrue: [ nil ]
  				ifFalse: [x readOnlyCopy]].
+ 	[ | file prevPos prevFileIndex preamble stamp methodCategory tokens |
+ 	method fileIndex == 0 ifTrue: [^ nil].
- 	[method fileIndex == 0 ifTrue: [^ nil].
  	file := sourceFilesCopy at: method fileIndex.
  	[position notNil & file notNil]
  		[file position: (0 max: position-150).  "Skip back to before the preamble"
  		[file position < (position-1)]  "then pick it up from the front"
  			whileTrue: [preamble := file nextChunk].
  		"Preamble is likely a linked method preamble, if we're in
  			a changes file (not the sources file).  Try to parse it
  			for prior source position and file index"
  		prevPos := nil.
  		stamp := ''.
  		(preamble findString: 'methodsFor:' startingAt: 1) > 0
  			ifTrue: [tokens := Scanner new scanTokens: preamble]
  			ifFalse: [tokens := Array new  "ie cant be back ref"].
  		((tokens size between: 7 and: 8)
  			and: [(tokens at: tokens size-5) = #methodsFor:])
  				[(tokens at: tokens size-3) = #stamp:
  				ifTrue: ["New format gives change stamp and unified prior pointer"
  						stamp := tokens at: tokens size-2.
  						prevPos := tokens last.
  						prevFileIndex := sourceFilesCopy fileIndexFromSourcePointer: prevPos.
  						prevPos := sourceFilesCopy filePositionFromSourcePointer: prevPos]
  				ifFalse: ["Old format gives no stamp; prior pointer in two parts"
  						prevPos := tokens at: tokens size-2.
  						prevFileIndex := tokens last].
  				(prevPos = 0 or: [prevFileIndex = 0]) ifTrue: [prevPos := nil]].
  		((tokens size between: 5 and: 6)
  			and: [(tokens at: tokens size-3) = #methodsFor:])
  				[(tokens at: tokens size-1) = #stamp:
  				ifTrue: ["New format gives change stamp and unified prior pointer"
  						stamp := tokens at: tokens size]].
  		methodCategory := tokens after: #methodsFor: ifAbsent: ['as yet unclassifed'].
  		(self includesMethodCategory: methodCategory ofClass: aMethodReference actualClass) ifTrue:
  			[methodCategory = (Smalltalk at: #Categorizer ifAbsent: [Smalltalk at: #ClassOrganizer]) default ifTrue: [methodCategory := methodCategory, ' '].
  			^ ChangeRecord new file: file position: position type: #method
  						class: aMethodReference classSymbol category: methodCategory meta: aMethodReference classIsMeta stamp: stamp].
  		position := prevPos.
  		prevPos notNil ifTrue:
  			[file := sourceFilesCopy at: prevFileIndex]].
  		^ nil]
  			ensure: [sourceFilesCopy do: [:x | x notNil ifTrue: [x close]]]

Item was changed:
  ----- Method: PackageInfo>>externalRefsSelect:thenCollect: (in category 'dependencies') -----
  externalRefsSelect: selBlock thenCollect: colBlock
+ 	| pkgMethods dependents extMethods otherClasses otherMethods classNames |
- 	| pkgMethods dependents refs extMethods otherClasses otherMethods classNames |
  	classNames := self classes collect: [:c | c name].
  	extMethods := self extensionMethods collect: [:mr | mr methodSymbol].
  	otherClasses := self externalClasses difference: self externalSubclasses.
  	otherMethods :=  otherClasses gather: [:c | c selectors].
  	pkgMethods := self methods asSet collect: [:mr | mr methodSymbol].
  	pkgMethods removeAllFoundIn: otherMethods.
  	dependents := Set new.
  	otherClasses do: [:c |
  		c selectorsAndMethodsDo:
  			[:sel :compiled |
+ 			| refs |
  			(extMethods includes: sel) ifFalse: 
  				[refs := compiled literals select: selBlock thenCollect: colBlock.
  				refs do: [:ea |
  					((classNames includes: ea) or: [pkgMethods includes: ea])
  							ifTrue: [dependents add: (self referenceForMethod: sel ofClass: c) -> ea]]]]].
  	^ dependents!

More information about the Squeak-dev mailing list