src/parser/loops.js
function() {
    const result = this.node("while");
    this.expect(this.tok.T_WHILE) && this.next();
    let test = null;
    let body = null;
    let shortForm = false;
    if (this.expect("(")) this.next();
    test = this.read_expr();
    if (this.expect(")")) this.next();
    if (this.token === ":") {
      shortForm = true;
      body = this.read_short_form(this.tok.T_ENDWHILE);
    } else {
      body = this.read_statement();
    }
    return result(test, body, shortForm);
  }
function() {
    const result = this.node("while");
    this.expect(this.tok.T_WHILE) && this.next();
    let test = null;
    let body = null;
    let shortForm = false;
    if (this.expect("(")) this.next();
    test = this.read_expr();
    if (this.expect(")")) this.next();
    if (this.token === ":") {
      shortForm = true;
      body = this.read_short_form(this.tok.T_ENDWHILE);
    } else {
      body = this.read_statement();
    }
    return result(test, body, shortForm);
  }
function ( ) { const result = this . node ( "while" ) ; this . expect ( this . tok . T_WHILE ) && this . next ( ) ; let test = null ; let body = null ; let shortForm = false ; if ( this . expect ( "(" ) ) this . next ( ) ; test = this . read_expr ( ) ; if ( this . expect ( ")" ) ) this . next ( ) ; if ( this . token === ":" ) { shortForm = true ; body = this . read_short_form ( this . tok . T_ENDWHILE ) ; } else { body = this . read_statement ( ) ; } return result ( test , body , shortForm ) ; }
Reads a while statement
```ebnf
while ::= T_WHILE (statement | ':' inner_statement_list T_ENDWHILE ';')
```
@see https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L587
@return {While}
Reads a while statement ebnf while :: = T_WHILE ( statement | : inner_statement_list T_ENDWHILE ; )