     }
   }
 
+  private func traverse(_ statements: Statements) throws -> Bool {
+    for stmt in statements {
+      guard try traverse(stmt) else { return false }
+    }
+    return true
+  }
+
   public func traverse(_ stmt: BreakStatement) throws -> Bool {
     return try visit(stmt)
   }

  }

  public func traverse(_ stmt: DeferStatement) throws -> Bool {
    return try visit(stmt)
  }

  public func traverse(_ stmt: DoStatement) throws -> Bool {
    return try visit(stmt)
  }

  public func traverse(_ stmt: FallthroughStatement) throws -> Bool {

  public func traverse(_ topLevelDecl: TopLevelDeclaration) throws -> Bool {
    guard try visit(topLevelDecl) else { return false }

    return try traverse(topLevelDecl.statements)
  }

  public func traverse(_ codeBlock: CodeBlock) throws -> Bool {
    guard try visit(codeBlock) else { return false }

    return try traverse(codeBlock.statements)
  }

  // Declarations
