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');