whole_func_string: function() {
      const result = this.node("do");
      this.expect(this.tok.T_DO) && this.next();
      let test = null;
      let body = null;
      body = this.read_statement();
      if (this.expect(this.tok.T_WHILE)) {
        if (this.next().expect("(")) this.next();
        test = this.read_expr();
        if (this.expect(")")) this.next();
        if (this.expect(";")) this.next();
      }
      return result(test, body);
    }
func_code_string: function() {
      const result = this.node("do");
      this.expect(this.tok.T_DO) && this.next();
      let test = null;
      let body = null;
      body = this.read_statement();
      if (this.expect(this.tok.T_WHILE)) {
        if (this.next().expect("(")) this.next();
        test = this.read_expr();
        if (this.expect(")")) this.next();
        if (this.expect(";")) this.next();
      }
      return result(test, body);
    }
func_documentation_string: Reads a do / while loop
  ```ebnf
  do ::= T_DO statement T_WHILE '(' expr ')' ';'
  ```
  @see https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L423
  @return {Do}