// This file was procedurally generated from the following sources:
// - src/computed-property-names/computed-property-name-from-await-expression.case
// - src/computed-property-names/evaluation/class-declaration-accessors.template
/*---
description: Computed property name from condition expression (ComputedPropertyName in ClassDeclaration)
esid: prod-ComputedPropertyName
features: [computed-property-names, top-level-await]
flags: [generated, async, module]
info: |
    ClassExpression:
      classBindingIdentifier opt ClassTail

    ClassTail:
      ClassHeritage opt { ClassBody opt }

    ClassBody:
      ClassElementList

    ClassElementList:
      ClassElement

    ClassElement:
      MethodDefinition

    MethodDefinition:
      PropertyName ...
      get PropertyName ...
      set PropertyName ...

    PropertyName:
      ComputedPropertyName

    ComputedPropertyName:
      [ AssignmentExpression ]
---*/
try {


class C {
  get [await 9]() {
    return 9;
  }

  set [await 9](v) {
    return 9;
  }

  static get [await 9]() {
    return 9;
  }

  static set [await 9](v) {
    return 9;
  }
};

let c = new C();

assert.sameValue(
  c[await 9],
  9
);
assert.sameValue(
  c[await 9] = 9,
  9
);

assert.sameValue(
  C[await 9],
  9
);
assert.sameValue(
  C[await 9] = 9,
  9
);
assert.sameValue(
  c[String(await 9)],
  9
);
assert.sameValue(
  c[String(await 9)] = 9,
  9
);

assert.sameValue(
  C[String(await 9)],
  9
);
assert.sameValue(
  C[String(await 9)] = 9,
  9
);

} catch (e) {
  $DONE(e);
}
$DONE();
