ifBlock function

Parser ifBlock()

Implementation

Parser ifBlock() => seq5(
      ref0(ifTag),
      ref0(ifBranchContent),
      ref0(elseIfBlock).star(),
      ref0(elseBlock).optional(),
      ref0(endIfTag),
    ).map((values) {
      final ifTag = values.$1 as Tag;
      final ifBody = (values.$2 as List).cast<ASTNode>();
      final elsifBlocks = (values.$3).cast<Tag>();
      final elseBlock = values.$4 as Tag?;

      final List<ASTNode> allBodyNodes = [...ifBody];
      for (var block in elsifBlocks) {
        allBodyNodes.add(block);
      }
      if (elseBlock != null) {
        allBodyNodes.add(elseBlock);
      }

      return ifTag.copyWith(body: allBodyNodes);
    }).labeled('ifBlock');