2018-04-15 20:40 GMT+02:00 Martin McClure <[email protected]>: > On 04/15/2018 07:42 AM, Ben Coman wrote: > > The greater prominence of Critiques in Calypso > encourages me to try to clean them out. > > I bumped into a false positive "Temporaries read before written." > that I've condensed to the following example. > > test > |x| > [ x := nil ] whileNil: [ x ifNil: [ x := 1] ] > > Now before I log an Issue, is it feasible to be able to recognise this? > Perhaps only for common looping idioms? > > > In this example, the first runtime reference to x is to send it #ifNil:. > So technically, x *is* being read before being written, at least if you > count sending it a message as "reading" (which seems a reasonable > interpretation to me). >
Maybe critique can be a bit smarter and check that sent message is known by nil. > > > Anyway, the workaround is simple enough... > test > |x| > x := nil. "silence critiques" > [ x := nil ] whileNil: [ x ifNil: [ x := 1] ] > > Probably not a terrible idea to be explicit about initializing to nil, > thereby revealing the developer's intent that this variable be nil rather > than relying on the default initialization to nil. > > So I'd lean towards leaving the critique as-is. If a developer knows what > they did was safe, they can either ignore the critique, exclude the > critique, or put in the explicit initialization to nil. I think I prefer > explicit initialization. > > Regards, > -Martin >
