// Copyright (C) 2017 Valerie Young. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-module-semantics-static-semantics-early-errors
description: Referencing privatename in class within class does not error.
info: |
  Static Semantics: Early Errors
  Module : ModuleBody
    It is a Syntax Error if AllPrivateNamesValid of ModuleBody with an empty List as an argument is false.

  Static Semantics: AllPrivateNamesValid
  AllPrivateNamesValid is an abstract operation which takes names as an argument.

    MemberExpression : MemberExpression . PrivateName
      1. If StringValue of PrivateName is in names, return true.
      2. Return false.

    CallExpression : CallExpression . PrivateName
      1. If StringValue of PrivateName is in names, return true.
      2. Return false.

    ClassBody:ClassElementList
      1. Let newNames be the concatenation of names with PrivateBoundNames of ClassBody.
      2.Return AllPrivateNamesValid of ClassElementList with the argument newNames.

    For all other grammatical productions, recurse on subexpressions/substatements, passing in the names of the caller. If all pieces return true, then return true. If any returns false, return false.
flags: [module]
features: [class, class-fields-private]
---*/

class outer {
  #x = 42;

  f() {
    var self = this;
    return class inner {
      g() {
        return self.#x;
      }
    }
  }
}

var innerclass = new outer().f();
var test = new innerclass().g();

assert.sameValue(test, 42);
