[e-lang] Bug (0.8.26h): multiple-pattern catch expansion is incorrect

Kevin Reid kpreid at attglobal.net
Thu Apr 29 17:57:11 EDT 2004


On Apr 29, 2004, at 17:41, Mark S. Miller wrote:
> At 02:23 PM 4/29/2004  Thursday, Kevin Reid wrote:
>> The expansion for multiple-catch-clause try-catch does not follow the
>> semantics of the kernel try-catch when the pattern match fails - it 
>> creates
>> a new exception instead of simply passing on/rethrowing the unmatched 
>> one.
...
>> Possible solutions:
>>
>> 1. Replace e`throw("no match: " + @x)` with e`throw($x)`, though 
>> there will
>> still be an extra throw() in the stack trace.
>>
>> 2. Allow an arbitrary number of catch clauses in Kernel-E.
>>
>> 3. Somehow make match failure of all of the individual patterns in the
>> expansion cause failure of the try-catch expression's pattern.
>>
>> 4. Expand each catch clause into a nested try-catch.
>
> #4 seems simplest to me. Do you see any problems with it?

No, but I haven't thought about it much yet. It was the last solution 
that occurred to me.

-- 
Kevin Reid



More information about the e-lang mailing list