'From Squeak5.3alpha of 26 June 2019 [latest update: #18625] on 4 July 2019 at 11:50:08 am'!
Object subclass: #SystemNavigation
	instanceVariableNames: 'browserClass hierarchyBrowserClass environment'
	classVariableNames: 'Authors AuthorsInverted Default'
	poolDictionaries: ''
	category: 'System-Support'!

!Object methodsFor: 'literals' stamp: 'mt 6/24/2019 09:51'!
allLiteralsDo: aBlock

	self flag: #discuss. "mt: Better implement this only on Symbol, Array, Number, Binding, etc. instead of Object?"
	aBlock value: self.!
]style[(14 1 6 3 4 1 5 1 8 2 91 2 6 1 6 1 4 1)b,cblack;,c000000124,cblack;,c124000000,cblack;,c000000124,cblack;,c000000124,cblack;,c000124124,cblack;,c000000124,cblack;,c000000124,cblack;,c124000000,cblack;! !

!Object methodsFor: 'literals' stamp: 'mt 5/28/2019 10:58'!
hasLiteral: literal

	^ self hasLiteralSuchThat: [:lit | lit literalEqual: literal]! !

!Object methodsFor: 'literals' stamp: 'mt 6/5/2019 11:24'!
hasLiteralSuchThat: testBlock

	self allLiteralsDo: [:literal |
		(testBlock value: literal) ifTrue: [^ true]].
	
	^ false! !


!AdditionalMethodState methodsFor: 'literals' stamp: 'mt 6/5/2019 11:12'!
allLiteralsDo: aBlock

	1 to: self basicSize do: [:index |
		(self basicAt: index) allLiteralsDo: aBlock].!
]style[(14 1 6 3 1 1 3 1 4 1 9 1 3 3 5 1 1 3 1 4 1 8 1 5 1 1 14 1 6 2)b,cblack;,c000000123,cblack;,c123000000,cblack;,c000000123,cblack;,c123000000,cblack;,c000000123,cblack;,c000000123,cblack;,c000000123,cblack;,cgray;,cblack;,c000123000,c123000000,cblack;,c000000123,cblack;,c000000123,c000123000,cblack;,c000000123,cblack;,c000000123,cblack;! !


!Array methodsFor: 'literals' stamp: 'mt 6/24/2019 09:25'!
allLiteralsDo: aBlock

	"I am a literal."
	aBlock value: self.
	
	"All my elements are literals."
	self do: [:each | each allLiteralsDo: aBlock].!
]style[(14 1 6 3 17 2 6 1 6 1 4 5 31 2 4 1 3 3 4 1 1 1 4 1 14 1 6 2)b,cblack;,c000000124,cblack;,c000124124,cblack;,c000000124,cblack;,c000000124,cblack;,c124000000,cblack;,c000124124,cblack;,c124000000,cblack;,c000000124,cblack;,c000000124,cblack;,cgray;,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;! !


!Association methodsFor: 'literals' stamp: 'mt 6/24/2019 09:26'!
allLiteralsDo: aBlock
	"This strategy origins from a former implementation of CompiledMethod >> #hasLiteralThorough: as well as AdditionalMethodState >> #hasLiteralSuchThat:."

	"I am a literal."
	aBlock value: self.
	
	"All my components are literals."
	self key allLiteralsDo: aBlock.
	self value allLiteralsDo: aBlock.! !


!Behavior methodsFor: 'testing method dictionary' stamp: 'mt 6/24/2019 13:19'!
whichSelectorsReferTo: literal 
	"Answer a Set of selectors whose methods access the argument as a literal."

	| who |
	who := IdentitySet new.
	self selectorsAndMethodsDo: [:selector :method |
		(method hasLiteral: literal)
			ifTrue: [who add: selector]].
	^ who

	"Rectangle whichSelectorsReferTo: #+."!
]style[(22 1 7 3 75 3 1 1 3 1 1 2 3 1 2 13 3 3 4 1 22 3 8 2 6 1 1 3 1 6 1 11 1 7 1 4 7 1 1 3 1 4 1 8 1 4 1 1 3 3 38)b,cblack;,c000000124,cblack;,c000124124,cblack;,cgray;,cblack;,c104104104,cblack;,cgray;,cblack;,c104104104,cblack;,b,cblack;,c000000124,cblack;,c124000000,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,cgray;,cblack;,c000124000,c000000124,cblack;,c000000124,cblack;,c000000124,c000124000,cblack;,c000000124,cblack;,c000124000,c104104104,cblack;,c000000124,cblack;,c000000124,c000124000,cblack;,c124000000,cblack;,c104104104,cblack;,c000124124! !

!Behavior methodsFor: '*Tools-icons' stamp: 'mt 7/4/2019 08:57'!
toolIconSelector: aSymbol
	"Tools can annotate the method identified by aSymbol with an icon identified by the symbol this method returns.
	We customize this for, eg, overriden methods or methods with breaks.
	Defaults to no icon"

	self methodDictionary at: aSymbol ifPresent: [ :method |
		method hasBreakpoint ifTrue: [^ #breakpoint].
		method messagesDo: [:messageSelector |
			(#(halt halt: haltIfNil haltIf: haltOnce haltOnce: haltOnCount: halt:onCount: break) includes: messageSelector)
				ifTrue: [^ #breakpoint].
			(#(flag: needsWork notYetImplemented) includes: messageSelector)
				ifTrue: [^ #flag].
			(#(shouldBeImplemented subclassResponsibility) includes: messageSelector)
				ifTrue: [
					(self isSelectorOverridden: aSymbol)
						ifTrue: [^ #abstract]
						ifFalse: [^ #notOverridden]].
			messageSelector == #shouldNotImplement
				ifTrue: [^ #no]].
		method hasReportableSlip ifTrue: [^ #breakpoint]].
		
	(self isSelectorOverride: aSymbol)
		ifTrue: [
			(self isSelectorOverridden: aSymbol)
				ifTrue: [ ^ #arrowUpAndDown ]
				ifFalse: [ ^ #arrowUp ] ]
		ifFalse: [
			(self isSelectorOverridden: aSymbol)
				ifTrue: [^ #arrowDown ]].

	self methodDictionary at: aSymbol ifPresent: [ :method |
		(method primitive ~= 0 and: [method isQuick not])
			ifTrue: [^ #primitive]].
	

	^ #blank!
]style[(17 1 7 2 203 3 4 1 16 1 3 1 7 1 10 4 6 1 1 3 6 1 13 1 7 1 1 1 1 11 1 4 6 1 11 1 1 1 15 1 1 4 1 1 1 4 1 5 1 9 1 7 1 8 1 9 1 12 1 13 1 5 2 9 1 15 1 5 7 1 1 1 1 11 1 5 1 1 1 5 1 9 1 17 2 9 1 15 1 5 7 1 1 1 1 5 1 5 1 1 1 19 1 22 2 9 1 15 1 5 7 1 1 6 5 1 21 1 7 1 7 7 1 2 1 9 1 7 8 1 2 1 14 1 1 5 15 1 2 1 19 5 7 1 1 1 1 3 1 1 4 6 1 17 1 7 1 1 1 1 11 1 8 4 1 19 1 7 4 7 6 1 4 1 21 1 7 1 5 7 1 1 1 1 1 15 1 1 5 8 1 1 1 1 1 8 1 1 5 8 6 1 4 1 21 1 7 1 5 7 1 1 1 1 10 1 1 5 4 1 16 1 3 1 7 1 10 4 6 1 1 3 1 6 1 9 1 2 1 1 1 4 1 1 6 1 7 1 3 1 1 4 7 1 1 1 1 10 1 7 1 1 6)b,cblack;,c000000126,cblack;,c000126126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,cgray;,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000126000,c126000000,cblack;,c000000126,c000126000,cblack;,c000000126,cblack;,c000000126,cblack;,c000126000,cblack;,c000000126,cblack;,cgray;,cblack;,c126000126,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,c126000126,cblack;,c000000126,cblack;,c126000126,c126000000,cblack;,c000000126,c126000126,cblack;,c126000126,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,c126000126,cblack;,c000000126,cblack;,c126000126,c126000000,cblack;,c000000126,c126000126,cblack;,c126000126,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,c126000126,cblack;,c000000126,cblack;,c126000126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,c126000000,c126000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000126,c126000000,cblack;,c000000126,c126000126,c000126000,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000126000,c126000000,cblack;,c000000126,c000126000,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000126000,c126000000,cblack;,c000000126,cblack;,c000000126,c000126000,cblack;,c000000126,cblack;,c000126000,cblack;,c126000000,cblack;,c000000126,cblack;,c000126000,cblack;,c000000126,cblack;,c000126000,cblack;,c126000000,cblack;,c000000126,cblack;,c000126000,cblack;,c000000126,cblack;,c000126000,c126000000,cblack;,c000000126,cblack;,c000000126,c000126000,cblack;,c000000126,cblack;,c000126000,c126000000,cblack;,c000000126,cblack;,c000126000,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,cgray;,cblack;,c000126000,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000126,c000000126,cblack;,c000000126,cblack;,c000000126,c126000126,c000126000,cblack;,c000000126,cblack;,c000126000,c126000000,cblack;,c000000126,c000126000,cblack;,c126000000,cblack;,c000000126! !

!Behavior methodsFor: '*60Deprecated-testing method dictionary' stamp: 'mt 7/3/2019 15:55'!
whichSelectorsReferTo: literal special: specialFlag byte: specialByte thorough: thorough

	self deprecated: 'Use #whichSelectorsReferTo: instead'.
	^ self whichSelectorsReferTo: literal!
]style[(22 1 7 1 8 1 11 1 5 1 11 1 9 1 8 3 4 1 11 1 37 3 1 1 4 1 22 1 7)b,cblack;,c000000126,cblack;,b,cblack;,c000000126,cblack;,b,cblack;,c000000126,cblack;,b,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000126n,cblack;,c126000000,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126! !

!Behavior methodsFor: '*60Deprecated-testing method dictionary' stamp: 'mt 6/24/2019 13:50'!
whichSelectorsReferTo: aLiteral thorough: thorough

	self deprecated: 'Literal test is thorough by default. Use #whichSelectorsReferTo: instead.'.
	^ self whichSelectorsReferTo: aLiteral!
]style[(22 1 8 1 9 1 8 3 4 1 11 1 75 3 1 1 4 1 22 1 8)b,cblack;,c000000124,cblack;,b,cblack;,c000000124,cblack;,c124000000,cblack;,c000000124,cblack;,c124000124n,cblack;,c124000000,cblack;,c124000000,cblack;,c000000124,cblack;,c000000124! !


!Binding methodsFor: 'literals' stamp: 'mt 6/24/2019 09:22'!
allLiteralsDo: aBlock

	"I am a literal."
	aBlock value: self.
	
	self key allLiteralsDo: aBlock.
	self value allLiteralsDo: aBlock.! !


!CompiledCode methodsFor: 'literals' stamp: 'mt 7/4/2019 09:27'!
allLiterals
	"Skip compiled-code objects. Keep literal arrays, bindings, etc."
	
	^ Array streamContents: [:result |
		self allLiteralsDo: [:literal | result nextPut: literal]]!
]style[(11 2 65 4 1 7 15 3 6 1 1 3 4 1 14 1 1 1 7 1 1 1 6 1 8 1 7 1 1)b,cblack;,c000126126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,cgray;,cblack;,c126000000,cblack;,c000000126,cblack;,c000126000,cblack;,c000000126,cblack;,cgray;,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,c000126000,cblack;! !

!CompiledCode methodsFor: 'literals' stamp: 'mt 7/4/2019 09:59'!
allLiteralsDo: aBlock
	"Enumerate all literals thoroughly. Follow nested instances of CompiledCode. Do not treat compiled code as literals here."
	
	self codeLiteralsDo: [:compiledCode | compiledCode literalsDo: [:literal |
		literal isCompiledCode ifFalse: [literal allLiteralsDo: aBlock] ]].

	"Enumerate special selectors."
	self flag: #todo.
	
	"Enumerate special literals such as true and false."
	self flag: #todo.!
]style[(14 1 6 2 122 4 4 1 15 3 12 1 1 1 12 1 11 1 1 1 7 1 1 3 7 1 14 1 8 1 1 7 1 14 1 6 1 1 1 5 30 2 4 1 5 1 5 5 52 2 4 1 5 1 5 1)b,cblack;,c000000126,cblack;,c000126126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,cgray;,cblack;,c000000126,cblack;,c000000126,cblack;,c000126000,cblack;,c000000126,cblack;,cgray;,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000126,c000000126,cblack;,c000000126,cblack;,c000000126,c126000126,cblack;,c000126000,cblack;,c000126126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c000126126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;! !

!CompiledCode methodsFor: 'literals' stamp: 'mt 7/4/2019 08:46'!
codeLiterals

	^ Array streamContents: [:stream |
		self codeLiteralsDo: [:compiledCode | stream nextPut: compiledCode]]!
]style[(12 3 1 7 15 3 6 1 1 3 4 1 15 1 1 1 12 1 1 1 6 1 8 1 12 1 1)b,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,cgray;,cblack;,c126000000,cblack;,c000000126,cblack;,c000126000,cblack;,c000000126,cblack;,cgray;,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,c000126000,cblack;! !

!CompiledCode methodsFor: 'literals' stamp: 'mt 7/4/2019 08:37'!
codeLiteralsDo: aBlock
	"Enumerate all literals that represent instances of CompiledCode. This is especially required for SistaV1."
	
	aBlock value: self.
	
	self literalsDo: [:literal | literal isCompiledCode ifTrue: [
		literal codeLiteralsDo: aBlock]].!
]style[(15 1 6 2 107 4 6 1 6 1 4 5 4 1 11 3 7 1 1 1 7 1 14 1 7 1 1 3 7 1 15 1 6 1 2)b,cblack;,c000000126,cblack;,c000126126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,cgray;,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000126000,cblack;,c000000126,cblack;,cred;,cblack;,c000000126,c000126000,cblack;! !

!CompiledCode methodsFor: 'literals' stamp: 'mt 7/4/2019 09:35'!
hasLiteral: aLiteral
	"Since we cannot enumerate this code's special literals, we have to overwrite this method to invoke the encoder scanner explicitely."

	| scanBlock |
	(super hasLiteral: aLiteral) ifTrue: [^ true].

	scanBlock := self class
		scanBlocksForLiteral: aLiteral
		do: [:primaryScanner :secondaryScanner |
			"E.g., scanner for SistaV1 or scanner for V3PlusClosures"
			self signFlag ifTrue: [secondaryScanner] ifFalse: [primaryScanner]].
	
	self codeLiteralsDo: [:compiledCode |
		(compiledCode scanFor: scanBlock) ifTrue: [^ true]].

	^ false! !

!CompiledCode methodsFor: 'literals' stamp: 'mt 5/28/2019 14:08'!
literals
	
	^ Array streamContents: [:result |
		self literalsDo: [:lit | result nextPut: lit]]!
]style[(8 4 1 7 15 3 6 1 1 3 4 1 11 1 1 1 3 1 1 1 6 1 8 1 3 1 1)b,cblack;,c124000000,cblack;,c000000124,cblack;,c000000124,cblack;,cgray;,cblack;,c124000000,cblack;,c000000124,cblack;,c000124000,cblack;,c000000124,cblack;,cgray;,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,c000124000,cblack;! !

!CompiledCode methodsFor: 'literals' stamp: 'mt 7/4/2019 09:18'!
literalsDo: aBlock
	"Evaluate aBlock for each of the literals referenced by the receiver. Note that this (raw) enumeration addresses *all* objects stored *after* the method header and *before* the first byte code. If you require a deep and meaningful enumeration of literals use #allLiteralsDo: or #codeLiteralsDo:."
	
	1 to: self numLiterals do: [:index |
		aBlock value: (self literalAt: index)].!
]style[(11 1 6 2 296 4 1 1 3 1 4 1 11 1 3 3 5 1 1 3 6 1 6 1 1 4 1 10 1 5 1 2)b,cblack;,c000000126,cblack;,c000126126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,cgray;,cblack;,c000000126,cblack;,c000000126,cblack;,c000126000,c126000000,cblack;,c000000126,cblack;,c000000126,c000126000,cblack;! !

!CompiledCode methodsFor: 'testing' stamp: 'mt 7/4/2019 08:49'!
hasMethodReturn
	"Answer whether the receiver has a method-return ('^') in its code."

	| scanner |
	self codeLiteralsDo: [:compiledCode | 
		scanner := InstructionStream on: compiledCode.
		(scanner scanFor: [:x | (scanner willReturn
				and: [scanner willBlockReturn not])
				"and: [scanner willReturnTopFromMethod not]" "-> Not supported in EncoderForSistaV1"])
			ifTrue: [^ true]].
	^ false!
]style[(15 2 68 3 1 1 7 1 1 2 4 1 15 3 12 1 1 4 7 1 2 19 3 1 12 4 1 7 1 8 1 1 1 1 1 1 1 1 7 1 10 5 4 1 1 7 1 15 1 3 1 1 5 44 1 39 1 1 4 7 1 1 1 1 4 1 4 1 1 5)b,cblack;,c000126126,cblack;,cgray;,cblack;,c106106106,cblack;,cgray;,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,cgray;,cblack;,c106106106,cblack;,b,cblack;,c000000126,cblack;,c000000126,cblack;,c000126000,c106106106,cblack;,c000000126,cblack;,c126000126,cblack;,c000000126,cblack;,cgray;,cblack;,c126000000,c106106106,cblack;,c000000126,cblack;,c000000126,cblack;,c000234000,c106106106,cblack;,c000000126,cblack;,c000000126,c000234000,c126000000,cblack;,c000126126,cblack;,c000126126,c126000126,c000126000,cblack;,c000000126,cblack;,c000126000,c126000000,cblack;,c126000000,c000126000,cblack;,c126000000,cblack;,c126000000! !

!CompiledCode methodsFor: 'testing' stamp: 'mt 7/3/2019 16:33'!
isQuick

	self subclassResponsibility.! !

!CompiledCode methodsFor: 'testing' stamp: 'mt 7/3/2019 17:02'!
sendsMessage: aSelector 
	
	self messagesDo: [:selector |
		selector = aSelector ifTrue: [^ true]].
	^ false! !

!CompiledCode methodsFor: 'testing' stamp: 'mt 7/3/2019 17:05'!
sendsSelector: aSelector 

	self flag: #todo. "mt: Deprecate? AST/Refactoring project needs it..."
	^ self sendsMessage: aSelector! !

!CompiledCode methodsFor: 'testing' stamp: 'mt 7/4/2019 08:54'!
sendsToSuper
	"Answer whether the receiver sends any message to super."

	| scanner |
	self codeLiteralsDo: [:compiledCode | 
		scanner := InstructionStream on: compiledCode.
		(scanner scanFor: (self encoderClass superSendScanBlockUsing: scanner))
			ifTrue: [^ true]].
	^ false!
]style[(12 2 57 3 1 1 7 1 1 2 4 1 15 3 12 1 1 4 7 1 2 19 3 1 12 4 1 7 1 8 1 1 4 1 12 1 24 1 7 1 1 4 7 1 1 1 1 4 1 4 1 1 5)b,cblack;,c000126126,cblack;,cgray;,cblack;,c106106106,cblack;,cgray;,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,cgray;,cblack;,c106106106,cblack;,b,cblack;,c000000126,cblack;,c000000126,cblack;,c000126000,c106106106,cblack;,c000000126,cblack;,c126000126,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,c126000126,c000126000,cblack;,c000000126,cblack;,c000126000,c126000000,cblack;,c126000000,c000126000,cblack;,c126000000,cblack;,c126000000! !

!CompiledCode methodsFor: 'scanning' stamp: 'mt 7/3/2019 16:40'!
messages
	"Answer a Set of all the message selectors sent by this method."

	| result |
	result := Set new.
	self messagesDo: [:selector | result add: selector].
	^ result! !

!CompiledCode methodsFor: 'scanning' stamp: 'mt 7/4/2019 08:54'!
messagesDo: workBlock
	"Evaluate aBlock with all the message selectors sent by me. Duplicate sends possible."

	| scanner selector  |
	self isQuick ifTrue: [^ self].
	
	self codeLiteralsDo: [:compiledCode | 
		scanner := InstructionStream on: compiledCode.
		scanner scanFor: [ :x | 
			(selector := scanner selectorToSendOrSelf) == scanner
				ifFalse: [workBlock value: selector].
			false "keep scanning" ] ].!
]style[(11 1 9 2 86 3 1 1 7 1 8 2 1 2 4 1 7 1 7 2 1 1 4 6 4 1 15 3 12 1 1 4 7 1 2 19 3 1 12 4 7 1 8 1 1 2 1 1 1 5 1 8 1 2 1 7 1 20 1 1 2 1 7 5 8 1 1 9 1 6 1 8 1 5 5 1 15 1 1 3)b,cblack;,c000000126,cblack;,c000126126,cblack;,cgray;,cblack;,c106106106,cblack;,c106106106,cblack;,cgray;,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c126000000,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,cgray;,cblack;,c106106106,cblack;,b,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c000126000,cblack;,c000000126,cblack;,cgray;,cblack;,c126000126,c106106106,cblack;,b,cblack;,c106106106,cblack;,c000000126,c126000126,cblack;,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c126000126,c000000126,cblack;,c000000126,cblack;,c106106106,c126000126,cblack;,c126000000,cblack;,c000126126,cblack;,c000126000,cblack;! !

!CompiledCode methodsFor: 'scanning' stamp: 'mt 7/3/2019 19:42'!
scanFor: byteOrClosure
	"Answer whether the receiver contains the argument as a bytecode, if it is a number,
	 or evaluates to true if a block.  If a block it can take from one to four bytes."
	| s end |
	^(s := InstructionStream on: self)
		scanFor: (byteOrClosure isBlock
					ifTrue: [byteOrClosure numArgs caseOf: {
							[1] -> [byteOrClosure].
							[2] -> [[:byte| byteOrClosure value: byte value: s secondByte]].
							[3] -> [end := self endPC - 2.
									[:byte|
									s pc <= end
									and: [byteOrClosure
											value: byte
											value: s secondByte
											value: s thirdByte]]].
							[4] -> [end := self endPC - 3.
									[:byte|
									s pc <= end
									and: [byteOrClosure
											value: byte
											value: s secondByte
											value: s thirdByte
											value: s fourthByte]]] }]
					ifFalse: [[:instr | instr = byteOrClosure]])
"
SystemNavigation default browseAllSelect: [:m | m scanFor: 134]
"! !

!CompiledCode methodsFor: '*60Deprecated-private' stamp: 'mt 7/3/2019 16:46'!
messagesDo: aBlock encoderClass: encoderClass visitedSet: visitedSet

	self deprecated: 'Use #messagesDo:.'.
	self messagesDo: aBlock.! !

!CompiledCode methodsFor: '*60Deprecated-literals' stamp: 'mt 7/4/2019 10:34'!
refersTo: literal bytecodeScanner: scanBlockOrNil thorough: thorough

	self deprecated: 'Use #hasLiteral:.'.
	^ self hasLiteral: literal!
]style[(9 1 7 1 16 1 14 1 9 1 8 3 4 1 11 1 19 3 1 1 4 1 11 1 7)b,cblack;,c000000125,cblack;,b,cblack;,c000000125,cblack;,b,cblack;,c000000125,cblack;,c125000000,cblack;,c000000125,cblack;,c125000125n,cblack;,c125000000,cblack;,c125000000,cblack;,c000000125,cblack;,c000000125! !

!CompiledCode methodsFor: '*60Deprecated-literals' stamp: 'mt 7/4/2019 10:33'!
refersTo: literal primaryBytecodeScanner: primaryScanBlockOrNil secondaryBytecodeScanner: secondaryScanBlockOrNil thorough: thorough
	
	self deprecated: 'Use #hasLiteral:.'.
	^ self hasLiteral: literal!
]style[(9 1 7 1 23 1 21 1 25 1 23 1 9 1 8 4 4 1 11 1 19 3 1 1 4 1 11 1 7)b,cblack;,c000000126,cblack;,b,cblack;,c000000126,cblack;,b,cblack;,c000000126,cblack;,b,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000126n,cblack;,c126000000,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126! !


!CompiledBlock methodsFor: '*60Deprecated-literals' stamp: 'mt 7/3/2019 19:46'!
allSubLiterals

	self deprecated: 'Use #allLiterals.'.
	^ self allLiterals! !

!CompiledBlock methodsFor: 'literals' stamp: 'mt 7/4/2019 08:53'!
codeLiteralsDo: aBlock
	"Overwritten to not cause infinite loop."

	aBlock value: self.

	self literalsDo: [:literal |
		(literal isCompiledCode and: [literal ~~ self outerCode]) ifTrue: [
			literal codeLiteralsDo: aBlock]].!
]style[(15 1 6 2 41 3 6 1 6 1 4 4 4 1 11 3 7 1 1 3 1 7 1 14 1 4 1 1 7 1 2 1 4 1 9 1 1 1 7 1 1 4 7 1 15 1 6 1 2)b,cblack;,c000000126,cblack;,c000126126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,cgray;,cblack;,c000126000,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000126,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,c126000126,c000126000,cblack;,c000000126,cblack;,c000126000,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,c000126000,cblack;! !


!CompiledMethod methodsFor: 'file in/out' stamp: 'mt 6/5/2019 11:36'!
objectForDataStream: refStrm
	"Reconfigure pragma. Example: #(#FFTPlugin #primitiveFFTTransformData 0 0). See FFT >> #pluginTransformData:."

	self primitive = 117 ifTrue: [(self literalAt: 1) at: 4 put: 0].!
]style[(20 1 7 2 110 3 4 1 9 1 1 1 3 1 7 2 1 4 1 10 1 1 1 1 3 1 1 1 4 1 1 2)b,cblack;,c000000124,cblack;,c000124124,cblack;,c124000000,cblack;,c000000124,cblack;,c000000124,cblack;,c124000000,cblack;,c000000124,cblack;,c000124000,c124000000,cblack;,c000000124,cblack;,c124000000,c000124000,cblack;,c000000124,cblack;,c124000000,cblack;,c000000124,cblack;,c124000000,cblack;! !

!CompiledMethod methodsFor: 'literals' stamp: 'mt 7/4/2019 09:37'!
allLiteralsDo: aBlock
	"Overwritten to skip certain (raw) literals."
		
	" Exclude method selector (or properties) and the method's class."
	1 to: self numLiterals - 2 do: [:index |
		(self literalAt: index) allLiteralsDo: aBlock].

	"Enumerate method selector only through additional method state."
	self penultimateLiteral isMethodProperties
		ifTrue: [self penultimateLiteral allLiteralsDo: aBlock].
	
	"Enumerate special selectors."
	self flag: #todo.
	
	"Enumerate special literals such as true and false."
	self flag: #todo.!
]style[(14 1 6 2 45 5 66 2 1 1 3 1 4 1 11 1 1 1 1 1 3 3 5 1 1 3 1 4 1 10 1 5 1 1 14 1 6 5 65 2 4 1 18 1 18 3 7 2 4 1 18 1 14 1 6 6 30 2 4 1 5 1 5 5 52 2 4 1 5 1 5 1)b,cblack;,c000000126,cblack;,c000126126,cblack;,c000126126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,cgray;,cblack;,c000126000,c126000000,cblack;,c000000126,cblack;,c000000126,c000126000,cblack;,c000000126,cblack;,c000000126,cblack;,c000126126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000126126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c000126126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;! !

!CompiledMethod methodsFor: 'scanning' stamp: 'mt 7/3/2019 16:52'!
messagesSequence

	self flag: #todo. "mt: Better change #messages to return an array instead of a set?"
	^ self messages asArray! !

!CompiledMethod methodsFor: 'scanning' stamp: 'mt 7/4/2019 08:54'!
readsField: varIndex 
	"Answer whether the receiver loads the instance variable indexed by the argument."

	| varIndexCode scanner |
	varIndexCode := varIndex - 1.
	self isQuick ifTrue: [^ self isReturnField and: [self returnField = varIndexCode]].
	
	self codeLiteralsDo: [:compiledCode | 
		scanner := InstructionStream on: compiledCode.
		(scanner scanFor: (self encoderClass instVarReadScanBlockFor: varIndexCode using: scanner))
			ifTrue: [^ true]].

	^ false!
]style[(11 1 8 3 82 3 1 1 12 1 7 1 1 2 12 1 2 1 8 1 1 1 1 3 4 1 7 1 7 2 1 1 4 1 13 1 4 1 1 4 1 11 1 1 1 12 1 6 4 1 15 3 12 1 1 4 7 1 2 19 3 1 12 4 1 7 1 8 1 1 4 1 12 1 24 1 12 1 6 1 7 1 1 4 7 1 1 1 1 4 1 5 1 1 5)b,cblack;,c000000126,cblack;,c000126126,cblack;,cgray;,cblack;,c106106106,cblack;,c106106106,cblack;,cgray;,cblack;,c106106106,cblack;,b,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c000126000,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,c000126000,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,cgray;,cblack;,c106106106,cblack;,b,cblack;,c000000126,cblack;,c000000126,cblack;,c000126000,c106106106,cblack;,c000000126,cblack;,c126000126,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c106106106,c126000126,c000126000,cblack;,c000000126,cblack;,c000126000,c126000000,cblack;,c126000000,c000126000,cblack;,c126000000,cblack;,c126000000! !

!CompiledMethod methodsFor: 'scanning' stamp: 'mt 7/4/2019 08:54'!
readsRef: variableBinding 
	"Answer whether the receiver reads the value of the argument."
	"eem 5/24/2008 Rewritten to no longer assume the compler uses the
	 most compact encoding available (for EncoderForLongFormV3 support)."
	
	| litIndex scanner |
	(litIndex := self indexOfLiteral: variableBinding) = 0
		ifTrue: [^false].
	
	self codeLiteralsDo: [:compiledCode | 
		scanner := InstructionStream on: compiledCode.
		(scanner scanFor: (self encoderClass bindingReadScanBlockFor: litIndex - 1 using: scanner))
			ifTrue: [^ true]].
	
	^ false!
]style[(9 1 15 3 62 2 136 4 1 1 8 1 7 1 1 3 8 1 2 1 4 1 15 1 15 2 1 1 1 3 7 2 6 6 4 1 15 3 12 1 1 4 7 1 2 19 3 1 12 4 1 7 1 8 1 1 4 1 12 1 24 1 8 1 1 1 1 1 6 1 7 1 1 4 7 1 1 1 1 4 1 6 1 1 5)b,cblack;,c000000126,cblack;,c000126126,cblack;,c000126126,cblack;,cgray;,cblack;,c106106106,cblack;,c106106106,cblack;,cgray;,cblack;,c106106106,cblack;,b,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,cgray;,cblack;,c106106106,cblack;,b,cblack;,c000000126,cblack;,c000000126,cblack;,c000126000,c106106106,cblack;,c000000126,cblack;,c126000126,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c106106106,c126000126,c000126000,cblack;,c000000126,cblack;,c000126000,c126000000,cblack;,c126000000,c000126000,cblack;,c126000000,cblack;,c126000000! !

!CompiledMethod methodsFor: 'scanning' stamp: 'mt 7/4/2019 08:55'!
writesField: varIndex
	"Answer whether the receiver stores into the instance variable indexed by the argument."

	| varIndexCode scanner |
	self isQuick ifTrue: [^ false].
	varIndexCode := varIndex - 1.
	
	self codeLiteralsDo: [:compiledCode | 
		scanner := InstructionStream on: compiledCode.
		(scanner scanFor: (self encoderClass instVarWriteScanBlockFor: varIndex - 1 using: scanner))
			ifTrue: [^ true]].
	
	^ false!
]style[(12 1 8 2 88 3 1 1 12 1 7 1 1 2 4 1 7 1 7 2 1 1 5 4 12 1 2 1 8 1 1 1 1 5 4 1 15 3 12 1 1 4 7 1 2 19 3 1 12 4 1 7 1 8 1 1 4 1 12 1 25 1 8 1 1 1 1 1 6 1 7 1 1 4 7 1 1 1 1 4 1 6 1 1 5)b,cblack;,c000000126,cblack;,c000126126,cblack;,cgray;,cblack;,c106106106,cblack;,c106106106,cblack;,cgray;,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c126000000,cblack;,c106106106,cblack;,b,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,cgray;,cblack;,c106106106,cblack;,b,cblack;,c000000126,cblack;,c000000126,cblack;,c000126000,c106106106,cblack;,c000000126,cblack;,c126000126,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c106106106,c126000126,c000126000,cblack;,c000000126,cblack;,c000126000,c126000000,cblack;,c126000000,c000126000,cblack;,c126000000,cblack;,c126000000! !

!CompiledMethod methodsFor: 'scanning' stamp: 'mt 7/4/2019 08:55'!
writesRef: variableBinding 
	"Answer whether the receiver writes the value of the argument."
	"eem 5/24/2008 Rewritten to no longer assume the compler uses the
	 most compact encoding available (for EncoderForLongFormV3 support)."
	
	| litIndex scanner |
	(litIndex := self indexOfLiteral: variableBinding) = 0
		ifTrue: [^ false].
	
	self codeLiteralsDo: [:compiledCode | 
		scanner := InstructionStream on: compiledCode.
		(scanner scanFor: (self encoderClass bindingWriteScanBlockFor: litIndex - 1 using: scanner))
			ifTrue: [^ true]].

	^ false!
]style[(10 1 15 3 63 2 136 4 1 1 8 1 7 1 1 3 8 1 2 1 4 1 15 1 15 2 1 1 1 3 7 2 1 1 5 6 4 1 15 3 12 1 1 4 7 1 2 19 3 1 12 4 1 7 1 8 1 1 4 1 12 1 25 1 8 1 1 1 1 1 6 1 7 1 1 4 7 1 1 1 1 4 1 5 1 1 5)b,cblack;,c000000126,cblack;,c000126126,cblack;,c000126126,cblack;,cgray;,cblack;,c106106106,cblack;,c106106106,cblack;,cgray;,cblack;,c106106106,cblack;,b,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c126000000,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,cgray;,cblack;,c106106106,cblack;,b,cblack;,c000000126,cblack;,c000000126,cblack;,c000126000,c106106106,cblack;,c000000126,cblack;,c126000126,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c106106106,c126000126,c000126000,cblack;,c000000126,cblack;,c000126000,c126000000,cblack;,c126000000,c000126000,cblack;,c126000000,cblack;,c126000000! !

!CompiledMethod methodsFor: '*60Deprecated-literals' stamp: 'mt 7/3/2019 15:49'!
hasLiteralThorough: literal

	self deprecated: 'Use #hasLiteral: instead. It is always thorough.'.
	^ self hasLiteral: literal!
]style[(19 1 7 3 4 1 11 1 50 3 1 1 4 1 11 1 7)b,cblack;,c000000125,cblack;,c125000000,cblack;,c000000125,cblack;,c125000125n,cblack;,c125000000,cblack;,c125000000,cblack;,c000000125,cblack;,c000000125! !

!CompiledMethod methodsFor: '*60Deprecated-literals' stamp: 'mt 7/3/2019 16:56'!
refersToLiteral:aLiteral

	self deprecated: 'Use #hasLiteral: instead.'.
	^self hasLiteral: aLiteral! !


!DeepCopier methodsFor: 'like fullCopy' stamp: 'mt 6/5/2019 10:33'!
checkClass: aClass
	| meth |
	"Check that no indexes of instance vars have changed in certain classes.  If you get an error in this method, an implementation of veryDeepCopyWith: needs to be updated.  The idea is to catch a change while it is still in the system of the programmer who made it."

	self checkBasicClasses.	"Unlikely, but important to catch when it does happen."

	"Every class that implements veryDeepInner: must copy all its inst vars.  Danger is that a user will add a new instance variable and forget to copy it.  So check that the last one is mentioned in the copy method."
	(aClass includesSelector: #veryDeepInner:) ifTrue: [ 
		((aClass compiledMethodAt: #veryDeepInner:) writesField: aClass instSize) ifFalse: [
			aClass instSize > 0 ifTrue: [
				self warnIverNotCopiedIn: aClass sel: #veryDeepInner:]]].
	(aClass includesSelector: #veryDeepCopyWith:) ifTrue: [
		meth := aClass compiledMethodAt: #veryDeepCopyWith:.
		(meth size > 20) & (meth hasLiteral: #veryDeepCopyWith:) not ifTrue: [
			(meth writesField: aClass instSize) ifFalse: [
				self warnIverNotCopiedIn: aClass sel: #veryDeepCopyWith:]]].
!
]style[(11 1 6 2 1 1 4 1 1 2 264 3 4 1 17 2 55 3 213 3 6 1 17 1 15 2 7 6 1 1 6 1 17 1 15 1 1 12 1 6 1 8 1 1 8 1 1 4 6 1 8 1 1 1 1 1 7 1 1 5 4 1 20 1 6 1 4 1 15 1 1 5 6 1 17 1 18 2 7 5 4 1 2 1 6 1 17 1 18 4 1 4 1 4 1 1 1 2 1 1 1 1 1 4 1 11 1 18 1 1 3 1 7 1 1 4 1 4 1 12 1 6 1 8 1 1 8 1 1 5 4 1 20 1 6 1 4 1 18 1 1 3)b,cblack;,c000000124,cblack;,cgray;,cblack;,c104104104,cblack;,cgray;,cblack;,c000124124,cblack;,c124000000,cblack;,c000000124,cblack;,c000124124,cblack;,c000124124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000124000,c124000124,c000000124,cblack;,c000000124,cblack;,c000000124,c124000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,c000124000,cblack;,c000000124,cblack;,c000124000,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c124000000,cblack;,c000000124,cblack;,c124000124,cblack;,c124000000,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,c124000124,c000124000,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c104104104,cblack;,b,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000124000,c104104104,cblack;,c000000124,cblack;,c000000124,cblack;,c124000000,c000124000,cblack;,c000000124,cblack;,c000124000,c104104104,cblack;,c000000124,cblack;,c000000124,c000124000,cblack;,c000000124,cblack;,c000000124,cblack;,c000124000,cblack;,c124000124,c104104104,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,c124000124,cblack;,c000000124,cblack;,c124000124,cblack;,c124000000,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,c124000124,c000124000,cblack;! !

!DeepCopier methodsFor: 'like fullCopy' stamp: 'mt 6/5/2019 10:33'!
checkVariables
	"Check that no indexes of instance vars have changed in certain classes.  If you get an error in this method, an implementation of veryDeepCopyWith: needs to be updated.  The idea is to catch a change while it is still in the system of the programmer who made it.  
	DeepCopier new checkVariables	"

	self checkBasicClasses.

	"Every class that implements veryDeepInner: must copy all its inst vars.  Danger is that a user will add a new instance variable and forget to copy it.  So check that the last one is mentioned in the copy method."
	(self systemNavigation allClassesImplementing: #veryDeepInner:) do: 
			[:aClass | 
			((aClass compiledMethodAt: #veryDeepInner:) writesField: aClass instSize) 
				ifFalse: 
					[aClass instSize > 0 
						ifTrue: [self warnIverNotCopiedIn: aClass sel: #veryDeepInner:]]].
	(self systemNavigation allClassesImplementing: #veryDeepCopyWith:) do: 
			[:aClass | 
			| meth |
			meth := aClass compiledMethodAt: #veryDeepCopyWith:.
			meth size > 20 & (meth hasLiteral: #veryDeepCopyWith:) not 
				ifTrue: 
					[(meth writesField: aClass instSize) 
						ifFalse: [self warnIverNotCopiedIn: aClass sel: #veryDeepCopyWith:]]]!
]style[(14 2 298 3 4 1 17 4 213 3 4 1 16 1 23 1 15 2 3 7 6 1 1 5 1 1 6 1 17 1 15 1 1 12 1 6 1 8 1 6 8 7 1 6 1 8 1 1 1 1 8 7 1 1 4 1 20 1 6 1 4 1 15 1 1 5 4 1 16 1 23 1 18 2 3 7 6 1 1 5 1 1 4 1 1 4 4 1 2 1 6 1 17 1 18 5 4 1 4 1 1 1 2 1 1 1 1 4 1 11 1 18 1 1 3 6 7 7 1 1 4 1 12 1 6 1 8 1 8 8 1 1 4 1 20 1 6 1 4 1 18 1 1 1)b,cblack;,c000124124,cblack;,c124000000,cblack;,c000000124,cblack;,c000124124,cblack;,c124000000,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,cgray;,cblack;,c000124000,c124000124,c000000124,cblack;,c000000124,cblack;,c000000124,c124000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,c000124000,cblack;,c000000124,cblack;,c000124000,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c124000000,cblack;,c000000124,cblack;,c124000124,c124000000,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,c124000124,c000124000,cblack;,c124000000,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,cgray;,cblack;,cgray;,cblack;,cgray;,cblack;,cgray;,cblack;,cgray;,cblack;,b,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,cgray;,cblack;,c000000124,cblack;,c000000124,cblack;,c124000000,cblack;,c000000124,cblack;,c000124000,cgray;,cblack;,c000000124,cblack;,c000000124,c000124000,cblack;,c000000124,cblack;,c000000124,cblack;,c000124000,c124000124,cgray;,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,c124000124,cblack;,c000000124,cblack;,c124000124,c124000000,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,c124000124,c000124000,cblack;! !

!DeepCopier methodsFor: 'like fullCopy' stamp: 'eem 6/6/2017 12:36'!
mapUniClasses
	"For new Uniclasses, map their class vars to the new objects.  And their additional class instance vars.  (scripts slotInfo) and cross references like (player321)."
	"Players also refer to each other using associations in the References dictionary.  Search the methods of our Players for those.  Make new entries in References and point to them."
	| pp |

	newUniClasses ifFalse: [^ self].	"All will be siblings.  uniClasses is empty"
"Uniclasses use class vars to hold onto siblings who are referred to in code"
pp := (Smalltalk at: #Player ifAbsent:[^self]) class superclass instSize.
uniClasses do: [:playersClass | "values = new ones"
	playersClass classPool associationsDo: [:assoc |
		assoc value: (assoc value veryDeepCopyWith: self)].
	playersClass scripts: (playersClass privateScripts veryDeepCopyWith: self).	"pp+1"
	"(pp+2) slotInfo was deepCopied in copyUniClass and that's all it needs"
	pp+3 to: playersClass class instSize do: [:ii | 
		playersClass instVarAt: ii put: 
			((playersClass instVarAt: ii) veryDeepCopyWith: self)].
	].

"Make new entries in References and point to them."
References keys "copy" do: [:playerName | | oldPlayer newKey |
	oldPlayer := References at: playerName.
	(references includesKey: oldPlayer) ifTrue: [
		newKey := (references at: oldPlayer) "new player" uniqueNameForReference.
		"now installed in References"
		(references at: oldPlayer) renameTo: newKey]].
uniClasses "values" do: [:newClass | | newSelList oldSelList |
	oldSelList := OrderedCollection new.   newSelList := OrderedCollection new.
	newClass selectorsAndMethodsDo: [:sel :m | 
		m literals do: [:assoc | | newAssoc newKey |
			assoc isVariableBinding ifTrue: [
				(References associationAt: assoc key ifAbsent: [nil]) == assoc ifTrue: [
					newKey := (references at: assoc value ifAbsent: [assoc value]) 
									externalName asSymbol.
					(assoc key ~= newKey) & (References includesKey: newKey) ifTrue: [
						newAssoc := References associationAt: newKey.
						newClass methodDictionary at: sel put: 
							(newClass compiledMethodAt: sel) shallowCopy.	"were sharing it"
						(newClass compiledMethodAt: sel)
							literalAt: ((newClass compiledMethodAt: sel) literals indexOf: assoc)
							put: newAssoc.
						(oldSelList includes: assoc key) ifFalse: [
							oldSelList add: assoc key.  newSelList add: newKey]]]]]].
	oldSelList with: newSelList do: [:old :new |
			newClass replaceSilently: old to: new]].	"This is text replacement and can be wrong"! !


!Dictionary methodsFor: 'removing' stamp: 'mt 6/24/2019 18:29'!
unreferencedKeys
	"| uk | (Time millisecondsToRun: [uk := TextConstants unreferencedKeys]) -> uk"

	^'Scanning for references . . .' 
		displayProgressFrom: 0
		to: Smalltalk classNames size * 2
		during: [ :bar |
			| currentClass n associations referencedAssociations |
			currentClass := nil.
			n := 0.
			associations := self associations asIdentitySet.
			referencedAssociations := IdentitySet new: associations size.
			self systemNavigation allSelectorsAndMethodsDo: [ :behavior :selector :method |
				behavior == currentClass ifFalse: [
					currentClass := behavior.
					 bar value: (n := n + 1) ].
				method allLiteralsDo: [ :literal |
					(literal isVariableBinding and: [ associations includes: literal ]) ifTrue: [
						referencedAssociations add: literal ] ] ].
			(associations reject: [ :assoc | referencedAssociations includes: assoc ]) collect: [ :assoc| assoc key ] ]!
]style[(16 2 79 3 1 31 4 20 1 1 3 3 11 10 1 4 1 1 1 1 3 7 4 3 1 1 4 1 1 12 1 1 1 12 1 22 1 1 4 12 1 2 1 3 5 1 1 2 1 1 5 12 1 2 1 4 1 12 1 13 5 22 1 2 13 4 1 12 1 4 5 4 1 16 1 25 1 1 2 8 2 8 2 6 1 1 5 8 1 2 1 12 1 8 1 1 6 12 1 2 1 8 8 3 1 6 1 1 1 1 2 1 1 1 1 1 2 1 1 6 6 1 14 1 1 2 7 1 1 6 1 7 1 17 1 4 1 1 1 12 1 9 1 7 1 1 1 1 7 1 1 7 22 1 4 1 7 1 1 1 1 1 1 5 1 12 1 7 1 1 2 5 1 1 1 22 1 9 1 5 1 1 1 1 8 1 1 2 5 1 1 5 1 3 1 1 2)b,cblack;,c000124124,cblack;,c124000000,c124000124n,cblack;,c000000124,cblack;,c124000000,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c124000000,cblack;,c000000124,cblack;,c000000124,cblack;,cgray;,cblack;,cgray;,cblack;,cgray;,cblack;,cgray;,cblack;,cgray;,cblack;,cgray;,cblack;,cgray;,cblack;,cgray;,cblack;,b,cblack;,c124000000,cblack;,cgray;,cblack;,b,cblack;,c124000000,cblack;,cgray;,cblack;,b,cblack;,c124000000,cblack;,c000000124,cblack;,c000000124,cblack;,cgray;,cblack;,b,cblack;,c000000124,cblack;,cgray;,cblack;,c000000124,cblack;,c124000000,cblack;,c000000124,cblack;,c000000124,cblack;,c000124000,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,cgray;,cblack;,c000000124,cblack;,c000000124,cblack;,cgray;,cblack;,c000000124,cblack;,c124000124,cblack;,cgray;,cblack;,b,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c124000000,cgray;,cblack;,b,cblack;,cgray;,cblack;,c000000124,cblack;,c124000000,cblack;,c124000124,cblack;,c000000124,cblack;,c000000124,cblack;,c124000124,cblack;,c000000124,cblack;,cgray;,cblack;,c124000000,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000234000,cblack;,cgray;,cblack;,c000000124,cblack;,c000000124,cblack;,c000234000,c124000000,cblack;,c000000124,cblack;,c124000000,cblack;,cgray;,cblack;,c000000124,cblack;,c000000124,cblack;,c124000000,cblack;,c124000124,cblack;,c000124000,cblack;,c000124000,cgray;,cblack;,c000000124,cblack;,c124000124,cblack;,c000000124,cblack;,cgray;,cblack;,cgray;,cblack;,c000000124,cblack;,c000000124,cblack;,c124000124,c000124000,cblack;,c000000124,cblack;,c000124000,cblack;,c000000124,cgray;,cblack;,c000000124,cblack;,c000000124,cblack;,c000124000,cblack;! !


!LiteralRefLocatorTest methodsFor: 'tests' stamp: 'mt 7/4/2019 10:08'!
testFindLiteralsInBytecode
	"Create a method referencing integers, characters, special selectors and nil, true & false.
	 Compile it and check that the objects are found."
	| source primary secondary binarySpecials integers characters |
	binarySpecials := Smalltalk specialSelectors select: [:s| s isSymbol and: [s isBinary]].
	"-65536 to 65535 in powers of two"
	integers := ((16 to: 1 by: -1) collect: [:power| (2 raisedTo: power) negated]),
				((0 to: 16) collect: [:power| (2 raisedTo: power) - 1]).
	"some printable characters; alas none have code > 255"
	characters := (0 to: 65535)
					select: [:n| (n between: 132 and: 160) not "these have no glyph in typical fonts"
								and: [(Character value: n) shouldBePrintedAsLiteral]]
					thenCollect: [:n| Character value: n].
	[characters size > 32] whileTrue:
		[characters := (1 to: characters size by: 2) collect: [:i| characters at: i]].
	
	#(('' '') ('^[' ']')) do: "And the locators should work whether in a block or not"
		[:pFixes|
		source := ByteString streamContents:
					[:s| | binaries |
					binaries := binarySpecials readStream.
					s nextPutAll: 'exampleMethod'; crtab; nextPutAll: pFixes first.
					integers
						do: [:n| s print: n]
						separatedBy:
							[binaries atEnd ifTrue: [binaries reset].
							 s space; nextPutAll: binaries next; space].
					s nextPut: $.; crtab.
					s nextPut: ${; space.
					characters
						do: [:c| s print: c]
						separatedBy: [s nextPut: $.; space].
					s space; nextPut: $}; nextPut: $.; crtab.
					s nextPutAll: 'true ifTrue: [^nil] ifFalse: [^false]'; nextPutAll: pFixes last].
		primary := CompiledCode classPool at: #PrimaryBytecodeSetEncoderClass.
		secondary := CompiledCode classPool at: #SecondaryBytecodeSetEncoderClass.
		{ primary. secondary } do:
			[:encoderClass| | method |
			method := (Parser new
								encoderClass: encoderClass;
								parse: source class: self class)
							generate: CompiledMethodTrailer empty.
			binarySpecials, integers, characters, #(nil false true) do: 
				[:literal | self assert: (method hasLiteral: literal)].

			"Now test for false positives..."
			integers, characters, #(nil false true) do:
				[:literal| | simpleSource simpleMethod |
				simpleSource := ByteString streamContents:
									[:s| s nextPutAll: 'exampleMethod'; crtab; nextPutAll: pFixes first; print: literal; nextPutAll: ' class'; nextPutAll: pFixes last].
				simpleMethod := (Parser new
										encoderClass: encoderClass;
										parse: simpleSource class: self class)
									generate: CompiledMethodTrailer empty.
				binarySpecials, integers, characters, #(nil false true) do: [:anyLiteral |
					anyLiteral == literal
						ifTrue: [self assert: (simpleMethod hasLiteral: anyLiteral)]
						ifFalse: [self deny: (simpleMethod hasLiteral: anyLiteral)]]]]]!
]style[(26 2 143 2 1 1 6 1 7 1 9 1 14 1 8 1 10 1 1 2 14 1 2 11 16 1 7 3 1 1 1 1 1 8 1 4 1 1 1 1 8 1 4 34 2 8 1 2 2 1 2 1 3 1 1 1 3 1 2 1 1 8 1 1 1 5 1 1 1 1 1 9 1 5 1 1 7 1 1 1 6 1 1 1 3 1 2 1 1 8 1 1 1 5 1 1 1 1 1 9 1 5 1 1 1 1 1 1 4 54 2 10 1 2 2 1 1 3 1 5 7 7 3 1 1 1 1 1 1 8 1 3 1 4 1 3 1 1 3 1 38 9 4 1 1 1 10 6 1 1 1 1 24 1 7 12 3 1 1 11 6 1 1 5 10 1 4 1 1 1 2 2 10 4 10 1 2 1 1 1 1 3 1 10 1 4 1 3 1 1 1 1 8 1 1 1 1 1 1 10 1 3 1 1 1 6 1 2 2 1 2 3 4 1 3 3 3 1 56 5 6 1 3 6 1 2 12 15 6 1 1 1 1 1 1 1 8 1 1 6 8 1 2 1 14 1 10 7 1 1 11 1 15 2 5 2 11 1 6 1 5 7 8 7 3 1 1 1 1 1 1 1 1 6 1 1 1 7 12 8 1 8 1 5 1 7 1 1 8 1 5 1 10 1 1 5 2 11 1 8 1 4 2 5 1 7 1 1 8 1 2 2 5 7 1 1 8 1 2 2 5 7 10 7 3 1 1 1 1 1 1 1 1 6 1 1 1 7 12 1 1 1 1 8 1 2 2 5 1 7 1 1 5 2 8 1 2 2 8 1 2 2 5 7 1 1 11 1 39 2 11 1 6 1 4 1 4 7 1 2 14 9 1 3 1 31 4 9 1 2 14 9 1 3 1 33 6 7 2 9 3 3 4 1 1 12 1 1 1 1 6 1 1 4 6 1 2 1 1 7 3 9 13 1 12 10 6 1 6 1 6 1 4 1 5 1 8 9 23 5 5 14 1 1 8 1 1 10 1 1 1 1 3 1 5 1 4 2 3 6 1 1 7 1 1 1 4 1 7 1 1 6 1 11 1 7 1 1 6 33 4 8 1 1 10 1 1 1 1 3 1 5 1 4 2 3 5 1 1 7 1 1 1 1 12 1 12 1 1 5 12 1 2 12 15 10 1 1 1 1 1 1 1 11 1 15 2 5 2 11 1 6 1 5 2 6 1 7 2 11 1 8 2 11 1 6 1 4 1 6 12 1 2 1 1 7 3 11 13 1 12 12 6 1 12 1 6 1 4 1 5 1 10 9 23 5 6 14 1 1 8 1 1 10 1 1 1 1 3 1 5 1 4 2 3 1 1 1 10 1 1 6 10 1 2 1 7 7 7 1 1 4 1 7 1 1 12 1 11 1 10 1 1 7 8 1 1 4 1 5 1 1 12 1 11 1 10 1 1 1 1 1 1)b,cblack;,c000126126,cblack;,cgray;,cblack;,c106106106,cblack;,c106106106,cblack;,c106106106,cblack;,c106106106,cblack;,c106106106,cblack;,c106106106,cblack;,cgray;,cblack;,c106106106,cblack;,b,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cgray;,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000126000,c000000126,cblack;,c000000126,c000126000,cblack;,c000126126,cblack;,c106106106,cblack;,b,cblack;,c000126000,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,c000126000,cblack;,c000000126,cblack;,c000126000,cblack;,c000000126,cgray;,cblack;,c126000126,c126000000,cblack;,c000000126,cblack;,c000000126,c126000126,cblack;,c000000126,c000126000,cblack;,c000000126,cblack;,c000126000,c126000000,cblack;,c000000126,cblack;,c126000000,c000126000,cblack;,c000000126,cblack;,c000126000,cblack;,c000000126,cgray;,cblack;,c126000126,c126000000,cblack;,c000000126,cblack;,c000000126,c126000126,cblack;,c000000126,cblack;,c126000000,c000126000,cblack;,c000126126,cblack;,c106106106,cblack;,b,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cgray;,cblack;,c000126000,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,c000126000,cblack;,c000000126,cblack;,c000126126,cblack;,c000000126,cblack;,c000126000,c126000126,cblack;,c000000126,cblack;,c000000126,c126000126,cblack;,c000000126,c000126000,cblack;,c000000126,cblack;,c000000126,cgray;,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c106106106,cblack;,b,cblack;,c000126000,c126000000,cblack;,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,c000126000,cblack;,c000000126,cblack;,c000126000,cblack;,c000000126,cgray;,cblack;,c106106106,cblack;,c000000126,cblack;,c000000126,c000126000,cblack;,c000000126,cblack;,c126000126n,cblack;,c126000126n,cblack;,c126000126n,cblack;,c126000126n,cblack;,c000000126,cblack;,c000126126,cblack;,c000000126,cgray;,cblack;,c106106106,cblack;,b,cblack;,c000000126,cblack;,c000126000,cblack;,c000000126,cgray;,cblack;,cgray;,cblack;,cgray;,cblack;,cgray;,cblack;,cgray;,cblack;,b,cblack;,c106106106,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000126n,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c126000126,cblack;,c000000126,cgray;,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,c126000126,cblack;,c000000126,cblack;,c126000126,cgray;,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cgray;,cblack;,c000000126,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,cgray;,cblack;,c000000126,cblack;,c000000126,c126000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c126000126,cblack;,c000000126,cgray;,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,c126000126,cblack;,c000000126,cblack;,c126000126,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,c126000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000126n,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,c000126000,cblack;,c106106106,cblack;,b,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,cblack;,b,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,cblack;,c106106106,cblack;,c000000126,cblack;,c000126000,cblack;,c000000126,cgray;,cblack;,cgray;,cblack;,cgray;,cblack;,cgray;,cblack;,cgray;,cblack;,b,cblack;,c126000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,c126000126,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,c000000126,cblack;,c106106106,c000000126,cblack;,c106106106,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c126000000,cblack;,c126000000,cblack;,c000000126,cblack;,c126000126,cblack;,c000000126,cblack;,cgray;,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cgray;,cblack;,c000000126,cblack;,c000000126,c126000000,c126000126,cblack;,c000126126,cblack;,c106106106,c000000126,cblack;,c106106106,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c126000000,cblack;,c126000000,cblack;,c000000126,cblack;,c126000126,cblack;,c000000126,cgray;,cblack;,cgray;,cblack;,cgray;,cblack;,cgray;,cblack;,cgray;,cblack;,cgray;,cblack;,b,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cgray;,cblack;,c000000126,cblack;,c000000126,cblack;,c126000126n,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000126n,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,c126000000,cblack;,cgray;,cblack;,b,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,cgray;,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,c000000126,cblack;,c106106106,c000000126,cblack;,c106106106,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c126000000,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,cgray;,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000234000,c126000000,cblack;,c000000126,cblack;,c234140000,cgray;,cblack;,c000000126,cblack;,c000000126,c234140000,c000234000,cblack;,c000000126,cblack;,c000234000,c126000000,cblack;,c000000126,cblack;,c234140000,cgray;,cblack;,c000000126,cblack;,c000000126,c234140000,c000234000,c126000000,c126000126,c000126000,cblack;! !

!LiteralRefLocatorTest methodsFor: 'tests' stamp: 'mt 7/4/2019 10:28'!
testThoroughFindLiteralsInBytecode
	"Create a method referencing integers, characters, special selectors and nil, true & false.
	 Compile it and check that the objects are found."
	| literals problem primary secondary |
	literals := #(-1 0 1 $0 $1 1.0 #[1 2 3 4] 'one' #one nil true false NaN).
	problem := Float bindingOf: #NaN.
	primary := CompiledCode classPool at: #PrimaryBytecodeSetEncoderClass.
	secondary := CompiledCode classPool at: #SecondaryBytecodeSetEncoderClass.
	{ primary. secondary } do:
		[:encoderClass| | method |
		#(('' '') ('^[' ']')) do: "And the locators should work whether in a block or not"
			[:pFixes|
			"NaN's binding should still be found even though (Float bindingOf: #NaN) ~= (Float bindingOf: #NaN)"
			method := (Parser new
								encoderClass: encoderClass;
								parse: 'foo ', pFixes first, '^NaN', pFixes last class: Float)
							generate: CompiledMethodTrailer empty.

			"Check our problematic case first."
			 self assert: (method hasLiteral: problem).
			 "The selector of a method should never be found (unless it occurs as a literal or in a pragma)"
			 self deny: (method hasLiteral: method selector).

			"All the literals should be found in a thorough search, but not otherwise"
			method := (Parser new
								encoderClass: encoderClass;
								parse: 'foo ', pFixes first, '^', literals storeString, pFixes last class: Float)
							generate: CompiledMethodTrailer empty.
			literals, {problem key} do:
				[:literal | self assert: (method hasLiteral: literal)]].

		"Likewise if in a pragma"
		method := (Parser new
							encoderClass: encoderClass;
							parse: 'foo <pragma: ', literals storeString, ' with: ', problem key storeString, '>' class: Float)
						generate: CompiledMethodTrailer empty.
		literals, {problem key} do:
			[:literal | self assert: (method hasLiteral: literal)]]!
]style[(34 2 143 2 1 1 8 1 7 1 7 1 9 1 1 2 8 1 2 1 1 1 2 1 1 1 1 1 2 1 2 1 3 1 1 1 1 1 1 1 1 1 1 2 5 1 4 1 3 1 4 1 5 1 3 4 7 1 2 7 10 1 4 3 7 1 2 14 9 1 3 1 31 3 9 1 2 14 9 1 3 1 33 5 7 2 9 3 3 5 12 1 1 1 1 6 1 1 3 1 2 2 1 2 3 4 1 3 3 3 1 56 4 1 1 6 1 4 100 4 6 1 2 1 1 7 3 9 13 1 12 10 6 1 6 1 1 6 1 6 1 6 1 1 6 1 4 1 6 6 1 8 9 23 5 6 35 5 4 1 7 1 1 6 1 11 1 7 1 6 95 5 4 1 5 1 1 6 1 11 1 6 1 8 1 6 74 4 6 1 2 1 1 7 3 9 13 1 12 10 6 1 6 1 1 6 1 6 1 3 1 1 8 1 12 1 6 1 4 1 6 6 1 8 9 23 5 5 8 1 2 7 1 3 2 3 5 1 1 7 1 1 1 4 1 7 1 1 6 1 11 1 7 1 1 1 5 25 3 6 1 2 1 1 7 3 8 13 1 12 9 6 1 15 1 1 8 1 12 1 9 1 1 7 1 3 1 12 1 3 1 6 6 1 7 9 23 5 4 8 1 2 7 1 3 2 3 4 1 1 7 1 1 1 4 1 7 1 1 6 1 11 1 7 1 1 1)b,cblack;,c000126126,cblack;,cgray;,cblack;,c106106106,cblack;,c106106106,cblack;,c106106106,cblack;,c106106106,cblack;,cgray;,cblack;,c106106106,cblack;,b,cblack;,c000000126,cblack;,c126000000,cblack;,c126000000,cblack;,c126000000,cblack;,c126000000,cblack;,c126000000,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c126000000,cblack;,c126000000,cblack;,c126000000,cblack;,c126000126n,cblack;,c000000126,cblack;,c126000000,cblack;,c126000000,cblack;,c126000000,cblack;,c000000126,cblack;,c106106106,cblack;,b,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,cblack;,b,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,cblack;,b,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,cblack;,c106106106,cblack;,c000000126,cblack;,c000000126,cgray;,cblack;,cgray;,cblack;,cgray;,cblack;,cgray;,cblack;,c000000126,cblack;,c126000126n,cblack;,c126000126n,cblack;,c126000126n,cblack;,c126000126n,cblack;,c000000126,cblack;,c000126126,cblack;,c000126000,cblack;,c000000126,cgray;,cblack;,c000126126,cblack;,cgray;,cblack;,b,cblack;,c126000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000126n,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000126n,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000126126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000126,cgray;,cblack;,c000000126,cblack;,c106106106,c126000126,cblack;,c000126126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000126,cgray;,cblack;,c000000126,cblack;,cgray;,cblack;,c000000126,c126000126,cblack;,c000126126,cblack;,cgray;,cblack;,b,cblack;,c126000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000126n,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000126n,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000126,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c000000126,cblack;,c126000126,cblack;,c000000126,cblack;,cgray;,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cgray;,cblack;,c000000126,cblack;,c000000126,c126000000,c126000126,c000126000,cblack;,c000126126,cblack;,cgray;,cblack;,b,cblack;,c000126000,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000126n,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c126000126n,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c000000126,cblack;,c126000126n,cblack;,c000000126,cblack;,c000126000,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c000000126,cblack;,c000126000,cblack;,c000000126,cblack;,cgray;,cblack;,c126000000,cblack;,c000000126,cblack;,c126000126,cgray;,cblack;,c000000126,cblack;,c000000126,c126000126,c000126000,cblack;! !


!PBPreferenceView methodsFor: 'user interface' stamp: 'mt 7/3/2019 15:52'!
offerPreferenceNameMenu: aPreferenceBrowser
	"the user clicked on a preference name -- put up a menu"

	| aMenu |			
	aMenu := MenuMorph new 
		defaultTarget: self preference;
		addTitle: self preference name.

	(Preferences okayToChangeProjectLocalnessOf: self preference name) ifTrue:
		[aMenu addUpdating: #isProjectLocalString target: self preference action: #toggleProjectLocalness.
		aMenu balloonTextForLastItem: 'Some preferences are best applied uniformly to all projects, and others are best set by each individual project.  If this item is checked, then this preference will be printed in bold and will have a separate value for each project'].

	aMenu add: 'browse senders' translated target: self systemNavigation selector: #browseAllSelect:name:autoSelect: argumentList: {[:m | self preference selectors anySatisfy: [:sel | m hasLiteral: sel]]. 'Preference senders: {1}' translated format: {self preference name}. self preference selectors first}.
	aMenu balloonTextForLastItem: 'This will open a method-list browser on all methods that the send the preference "', self preference name, '".'. 
	aMenu add: 'show category...' target: aPreferenceBrowser selector: #findCategoryFromPreference: argument: self preference name.
	aMenu balloonTextForLastItem: 'Allows you to find out which category, or categories, this preference belongs to.'.

	Smalltalk isMorphic ifTrue:
		[aMenu add: 'hand me a button for this preference' target: self selector: #tearOffButton.
		aMenu balloonTextForLastItem: 'Will give you a button that governs this preference, which you may deposit wherever you wish'].

	aMenu add: 'copy this name to clipboard' target: self preference selector: #copyName.
	aMenu balloonTextForLastItem: 'Copy the name of the preference to the text clipboard, so that you can paste into code somewhere'.

	aMenu popUpInWorld!
]style[(24 1 18 2 56 3 1 1 5 1 1 5 5 1 2 11 3 4 14 1 4 1 10 4 9 1 4 1 10 1 4 17 31 1 4 1 10 1 4 2 7 4 5 1 12 1 21 1 7 1 4 1 10 1 7 1 23 4 5 1 23 1 233 5 5 1 4 1 16 1 10 1 7 1 4 1 16 1 9 1 33 1 13 4 1 1 1 1 4 1 10 1 9 1 11 1 1 1 3 1 1 1 1 1 11 1 3 1 3 25 1 10 1 7 2 4 1 10 1 4 3 4 1 10 1 9 1 5 4 5 1 23 1 84 1 1 4 1 10 1 5 1 4 4 5 1 4 1 18 1 7 1 18 1 9 1 28 1 9 1 4 1 10 1 4 3 5 1 23 1 83 14 9 1 7 4 5 1 4 1 38 1 7 1 4 1 9 1 14 4 5 1 23 1 94 5 5 1 4 1 29 1 7 1 4 1 10 1 9 1 9 3 5 1 23 1 98 4 5 1 12)b,cblack;,c000000126,cblack;,c000126126,cblack;,cgray;,cblack;,c106106106,cblack;,cgray;,cblack;,c106106106,cblack;,b,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c126000126n,cblack;,c106106106,cblack;,c000000126,cblack;,c126000126n,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,cgray;,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000126000,cblack;,c000000126,cblack;,cgray;,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,c000126000,cblack;,c126000126n,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c126000126n,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c126000126n,cblack;,c106106106,cblack;,c000000126,cblack;,c126000126n,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c126000126n,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c126000126n,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c126000126n,cblack;,c106106106,cblack;,c000000126,cblack;,c126000126n,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c126000126n,cblack;,c106106106,cblack;,c000000126! !


!Pragma methodsFor: 'literals' stamp: 'mt 6/5/2019 10:59'!
allLiteralsDo: aBlock

	keyword allLiteralsDo: aBlock.
	arguments allLiteralsDo: aBlock.!
]style[(14 1 6 11 14 1 6 13 14 1 6 1)b,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;! !

!Pragma methodsFor: 'literals' stamp: 'mt 5/28/2019 12:34'!
hasLiteral: aLiteral
	"Extra support for #hasLiteralTest:."
	
	^ (super hasLiteral: aLiteral)
		or: [keyword == #hasLiteralTest: and: [
			self methodClass theNonMetaClass perform: arguments first with: aLiteral]]!
]style[(11 1 8 2 37 4 1 2 5 1 11 1 8 4 3 10 2 1 16 1 4 1 1 4 4 1 11 1 15 1 8 11 5 1 5 1 8 1 1)b,cblack;,c000000124,cblack;,c000124124,cblack;,c124000000,cblack;,c124000000,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000124000,cblack;,c124000000,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,c000124000,cblack;! !


!Preferences class methodsFor: '*Etoys-Squeakland-themes' stamp: 'mt 7/3/2019 17:25'!
cambridge
	"A theme for Squeakland and OLPC project"
	"Preferences cambridge"
	"This method has three parts.  Don't forget to look at the stuff at the bottom."

	self setPreferencesFrom: #(
		(allowCelesteTell false)
		(alternativeScrollbarLook true)
		(alternativeWindowLook true)
		(annotationPanes true)
		(automaticKeyGeneration true)
		(biggerHandles true)
		(blinkParen false)
		(browseWithDragNDrop true)
		(canRecordWhilePlaying true)
		(classicNavigatorEnabled false)
		(compactViewerFlaps true)
		(enableLocalSave false)
		(escapeKeyProducesMenu false)
		(eToyFriendly true)
		(eToyLoginEnabled true)
		(extraDebuggerButtons false)
		(gradientMenu false)
		(haloTransitions false)
		(honorDesktopCmdKeys true)
		(includeSoundControlInNavigator true)
		(magicHalos false)
		(menuAppearance3d false)
		(menuKeyboardControl false)
		(modalColorPickers true)
		(mouseOverHalos false)
		(mvcProjectsAllowed false)
		(preserveTrash true)
		(projectViewsInWindows false)
		(promptForUpdateServer false)
		(propertySheetFromHalo false)
		(roundedMenuCorners false)
		(roundedWindowCorners false)
		(securityChecksEnabled true)
		(standaloneSecurityChecksEnabled true)
		(duplicateControlAndAltKeys true)
		(showDirectionHandles false)
		(showDirectionForSketches true)
		(showProjectNavigator false)
		(showSecurityStatus false)
		(soundQuickStart true)	"see setPlatformPreferences"
		(soundReverb false)
		(soundStopWhenDone true) 	"see setPlatformPreferences"
		(startInUntrustedDirectory true)
		(sugarAutoSave false)
		(swapControlAndAltKeys false)	"see setPlatformPreferences"
		(uniqueNamesInHalos true)
		(unlimitedPaintArea false)
		(useArtificialSweetenerBar true)
		(useBiggerPaintingBox true)
		(useFormsInPaintBox false)
		(useLocale true)
		(usePangoRenderer false)
		(usePlatformFonts false)
		(usePopUpArrows true)
		(warnAboutInsecureContent false)

	"The following is to make sure the default is set properly."

	(abbreviatedBrowserButtons false)
	(allowEtoyUserCustomEvents false)
	(alphabeticalProjectMenu false)
	(alternativeBrowseIt false)
	(alternativeButtonsInScrollBars false)
	(alternativeWindowBoxesLook true)
	(alwaysHideHScrollbar false)
	(alwaysShowConnectionVocabulary false)
	(alwaysShowHScrollbar false)
	(alwaysShowVScrollbar true)
	(ansiAssignmentOperatorWhenPrettyPrinting true)
	(areaFillsAreTolerant false)
	(areaFillsAreVeryTolerant false)
	(autoAccessors false)
	(automaticFlapLayout true)
	(automaticPlatformSettings true)	"enables setPlatformPreferences"
	(automaticViewerPlacement true)
	(balloonHelpEnabled true)
	(balloonHelpInMessageLists false)
	(batchPenTrails false)
	(biggerCursors true)
	(browserNagIfNoClassComment true)
	(browserShowsPackagePane false)
	(browseWithPrettyPrint false)
	(capitalizedReferences true)
	(caseSensitiveFinds false)
	(cautionBeforeClosing false)
	(celesteHasStatusPane false)
	(celesteShowsAttachmentsFlag false)
	(changeSetVersionNumbers true)
	(checkForSlips true)
	(checkForUnsavedProjects true)
	(classicNewMorphMenu false)
	(clickOnLabelToEdit false)
	(cmdDotEnabled true)
	(collapseWindowsInPlace false)
	(colorWhenPrettyPrinting false)
	(compressFlashImages false)
	(confirmFirstUseOfStyle true)
	(conversionMethodsAtFileOut false)
	(cpuWatcherEnabled false)
	(debugHaloHandle false)
	(debugPrintSpaceLog false)
	(debugShowDamage false)
	(decorateBrowserButtons true)
	(defaultFileOutFormatMacRoman false)
	(diffsInChangeList true)
	(diffsWithPrettyPrint false)
	(dismissAllOnOptionClose false)
	(dismissEventTheatreUponPublish true)
	(dragNDropWithAnimation false)
	(dropProducesWatcher true)
	(duplicateControlAndAltKeys false)
	(easySelection false)
	(enableInternetConfig false)
	(enablePortraitMode false)
	(enableVirtualOLPCDisplay false)
	(expandedPublishing true)
	(extractFlashInHighestQuality false)
	(extractFlashInHighQuality true)
	(fastDragWindowForMorphic true)
	(fenceEnabled true)
	(fenceSoundEnabled false)
	(fullScreenLeavesDeskMargins true)
	(gradientScrollBars true)
	(haloEnclosesFullBounds false)
	(higherPerformance false)
	(ignoreStyleIfOnlyBold true)
	(implicitSelfInTiles false)
	(inboardScrollbars true)
	(infiniteUndo false)
	(keepTickingWhilePainting false)
	(logDebuggerStackToFile true)
	(menuButtonInToolPane false)
	(menuColorFromWorld false)
	(menuWithIcons true)
	(morphicProgressStyle true)
	(mouseOverForKeyboardFocus false)
	(navigatorOnLeftEdge true)
	(noviceMode false)
	(okToReinitializeFlaps true)
	(oliveHandleForScriptedObjects false)
	(optionalButtons true)
	(passwordsOnPublish false)
	(personalizedWorldMenu true)
	(postscriptStoredAsEPS false)
	(printAlternateSyntax false)
	(projectsSentToDisk false)
	(projectZoom true)
	(readDocumentAtStartup true)
	(restartAlsoProceeds false)
	(reverseWindowStagger true)
	(rotationAndScaleHandlesInPaintBox false)
	(scrollBarsNarrow false)
	(scrollBarsOnRight true)
	(scrollBarsWithoutMenuButton false)
	(selectionsMayShrink true)
	(selectiveHalos true)
	(showAdvancedNavigatorButtons false)
	(showBoundsInHalo false)
	(showDeprecationWarnings false)
	(showFlapsWhenPublishing false)
	(showLinesInHierarchyViews true)
	(showSharedFlaps true)
	(signProjectFiles true)
	(simpleMenus false)
	(slideDismissalsToTrash true)
	(smartUpdating true)
	(soundsEnabled true)
	(swapMouseButtons false)
	(systemWindowEmbedOK false)
	(tabAmongFields true)
	(testRunnerShowAbstractClasses false)
	(tileTranslucentDrag true)
	(timeStampsInMenuTitles true)
	(translationWithBabel false)
	(turnOffPowerManager false)
	(twentyFourHourFileStamps true)
	(twoSidedPoohTextures true)
	(typeCheckingInTileScripting true)
	(unifyNestedProgressBars true)
	(uniTilesClassic true)
	(universalTiles false)
	(updateFromServerAtStartup false)
	(updateSavesFile false)
	(useButtonPropertiesToFire false)
	(useFileList2 true)
	(useSmartLabels false)
	(useUndo true)
	(useVectorVocabulary false)
	(viewersInFlaps true)
	(warnIfNoChangesFile false)
	(warnIfNoSourcesFile false)
	(warningForMacOSFileNameLength false)
	(wordStyleCursorMovement true)

	).

Preferences setPreference: #haloTheme toValue: #iconicHaloSpecifications.
!
]style[(9 2 41 2 23 2 80 3 4 1 19 1 1 5 16 1 5 5 24 1 4 5 21 1 4 5 15 1 4 5 22 1 4 5 13 1 4 5 10 1 5 5 19 1 4 5 21 1 4 5 23 1 5 5 18 1 4 5 15 1 5 5 21 1 5 5 12 1 4 5 16 1 4 5 20 1 5 5 12 1 5 5 15 1 5 5 19 1 4 5 30 1 4 5 10 1 5 5 16 1 5 5 19 1 5 5 17 1 4 5 14 1 5 5 18 1 5 5 13 1 4 5 21 1 5 5 21 1 5 5 21 1 5 5 18 1 5 5 20 1 5 5 21 1 4 5 31 1 4 5 26 1 4 5 20 1 5 5 24 1 4 5 20 1 5 5 18 1 5 5 15 1 4 2 28 4 11 1 5 5 17 1 4 3 28 4 25 1 4 5 13 1 5 5 21 1 5 2 28 4 18 1 4 5 18 1 5 5 25 1 4 5 20 1 4 5 18 1 5 5 9 1 4 5 16 1 5 5 16 1 5 5 14 1 4 5 24 1 5 4 60 4 25 1 5 4 25 1 5 4 23 1 5 4 19 1 5 4 30 1 5 4 26 1 4 4 20 1 5 4 30 1 5 4 20 1 5 4 20 1 4 4 40 1 4 4 20 1 5 4 24 1 5 4 13 1 5 4 19 1 4 4 25 1 4 2 32 3 24 1 4 4 18 1 4 4 25 1 5 4 14 1 5 4 13 1 4 4 26 1 4 4 23 1 5 4 21 1 5 4 21 1 4 4 18 1 5 4 20 1 5 4 20 1 5 4 27 1 5 4 23 1 4 4 13 1 4 4 23 1 4 4 19 1 5 4 18 1 5 4 13 1 4 4 22 1 5 4 23 1 5 4 19 1 5 4 22 1 4 4 26 1 5 4 17 1 5 4 15 1 5 4 18 1 5 4 15 1 5 4 22 1 4 4 28 1 5 4 17 1 4 4 20 1 5 4 23 1 5 4 30 1 4 4 22 1 5 4 19 1 4 4 26 1 5 4 13 1 5 4 20 1 5 4 18 1 5 4 24 1 5 4 18 1 4 4 28 1 5 4 25 1 4 4 24 1 4 4 12 1 4 4 17 1 5 4 27 1 4 4 18 1 4 4 22 1 5 4 17 1 5 4 21 1 4 4 19 1 5 4 17 1 4 4 12 1 5 4 24 1 5 4 22 1 4 4 20 1 5 4 18 1 5 4 13 1 4 4 20 1 4 4 25 1 5 4 19 1 4 4 10 1 5 4 21 1 4 4 29 1 5 4 15 1 4 4 18 1 5 4 21 1 4 4 21 1 5 4 20 1 5 4 18 1 5 4 11 1 4 4 21 1 4 4 19 1 5 4 20 1 4 4 33 1 5 4 16 1 5 4 17 1 4 4 27 1 5 4 19 1 4 4 14 1 4 4 28 1 5 4 16 1 5 4 23 1 5 4 23 1 5 4 25 1 4 4 15 1 4 4 16 1 4 4 11 1 5 4 22 1 4 4 13 1 4 4 13 1 4 4 16 1 5 4 19 1 5 4 14 1 4 4 29 1 5 4 19 1 4 4 22 1 4 4 20 1 5 4 19 1 5 4 24 1 4 4 20 1 4 4 27 1 4 4 23 1 4 4 15 1 4 4 14 1 5 4 25 1 5 4 15 1 5 4 25 1 5 4 12 1 4 4 14 1 5 4 7 1 4 4 19 1 5 4 14 1 4 4 19 1 5 4 19 1 5 4 29 1 5 4 23 1 4 20 14 1 10 1 8 1 25 2)bu,cblack;,c000126126,cblack;,c000126126,cblack;,c000126126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000126126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000126126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000126126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000126126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000126126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;! !


!StringHolder methodsFor: '*Tools' stamp: 'mt 7/3/2019 16:04'!
withSelectorAndMessagesIn: aCompiledMethod evaluate: aBlock
	"Allow the user to choose one selector, chosen from the currently selected message's selector, as well as those of all messages sent by it, and evaluate aBlock on behalf of chosen selector.  If there is only one possible choice, simply make it; if there are multiple choices, put up a menu, and evaluate aBlock on behalf of the the chosen selector, doing nothing if the user declines to choose any"

	| selectorOrNil messages |
	selectorOrNil := aCompiledMethod selector. 
	messages := aCompiledMethod messages.
	messages remove: selectorOrNil ifAbsent: ["do nothing"].
	messages ifEmpty: "If only one item, there is no choice"
		[^selectorOrNil ifNotNil: [aBlock value: selectorOrNil]]. 
	self systemNavigation 
		showMenuOf: messages
		withFirstItem: selectorOrNil
		ifChosenDo: aBlock!
]style[(26 1 15 1 9 1 6 2 398 3 1 1 13 1 8 1 1 2 13 1 2 1 15 1 8 4 8 1 2 1 15 1 8 3 8 1 7 1 13 1 9 2 12 4 8 1 8 1 38 4 1 13 1 9 1 1 6 1 6 1 13 1 5 4 1 16 4 11 1 8 3 14 1 13 3 11 1 6)b,cblack;,c000000126,cblack;,b,cblack;,c000000126,cblack;,c000126126,cblack;,cgray;,cblack;,c106106106,cblack;,c106106106,cblack;,cgray;,cblack;,c106106106,cblack;,b,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,cblack;,b,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c000126126,cblack;,c106106106,cblack;,c000000126,cblack;,c000126126,cblack;,c126000000,c106106106,cblack;,c000000126,cblack;,c000126000,c000000126,cblack;,c000000126,cblack;,c106106106,c000126000,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c000000126! !


!MessageSet methodsFor: 'filtering' stamp: 'mt 7/3/2019 15:53'!
filterToNotSendersOf
	"Filter the receiver's list down to only those items which do not send a given selector"

	| aFragment inputWithBlanksTrimmed |

	aFragment := self request: 'type selector:' initialAnswer: ''.
	aFragment  isEmptyOrNil ifTrue: [^ self].
	inputWithBlanksTrimmed := aFragment withBlanksTrimmed.
	Symbol hasInterned: inputWithBlanksTrimmed ifTrue:
		[:aSymbol | 
			self filterFrom:
				[:aClass :aSelector | | aMethod |
					(aMethod := aClass compiledMethodAt: aSelector) isNil or:
						[(aMethod hasLiteral: aSymbol) not]]]!
]style[(20 2 88 3 1 1 9 1 22 1 1 3 9 1 2 1 4 1 8 1 16 1 14 1 2 3 9 2 12 1 7 2 1 1 4 4 22 1 2 1 9 1 17 10 12 1 22 1 7 5 7 1 1 5 4 1 11 5 1 1 6 2 9 1 1 1 1 1 7 1 1 6 1 7 1 2 1 6 1 17 1 9 1 1 5 1 3 7 1 1 7 1 11 1 7 1 1 3 1 1 1)b,cblack;,c000126126,cblack;,cgray;,cblack;,c106106106,cblack;,c106106106,cblack;,cgray;,cblack;,c106106106,cblack;,b,cblack;,c126000000,cblack;,c000000126,cblack;,c126000126n,cblack;,c000000126,cblack;,c126000126n,cblack;,c106106106,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c126000000,cblack;,c106106106,cblack;,b,cblack;,c106106106,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c000000126,cblack;,cgray;,cblack;,c126000000,cblack;,c000000126,cblack;,c000126000,cblack;,c000000126,cblack;,c000000126,cblack;,cgray;,cblack;,cgray;,cblack;,cgray;,cblack;,cgray;,cblack;,c126000126,cgray;,cblack;,b,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,c126000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000126,c126000000,cgray;,cblack;,c000000126,cblack;,c000000126,c126000000,cblack;,c000000126,c126000126,c000126000,cblack;! !

!MessageSet methodsFor: 'filtering' stamp: 'mt 7/3/2019 15:53'!
filterToSendersOf
	"Filter the receiver's list down to only those items which send a given selector"

	| aFragment inputWithBlanksTrimmed |

	aFragment := self request: 'type selector:' initialAnswer: ''.
	aFragment  isEmptyOrNil ifTrue: [^ self].
	inputWithBlanksTrimmed := aFragment withBlanksTrimmed.
	Symbol hasInterned: inputWithBlanksTrimmed ifTrue:
		[:aSymbol | 
			self filterFrom:
				[:aClass :aSelector | | aMethod |
					(aMethod := aClass compiledMethodAt: aSelector) notNil and:
						[aMethod hasLiteral: aSymbol]]]

!
]style[(17 2 81 3 1 1 9 1 22 1 1 3 9 1 2 1 4 1 8 1 16 1 14 1 2 3 9 2 12 1 7 2 1 1 4 4 22 1 2 1 9 1 17 10 12 1 22 1 7 5 7 1 1 5 4 1 11 5 1 1 6 2 9 1 1 1 1 1 7 1 1 6 1 7 1 2 1 6 1 17 1 9 1 1 6 1 4 7 1 7 1 11 1 7 1 1 3)b,cblack;,c000126126,cblack;,cgray;,cblack;,c106106106,cblack;,c106106106,cblack;,cgray;,cblack;,c106106106,cblack;,b,cblack;,c126000000,cblack;,c000000126,cblack;,c126000126n,cblack;,c000000126,cblack;,c126000126n,cblack;,c106106106,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c126000000,cblack;,c106106106,cblack;,b,cblack;,c106106106,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c000000126,cblack;,cgray;,cblack;,c126000000,cblack;,c000000126,cblack;,c000126000,cblack;,c000000126,cblack;,c000000126,cblack;,cgray;,cblack;,cgray;,cblack;,cgray;,cblack;,cgray;,cblack;,c126000126,cgray;,cblack;,b,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,c126000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000126,cgray;,cblack;,c000000126,cblack;,c000000126,c126000126,c000126000,cblack;! !


!SystemDictionary methodsFor: 'classes and traits' stamp: 'mt 6/24/2019 18:27'!
isThisBindingReferred: binding

	self systemNavigation allSelectorsAndMethodsDo: [ :behavior :selector :method |
		(method instVarsInclude: binding) ifTrue: [ 
			method allLiteralsDo: [ :literal | "Avoid possible false positives from the primitive."
				literal == binding ifTrue: [ ^true ] ] ] ].
	^false!
]style[(22 1 7 3 4 1 16 1 25 4 8 2 8 2 6 1 1 3 1 6 1 16 1 7 1 1 7 1 1 5 6 1 14 1 1 2 7 1 1 1 52 5 7 1 2 1 7 1 7 1 1 1 5 1 1 1 1 1 1 5 6)b,cblack;,c000000124,cblack;,c124000000,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,cgray;,cblack;,c000124000,c000000124,cblack;,c000000124,cblack;,c000000124,c000124000,cblack;,c000000124,cblack;,c000124000,cblack;,c000000124,cblack;,c000000124,cblack;,c124000124,cblack;,c000000124,cblack;,cgray;,cblack;,c000124124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c124000000,cblack;,c124000000,cblack;,c124000000,cblack;,c124000124,cblack;,c000124000,cblack;,c124000000! !


!SystemNavigation methodsFor: 'query' stamp: 'mt 6/24/2019 13:59'!
allCallsOn: aLiteral fromBehaviors: behaviors sorted: sorted
	"Answer a collection of all the methods implemented by behaviors that call on aLiteral even deeply embedded in literal arrays."
	
	| result |
	result := OrderedCollection new.
	behaviors do: [:behavior |
		behavior selectorsAndMethodsDo: [:selector :method |
			(method hasLiteral: aLiteral)
				ifTrue: [result addLast: method methodReference]]].
	sorted ifTrue: [result sort].
	^result!
]style[(11 1 8 1 14 1 9 1 7 1 6 2 127 4 1 1 6 1 1 2 6 1 2 19 3 3 9 1 3 3 8 1 1 3 8 1 22 1 1 1 8 2 6 1 1 4 1 6 1 11 1 8 1 5 7 1 1 6 1 8 1 6 1 15 1 1 4 6 1 7 2 6 1 4 4 1 6)b,cblack;,c000000124,cblack;,b,cblack;,c000000124,cblack;,b,cblack;,c000000124,cblack;,c000124124,cblack;,cgray;,cblack;,c104104104,cblack;,cgray;,cblack;,c104104104,cblack;,b,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,cgray;,cblack;,c000000124,cblack;,c000000124,cblack;,c000124000,cblack;,c000000124,cblack;,c000000124,cblack;,cgray;,cblack;,c124000124,c000000124,cblack;,c000000124,cblack;,c000000124,c124000124,cblack;,c000000124,cblack;,c124000124,c104104104,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,c124000124,c000124000,cblack;,c000000124,cblack;,c000000124,cblack;,c104104104,cblack;,c000000124,cblack;,c124000000,c104104104! !

!SystemNavigation methodsFor: 'query' stamp: 'mt 6/24/2019 14:01'!
allCallsOn: aLiteral fromMethodReferences: methodReferences sorted: sorted
	"Answer a collection of all the methods implemented by behaviors that call on aLiteral even deeply embedded in literal arrays."
	
	| result |
	result := methodReferences select: [:reference |
		reference compiledMethod
			ifNil: [false]
			ifNotNil: [:method | method hasLiteral: aLiteral]].
	sorted ifTrue: [result sort].
	^result!
]style[(11 1 8 1 21 1 16 1 7 1 6 2 127 4 1 1 6 1 1 2 6 1 2 1 16 1 7 3 9 1 1 3 9 1 14 4 6 1 1 5 1 4 9 1 1 1 6 1 1 1 6 1 11 1 8 1 4 6 1 7 2 6 1 4 4 1 6)b,cblack;,c000000124,cblack;,b,cblack;,c000000124,cblack;,b,cblack;,c000000124,cblack;,c000124124,cblack;,cgray;,cblack;,c104104104,cblack;,cgray;,cblack;,c104104104,cblack;,b,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,cgray;,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000124000,c124000000,c000124000,cblack;,c000000124,cblack;,c000124000,cblack;,c000000124,cblack;,cgray;,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,c000124000,cblack;,c000000124,cblack;,c000000124,cblack;,c104104104,cblack;,c000000124,cblack;,c124000000,c104104104! !

!SystemNavigation methodsFor: 'query' stamp: 'mt 7/3/2019 15:46'!
allCallsOnClass: aBehavior
	"Answer a sorted collection of all the methods that refer to aBehavior."
	
	| theClass result |
	theClass := aBehavior theNonMetaClass.
	result := self 
		allCallsOn: theClass name
		fromBehaviors: self allBehaviors
		sorted: false.
	theClass environment allClassesDo: [ :class |
		(class sharedPools includes: theClass) ifTrue: [
			result add: (ClassReference class: class) ] ].
	^result sort!
]style[(16 1 9 2 72 4 1 1 8 1 6 1 1 2 8 1 2 1 9 1 15 3 6 1 2 1 4 4 11 1 8 1 4 3 14 1 4 1 12 3 7 1 5 3 8 1 11 1 13 4 5 1 1 3 1 5 1 11 1 9 1 8 1 1 7 1 1 4 6 1 4 1 1 15 6 1 5 1 1 1 5 1 6 1 4)b,cblack;,c000000126,cblack;,c000126126,cblack;,cgray;,cblack;,c106106106,cblack;,c106106106,cblack;,cgray;,cblack;,c106106106,cblack;,b,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,cblack;,b,cblack;,c126000000,cblack;,c000000126,cblack;,c106106106,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c106106106,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,cgray;,cblack;,c000126000,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c106106106,c000126000,cblack;,c000000126,cblack;,c000126000,cblack;,c106106106,cblack;,c000000126,cblack;,c126000126,cblack;,c000000126,cblack;,c000000126,c126000126,cblack;,c000126000,cblack;,c126000000,c106106106,cblack;,c000000126! !

!SystemNavigation methodsFor: 'query' stamp: 'mt 6/24/2019 18:21'!
allGlobalRefsWithout: classesAndMessagesPair 
	"Answer a set of symbols that may be refs to Global names. In some  
	sense we should only need the associations, but this will also catch, eg,  
	HTML tag types. This method computes its result in the absence of  
	specified classes and messages."
	"may be a problem if namespaces are introduced as for the moment  
	only Smalltalk is queried. sd 29/4/03"
	| globalRefs absentClasses absentSelectors |
	globalRefs := IdentitySet new: CompiledMethod instanceCount.
	absentClasses := classesAndMessagesPair first.
	absentSelectors := classesAndMessagesPair second.
	"sd 29/04/03"
	Cursor execute
		showWhile: [self environment allClassesDo:
				[:cls | ((absentClasses includes: cls name)
						ifTrue: [{}]
						ifFalse: [{cls. cls class}])
						do: [:cl | (absentSelectors isEmpty
								ifTrue: [cl selectors]
								ifFalse: [cl selectors copyWithoutAll: absentSelectors])
								do: [:sel | "Include all capitalized symbols for good 
									measure"
									(cl compiledMethodAt: sel) allLiteralsDo: [:m |
										((m isSymbol)
												and: [m size > 0
														and: [m first canBeGlobalVarInitial]])
											ifTrue: [globalRefs add: m].
										]]]]].
	^ globalRefs!
]style[(21 1 22 3 248 2 106 2 1 1 10 1 13 1 15 1 1 2 10 1 2 13 4 16 13 3 13 1 2 1 22 1 5 3 15 1 2 1 22 1 6 3 13 9 7 3 10 2 4 1 11 1 13 5 1 1 3 1 1 1 1 1 13 1 9 1 3 1 4 1 7 7 1 1 2 1 7 8 1 1 1 3 2 3 1 5 1 1 1 7 3 1 1 1 2 1 1 1 1 15 1 7 9 7 1 1 2 1 9 1 9 8 1 1 2 1 9 1 15 1 15 1 1 9 3 1 1 1 3 1 1 1 60 10 1 2 1 17 1 3 1 1 14 1 1 1 1 1 1 11 1 1 1 1 8 1 13 4 1 1 1 1 4 1 1 1 1 15 4 1 1 1 1 5 1 21 1 1 1 12 7 1 1 10 1 4 1 1 1 12 1 1 1 1 4 1 1 10)b,cblack;,c000000124,cblack;,c000124124,cblack;,c000124124,cblack;,cgray;,cblack;,c104104104,cblack;,c104104104,cblack;,c104104104,cblack;,cgray;,cblack;,c104104104,cblack;,b,cblack;,c000000124,cblack;,c000000124,cblack;,c104104104,cblack;,b,cblack;,c000000124,cblack;,c000000124,cblack;,c104104104,cblack;,b,cblack;,c000000124,cblack;,c000000124,cblack;,c000124124,cblack;,c000000124,cblack;,c000000124,cblack;,c124000000,cblack;,c000000124,cblack;,c000000124,cblack;,c000124000,cblack;,c000000124,cblack;,cgray;,cblack;,c124000124,c124000000,c104104104,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,c124000000,cblack;,c000000124,cblack;,c124000000,cblack;,c124000000,cblack;,c000000124,cblack;,c124000000,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c124000000,c124000124,cblack;,c000000124,cblack;,c124000124,cblack;,c000000124,cblack;,cgray;,cblack;,c124000000,c104104104,cblack;,c000000124,cblack;,c000000124,cblack;,c000234000,c000000124,cblack;,c000000124,c000234000,cblack;,c000000124,cblack;,c000234000,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c104104104,c000234000,c124000000,cblack;,c000000124,cblack;,c124000000,cblack;,c000000124,cblack;,cgray;,cblack;,c000124124,cblack;,c000234000,c000000124,cblack;,c000000124,cblack;,c000000124,c000234000,cblack;,c000000124,cblack;,c000234000,cblack;,c000000124,cblack;,cgray;,cblack;,c234140000,c234000234,c000000124,cblack;,c000000124,c234000234,cblack;,c000000124,cblack;,c234000234,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c124000000,cblack;,c000000124,cblack;,cblue;,c000000124,cblack;,c000000124,cblack;,c000000124,cblue;,c234000234,c234140000,cblack;,c000000124,cblack;,c234140000,c104104104,cblack;,c000000124,cblack;,c000000124,c234140000,cblack;,c000234000,c124000000,c124000124,c000124000,cblack;,c124000000,cblack;,c104104104! !

!SystemNavigation methodsFor: 'query' stamp: 'mt 6/24/2019 18:24'!
allSentMessagesWithout: classesAndMessagesPair 
	"Answer the set of selectors which are sent somewhere in the system,  
	computed in the absence of the supplied classes and messages."
	| sent absentClasses absentSelectors |
	sent := IdentitySet new: CompiledMethod instanceCount.
	absentClasses := classesAndMessagesPair first.
	absentSelectors := classesAndMessagesPair second.
	"sd 29/04/03"
	Cursor execute showWhile: [
		self environment allClassesAndTraitsDo: [:cls |
			((absentClasses includes: cls name)
				ifTrue: [{}]
				ifFalse: [{cls. cls classSide}])
					do: [:each | (absentSelectors isEmpty
						ifTrue: [each selectors]
						ifFalse: [each selectors copyWithoutAll: absentSelectors])
						do: [:sel | "Include all sels, but not if sent by self"
							(each compiledMethodAt: sel) allLiteralsDo: [:m | 
									(m isSymbol)
										ifTrue: ["might be sent"
											m == sel
												ifFalse: [sent add: m]].
									]]]]].
	"The following may be sent without being in any literal frame"
	Smalltalk specialSelectorNames do: [:sel | sent add: sel].
	Smalltalk presumedSentMessages	do: [:sel | sent add: sel].
	^ sent.! !


!SystemNavigation class methodsFor: '*60Deprecated-preferences' stamp: 'mt 7/3/2019 15:46'!
thoroughSenders

	self deprecated: 'Senders browsing is always thorough. See #allLiterals vs. #literals.'.
	^ true!
]style[(15 3 4 1 11 1 70 3 1 1 4)bu,cblack;,c126000000,cblack;,c000000126,cblack;,c126000126n,cblack;,c126000000,cblack;,c126000000! !

!SystemNavigation class methodsFor: '*60Deprecated-preferences' stamp: 'mt 7/3/2019 15:45'!
thoroughSenders: aBoolean
	
	self deprecated: 'Senders browsing is always thorough. See #allLiterals vs. #literals.'.!
]style[(16 1 8 4 4 1 11 1 70 1)bu,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000126n,cblack;! !


!TestRunner methodsFor: 'actions' stamp: 'mt 7/3/2019 16:56'!
addMethodsUnderTestIn: packages to: methods 
	packages
		do: [:package | package isNil
				ifFalse: [package methods
						do: [:method | ((#(#packageNamesUnderTest #classNamesNotUnderTest ) includes: method methodSymbol)
									or: [method compiledMethod isAbstract
											or: [method compiledMethod hasLiteral: #ignoreForCoverage]])
								ifFalse: [methods add: method]]]]!
]style[(22 1 8 1 3 1 7 3 8 3 3 3 7 1 1 1 7 1 5 5 8 1 1 7 1 7 7 3 1 1 1 6 1 1 1 1 1 1 1 22 1 23 3 9 1 6 1 12 1 10 3 1 1 6 1 14 1 10 12 3 1 1 6 1 14 1 11 1 18 1 1 1 9 8 1 1 7 1 4 1 6 1 1 1 1)b,cblack;,c000000126,cblack;,b,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,cgray;,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000126000,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000126,cblack;,c000000126,cblack;,cgray;,cblack;,c126000000,c000234000,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,c000234000,cblack;,c000000126,cblack;,c000234000,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c234140000,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,c234140000,c000234000,c126000000,cblack;,c000000126,cblack;,c126000000,c000000126,cblack;,c000000126,cblack;,c000000126,c126000000,c126000126,c000126000,cblack;! !


!WrappedBreakpoint methodsFor: 'literals' stamp: 'mt 6/24/2019 09:49'!
allLiteralsDo: aBlock
	"This method is necessary to show the breakpoint-flag in the browser."
	
	aBlock value: #break.
	method allLiteralsDo: aBlock.!
]style[(14 1 6 2 70 4 6 1 6 1 6 10 14 1 6 1)b,cblack;,c000000124,cblack;,c000124124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;! !

!WrappedBreakpoint methodsFor: 'literals' stamp: 'mt 6/5/2019 11:25'!
literalsDo: aBlock
	"This method is necessary to show the breakpoint-flag in the browser."
	
	aBlock value: #break.
	method literalsDo: aBlock.!
]style[(11 1 6 2 70 4 6 1 6 1 6 10 11 1 6 1)b,cblack;,c000000124,cblack;,c000124124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;,c000000124,cblack;! !


!SystemNavigation class reorganize!
('accessing' authors authorsInverted default for:)
('error handling' doesNotUnderstand:)
('preferences')
('class initialization' cleanUp: initialize initializeAuthors privateAuthorsRaw)
('*60Deprecated-preferences' thoroughSenders thoroughSenders:)
!

Pragma removeSelector: #hasLiteralSuchThat:!

!Global reorganize!
('converting' asBinding:)
('initialize-release' initializeWithKey:value:)
('comparing')
('evaluating' value)
('accessing' value:)
('literals' literalEqual:)
!

CompiledMethod removeSelector: #allLiterals!
CompiledMethod removeSelector: #hasLiteral:!
CompiledMethod removeSelector: #hasLiteralSuchThat:!
CompiledMethod removeSelector: #literalsDo:!
CompiledMethod removeSelector: #messages!
CompiledMethod removeSelector: #messagesDo:!
CompiledMethod removeSelector: #refersTo:bytecodeScanner:thorough:!
CompiledMethod removeSelector: #sendsSelector:!
CompiledMethod removeSelector: #sendsToSuper!

!CompiledMethod reorganize!
('accessing' defaultSelector dragLabel homeMethod method methodClass methodClass: methodClassAssociation methodClassAssociation: methodHome primitive properties properties: returnField searchForClass searchForSelector selector selector:)
('closures' containsBlockClosures embeddedBlockClosures nestedBlockMethods)
('comparing' equivalentTo: hasSameLiteralsAs:)
('decompiling' compilerClass decompileWithTemps decompilerClass methodForDecompile methodNode methodNodeFormattedAndDecorated: parserClass)
('evaluating' valueWithReceiver:arguments:)
('file in/out' objectForDataStream: zapSourcePointer)
('literals' allLiteralsDo: indexOfLiteral: literalStrings)
('printing' abstractSymbolic dateMethodLastSubmitted decompileString headerDescription longPrintOn:indent: longPrintRelativeOn:indent: preamble primitiveErrorVariableName printPrimitiveOn: storeLiteralsOn:forClass: timeStamp)
('scanning' hasInstVarRef messagesSequence readsField: readsRef: scanForInstructionPattern: scanForInstructionSequence: writesField: writesRef:)
('source code management' checkOKToAdd:at: copyWithSourceCode: copyWithTempNames: copyWithTempsFromMethodNode: dropSourcePointer fileIndex filePosition getPreambleFrom:at: getSourceFor:in: getSourceFromFile getSourceFromFileAt: holdsTempNames linesOfCode putSource:fromParseNode:class:category:inFile:priorMethod: putSource:fromParseNode:class:category:withStamp:inFile:priorMethod: putSource:fromParseNode:inFile:withPreamble: setSourcePointer: setSourcePosition:inFile: sourceClass sourceFileStream sourcePointer sourceSelector tempNames tempNamesString)
('testing' hasReportableSlip isAbstract isBlueBookCompiled isClosureCompiled isCompiledMethod isDisabled isDisabled: isImplicitlyRequired isInstalled isQuick isReturnField isReturnSelf isReturnSpecial isSubclassResponsibility isSubclassResponsibility: usesClosureBytecodes)
('*Tools-Inspector' inspectorClass)
('private' markerOrNil penultimateLiteral penultimateLiteral: replace:with:in:)
('accessing-pragmas & properties' pragmaAt: pragmas pragmasAt: propertyKeysAndValuesDo: propertyValueAt: propertyValueAt:ifAbsent: propertyValueAt:put: removeProperty: removeProperty:ifAbsent:)
('*Traits-NanoKernel' originalTraitMethod originalTraitMethod: originalTraitOrClass sameTraitCodeAs:)
('converting' withoutPrimitive)
('copying' postCopy)
('*System-Tools-debugger support' getAndForgetUnbreakpointedOriginal)
('*Tools-Debugger-support' blockExtentsToTempsMap debuggerMap startKey tempsSubSequenceFrom:)
('*Traits-testing' isConflict isExplicitlyRequired isExplicitlyRequired: isImplicitlyRequired: isProvided isProvided: isRequired isRequired:)
('*45Deprecated' setMySourcePointer:)
('*Tools-Debugger' canonicalArgumentName)
('*ast-core' parseTree)
('*vivide' acceptObjectService: isTraitMethod retain)
('*MethodWrappers' clientMethod unwrappedMethod)
('*si-reflection' isSignal)
('*Etoys-Squeakland-decompiling' decompileClass:selector: methodNodeDecompileClass:selector:)
('*Etoys-Squeakland-printing' who)
('*Compiler-support' blockExtentsInto:from:to:method:numberer: mapFromBlockKeys:toSchematicTemps: startKeysToBlockExtents)
('*Compiler-private' newBlockStartMap)
('*60Deprecated-literals' hasLiteralThorough: refersToLiteral:)
!

CompiledBlock removeSelector: #allLiterals!
CompiledBlock removeSelector: #allLiteralsDo:!
CompiledBlock removeSelector: #hasLiteral:!
CompiledBlock removeSelector: #hasLiteralSuchThat:!

!CompiledBlock reorganize!
('testing' isCompiledBlock isQuick)
('accessing' encoderClass homeMethod method methodClass methodNode numCopiedValues outerCode outerCode: primitive selector)
('printing' headerDescription longPrintOn:indent: printReferenceOn:)
('*Tools-Debugger' canonicalArgumentName)
('source code management' holdsTempNames)
('*60Deprecated-literals' allSubLiterals)
('decompiling' methodForDecompile)
('accessing-pragmas & properties' pragmaAt: pragmas pragmasAt: propertyKeysAndValuesDo: propertyValueAt: propertyValueAt:ifAbsent: propertyValueAt:put: removeProperty: removeProperty:ifAbsent:)
('*Compiler-support' startKeysToBlockExtents)
('*Tools-Debugger-support' blockExtentsToTempsMap debuggerMap startKey)
('*vivide' acceptObjectService:)
('comparing' hasSameLiteralsAs:)
('literals' codeLiteralsDo:)
('copying' postCopy)
!


!CompiledCode reorganize!
('comparing' = hasSameLiteralsAs: hash)
('converting' asString)
('accessing' at:ifAbsent: bytecodeSetName clearFlag clearSignFlag encoderClass endPC flag frameSize hasNoCountersFlag homeMethod initialPC method methodClass numArgs numLiterals numTemps protocol referredInstVars scanner selector setHasNoCountersFlag setSignFlag signFlag trailer)
('copying' copyFrom: copyWithTrailerBytes:)
('decompiling' decompile decompileWithTemps)
('cleaning' flushCache voidCogVMState)
('source code management' getSource getSourceFor:in:)
('literals' allLiterals allLiteralsDo: codeLiterals codeLiteralsDo: hasLiteral: header literalAt: literalAt:put: literals literalsDo: objectAt: objectAt:put:)
('testing' hasMethodReturn isCompiledBlock isCompiledCode isCompiledMethod isQuick sendsMessage: sendsSelector: sendsToSuper)
('initialize-release' needsFrameSize:)
('tracing' outboundPointersDo:)
('printing' headerDescription longPrintOn: printOn: printReferenceOn: reference storeOn: symbolic symbolicLinesDo:)
('file in/out' readDataFrom:size: storeDataOn: veryDeepCopyWith:)
('*System-Support' methodReference)
('scanning' abstractBytecodeMessageAt: abstractBytecodeMessagesAndPCs abstractBytecodeMessagesDo: abstractBytecodeMessagesFrom:to:do: messages messagesDo: pcPreviousTo: scanFor:)
('*Kernel-tool support' hasBreakpoint)
('*Morphic-Explorer' explorerContents)
('*Tools-Inspector' inspectorClass)
('*Tools-Debugger-support' abstractPCForConcretePC: concretePCForAbstractPC:)
('private')
('*60Deprecated-printing' printSignatureOn:)
('*System-converting' asCodeReference)
('*Squot-trackable-capturing' captureWithSquot: squotCaptureSlotsIn:with:)
('*60Deprecated-private' messagesDo:encoderClass:visitedSet:)
('*Squot-trackable' squotShadowFactory)
('*60Deprecated-literals' refersTo:bytecodeScanner:thorough: refersTo:primaryBytecodeScanner:secondaryBytecodeScanner:thorough:)
!


!ClassBinding reorganize!
('converting' asBinding:)
('accessing' canAssign value:)
('initialize-release' initializeWithKey:value:)
('testing' isSpecialWriteBinding)
('comparing')
('evaluating' value)
('literals' literalEqual:)
!


!Alias reorganize!
('converting' asBinding:)
('initialization' initializeWithKey:source:)
('testing' isSpecialReadBinding isSpecialWriteBinding)
('error handling')
('accessing' source value:)
('evaluating' value)
('literals' literalEqual:)
!


!Association reorganize!
('accessing' key:value: value value:)
('comparing' = analogousCodeTo: hash)
('filter streaming' byteEncode:)
('printing' printOn: storeOn:)
('testing' isSpecialWriteBinding)
('*services-base-preferences' serviceUpdate)
('*environments' asBinding:)
('*JSON-writing' jsonWriteOn:)
('*vivide' acceptObjectService: asScript storeCompactOn:)
('*ston-core' stonOn:)
('literals' allLiteralsDo: literalEqual:)
!

Array removeSelector: #hasLiteral:!
Array removeSelector: #hasLiteralSuchThat:!

!Array reorganize!
('accessing' atWrap: atWrap:put:)
('arithmetic' +* preMultiplyByArray: preMultiplyByMatrix:)
('comparing')
('converting' asArray elementsExchangeIdentityWith: elementsForwardIdentityTo: elementsForwardIdentityTo:copyHash: evalStrings)
('copying' copyWithDependent:)
('filter streaming' byteEncode:)
('printing' printAsBraceFormOn: printAsLiteralOn: printOn: storeOn:)
('self evaluating')
('testing' isArray isLiteral isLiteralIfContainedBy: shouldBePrintedAsLiteral shouldBePrintedAsLiteralVisiting:)
('private' replaceFrom:to:with:startingAt:)
('sorting' sorted:)
('*System-Object Storage-file in/out' objectForDataStream:)
('*monticellofiletree-core' writeCypressJsonOn:forHtml:indent:)
('*vivide' storeCompactOn:)
('*Etoys-Squeakland-comparing' hashMappedBy:)
('*Etoys-Squeakland-translating' literalStringsDo:)
('literals' allLiteralsDo: literalEqual:)
!

AdditionalMethodState removeSelector: #hasLiteralSuchThat:!
AdditionalMethodState removeSelector: #hasLiteralThorough:!
