Closed
Bug 932517
Opened 11 years ago
Closed 9 years ago
Enable let without version=1.7+ in non-strict mode
Categories
(Core :: JavaScript Engine, defect)
Core
JavaScript Engine
Tracking
()
RESOLVED
FIXED
mozilla44
Tracking | Status | |
---|---|---|
firefox44 | --- | fixed |
People
(Reporter: cpeterson, Assigned: shu)
References
Details
(Keywords: dev-doc-complete, feature, site-compat, Whiteboard: [DocArea=JS])
Attachments
(1 file, 2 obsolete files)
21.37 KB,
patch
|
jorendorff
:
review+
|
Details | Diff | Splinter Review |
This bug is forked from bug 855665. In bug 855665 comment 16, Rick Waldron points to TC39 minutes that conclude: In non-strict code: let, with single token lookahead (where the single token is either an Identifier, "[", or "{" ), at the start of a statement is a let declaration. (Accepted breaking change) https://github.com/rwaldron/tc39-notes/blob/master/es6/2012-11/nov-29.md#the-syntax-of-let
Reporter | ||
Comment 1•11 years ago
|
||
Microsoft says: "IE11 has shipped let/const support and block-scoped functions with (mostly) backwards compatible semantics. For example, `let let = 1;` works in IE11 today outside of strict mode." https://mail.mozilla.org/pipermail/es-discuss/2014-January/035888.html
Updated•10 years ago
|
Keywords: dev-doc-needed
Whiteboard: [DocArea=JS]
Reporter | ||
Comment 2•10 years ago
|
||
let is currently available in javascript;version=1.7 and 1.8.
Summary: Enable let without version=1.8 in non-strict mode → Enable let without version=1.7+ in non-strict mode
Assignee | ||
Comment 3•9 years ago
|
||
Attachment #8675180 -
Flags: review?(jorendorff)
Comment 4•9 years ago
|
||
Comment on attachment 8675180 [details] [diff] [review] Let let be versionless. Review of attachment 8675180 [details] [diff] [review]: ----------------------------------------------------------------- +1! ...It's a little eerie that no tests care about versioned-ness of `let` (or probably any other feature, come to think of it).
Attachment #8675180 -
Flags: review?(jorendorff) → review+
Assignee | ||
Comment 5•9 years ago
|
||
Attachment #8677811 -
Flags: review?(jorendorff)
Updated•9 years ago
|
Keywords: site-compat
Updated•9 years ago
|
Keywords: site-compat
Assignee | ||
Comment 6•9 years ago
|
||
Attachment #8678364 -
Flags: review?(jorendorff)
Assignee | ||
Updated•9 years ago
|
Attachment #8675180 -
Attachment is obsolete: true
Attachment #8677811 -
Attachment is obsolete: true
Attachment #8677811 -
Flags: review?(jorendorff)
Comment 7•9 years ago
|
||
Comment on attachment 8678364 [details] [diff] [review] Treat let as a context keyword in sloppy mode and make it versionless. Review of attachment 8678364 [details] [diff] [review]: ----------------------------------------------------------------- Woohoo! r=me with a few minor comments and a few test requests. ::: js/src/frontend/Parser.cpp @@ +5203,5 @@ > */ > bool isForDecl = false; > > + // True if a 'let' token at the head parsed as an identifier instead of > + // starting a lexical declaration? Comment stilted. @@ +5239,3 @@ > handler.disableSyntaxParser(); > + > + bool parseDecl; At your preference, this might be a nice place for a short comment like // Check for the oddball backward-compatibility case `for (let.x in y)` // where `let` should be parsed as an identifier. @@ +5253,5 @@ > + isForDecl = true; > + blockObj = StaticBlockObject::create(context); > + if (!blockObj) > + return null(); > + // Initialize the enclosing scope manually for the call to Blank line before comment. @@ +5342,1 @@ > headKind = PNK_FOROF; This `&& !letIsIdentifier` is to ban `for (let.value of expr)`, right? Worth a comment, perhaps? @@ +5598,5 @@ > JS_ALWAYS_FALSE(abortIfSyntaxParser()); > return null(); > + } else if (tt == TOK_NAME && tokenStream.nextName() == context->names().let) { > + bool parseDecl = false; > + if (!peekShouldParseLetDeclaration(&parseDecl, TokenStream::Operand)) Unless I'm missing something, please abortIfSyntaxParser() unconditionally here rather than call peekShouldParseLetDeclaration()... the bizarro case where we treat `let` as an identifier is not worth the extra code, IMHO. @@ +6677,5 @@ > + > + TokenKind tt; > + *parseDeclOut = false; > + > + if (!tokenStream.peekToken(&tt)) Please add a test that `for (let/x;;) ///...` parses correctly (division, not a regexp) @@ +6683,5 @@ > + > + switch (tt) { > + case TOK_NAME: > + // |let let| is disallowed per ES6 13.3.1.1, and for heads need to > + // parse things like |for (let in e)| as binding a name 'let'. The rest of the comment after "and" seems unrelated to this case: in that case, tt would be TOK_IN and so we wouldn't get here. @@ +6726,5 @@ > + tokenStream.consumeKnownToken(TOK_NAME, modifier); > + if (!shouldParseLetDeclaration(parseDeclOut)) > + return false; > + > + // Unget the TOK_NAME of 'let' if not parsing a declaration. Tricky contract :-P but OK. ::: js/src/frontend/Parser.h @@ +796,5 @@ > > + // Use when the current token is TOK_NAME and is known to be 'let'. > + bool shouldParseLetDeclaration(bool* parseDeclOut); > + > + // Use when the lookahead token is TOK_NAME and might be 'let'. If a let It looks like it's only called when the token is definitely `let`, not "might be". ::: js/src/jit-test/tests/parser/letContextualKeyword.js @@ +8,5 @@ > + } > + assertEq(log, "e"); > +} > + > +eval(`let x = 42; assertEq(x, 42);`); Please also test `let` and `[...let] = []`, which I guess should work fine in sloppy mode.
Attachment #8678364 -
Flags: review?(jorendorff) → review+
Comment 9•9 years ago
|
||
https://hg.mozilla.org/mozilla-central/rev/3bb8446a6d8d
Status: NEW → RESOLVED
Closed: 9 years ago
status-firefox44:
--- → fixed
Resolution: --- → FIXED
Target Milestone: --- → mozilla44
Comment 10•9 years ago
|
||
Posted the site compatibility doc: https://www.fxsitecompat.com/en-US/docs/2015/let-statement-no-longer-requires-explicit-javascript-version-in-non-strict-mode/
Keywords: site-compat
Comment 14•9 years ago
|
||
https://developer.mozilla.org/en-US/Firefox/Releases/44#JavaScript https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let
Keywords: dev-doc-needed → dev-doc-complete
Updated•8 years ago
|
Assignee: nobody → shu
You need to log in
before you can comment on or make changes to this bug.
Description
•