Strict mode Failing
Expected no error, got ESHostError: inner binding rejects modification (from parameters) Expected a TypeError to be thrown but no exception was thrown at all
Features:
- generators
Expected no error, got ESHostError: inner binding rejects modification (from parameters) Expected a TypeError to be thrown but no exception was thrown at all
// 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-generator-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 GeneratorFunctionCreate(Normal, FormalParameters, GeneratorBody, funcEnv, strict). [...] flags: [onlyStrict] features: [generators] ---*/ var g = 'outside'; var probeBefore = function() { return g; }; var setBefore = function() { g = null; }; var probeParams, setParams, probeBody, setBody; var func = function* g( _ = ( probeParams = function() { return g; }, setParams = function() { g = null; } ) ) { probeBody = function() { return g; }; setBody = function() { g = null; }; }; func().next(); assert.sameValue(probeBefore(), 'outside'); setBefore(); assert.sameValue(probeBefore(), null); assert.sameValue(probeParams(), func, 'inner binding value (from parameters)'); assert.throws( TypeError, setParams, 'inner binding rejects modification (from parameters)' ); assert.sameValue( probeParams(), func, 'inner binding is immutable (from parameters)' ); assert.sameValue(probeBody(), func, 'inner binding value (from body)'); assert.throws( TypeError, setBody, 'inner binding rejects modification (from body)' ); assert.sameValue(probeBody(), func, 'inner binding is immutable (from body)');