[squeak-dev] Should UndeclaredVariableWarning be a Notification?

christoph.thiede at student.hpi.uni-potsdam.de christoph.thiede at student.hpi.uni-potsdam.de
Sun Jan 30 20:56:59 UTC 2022


Alright, please take a short look at the attached changeset. :-)

Note: In the *long* term, we probably should unify this exception with UndeclaredVariable, which is a subclass of ParserNotification. But after the release. :-)

Provided no objections, I will merge this in a few days ...

Best,
Christoph

=============== Diff ===============

Encoder>>undeclared: {encoding} · ct 1/30/2022 21:40 (changed)
undeclared: name 
	| sym |
	(requestor notNil and: [requestor interactive]) ifTrue:
		[ requestor requestor == #error: ifTrue: [ requestor error: 'Undeclared' ].
		^ self notify: 'Undeclared' ].
	"Allow knowlegeable clients to squash the undeclared warning if they want (e.g.
	 Diffing pretty printers that are simply formatting text).  As this breaks
	 compilation it should only be used by clients that want to discard the result
	 of the compilation.  To squash the warning use e.g.
		[Compiler format: code in: class notifying: nil decorated: false]
- 			on: UndeclaredVariableWarning
+ 			on: UndeclaredVariableNotification
			do: [:ex| ex resume: false]"
	sym := name asSymbol.
- 	^ (UndeclaredVariableWarning new
+ 	^ (UndeclaredVariableNotification new
		name: name
		selector: selector
		class: cue getClass) signal
		ifTrue:
			[ | undeclared |
			undeclared := cue environment undeclared.
			[ undeclared
				at: sym
				put: nil ]
				on: AttemptToWriteReadOnlyGlobal
				do: [ : noti | noti resume: true ].
			self
				global: (undeclared associationAt: sym)
				name: sym ]
		ifFalse:
			[ self
				global: (Association key: sym)
				name: sym ]

UndeclaredVariableNotification
+ Notification subclass: #UndeclaredVariableNotification
+ 	instanceVariableNames: 'name selector class'
+ 	classVariableNames: ''
+ 	poolDictionaries: ''
+ 	category: 'Compiler-Support'
+ 
+ UndeclaredVariableNotification class 
+ 	instanceVariableNames: ''
+ 
+ ""

UndeclaredVariableNotification
+ Notification subclass: #UndeclaredVariableNotification
+ 	instanceVariableNames: 'name selector class'
+ 	classVariableNames: ''
+ 	poolDictionaries: ''
+ 	category: 'Compiler-Support'
+ 
+ UndeclaredVariableNotification class 
+ 	instanceVariableNames: ''
+ 
+ ""

UndeclaredVariableWarning (changed)
- Warning subclass: #UndeclaredVariableWarning
- 	instanceVariableNames: 'name selector class'
+ UndeclaredVariableNotification subclass: #UndeclaredVariableWarning
+ 	instanceVariableNames: ''
	classVariableNames: ''
	poolDictionaries: ''
- 	category: 'Compiler-Support'
+ 	category: '60Deprecated-Compiler-Support'

UndeclaredVariableWarning class 
	instanceVariableNames: ''

""

UndeclaredVariableWarning class>>handles: {exceptionSelector} · ct 1/30/2022 21:46
+ handles: exception
+ 
+ 	self deprecated: 'ct: Use UndeclaredVariableNotification instead'.
+ 	
+ 	^ super handles: exception

UndeclaredVariableWarning>>initialize {initialize-release} · ct 1/30/2022 21:46
+ initialize
+ 
+ 	self deprecated: 'ct: Use UndeclaredVariableNotification instead'.
+ 	
+ 	^ super initialize


---
Sent from Squeak Inbox Talk

On 2022-01-30T00:44:33+01:00, christoph.thiede at student.hpi.uni-potsdam.de wrote:

> Thank you for the feedback! Now I'm wondering whether we should also rename it when making it a simple notification. An exception that ends in Warning but does not inherit from Warning might be very confusing. On other hand, compatibility matters ... What do you think? :-)
> 
> Best,
> Christoph
> 
> ---
> Sent from Squeak Inbox Talk
> 
> On 2022-01-20T09:22:08+01:00, marcel.taeumel at hpi.de wrote:
> 
> > Hi Christoph --
> > 
> > Looking at?UndeclaredVariableWarning >> #defaultAction, that warning should actually be a simple notification (that also writes to the Transcript).
> > 
> > Best,
> > Marcel
> > Am 20.01.2022 01:31:50 schrieb christoph.thiede at student.hpi.uni-potsdam.de <christoph.thiede at student.hpi.uni-potsdam.de>:
> > Hi all,
> > 
> > since SUnit-ct.129 (treat warnings in tests as test error), we have plenty failing compiler tests. I have also noticed similar effects in some third-party packages because no one would have assumed that a simple compilation request that has no visible side effect to the user (except for a Transcript send, but who is having a transcript open all the time? me not!) could be raising a Warning. UndeclaredVariableWarning is an untypical subclass of Warning because in its default action, it does not do anything interruptive.
> > 
> > So my question is: Do you assure that UndeclaredVariableWarning should be Warning? In this case I will move on and handle this exception in all affected tests.
> > 
> > Best,
> > Christoph
> > 
> > ---
> > Sent from Squeak Inbox Talk [https://github.com/hpi-swa-lab/squeak-inbox-talk]
> > -------------- next part --------------
> > An HTML attachment was scrubbed...
> > URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20220120/4a4ee785/attachment.html>
> > 
> > 
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20220130/ada64a21/attachment.html>
> 
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20220130/ef6643c9/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: UndeclaredVariableNotification.1.cs
Type: application/octet-stream
Size: 2457 bytes
Desc: not available
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20220130/ef6643c9/attachment-0001.obj>


More information about the Squeak-dev mailing list