// Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
desc: Anonymous functions in field initializer have length properly set
info: |
  Updated Productions

  FieldDefinition :
    ClassElementName Initializer_opt

  InitializeInstanceFields ( O, constructor )
    1. Assert: Type ( O ) is Object.
    2. Assert: constructor is an ECMAScript function object.
    3. Let fields be the value of constructor.[[Fields]].
    4. For each item fieldRecord in order from fields,
      a. Perform ? DefineField(O, fieldRecord).
    5. Return.

  DefineField(receiver, fieldRecord)
    1. Assert: Type(receiver) is Object.
    2. Assert: fieldRecord is a Record as created by ClassFieldDefinitionEvaluation.
    3. Let name be fieldRecord.[[Name]].
    4. Let initializer be fieldRecord.[[Initializer]].
    5. If initializer is not empty, then
      a. Let initValue be ? Call(initializer, receiver).
    ...
template: default
features: [class-fields-private, class-fields-public]
---*/

//- elements
field = function() {};
#field = (a, b, c, d) => undefined;

accessPrivateField() {
  return this.#field;
}
//- assertions
let c = new C();
assert.sameValue(c.accessPrivateField().length, 4);
assert.sameValue(c.field.length, 0);
