text: // Copyright (C) 2016 the V8 project authors. All rights reserved.
  // This code is governed by the BSD license found in the LICENSE file.
  /*---
  esid: sec-runtime-semantics-classdefinitionevaluation
  description: >
      Creation of new lexical environment for the class "name" (with a heritage)
  info: |
      1. Let lex be the LexicalEnvironment of the running execution context.
      2. Let classScope be NewDeclarativeEnvironment(lex).
      3. Let classScopeEnvRec be classScope's EnvironmentRecord.
      4. If className is not undefined, then
         a. Perform classScopeEnvRec.CreateImmutableBinding(className, true).
      5. If ClassHeritageopt is not present, then
         [...]
      6. Else,
         a. Set the running execution context's LexicalEnvironment to classScope.
         [...]
  ---*/
  
  var probeBefore = function() { return C; };
  var probeHeritage, setHeritage;
  var C = 'outside';
  
  var cls = class C extends (
      probeHeritage = function() { return C; },
      setHeritage = function() { C = null; }
    ) {
    method() {
      return C;
    }
  };
  
  assert.sameValue(probeBefore(), 'outside');
  assert.sameValue(probeHeritage(), cls, 'from class heritage');
  assert.throws(TypeError, setHeritage, 'inner binding rejects modification');
  assert.sameValue(probeHeritage(), cls, 'inner binding is immutable');
  assert.sameValue(cls.prototype.method(), cls, 'from instance method');
  