From 89e15ce814d2f9ba6f5fe46d38e575f025cf4dcb Mon Sep 17 00:00:00 2001 From: Daniel Ehrenberg Date: Thu, 13 Apr 2017 17:06:16 +0200 Subject: [PATCH] Test to block legacy hoisting for `function arguments() {}` (#970) Ref https://github.com/tc39/ecma262/issues/815 Ref https://github.com/tc39/ecma262/pull/889 This is testing the current semantics of the specs, rather than the semantics in the proposed referenced issue. --- .../block-decl-func-skip-arguments.js | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 test/annexB/language/function-code/block-decl-func-skip-arguments.js diff --git a/test/annexB/language/function-code/block-decl-func-skip-arguments.js b/test/annexB/language/function-code/block-decl-func-skip-arguments.js new file mode 100644 index 0000000000..3c41abddd7 --- /dev/null +++ b/test/annexB/language/function-code/block-decl-func-skip-arguments.js @@ -0,0 +1,54 @@ +/*--- +description: Functions named 'arguments' have legacy hoisting semantics +esid: sec-web-compat-functiondeclarationinstantiation +flags: [noStrict] +info: | + FunctionDeclarationInstantiation ( _func_, _argumentsList_ ) + + [...] + 7. Let _parameterNames_ be the BoundNames of _formals_. + [...] + 22. If argumentsObjectNeeded is true, then + f. Append "arguments" to parameterNames. + + Changes to FunctionDeclarationInstantiation + + [...] + ii. If replacing the |FunctionDeclaration| _f_ with a |VariableStatement| that has _F_ + as a |BindingIdentifier| would not produce any Early Errors for _func_ and _F_ is + not an element of _parameterNames_, then + [...] +---*/ + +// Simple parameters +(function() { + assert.sameValue(arguments.toString(), "[object Arguments]"); + { + assert.sameValue(arguments(), undefined); + function arguments() {} + assert.sameValue(arguments(), undefined); + } + assert.sameValue(arguments.toString(), "[object Arguments]"); +}()); + +// Single named parameter +(function(x) { + assert.sameValue(arguments.toString(), "[object Arguments]"); + { + assert.sameValue(arguments(), undefined); + function arguments() {} + assert.sameValue(arguments(), undefined); + } + assert.sameValue(arguments.toString(), "[object Arguments]"); +}()); + +// Non-simple parameters +(function(..._) { + assert.sameValue(arguments.toString(), "[object Arguments]"); + { + assert.sameValue(arguments(), undefined); + function arguments() {} + assert.sameValue(arguments(), undefined); + } + assert.sameValue(arguments.toString(), "[object Arguments]"); +}());