// Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- description: > Imported binding reflects state of exported default binding ("named" generator function declaration) esid: sec-moduledeclarationinstantiation info: | [...] 17. For each element d in lexDeclarations do a. For each element dn of the BoundNames of d do i. If IsConstantDeclaration of d is true, then [...] ii. Else, 1. Perform ! envRec.CreateMutableBinding(dn, false). iii. If d is a GeneratorDeclaration production or a FunctionDeclaration production, then 1. Let fo be the result of performing InstantiateFunctionObject for d with argument env. 2. Call envRec.InitializeBinding(dn, fo). [...] 14.4.12 Runtime Semantics: InstantiateFunctionObject GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody } 1. If the function code for GeneratorDeclaration is strict mode code, let strict be true. Otherwise let strict be false. 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters, GeneratorBody, scope, strict). 3. Let prototype be ObjectCreate(%GeneratorPrototype%). 4. Perform DefinePropertyOrThrow(F, "prototype", PropertyDescriptor{[[Value]]: prototype, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false}). 5. Perform SetFunctionName(F, "default"). 6. Return F. 14.4 Generator Function Definitions Syntax GeneratorDeclaration[Yield, Default] : function * BindingIdentifier[?Yield] ( FormalParameters[Yield] ) { GeneratorBody } [+Default] function * ( FormalParameters[Yield] ) { GeneratorBody } flags: [module] ---*/ assert.sameValue(g().next().value, 23, 'generator function value is hoisted'); assert.sameValue(g.name, 'gName', 'correct name is assigned'); import g from './instn-named-bndng-dflt-gen-named.js'; export default function* gName() { return 23; };