// Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- es6id: 14.1.6 description: > Default parameters' effect on function length info: | Function length is counted by the non initialized parameters in the left. 9.2.4 FunctionInitialize (F, kind, ParameterList, Body, Scope) [...] 2. Let len be the ExpectedArgumentCount of ParameterList. 3. Perform ! DefinePropertyOrThrow(F, "length", PropertyDescriptor{[[Value]]: len, [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true}). [...] FormalsList : FormalParameter 1. If HasInitializer of FormalParameter is true return 0 2. Return 1. FormalsList : FormalsList , FormalParameter 1. Let count be the ExpectedArgumentCount of FormalsList. 2. If HasInitializer of FormalsList is true or HasInitializer of FormalParameter is true, return count. 3. Return count+1. features: [generators, default-parameters] includes: [propertyHelper.js] ---*/ class C1 { *m(x = 42) {} } var m1 = C1.prototype.m; assert.sameValue(m1.length, 0, 'formalslist: x = 42'); verifyNotEnumerable(m1, 'length'); verifyNotWritable(m1, 'length'); verifyConfigurable(m1, 'length'); class C2 { *m(x = 42, y) {} } var m2 = C2.prototype.m; assert.sameValue(m2.length, 0, 'formalslist: x = 42, y'); verifyNotEnumerable(m2, 'length'); verifyNotWritable(m2, 'length'); verifyConfigurable(m2, 'length'); class C3 { *m(x, y = 42) {} } var m3 = C3.prototype.m; assert.sameValue(m3.length, 1, 'formalslist: x, y = 42'); verifyNotEnumerable(m3, 'length'); verifyNotWritable(m3, 'length'); verifyConfigurable(m3, 'length'); class C4 { *m(x, y = 42, z) {} } var m4 = C4.prototype.m; assert.sameValue(m4.length, 1, 'formalslist: x, y = 42, z'); verifyNotEnumerable(m4, 'length'); verifyNotWritable(m4, 'length'); verifyConfigurable(m4, 'length'); reportCompare(0, 0);