Is \u006eew a valid Identifier?
Allen Wirfs-Brock
allen at wirfs-brock.com
Mon Nov 9 17:05:17 UTC 2015
> On Nov 9, 2015, at 6:55 AM, Andreas Rossberg <rossberg at google.com> wrote:
>
> Allen, what was the motivation for allowing random escapes in
> identifiers but not in keywords? AFAICS, it would be simpler and more
> consistent to allow them anywhere and render "escape normalisation" a
> uniform prepass before tokenisation. IIUC, that's what other languages
> do. The current ES rules are far from ideal, and require jumping
> through extra hoops, in particular, to handle context-dependent
> keywords like `yield`.
>
> /Andreas
see:
Here are some references:
https://github.com/tc39/tc39-notes/blob/master/es6/2013-11/nov-20.md#42-clarification-of-the-interaction-of-unicode-escapes-and-identification-syntax <https://github.com/tc39/tc39-notes/blob/master/es6/2013-11/nov-20.md#42-clarification-of-the-interaction-of-unicode-escapes-and-identification-syntax>
https://bugs.ecmascript.org/show_bug.cgi?id=277 <https://bugs.ecmascript.org/show_bug.cgi?id=277>
https://esdiscuss.org/topic/fw-unicode-escape-sequences-for-keywords-what-s-the-correct-behaviour <https://esdiscuss.org/topic/fw-unicode-escape-sequences-for-keywords-what-s-the-correct-behaviour>
https://esdiscuss.org/topic/this-vs-thi-u0073 <https://esdiscuss.org/topic/this-vs-thi-u0073>
there are many others, and also there were earlier TC39 meeting discussions that I didn’t find in my quick search.
It’s a usability vs. implementor convience trade-off. the TC39 was to go with usability (and in particular readability).
(Also, my recollection is that in some TC39 discussions (that I didn’t find in my search) there were security concerns raised WRT allowing unicode escapes in keywords. Probably concerns about code injection filters not recognizing escaped keywords)
In ES6 (and I believe that Waldemar would claim in previous editions) unicode escapes cannot be handled with such a prepass. Essentially, escaped and non-escaped IdentifierName characters are only equated when doing identifier binding or property name lookups. It’s probably a misperception of the lexical grammar and static semantics that leads some implementors down the path of thinking that such a preps is reasonable.
Regarding `yield`, if it is written containing unicode escapes it is never a contextual keyword.
BTW, personally I I would be just fine with never allowing unicode escapes within IdentiferName. But that would be a web breaking change.
Allen
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20151109/141f0846/attachment.html>
More information about the es-discuss
mailing list