| 
					
				 | 
			
			
				@@ -11,192 +11,16 @@ I also provides methods for compiling methods and examining the method dictionar 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 !BehaviorBody methodsFor: 'accessing'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				->> aString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	^ self methodAt: aString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 definition 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	self subclassResponsibility 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-methodAt: aString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	^ self methodDictionary at: aString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-methodDictionary 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	<inlineJS: 'var dict = $globals.HashedCollection._new(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	var methods = self.methods; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	Object.keys(methods).forEach(function(i) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(methods[i].selector) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			dict._at_put_(methods[i].selector, methods[i]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	return dict'> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-methodTemplate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	^ String streamContents: [ :stream | stream  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		write: 'messageSelectorAndArgumentNames'; lf; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		tab; write: '"comment stating purpose of message"'; lf; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		lf; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		tab; write: '| temporary variable names |'; lf; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		tab; write: 'statements' ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-methods 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	^ self methodDictionary values 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-methodsInProtocol: aString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	^ self methods select: [ :each | each protocol = aString ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-organization 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	^ self basicAt: 'organization' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-ownMethods 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	"Answer the methods of the receiver that are not package extensions 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	nor obtained via trait composition" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	^ (self ownProtocols  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		inject: OrderedCollection new 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		into: [ :acc :each | acc, (self ownMethodsInProtocol: each) ]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			sorted: [ :a :b | a selector <= b selector ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-ownMethodsInProtocol: aString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	^ (self methodsInProtocol: aString) select: [ :each | each methodClass = self ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-ownProtocols 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	"Answer the protocols of the receiver that are not package extensions" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	^ self protocols reject: [ :each | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		each match: '^\*' ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-packageOfProtocol: aString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	"Answer the package the method of receiver belongs to: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	- if it is an extension method, answer the corresponding package 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	- else answer the receiver's package" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	(aString beginsWith: '*') ifFalse: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		^ self package ]. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	^ Package  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		named: aString allButFirst 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		ifAbsent: [ nil ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-protocols 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	^ self organization elements sorted 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-removeProtocolIfEmpty: aString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	self methods 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		detect: [ :each | each protocol = aString ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		ifNone: [ self organization removeElement: aString ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-selectors 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	^ self methodDictionary keys 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 theMetaClass 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	self subclassResponsibility 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 theNonMetaClass 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	self subclassResponsibility 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-traitComposition 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	^ (self basicAt: 'traitComposition') collect: [ :each | TraitTransformation fromJSON: each ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-traitCompositionDefinition 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	^ self traitComposition ifNotEmpty: [ :traitComposition | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		String streamContents: [ :str | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			str write: '{'. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			traitComposition 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				do: [ :each | str write: each definition ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				separatedBy: [ str write: '. ' ]. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			str write: '}' ] ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-! ! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-!BehaviorBody methodsFor: 'compiling'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-addCompiledMethod: aMethod 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	| oldMethod announcement | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	oldMethod := self methodDictionary 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		at: aMethod selector 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		ifAbsent: [ nil ]. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	(self protocols includes: aMethod protocol) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		ifFalse: [ self organization addElement: aMethod protocol ]. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	self basicAddCompiledMethod: aMethod. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	oldMethod ifNotNil: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		self removeProtocolIfEmpty: oldMethod protocol ]. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	announcement := oldMethod 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		ifNil: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			MethodAdded new 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					method: aMethod; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					yourself ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		ifNotNil: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			MethodModified new 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					oldMethod: oldMethod; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					method: aMethod; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					yourself ]. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	SystemAnnouncer current 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				announce: announcement 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-compile: aString protocol: anotherString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	^ Compiler new 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		install: aString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		forClass: self 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		protocol: anotherString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-recompile 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	^ Compiler new recompile: self 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-removeCompiledMethod: aMethod 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	self basicRemoveCompiledMethod: aMethod. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	self removeProtocolIfEmpty: aMethod protocol. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	SystemAnnouncer current 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		announce: (MethodRemoved new 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			method: aMethod; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			yourself) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-setTraitComposition: aTraitComposition 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	<inlineJS: '$core.setTraitComposition(aTraitComposition._asJavaScriptObject(), self)'> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-! ! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-!BehaviorBody methodsFor: 'enumerating'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-protocolsDo: aBlock 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	"Execute aBlock for each method protocol with 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	its collection of methods in the sort order of protocol name." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	| methodsByProtocol | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	methodsByProtocol := HashedCollection new. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	self methodDictionary valuesDo: [ :m | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		(methodsByProtocol at: m protocol ifAbsentPut: [ Array new ]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			add: m ]. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	self protocols do: [ :protocol | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		aBlock value: protocol value: (methodsByProtocol at: protocol) ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ! ! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 !BehaviorBody methodsFor: 'printing'! 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -207,22 +31,6 @@ printOn: aStream 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		ifNotNil: [ :name | aStream nextPutAll: name ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ! ! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-!BehaviorBody methodsFor: 'private'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-basicAddCompiledMethod: aMethod 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	<inlineJS: '$core.addMethod(aMethod, self)'> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-basicRemoveCompiledMethod: aMethod 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	<inlineJS: '$core.removeMethod(aMethod,self)'> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-! ! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-!BehaviorBody methodsFor: 'testing'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-includesSelector: aString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	^ self methodDictionary includesKey: aString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-! ! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 BehaviorBody subclass: #Behavior 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	instanceVariableNames: '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	package: 'Kernel-Classes'! 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -923,6 +731,205 @@ allSubclassesDo: aBlock 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"Default for non-classes; to be able to send #allSubclassesDo: to any class / trait." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ! ! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Trait named: #TBehaviorProvider 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	package: 'Kernel-Classes'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+!TBehaviorProvider commentStamp! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+I have method dictionary and organization.! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+!TBehaviorProvider methodsFor: 'accessing'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+>> aString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	^ self methodAt: aString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+methodAt: aString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	^ self methodDictionary at: aString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+methodDictionary 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	<inlineJS: 'var dict = $globals.HashedCollection._new(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	var methods = self.methods; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Object.keys(methods).forEach(function(i) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(methods[i].selector) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			dict._at_put_(methods[i].selector, methods[i]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return dict'> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+methodTemplate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	^ String streamContents: [ :stream | stream  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		write: 'messageSelectorAndArgumentNames'; lf; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		tab; write: '"comment stating purpose of message"'; lf; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		lf; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		tab; write: '| temporary variable names |'; lf; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		tab; write: 'statements' ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+methods 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	^ self methodDictionary values 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+methodsInProtocol: aString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	^ self methods select: [ :each | each protocol = aString ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+organization 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	^ self basicAt: 'organization' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ownMethods 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"Answer the methods of the receiver that are not package extensions 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	nor obtained via trait composition" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	^ (self ownProtocols  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		inject: OrderedCollection new 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		into: [ :acc :each | acc, (self ownMethodsInProtocol: each) ]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			sorted: [ :a :b | a selector <= b selector ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ownMethodsInProtocol: aString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	^ (self methodsInProtocol: aString) select: [ :each | each methodClass = self ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ownProtocols 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"Answer the protocols of the receiver that are not package extensions" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	^ self protocols reject: [ :each | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		each match: '^\*' ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+packageOfProtocol: aString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"Answer the package the method of receiver belongs to: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	- if it is an extension method, answer the corresponding package 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	- else answer the receiver's package" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	(aString beginsWith: '*') ifFalse: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		^ self package ]. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	^ Package  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		named: aString allButFirst 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		ifAbsent: [ nil ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+protocols 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	^ self organization elements sorted 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+removeProtocolIfEmpty: aString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	self methods 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		detect: [ :each | each protocol = aString ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		ifNone: [ self organization removeElement: aString ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+selectors 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	^ self methodDictionary keys 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+traitComposition 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	^ (self basicAt: 'traitComposition') collect: [ :each | TraitTransformation fromJSON: each ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+traitCompositionDefinition 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	^ self traitComposition ifNotEmpty: [ :traitComposition | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		String streamContents: [ :str | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			str write: '{'. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			traitComposition 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				do: [ :each | str write: each definition ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				separatedBy: [ str write: '. ' ]. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			str write: '}' ] ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! ! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+!TBehaviorProvider methodsFor: 'compiling'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+addCompiledMethod: aMethod 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	| oldMethod announcement | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	oldMethod := self methodDictionary 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		at: aMethod selector 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		ifAbsent: [ nil ]. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	(self protocols includes: aMethod protocol) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		ifFalse: [ self organization addElement: aMethod protocol ]. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	self basicAddCompiledMethod: aMethod. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	oldMethod ifNotNil: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		self removeProtocolIfEmpty: oldMethod protocol ]. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	announcement := oldMethod 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		ifNil: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			MethodAdded new 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					method: aMethod; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					yourself ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		ifNotNil: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			MethodModified new 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					oldMethod: oldMethod; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					method: aMethod; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					yourself ]. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	SystemAnnouncer current 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				announce: announcement 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+compile: aString protocol: anotherString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	^ Compiler new 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		install: aString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		forClass: self 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		protocol: anotherString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+recompile 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	^ Compiler new recompile: self 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+removeCompiledMethod: aMethod 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	self basicRemoveCompiledMethod: aMethod. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	self removeProtocolIfEmpty: aMethod protocol. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	SystemAnnouncer current 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		announce: (MethodRemoved new 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			method: aMethod; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			yourself) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+setTraitComposition: aTraitComposition 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	<inlineJS: '$core.setTraitComposition(aTraitComposition._asJavaScriptObject(), self)'> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! ! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+!TBehaviorProvider methodsFor: 'enumerating'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+protocolsDo: aBlock 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"Execute aBlock for each method protocol with 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	its collection of methods in the sort order of protocol name." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	| methodsByProtocol | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	methodsByProtocol := HashedCollection new. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	self methodDictionary valuesDo: [ :m | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		(methodsByProtocol at: m protocol ifAbsentPut: [ Array new ]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			add: m ]. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	self protocols do: [ :protocol | 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		aBlock value: protocol value: (methodsByProtocol at: protocol) ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! ! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+!TBehaviorProvider methodsFor: 'private'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+basicAddCompiledMethod: aMethod 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	<inlineJS: '$core.addMethod(aMethod, self)'> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+basicRemoveCompiledMethod: aMethod 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	<inlineJS: '$core.removeMethod(aMethod,self)'> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! ! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+!TBehaviorProvider methodsFor: 'testing'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+includesSelector: aString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	^ self methodDictionary includesKey: aString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+! ! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Trait named: #TMasterBehavior 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	package: 'Kernel-Classes'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 !TMasterBehavior commentStamp! 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1117,9 +1124,9 @@ on: aTrait 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	^ super new trait: aTrait; yourself 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ! ! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Behavior setTraitComposition: {TBehaviorDefaults} asTraitComposition! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Behavior setTraitComposition: {TBehaviorDefaults. TBehaviorProvider} asTraitComposition! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Class setTraitComposition: {TMasterBehavior} asTraitComposition! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Trait setTraitComposition: {TBehaviorDefaults. TMasterBehavior} asTraitComposition! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Trait setTraitComposition: {TBehaviorDefaults. TBehaviorProvider. TMasterBehavior} asTraitComposition! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ! ! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 !Array methodsFor: '*Kernel-Classes'! 
			 |