public static bool RemoveUnusedVariables(BlockNode block) { var usedvariables = block.GetReadVariables().ToArray(); var changesmade = false; var i = 0; foreach (var node in block.GetChildren().ToList()) { if (node is VariableDeclarationNode dec) { if (!usedvariables.Contains(dec.VariableName)) { block.RemoveChild(i--); changesmade = true; } } else if (node is VariableAssignmentNode assignment) { if (!usedvariables.Contains(assignment.VariableName)) { block.RemoveChild(i--); changesmade = true; } } i++; } return(changesmade); }