// This file was procedurally generated from the following sources:
// - src/class-elements/static-private-method-and-instance-method-brand-check.case
// - src/class-elements/default/cls-decl.template
/*---
description: Brand for static private names and instance private names are different (field definitions in a class declaration)
esid: prod-FieldDefinition
features: [class-static-methods-private, class]
flags: [generated]
info: |
    ClassTail : ClassHeritage { ClassBody }
      ...
      32. If PrivateBoundIdentifiers of ClassBody contains a Private Name P such that P's [[Kind]] field is either "method" or "accessor" and P's [[Brand]] field is proto,
        a. Set F.[[PrivateBrand]] to proto.
      33. If PrivateBoundIdentifiers of ClassBody contains a Private Name P such that P's [[Kind]] field is either "method" or "accessor" and P's [[Brand]] is F,
        a. PrivateBrandAdd(F, F).
      ...

    PrivateFieldGet (P, O)
      1. Assert: P is a Private Name.
      2. If O is not an object, throw a TypeError exception.
      3. If P.[[Kind]] is "field",
      ...
      4. Perform ? PrivateBrandCheck(O, P).
      5. If P.[[Kind]] is "method",
        a. Return P.[[Value]].
      ...

    PrivateBrandCheck(O, P)
      1. If O.[[PrivateBrands]] does not contain an entry e such that SameValue(e, P.[[Brand]]) is true,
        a. Throw a TypeError exception.

---*/


class C {
  static #f() {
    return 'static';
  }

  static access() {
    return this.#f();
  }

  #instanceMethod() {
    return 'instance';
  }

  instanceAccess() {
    return this.#instanceMethod();
  }
}

let c = new C();
assert.sameValue(C.access(), 'static');
assert.sameValue(c.instanceAccess(), 'instance');

assert.throws(TypeError, function() {
  C.access.call(c);
}, 'Accessed static private method from instance of C');

assert.throws(TypeError, function() {
  c.instanceAccess.call(C);
}, 'Accessed instance private method from C');

