function() {
    const result = this.node("if");
    let body = null;
    let alternate = null;
    let shortForm = false;
    let test = null;
    test = this.next().read_if_expr();

    if (this.token === ":") {
      shortForm = true;
      this.next();
      body = this.node("block");
      const items = [];
      while (this.token !== this.EOF && this.token !== this.tok.T_ENDIF) {
        if (this.token === this.tok.T_ELSEIF) {
          alternate = this.read_elseif_short();
          break;
        } else if (this.token === this.tok.T_ELSE) {
          alternate = this.read_else_short();
          break;
        }
        items.push(this.read_inner_statement());
      }
      body = body(null, items);
      this.expect(this.tok.T_ENDIF) && this.next();
      this.expectEndOfStatement();
    } else {
      body = this.read_statement();
      if (this.token === this.tok.T_ELSEIF) {
        alternate = this.read_if();
      } else if (this.token === this.tok.T_ELSE) {
        alternate = this.next().read_statement();
      }
    }
    return result(test, body, alternate, shortForm);
  }
function() {
    const result = this.node("if");
    let body = null;
    let alternate = null;
    let shortForm = false;
    let test = null;
    test = this.next().read_if_expr();

    if (this.token === ":") {
      shortForm = true;
      this.next();
      body = this.node("block");
      const items = [];
      while (this.token !== this.EOF && this.token !== this.tok.T_ENDIF) {
        if (this.token === this.tok.T_ELSEIF) {
          alternate = this.read_elseif_short();
          break;
        } else if (this.token === this.tok.T_ELSE) {
          alternate = this.read_else_short();
          break;
        }
        items.push(this.read_inner_statement());
      }
      body = body(null, items);
      this.expect(this.tok.T_ENDIF) && this.next();
      this.expectEndOfStatement();
    } else {
      body = this.read_statement();
      if (this.token === this.tok.T_ELSEIF) {
        alternate = this.read_if();
      } else if (this.token === this.tok.T_ELSE) {
        alternate = this.next().read_statement();
      }
    }
    return result(test, body, alternate, shortForm);
  }
function ( ) { const result = this . node ( "if" ) ; let body = null ; let alternate = null ; let shortForm = false ; let test = null ; test = this . next ( ) . read_if_expr ( ) ; if ( this . token === ":" ) { shortForm = true ; this . next ( ) ; body = this . node ( "block" ) ; const items = [ ] ; while ( this . token !== this . EOF && this . token !== this . tok . T_ENDIF ) { if ( this . token === this . tok . T_ELSEIF ) { alternate = this . read_elseif_short ( ) ; break ; } else if ( this . token === this . tok . T_ELSE ) { alternate = this . read_else_short ( ) ; break ; } items . push ( this . read_inner_statement ( ) ) ; } body = body ( null , items ) ; this . expect ( this . tok . T_ENDIF ) && this . next ( ) ; this . expectEndOfStatement ( ) ; } else { body = this . read_statement ( ) ; if ( this . token === this . tok . T_ELSEIF ) { alternate = this . read_if ( ) ; } else if ( this . token === this . tok . T_ELSE ) { alternate = this . next ( ) . read_statement ( ) ; } } return result ( test , body , alternate , shortForm ) ; }
Reads an IF statement

```ebnf
if ::= T_IF '(' expr ')' ':' ...
```
Reads an IF statement