> On 3 Jan, 2016, at 10:51, David Waite <[email protected]> wrote:
> 
> One possible approach if it was desirable to not have this used arbitrarily 
> in place of do+try, and to avoid looking too much like exception syntax: 
> instead define rethrows blocks:
> 
>   func recognizeHandler() throws {
>       rethrows {
>            accept(.on)        
>            recognizeName()
>            recognizeFormalParamSeq()
>            accept(.newline)
>            recognizeCommandSeq()
>            accept(.end)
>            recognizeName()   
>            accept(.newline)
>       }
>   }

Not bad, modulo all the subsequent reasonable comments, of course.

It is worth pointing out that (some would say) this is not error-handling at 
all. It’s a normal part of the recognizer life-cycle that it finds a syntax 
error in the source code. True, it is the (l)user’s error, but not mine. (Those 
have full-on asserts. Hey, could we have Eiffel-style contracts? Oops, new 
thread.)

What I am after here is a quick-and-clean way to unwind the stack. My throwing 
recognizer has about 200 “try” statements in it. I tried (NPI) this both with 
exceptions and with Optional return values. Hard to say which I prefer. But is 
it not more or less the same underneath the hood? I gather that Swift adds an 
extra return value for throwing functions.


_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to