-
littledan authored
ES2015 generally bans FunctionDeclarations in positions which expect a Statement, as opposed to a StatementListItem, such as a FunctionDeclaration which constitutes the body of a for loop. However, Annex B 3.2 and 3.4 make exceptions for labeled function declarations and function declarations as the body of an if statement in sloppy mode, in the latter case specifying that the semantics are as if the function declaration occurred in a block. Chrome has historically permitted further extensions, for the body of any flow control construct. This patch addresses both the syntactic and semantic mismatches between V8 and the spec. For the semantic mismatch, function declarations as the body of if statements change from unconditionally hoisting in certain cases to acquiring the sloppy mode function in block semantics (based on Annex B 3.3). For the extra syntax permitted, this patch adds a flag, --harmony-restrictive-declarations, which excludes disallowed function declaration cases. A new UseCounter, LegacyFunctionDeclaration, is added to count how often function declarations occur as the body of other constructs in sloppy mode. With this patch, the code generally follows the form of the specification with respect to parsing FunctionDeclarations, rather than allowing them in arbitrary Statement positions, and makes it more clear where our extensions occur. BUG=v8:4647 R=adamk LOG=Y Review URL: https://codereview.chromium.org/1757543003 Cr-Commit-Position: refs/heads/master@{#34470}
0e7f095c
Name |
Last commit
|
Last update |
---|---|---|
.. | ||
mozilla-shell-emulation.js | ||
mozilla.gyp | ||
mozilla.isolate | ||
mozilla.status | ||
testcfg.py |