// Copyright (C) 2017 Valerie Young. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-scripts-static-semantics-early-errors
description: Early error when referencing privatename in function in class without declaring in field
info: |
  Static Semantics: Early Errors
  Script : ScriptBody
    1. Let names be an empty List.
    2. If Script is parsed directly from PerformEval,
        a. Let env be the running execution context's PrivateNameEnvironment.
        b. Repeat while env is not null,
            i. For each binding named N in env,
                1. If names does not contain N, append N to names.
            ii. Let env be env's outer environment reference.
    3. If AllPrivateNamesValid of ScriptBody with the argument names is false, throw a SyntaxError exception.
features: [class, class-fields-private]
---*/

var executed = false;

class C {
  f() {
    eval("executed = true; this.#x;");
  }
}

assert.throws(SyntaxError, function() {
  new C().f();
});

assert.sameValue(executed, false);
