[squeak-dev] the semantics of SyntaxErrorNotification resume:
Nicolas Cellier
nicolas.cellier.aka.nice at gmail.com
Fri Apr 16 20:21:03 UTC 2021
Le ven. 16 avr. 2021 à 21:52, Nicolas Cellier
<nicolas.cellier.aka.nice at gmail.com> a écrit :
>
> Le ven. 16 avr. 2021 à 20:35, Nicolas Cellier
> <nicolas.cellier.aka.nice at gmail.com> a écrit :
> >
> > Hi all,
> > I see some new tests failing
> > - testResumeEarlySyntaxError
> > - testResumeLateSyntaxError
> >
> > This is entirely my fault because of the "fix" of exception handling.
> > Indeed, I have not rearmed the exception stack in resume: action, and
> > I think I should have done so.
> >
> > However, I see that SyntaxErrorNotification>>resume: launch a new
> > compilation entirely.
> > This sounds un-necessary to me because we already have
> > ReparseAfterSourceEditing for that purpose...
> > (again I'm the original author of that, Christoph only improved it)
> >
> > IMO, the purpose is not really to resume: but rather to retry
> > compilation using newSource.
> > We (I ?) have used resume: only because notify:at: does signal a
> > SyntaxErrorNotification, then immediately retries if the exception
> > resumes.
> >
> > (notification := SyntaxErrorNotification
> > cue: (cue copy
> > source: (source contents asText
> > copyReplaceFrom: location
> > to: location - 1
> > with: messageText);
> > yourself)
> > doitFlag: doitFlag
> > errorMessage: string
> > location: location) signal.
> > notification tryNewSourceIfAvailable
> >
> > But if the handler does retryWithNewSource: newSource instead of
> > resume: newSource, then we just have to let retryWithNewSource perform
> > a self resignalAs: ReparseAfterSourceEditing new.
> >
> > I think that it's the right solution, rather than bending the
> > semantics of resume: (the argument of resume: is normally the value
> > that should be returned to the sender of signal...).
> >
> > So if you see some changes of SyntaxErrorNotification in trunk, you'll
> > know a bit more about it
> > (I'm not sure whether I can redact a commit message with that level of
> > explanation).
> >
> > Nicolas
>
> On the other hand, I cannot entirely remove tryNewSourceIfAvailable,
> because it is still the resolution path for SyntaxError window...
> So I have two alternatives: resignalAs: or resume: (with
> reactivateHandlers fix).
>
> retryWithNewSource: source
> "Retry the compilation with new source code.
> Assume that there is already a handler of
> ReparseAfterSourceEditing on the sender stack.
> All I have to do then, is to resignal myself as such and let the
> existing handler do its business."
>
> ^ self resignalAs: (ReparseAfterSourceEditing new withNewSource: source)
>
> Or:
>
> retryWithNewSource: source
> "Retry the compilation with new source code.
> Assume:
> - that the signallerContext will tryNewSourceIfAvailable
> - and the presence of a handler of ReparseAfterSourceEditing on
> the sender stack"
>
> newSource := source.
> ^ self resume: self defaultResumeValue
>
> I'm still in favour of naming it #retryWithNewSource: rather than
> resume: because super resume: has another semantic than we shall
> better not bend.
I opted for the second solution.
I hope that the commit message explains the reason for renaming
sufficiently clearly.
More information about the Squeak-dev
mailing list
|