trim method

  1. @override
(ForLoopStatement?, int) trim(
  1. int remaining
)
override

Trim the contents of the Statement.

This is only relevant for compound Statements, such as ForLoopStatement.

Non-compound statements, e.g., VariableDeclarationStatement, simply return themselves.

Implementation

@override
(ForLoopStatement?, int) trim(int remaining) {
  if (remaining <= 0) {
    return (null, 0);
  } else {
    // For loop statement itself consumes 1
    remaining--;
    Statement? trimmedInitStatement;
    if (initStatement != null && remaining > 0) {
      trimmedInitStatement = initStatement;
      remaining--;
    }

    List<Statement> trimmedBodyStatements = [];
    for (final statement in bodyStatements) {
      final trimmedStatementResult = statement.trim(remaining);
      remaining = trimmedStatementResult.$2;
      if (trimmedStatementResult.$1 != null) {
        trimmedBodyStatements.add(trimmedStatementResult.$1!);
      }
      if (remaining <= 0) {
        break;
      }
    }

    Statement? trimmedPostStatement;
    if (postStatement != null && remaining > 0) {
      trimmedPostStatement = postStatement;
      remaining--;
    }

    return (
      ForLoopStatement.init(
        trimmedInitStatement,
        condition,
        trimmedPostStatement,
        trimmedBodyStatements,
      ),
      remaining,
    );
  }
}