ifStatement method

Parser<IfNode> ifStatement()
inherited

Implementation

Parser<IfNode> ifStatement() =>
    seq5(
      ref0(ifToken),
      ref0(expression),
      seq2(ref1(token, ':'), ref0(suite)).map2((_, s) => s),
      ref0(elifClause).star(),
      ref0(elseClause).optional(),
    ).map5((_, test, body, elifs, elseBody) {
      var currentElse = elseBody ?? const <StatementNode>[];
      for (var i = elifs.length - 1; i >= 0; i--) {
        final elif = elifs[i];
        currentElse = [
          IfNode(test: elif.test, body: elif.body, orelse: currentElse),
        ];
      }
      return IfNode(test: test, body: body, orelse: currentElse);
    });