code: JCBlock block(int pos, long flags) {
          accept(LBRACE);
          List<JCStatement> stats = blockStatements();
          JCBlock t = F.at(pos).Block(flags, stats);
          while (token.kind == CASE || token.kind == DEFAULT) {
              syntaxError("orphaned", token.kind);
              switchBlockStatementGroups();
          }
          // the Block node has a field "endpos" for first char of last token, which is
          // usually but not necessarily the last char of the last token.
          t.endpos = token.pos;
          accept(RBRACE);
          return toP(t);
      }
docs: Block = "{" BlockStatements "}"