tryStatement method

Parser<StatementNode> tryStatement()
inherited

Implementation

Parser<StatementNode> tryStatement() =>
    seq5(
      ref0(tryToken),
      seq2(ref1(token, ':'), ref0(suite)).map2((_, s) => s),
      [
        ref0(exceptStarHandler).plus(),
        ref0(exceptHandler).star(),
      ].toChoiceParser(),
      ref0(elseClause).optional(),
      ref0(finallyClause).optional(),
    ).map5((_, body, handlers, orelse, finalbody) {
      final parsedHandlers = handlers;
      final isTryStar =
          parsedHandlers.isNotEmpty &&
          parsedHandlers.first.name?.startsWith('*') == true;
      if (isTryStar) {
        return TryStarNode(
          body: body,
          handlers: parsedHandlers,
          orelse: orelse ?? const [],
          finalbody: finalbody ?? const [],
        );
      }
      return TryNode(
        body: body,
        handlers: parsedHandlers,
        orelse: orelse ?? const [],
        finalbody: finalbody ?? const [],
      );
    });