Early error on '0' followed by '8' or '9' in numeric literals does not seem to be web-compatible

Alex Kocharin alex at kocharin.ru
Thu Aug 7 07:08:47 PDT 2014


07.08.2014, 09:49, "Mathias Bynens" <mathias at qiwi.be>:
> On 7 Aug 2014, at 02:46, Bill Frantz <frantz at pwpconsult.com> wrote:
>>  On Tue, Aug 5, 2014 at 7:56 AM, Mathias Bynens <mathias at qiwi.be> wrote:
>>
>>  ...
>>>  In section 11.8.3 (Numeric Literals), the definition for
>>>  `DecimalIntegerLiteral` should somehow be tweaked to match that of
>>>  `DecimalDigits`, with the exception that if the first digit is `0` and all
>>>  other digits are octal digits (0-7) it must be treated as a legacy octal
>>>  literal.
>>  So this horrible footgun, changing the value of a constant changes its radix, is only lurking in sloppy mode.
>
> It affects strict mode code too in existing implementations: there you go from not throwing on e.g. `0123456789` (which is not an octal literal because of the `8` and `9`) to suddenly throwing a syntax error when the value changes to `0` followed by only octal digits (as then it is an octal literal). See my previous posts in this thread.

Throw if value is ambiguous (i.e. `052`), don't throw if value is unambiguous (i.e. `05`, `082`). Looks good to me.

It is not compiler job to prevent bad code style, it's what linters should do.


More information about the es-discuss mailing list