| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 | Smalltalk current createPackage: 'Kernel-Exceptions' properties: #{}!Object subclass: #Error	instanceVariableNames: 'messageText'	category: 'Kernel-Exceptions'!!Error methodsFor: 'accessing'!messageText	^messageText!messageText: aString	messageText := aString!context	<return self.context>!jsStack	<return self.stack>! !!Error methodsFor: 'signaling'!signal	<self.context = smalltalk.getThisContext(); self.smalltalkError = true; throw(self)>! !!Error methodsFor: 'testing'!isSmalltalkError	<return self.smalltalkError === true>! !!Error class methodsFor: 'instance creation'!signal: aString	    ^self new		messageText: aString;		signal! !Error subclass: #MessageNotUnderstood	instanceVariableNames: 'message receiver'	category: 'Kernel-Exceptions'!!MessageNotUnderstood methodsFor: 'accessing'!message	^message!message: aMessage	message := aMessage!receiver	^receiver!receiver: anObject	receiver := anObject!messageText	^self receiver asString, ' does not understand #', self message selector! !Object subclass: #ErrorHandler	instanceVariableNames: ''	category: 'Kernel-Exceptions'!!ErrorHandler methodsFor: 'error handling'!handleError: anError	anError context ifNotNil: [self logErrorContext: anError context].	self logError: anError! !!ErrorHandler methodsFor: 'private'!logContext: aContext	aContext home ifNotNil: [		self logContext: aContext home].	self log: aContext receiver asString, '>>', aContext selector!logErrorContext: aContext	aContext ifNotNil: [		aContext home ifNotNil: [			self logContext: aContext home]]!logError: anError	self log: anError messageText!log: aString	console log: aString! !ErrorHandler class instanceVariableNames: 'current'!!ErrorHandler class methodsFor: 'accessing'!current	^current ifNil: [current := self new]!setCurrent: anHandler	current := anHandler! !!ErrorHandler class methodsFor: 'initialization'!initialize	self register!register	ErrorHandler setCurrent: self new! !
 |