]> git.lizzy.rs Git - rust.git/blobdiff - src/libcore/iter/mod.rs
Rollup merge of #68473 - nopsledder:rust_sanitizer_fuchsia, r=alexcrichton
[rust.git] / src / libcore / iter / mod.rs
index fac6ff0f06b6d86c750d2f680fa83e2fee29476a..0d5af3986fbff2cef2c7dc095238ca25d7c2e83a 100644 (file)
 //! Common iterator adapters include [`map`], [`take`], and [`filter`].
 //! For more, see their documentation.
 //!
+//! If an iterator adapter panics, the iterator will be in an unspecified (but
+//! memory safe) state.  This state is also not guaranteed to stay the same
+//! across versions of Rust, so you should avoid relying on the exact values
+//! returned by an iterator which panicked.
+//!
 //! [`map`]: trait.Iterator.html#method.map
 //! [`take`]: trait.Iterator.html#method.take
 //! [`filter`]: trait.Iterator.html#method.filter
 #[stable(feature = "rust1", since = "1.0.0")]
 pub use self::traits::Iterator;
 
-#[unstable(feature = "step_trait",
-           reason = "likely to be replaced by finer-grained traits",
-           issue = "42168")]
+#[unstable(
+    feature = "step_trait",
+    reason = "likely to be replaced by finer-grained traits",
+    issue = "42168"
+)]
 pub use self::range::Step;
 
-#[stable(feature = "rust1", since = "1.0.0")]
-pub use self::sources::{Repeat, repeat};
-#[stable(feature = "iterator_repeat_with", since = "1.28.0")]
-pub use self::sources::{RepeatWith, repeat_with};
 #[stable(feature = "iter_empty", since = "1.2.0")]
-pub use self::sources::{Empty, empty};
+pub use self::sources::{empty, Empty};
+#[stable(feature = "iter_from_fn", since = "1.34.0")]
+pub use self::sources::{from_fn, FromFn};
 #[stable(feature = "iter_once", since = "1.2.0")]
-pub use self::sources::{Once, once};
+pub use self::sources::{once, Once};
 #[unstable(feature = "iter_once_with", issue = "57581")]
-pub use self::sources::{OnceWith, once_with};
-#[stable(feature = "iter_from_fn", since = "1.34.0")]
-pub use self::sources::{FromFn, from_fn};
+pub use self::sources::{once_with, OnceWith};
+#[stable(feature = "rust1", since = "1.0.0")]
+pub use self::sources::{repeat, Repeat};
+#[stable(feature = "iterator_repeat_with", since = "1.28.0")]
+pub use self::sources::{repeat_with, RepeatWith};
 #[stable(feature = "iter_successors", since = "1.34.0")]
-pub use self::sources::{Successors, successors};
+pub use self::sources::{successors, Successors};
 
-#[stable(feature = "rust1", since = "1.0.0")]
-pub use self::traits::{FromIterator, IntoIterator, DoubleEndedIterator, Extend};
-#[stable(feature = "rust1", since = "1.0.0")]
-pub use self::traits::{ExactSizeIterator, Sum, Product};
 #[stable(feature = "fused", since = "1.26.0")]
 pub use self::traits::FusedIterator;
 #[unstable(feature = "trusted_len", issue = "37572")]
 pub use self::traits::TrustedLen;
-
 #[stable(feature = "rust1", since = "1.0.0")]
-pub use self::adapters::{Rev, Cycle, Chain, Zip, Map, Filter, FilterMap, Enumerate};
+pub use self::traits::{DoubleEndedIterator, Extend, FromIterator, IntoIterator};
 #[stable(feature = "rust1", since = "1.0.0")]
-pub use self::adapters::{Peekable, SkipWhile, TakeWhile, Skip, Take, Scan, FlatMap};
-#[stable(feature = "rust1", since = "1.0.0")]
-pub use self::adapters::{Fuse, Inspect};
+pub use self::traits::{ExactSizeIterator, Product, Sum};
+
 #[stable(feature = "iter_cloned", since = "1.1.0")]
 pub use self::adapters::Cloned;
-#[stable(feature = "iterator_step_by", since = "1.28.0")]
-pub use self::adapters::StepBy;
-#[stable(feature = "iterator_flatten", since = "1.29.0")]
-pub use self::adapters::Flatten;
 #[stable(feature = "iter_copied", since = "1.36.0")]
 pub use self::adapters::Copied;
+#[stable(feature = "iterator_flatten", since = "1.29.0")]
+pub use self::adapters::Flatten;
+#[stable(feature = "iterator_step_by", since = "1.28.0")]
+pub use self::adapters::StepBy;
+#[stable(feature = "rust1", since = "1.0.0")]
+pub use self::adapters::{Chain, Cycle, Enumerate, Filter, FilterMap, Map, Rev, Zip};
+#[stable(feature = "rust1", since = "1.0.0")]
+pub use self::adapters::{FlatMap, Peekable, Scan, Skip, SkipWhile, Take, TakeWhile};
+#[stable(feature = "rust1", since = "1.0.0")]
+pub use self::adapters::{Fuse, Inspect};
 
-pub(crate) use self::adapters::{TrustedRandomAccess, process_results};
+pub(crate) use self::adapters::{process_results, TrustedRandomAccess};
 
+mod adapters;
 mod range;
 mod sources;
 mod traits;
-mod adapters;
 
 /// Used to make try_fold closures more like normal loops
 #[derive(PartialEq)]
@@ -378,9 +385,13 @@ fn into_result(self) -> Result<Self::Ok, Self::Error> {
         }
     }
     #[inline]
-    fn from_error(v: Self::Error) -> Self { LoopState::Break(v) }
+    fn from_error(v: Self::Error) -> Self {
+        LoopState::Break(v)
+    }
     #[inline]
-    fn from_ok(v: Self::Ok) -> Self { LoopState::Continue(v) }
+    fn from_ok(v: Self::Ok) -> Self {
+        LoopState::Continue(v)
+    }
 }
 
 impl<C, B> LoopState<C, B> {