diff options
Diffstat (limited to 'js/src/tests/test262/language/expressions/function/scope-name-var-open-non-strict.js')
-rw-r--r-- | js/src/tests/test262/language/expressions/function/scope-name-var-open-non-strict.js | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/js/src/tests/test262/language/expressions/function/scope-name-var-open-non-strict.js b/js/src/tests/test262/language/expressions/function/scope-name-var-open-non-strict.js new file mode 100644 index 0000000000..4d52ee06c5 --- /dev/null +++ b/js/src/tests/test262/language/expressions/function/scope-name-var-open-non-strict.js @@ -0,0 +1,52 @@ +// Copyright (C) 2016 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-function-definitions-runtime-semantics-evaluation +description: > + Creation of new variable environment for the BindingIdentifier + parameter +info: | + [...] + 2. Let scope be the running execution context's LexicalEnvironment. + 3. Let funcEnv be NewDeclarativeEnvironment(scope). + 4. Let envRec be funcEnv's EnvironmentRecord. + 5. Let name be StringValue of BindingIdentifier. + 6. Perform envRec.CreateImmutableBinding(name, false). + 7. Let closure be FunctionCreate(Normal, FormalParameters, FunctionBody, + funcEnv, strict). + [...] +flags: [noStrict] +---*/ + +var f = 'outside'; +var probeBefore = function() { return f; }; +var setBefore = function() { f = null; }; +var probeParams, setParams, probeBody, setBody; + +var func = function f( + _ = ( + probeParams = function() { return f; }, + setParams = function() { f = null; } + ) + ) { + probeBody = function() { return f; }; + setBody = function() { f = null; }; +}; + +func(); + +assert.sameValue(probeBefore(), 'outside'); +setBefore(); +assert.sameValue(probeBefore(), null); + +assert.sameValue(probeParams(), func, 'inner binding value (from parameters)'); +setParams(); +assert.sameValue( + probeParams(), func, 'inner binding is immutable (from parameters)' +); + +assert.sameValue(probeBody(), func, 'inner binding value (from body)'); +setBody(); +assert.sameValue(probeBody(), func, 'inner binding is immutable (from body)'); + +reportCompare(0, 0); |