// TODO: upgrade parser
// class A {
//   async; // The semicolon is *not* necessary
//   x(){}
// }
class B {
  static; // The semicolon *is* necessary
  x(){}
}

class C1 {
  get; // The semicolon *is* necessary
  x(){}
}
class C2 {
  get = () => {}; // The semicolon is *not* necessary
  x(){}
}
class C3 {
  set; // The semicolon *is* necessary
  x(){}
}
class C4 {
  set = () => {}; // The semicolon is *not* necessary
  x(){}
}



class A1 {
  a = 0;
  [b](){}

  c = 0;
  *d(){}

  e = 0;
  [f] = 0

  // none of the semicolons above this comment can be omitted.
  // none of the semicolons below this comment are necessary.

  q() {};
  [h](){}

  p() {};
  *i(){}

  a = 1;
  get ['y']() {}

  a = 1;
  static ['y']() {}

  a = 1;
  set ['z'](z) {}

  a = 1;
  async ['a']() {}

  a = 1;
  async *g() {}

  a = 0;
  b = 1;
}

class A2 {
  a = 0;
  [b](){}

  c = 0;
  *d(){}

  e = 0;
  [f] = 0

  // none of the semicolons above this comment can be omitted.
  // none of the semicolons below this comment are necessary.

  q() {};
  [h](){}

  p() {};
  *i(){}

  a = 1;
  get ['y']() {}

  a = 1;
  static ['y']() {}

  a = 1;
  set ['z'](z) {}

  a = 1;
  async ['a']() {}

  a = 1;
  async *g() {}

  a = 0;
  b = 1;
}

// being first/last shouldn't break things
class G1 {
  x = 1
}
class G2 {
  x() {}
}
class G3 {
  *x() {}
}
class G4 {
  [x] = 1
}
