Error-Type Specific try/catch Blocks

G. Kay Lee balancetraveller+es-discuss at gmail.com
Sat May 14 16:17:11 UTC 2016


This is another really far shot - but I'd rather suggest that we should
redefine the role of `case` so that it's no longer just a part of the
`switch` statement but something more generic, as well as introducing a
`match` keyword to enable pattern matching, including the power of matching
by type, so that we can achieve the desired effect in a way illustrated in
the snippets below:

```
// plain old switch-case

switch (expression) {
  case value1:
  case value2:
    ...
    break;

  default:
    ...
}

// switch-case with pattern matching; pattern-match by type in this example

switch (expression) match {
  case _: boolean
    ...
    break;

  default:
    ...
}

// try-catch with pattern matching

try {
  ...
} catch (error) match {
  case _: TypeError
  case _: SyntaxError
    ...
    break;

  default:
    ...
}
```

Just some rough idea; inspired by Scala syntax.



On Sat, May 14, 2016 at 1:49 AM, Joseph Groseclose <jgrosecl49 at gmail.com>
wrote:

> I offered a few syntaxes for this, perhaps the bitwise OR "|" would be
> better.
>
> On Fri, May 13, 2016 at 1:33 PM, Michał Wadas <michalwadas at gmail.com>
> wrote:
>
>> > } catch (await FCL.load(...), await FCL.load(...)) (e) {
>> Then you have to override comma operator (
>> https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator
>> ) in one specific context...
>>
>> On Fri, May 13, 2016 at 7:14 PM, Joe Groseclose <jgrosecl49 at gmail.com>
>> wrote:
>>
>>> @JoePea, that is one of the syntaxes I recommend in the proposal.
>>>
>>> @michalwadas The primary goal of this I think is to create a standard
>>> feature, but I do not see why an expression wrapped in parenthesis
>>> ultimately resulting in an error class would not be supported.
>>>
>>> Example:
>>>
>>> ...
>>>
>>> } catch (await FCL.load(...), await FCL.load(...)) (e) {
>>> ...
>>>
>>> Or something similar for all of the other recommended syntaxes,
>>> replacing the declared class instead with an expression (similar to class
>>> extension).
>>>
>>> Sent from my iPhone
>>>
>>> > On May 13, 2016, at 12:54 PM, /#!/JoePea <joe at trusktr.io> wrote:
>>> >
>>> > Perhaps a syntax based on modules:
>>> >
>>> > ```js
>>> > try {}
>>> > catch (TypeError as e) {}
>>> >
>>> > // ...
>>> >
>>> > try {}
>>> > catch (MyError as err) {}
>>> > ```
>>> >
>>> >> On Fri, May 13, 2016 at 9:43 AM, Michał Wadas <michalwadas at gmail.com>
>>> wrote:
>>> >> I can't see why would your syntax be superior to SpiderMonkey
>>> extension
>>> >> except saving few characters.
>>> >>
>>> >> Can your syntax support code like this:
>>> >>
>>> >> async function foo() {
>>> >>   try {
>>> >>      throw new Error();
>>> >>   } catch(e if isNativeException(e)) {
>>> >>     // special handler for DOM exceptions
>>> >>   } catch(e if e instanceof (await
>>> >> fancyClassLoader.load('classes/SomeLibrary/UserDefinedError'))) {
>>> >>      // load class asynchronously if it wasn't loaded
>>> >>   }
>>> >> }
>>> >>
>>> >> ?
>>> >>
>>> >>
>>> >> On Fri, May 13, 2016 at 5:58 PM, Joseph Groseclose <
>>> jgrosecl49 at gmail.com>
>>> >> wrote:
>>> >>>
>>> >>> I've updated the proposal. See:
>>> >>>
>>> https://github.com/benderTheCrime/error-type-specific-catch-proposal#about-spidermonkey-implementation
>>> >>>
>>> >>> On Fri, May 13, 2016 at 11:49 AM, Joseph Groseclose <
>>> jgrosecl49 at gmail.com>
>>> >>> wrote:
>>> >>>>
>>> >>>> Nevertheless, perhaps the non-standard implementation could work
>>> >>>> hand-in-hand with the proposal, where SpiderMonkey could support
>>> both
>>> >>>> solutions in parallel for backward compatibility. I think that the
>>> proposed
>>> >>>> solution is more expressive.
>>> >>>>
>>> >>>> On Fri, May 13, 2016 at 11:26 AM, Claude Pache <
>>> claude.pache at gmail.com>
>>> >>>> wrote:
>>> >>>>>
>>> >>>>> Note that SpiderMonkey has already nonstandard conditional catch
>>> >>>>> clauses:
>>> >>>>>
>>> >>>>> ```js
>>> >>>>> try {
>>> >>>>>    // ...
>>> >>>>> }
>>> >>>>> catch (e if e instanceof TypeError) {
>>> >>>>>    // ....
>>> >>>>> }
>>> >>>>> ```
>>> >>>>>
>>> >>>>> —Claude
>>> >>>>>
>>> >>>>>
>>> >>>>> Le 13 mai 2016 à 17:06, Joseph Groseclose <jgrosecl49 at gmail.com>
>>> a écrit
>>> >>>>> :
>>> >>>>>
>>> >>>>> I sent this proposal via
>>> >>>>>
>>> http://www.ecma-international.org/memento/contribute_TC39_Royalty_Free_Task_Group.php#
>>> >>>>> yesterday evening. Sharing it here now:
>>> >>>>>
>>> https://github.com/benderTheCrime/error-type-specific-catch-proposal
>>> >>>>>
>>> >>>>>
>>> >>>>> _______________________________________________
>>> >>>>> es-discuss mailing list
>>> >>>>> es-discuss at mozilla.org
>>> >>>>> https://mail.mozilla.org/listinfo/es-discuss
>>> >>>
>>> >>>
>>> >>> _______________________________________________
>>> >>> es-discuss mailing list
>>> >>> es-discuss at mozilla.org
>>> >>> https://mail.mozilla.org/listinfo/es-discuss
>>> >>
>>> >>
>>> >> _______________________________________________
>>> >> es-discuss mailing list
>>> >> es-discuss at mozilla.org
>>> >> https://mail.mozilla.org/listinfo/es-discuss
>>> >>
>>>
>>
>>
>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20160515/cebc41db/attachment.html>


More information about the es-discuss mailing list