Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Redesign the std::iter::Step trait #62886

Closed
wants to merge 1 commit into from
Closed

Conversation

CAD97
Copy link
Contributor

@CAD97 CAD97 commented Jul 23, 2019

CC #42168, @SimonSapin @scottmcm. Revival of #43127.

The trait is now:

/// Objects that have a notion of *successor* and *predecessor*.
/// 
/// The *successor* operation moves towards values that compare greater.
/// The *predecessor* operation moves towards values that compare lesser.
///
/// # Safety
///
/// This trait is `unsafe` because its implementation must be correct for
/// the safety of `unsafe trait TrustedLen` implementations, and the results
/// of using this trait can be otherwise trusted by `unsafe` code.
#[unstable(feature = "step_trait",
           reason = "recently redesigned",
           issue = "42168")]
pub unsafe trait Step: Clone + PartialOrd + Sized {
    /// Returns the number of *successor* steps needed to get from `start` to `end`.
    ///
    /// Returns `None` if that number would overflow `usize`
    /// (or is infinite, or if `end` would never be reached).
    ///
    /// # Invariants
    ///
    /// For any `a`, `b`, and `n`:
    ///
    /// * `steps_between(&a, &b) == Some(n)` if and only if `a.forward(n) == Some(b)`
    /// * `steps_between(&a, &b) == Some(n)` if and only if `b.backward(n) == Some(a)`
    /// * `steps_between(&a, &b) == Some(n)` only if `a <= b`
    ///   * Corrolary: `steps_between(&a, &b) == Some(0)` if and only if `a == b`
    ///   * Note that `a <= b` does _not_ imply `steps_between(&a, &b) != None`;
    ///     this is the case when it would take more than `usize::MAX` steps to get to `b`
    /// * `steps_between(&a, &b) == None` if `a > b`
    fn steps_between(start: &Self, end: &Self) -> Option<usize>;

    /// Returns the value that would be obtained by taking the *successor*
    /// of `self` `count` times.
    ///
    /// Returns `None` if this would overflow the range of values supported by `Self`.
    ///
    /// # Invariants
    ///
    /// For any `a`, `n`, and `m` where `n + m` does not overflow:
    ///
    /// * `a.forward(n).and_then(|x| x.forward(m)) == a.forward(n + m)`
    /// * `a.forward(n)` equals `Step::successor` applied to `a` `n` times
    ///   * Corollary: `a.forward(0) == Some(a)`
    /// * `a.forward(n).unwrap() >= a`
    fn forward(&self, count: usize) -> Option<Self>;

    /// Returns the *successor* of `self`.
    ///
    /// If this would overflow the range of values supported by `Self`,
    /// this method is allowed to panic or wrap. Suggested behavior is
    /// to panic when debug assertions are enabled, and wrap otherwise.
    ///
    /// # Invariants
    ///
    /// For any `a` where `a.successor()` does not overflow:
    ///
    /// * `a == a.successor().predecessor()`
    /// * `a.successor() == a.forward(1).unwrap()`
    /// * `a.successor() >= a`
    #[inline]
    #[unstable(feature = "step_trait_ext",
               reason = "recently added",
               issue = "42168")]
    fn successor(&self) -> Self { self.forward(1).expect("overflow in `Step::successor`") }

    /// Returns the *successor* of `self`.
    ///
    /// If this would overflow the range of values supported by `Self`,
    /// this method is defined to return the input value instead.
    ///
    /// # Invariants
    ///
    /// For any `a` where `a.successor()` does not overflow:
    ///
    /// * `a == a.successor().predecessor()`
    /// * `a.successor() == a.forward(1).unwrap()`
    /// * `a.successor() >= a`
    /// 
    /// For any `a` where `a.successor()` does overflow:
    /// 
    /// * `a.successor() == a`
    #[inline]
    #[unstable(feature = "step_trait_ext",
               reason = "recently added",
               issue = "42168")]
    fn successor_saturating(&self) -> Self {
        self.forward(1).unwrap_or_else(|| self.clone())
    }

    /// Returns the *successor* of `self` without overflow.
    /// 
    /// # Safety
    /// 
    /// It is undefined behavior if this operation exceeds the range of
    /// values supported by `Self`. If you cannot guarantee that this
    /// will not overflow, use `forward` or `successor` instead.
    /// 
    /// For any `a`, if there exists `b` such that `b > a`,
    /// it is safe to call `a.successor_unchecked()`.
    #[inline]
    #[unstable(feature = "unchecked_math",
               reason = "super niche optimization path",
               issue = "0")]
    unsafe fn successor_unchecked(&self) -> Self { self.successor() }

    /// Returns the value that would be obtained by taking the *predecessor*
    /// of `self` `count` times.
    ///
    /// Returns `None` if this would underflow the range of values supported by `Self`.
    ///
    /// # Invariants
    ///
    /// For any `a`, `n`, and `m` where `n + m` does not overflow:
    ///
    /// * `a.backward(n).and_then(|x| x.backward(m)) == a.backward(n + m)`
    /// * `a.backward(n)` equals `Step::predecessor` applied to `a` `n` times
    ///   * Corollary: `a.backward(0) == Some(a)`
    /// * `a.backward(n).unwrap() <= a`
    fn backward(&self, count: usize) -> Option<Self>;

    /// Returns the *predecessor* of `self`.
    ///
    /// If this would underflow the range of values supported by `Self`,
    /// this method is allowed to panic or wrap. Suggested behavior is
    /// to panic when debug assertions are enabled, and wrap otherwise.
    ///
    /// # Invariants
    ///
    /// For any `a` where `a.predecessor()` does not underflow:
    ///
    /// * `a == a.predecessor().successor()`
    /// * `a.predecessor() == a.backward(1).unwrap()`
    /// * `a.predecessor() <= a`
    #[inline]
    #[unstable(feature = "step_trait_ext",
               reason = "recently added",
               issue = "42168")]
    fn predecessor(&self) -> Self { self.backward(1).expect("underflow in `Step::predecessor`") }

    /// Returns the *predecessor* of `self`.
    ///
    /// If this would underflow the range of values supported by `Self`,
    /// this method is defined to return the input value instead.
    ///
    /// # Invariants
    ///
    /// For any `a` where `a.predecessor()` does not underflow:
    ///
    /// * `a == a.predecessor().successor()`
    /// * `a.predecessor() == a.backward(1).unwrap()`
    /// * `a.predecessor() <= a`
    /// 
    /// For any `a` where `a.predecessor()` does underflow:
    /// 
    /// * `a.predecessor() == a`
    #[inline]
    #[unstable(feature = "step_trait_ext",
               reason = "recently added",
               issue = "42168")]
    fn predecessor_saturating(&self) -> Self {
        self.backward(1).unwrap_or_else(|| self.clone())
    }

    /// Returns the *predecessor* of `self` without underflow.
    /// 
    /// # Safety
    /// 
    /// It is undefined behavior if this operation exceeds the range of
    /// values supported by `Self`. If you cannot guarantee that this
    /// will not underflow, use `backward` or `predecessor` instead.
    /// 
    /// For any `a`, if there exists `b` such that `b < a`,
    /// it is safe to call `a.successor_unchecked()`.
    #[inline]
    #[unstable(feature = "unchecked_math",
               reason = "super niche optimization path",
               issue = "0")]
    unsafe fn predecessor_unchecked(&self) -> Self { self.predecessor() }
}

Most of the work is taken from @SimonSapin's PR, just updated to current. Again, arithmetic and overflow handling with multiple integer types of different widths and signedness is tricky, careful review would be appreciated. I had to change a few of Simon's tests to get them to pass.

This could use a perf test to see how it impacts performance. Hopefully, due to the fact that this version of the redesign really just is removing replace_one/replace_zero and renaming the other functions to fit the description as successor/predecessor rather than add/sub, it shouldn't impact much. This also makes the potential impl to make RangeInclusive<char> finally work much more straightforward.

This breaks with published chalk 0.9.0, as it implements Step. chalk master no longer implements the trait.

@rust-highfive
Copy link
Collaborator

r? @joshtriplett

(rust_highfive has picked a reviewer for you, use r? to override)

@rust-highfive rust-highfive added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Jul 23, 2019
@rust-highfive
Copy link
Collaborator

The job mingw-check of your PR failed (raw log). Through arcane magic we have determined that the following fragments from the build log may contain information about the problem.

Click to expand the log.
2019-07-23T00:48:11.3263958Z ##[command]git remote add origin https://github.com/rust-lang/rust
2019-07-23T00:48:11.3460376Z ##[command]git config gc.auto 0
2019-07-23T00:48:11.3530955Z ##[command]git config --get-all http.https://github.com/rust-lang/rust.extraheader
2019-07-23T00:48:11.3595008Z ##[command]git config --get-all http.proxy
2019-07-23T00:48:11.3729327Z ##[command]git -c http.extraheader="AUTHORIZATION: basic ***" fetch --force --tags --prune --progress --no-recurse-submodules --depth=2 origin +refs/heads/*:refs/remotes/origin/* +refs/pull/62886/merge:refs/remotes/pull/62886/merge
---
2019-07-23T00:48:46.7767084Z do so (now or later) by using -b with the checkout command again. Example:
2019-07-23T00:48:46.7767447Z 
2019-07-23T00:48:46.7768548Z   git checkout -b <new-branch-name>
2019-07-23T00:48:46.7768901Z 
2019-07-23T00:48:46.7769246Z HEAD is now at 3378debe5 Merge a3dc7a74d6c7adff8db249836d1f318a24de2de7 into e649e903440bfd919bfc9db848c28df6d795a116
2019-07-23T00:48:46.7922513Z ##[section]Starting: Collect CPU-usage statistics in the background
2019-07-23T00:48:46.7925179Z ==============================================================================
2019-07-23T00:48:46.7925700Z Task         : Bash
2019-07-23T00:48:46.7925750Z Description  : Run a Bash script on macOS, Linux, or Windows
---
2019-07-23T00:54:41.0030717Z     Checking lock_api v0.1.3
2019-07-23T00:54:41.3517875Z    Compiling rustc_version v0.2.3
2019-07-23T00:54:43.2718731Z     Checking polonius-engine v0.9.0
2019-07-23T00:54:43.7102522Z     Checking chalk-engine v0.9.0
2019-07-23T00:54:43.8071744Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-07-23T00:54:43.8072228Z   --> <::chalk_macros::index::index_struct macros>:13:62
2019-07-23T00:54:43.8072458Z    |
2019-07-23T00:54:43.8072788Z 1  |   / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-23T00:54:43.8073120Z 2  |   | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-23T00:54:43.8073442Z 3  |   | struct $ n { $ vf value : usize , } impl $ n {
2019-07-23T00:54:43.8073759Z 4  |   | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-23T00:54:43.8074012Z ...    |
2019-07-23T00:54:43.8074334Z 13 |   | usize :: steps_between ( & start . value , & end . value ) } fn replace_one (
2019-07-23T00:54:43.8074649Z    |   |______________________________________________________________^
2019-07-23T00:54:43.8074944Z 14 |  || & mut self ) -> Self {
2019-07-23T00:54:43.8075283Z 15 |  || Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-07-23T00:54:43.8075681Z    |  ||________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-23T00:54:43.8075919Z ...    |
2019-07-23T00:54:43.8076226Z 23 |   | } impl From < usize > for $ n {
2019-07-23T00:54:43.8076545Z 24 |   | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-23T00:54:43.8076904Z    |   |________________________________________________________________- in this expansion of `index_struct!`
2019-07-23T00:54:43.8077382Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-07-23T00:54:43.8077603Z    |
2019-07-23T00:54:43.8077603Z    |
2019-07-23T00:54:43.8077857Z 15 | /   index_struct! {
2019-07-23T00:54:43.8079324Z 16 | |       pub(crate) struct StackIndex {
2019-07-23T00:54:43.8080032Z 17 | |           value: usize,
2019-07-23T00:54:43.8080693Z 19 | |   }
2019-07-23T00:54:43.8081022Z    | |___- in this macro invocation
2019-07-23T00:54:43.8081199Z 
2019-07-23T00:54:43.8081199Z 
2019-07-23T00:54:43.8081539Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-07-23T00:54:43.8081868Z   --> <::chalk_macros::index::index_struct macros>:15:66
2019-07-23T00:54:43.8082282Z    |
2019-07-23T00:54:43.8082642Z 1  |   / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-23T00:54:43.8083490Z 2  |   | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-23T00:54:43.8083860Z 3  |   | struct $ n { $ vf value : usize , } impl $ n {
2019-07-23T00:54:43.8084271Z 4  |   | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-23T00:54:43.8084560Z ...    |
2019-07-23T00:54:43.8084941Z 15 |   | Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-07-23T00:54:43.8085332Z    |   |__________________________________________________________________^
2019-07-23T00:54:43.8085707Z 16 |  || replace_zero ( & mut self ) -> Self {
2019-07-23T00:54:43.8086145Z 17 |  || Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-07-23T00:54:43.8086849Z    |  ||_________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-23T00:54:43.8087159Z ...    |
2019-07-23T00:54:43.8087685Z 23 |   | } impl From < usize > for $ n {
2019-07-23T00:54:43.8088748Z 24 |   | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-23T00:54:43.8089213Z    |   |________________________________________________________________- in this expansion of `index_struct!`
2019-07-23T00:54:43.8089839Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-07-23T00:54:43.8090085Z    |
2019-07-23T00:54:43.8090085Z    |
2019-07-23T00:54:43.8090527Z 15 | /   index_struct! {
2019-07-23T00:54:43.8090945Z 16 | |       pub(crate) struct StackIndex {
2019-07-23T00:54:43.8091276Z 17 | |           value: usize,
2019-07-23T00:54:43.8095687Z 19 | |   }
2019-07-23T00:54:43.8096699Z    | |___- in this macro invocation
2019-07-23T00:54:43.8096744Z 
2019-07-23T00:54:43.8096744Z 
2019-07-23T00:54:43.8097060Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-07-23T00:54:43.8100492Z   --> <::chalk_macros::index::index_struct macros>:17:67
2019-07-23T00:54:43.8101056Z    |
2019-07-23T00:54:43.8101459Z 1  |   / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-23T00:54:43.8101854Z 2  |   | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-23T00:54:43.8102389Z 3  |   | struct $ n { $ vf value : usize , } impl $ n {
2019-07-23T00:54:43.8102806Z 4  |   | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-23T00:54:43.8103070Z ...    |
2019-07-23T00:54:43.8103466Z 17 |   | Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-07-23T00:54:43.8104049Z    |  _|___________________________________________________________________^
2019-07-23T00:54:43.8104466Z 18 | | | & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-07-23T00:54:43.8104957Z    | |_|___________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-23T00:54:43.8105242Z ...    |
2019-07-23T00:54:43.8105620Z 23 |   | } impl From < usize > for $ n {
2019-07-23T00:54:43.8106008Z 24 |   | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-23T00:54:43.8106446Z    |   |________________________________________________________________- in this expansion of `index_struct!`
2019-07-23T00:54:43.8107275Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-07-23T00:54:43.8107515Z    |
2019-07-23T00:54:43.8107515Z    |
2019-07-23T00:54:43.8107825Z 15 |  /  index_struct! {
2019-07-23T00:54:43.8108887Z 16 |  |      pub(crate) struct StackIndex {
2019-07-23T00:54:43.8109287Z 17 |  |          value: usize,
2019-07-23T00:54:43.8109607Z 18 |  |      }
2019-07-23T00:54:43.8109947Z 19 |  |  }
2019-07-23T00:54:43.8110276Z    |  |__- in this macro invocation
2019-07-23T00:54:43.8110406Z 
2019-07-23T00:54:43.8110756Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
2019-07-23T00:54:43.8111070Z   --> <::chalk_macros::index::index_struct macros>:18:77
2019-07-23T00:54:43.8111311Z    |
2019-07-23T00:54:43.8111948Z 1  |   / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-23T00:54:43.8112332Z 2  |   | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-23T00:54:43.8112681Z 3  |   | struct $ n { $ vf value : usize , } impl $ n {
2019-07-23T00:54:43.8113310Z 4  |   | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-23T00:54:43.8113582Z ...    |
2019-07-23T00:54:43.8113993Z 18 |   | & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-07-23T00:54:43.8114395Z    |  _|_____________________________________________________________________________^
2019-07-23T00:54:43.8114925Z 19 | | | sub_one ( & self ) -> Self {
2019-07-23T00:54:43.8115339Z 20 | | | Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-07-23T00:54:43.8115781Z    | |_|________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-23T00:54:43.8116078Z ...    |
2019-07-23T00:54:43.8116406Z 23 |   | } impl From < usize > for $ n {
2019-07-23T00:54:43.8116797Z 24 |   | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-23T00:54:43.8117197Z    |   |________________________________________________________________- in this expansion of `index_struct!`
2019-07-23T00:54:43.8119099Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-07-23T00:54:43.8119475Z    |
2019-07-23T00:54:43.8119475Z    |
2019-07-23T00:54:43.8238889Z 15 |  /  index_struct! {
2019-07-23T00:54:43.8239365Z 16 |  |      pub(crate) struct StackIndex {
2019-07-23T00:54:43.8239710Z 17 |  |          value: usize,
2019-07-23T00:54:43.8240058Z 18 |  |      }
2019-07-23T00:54:43.8240610Z 19 |  |  }
2019-07-23T00:54:43.8240943Z    |  |__- in this macro invocation
2019-07-23T00:54:43.8241014Z 
2019-07-23T00:54:43.8241331Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-07-23T00:54:43.8241635Z   --> <::chalk_macros::index::index_struct macros>:20:58
2019-07-23T00:54:43.8242071Z    |
2019-07-23T00:54:43.8242411Z 1  |   / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-23T00:54:43.8242762Z 2  |   | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-23T00:54:43.8243126Z 3  |   | struct $ n { $ vf value : usize , } impl $ n {
2019-07-23T00:54:43.8243480Z 4  |   | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-23T00:54:43.8243752Z ...    |
2019-07-23T00:54:43.8244095Z 20 |   | Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-07-23T00:54:43.8244434Z    |  _|__________________________________________________________^
2019-07-23T00:54:43.8244797Z 21 | | | & self , n : usize ) -> Option < Self > {
2019-07-23T00:54:43.8245185Z 22 | | | usize :: add_usize ( & self . value , n ) . map ( | value | Self { value } ) }
2019-07-23T00:54:43.8245640Z    | |_|______________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-23T00:54:43.8245966Z 23 |   | } impl From < usize > for $ n {
2019-07-23T00:54:43.8246328Z 24 |   | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-23T00:54:43.8246697Z    |   |________________________________________________________________- in this expansion of `index_struct!`
2019-07-23T00:54:43.8247360Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-07-23T00:54:43.8247791Z    |
2019-07-23T00:54:43.8247791Z    |
2019-07-23T00:54:43.8248082Z 15 | /   index_struct! {
2019-07-23T00:54:43.8248980Z 16 | |       pub(crate) struct StackIndex {
2019-07-23T00:54:43.8249311Z 17 | |           value: usize,
2019-07-23T00:54:43.8250124Z 19 | |   }
2019-07-23T00:54:43.8250447Z    | |___- in this macro invocation
2019-07-23T00:54:43.8250513Z 
2019-07-23T00:54:43.8250513Z 
2019-07-23T00:54:44.7729867Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7734035Z   --> <::chalk_macros::index::index_struct macros>:13:62
2019-07-23T00:54:44.7734250Z    |
2019-07-23T00:54:44.7734507Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-23T00:54:44.7734801Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-23T00:54:44.7735071Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-23T00:54:44.7735363Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-23T00:54:44.7735545Z ...   |
2019-07-23T00:54:44.7736279Z 13 |  | usize :: steps_between ( & start . value , & end . value ) } fn replace_one (
2019-07-23T00:54:44.7736600Z    |  |______________________________________________________________^
2019-07-23T00:54:44.7736845Z 14 | || & mut self ) -> Self {
2019-07-23T00:54:44.7737152Z 15 | || Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-07-23T00:54:44.7737478Z    | ||________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7737691Z ...   |
2019-07-23T00:54:44.7737932Z 23 |  | } impl From < usize > for $ n {
2019-07-23T00:54:44.7738199Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-23T00:54:44.7739095Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-23T00:54:44.7739916Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-07-23T00:54:44.7740348Z    |
2019-07-23T00:54:44.7740348Z    |
2019-07-23T00:54:44.7740688Z 34 | /  index_struct! {
2019-07-23T00:54:44.7741023Z 35 | |      pub(crate) struct AnswerIndex {
2019-07-23T00:54:44.7741316Z 36 | |          value: usize,
2019-07-23T00:54:44.7742481Z 38 | |  }
2019-07-23T00:54:44.7742719Z    | |__- in this macro invocation
2019-07-23T00:54:44.7742760Z 
2019-07-23T00:54:44.7742760Z 
2019-07-23T00:54:44.7743007Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7743227Z   --> <::chalk_macros::index::index_struct macros>:15:66
2019-07-23T00:54:44.7743396Z    |
2019-07-23T00:54:44.7744018Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-23T00:54:44.7744292Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-23T00:54:44.7744571Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-23T00:54:44.7744849Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-23T00:54:44.7745033Z ...   |
2019-07-23T00:54:44.7745312Z 15 |  | Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-07-23T00:54:44.7745565Z    |  |__________________________________________________________________^
2019-07-23T00:54:44.7745832Z 16 | || replace_zero ( & mut self ) -> Self {
2019-07-23T00:54:44.7746127Z 17 | || Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-07-23T00:54:44.7746446Z    | ||_________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7746656Z ...   |
2019-07-23T00:54:44.7746895Z 23 |  | } impl From < usize > for $ n {
2019-07-23T00:54:44.7747182Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-23T00:54:44.7747483Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-23T00:54:44.7747968Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-07-23T00:54:44.7748158Z    |
2019-07-23T00:54:44.7748158Z    |
2019-07-23T00:54:44.7749695Z 34 | /  index_struct! {
2019-07-23T00:54:44.7750117Z 35 | |      pub(crate) struct AnswerIndex {
2019-07-23T00:54:44.7750414Z 36 | |          value: usize,
2019-07-23T00:54:44.7751150Z 38 | |  }
2019-07-23T00:54:44.7751447Z    | |__- in this macro invocation
2019-07-23T00:54:44.7751506Z 
2019-07-23T00:54:44.7751506Z 
2019-07-23T00:54:44.7752092Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7752311Z   --> <::chalk_macros::index::index_struct macros>:17:67
2019-07-23T00:54:44.7752680Z    |
2019-07-23T00:54:44.7753159Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-23T00:54:44.7753480Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-23T00:54:44.7753803Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-23T00:54:44.7754279Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-23T00:54:44.7754509Z ...   |
2019-07-23T00:54:44.7754811Z 17 |  | Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-07-23T00:54:44.7755100Z    |  |___________________________________________________________________^
2019-07-23T00:54:44.7755607Z 18 | || & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-07-23T00:54:44.7756111Z    | ||___________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7756334Z ...   |
2019-07-23T00:54:44.7756755Z 23 |  | } impl From < usize > for $ n {
2019-07-23T00:54:44.7757055Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-23T00:54:44.7757364Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-23T00:54:44.7757887Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-07-23T00:54:44.7758087Z    |
2019-07-23T00:54:44.7758087Z    |
2019-07-23T00:54:44.7758870Z 34 | /  index_struct! {
2019-07-23T00:54:44.7759233Z 35 | |      pub(crate) struct AnswerIndex {
2019-07-23T00:54:44.7759527Z 36 | |          value: usize,
2019-07-23T00:54:44.7760244Z 38 | |  }
2019-07-23T00:54:44.7760537Z    | |__- in this macro invocation
2019-07-23T00:54:44.7760594Z 
2019-07-23T00:54:44.7760594Z 
2019-07-23T00:54:44.7760875Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7761143Z   --> <::chalk_macros::index::index_struct macros>:18:77
2019-07-23T00:54:44.7761370Z    |
2019-07-23T00:54:44.7761711Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-23T00:54:44.7762219Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-23T00:54:44.7762569Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-23T00:54:44.7762914Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-23T00:54:44.7763165Z ...   |
2019-07-23T00:54:44.7764196Z 18 |  | & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-07-23T00:54:44.7764477Z    |  |_____________________________________________________________________________^
2019-07-23T00:54:44.7764760Z 19 | || sub_one ( & self ) -> Self {
2019-07-23T00:54:44.7765063Z 20 | || Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-07-23T00:54:44.7765411Z    | ||________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7765621Z ...   |
2019-07-23T00:54:44.7765874Z 23 |  | } impl From < usize > for $ n {
2019-07-23T00:54:44.7766180Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-23T00:54:44.7766493Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-23T00:54:44.7767008Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-07-23T00:54:44.7767229Z    |
2019-07-23T00:54:44.7767229Z    |
2019-07-23T00:54:44.7767684Z 34 | /  index_struct! {
2019-07-23T00:54:44.7767973Z 35 | |      pub(crate) struct AnswerIndex {
2019-07-23T00:54:44.7768582Z 36 | |          value: usize,
2019-07-23T00:54:44.7769322Z 38 | |  }
2019-07-23T00:54:44.7769632Z    | |__- in this macro invocation
2019-07-23T00:54:44.7769679Z 
2019-07-23T00:54:44.7769679Z 
2019-07-23T00:54:44.7769953Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7770244Z   --> <::chalk_macros::index::index_struct macros>:20:58
2019-07-23T00:54:44.7770456Z    |
2019-07-23T00:54:44.7770795Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-23T00:54:44.7771167Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-23T00:54:44.7771510Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-23T00:54:44.7772019Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-23T00:54:44.7772243Z ...   |
2019-07-23T00:54:44.7772528Z 20 |  | Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-07-23T00:54:44.7772817Z    |  |__________________________________________________________^
2019-07-23T00:54:44.7773097Z 21 | || & self , n : usize ) -> Option < Self > {
2019-07-23T00:54:44.7773418Z 22 | || usize :: add_usize ( & self . value , n ) . map ( | value | Self { value } ) }
2019-07-23T00:54:44.7773797Z    | ||______________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7774221Z 23 |  | } impl From < usize > for $ n {
2019-07-23T00:54:44.7774520Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-23T00:54:44.7774834Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-23T00:54:44.7775369Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-07-23T00:54:44.7775571Z    |
2019-07-23T00:54:44.7775571Z    |
2019-07-23T00:54:44.7775823Z 34 | /  index_struct! {
2019-07-23T00:54:44.7776072Z 35 | |      pub(crate) struct AnswerIndex {
2019-07-23T00:54:44.7776309Z 36 | |          value: usize,
2019-07-23T00:54:44.7776859Z 38 | |  }
2019-07-23T00:54:44.7777270Z    | |__- in this macro invocation
2019-07-23T00:54:44.7777308Z 
2019-07-23T00:54:44.7777308Z 
2019-07-23T00:54:44.7777526Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7777739Z   --> <::chalk_macros::index::index_struct macros>:13:62
2019-07-23T00:54:44.7778100Z    |
2019-07-23T00:54:44.7778782Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-23T00:54:44.7779167Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-23T00:54:44.7779508Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-23T00:54:44.7779868Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-23T00:54:44.7780130Z ...   |
2019-07-23T00:54:44.7780476Z 13 |  | usize :: steps_between ( & start . value , & end . value ) } fn replace_one (
2019-07-23T00:54:44.7780800Z    |  |______________________________________________________________^
2019-07-23T00:54:44.7781133Z 14 | || & mut self ) -> Self {
2019-07-23T00:54:44.7781498Z 15 | || Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-07-23T00:54:44.7782121Z    | ||________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7782334Z ...   |
2019-07-23T00:54:44.7782610Z 23 |  | } impl From < usize > for $ n {
2019-07-23T00:54:44.7782903Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-23T00:54:44.7783245Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-23T00:54:44.7783770Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-07-23T00:54:44.7784161Z    |
2019-07-23T00:54:44.7784161Z    |
2019-07-23T00:54:44.7784392Z 81 | /  index_struct! {
2019-07-23T00:54:44.7784652Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-07-23T00:54:44.7784911Z 83 | |          value: usize,
2019-07-23T00:54:44.7785599Z 85 | |  }
2019-07-23T00:54:44.7785855Z    | |__- in this macro invocation
2019-07-23T00:54:44.7785885Z 
2019-07-23T00:54:44.7785885Z 
2019-07-23T00:54:44.7786102Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7786334Z   --> <::chalk_macros::index::index_struct macros>:15:66
2019-07-23T00:54:44.7786500Z    |
2019-07-23T00:54:44.7786767Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-23T00:54:44.7787065Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-23T00:54:44.7787334Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-23T00:54:44.7787636Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-23T00:54:44.7787865Z ...   |
2019-07-23T00:54:44.7788139Z 15 |  | Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-07-23T00:54:44.7789113Z    |  |__________________________________________________________________^
2019-07-23T00:54:44.7789483Z 16 | || replace_zero ( & mut self ) -> Self {
2019-07-23T00:54:44.7789877Z 17 | || Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-07-23T00:54:44.7790291Z    | ||_________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7790539Z ...   |
2019-07-23T00:54:44.7790863Z 23 |  | } impl From < usize > for $ n {
2019-07-23T00:54:44.7791209Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-23T00:54:44.7791616Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-23T00:54:44.7792633Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-07-23T00:54:44.7792821Z    |
2019-07-23T00:54:44.7792821Z    |
2019-07-23T00:54:44.7793225Z 81 | /  index_struct! {
2019-07-23T00:54:44.7793514Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-07-23T00:54:44.7793762Z 83 | |          value: usize,
2019-07-23T00:54:44.7794846Z 85 | |  }
2019-07-23T00:54:44.7795074Z    | |__- in this macro invocation
2019-07-23T00:54:44.7795104Z 
2019-07-23T00:54:44.7795104Z 
2019-07-23T00:54:44.7795333Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7795539Z   --> <::chalk_macros::index::index_struct macros>:17:67
2019-07-23T00:54:44.7795698Z    |
2019-07-23T00:54:44.7795978Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-23T00:54:44.7796260Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-23T00:54:44.7796533Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-23T00:54:44.7796810Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-23T00:54:44.7796995Z ...   |
2019-07-23T00:54:44.7797276Z 17 |  | Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-07-23T00:54:44.7797681Z    |  |___________________________________________________________________^
2019-07-23T00:54:44.7797956Z 18 | || & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-07-23T00:54:44.7798467Z    | ||___________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7799031Z ...   |
2019-07-23T00:54:44.7799367Z 23 |  | } impl From < usize > for $ n {
2019-07-23T00:54:44.7799712Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-23T00:54:44.7800119Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-23T00:54:44.7800756Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-07-23T00:54:44.7801004Z    |
2019-07-23T00:54:44.7801004Z    |
2019-07-23T00:54:44.7801285Z 81 | /  index_struct! {
2019-07-23T00:54:44.7801624Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-07-23T00:54:44.7801921Z 83 | |          value: usize,
2019-07-23T00:54:44.7802649Z 85 | |  }
2019-07-23T00:54:44.7802882Z    | |__- in this macro invocation
2019-07-23T00:54:44.7802913Z 
2019-07-23T00:54:44.7802913Z 
2019-07-23T00:54:44.7803329Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7803550Z   --> <::chalk_macros::index::index_struct macros>:18:77
2019-07-23T00:54:44.7803719Z    |
2019-07-23T00:54:44.7804332Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-23T00:54:44.7804607Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-23T00:54:44.7804869Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-23T00:54:44.7805165Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-23T00:54:44.7805351Z ...   |
2019-07-23T00:54:44.7805633Z 18 |  | & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-07-23T00:54:44.7805896Z    |  |_____________________________________________________________________________^
2019-07-23T00:54:44.7806151Z 19 | || sub_one ( & self ) -> Self {
2019-07-23T00:54:44.7806604Z 20 | || Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-07-23T00:54:44.7806896Z    | ||________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7807095Z ...   |
2019-07-23T00:54:44.7807317Z 23 |  | } impl From < usize > for $ n {
2019-07-23T00:54:44.7824505Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-23T00:54:44.7824869Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-23T00:54:44.7825508Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-07-23T00:54:44.7825683Z    |
2019-07-23T00:54:44.7825683Z    |
2019-07-23T00:54:44.7825925Z 81 | /  index_struct! {
2019-07-23T00:54:44.7826260Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-07-23T00:54:44.7826689Z 83 | |          value: usize,
2019-07-23T00:54:44.7827253Z 85 | |  }
2019-07-23T00:54:44.7827481Z    | |__- in this macro invocation
2019-07-23T00:54:44.7827530Z 
2019-07-23T00:54:44.7827530Z 
2019-07-23T00:54:44.7827743Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7827950Z   --> <::chalk_macros::index::index_struct macros>:20:58
2019-07-23T00:54:44.7828130Z    |
2019-07-23T00:54:44.7828835Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-23T00:54:44.7829214Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-23T00:54:44.7829576Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-23T00:54:44.7829930Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-23T00:54:44.7830191Z ...   |
2019-07-23T00:54:44.7830537Z 20 |  | Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-07-23T00:54:44.7830856Z    |  |__________________________________________________________^
2019-07-23T00:54:44.7831218Z 21 | || & self , n : usize ) -> Option < Self > {
2019-07-23T00:54:44.7831596Z 22 | || usize :: add_usize ( & self . value , n ) . map ( | value | Self { value } ) }
2019-07-23T00:54:44.7832350Z    | ||______________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7832617Z 23 |  | } impl From < usize > for $ n {
2019-07-23T00:54:44.7832897Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-23T00:54:44.7833235Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-23T00:54:44.7833810Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-07-23T00:54:44.7834347Z    |
2019-07-23T00:54:44.7834347Z    |
2019-07-23T00:54:44.7834564Z 81 | /  index_struct! {
2019-07-23T00:54:44.7834830Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-07-23T00:54:44.7835056Z 83 | |          value: usize,
2019-07-23T00:54:44.7835763Z 85 | |  }
2019-07-23T00:54:44.7835996Z    | |__- in this macro invocation
2019-07-23T00:54:44.7836288Z 
2019-07-23T00:54:44.7836288Z 
2019-07-23T00:54:44.7836744Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7837158Z   --> <::chalk_macros::index::index_struct macros>:13:62
2019-07-23T00:54:44.7837556Z    |
2019-07-23T00:54:44.7837853Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-23T00:54:44.7838706Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-23T00:54:44.7839119Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-23T00:54:44.7839648Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-23T00:54:44.7839935Z ...   |
2019-07-23T00:54:44.7840467Z 13 |  | usize :: steps_between ( & start . value , & end . value ) } fn replace_one (
2019-07-23T00:54:44.7840833Z    |  |______________________________________________________________^
2019-07-23T00:54:44.7841359Z 14 | || & mut self ) -> Self {
2019-07-23T00:54:44.7841746Z 15 | || Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-07-23T00:54:44.7842595Z    | ||________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7842821Z ...   |
2019-07-23T00:54:44.7843073Z 23 |  | } impl From < usize > for $ n {
2019-07-23T00:54:44.7843375Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-23T00:54:44.7858751Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-23T00:54:44.7859632Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:91:1
2019-07-23T00:54:44.7859846Z    |
2019-07-23T00:54:44.7859846Z    |
2019-07-23T00:54:44.7860151Z 91 | /  index_struct! {
2019-07-23T00:54:44.7860444Z 92 | |      struct StackIndex {
2019-07-23T00:54:44.7860735Z 93 | |          value: usize,
2019-07-23T00:54:44.7861422Z 95 | |  }
2019-07-23T00:54:44.7861739Z    | |__- in this macro invocation
2019-07-23T00:54:44.7861781Z 
2019-07-23T00:54:44.7861781Z 
2019-07-23T00:54:44.7862278Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7862538Z   --> <::chalk_macros::index::index_struct macros>:15:66
2019-07-23T00:54:44.7862765Z    |
2019-07-23T00:54:44.7863093Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-23T00:54:44.7863465Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-23T00:54:44.7863945Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-23T00:54:44.7864598Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-23T00:54:44.7865061Z ...   |
2019-07-23T00:54:44.7865504Z 15 |  | Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-07-23T00:54:44.7865774Z    |  |__________________________________________________________________^
2019-07-23T00:54:44.7866072Z 16 | || replace_zero ( & mut self ) -> Self {
2019-07-23T00:54:44.7866378Z 17 | || Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-07-23T00:54:44.7866734Z    | ||_________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7866938Z ...   |
2019-07-23T00:54:44.7867203Z 23 |  | } impl From < usize > for $ n {
2019-07-23T00:54:44.7867499Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-23T00:54:44.7867891Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-23T00:54:44.7868892Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:91:1
2019-07-23T00:54:44.7869135Z    |
2019-07-23T00:54:44.7869135Z    |
2019-07-23T00:54:44.7869416Z 91 | /  index_struct! {
2019-07-23T00:54:44.7869711Z 92 | |      struct StackIndex {
2019-07-23T00:54:44.7870156Z 93 | |          value: usize,
2019-07-23T00:54:44.7870715Z 95 | |  }
2019-07-23T00:54:44.7871026Z    | |__- in this macro invocation
2019-07-23T00:54:44.7871064Z 
2019-07-23T00:54:44.7871064Z 
2019-07-23T00:54:44.7871333Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7871624Z   --> <::chalk_macros::index::index_struct macros>:17:67
2019-07-23T00:54:44.7871988Z    |
2019-07-23T00:54:44.7872459Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-23T00:54:44.7872786Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-23T00:54:44.7873068Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-23T00:54:44.7873383Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-23T00:54:44.7873587Z ...   |
2019-07-23T00:54:44.7874033Z 17 |  | Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-07-23T00:54:44.7874321Z    |  |___________________________________________________________________^
2019-07-23T00:54:44.7874628Z 18 | || & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-07-23T00:54:44.7874991Z    | ||___________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7875200Z ...   |
2019-07-23T00:54:44.7875449Z 23 |  | } impl From < usize > for $ n {
2019-07-23T00:54:44.7875751Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-23T00:54:44.7876067Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-23T00:54:44.7876629Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:91:1
2019-07-23T00:54:44.7876877Z    |
2019-07-23T00:54:44.7876877Z    |
2019-07-23T00:54:44.7877128Z 91 | /  index_struct! {
2019-07-23T00:54:44.7877389Z 92 | |      struct StackIndex {
2019-07-23T00:54:44.7877712Z 93 | |          value: usize,
2019-07-23T00:54:44.7878305Z 95 | |  }
2019-07-23T00:54:44.7878978Z    | |__- in this macro invocation
2019-07-23T00:54:44.7879017Z 
2019-07-23T00:54:44.7879017Z 
2019-07-23T00:54:44.7879318Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7879616Z   --> <::chalk_macros::index::index_struct macros>:18:77
2019-07-23T00:54:44.7879829Z    |
2019-07-23T00:54:44.7880169Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-23T00:54:44.7880544Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-23T00:54:44.7880885Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-23T00:54:44.7881260Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-23T00:54:44.7881507Z ...   |
2019-07-23T00:54:44.7882075Z 18 |  | & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-07-23T00:54:44.7882388Z    |  |_____________________________________________________________________________^
2019-07-23T00:54:44.7882679Z 19 | || sub_one ( & self ) -> Self {
2019-07-23T00:54:44.7882997Z 20 | || Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-07-23T00:54:44.7883366Z    | ||________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-23T00:54:44.7883580Z ...   |
2019-07-23T00:54:44.7884024Z 23 |  | } impl From < usize > for $ n {
2019-07-23T00:54:44.7884314Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-23T00:54:44.7884658Z    |  |________________________________________________________________- in this expansion of `index_struct!`

I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact @TimNN. (Feature Requests)

Copy link
Contributor Author

@CAD97 CAD97 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here's some misc. notes.

src/libcore/iter/range.rs Show resolved Hide resolved
///
/// * `a == a.successor().unwrap().predecessor().unwrap()`
#[inline]
fn successor(&self) -> Self { self.forward(1).expect("overflow in `Step::successor`") }
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

An additional possible optimization is to make successor/predecessor unsafe, and disallow calling them when it would overflow/underflow. This would allow an implementation on a type with restricted validity (e.g. char) to avoid checking the outside bounds at all.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd love to see some exploration of this, as getting Range to use nuw/nsw now that we have unchecked_add and friends might help with some of the problematic optimization cases.

My intuition, though, is that it should be a separate

unsafe fn successor_unchecked(&self) -> Self { self.successor() }

so that safe code can consume the trait, even if it can't implement it.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Safe code can always use checked advancing (forward(1)).

I'll make them unchecked and suggest safe code to use the checked stepped version. That gives a real reason to having the shortcut ones for single steps.

Copy link
Contributor Author

@CAD97 CAD97 Aug 17, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually: what does RangeFrom do in this world?

for i in 0u8.. { dbg!(i) } currently panics in debug mode and wraps infinitely in release mode. If we just make successor use unchecked_add, then it's UB in both. So I guess RangeFrom should consider that it can't go beyond the end of it's value's domain and use self.start.forward(1).expect("overflow in `Range::next`") rather than self.start.successor()?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While safe code could always use forward(1), and that'd be fine in the standard library, if the point of the trait is that it could get stabilized one day, I think having .successor() be a thing that works in safe code is important. And I think your point about RangeFrom is a great reason to have distinct successor and successor_unchecked, since the library will use both.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, RangeFrom is probably better off using .forward(1).expect() anyway, as the current behavior (panic in debug, wrap in release) is debatably a bug and it should always panic. Especially since the panic means that even currently .nth(n) is not equivalent to n .next()s, as nth will panic if the returned value would wrap around. [playground]

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The real issue with RangeFrom is that is panics before returning the largest value (#25708). What it actually needs is either a breaking change, a wrapping_successor or a saturating_successor.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note that saturating_successor can be written as n.forward(1).unwrap_or(n). successor_unchecked is "basically" n.forward(1).unwrap_or_else(unreachable_unchecked) but easier on LLVM.

src/libcore/iter/range.rs Outdated Show resolved Hide resolved
src/libcore/iter/range.rs Outdated Show resolved Hide resolved
src/libcore/tests/iter.rs Show resolved Hide resolved
src/libcore/tests/iter.rs Show resolved Hide resolved
@CAD97
Copy link
Contributor Author

CAD97 commented Jul 24, 2019

This is effectively blocked on a chalk upgrade, as the current used version of chalk implements Step but chalk master doesn't. I managed to get chalk building by checking out master as a submodule and pointing at that (with multiple modifications to get it to pass x.py test's stricter requirements), but elsewhere in the compiler (i.e. librustc_traits/chalk_context) use parts of chalk that have undergone changes between 0.9 and master, and I'm unequipped to make that update (and it definitely shouldn't be part of this PR anyway).

@rust-highfive
Copy link
Collaborator

The job mingw-check of your PR failed (raw log). Through arcane magic we have determined that the following fragments from the build log may contain information about the problem.

Click to expand the log.
2019-07-24T01:35:56.9796823Z ##[command]git remote add origin https://github.com/rust-lang/rust
2019-07-24T01:35:56.9983665Z ##[command]git config gc.auto 0
2019-07-24T01:35:57.0080290Z ##[command]git config --get-all http.https://github.com/rust-lang/rust.extraheader
2019-07-24T01:35:57.0136375Z ##[command]git config --get-all http.proxy
2019-07-24T01:35:57.0353660Z ##[command]git -c http.extraheader="AUTHORIZATION: basic ***" fetch --force --tags --prune --progress --no-recurse-submodules --depth=2 origin +refs/heads/*:refs/remotes/origin/* +refs/pull/62886/merge:refs/remotes/pull/62886/merge
---
2019-07-24T01:36:32.7715422Z do so (now or later) by using -b with the checkout command again. Example:
2019-07-24T01:36:32.7715455Z 
2019-07-24T01:36:32.7715660Z   git checkout -b <new-branch-name>
2019-07-24T01:36:32.7715712Z 
2019-07-24T01:36:32.7715760Z HEAD is now at abd745e64 Merge dcd6c51cf7338ba86f1a28a856c6145653098890 into a7f28678bbf4e16893bb6a718e427504167a9494
2019-07-24T01:36:32.7871028Z ##[section]Starting: Collect CPU-usage statistics in the background
2019-07-24T01:36:32.7874417Z ==============================================================================
2019-07-24T01:36:32.7874478Z Task         : Bash
2019-07-24T01:36:32.7874543Z Description  : Run a Bash script on macOS, Linux, or Windows
---
2019-07-24T01:45:11.5519366Z     Checking lock_api v0.1.3
2019-07-24T01:45:12.0899269Z     Checking polonius-engine v0.9.0
2019-07-24T01:45:12.7438065Z    Compiling rustc_version v0.2.3
2019-07-24T01:45:14.5785687Z     Checking chalk-engine v0.9.0
2019-07-24T01:45:14.6733228Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-07-24T01:45:14.6733638Z   --> <::chalk_macros::index::index_struct macros>:13:62
2019-07-24T01:45:14.6733892Z    |
2019-07-24T01:45:14.6734761Z 1  |   / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-24T01:45:14.6735575Z 2  |   | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-24T01:45:14.6736123Z 3  |   | struct $ n { $ vf value : usize , } impl $ n {
2019-07-24T01:45:14.6736570Z 4  |   | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-24T01:45:14.6736821Z ...    |
2019-07-24T01:45:14.6737195Z 13 |   | usize :: steps_between ( & start . value , & end . value ) } fn replace_one (
2019-07-24T01:45:14.6737692Z    |   |______________________________________________________________^
2019-07-24T01:45:14.6738747Z 14 |  || & mut self ) -> Self {
2019-07-24T01:45:14.6739281Z 15 |  || Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-07-24T01:45:14.6739931Z    |  ||________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-24T01:45:14.6740225Z ...    |
2019-07-24T01:45:14.6740545Z 23 |   | } impl From < usize > for $ n {
2019-07-24T01:45:14.6740923Z 24 |   | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-24T01:45:14.6741321Z    |   |________________________________________________________________- in this expansion of `index_struct!`
2019-07-24T01:45:14.6741887Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-07-24T01:45:14.6742106Z    |
2019-07-24T01:45:14.6742106Z    |
2019-07-24T01:45:14.6742412Z 15 | /   index_struct! {
2019-07-24T01:45:14.6742741Z 16 | |       pub(crate) struct StackIndex {
2019-07-24T01:45:14.6743049Z 17 | |           value: usize,
2019-07-24T01:45:14.6743641Z 19 | |   }
2019-07-24T01:45:14.6743938Z    | |___- in this macro invocation
2019-07-24T01:45:14.6743998Z 
2019-07-24T01:45:14.6743998Z 
2019-07-24T01:45:14.6757702Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-07-24T01:45:14.6760885Z   --> <::chalk_macros::index::index_struct macros>:15:66
2019-07-24T01:45:14.6763846Z    |
2019-07-24T01:45:14.6769432Z 1  |   / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-24T01:45:14.6795776Z 2  |   | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-24T01:45:14.6800828Z 3  |   | struct $ n { $ vf value : usize , } impl $ n {
2019-07-24T01:45:14.6801482Z 4  |   | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-24T01:45:14.6801921Z ...    |
2019-07-24T01:45:14.6802665Z 15 |   | Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-07-24T01:45:14.6803191Z    |   |__________________________________________________________________^
2019-07-24T01:45:14.6804469Z 16 |  || replace_zero ( & mut self ) -> Self {
2019-07-24T01:45:14.6805302Z 17 |  || Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-07-24T01:45:14.6806212Z    |  ||_________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-24T01:45:14.6806655Z ...    |
2019-07-24T01:45:14.6807159Z 23 |   | } impl From < usize > for $ n {
2019-07-24T01:45:14.6807685Z 24 |   | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-24T01:45:14.6808413Z    |   |________________________________________________________________- in this expansion of `index_struct!`
2019-07-24T01:45:14.6809416Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-07-24T01:45:14.6809955Z    |
2019-07-24T01:45:14.6809955Z    |
2019-07-24T01:45:14.6810624Z 15 | /   index_struct! {
2019-07-24T01:45:14.6811090Z 16 | |       pub(crate) struct StackIndex {
2019-07-24T01:45:14.6811537Z 17 | |           value: usize,
2019-07-24T01:45:14.6812444Z 19 | |   }
2019-07-24T01:45:14.6812908Z    | |___- in this macro invocation
2019-07-24T01:45:14.6813069Z 
2019-07-24T01:45:14.6813069Z 
2019-07-24T01:45:14.6813479Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-07-24T01:45:14.6813939Z   --> <::chalk_macros::index::index_struct macros>:17:67
2019-07-24T01:45:14.6814315Z    |
2019-07-24T01:45:14.6836864Z 1  |   / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-24T01:45:14.6837444Z 2  |   | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-24T01:45:14.6837874Z 3  |   | struct $ n { $ vf value : usize , } impl $ n {
2019-07-24T01:45:14.6863437Z 4  |   | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-24T01:45:14.6872982Z ...    |
2019-07-24T01:45:14.6879369Z 17 |   | Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-07-24T01:45:14.6889309Z    |  _|___________________________________________________________________^
2019-07-24T01:45:14.6895618Z 18 | | | & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-07-24T01:45:14.6906371Z    | |_|___________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-24T01:45:14.6922920Z ...    |
2019-07-24T01:45:14.6955464Z 23 |   | } impl From < usize > for $ n {
2019-07-24T01:45:14.6955954Z 24 |   | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-24T01:45:14.6956404Z    |   |________________________________________________________________- in this expansion of `index_struct!`
2019-07-24T01:45:14.6956997Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-07-24T01:45:14.6957221Z    |
2019-07-24T01:45:14.6957221Z    |
2019-07-24T01:45:14.6957562Z 15 |  /  index_struct! {
2019-07-24T01:45:14.6957888Z 16 |  |      pub(crate) struct StackIndex {
2019-07-24T01:45:14.6958223Z 17 |  |          value: usize,
2019-07-24T01:45:14.6958538Z 18 |  |      }
2019-07-24T01:45:14.6958833Z 19 |  |  }
2019-07-24T01:45:14.6959172Z    |  |__- in this macro invocation
2019-07-24T01:45:14.6959214Z 
2019-07-24T01:45:14.6960538Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
2019-07-24T01:45:14.6960941Z   --> <::chalk_macros::index::index_struct macros>:18:77
2019-07-24T01:45:14.6961171Z    |
2019-07-24T01:45:14.6961821Z 1  |   / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-24T01:45:14.6962469Z 2  |   | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-24T01:45:14.6962879Z 3  |   | struct $ n { $ vf value : usize , } impl $ n {
2019-07-24T01:45:14.6963246Z 4  |   | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-24T01:45:14.6963655Z ...    |
2019-07-24T01:45:14.6964019Z 18 |   | & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-07-24T01:45:14.6964667Z    |  _|_____________________________________________________________________________^
2019-07-24T01:45:14.6965375Z 19 | | | sub_one ( & self ) -> Self {
2019-07-24T01:45:14.6965766Z 20 | | | Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-07-24T01:45:14.6966208Z    | |_|________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-24T01:45:14.6966474Z ...    |
2019-07-24T01:45:14.6966814Z 23 |   | } impl From < usize > for $ n {
2019-07-24T01:45:14.6967175Z 24 |   | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-24T01:45:14.6967563Z    |   |________________________________________________________________- in this expansion of `index_struct!`
2019-07-24T01:45:14.6968350Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-07-24T01:45:14.6968592Z    |
2019-07-24T01:45:14.6968592Z    |
2019-07-24T01:45:14.6969374Z 15 |  /  index_struct! {
2019-07-24T01:45:14.6969862Z 16 |  |      pub(crate) struct StackIndex {
2019-07-24T01:45:14.6970425Z 17 |  |          value: usize,
2019-07-24T01:45:14.6970721Z 18 |  |      }
2019-07-24T01:45:14.6971220Z 19 |  |  }
2019-07-24T01:45:14.6971541Z    |  |__- in this macro invocation
2019-07-24T01:45:14.7083375Z 
2019-07-24T01:45:14.7084221Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7085088Z   --> <::chalk_macros::index::index_struct macros>:20:58
2019-07-24T01:45:14.7085350Z    |
2019-07-24T01:45:14.7085944Z 1  |   / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-24T01:45:14.7086385Z 2  |   | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-24T01:45:14.7086756Z 3  |   | struct $ n { $ vf value : usize , } impl $ n {
2019-07-24T01:45:14.7087258Z 4  |   | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-24T01:45:14.7087536Z ...    |
2019-07-24T01:45:14.7087896Z 20 |   | Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-07-24T01:45:14.7088261Z    |  _|__________________________________________________________^
2019-07-24T01:45:14.7088642Z 21 | | | & self , n : usize ) -> Option < Self > {
2019-07-24T01:45:14.7089032Z 22 | | | usize :: add_usize ( & self . value , n ) . map ( | value | Self { value } ) }
2019-07-24T01:45:14.7089657Z    | |_|______________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7089988Z 23 |   | } impl From < usize > for $ n {
2019-07-24T01:45:14.7090359Z 24 |   | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-24T01:45:14.7090754Z    |   |________________________________________________________________- in this expansion of `index_struct!`
2019-07-24T01:45:14.7091316Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-07-24T01:45:14.7091533Z    |
2019-07-24T01:45:14.7091533Z    |
2019-07-24T01:45:14.7091812Z 15 | /   index_struct! {
2019-07-24T01:45:14.7092137Z 16 | |       pub(crate) struct StackIndex {
2019-07-24T01:45:14.7092438Z 17 | |           value: usize,
2019-07-24T01:45:14.7093015Z 19 | |   }
2019-07-24T01:45:14.7093482Z    | |___- in this macro invocation
2019-07-24T01:45:14.7093545Z 
2019-07-24T01:45:14.7093545Z 
2019-07-24T01:45:14.7093835Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7094115Z   --> <::chalk_macros::index::index_struct macros>:13:62
2019-07-24T01:45:14.7094349Z    |
2019-07-24T01:45:14.7095043Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-24T01:45:14.7095461Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-24T01:45:14.7095829Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-24T01:45:14.7096301Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-24T01:45:14.7096555Z ...   |
2019-07-24T01:45:14.7096938Z 13 |  | usize :: steps_between ( & start . value , & end . value ) } fn replace_one (
2019-07-24T01:45:14.7097285Z    |  |______________________________________________________________^
2019-07-24T01:45:14.7097631Z 14 | || & mut self ) -> Self {
2019-07-24T01:45:14.7098004Z 15 | || Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-07-24T01:45:14.7098598Z    | ||________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7099287Z ...   |
2019-07-24T01:45:14.7099603Z 23 |  | } impl From < usize > for $ n {
2019-07-24T01:45:14.7099976Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-24T01:45:14.7100352Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-24T01:45:14.7101492Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-07-24T01:45:14.7101715Z    |
2019-07-24T01:45:14.7101715Z    |
2019-07-24T01:45:14.7102035Z 34 | /  index_struct! {
2019-07-24T01:45:14.7102362Z 35 | |      pub(crate) struct AnswerIndex {
2019-07-24T01:45:14.7102689Z 36 | |          value: usize,
2019-07-24T01:45:14.7103263Z 38 | |  }
2019-07-24T01:45:14.7103594Z    | |__- in this macro invocation
2019-07-24T01:45:14.7103634Z 
2019-07-24T01:45:14.7103634Z 
2019-07-24T01:45:14.7103922Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7104201Z   --> <::chalk_macros::index::index_struct macros>:15:66
2019-07-24T01:45:14.7104663Z    |
2019-07-24T01:45:14.7105135Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-24T01:45:14.7105570Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-24T01:45:14.7105916Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-24T01:45:14.7106392Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-24T01:45:14.7106668Z ...   |
2019-07-24T01:45:14.7107030Z 15 |  | Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-07-24T01:45:14.7107369Z    |  |__________________________________________________________________^
2019-07-24T01:45:14.7107734Z 16 | || replace_zero ( & mut self ) -> Self {
2019-07-24T01:45:14.7108119Z 17 | || Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-07-24T01:45:14.7108585Z    | ||_________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7108847Z ...   |
2019-07-24T01:45:14.7109189Z 23 |  | } impl From < usize > for $ n {
2019-07-24T01:45:14.7109556Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-24T01:45:14.7110041Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-24T01:45:14.7110607Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-07-24T01:45:14.7110855Z    |
2019-07-24T01:45:14.7110855Z    |
2019-07-24T01:45:14.7111146Z 34 | /  index_struct! {
2019-07-24T01:45:14.7111469Z 35 | |      pub(crate) struct AnswerIndex {
2019-07-24T01:45:14.7111799Z 36 | |          value: usize,
2019-07-24T01:45:14.7112385Z 38 | |  }
2019-07-24T01:45:14.7112697Z    | |__- in this macro invocation
2019-07-24T01:45:14.7112736Z 
2019-07-24T01:45:14.7112736Z 
2019-07-24T01:45:14.7113013Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7113313Z   --> <::chalk_macros::index::index_struct macros>:17:67
2019-07-24T01:45:14.7113534Z    |
2019-07-24T01:45:14.7114952Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-24T01:45:14.7115444Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-24T01:45:14.7115786Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-24T01:45:14.7116295Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-24T01:45:14.7116553Z ...   |
2019-07-24T01:45:14.7116919Z 17 |  | Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-07-24T01:45:14.7117282Z    |  |___________________________________________________________________^
2019-07-24T01:45:14.7117663Z 18 | || & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-07-24T01:45:14.7118508Z    | ||___________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7118782Z ...   |
2019-07-24T01:45:14.7119102Z 23 |  | } impl From < usize > for $ n {
2019-07-24T01:45:14.7119492Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-24T01:45:14.7119884Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-24T01:45:14.7120640Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-07-24T01:45:14.7120878Z    |
2019-07-24T01:45:14.7120878Z    |
2019-07-24T01:45:14.7121158Z 34 | /  index_struct! {
2019-07-24T01:45:14.7121464Z 35 | |      pub(crate) struct AnswerIndex {
2019-07-24T01:45:14.7121788Z 36 | |          value: usize,
2019-07-24T01:45:14.7122382Z 38 | |  }
2019-07-24T01:45:14.7122694Z    | |__- in this macro invocation
2019-07-24T01:45:14.7122740Z 
2019-07-24T01:45:14.7122740Z 
2019-07-24T01:45:14.7123008Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7123298Z   --> <::chalk_macros::index::index_struct macros>:18:77
2019-07-24T01:45:14.7123508Z    |
2019-07-24T01:45:14.7123944Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-24T01:45:14.7124367Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-24T01:45:14.7125146Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-24T01:45:14.7125669Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-24T01:45:14.7125927Z ...   |
2019-07-24T01:45:14.7126286Z 18 |  | & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-07-24T01:45:14.7126666Z    |  |_____________________________________________________________________________^
2019-07-24T01:45:14.7127002Z 19 | || sub_one ( & self ) -> Self {
2019-07-24T01:45:14.7127373Z 20 | || Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-07-24T01:45:14.7127824Z    | ||________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7128082Z ...   |
2019-07-24T01:45:14.7128574Z 23 |  | } impl From < usize > for $ n {
2019-07-24T01:45:14.7128925Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-24T01:45:14.7129325Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-24T01:45:14.7129881Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-07-24T01:45:14.7130100Z    |
2019-07-24T01:45:14.7130100Z    |
2019-07-24T01:45:14.7130381Z 34 | /  index_struct! {
2019-07-24T01:45:14.7130712Z 35 | |      pub(crate) struct AnswerIndex {
2019-07-24T01:45:14.7131013Z 36 | |          value: usize,
2019-07-24T01:45:14.7131581Z 38 | |  }
2019-07-24T01:45:14.7133202Z    | |__- in this macro invocation
2019-07-24T01:45:14.7133254Z 
2019-07-24T01:45:14.7133254Z 
2019-07-24T01:45:14.7133890Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7134682Z   --> <::chalk_macros::index::index_struct macros>:20:58
2019-07-24T01:45:14.7134953Z    |
2019-07-24T01:45:14.7135466Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-24T01:45:14.7135894Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-24T01:45:14.7136233Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-24T01:45:14.7136782Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-24T01:45:14.7137033Z ...   |
2019-07-24T01:45:14.7137418Z 20 |  | Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-07-24T01:45:14.7137760Z    |  |__________________________________________________________^
2019-07-24T01:45:14.7138298Z 21 | || & self , n : usize ) -> Option < Self > {
2019-07-24T01:45:14.7138672Z 22 | || usize :: add_usize ( & self . value , n ) . map ( | value | Self { value } ) }
2019-07-24T01:45:14.7139097Z    | ||______________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7139439Z 23 |  | } impl From < usize > for $ n {
2019-07-24T01:45:14.7139771Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-24T01:45:14.7140161Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-24T01:45:14.7140679Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-07-24T01:45:14.7140911Z    |
2019-07-24T01:45:14.7140911Z    |
2019-07-24T01:45:14.7141183Z 34 | /  index_struct! {
2019-07-24T01:45:14.7141483Z 35 | |      pub(crate) struct AnswerIndex {
2019-07-24T01:45:14.7141793Z 36 | |          value: usize,
2019-07-24T01:45:14.7142526Z 38 | |  }
2019-07-24T01:45:14.7142833Z    | |__- in this macro invocation
2019-07-24T01:45:14.7142872Z 
2019-07-24T01:45:14.7142872Z 
2019-07-24T01:45:14.7143143Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7143436Z   --> <::chalk_macros::index::index_struct macros>:13:62
2019-07-24T01:45:14.7143647Z    |
2019-07-24T01:45:14.7144077Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-24T01:45:14.7144474Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-24T01:45:14.7145221Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-24T01:45:14.7145751Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-24T01:45:14.7146005Z ...   |
2019-07-24T01:45:14.7146373Z 13 |  | usize :: steps_between ( & start . value , & end . value ) } fn replace_one (
2019-07-24T01:45:14.7146737Z    |  |______________________________________________________________^
2019-07-24T01:45:14.7147783Z 14 | || & mut self ) -> Self {
2019-07-24T01:45:14.7149338Z 15 | || Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-07-24T01:45:14.7149804Z    | ||________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7150077Z ...   |
2019-07-24T01:45:14.7150995Z 23 |  | } impl From < usize > for $ n {
2019-07-24T01:45:14.7153025Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-24T01:45:14.7234398Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-24T01:45:14.7235335Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-07-24T01:45:14.7235563Z    |
2019-07-24T01:45:14.7235563Z    |
2019-07-24T01:45:14.7235858Z 81 | /  index_struct! {
2019-07-24T01:45:14.7236232Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-07-24T01:45:14.7236544Z 83 | |          value: usize,
2019-07-24T01:45:14.7237150Z 85 | |  }
2019-07-24T01:45:14.7237462Z    | |__- in this macro invocation
2019-07-24T01:45:14.7237506Z 
2019-07-24T01:45:14.7237506Z 
2019-07-24T01:45:14.7237963Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7238223Z   --> <::chalk_macros::index::index_struct macros>:15:66
2019-07-24T01:45:14.7238427Z    |
2019-07-24T01:45:14.7239330Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-24T01:45:14.7239739Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-24T01:45:14.7240081Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-24T01:45:14.7240549Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-24T01:45:14.7240787Z ...   |
2019-07-24T01:45:14.7241149Z 15 |  | Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-07-24T01:45:14.7241470Z    |  |__________________________________________________________________^
2019-07-24T01:45:14.7241803Z 16 | || replace_zero ( & mut self ) -> Self {
2019-07-24T01:45:14.7242174Z 17 | || Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-07-24T01:45:14.7242752Z    | ||_________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7243030Z ...   |
2019-07-24T01:45:14.7243349Z 23 |  | } impl From < usize > for $ n {
2019-07-24T01:45:14.7243726Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-24T01:45:14.7244101Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-24T01:45:14.7245093Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-07-24T01:45:14.7245324Z    |
2019-07-24T01:45:14.7245324Z    |
2019-07-24T01:45:14.7245644Z 81 | /  index_struct! {
2019-07-24T01:45:14.7246052Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-07-24T01:45:14.7246383Z 83 | |          value: usize,
2019-07-24T01:45:14.7246972Z 85 | |  }
2019-07-24T01:45:14.7247291Z    | |__- in this macro invocation
2019-07-24T01:45:14.7247331Z 
2019-07-24T01:45:14.7247331Z 
2019-07-24T01:45:14.7247617Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7247897Z   --> <::chalk_macros::index::index_struct macros>:17:67
2019-07-24T01:45:14.7248400Z    |
2019-07-24T01:45:14.7248780Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-24T01:45:14.7249158Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-24T01:45:14.7249596Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-24T01:45:14.7249946Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-24T01:45:14.7250215Z ...   |
2019-07-24T01:45:14.7250925Z 17 |  | Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-07-24T01:45:14.7251471Z    |  |___________________________________________________________________^
2019-07-24T01:45:14.7251859Z 18 | || & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-07-24T01:45:14.7252307Z    | ||___________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7252589Z ...   |
2019-07-24T01:45:14.7252917Z 23 |  | } impl From < usize > for $ n {
2019-07-24T01:45:14.7253302Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-24T01:45:14.7253694Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-24T01:45:14.7254565Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-07-24T01:45:14.7254823Z    |
2019-07-24T01:45:14.7254823Z    |
2019-07-24T01:45:14.7255144Z 81 | /  index_struct! {
2019-07-24T01:45:14.7255488Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-07-24T01:45:14.7255798Z 83 | |          value: usize,
2019-07-24T01:45:14.7256396Z 85 | |  }
2019-07-24T01:45:14.7256722Z    | |__- in this macro invocation
2019-07-24T01:45:14.7256763Z 
2019-07-24T01:45:14.7256763Z 
2019-07-24T01:45:14.7257047Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7257324Z   --> <::chalk_macros::index::index_struct macros>:18:77
2019-07-24T01:45:14.7257567Z    |
2019-07-24T01:45:14.7258028Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-24T01:45:14.7258443Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-24T01:45:14.7258811Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-24T01:45:14.7259288Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-24T01:45:14.7259568Z ...   |
2019-07-24T01:45:14.7259940Z 18 |  | & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-07-24T01:45:14.7260470Z    |  |_____________________________________________________________________________^
2019-07-24T01:45:14.7260818Z 19 | || sub_one ( & self ) -> Self {
2019-07-24T01:45:14.7261177Z 20 | || Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-07-24T01:45:14.7261610Z    | ||________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7261866Z ...   |
2019-07-24T01:45:14.7262469Z 23 |  | } impl From < usize > for $ n {
2019-07-24T01:45:14.7262838Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-24T01:45:14.7263946Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-24T01:45:14.7264560Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-07-24T01:45:14.7265025Z    |
2019-07-24T01:45:14.7265025Z    |
2019-07-24T01:45:14.7265321Z 81 | /  index_struct! {
2019-07-24T01:45:14.7265664Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-07-24T01:45:14.7265998Z 83 | |          value: usize,
2019-07-24T01:45:14.7266584Z 85 | |  }
2019-07-24T01:45:14.7266905Z    | |__- in this macro invocation
2019-07-24T01:45:14.7266946Z 
2019-07-24T01:45:14.7266946Z 
2019-07-24T01:45:14.7268022Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7268347Z   --> <::chalk_macros::index::index_struct macros>:20:58
2019-07-24T01:45:14.7268714Z    |
2019-07-24T01:45:14.7269118Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-24T01:45:14.7269517Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-24T01:45:14.7270055Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-24T01:45:14.7270450Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-24T01:45:14.7270710Z ...   |
2019-07-24T01:45:14.7271074Z 20 |  | Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-07-24T01:45:14.7271760Z    |  |__________________________________________________________^
2019-07-24T01:45:14.7272258Z 21 | || & self , n : usize ) -> Option < Self > {
2019-07-24T01:45:14.7272657Z 22 | || usize :: add_usize ( & self . value , n ) . map ( | value | Self { value } ) }
2019-07-24T01:45:14.7273089Z    | ||______________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7273981Z 23 |  | } impl From < usize > for $ n {
2019-07-24T01:45:14.7274736Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-24T01:45:14.7275537Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-24T01:45:14.7276131Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-07-24T01:45:14.7276374Z    |
2019-07-24T01:45:14.7276374Z    |
2019-07-24T01:45:14.7276675Z 81 | /  index_struct! {
2019-07-24T01:45:14.7277019Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-07-24T01:45:14.7277345Z 83 | |          value: usize,
2019-07-24T01:45:14.7277923Z 85 | |  }
2019-07-24T01:45:14.7278260Z    | |__- in this macro invocation
2019-07-24T01:45:14.7278302Z 
2019-07-24T01:45:14.7278302Z 
2019-07-24T01:45:14.7278584Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7278882Z   --> <::chalk_macros::index::index_struct macros>:13:62
2019-07-24T01:45:14.7279224Z    |
2019-07-24T01:45:14.7279622Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-24T01:45:14.7280015Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-24T01:45:14.7280471Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-24T01:45:14.7280836Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-24T01:45:14.7281115Z ...   |
2019-07-24T01:45:14.7281482Z 13 |  | usize :: steps_between ( & start . value , & end . value ) } fn replace_one (
2019-07-24T01:45:14.7281842Z    |  |______________________________________________________________^
2019-07-24T01:45:14.7282174Z 14 | || & mut self ) -> Self {
2019-07-24T01:45:14.7282557Z 15 | || Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-07-24T01:45:14.7283008Z    | ||________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7283275Z ...   |
2019-07-24T01:45:14.7283621Z 23 |  | } impl From < usize > for $ n {
2019-07-24T01:45:14.7285025Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-24T01:45:14.7285470Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-24T01:45:14.7286042Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:91:1
2019-07-24T01:45:14.7286290Z    |
2019-07-24T01:45:14.7286290Z    |
2019-07-24T01:45:14.7286587Z 91 | /  index_struct! {
2019-07-24T01:45:14.7287220Z 93 | |          value: usize,
2019-07-24T01:45:14.7287507Z 94 | |      }
2019-07-24T01:45:14.7287822Z 95 | |  }
2019-07-24T01:45:14.7288130Z    | |__- in this macro invocation
2019-07-24T01:45:14.7288130Z    | |__- in this macro invocation
2019-07-24T01:45:14.7288171Z 
2019-07-24T01:45:14.7288452Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7288752Z   --> <::chalk_macros::index::index_struct macros>:15:66
2019-07-24T01:45:14.7289103Z    |
2019-07-24T01:45:14.7289524Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-24T01:45:14.7289902Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-24T01:45:14.7290704Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-24T01:45:14.7291097Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-24T01:45:14.7291349Z ...   |
2019-07-24T01:45:14.7291706Z 15 |  | Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-07-24T01:45:14.7292076Z    |  |__________________________________________________________________^
2019-07-24T01:45:14.7292417Z 16 | || replace_zero ( & mut self ) -> Self {
2019-07-24T01:45:14.7292831Z 17 | || Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-07-24T01:45:14.7293267Z    | ||_________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7293553Z ...   |
2019-07-24T01:45:14.7293879Z 23 |  | } impl From < usize > for $ n {
2019-07-24T01:45:14.7294241Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-24T01:45:14.7294881Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-24T01:45:14.7295483Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:91:1
2019-07-24T01:45:14.7295705Z    |
2019-07-24T01:45:14.7295705Z    |
2019-07-24T01:45:14.7296007Z 91 | /  index_struct! {
2019-07-24T01:45:14.7296640Z 93 | |          value: usize,
2019-07-24T01:45:14.7296943Z 94 | |      }
2019-07-24T01:45:14.7297244Z 95 | |  }
2019-07-24T01:45:14.7297541Z    | |__- in this macro invocation
2019-07-24T01:45:14.7297541Z    | |__- in this macro invocation
2019-07-24T01:45:14.7297579Z 
2019-07-24T01:45:14.7297885Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7298256Z   --> <::chalk_macros::index::index_struct macros>:17:67
2019-07-24T01:45:14.7298518Z    |
2019-07-24T01:45:14.7298893Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-24T01:45:14.7299260Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-24T01:45:14.7299724Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-24T01:45:14.7300095Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-24T01:45:14.7300344Z ...   |
2019-07-24T01:45:14.7300737Z 17 |  | Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-07-24T01:45:14.7302272Z    |  |___________________________________________________________________^
2019-07-24T01:45:14.7302753Z 18 | || & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-07-24T01:45:14.7303214Z    | ||___________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7303475Z ...   |
2019-07-24T01:45:14.7303830Z 23 |  | } impl From < usize > for $ n {
2019-07-24T01:45:14.7304197Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-24T01:45:14.7304815Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-24T01:45:14.7305526Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:91:1
2019-07-24T01:45:14.7305753Z    |
2019-07-24T01:45:14.7305753Z    |
2019-07-24T01:45:14.7306043Z 91 | /  index_struct! {
2019-07-24T01:45:14.7306689Z 93 | |          value: usize,
2019-07-24T01:45:14.7306976Z 94 | |      }
2019-07-24T01:45:14.7307285Z 95 | |  }
2019-07-24T01:45:14.7307593Z    | |__- in this macro invocation
2019-07-24T01:45:14.7307593Z    | |__- in this macro invocation
2019-07-24T01:45:14.7307634Z 
2019-07-24T01:45:14.7307937Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7308439Z   --> <::chalk_macros::index::index_struct macros>:18:77
2019-07-24T01:45:14.7308651Z    |
2019-07-24T01:45:14.7309161Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-24T01:45:14.7309744Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-24T01:45:14.7310103Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-24T01:45:14.7310591Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-24T01:45:14.7310841Z ...   |
2019-07-24T01:45:14.7311228Z 18 |  | & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-07-24T01:45:14.7311587Z    |  |_____________________________________________________________________________^
2019-07-24T01:45:14.7311920Z 19 | || sub_one ( & self ) -> Self {
2019-07-24T01:45:14.7312333Z 20 | || Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-07-24T01:45:14.7312748Z    | ||________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-24T01:45:14.7313030Z ...   |
2019-07-24T01:45:14.7313355Z 23 |  | } impl From < usize > for $ n {
2019-07-24T01:45:14.7313737Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-24T01:45:14.7355748Z    |  |________________________________________________________________- in this expansion of `index_struct!`

I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact @TimNN. (Feature Requests)

@bors
Copy link
Contributor

bors commented Jul 27, 2019

☔ The latest upstream changes (presumably #63029) made this pull request unmergeable. Please resolve the merge conflicts.

@rust-highfive
Copy link
Collaborator

The job mingw-check of your PR failed (raw log). Through arcane magic we have determined that the following fragments from the build log may contain information about the problem.

Click to expand the log.
2019-07-29T16:27:47.8703081Z ##[command]git remote add origin https://github.com/rust-lang/rust
2019-07-29T16:27:47.8894330Z ##[command]git config gc.auto 0
2019-07-29T16:27:47.8972041Z ##[command]git config --get-all http.https://github.com/rust-lang/rust.extraheader
2019-07-29T16:27:47.9032554Z ##[command]git config --get-all http.proxy
2019-07-29T16:27:47.9185028Z ##[command]git -c http.extraheader="AUTHORIZATION: basic ***" fetch --force --tags --prune --progress --no-recurse-submodules --depth=2 origin +refs/heads/*:refs/remotes/origin/* +refs/pull/62886/merge:refs/remotes/pull/62886/merge
---
2019-07-29T16:28:24.2220083Z do so (now or later) by using -b with the checkout command again. Example:
2019-07-29T16:28:24.2220286Z 
2019-07-29T16:28:24.2220723Z   git checkout -b <new-branch-name>
2019-07-29T16:28:24.2221236Z 
2019-07-29T16:28:24.2221431Z HEAD is now at b0de99b5b Merge 566431f9c7bf69858dafb5413a0c7efa8a73eb2f into 04b88a9eba8abbac87eddcb2998beea09589c2c9
2019-07-29T16:28:24.2377019Z ##[section]Starting: Collect CPU-usage statistics in the background
2019-07-29T16:28:24.2379846Z ==============================================================================
2019-07-29T16:28:24.2379903Z Task         : Bash
2019-07-29T16:28:24.2380009Z Description  : Run a Bash script on macOS, Linux, or Windows
---
2019-07-29T16:34:16.9635657Z     Checking lock_api v0.1.3
2019-07-29T16:34:17.2728717Z    Compiling rustc_version v0.2.3
2019-07-29T16:34:18.6722337Z     Checking polonius-engine v0.9.0
2019-07-29T16:34:19.4265467Z     Checking chalk-engine v0.9.0
2019-07-29T16:34:19.5118489Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5126334Z   --> <::chalk_macros::index::index_struct macros>:13:62
2019-07-29T16:34:19.5132818Z    |
2019-07-29T16:34:19.5138577Z 1  |   / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-29T16:34:19.5144067Z 2  |   | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-29T16:34:19.5150009Z 3  |   | struct $ n { $ vf value : usize , } impl $ n {
2019-07-29T16:34:19.5155609Z 4  |   | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-29T16:34:19.5212828Z ...    |
2019-07-29T16:34:19.5213275Z 13 |   | usize :: steps_between ( & start . value , & end . value ) } fn replace_one (
2019-07-29T16:34:19.5213670Z    |   |______________________________________________________________^
2019-07-29T16:34:19.5214021Z 14 |  || & mut self ) -> Self {
2019-07-29T16:34:19.5214416Z 15 |  || Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-07-29T16:34:19.5214890Z    |  ||________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5215338Z ...    |
2019-07-29T16:34:19.5215763Z 23 |   | } impl From < usize > for $ n {
2019-07-29T16:34:19.5216149Z 24 |   | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-29T16:34:19.5216573Z    |   |________________________________________________________________- in this expansion of `index_struct!`
2019-07-29T16:34:19.5217171Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-07-29T16:34:19.5217423Z    |
2019-07-29T16:34:19.5217423Z    |
2019-07-29T16:34:19.5217736Z 15 | /   index_struct! {
2019-07-29T16:34:19.5218081Z 16 | |       pub(crate) struct StackIndex {
2019-07-29T16:34:19.5218731Z 17 | |           value: usize,
2019-07-29T16:34:19.5219361Z 19 | |   }
2019-07-29T16:34:19.5219672Z    | |___- in this macro invocation
2019-07-29T16:34:19.5219725Z 
2019-07-29T16:34:19.5219725Z 
2019-07-29T16:34:19.5220040Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5220339Z   --> <::chalk_macros::index::index_struct macros>:15:66
2019-07-29T16:34:19.5220574Z    |
2019-07-29T16:34:19.5220956Z 1  |   / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-29T16:34:19.5221343Z 2  |   | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-29T16:34:19.5221698Z 3  |   | struct $ n { $ vf value : usize , } impl $ n {
2019-07-29T16:34:19.5222130Z 4  |   | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-29T16:34:19.5222582Z ...    |
2019-07-29T16:34:19.5222972Z 15 |   | Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-07-29T16:34:19.5223331Z    |   |__________________________________________________________________^
2019-07-29T16:34:19.5223697Z 16 |  || replace_zero ( & mut self ) -> Self {
2019-07-29T16:34:19.5224117Z 17 |  || Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-07-29T16:34:19.5224663Z    |  ||_________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5224999Z ...    |
2019-07-29T16:34:19.5225337Z 23 |   | } impl From < usize > for $ n {
2019-07-29T16:34:19.5225724Z 24 |   | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-29T16:34:19.5226126Z    |   |________________________________________________________________- in this expansion of `index_struct!`
2019-07-29T16:34:19.5226798Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-07-29T16:34:19.5227070Z    |
2019-07-29T16:34:19.5227070Z    |
2019-07-29T16:34:19.5227409Z 15 | /   index_struct! {
2019-07-29T16:34:19.5227788Z 16 | |       pub(crate) struct StackIndex {
2019-07-29T16:34:19.5228136Z 17 | |           value: usize,
2019-07-29T16:34:19.5229171Z 19 | |   }
2019-07-29T16:34:19.5229497Z    | |___- in this macro invocation
2019-07-29T16:34:19.5229537Z 
2019-07-29T16:34:19.5229537Z 
2019-07-29T16:34:19.5229851Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5230140Z   --> <::chalk_macros::index::index_struct macros>:17:67
2019-07-29T16:34:19.5230373Z    |
2019-07-29T16:34:19.5230753Z 1  |   / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-29T16:34:19.5231139Z 2  |   | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-29T16:34:19.5231510Z 3  |   | struct $ n { $ vf value : usize , } impl $ n {
2019-07-29T16:34:19.5232060Z 4  |   | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-29T16:34:19.5232332Z ...    |
2019-07-29T16:34:19.5232726Z 17 |   | Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-07-29T16:34:19.5233106Z    |  _|___________________________________________________________________^
2019-07-29T16:34:19.5233529Z 18 | | | & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-07-29T16:34:19.5234070Z    | |_|___________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5234398Z ...    |
2019-07-29T16:34:19.5234738Z 23 |   | } impl From < usize > for $ n {
2019-07-29T16:34:19.5235115Z 24 |   | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-29T16:34:19.5235541Z    |   |________________________________________________________________- in this expansion of `index_struct!`
2019-07-29T16:34:19.5236198Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-07-29T16:34:19.5236458Z    |
2019-07-29T16:34:19.5236458Z    |
2019-07-29T16:34:19.5236806Z 15 |  /  index_struct! {
2019-07-29T16:34:19.5237198Z 16 |  |      pub(crate) struct StackIndex {
2019-07-29T16:34:19.5237553Z 17 |  |          value: usize,
2019-07-29T16:34:19.5237893Z 18 |  |      }
2019-07-29T16:34:19.5238471Z 19 |  |  }
2019-07-29T16:34:19.5238850Z    |  |__- in this macro invocation
2019-07-29T16:34:19.5238903Z 
2019-07-29T16:34:19.5239226Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5239515Z   --> <::chalk_macros::index::index_struct macros>:18:77
2019-07-29T16:34:19.5239748Z    |
2019-07-29T16:34:19.5240132Z 1  |   / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-29T16:34:19.5240516Z 2  |   | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-29T16:34:19.5240884Z 3  |   | struct $ n { $ vf value : usize , } impl $ n {
2019-07-29T16:34:19.5241451Z 4  |   | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-29T16:34:19.5241722Z ...    |
2019-07-29T16:34:19.5242115Z 18 |   | & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-07-29T16:34:19.5242501Z    |  _|_____________________________________________________________________________^
2019-07-29T16:34:19.5242873Z 19 | | | sub_one ( & self ) -> Self {
2019-07-29T16:34:19.5243271Z 20 | | | Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-07-29T16:34:19.5243786Z    | |_|________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5244120Z ...    |
2019-07-29T16:34:19.5244458Z 23 |   | } impl From < usize > for $ n {
2019-07-29T16:34:19.5244853Z 24 |   | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-29T16:34:19.5245258Z    |   |________________________________________________________________- in this expansion of `index_struct!`
2019-07-29T16:34:19.5245921Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-07-29T16:34:19.5246184Z    |
2019-07-29T16:34:19.5246184Z    |
2019-07-29T16:34:19.5246540Z 15 |  /  index_struct! {
2019-07-29T16:34:19.5246906Z 16 |  |      pub(crate) struct StackIndex {
2019-07-29T16:34:19.5342729Z 17 |  |          value: usize,
2019-07-29T16:34:19.5345337Z 18 |  |      }
2019-07-29T16:34:19.5345761Z 19 |  |  }
2019-07-29T16:34:19.5346119Z    |  |__- in this macro invocation
2019-07-29T16:34:19.5346163Z 
2019-07-29T16:34:19.5346462Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5346754Z   --> <::chalk_macros::index::index_struct macros>:20:58
2019-07-29T16:34:19.5347010Z    |
2019-07-29T16:34:19.5347378Z 1  |   / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-29T16:34:19.5347781Z 2  |   | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-29T16:34:19.5348442Z 3  |   | struct $ n { $ vf value : usize , } impl $ n {
2019-07-29T16:34:19.5348847Z 4  |   | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-29T16:34:19.5349140Z ...    |
2019-07-29T16:34:19.5349512Z 20 |   | Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-07-29T16:34:19.5349899Z    |  _|__________________________________________________________^
2019-07-29T16:34:19.5350270Z 21 | | | & self , n : usize ) -> Option < Self > {
2019-07-29T16:34:19.5350781Z 22 | | | usize :: add_usize ( & self . value , n ) . map ( | value | Self { value } ) }
2019-07-29T16:34:19.5351302Z    | |_|______________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5351654Z 23 |   | } impl From < usize > for $ n {
2019-07-29T16:34:19.5352098Z 24 |   | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-29T16:34:19.5352501Z    |   |________________________________________________________________- in this expansion of `index_struct!`
2019-07-29T16:34:19.5353115Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-07-29T16:34:19.5353353Z    |
2019-07-29T16:34:19.5353353Z    |
2019-07-29T16:34:19.5353673Z 15 | /   index_struct! {
2019-07-29T16:34:19.5354004Z 16 | |       pub(crate) struct StackIndex {
2019-07-29T16:34:19.5354353Z 17 | |           value: usize,
2019-07-29T16:34:19.5359503Z 19 | |   }
2019-07-29T16:34:19.5359896Z    | |___- in this macro invocation
2019-07-29T16:34:19.5359980Z 
2019-07-29T16:34:19.5359980Z 
2019-07-29T16:34:19.5360540Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5360868Z   --> <::chalk_macros::index::index_struct macros>:13:62
2019-07-29T16:34:19.5361154Z    |
2019-07-29T16:34:19.5361564Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-29T16:34:19.5361991Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-29T16:34:19.5362660Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-29T16:34:19.5363088Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-29T16:34:19.5363403Z ...   |
2019-07-29T16:34:19.5363820Z 13 |  | usize :: steps_between ( & start . value , & end . value ) } fn replace_one (
2019-07-29T16:34:19.5364213Z    |  |______________________________________________________________^
2019-07-29T16:34:19.5364611Z 14 | || & mut self ) -> Self {
2019-07-29T16:34:19.5365143Z 15 | || Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-07-29T16:34:19.5365687Z    | ||________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5365992Z ...   |
2019-07-29T16:34:19.5366360Z 23 |  | } impl From < usize > for $ n {
2019-07-29T16:34:19.5366787Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-29T16:34:19.5367240Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-29T16:34:19.5367906Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-07-29T16:34:19.5368170Z    |
2019-07-29T16:34:19.5368170Z    |
2019-07-29T16:34:19.5448504Z 34 | /  index_struct! {
2019-07-29T16:34:19.5449002Z 35 | |      pub(crate) struct AnswerIndex {
2019-07-29T16:34:19.5449369Z 36 | |          value: usize,
2019-07-29T16:34:19.5450071Z 38 | |  }
2019-07-29T16:34:19.5450426Z    | |__- in this macro invocation
2019-07-29T16:34:19.5450489Z 
2019-07-29T16:34:19.5450489Z 
2019-07-29T16:34:19.5450825Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5451148Z   --> <::chalk_macros::index::index_struct macros>:15:66
2019-07-29T16:34:19.5451426Z    |
2019-07-29T16:34:19.5451836Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-29T16:34:19.5452265Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-29T16:34:19.5452948Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-29T16:34:19.5453377Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-29T16:34:19.5453689Z ...   |
2019-07-29T16:34:19.5454098Z 15 |  | Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-07-29T16:34:19.5454495Z    |  |__________________________________________________________________^
2019-07-29T16:34:19.5454910Z 16 | || replace_zero ( & mut self ) -> Self {
2019-07-29T16:34:19.5455464Z 17 | || Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-07-29T16:34:19.5456015Z    | ||_________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5456320Z ...   |
2019-07-29T16:34:19.5456688Z 23 |  | } impl From < usize > for $ n {
2019-07-29T16:34:19.5457116Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-29T16:34:19.5457583Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-29T16:34:19.5458545Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-07-29T16:34:19.5458823Z    |
2019-07-29T16:34:19.5458823Z    |
2019-07-29T16:34:19.5459161Z 34 | /  index_struct! {
2019-07-29T16:34:19.5459555Z 35 | |      pub(crate) struct AnswerIndex {
2019-07-29T16:34:19.5459909Z 36 | |          value: usize,
2019-07-29T16:34:19.5460612Z 38 | |  }
2019-07-29T16:34:19.5460959Z    | |__- in this macro invocation
2019-07-29T16:34:19.5461020Z 
2019-07-29T16:34:19.5461020Z 
2019-07-29T16:34:19.5461344Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5461665Z   --> <::chalk_macros::index::index_struct macros>:17:67
2019-07-29T16:34:19.5461937Z    |
2019-07-29T16:34:19.5462344Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-29T16:34:19.5462775Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-29T16:34:19.5463365Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-29T16:34:19.5463794Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-29T16:34:19.5464091Z ...   |
2019-07-29T16:34:19.5464526Z 17 |  | Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-07-29T16:34:19.5464925Z    |  |___________________________________________________________________^
2019-07-29T16:34:19.5465479Z 18 | || & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-07-29T16:34:19.5466022Z    | ||___________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5466323Z ...   |
2019-07-29T16:34:19.5466710Z 23 |  | } impl From < usize > for $ n {
2019-07-29T16:34:19.5467123Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-29T16:34:19.5467583Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-29T16:34:19.5468483Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-07-29T16:34:19.5468821Z    |
2019-07-29T16:34:19.5468821Z    |
2019-07-29T16:34:19.5469161Z 34 | /  index_struct! {
2019-07-29T16:34:19.5469528Z 35 | |      pub(crate) struct AnswerIndex {
2019-07-29T16:34:19.5469903Z 36 | |          value: usize,
2019-07-29T16:34:19.5470573Z 38 | |  }
2019-07-29T16:34:19.5470947Z    | |__- in this macro invocation
2019-07-29T16:34:19.5470993Z 
2019-07-29T16:34:19.5470993Z 
2019-07-29T16:34:19.5471315Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5471655Z   --> <::chalk_macros::index::index_struct macros>:18:77
2019-07-29T16:34:19.5471912Z    |
2019-07-29T16:34:19.5472318Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-29T16:34:19.5472764Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-29T16:34:19.5473337Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-29T16:34:19.5473790Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-29T16:34:19.5474092Z ...   |
2019-07-29T16:34:19.5474510Z 18 |  | & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-07-29T16:34:19.5474935Z    |  |_____________________________________________________________________________^
2019-07-29T16:34:19.5475327Z 19 | || sub_one ( & self ) -> Self {
2019-07-29T16:34:19.5475872Z 20 | || Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-07-29T16:34:19.5476392Z    | ||________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5476691Z ...   |
2019-07-29T16:34:19.5477076Z 23 |  | } impl From < usize > for $ n {
2019-07-29T16:34:19.5477488Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-29T16:34:19.5477951Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-29T16:34:19.5479019Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-07-29T16:34:19.5479302Z    |
2019-07-29T16:34:19.5479302Z    |
2019-07-29T16:34:19.5479643Z 34 | /  index_struct! {
2019-07-29T16:34:19.5480011Z 35 | |      pub(crate) struct AnswerIndex {
2019-07-29T16:34:19.5480383Z 36 | |          value: usize,
2019-07-29T16:34:19.5481060Z 38 | |  }
2019-07-29T16:34:19.5481433Z    | |__- in this macro invocation
2019-07-29T16:34:19.5481476Z 
2019-07-29T16:34:19.5481476Z 
2019-07-29T16:34:19.5481802Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5482139Z   --> <::chalk_macros::index::index_struct macros>:20:58
2019-07-29T16:34:19.5482400Z    |
2019-07-29T16:34:19.5482806Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-29T16:34:19.5483251Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-29T16:34:19.5483813Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-29T16:34:19.5484244Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-29T16:34:19.5484558Z ...   |
2019-07-29T16:34:19.5484968Z 20 |  | Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-07-29T16:34:19.5485372Z    |  |__________________________________________________________^
2019-07-29T16:34:19.5485778Z 21 | || & self , n : usize ) -> Option < Self > {
2019-07-29T16:34:19.5486312Z 22 | || usize :: add_usize ( & self . value , n ) . map ( | value | Self { value } ) }
2019-07-29T16:34:19.5486905Z    | ||______________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5487546Z 23 |  | } impl From < usize > for $ n {
2019-07-29T16:34:19.5488004Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-29T16:34:19.5488755Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-29T16:34:19.5489505Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-07-29T16:34:19.5489770Z    |
2019-07-29T16:34:19.5489770Z    |
2019-07-29T16:34:19.5490125Z 34 | /  index_struct! {
2019-07-29T16:34:19.5490496Z 35 | |      pub(crate) struct AnswerIndex {
2019-07-29T16:34:19.5490850Z 36 | |          value: usize,
2019-07-29T16:34:19.5491538Z 38 | |  }
2019-07-29T16:34:19.5491894Z    | |__- in this macro invocation
2019-07-29T16:34:19.5491954Z 
2019-07-29T16:34:19.5491954Z 
2019-07-29T16:34:19.5492285Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5492607Z   --> <::chalk_macros::index::index_struct macros>:13:62
2019-07-29T16:34:19.5492880Z    |
2019-07-29T16:34:19.5493288Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-29T16:34:19.5493715Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-29T16:34:19.5494458Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-29T16:34:19.5494894Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-29T16:34:19.5495191Z ...   |
2019-07-29T16:34:19.5495630Z 13 |  | usize :: steps_between ( & start . value , & end . value ) } fn replace_one (
2019-07-29T16:34:19.5496024Z    |  |______________________________________________________________^
2019-07-29T16:34:19.5496424Z 14 | || & mut self ) -> Self {
2019-07-29T16:34:19.5496962Z 15 | || Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-07-29T16:34:19.5497487Z    | ||________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5497808Z ...   |
2019-07-29T16:34:19.5498177Z 23 |  | } impl From < usize > for $ n {
2019-07-29T16:34:19.5498996Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-29T16:34:19.5499474Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-29T16:34:19.5500129Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-07-29T16:34:19.5500391Z    |
2019-07-29T16:34:19.5500391Z    |
2019-07-29T16:34:19.5500731Z 81 | /  index_struct! {
2019-07-29T16:34:19.5501134Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-07-29T16:34:19.5501493Z 83 | |          value: usize,
2019-07-29T16:34:19.5502199Z 85 | |  }
2019-07-29T16:34:19.5502549Z    | |__- in this macro invocation
2019-07-29T16:34:19.5502594Z 
2019-07-29T16:34:19.5502594Z 
2019-07-29T16:34:19.5502939Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5503264Z   --> <::chalk_macros::index::index_struct macros>:15:66
2019-07-29T16:34:19.5503523Z    |
2019-07-29T16:34:19.5503945Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-29T16:34:19.5504380Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-29T16:34:19.5504958Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-29T16:34:19.5505388Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-29T16:34:19.5505685Z ...   |
2019-07-29T16:34:19.5506108Z 15 |  | Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-07-29T16:34:19.5506508Z    |  |__________________________________________________________________^
2019-07-29T16:34:19.5506935Z 16 | || replace_zero ( & mut self ) -> Self {
2019-07-29T16:34:19.5507461Z 17 | || Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-07-29T16:34:19.5507984Z    | ||_________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5508589Z ...   |
2019-07-29T16:34:19.5508963Z 23 |  | } impl From < usize > for $ n {
2019-07-29T16:34:19.5509374Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-29T16:34:19.5509866Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-29T16:34:19.5510512Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-07-29T16:34:19.5510776Z    |
2019-07-29T16:34:19.5510776Z    |
2019-07-29T16:34:19.5511114Z 81 | /  index_struct! {
2019-07-29T16:34:19.5511517Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-07-29T16:34:19.5511875Z 83 | |          value: usize,
2019-07-29T16:34:19.5512574Z 85 | |  }
2019-07-29T16:34:19.5512924Z    | |__- in this macro invocation
2019-07-29T16:34:19.5512967Z 
2019-07-29T16:34:19.5512967Z 
2019-07-29T16:34:19.5513304Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5513627Z   --> <::chalk_macros::index::index_struct macros>:17:67
2019-07-29T16:34:19.5513886Z    |
2019-07-29T16:34:19.5514307Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-29T16:34:19.5514883Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-29T16:34:19.5515288Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-29T16:34:19.5515737Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-29T16:34:19.5516033Z ...   |
2019-07-29T16:34:19.5516465Z 17 |  | Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-07-29T16:34:19.5516866Z    |  |___________________________________________________________________^
2019-07-29T16:34:19.5517405Z 18 | || & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-07-29T16:34:19.5517963Z    | ||___________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5518623Z ...   |
2019-07-29T16:34:19.5519057Z 23 |  | } impl From < usize > for $ n {
2019-07-29T16:34:19.5519471Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-29T16:34:19.5519942Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-29T16:34:19.5520591Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-07-29T16:34:19.5520854Z    |
2019-07-29T16:34:19.5520854Z    |
2019-07-29T16:34:19.5521211Z 81 | /  index_struct! {
2019-07-29T16:34:19.5521597Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-07-29T16:34:19.5521982Z 83 | |          value: usize,
2019-07-29T16:34:19.5522666Z 85 | |  }
2019-07-29T16:34:19.5523030Z    | |__- in this macro invocation
2019-07-29T16:34:19.5523074Z 
2019-07-29T16:34:19.5523074Z 
2019-07-29T16:34:19.5523398Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5523734Z   --> <::chalk_macros::index::index_struct macros>:18:77
2019-07-29T16:34:19.5523993Z    |
2019-07-29T16:34:19.5524397Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-29T16:34:19.5524839Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-29T16:34:19.5525423Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-29T16:34:19.5525853Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-29T16:34:19.5526167Z ...   |
2019-07-29T16:34:19.5526583Z 18 |  | & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-07-29T16:34:19.5527035Z    |  |_____________________________________________________________________________^
2019-07-29T16:34:19.5647978Z 19 | || sub_one ( & self ) -> Self {
2019-07-29T16:34:19.5649042Z 20 | || Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-07-29T16:34:19.5649649Z    | ||________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5649962Z ...   |
2019-07-29T16:34:19.5650352Z 23 |  | } impl From < usize > for $ n {
2019-07-29T16:34:19.5650770Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-29T16:34:19.5651243Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-29T16:34:19.5651905Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-07-29T16:34:19.5652167Z    |
2019-07-29T16:34:19.5652167Z    |
2019-07-29T16:34:19.5652523Z 81 | /  index_struct! {
2019-07-29T16:34:19.5652908Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-07-29T16:34:19.5653264Z 83 | |          value: usize,
2019-07-29T16:34:19.5653964Z 85 | |  }
2019-07-29T16:34:19.5654329Z    | |__- in this macro invocation
2019-07-29T16:34:19.5654375Z 
2019-07-29T16:34:19.5654375Z 
2019-07-29T16:34:19.5654701Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5655024Z   --> <::chalk_macros::index::index_struct macros>:20:58
2019-07-29T16:34:19.5655300Z    |
2019-07-29T16:34:19.5655706Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-29T16:34:19.5656320Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-29T16:34:19.5656731Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-29T16:34:19.5657160Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-29T16:34:19.5657476Z ...   |
2019-07-29T16:34:19.5657884Z 20 |  | Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-07-29T16:34:19.5658272Z    |  |__________________________________________________________^
2019-07-29T16:34:19.5658706Z 21 | || & self , n : usize ) -> Option < Self > {
2019-07-29T16:34:19.5659236Z 22 | || usize :: add_usize ( & self . value , n ) . map ( | value | Self { value } ) }
2019-07-29T16:34:19.5659795Z    | ||______________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5660183Z 23 |  | } impl From < usize > for $ n {
2019-07-29T16:34:19.5660609Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-29T16:34:19.5661079Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-29T16:34:19.5661727Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-07-29T16:34:19.5661987Z    |
2019-07-29T16:34:19.5661987Z    |
2019-07-29T16:34:19.5662620Z 81 | /  index_struct! {
2019-07-29T16:34:19.5663038Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-07-29T16:34:19.5663394Z 83 | |          value: usize,
2019-07-29T16:34:19.5664098Z 85 | |  }
2019-07-29T16:34:19.5664445Z    | |__- in this macro invocation
2019-07-29T16:34:19.5664491Z 
2019-07-29T16:34:19.5664491Z 
2019-07-29T16:34:19.5664835Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5665159Z   --> <::chalk_macros::index::index_struct macros>:13:62
2019-07-29T16:34:19.5665417Z    |
2019-07-29T16:34:19.5665841Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-29T16:34:19.5666431Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-29T16:34:19.5666857Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-29T16:34:19.5667285Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-29T16:34:19.5667581Z ...   |
2019-07-29T16:34:19.5668224Z 13 |  | usize :: steps_between ( & start . value , & end . value ) } fn replace_one (
2019-07-29T16:34:19.5668684Z    |  |______________________________________________________________^
2019-07-29T16:34:19.5669085Z 14 | || & mut self ) -> Self {
2019-07-29T16:34:19.5669645Z 15 | || Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-07-29T16:34:19.5670174Z    | ||________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5670497Z ...   |
2019-07-29T16:34:19.5670864Z 23 |  | } impl From < usize > for $ n {
2019-07-29T16:34:19.5671276Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-29T16:34:19.5671762Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-29T16:34:19.5672411Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:91:1
2019-07-29T16:34:19.5672675Z    |
2019-07-29T16:34:19.5672675Z    |
2019-07-29T16:34:19.5673013Z 91 | /  index_struct! {
2019-07-29T16:34:19.5673734Z 93 | |          value: usize,
2019-07-29T16:34:19.5674078Z 94 | |      }
2019-07-29T16:34:19.5674431Z 95 | |  }
2019-07-29T16:34:19.5674783Z    | |__- in this macro invocation
2019-07-29T16:34:19.5674783Z    | |__- in this macro invocation
2019-07-29T16:34:19.5674829Z 
2019-07-29T16:34:19.5675173Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5675499Z   --> <::chalk_macros::index::index_struct macros>:15:66
2019-07-29T16:34:19.5675755Z    |
2019-07-29T16:34:19.5676174Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-29T16:34:19.5676752Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-29T16:34:19.5677160Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-29T16:34:19.5677606Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-29T16:34:19.5677902Z ...   |
2019-07-29T16:34:19.5678556Z 15 |  | Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-07-29T16:34:19.5679001Z    |  |__________________________________________________________________^
2019-07-29T16:34:19.5679521Z 16 | || replace_zero ( & mut self ) -> Self {
2019-07-29T16:34:19.5680031Z 17 | || Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-07-29T16:34:19.5680522Z    | ||_________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5680905Z ...   |
2019-07-29T16:34:19.5681282Z 23 |  | } impl From < usize > for $ n {
2019-07-29T16:34:19.5681712Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-29T16:34:19.5682184Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-29T16:34:19.5682815Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:91:1
2019-07-29T16:34:19.5683095Z    |
2019-07-29T16:34:19.5683095Z    |
2019-07-29T16:34:19.5683433Z 91 | /  index_struct! {
2019-07-29T16:34:19.5684154Z 93 | |          value: usize,
2019-07-29T16:34:19.5684507Z 94 | |      }
2019-07-29T16:34:19.5684852Z 95 | |  }
2019-07-29T16:34:19.5685202Z    | |__- in this macro invocation
2019-07-29T16:34:19.5685202Z    | |__- in this macro invocation
2019-07-29T16:34:19.5685246Z 
2019-07-29T16:34:19.5685567Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5685905Z   --> <::chalk_macros::index::index_struct macros>:17:67
2019-07-29T16:34:19.5686162Z    |
2019-07-29T16:34:19.5686568Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-29T16:34:19.5687323Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-29T16:34:19.5687761Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-29T16:34:19.5688203Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-29T16:34:19.5688894Z ...   |
2019-07-29T16:34:19.5689312Z 17 |  | Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-07-29T16:34:19.5689732Z    |  |___________________________________________________________________^
2019-07-29T16:34:19.5690315Z 18 | || & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-07-29T16:34:19.5690877Z    | ||___________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-29T16:34:19.5691180Z ...   |
2019-07-29T16:34:19.5691547Z 23 |  | } impl From < usize > for $ n {
2019-07-29T16:34:19.5691975Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-29T16:34:19.5692442Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-07-29T16:34:19.5693091Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:91:1
2019-07-29T16:34:19.5693352Z    |
2019-07-29T16:34:19.5693352Z    |
2019-07-29T16:34:19.5693703Z 91 | /  index_struct! {
2019-07-29T16:34:19.5694407Z 93 | |          value: usize,
2019-07-29T16:34:19.5694768Z 94 | |      }
2019-07-29T16:34:19.5695101Z 95 | |  }
2019-07-29T16:34:19.5695448Z    | |__- in this macro invocation
2019-07-29T16:34:19.5695448Z    | |__- in this macro invocation
2019-07-29T16:34:19.5695509Z 
2019-07-29T16:34:20.2849305Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
2019-07-29T16:34:20.2861153Z   --> <::chalk_macros::index::index_struct macros>:18:77
2019-07-29T16:34:20.2861511Z    |
2019-07-29T16:34:20.2861935Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-07-29T16:34:20.2862391Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-07-29T16:34:20.2863236Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-07-29T16:34:20.2863673Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-07-29T16:34:20.2863995Z ...   |
2019-07-29T16:34:20.2864420Z 18 |  | & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-07-29T16:34:20.2864852Z    |  |_____________________________________________________________________________^
2019-07-29T16:34:20.2865255Z 19 | || sub_one ( & self ) -> Self {
2019-07-29T16:34:20.2865811Z 20 | || Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-07-29T16:34:20.2866360Z    | ||________________________________________________________^ not a member of trait `std::iter::Step`
2019-07-29T16:34:20.2866670Z ...   |
2019-07-29T16:34:20.2867060Z 23 |  | } impl From < usize > for $ n {
2019-07-29T16:34:20.2867482Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-07-29T16:34:20.2867972Z    |  |________________________________________________________________- in this expansion of `index_struct!`

I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact @TimNN. (Feature Requests)

@CAD97
Copy link
Contributor Author

CAD97 commented Jul 29, 2019

Rebased for the #63029 test relocation. Still blocked on a chalk update.

@joshtriplett joshtriplett requested a review from scottmcm August 1, 2019 22:01
@joshtriplett
Copy link
Member

r? @scottmcm

@adlerd
Copy link

adlerd commented Aug 7, 2019

The trait documentation seems inconsistent to me:

/// Returns `None` if ... `end` would never be reached.
/// * `steps_between(&a, &b) == Some(0)` if and only if `a >= b`
/// * `steps_between(&a, &b) == Some(n)` if and only if `a.forward(n) == Some(b)`

What is steps_between(&1, &0) supposed to return? We have a >= b so the second clause quoted above requires that this be Some(0). But the first clause requires that this be None, and the third clause indeed requires that this not be Some(_), so, None.

Perhaps it would be better to simply delete the second clause, since the third clause already covers the n == 0 case. That still allows for an exotic type where a.forward(0) != Some(a), so maybe the trait also ought to require that a.forward(0) == Some(a) as well as a.forward(x).forward(y) == a.forward(x + y).

@CAD97
Copy link
Contributor Author

CAD97 commented Aug 7, 2019

Hm, that's a good catch @adlerd. This definitely needs to be worded better. There definitely is a contradiction here as currently worded.

I think eq(steps_between(&a, &b), Some(0)) ⟺ ge(a, b) is the correct semantics here. Key for these semantics is the use:

fn size_hint(&self) -> (usize, Option<usize>) {
match Step::steps_between(&self.start, &self.end) {
Some(hint) => (hint, Some(hint)),
None => (usize::MAX, None)
}
}

In effect, steps_between knows about Range's emptiness semantics. In effect, end is already reached, so returning Some(0) is correct.

We can change this if we rewrite <Range as Iterator>::size_hint:

    fn size_hint(&self) -> (usize, Option<usize>) { 
        if self.start <= self.end {
            let hint = Step::steps_between(&self.start, &self.end);
            (hint.unwrap_or(usize::MAX), hint)
        } else {
            (0, Some(0))
        }
    }

and it might be more correct to do so in order to open up Step. Doing this would also remove the need to bound on PartialOrd for Step, though Range would of course still require PartialOrd. It still seems that Step: PartialOrd is semantically correct, though. Maybe we should add invariants that ∀a>0: a.forward(n) > a and ∀a>0: a.backward(n) < a. This would then also encode that Step doesn't allow wrapping. (Of note: for _ in 0u8.. {} panics in release mode as well with this version of Step.) EDIT: mis-remembered. succ/pred for integers are still just Add::add/Sub::sub rather than forward(1).unwrap(). I haven't changed this due to issues found in #43127 where introducing panicking code paths here led to issues.

I've somewhat convinced myself that this change (steps_between doesn't know about Range start < end semantics) is best.

cc @SimonSapin again, who wrote #43127 and included these invariant lists originally.

That still allows for an exotic type where a.forward(0) != Some(a),

No, that's covered by "a.forward(n) equals Step::successor applied to a n times". If you apply successor 0 times, the result is obviously still the input. It could be worth spelling that out more explicitly, though.

@CAD97
Copy link
Contributor Author

CAD97 commented Aug 7, 2019

I made the adjustments suggested in the previous comment, alongside with tweaks to the presentation of Step invariants. 2e95e25

@rust-highfive
Copy link
Collaborator

The job mingw-check of your PR failed (raw log). Through arcane magic we have determined that the following fragments from the build log may contain information about the problem.

Click to expand the log.
2019-08-07T23:26:33.7810448Z ##[command]git remote add origin https://github.com/rust-lang/rust
2019-08-07T23:26:33.8009808Z ##[command]git config gc.auto 0
2019-08-07T23:26:33.8111281Z ##[command]git config --get-all http.https://github.com/rust-lang/rust.extraheader
2019-08-07T23:26:33.8169017Z ##[command]git config --get-all http.proxy
2019-08-07T23:26:33.8325659Z ##[command]git -c http.extraheader="AUTHORIZATION: basic ***" fetch --force --tags --prune --progress --no-recurse-submodules --depth=2 origin +refs/heads/*:refs/remotes/origin/* +refs/pull/62886/merge:refs/remotes/pull/62886/merge
---
2019-08-07T23:27:08.2031624Z do so (now or later) by using -b with the checkout command again. Example:
2019-08-07T23:27:08.2031656Z 
2019-08-07T23:27:08.2031888Z   git checkout -b <new-branch-name>
2019-08-07T23:27:08.2031918Z 
2019-08-07T23:27:08.2031966Z HEAD is now at 4859960f7 Merge 2e95e253d72feda0aa4d122ffa47ad0923f9ecc1 into ad7c55e1fc55d9af4787b285cec1c64e3480ae84
2019-08-07T23:27:08.2188823Z ##[section]Starting: Collect CPU-usage statistics in the background
2019-08-07T23:27:08.2191777Z ==============================================================================
2019-08-07T23:27:08.2191833Z Task         : Bash
2019-08-07T23:27:08.2191880Z Description  : Run a Bash script on macOS, Linux, or Windows
---
2019-08-07T23:33:03.7496045Z     Checking lock_api v0.1.3
2019-08-07T23:33:04.0836183Z    Compiling rustc_version v0.2.3
2019-08-07T23:33:05.4106242Z     Checking polonius-engine v0.9.0
2019-08-07T23:33:06.0688989Z     Checking chalk-engine v0.9.0
2019-08-07T23:33:06.1565779Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1570674Z   --> <::chalk_macros::index::index_struct macros>:13:62
2019-08-07T23:33:06.1575168Z    |
2019-08-07T23:33:06.1579419Z 1  |   / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-08-07T23:33:06.1583973Z 2  |   | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-08-07T23:33:06.1587697Z 3  |   | struct $ n { $ vf value : usize , } impl $ n {
2019-08-07T23:33:06.1591538Z 4  |   | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-08-07T23:33:06.1595737Z ...    |
2019-08-07T23:33:06.1599564Z 13 |   | usize :: steps_between ( & start . value , & end . value ) } fn replace_one (
2019-08-07T23:33:06.1603187Z    |   |______________________________________________________________^
2019-08-07T23:33:06.1608895Z 14 |  || & mut self ) -> Self {
2019-08-07T23:33:06.1615825Z 15 |  || Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-08-07T23:33:06.1622546Z    |  ||________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1629846Z ...    |
2019-08-07T23:33:06.1657746Z 23 |   | } impl From < usize > for $ n {
2019-08-07T23:33:06.1659425Z 24 |   | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-08-07T23:33:06.1660282Z    |   |________________________________________________________________- in this expansion of `index_struct!`
2019-08-07T23:33:06.1661634Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-08-07T23:33:06.1662232Z    |
2019-08-07T23:33:06.1662232Z    |
2019-08-07T23:33:06.1664428Z 15 | /   index_struct! {
2019-08-07T23:33:06.1665591Z 16 | |       pub(crate) struct StackIndex {
2019-08-07T23:33:06.1666819Z 17 | |           value: usize,
2019-08-07T23:33:06.1671036Z 19 | |   }
2019-08-07T23:33:06.1672236Z    | |___- in this macro invocation
2019-08-07T23:33:06.1672302Z 
2019-08-07T23:33:06.1672302Z 
2019-08-07T23:33:06.1672668Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1673060Z   --> <::chalk_macros::index::index_struct macros>:15:66
2019-08-07T23:33:06.1673286Z    |
2019-08-07T23:33:06.1673654Z 1  |   / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-08-07T23:33:06.1674463Z 2  |   | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-08-07T23:33:06.1674827Z 3  |   | struct $ n { $ vf value : usize , } impl $ n {
2019-08-07T23:33:06.1675987Z 4  |   | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-08-07T23:33:06.1676314Z ...    |
2019-08-07T23:33:06.1676663Z 15 |   | Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-08-07T23:33:06.1677125Z    |   |__________________________________________________________________^
2019-08-07T23:33:06.1677579Z 16 |  || replace_zero ( & mut self ) -> Self {
2019-08-07T23:33:06.1677972Z 17 |  || Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-08-07T23:33:06.1678423Z    |  ||_________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1679389Z ...    |
2019-08-07T23:33:06.1679753Z 23 |   | } impl From < usize > for $ n {
2019-08-07T23:33:06.1680121Z 24 |   | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-08-07T23:33:06.1680633Z    |   |________________________________________________________________- in this expansion of `index_struct!`
2019-08-07T23:33:06.1681343Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-08-07T23:33:06.1681558Z    |
2019-08-07T23:33:06.1681558Z    |
2019-08-07T23:33:06.1681859Z 15 | /   index_struct! {
2019-08-07T23:33:06.1685407Z 16 | |       pub(crate) struct StackIndex {
2019-08-07T23:33:06.1685740Z 17 | |           value: usize,
2019-08-07T23:33:06.1686459Z 19 | |   }
2019-08-07T23:33:06.1686811Z    | |___- in this macro invocation
2019-08-07T23:33:06.1686872Z 
2019-08-07T23:33:06.1686872Z 
2019-08-07T23:33:06.1687304Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1687569Z   --> <::chalk_macros::index::index_struct macros>:17:67
2019-08-07T23:33:06.1687796Z    |
2019-08-07T23:33:06.1688127Z 1  |   / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-08-07T23:33:06.1688479Z 2  |   | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-08-07T23:33:06.1688824Z 3  |   | struct $ n { $ vf value : usize , } impl $ n {
2019-08-07T23:33:06.1689179Z 4  |   | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-08-07T23:33:06.1689433Z ...    |
2019-08-07T23:33:06.1698193Z 17 |   | Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-08-07T23:33:06.1698608Z    |  _|___________________________________________________________________^
2019-08-07T23:33:06.1699038Z 18 | | | & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-08-07T23:33:06.1699474Z    | |_|___________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1699750Z ...    |
2019-08-07T23:33:06.1700065Z 23 |   | } impl From < usize > for $ n {
2019-08-07T23:33:06.1700439Z 24 |   | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-08-07T23:33:06.1700828Z    |   |________________________________________________________________- in this expansion of `index_struct!`
2019-08-07T23:33:06.1709890Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-08-07T23:33:06.1710282Z    |
2019-08-07T23:33:06.1710282Z    |
2019-08-07T23:33:06.1710602Z 15 |  /  index_struct! {
2019-08-07T23:33:06.1710911Z 16 |  |      pub(crate) struct StackIndex {
2019-08-07T23:33:06.1711207Z 17 |  |          value: usize,
2019-08-07T23:33:06.1711784Z 19 |  |  }
2019-08-07T23:33:06.1712257Z    |  |__- in this macro invocation
2019-08-07T23:33:06.1712311Z 
2019-08-07T23:33:06.1712311Z 
2019-08-07T23:33:06.1712618Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1712882Z   --> <::chalk_macros::index::index_struct macros>:18:77
2019-08-07T23:33:06.1713110Z    |
2019-08-07T23:33:06.1713442Z 1  |   / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-08-07T23:33:06.1713790Z 2  |   | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-08-07T23:33:06.1714137Z 3  |   | struct $ n { $ vf value : usize , } impl $ n {
2019-08-07T23:33:06.1714492Z 4  |   | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-08-07T23:33:06.1714748Z ...    |
2019-08-07T23:33:06.1715594Z 18 |   | & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-08-07T23:33:06.1716000Z    |  _|_____________________________________________________________________________^
2019-08-07T23:33:06.1716362Z 19 | | | sub_one ( & self ) -> Self {
2019-08-07T23:33:06.1716757Z 20 | | | Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-08-07T23:33:06.1717181Z    | |_|________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1717436Z ...    |
2019-08-07T23:33:06.1717765Z 23 |   | } impl From < usize > for $ n {
2019-08-07T23:33:06.1718126Z 24 |   | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-08-07T23:33:06.1718519Z    |   |________________________________________________________________- in this expansion of `index_struct!`
2019-08-07T23:33:06.1719233Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-08-07T23:33:06.1719469Z    |
2019-08-07T23:33:06.1719469Z    |
2019-08-07T23:33:06.1719762Z 15 |  /  index_struct! {
2019-08-07T23:33:06.1720080Z 16 |  |      pub(crate) struct StackIndex {
2019-08-07T23:33:06.1720404Z 17 |  |          value: usize,
2019-08-07T23:33:06.1721121Z 19 |  |  }
2019-08-07T23:33:06.1721426Z    |  |__- in this macro invocation
2019-08-07T23:33:06.1721466Z 
2019-08-07T23:33:06.1721739Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1721739Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1722031Z   --> <::chalk_macros::index::index_struct macros>:20:58
2019-08-07T23:33:06.1722245Z    |
2019-08-07T23:33:06.1722587Z 1  |   / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-08-07T23:33:06.1722977Z 2  |   | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-08-07T23:33:06.1736306Z 3  |   | struct $ n { $ vf value : usize , } impl $ n {
2019-08-07T23:33:06.1736885Z 4  |   | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-08-07T23:33:06.1737149Z ...    |
2019-08-07T23:33:06.1737499Z 20 |   | Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-08-07T23:33:06.1738669Z    |  _|__________________________________________________________^
2019-08-07T23:33:06.1792197Z 21 | | | & self , n : usize ) -> Option < Self > {
2019-08-07T23:33:06.1792867Z 22 | | | usize :: add_usize ( & self . value , n ) . map ( | value | Self { value } ) }
2019-08-07T23:33:06.1793336Z    | |_|______________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1793673Z 23 |   | } impl From < usize > for $ n {
2019-08-07T23:33:06.1794347Z 24 |   | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-08-07T23:33:06.1794998Z    |   |________________________________________________________________- in this expansion of `index_struct!`
2019-08-07T23:33:06.1795561Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-08-07T23:33:06.1795783Z    |
2019-08-07T23:33:06.1795783Z    |
2019-08-07T23:33:06.1796073Z 15 | /   index_struct! {
2019-08-07T23:33:06.1796399Z 16 | |       pub(crate) struct StackIndex {
2019-08-07T23:33:06.1796704Z 17 | |           value: usize,
2019-08-07T23:33:06.1797797Z 19 | |   }
2019-08-07T23:33:06.1798241Z    | |___- in this macro invocation
2019-08-07T23:33:06.1798282Z 
2019-08-07T23:33:06.1798282Z 
2019-08-07T23:33:06.1798594Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1798862Z   --> <::chalk_macros::index::index_struct macros>:13:62
2019-08-07T23:33:06.1799214Z    |
2019-08-07T23:33:06.1799548Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-08-07T23:33:06.1799916Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-08-07T23:33:06.1800249Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-08-07T23:33:06.1800596Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-08-07T23:33:06.1800844Z ...   |
2019-08-07T23:33:06.1801185Z 13 |  | usize :: steps_between ( & start . value , & end . value ) } fn replace_one (
2019-08-07T23:33:06.1801515Z    |  |______________________________________________________________^
2019-08-07T23:33:06.1801842Z 14 | || & mut self ) -> Self {
2019-08-07T23:33:06.1802191Z 15 | || Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-08-07T23:33:06.1802600Z    | ||________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1802843Z ...   |
2019-08-07T23:33:06.1803149Z 23 |  | } impl From < usize > for $ n {
2019-08-07T23:33:06.1803874Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-08-07T23:33:06.1804435Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-08-07T23:33:06.1805046Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-08-07T23:33:06.1805283Z    |
2019-08-07T23:33:06.1805283Z    |
2019-08-07T23:33:06.1805606Z 34 | /  index_struct! {
2019-08-07T23:33:06.1805944Z 35 | |      pub(crate) struct AnswerIndex {
2019-08-07T23:33:06.1806279Z 36 | |          value: usize,
2019-08-07T23:33:06.1807032Z 38 | |  }
2019-08-07T23:33:06.1807367Z    | |__- in this macro invocation
2019-08-07T23:33:06.1807408Z 
2019-08-07T23:33:06.1807408Z 
2019-08-07T23:33:06.1807710Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1808007Z   --> <::chalk_macros::index::index_struct macros>:15:66
2019-08-07T23:33:06.1808255Z    |
2019-08-07T23:33:06.1808626Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-08-07T23:33:06.1809190Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-08-07T23:33:06.1809523Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-08-07T23:33:06.1809868Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-08-07T23:33:06.1810121Z ...   |
2019-08-07T23:33:06.1810454Z 15 |  | Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-08-07T23:33:06.1810776Z    |  |__________________________________________________________________^
2019-08-07T23:33:06.1811125Z 16 | || replace_zero ( & mut self ) -> Self {
2019-08-07T23:33:06.1811487Z 17 | || Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-08-07T23:33:06.1811904Z    | ||_________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1812146Z ...   |
2019-08-07T23:33:06.1812444Z 23 |  | } impl From < usize > for $ n {
2019-08-07T23:33:06.1812790Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-08-07T23:33:06.1813266Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-08-07T23:33:06.1814372Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-08-07T23:33:06.1814598Z    |
2019-08-07T23:33:06.1814598Z    |
2019-08-07T23:33:06.1814894Z 34 | /  index_struct! {
2019-08-07T23:33:06.1815203Z 35 | |      pub(crate) struct AnswerIndex {
2019-08-07T23:33:06.1815609Z 36 | |          value: usize,
2019-08-07T23:33:06.1816233Z 38 | |  }
2019-08-07T23:33:06.1816527Z    | |__- in this macro invocation
2019-08-07T23:33:06.1816575Z 
2019-08-07T23:33:06.1816575Z 
2019-08-07T23:33:06.1816850Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1817121Z   --> <::chalk_macros::index::index_struct macros>:17:67
2019-08-07T23:33:06.1817344Z    |
2019-08-07T23:33:06.1817686Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-08-07T23:33:06.1818061Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-08-07T23:33:06.1818401Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-08-07T23:33:06.1818911Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-08-07T23:33:06.1819156Z ...   |
2019-08-07T23:33:06.1819499Z 17 |  | Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-08-07T23:33:06.1819832Z    |  |___________________________________________________________________^
2019-08-07T23:33:06.1820212Z 18 | || & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-08-07T23:33:06.1820624Z    | ||___________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1820878Z ...   |
2019-08-07T23:33:06.1821177Z 23 |  | } impl From < usize > for $ n {
2019-08-07T23:33:06.1821510Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-08-07T23:33:06.1822194Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-08-07T23:33:06.1822780Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-08-07T23:33:06.1823020Z    |
2019-08-07T23:33:06.1823020Z    |
2019-08-07T23:33:06.1823333Z 34 | /  index_struct! {
2019-08-07T23:33:06.1823894Z 35 | |      pub(crate) struct AnswerIndex {
2019-08-07T23:33:06.1824205Z 36 | |          value: usize,
2019-08-07T23:33:06.1824921Z 38 | |  }
2019-08-07T23:33:06.1825218Z    | |__- in this macro invocation
2019-08-07T23:33:06.1825258Z 
2019-08-07T23:33:06.1825258Z 
2019-08-07T23:33:06.1825539Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1825812Z   --> <::chalk_macros::index::index_struct macros>:18:77
2019-08-07T23:33:06.1826029Z    |
2019-08-07T23:33:06.1826386Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-08-07T23:33:06.1826759Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-08-07T23:33:06.1827103Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-08-07T23:33:06.1827469Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-08-07T23:33:06.1827866Z ...   |
2019-08-07T23:33:06.1828215Z 18 |  | & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-08-07T23:33:06.1828551Z    |  |_____________________________________________________________________________^
2019-08-07T23:33:06.1828883Z 19 | || sub_one ( & self ) -> Self {
2019-08-07T23:33:06.1829249Z 20 | || Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-08-07T23:33:06.1829641Z    | ||________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1829891Z ...   |
2019-08-07T23:33:06.1830191Z 23 |  | } impl From < usize > for $ n {
2019-08-07T23:33:06.1830531Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-08-07T23:33:06.1831021Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-08-07T23:33:06.1831569Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-08-07T23:33:06.1831802Z    |
2019-08-07T23:33:06.1831802Z    |
2019-08-07T23:33:06.1832273Z 34 | /  index_struct! {
2019-08-07T23:33:06.1832585Z 35 | |      pub(crate) struct AnswerIndex {
2019-08-07T23:33:06.1832892Z 36 | |          value: usize,
2019-08-07T23:33:06.1833773Z 38 | |  }
2019-08-07T23:33:06.1834118Z    | |__- in this macro invocation
2019-08-07T23:33:06.1834158Z 
2019-08-07T23:33:06.1834437Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1834437Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1834721Z   --> <::chalk_macros::index::index_struct macros>:20:58
2019-08-07T23:33:06.1834937Z    |
2019-08-07T23:33:06.1835280Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-08-07T23:33:06.1835671Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-08-07T23:33:06.1836005Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-08-07T23:33:06.1836371Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-08-07T23:33:06.1836619Z ...   |
2019-08-07T23:33:06.1836966Z 20 |  | Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-08-07T23:33:06.1837310Z    |  |__________________________________________________________^
2019-08-07T23:33:06.1837665Z 21 | || & self , n : usize ) -> Option < Self > {
2019-08-07T23:33:06.1838053Z 22 | || usize :: add_usize ( & self . value , n ) . map ( | value | Self { value } ) }
2019-08-07T23:33:06.1838483Z    | ||______________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1838808Z 23 |  | } impl From < usize > for $ n {
2019-08-07T23:33:06.1839177Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-08-07T23:33:06.1839685Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-08-07T23:33:06.1840314Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-08-07T23:33:06.1840547Z    |
2019-08-07T23:33:06.1840547Z    |
2019-08-07T23:33:06.1840869Z 34 | /  index_struct! {
2019-08-07T23:33:06.1841207Z 35 | |      pub(crate) struct AnswerIndex {
2019-08-07T23:33:06.1841532Z 36 | |          value: usize,
2019-08-07T23:33:06.1842276Z 38 | |  }
2019-08-07T23:33:06.1896667Z    | |__- in this macro invocation
2019-08-07T23:33:06.1896738Z 
2019-08-07T23:33:06.1896738Z 
2019-08-07T23:33:06.1897222Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1897514Z   --> <::chalk_macros::index::index_struct macros>:13:62
2019-08-07T23:33:06.1897752Z    |
2019-08-07T23:33:06.1898098Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-08-07T23:33:06.1899128Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-08-07T23:33:06.1899480Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-08-07T23:33:06.1899837Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-08-07T23:33:06.1900103Z ...   |
2019-08-07T23:33:06.1900456Z 13 |  | usize :: steps_between ( & start . value , & end . value ) } fn replace_one (
2019-08-07T23:33:06.1900800Z    |  |______________________________________________________________^
2019-08-07T23:33:06.1901146Z 14 | || & mut self ) -> Self {
2019-08-07T23:33:06.1901509Z 15 | || Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-08-07T23:33:06.1901944Z    | ||________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1902199Z ...   |
2019-08-07T23:33:06.1902510Z 23 |  | } impl From < usize > for $ n {
2019-08-07T23:33:06.1902883Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-08-07T23:33:06.1903478Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-08-07T23:33:06.1904335Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-08-07T23:33:06.1904553Z    |
2019-08-07T23:33:06.1904553Z    |
2019-08-07T23:33:06.1904861Z 81 | /  index_struct! {
2019-08-07T23:33:06.1905189Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-08-07T23:33:06.1905606Z 83 | |          value: usize,
2019-08-07T23:33:06.1906239Z 85 | |  }
2019-08-07T23:33:06.1906530Z    | |__- in this macro invocation
2019-08-07T23:33:06.1906586Z 
2019-08-07T23:33:06.1906586Z 
2019-08-07T23:33:06.1906868Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1907145Z   --> <::chalk_macros::index::index_struct macros>:15:66
2019-08-07T23:33:06.1907376Z    |
2019-08-07T23:33:06.1907721Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-08-07T23:33:06.1908103Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-08-07T23:33:06.1908455Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-08-07T23:33:06.1908811Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-08-07T23:33:06.1909074Z ...   |
2019-08-07T23:33:06.1909417Z 15 |  | Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-08-07T23:33:06.1909760Z    |  |__________________________________________________________________^
2019-08-07T23:33:06.1910121Z 16 | || replace_zero ( & mut self ) -> Self {
2019-08-07T23:33:06.1910494Z 17 | || Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-08-07T23:33:06.1910927Z    | ||_________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1911184Z ...   |
2019-08-07T23:33:06.1911587Z 23 |  | } impl From < usize > for $ n {
2019-08-07T23:33:06.1912076Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-08-07T23:33:06.1912454Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-08-07T23:33:06.1913043Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-08-07T23:33:06.1913282Z    |
2019-08-07T23:33:06.1913282Z    |
2019-08-07T23:33:06.1914198Z 81 | /  index_struct! {
2019-08-07T23:33:06.1914776Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-08-07T23:33:06.1915204Z 83 | |          value: usize,
2019-08-07T23:33:06.1915830Z 85 | |  }
2019-08-07T23:33:06.1916124Z    | |__- in this macro invocation
2019-08-07T23:33:06.1916179Z 
2019-08-07T23:33:06.1916179Z 
2019-08-07T23:33:06.1916458Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1916731Z   --> <::chalk_macros::index::index_struct macros>:17:67
2019-08-07T23:33:06.1916961Z    |
2019-08-07T23:33:06.1917463Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-08-07T23:33:06.1917811Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-08-07T23:33:06.1918138Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-08-07T23:33:06.1918470Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-08-07T23:33:06.1918714Z ...   |
2019-08-07T23:33:06.1919045Z 17 |  | Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-08-07T23:33:06.1919376Z    |  |___________________________________________________________________^
2019-08-07T23:33:06.1919739Z 18 | || & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-08-07T23:33:06.1920137Z    | ||___________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1920387Z ...   |
2019-08-07T23:33:06.1920676Z 23 |  | } impl From < usize > for $ n {
2019-08-07T23:33:06.1921005Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-08-07T23:33:06.1921662Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-08-07T23:33:06.1922212Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-08-07T23:33:06.1922456Z    |
2019-08-07T23:33:06.1922456Z    |
2019-08-07T23:33:06.1922760Z 81 | /  index_struct! {
2019-08-07T23:33:06.1923101Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-08-07T23:33:06.1924063Z 83 | |          value: usize,
2019-08-07T23:33:06.1924748Z 85 | |  }
2019-08-07T23:33:06.1925044Z    | |__- in this macro invocation
2019-08-07T23:33:06.1925084Z 
2019-08-07T23:33:06.1925084Z 
2019-08-07T23:33:06.1925359Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1925649Z   --> <::chalk_macros::index::index_struct macros>:18:77
2019-08-07T23:33:06.1925863Z    |
2019-08-07T23:33:06.1926209Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-08-07T23:33:06.1926609Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-08-07T23:33:06.1926943Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-08-07T23:33:06.1927465Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-08-07T23:33:06.1927702Z ...   |
2019-08-07T23:33:06.1928042Z 18 |  | & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-08-07T23:33:06.1928401Z    |  |_____________________________________________________________________________^
2019-08-07T23:33:06.1928942Z 19 | || sub_one ( & self ) -> Self {
2019-08-07T23:33:06.1929294Z 20 | || Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-08-07T23:33:06.1929673Z    | ||________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1929907Z ...   |
2019-08-07T23:33:06.1930211Z 23 |  | } impl From < usize > for $ n {
2019-08-07T23:33:06.1930659Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-08-07T23:33:06.1931030Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-08-07T23:33:06.1931559Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-08-07T23:33:06.1931797Z    |
2019-08-07T23:33:06.1931797Z    |
2019-08-07T23:33:06.1932089Z 81 | /  index_struct! {
2019-08-07T23:33:06.1932415Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-08-07T23:33:06.1932872Z 83 | |          value: usize,
2019-08-07T23:33:06.1933487Z 85 | |  }
2019-08-07T23:33:06.1934503Z    | |__- in this macro invocation
2019-08-07T23:33:06.1934551Z 
2019-08-07T23:33:06.1934834Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1934834Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1935130Z   --> <::chalk_macros::index::index_struct macros>:20:58
2019-08-07T23:33:06.1935347Z    |
2019-08-07T23:33:06.1935700Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-08-07T23:33:06.1936090Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-08-07T23:33:06.1936424Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-08-07T23:33:06.1936795Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-08-07T23:33:06.1937579Z ...   |
2019-08-07T23:33:06.1937929Z 20 |  | Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-08-07T23:33:06.1938275Z    |  |__________________________________________________________^
2019-08-07T23:33:06.1938612Z 21 | || & self , n : usize ) -> Option < Self > {
2019-08-07T23:33:06.1939048Z 22 | || usize :: add_usize ( & self . value , n ) . map ( | value | Self { value } ) }
2019-08-07T23:33:06.1939464Z    | ||______________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1939775Z 23 |  | } impl From < usize > for $ n {
2019-08-07T23:33:06.1940296Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-08-07T23:33:06.1940662Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-08-07T23:33:06.1941224Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-08-07T23:33:06.1941454Z    |
2019-08-07T23:33:06.1941454Z    |
2019-08-07T23:33:06.1941767Z 81 | /  index_struct! {
2019-08-07T23:33:06.1942105Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-08-07T23:33:06.1942636Z 83 | |          value: usize,
2019-08-07T23:33:06.1943210Z 85 | |  }
2019-08-07T23:33:06.1943481Z    | |__- in this macro invocation
2019-08-07T23:33:06.1944014Z 
2019-08-07T23:33:06.1944014Z 
2019-08-07T23:33:06.1944330Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1944604Z   --> <::chalk_macros::index::index_struct macros>:13:62
2019-08-07T23:33:06.1944836Z    |
2019-08-07T23:33:06.1945193Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-08-07T23:33:06.1945566Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-08-07T23:33:06.1945914Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-08-07T23:33:06.1946271Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-08-07T23:33:06.1946533Z ...   |
2019-08-07T23:33:06.1946885Z 13 |  | usize :: steps_between ( & start . value , & end . value ) } fn replace_one (
2019-08-07T23:33:06.1947367Z    |  |______________________________________________________________^
2019-08-07T23:33:06.1947686Z 14 | || & mut self ) -> Self {
2019-08-07T23:33:06.1948022Z 15 | || Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-08-07T23:33:06.1948425Z    | ||________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1948665Z ...   |
2019-08-07T23:33:06.1948951Z 23 |  | } impl From < usize > for $ n {
2019-08-07T23:33:06.1949429Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-08-07T23:33:06.1949784Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-08-07T23:33:06.1950320Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:91:1
2019-08-07T23:33:06.1950538Z    |
2019-08-07T23:33:06.1950538Z    |
2019-08-07T23:33:06.1950828Z 91 | /  index_struct! {
2019-08-07T23:33:06.1951548Z 93 | |          value: usize,
2019-08-07T23:33:06.1951891Z 94 | |      }
2019-08-07T23:33:06.1952178Z 95 | |  }
2019-08-07T23:33:06.1952470Z    | |__- in this macro invocation
2019-08-07T23:33:06.1952470Z    | |__- in this macro invocation
2019-08-07T23:33:06.1952519Z 
2019-08-07T23:33:06.1952800Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1953069Z   --> <::chalk_macros::index::index_struct macros>:15:66
2019-08-07T23:33:06.1953295Z    |
2019-08-07T23:33:06.1954015Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-08-07T23:33:06.1954453Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-08-07T23:33:06.1954809Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-08-07T23:33:06.1955168Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-08-07T23:33:06.1955416Z ...   |
2019-08-07T23:33:06.1955775Z 15 |  | Self { value : usize :: replace_one ( & mut self . value ) , } } fn
2019-08-07T23:33:06.1956128Z    |  |__________________________________________________________________^
2019-08-07T23:33:06.1956478Z 16 | || replace_zero ( & mut self ) -> Self {
2019-08-07T23:33:06.1956850Z 17 | || Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-08-07T23:33:06.1957421Z    | ||_________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1957743Z ...   |
2019-08-07T23:33:06.1958038Z 23 |  | } impl From < usize > for $ n {
2019-08-07T23:33:06.1958511Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-08-07T23:33:06.1958868Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-08-07T23:33:06.1959408Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:91:1
2019-08-07T23:33:06.1959798Z    |
2019-08-07T23:33:06.1959798Z    |
2019-08-07T23:33:06.1960074Z 91 | /  index_struct! {
2019-08-07T23:33:06.1960759Z 93 | |          value: usize,
2019-08-07T23:33:06.1961068Z 94 | |      }
2019-08-07T23:33:06.1961351Z 95 | |  }
2019-08-07T23:33:06.1961634Z    | |__- in this macro invocation
2019-08-07T23:33:06.1961634Z    | |__- in this macro invocation
2019-08-07T23:33:06.1961672Z 
2019-08-07T23:33:06.1961951Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1962213Z   --> <::chalk_macros::index::index_struct macros>:17:67
2019-08-07T23:33:06.1962422Z    |
2019-08-07T23:33:06.1962772Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-08-07T23:33:06.1963130Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-08-07T23:33:06.1963460Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-08-07T23:33:06.1964169Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-08-07T23:33:06.1964443Z ...   |
2019-08-07T23:33:06.1964809Z 17 |  | Self { value : usize :: replace_zero ( & mut self . value ) , } } fn add_one (
2019-08-07T23:33:06.1965165Z    |  |___________________________________________________________________^
2019-08-07T23:33:06.1965542Z 18 | || & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-08-07T23:33:06.1965984Z    | ||___________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1966237Z ...   |
2019-08-07T23:33:06.1966562Z 23 |  | } impl From < usize > for $ n {
2019-08-07T23:33:06.1966916Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-08-07T23:33:06.1967580Z    |  |________________________________________________________________- in this expansion of `index_struct!`
2019-08-07T23:33:06.1968147Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:91:1
2019-08-07T23:33:06.1968385Z    |
2019-08-07T23:33:06.1968385Z    |
2019-08-07T23:33:06.1968829Z 91 | /  index_struct! {
2019-08-07T23:33:06.1969658Z 93 | |          value: usize,
2019-08-07T23:33:06.1969976Z 94 | |      }
2019-08-07T23:33:06.1970244Z 95 | |  }
2019-08-07T23:33:06.1970543Z    | |__- in this macro invocation
2019-08-07T23:33:06.1970543Z    | |__- in this macro invocation
2019-08-07T23:33:06.1970581Z 
2019-08-07T23:33:06.1970845Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
2019-08-07T23:33:06.1971121Z   --> <::chalk_macros::index::index_struct macros>:18:77
2019-08-07T23:33:06.1971329Z    |
2019-08-07T23:33:06.1971661Z 1  |  / ( $ v : vis struct $ n : ident { $ vf : vis value : usize , } ) => {
2019-08-07T23:33:06.1972039Z 2  |  | # [ derive ( Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash ) ] $ v
2019-08-07T23:33:06.1972361Z 3  |  | struct $ n { $ vf value : usize , } impl $ n {
2019-08-07T23:33:06.1972704Z 4  |  | # [ allow ( dead_code ) ] $ v fn get_and_increment ( & mut self ) -> Self {
2019-08-07T23:33:06.1972959Z ...   |
2019-08-07T23:33:06.1973447Z 18 |  | & self ) -> Self { Self { value : usize :: add_one ( & self . value ) , } } fn
2019-08-07T23:33:06.2014473Z    |  |_____________________________________________________________________________^
2019-08-07T23:33:06.2015050Z 19 | || sub_one ( & self ) -> Self {
2019-08-07T23:33:06.2015437Z 20 | || Self { value : usize :: sub_one ( & self . value ) , } } fn add_usize (
2019-08-07T23:33:06.2015873Z    | ||________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-07T23:33:06.2016126Z ...   |
2019-08-07T23:33:06.2016452Z 23 |  | } impl From < usize > for $ n {
2019-08-07T23:33:06.2017203Z 24 |  | fn from ( value : usize ) -> Self { Self { value : value } } } }
2019-08-07T23:33:06.2017710Z    |  |________________________________________________________________- in this expansion of `index_struct!`

I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact @TimNN. (Feature Requests)

@wirelessringo
Copy link

Ping from triage. @scottmcm any updates on this? Thanks.

src/libcore/iter/range.rs Outdated Show resolved Hide resolved
@JelteF
Copy link
Contributor

JelteF commented Aug 17, 2019

Just found this by accident trying to find out how to implement Sum/Product automatically for types for my derive_more crate. I think this change makes a lot of sense for range iterators. But I was wondering what the correct way is for getting the zero/one values of a type now that replace_one/replace_zero are being removed from it.

@CAD97
Copy link
Contributor Author

CAD97 commented Aug 17, 2019

num-traits has One for the multiplicative identity and Zero for the additive identity.

Especially since the methods aren't used anymore, they really don't fit on Step. num-traits definitely feels like the right place for these identities to live.

@JelteF
Copy link
Contributor

JelteF commented Aug 17, 2019

@CAD97 I agree that they don't fit in step. However it seems a bit weird that you have to install a separate crate to get the zero and one value generically. That's an issue outside for outside this PR though.

@CAD97
Copy link
Contributor Author

CAD97 commented Aug 18, 2019

Added unchecked variants of predecessor/successor and used them for Range implementation (ead9598216b4926bd3bf12c3b359943410e6514a). Additionally, RangeTo now consistently panics in both debug and release mode when overflowing. Still blocked on a chalk upgrade.

I used the unchecked add/sub intrinsics directly; if they're going to get inherent impls on the integer types, that should probably be used instead.

@rust-highfive
Copy link
Collaborator

The job mingw-check of your PR failed (raw log). Through arcane magic we have determined that the following fragments from the build log may contain information about the problem.

Click to expand the log.
2019-08-18T19:06:08.3907595Z ##[command]git remote add origin https://github.com/rust-lang/rust
2019-08-18T19:06:08.4093068Z ##[command]git config gc.auto 0
2019-08-18T19:06:08.4172532Z ##[command]git config --get-all http.https://github.com/rust-lang/rust.extraheader
2019-08-18T19:06:08.4225868Z ##[command]git config --get-all http.proxy
2019-08-18T19:06:08.4362421Z ##[command]git -c http.extraheader="AUTHORIZATION: basic ***" fetch --force --tags --prune --progress --no-recurse-submodules --depth=2 origin +refs/heads/*:refs/remotes/origin/* +refs/pull/62886/merge:refs/remotes/pull/62886/merge
---
2019-08-18T19:06:43.9977141Z do so (now or later) by using -b with the checkout command again. Example:
2019-08-18T19:06:43.9977355Z 
2019-08-18T19:06:43.9977742Z   git checkout -b <new-branch-name>
2019-08-18T19:06:43.9977942Z 
2019-08-18T19:06:43.9978130Z HEAD is now at 4f5351379 Merge ead9598216b4926bd3bf12c3b359943410e6514a into ea52be482ab4945fda63cb65b6a198309a041e3c
2019-08-18T19:06:44.0159794Z ##[section]Starting: Collect CPU-usage statistics in the background
2019-08-18T19:06:44.0162323Z ==============================================================================
2019-08-18T19:06:44.0162372Z Task         : Bash
2019-08-18T19:06:44.0162428Z Description  : Run a Bash script on macOS, Linux, or Windows
---
2019-08-18T19:13:02.2359129Z    Compiling rustc_version v0.2.3
2019-08-18T19:13:03.0692137Z     Checking lock_api v0.1.3
2019-08-18T19:13:03.6764108Z     Checking polonius-engine v0.9.0
2019-08-18T19:13:04.4975219Z     Checking chalk-engine v0.9.0
2019-08-18T19:13:04.5864686Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-08-18T19:13:04.5865093Z   --> <::chalk_macros::index::index_struct macros>:18:70
2019-08-18T19:13:04.5865566Z    |
2019-08-18T19:13:04.5865860Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-18T19:13:04.5866133Z 2  |   | {
2019-08-18T19:13:04.5866439Z 3  |   |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-18T19:13:04.5866739Z 4  |   |     struct $ n { $ vf value : usize , } impl $ n
2019-08-18T19:13:04.5866942Z ...    |
2019-08-18T19:13:04.5867643Z 18 |   |         { usize :: steps_between (& start . value , & end . value) } fn
2019-08-18T19:13:04.5868091Z    |  _|______________________________________________________________________^
2019-08-18T19:13:04.5868449Z 19 | | |         replace_one (& mut self) -> Self
2019-08-18T19:13:04.5868863Z 20 | | |         { Self { value : usize :: replace_one (& mut self . value) , } } fn
2019-08-18T19:13:04.5869294Z    | |_|________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-18T19:13:04.5869559Z ...    |
2019-08-18T19:13:04.5869936Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-18T19:13:04.5870240Z 34 |   | }
2019-08-18T19:13:04.5870587Z    |   |_- in this expansion of `index_struct!`
2019-08-18T19:13:04.5871254Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-08-18T19:13:04.5871455Z    |
2019-08-18T19:13:04.5871455Z    |
2019-08-18T19:13:04.5871704Z 15 |  /  index_struct! {
2019-08-18T19:13:04.5871981Z 16 |  |      pub(crate) struct StackIndex {
2019-08-18T19:13:04.5872256Z 17 |  |          value: usize,
2019-08-18T19:13:04.5872766Z 19 |  |  }
2019-08-18T19:13:04.5873305Z    |  |__- in this macro invocation
2019-08-18T19:13:04.5885449Z 
2019-08-18T19:13:04.5885449Z 
2019-08-18T19:13:04.5885955Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-08-18T19:13:04.5886200Z   --> <::chalk_macros::index::index_struct macros>:20:74
2019-08-18T19:13:04.5896518Z    |
2019-08-18T19:13:04.5897681Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-18T19:13:04.5898112Z 2  |   | {
2019-08-18T19:13:04.5898532Z 3  |   |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-18T19:13:04.5898928Z 4  |   |     struct $ n { $ vf value : usize , } impl $ n
2019-08-18T19:13:04.5899209Z ...    |
2019-08-18T19:13:04.5899597Z 20 |   |         { Self { value : usize :: replace_one (& mut self . value) , } } fn
2019-08-18T19:13:04.5900041Z    |  _|__________________________________________________________________________^
2019-08-18T19:13:04.5900420Z 21 | | |         replace_zero (& mut self) -> Self
2019-08-18T19:13:04.5901100Z 22 | | |         { Self { value : usize :: replace_zero (& mut self . value) , } } fn
2019-08-18T19:13:04.5901642Z    | |_|_________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-18T19:13:04.5901907Z ...    |
2019-08-18T19:13:04.5902408Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-18T19:13:04.5902696Z 34 |   | }
2019-08-18T19:13:04.5902989Z    |   |_- in this expansion of `index_struct!`
2019-08-18T19:13:04.5903512Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-08-18T19:13:04.5903718Z    |
2019-08-18T19:13:04.5903718Z    |
2019-08-18T19:13:04.5903982Z 15 | /   index_struct! {
2019-08-18T19:13:04.5904307Z 16 | |       pub(crate) struct StackIndex {
2019-08-18T19:13:04.5904585Z 17 | |           value: usize,
2019-08-18T19:13:04.5905130Z 19 | |   }
2019-08-18T19:13:04.5905733Z    | |___- in this macro invocation
2019-08-18T19:13:04.5905798Z 
2019-08-18T19:13:04.5905798Z 
2019-08-18T19:13:04.5988100Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-08-18T19:13:04.5988620Z   --> <::chalk_macros::index::index_struct macros>:22:75
2019-08-18T19:13:04.5989112Z    |
2019-08-18T19:13:04.5989468Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-18T19:13:04.5989764Z 2  |   | {
2019-08-18T19:13:04.5990168Z 3  |   |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-18T19:13:04.5990519Z 4  |   |     struct $ n { $ vf value : usize , } impl $ n
2019-08-18T19:13:04.5990954Z ...    |
2019-08-18T19:13:04.5991426Z 22 |   |         { Self { value : usize :: replace_zero (& mut self . value) , } } fn
2019-08-18T19:13:04.5991889Z    |  _|___________________________________________________________________________^
2019-08-18T19:13:04.5992182Z 23 | | |         add_one (& self) -> Self
2019-08-18T19:13:04.5992492Z 24 | | |         { Self { value : usize :: add_one (& self . value) , } } fn sub_one
2019-08-18T19:13:04.5992848Z    | |_|________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-18T19:13:04.5993062Z ...    |
2019-08-18T19:13:04.5993357Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-18T19:13:04.5993601Z 34 |   | }
2019-08-18T19:13:04.5993862Z    |   |_- in this expansion of `index_struct!`
2019-08-18T19:13:04.5994312Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-08-18T19:13:04.5994492Z    |
2019-08-18T19:13:04.5994492Z    |
2019-08-18T19:13:04.5994740Z 15 | /   index_struct! {
2019-08-18T19:13:04.5995005Z 16 | |       pub(crate) struct StackIndex {
2019-08-18T19:13:04.5995266Z 17 | |           value: usize,
2019-08-18T19:13:04.5995721Z 19 | |   }
2019-08-18T19:13:04.5996060Z    | |___- in this macro invocation
2019-08-18T19:13:04.5996104Z 
2019-08-18T19:13:04.5996104Z 
2019-08-18T19:13:04.6061890Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6062236Z   --> <::chalk_macros::index::index_struct macros>:24:66
2019-08-18T19:13:04.6062673Z    |
2019-08-18T19:13:04.6063281Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-18T19:13:04.6063541Z 2  |   | {
2019-08-18T19:13:04.6063829Z 3  |   |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-18T19:13:04.6064129Z 4  |   |     struct $ n { $ vf value : usize , } impl $ n
2019-08-18T19:13:04.6064333Z ...    |
2019-08-18T19:13:04.6064623Z 24 |   |         { Self { value : usize :: add_one (& self . value) , } } fn sub_one
2019-08-18T19:13:04.6064942Z    |  _|__________________________________________________________________^
2019-08-18T19:13:04.6065209Z 25 | | |         (& self) -> Self
2019-08-18T19:13:04.6065548Z 26 | | |         { Self { value : usize :: sub_one (& self . value) , } } fn add_usize
2019-08-18T19:13:04.6065884Z    | |_|________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6066103Z ...    |
2019-08-18T19:13:04.6066392Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-18T19:13:04.6066646Z 34 |   | }
2019-08-18T19:13:04.6066897Z    |   |_- in this expansion of `index_struct!`
2019-08-18T19:13:04.6067829Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-08-18T19:13:04.6068351Z    |
2019-08-18T19:13:04.6068351Z    |
2019-08-18T19:13:04.6068650Z 15 | /   index_struct! {
2019-08-18T19:13:04.6068986Z 16 | |       pub(crate) struct StackIndex {
2019-08-18T19:13:04.6069299Z 17 | |           value: usize,
2019-08-18T19:13:04.6069883Z 19 | |   }
2019-08-18T19:13:04.6070178Z    | |___- in this macro invocation
2019-08-18T19:13:04.6088808Z 
2019-08-18T19:13:04.6089620Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6089620Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6092932Z   --> <::chalk_macros::index::index_struct macros>:26:66
2019-08-18T19:13:04.6093197Z    |
2019-08-18T19:13:04.6093757Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-18T19:13:04.6094223Z 2  |   | {
2019-08-18T19:13:04.6094597Z 3  |   |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-18T19:13:04.6094958Z 4  |   |     struct $ n { $ vf value : usize , } impl $ n
2019-08-18T19:13:04.6095201Z ...    |
2019-08-18T19:13:04.6095537Z 26 |   |         { Self { value : usize :: sub_one (& self . value) , } } fn add_usize
2019-08-18T19:13:04.6095914Z    |  _|__________________________________________________________________^
2019-08-18T19:13:04.6096251Z 27 | | |         (& self , n : usize) -> Option < Self >
2019-08-18T19:13:04.6096655Z 28 | | |         {
2019-08-18T19:13:04.6097620Z 29 | | |             usize :: add_usize (& self . value , n) . map
2019-08-18T19:13:04.6098041Z 30 | | |             (| value | Self { value })
2019-08-18T19:13:04.6098822Z    | |_|_________^ not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6098822Z    | |_|_________^ not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6099194Z 32 |   |     } impl From < usize > for $ n
2019-08-18T19:13:04.6099590Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-18T19:13:04.6099915Z 34 |   | }
2019-08-18T19:13:04.6100282Z    |   |_- in this expansion of `index_struct!`
2019-08-18T19:13:04.6101201Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-08-18T19:13:04.6101431Z    |
2019-08-18T19:13:04.6101431Z    |
2019-08-18T19:13:04.6101700Z 15 | /   index_struct! {
2019-08-18T19:13:04.6101992Z 16 | |       pub(crate) struct StackIndex {
2019-08-18T19:13:04.6102416Z 17 | |           value: usize,
2019-08-18T19:13:04.6103022Z 19 | |   }
2019-08-18T19:13:04.6103407Z    | |___- in this macro invocation
2019-08-18T19:13:04.6103448Z 
2019-08-18T19:13:04.6103448Z 
2019-08-18T19:13:04.6260380Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6262474Z   --> <::chalk_macros::index::index_struct macros>:18:70
2019-08-18T19:13:04.6263009Z    |
2019-08-18T19:13:04.6264695Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-18T19:13:04.6265010Z 2  |   | {
2019-08-18T19:13:04.6265367Z 3  |   |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-18T19:13:04.6266149Z 4  |   |     struct $ n { $ vf value : usize , } impl $ n
2019-08-18T19:13:04.6266604Z ...    |
2019-08-18T19:13:04.6267977Z 18 |   |         { usize :: steps_between (& start . value , & end . value) } fn
2019-08-18T19:13:04.6269801Z    |  _|______________________________________________________________________^
2019-08-18T19:13:04.6270290Z 19 | | |         replace_one (& mut self) -> Self
2019-08-18T19:13:04.6273001Z 20 | | |         { Self { value : usize :: replace_one (& mut self . value) , } } fn
2019-08-18T19:13:04.6273645Z    | |_|________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6274216Z ...    |
2019-08-18T19:13:04.6274552Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-18T19:13:04.6275051Z 34 |   | }
2019-08-18T19:13:04.6275560Z    |   |_- in this expansion of `index_struct!`
2019-08-18T19:13:04.6276672Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-08-18T19:13:04.6278044Z    |
2019-08-18T19:13:04.6278044Z    |
2019-08-18T19:13:04.6278474Z 34 | /   index_struct! {
2019-08-18T19:13:04.6279080Z 35 | |       pub(crate) struct AnswerIndex {
2019-08-18T19:13:04.6282122Z 36 | |           value: usize,
2019-08-18T19:13:04.6282982Z 38 | |   }
2019-08-18T19:13:04.6283406Z    | |___- in this macro invocation
2019-08-18T19:13:04.6283538Z 
2019-08-18T19:13:04.6283538Z 
2019-08-18T19:13:04.6283812Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6284055Z   --> <::chalk_macros::index::index_struct macros>:20:74
2019-08-18T19:13:04.6284270Z    |
2019-08-18T19:13:04.6284571Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-18T19:13:04.6284838Z 2  |   | {
2019-08-18T19:13:04.6285177Z 3  |   |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-18T19:13:04.6285490Z 4  |   |     struct $ n { $ vf value : usize , } impl $ n
2019-08-18T19:13:04.6285729Z ...    |
2019-08-18T19:13:04.6286213Z 20 |   |         { Self { value : usize :: replace_one (& mut self . value) , } } fn
2019-08-18T19:13:04.6286719Z    |  _|__________________________________________________________________________^
2019-08-18T19:13:04.6287047Z 21 | | |         replace_zero (& mut self) -> Self
2019-08-18T19:13:04.6288199Z 22 | | |         { Self { value : usize :: replace_zero (& mut self . value) , } } fn
2019-08-18T19:13:04.6288945Z    | |_|_________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6289311Z ...    |
2019-08-18T19:13:04.6290010Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-18T19:13:04.6290512Z 34 |   | }
2019-08-18T19:13:04.6291297Z    |   |_- in this expansion of `index_struct!`
2019-08-18T19:13:04.6336253Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-08-18T19:13:04.6336502Z    |
2019-08-18T19:13:04.6336502Z    |
2019-08-18T19:13:04.6336760Z 34 | /   index_struct! {
2019-08-18T19:13:04.6337038Z 35 | |       pub(crate) struct AnswerIndex {
2019-08-18T19:13:04.6338006Z 36 | |           value: usize,
2019-08-18T19:13:04.6338713Z 38 | |   }
2019-08-18T19:13:04.6339071Z    | |___- in this macro invocation
2019-08-18T19:13:04.6339213Z 
2019-08-18T19:13:04.6339213Z 
2019-08-18T19:13:04.6339550Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6339882Z   --> <::chalk_macros::index::index_struct macros>:22:75
2019-08-18T19:13:04.6340130Z    |
2019-08-18T19:13:04.6340503Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-18T19:13:04.6341023Z 2  |   | {
2019-08-18T19:13:04.6341336Z 3  |   |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-18T19:13:04.6341660Z 4  |   |     struct $ n { $ vf value : usize , } impl $ n
2019-08-18T19:13:04.6341885Z ...    |
2019-08-18T19:13:04.6342188Z 22 |   |         { Self { value : usize :: replace_zero (& mut self . value) , } } fn
2019-08-18T19:13:04.6342534Z    |  _|___________________________________________________________________________^
2019-08-18T19:13:04.6342832Z 23 | | |         add_one (& self) -> Self
2019-08-18T19:13:04.6343520Z 24 | | |         { Self { value : usize :: add_one (& self . value) , } } fn sub_one
2019-08-18T19:13:04.6343882Z    | |_|________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6344287Z ...    |
2019-08-18T19:13:04.6344597Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-18T19:13:04.6344857Z 34 |   | }
2019-08-18T19:13:04.6345128Z    |   |_- in this expansion of `index_struct!`
2019-08-18T19:13:04.6345617Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-08-18T19:13:04.6346162Z    |
2019-08-18T19:13:04.6346162Z    |
2019-08-18T19:13:04.6346455Z 34 | /   index_struct! {
2019-08-18T19:13:04.6346920Z 35 | |       pub(crate) struct AnswerIndex {
2019-08-18T19:13:04.6347223Z 36 | |           value: usize,
2019-08-18T19:13:04.6348433Z 38 | |   }
2019-08-18T19:13:04.6348785Z    | |___- in this macro invocation
2019-08-18T19:13:04.6348916Z 
2019-08-18T19:13:04.6348916Z 
2019-08-18T19:13:04.6349343Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6349677Z   --> <::chalk_macros::index::index_struct macros>:24:66
2019-08-18T19:13:04.6349925Z    |
2019-08-18T19:13:04.6350295Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-18T19:13:04.6350651Z 2  |   | {
2019-08-18T19:13:04.6351176Z 3  |   |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-18T19:13:04.6351478Z 4  |   |     struct $ n { $ vf value : usize , } impl $ n
2019-08-18T19:13:04.6351740Z ...    |
2019-08-18T19:13:04.6352055Z 24 |   |         { Self { value : usize :: add_one (& self . value) , } } fn sub_one
2019-08-18T19:13:04.6352559Z    |  _|__________________________________________________________________^
2019-08-18T19:13:04.6353030Z 25 | | |         (& self) -> Self
2019-08-18T19:13:04.6353513Z 26 | | |         { Self { value : usize :: sub_one (& self . value) , } } fn add_usize
2019-08-18T19:13:04.6353883Z    | |_|________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6354091Z ...    |
2019-08-18T19:13:04.6354380Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-18T19:13:04.6354624Z 34 |   | }
2019-08-18T19:13:04.6354877Z    |   |_- in this expansion of `index_struct!`
2019-08-18T19:13:04.6355522Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-08-18T19:13:04.6355728Z    |
2019-08-18T19:13:04.6355728Z    |
2019-08-18T19:13:04.6355992Z 34 | /   index_struct! {
2019-08-18T19:13:04.6356258Z 35 | |       pub(crate) struct AnswerIndex {
2019-08-18T19:13:04.6356512Z 36 | |           value: usize,
2019-08-18T19:13:04.6357133Z 38 | |   }
2019-08-18T19:13:04.6357855Z    | |___- in this macro invocation
2019-08-18T19:13:04.6358012Z 
2019-08-18T19:13:04.6465258Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6465258Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6465815Z   --> <::chalk_macros::index::index_struct macros>:26:66
2019-08-18T19:13:04.6466031Z    |
2019-08-18T19:13:04.6466543Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-18T19:13:04.6466864Z 2  |   | {
2019-08-18T19:13:04.6467628Z 3  |   |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-18T19:13:04.6468109Z 4  |   |     struct $ n { $ vf value : usize , } impl $ n
2019-08-18T19:13:04.6469947Z ...    |
2019-08-18T19:13:04.6470634Z 26 |   |         { Self { value : usize :: sub_one (& self . value) , } } fn add_usize
2019-08-18T19:13:04.6471554Z    |  _|__________________________________________________________________^
2019-08-18T19:13:04.6473020Z 27 | | |         (& self , n : usize) -> Option < Self >
2019-08-18T19:13:04.6473551Z 28 | | |         {
2019-08-18T19:13:04.6473921Z 29 | | |             usize :: add_usize (& self . value , n) . map
2019-08-18T19:13:04.6474461Z 30 | | |             (| value | Self { value })
2019-08-18T19:13:04.6476734Z    | |_|_________^ not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6476734Z    | |_|_________^ not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6477288Z 32 |   |     } impl From < usize > for $ n
2019-08-18T19:13:04.6478963Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-18T19:13:04.6479400Z 34 |   | }
2019-08-18T19:13:04.6479778Z    |   |_- in this expansion of `index_struct!`
2019-08-18T19:13:04.6480373Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-08-18T19:13:04.6480643Z    |
2019-08-18T19:13:04.6480643Z    |
2019-08-18T19:13:04.6481266Z 34 | /   index_struct! {
2019-08-18T19:13:04.6481625Z 35 | |       pub(crate) struct AnswerIndex {
2019-08-18T19:13:04.6481932Z 36 | |           value: usize,
2019-08-18T19:13:04.6482751Z 38 | |   }
2019-08-18T19:13:04.6483206Z    | |___- in this macro invocation
2019-08-18T19:13:04.6483241Z 
2019-08-18T19:13:04.6483241Z 
2019-08-18T19:13:04.6483558Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6483831Z   --> <::chalk_macros::index::index_struct macros>:18:70
2019-08-18T19:13:04.6484024Z    |
2019-08-18T19:13:04.6484326Z 1  |  / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-18T19:13:04.6484591Z 2  |  | {
2019-08-18T19:13:04.6484890Z 3  |  |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-18T19:13:04.6485193Z 4  |  |     struct $ n { $ vf value : usize , } impl $ n
2019-08-18T19:13:04.6485406Z ...   |
2019-08-18T19:13:04.6485704Z 18 |  |         { usize :: steps_between (& start . value , & end . value) } fn
2019-08-18T19:13:04.6486198Z    |  |______________________________________________________________________^
2019-08-18T19:13:04.6486484Z 19 | ||         replace_one (& mut self) -> Self
2019-08-18T19:13:04.6486992Z 20 | ||         { Self { value : usize :: replace_one (& mut self . value) , } } fn
2019-08-18T19:13:04.6487681Z    | ||________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6487970Z ...   |
2019-08-18T19:13:04.6488368Z 33 |  |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-18T19:13:04.6488704Z 34 |  | }
2019-08-18T19:13:04.6489069Z    |  |_- in this expansion of `index_struct!`
2019-08-18T19:13:04.6489653Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-08-18T19:13:04.6489919Z    |
2019-08-18T19:13:04.6489919Z    |
2019-08-18T19:13:04.6490335Z 81 | /  index_struct! {
2019-08-18T19:13:04.6490740Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-08-18T19:13:04.6491212Z 83 | |          value: usize,
2019-08-18T19:13:04.6491818Z 85 | |  }
2019-08-18T19:13:04.6492098Z    | |__- in this macro invocation
2019-08-18T19:13:04.6492133Z 
2019-08-18T19:13:04.6492133Z 
2019-08-18T19:13:04.6492376Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6492811Z   --> <::chalk_macros::index::index_struct macros>:20:74
2019-08-18T19:13:04.6493007Z    |
2019-08-18T19:13:04.6493291Z 1  |  / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-18T19:13:04.6493560Z 2  |  | {
2019-08-18T19:13:04.6493869Z 3  |  |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-18T19:13:04.6494296Z 4  |  |     struct $ n { $ vf value : usize , } impl $ n
2019-08-18T19:13:04.6494552Z ...   |
2019-08-18T19:13:04.6494855Z 20 |  |         { Self { value : usize :: replace_one (& mut self . value) , } } fn
2019-08-18T19:13:04.6495165Z    |  |__________________________________________________________________________^
2019-08-18T19:13:04.6495638Z 21 | ||         replace_zero (& mut self) -> Self
2019-08-18T19:13:04.6495944Z 22 | ||         { Self { value : usize :: replace_zero (& mut self . value) , } } fn
2019-08-18T19:13:04.6496298Z    | ||_________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6496514Z ...   |
2019-08-18T19:13:04.6496807Z 33 |  |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-18T19:13:04.6497244Z 34 |  | }
2019-08-18T19:13:04.6497861Z    |  |_- in this expansion of `index_struct!`
2019-08-18T19:13:04.6498467Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-08-18T19:13:04.6498716Z    |
2019-08-18T19:13:04.6498716Z    |
2019-08-18T19:13:04.6499057Z 81 | /  index_struct! {
2019-08-18T19:13:04.6499541Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-08-18T19:13:04.6499925Z 83 | |          value: usize,
2019-08-18T19:13:04.6500692Z 85 | |  }
2019-08-18T19:13:04.6501205Z    | |__- in this macro invocation
2019-08-18T19:13:04.6501240Z 
2019-08-18T19:13:04.6501240Z 
2019-08-18T19:13:04.6623587Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6624290Z   --> <::chalk_macros::index::index_struct macros>:22:75
2019-08-18T19:13:04.6624729Z    |
2019-08-18T19:13:04.6625243Z 1  |  / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-18T19:13:04.6625538Z 2  |  | {
2019-08-18T19:13:04.6626071Z 3  |  |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-18T19:13:04.6628494Z 4  |  |     struct $ n { $ vf value : usize , } impl $ n
2019-08-18T19:13:04.6628906Z ...   |
2019-08-18T19:13:04.6629469Z 22 |  |         { Self { value : usize :: replace_zero (& mut self . value) , } } fn
2019-08-18T19:13:04.6630052Z    |  |___________________________________________________________________________^
2019-08-18T19:13:04.6631191Z 23 | ||         add_one (& self) -> Self
2019-08-18T19:13:04.6631870Z 24 | ||         { Self { value : usize :: add_one (& self . value) , } } fn sub_one
2019-08-18T19:13:04.6632411Z    | ||________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6632718Z ...   |
2019-08-18T19:13:04.6633259Z 33 |  |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-18T19:13:04.6633515Z 34 |  | }
2019-08-18T19:13:04.6633804Z    |  |_- in this expansion of `index_struct!`
2019-08-18T19:13:04.6634251Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-08-18T19:13:04.6634452Z    |
2019-08-18T19:13:04.6634452Z    |
2019-08-18T19:13:04.6634693Z 81 | /  index_struct! {
2019-08-18T19:13:04.6635116Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-08-18T19:13:04.6635450Z 83 | |          value: usize,
2019-08-18T19:13:04.6636408Z 85 | |  }
2019-08-18T19:13:04.6636660Z    | |__- in this macro invocation
2019-08-18T19:13:04.6636696Z 
2019-08-18T19:13:04.6636696Z 
2019-08-18T19:13:04.6637014Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6637616Z   --> <::chalk_macros::index::index_struct macros>:24:66
2019-08-18T19:13:04.6637867Z    |
2019-08-18T19:13:04.6638235Z 1  |  / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-18T19:13:04.6638528Z 2  |  | {
2019-08-18T19:13:04.6638881Z 3  |  |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-18T19:13:04.6639253Z 4  |  |     struct $ n { $ vf value : usize , } impl $ n
2019-08-18T19:13:04.6639498Z ...   |
2019-08-18T19:13:04.6639877Z 24 |  |         { Self { value : usize :: add_one (& self . value) , } } fn sub_one
2019-08-18T19:13:04.6640221Z    |  |__________________________________________________________________^
2019-08-18T19:13:04.6640564Z 25 | ||         (& self) -> Self
2019-08-18T19:13:04.6641098Z 26 | ||         { Self { value : usize :: sub_one (& self . value) , } } fn add_usize
2019-08-18T19:13:04.6641475Z    | ||________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6641868Z ...   |
2019-08-18T19:13:04.6642166Z 33 |  |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-18T19:13:04.6642429Z 34 |  | }
2019-08-18T19:13:04.6642693Z    |  |_- in this expansion of `index_struct!`
2019-08-18T19:13:04.6643160Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-08-18T19:13:04.6643341Z    |
2019-08-18T19:13:04.6643341Z    |
2019-08-18T19:13:04.6643597Z 81 | /  index_struct! {
2019-08-18T19:13:04.6643872Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-08-18T19:13:04.6644226Z 83 | |          value: usize,
2019-08-18T19:13:04.6644763Z 85 | |  }
2019-08-18T19:13:04.6645265Z    | |__- in this macro invocation
2019-08-18T19:13:04.6645314Z 
2019-08-18T19:13:04.6730467Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6730467Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6733772Z   --> <::chalk_macros::index::index_struct macros>:26:66
2019-08-18T19:13:04.6734870Z    |
2019-08-18T19:13:04.6735232Z 1  |  / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-18T19:13:04.6735497Z 2  |  | {
2019-08-18T19:13:04.6735973Z 3  |  |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-18T19:13:04.6736450Z 4  |  |     struct $ n { $ vf value : usize , } impl $ n
2019-08-18T19:13:04.6736650Z ...   |
2019-08-18T19:13:04.6736953Z 26 |  |         { Self { value : usize :: sub_one (& self . value) , } } fn add_usize
2019-08-18T19:13:04.6737963Z    |  |__________________________________________________________________^
2019-08-18T19:13:04.6738327Z 27 | ||         (& self , n : usize) -> Option < Self >
2019-08-18T19:13:04.6738662Z 28 | ||         {
2019-08-18T19:13:04.6739024Z 29 | ||             usize :: add_usize (& self . value , n) . map
2019-08-18T19:13:04.6739379Z 30 | ||             (| value | Self { value })
2019-08-18T19:13:04.6739686Z 31 | ||         }
2019-08-18T19:13:04.6740049Z    | ||_________^ not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6740445Z 32 |  |     } impl From < usize > for $ n
2019-08-18T19:13:04.6741028Z 33 |  |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-18T19:13:04.6741440Z 34 |  | }
2019-08-18T19:13:04.6741751Z    |  |_- in this expansion of `index_struct!`
2019-08-18T19:13:04.6742219Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-08-18T19:13:04.6742553Z    |
2019-08-18T19:13:04.6742553Z    |
2019-08-18T19:13:04.6742839Z 81 | /  index_struct! {
2019-08-18T19:13:04.6743154Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-08-18T19:13:04.6743513Z 83 | |          value: usize,
2019-08-18T19:13:04.6744022Z 85 | |  }
2019-08-18T19:13:04.6744261Z    | |__- in this macro invocation
2019-08-18T19:13:04.6744332Z 
2019-08-18T19:13:04.6744332Z 
2019-08-18T19:13:04.6821528Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6821843Z   --> <::chalk_macros::index::index_struct macros>:18:70
2019-08-18T19:13:04.6848168Z    |
2019-08-18T19:13:04.6848770Z 1  |  / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-18T19:13:04.6849114Z 2  |  | {
2019-08-18T19:13:04.6849511Z 3  |  |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-18T19:13:04.6849855Z 4  |  |     struct $ n { $ vf value : usize , } impl $ n
2019-08-18T19:13:04.6850126Z ...   |
2019-08-18T19:13:04.6850488Z 18 |  |         { usize :: steps_between (& start . value , & end . value) } fn
2019-08-18T19:13:04.6850835Z    |  |______________________________________________________________________^
2019-08-18T19:13:04.6851362Z 19 | ||         replace_one (& mut self) -> Self
2019-08-18T19:13:04.6851722Z 20 | ||         { Self { value : usize :: replace_one (& mut self . value) , } } fn
2019-08-18T19:13:04.6852286Z    | ||________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6852516Z ...   |
2019-08-18T19:13:04.6852829Z 33 |  |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-18T19:13:04.6853305Z 34 |  | }
2019-08-18T19:13:04.6853610Z    |  |_- in this expansion of `index_struct!`
2019-08-18T19:13:04.6854372Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:91:1
2019-08-18T19:13:04.6854584Z    |
2019-08-18T19:13:04.6854584Z    |
2019-08-18T19:13:04.6855048Z 91 | /  index_struct! {
2019-08-18T19:13:04.6855664Z 93 | |          value: usize,
2019-08-18T19:13:04.6856059Z 94 | |      }
2019-08-18T19:13:04.6856321Z 95 | |  }
2019-08-18T19:13:04.6856595Z    | |__- in this macro invocation
2019-08-18T19:13:04.6856595Z    | |__- in this macro invocation
2019-08-18T19:13:04.6899444Z 
2019-08-18T19:13:04.6911093Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6920521Z   --> <::chalk_macros::index::index_struct macros>:20:74
2019-08-18T19:13:04.6921012Z    |
2019-08-18T19:13:04.6921363Z 1  |  / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-18T19:13:04.6921640Z 2  |  | {
2019-08-18T19:13:04.6922333Z 3  |  |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-18T19:13:04.6922678Z 4  |  |     struct $ n { $ vf value : usize , } impl $ n
2019-08-18T19:13:04.6922917Z ...   |
2019-08-18T19:13:04.6923288Z 20 |  |         { Self { value : usize :: replace_one (& mut self . value) , } } fn
2019-08-18T19:13:04.6928941Z    |  |__________________________________________________________________________^
2019-08-18T19:13:04.6929401Z 21 | ||         replace_zero (& mut self) -> Self
2019-08-18T19:13:04.6929791Z 22 | ||         { Self { value : usize :: replace_zero (& mut self . value) , } } fn
2019-08-18T19:13:04.6930243Z    | ||_________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6930500Z ...   |
2019-08-18T19:13:04.6931025Z 33 |  |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-18T19:13:04.6931304Z 34 |  | }
2019-08-18T19:13:04.6931590Z    |  |_- in this expansion of `index_struct!`
2019-08-18T19:13:04.6932078Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:91:1
2019-08-18T19:13:04.6932276Z    |
2019-08-18T19:13:04.6932276Z    |
2019-08-18T19:13:04.6932712Z 91 | /  index_struct! {
2019-08-18T19:13:04.6937925Z 93 | |          value: usize,
2019-08-18T19:13:04.6943581Z 94 | |      }
2019-08-18T19:13:04.6950220Z 95 | |  }
2019-08-18T19:13:04.6950603Z    | |__- in this macro invocation
2019-08-18T19:13:04.6950603Z    | |__- in this macro invocation
2019-08-18T19:13:04.6950672Z 
2019-08-18T19:13:04.6950957Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-08-18T19:13:04.6951250Z   --> <::chalk_macros::index::index_struct macros>:22:75
2019-08-18T19:13:04.6955936Z    |
2019-08-18T19:13:04.6956308Z 1  |  / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-18T19:13:04.6961208Z 2  |  | {
2019-08-18T19:13:04.6961646Z 3  |  |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-18T19:13:04.6966212Z 4  |  |     struct $ n { $ vf value : usize , } impl $ n
2019-08-18T19:13:04.6970676Z ...   |
2019-08-18T19:13:04.6971324Z 22 |  |         { Self { value : usize :: replace_zero (& mut self . value) , } } fn
2019-08-18T19:13:04.6971636Z    |  |___________________________________________________________________________^
2019-08-18T19:13:04.7054759Z 23 | ||         add_one (& self) -> Self
2019-08-18T19:13:04.7055216Z 24 | ||         { Self { value : usize :: add_one (& self . value) , } } fn sub_one
2019-08-18T19:13:04.7055793Z    | ||________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-18T19:13:04.7056036Z ...   |
2019-08-18T19:13:04.7056355Z 33 |  |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-18T19:13:04.7056646Z 34 |  | }
2019-08-18T19:13:04.7057580Z    |  |_- in this expansion of `index_struct!`
2019-08-18T19:13:04.7058180Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:91:1
2019-08-18T19:13:04.7058398Z    |
2019-08-18T19:13:04.7058398Z    |
2019-08-18T19:13:04.7058689Z 91 | /  index_struct! {
2019-08-18T19:13:04.7059565Z 93 | |          value: usize,
2019-08-18T19:13:04.7059869Z 94 | |      }
2019-08-18T19:13:04.7060267Z 95 | |  }
2019-08-18T19:13:04.7060881Z    | |__- in this macro invocation
2019-08-18T19:13:04.7060881Z    | |__- in this macro invocation
2019-08-18T19:13:04.7060920Z 
2019-08-18T19:13:04.7081602Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
---
2019-08-18T19:13:06.7472071Z == clock drift check ==
2019-08-18T19:13:06.7487117Z   local time: Sun Aug 18 19:13:06 UTC 2019
2019-08-18T19:13:06.8995023Z   network time: Sun, 18 Aug 2019 19:13:06 GMT
2019-08-18T19:13:06.8997170Z == end clock drift check ==
2019-08-18T19:13:09.6749115Z ##[error]Bash exited with code '1'.
2019-08-18T19:13:09.6780171Z ##[section]Starting: Checkout
2019-08-18T19:13:09.6781961Z ==============================================================================
2019-08-18T19:13:09.6782024Z Task         : Get sources
2019-08-18T19:13:09.6782064Z Description  : Get sources from a repository. Supports Git, TfsVC, and SVN repositories.

I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact @TimNN. (Feature Requests)

@joelpalmer
Copy link

Ping from Triage: any update on this @scottmcm @CAD97? I'll leave it as waiting-on-review for now.

@rust-highfive
Copy link
Collaborator

The job mingw-check of your PR failed (raw log). Through arcane magic we have determined that the following fragments from the build log may contain information about the problem.

Click to expand the log.
2019-08-26T19:19:46.3467565Z ##[command]git remote add origin https://github.com/rust-lang/rust
2019-08-26T19:19:46.3675172Z ##[command]git config gc.auto 0
2019-08-26T19:19:46.3761642Z ##[command]git config --get-all http.https://github.com/rust-lang/rust.extraheader
2019-08-26T19:19:46.3809955Z ##[command]git config --get-all http.proxy
2019-08-26T19:19:46.3945760Z ##[command]git -c http.extraheader="AUTHORIZATION: basic ***" fetch --force --tags --prune --progress --no-recurse-submodules --depth=2 origin +refs/heads/*:refs/remotes/origin/* +refs/pull/62886/merge:refs/remotes/pull/62886/merge
---
2019-08-26T19:20:21.2046241Z do so (now or later) by using -b with the checkout command again. Example:
2019-08-26T19:20:21.2046435Z 
2019-08-26T19:20:21.2046807Z   git checkout -b <new-branch-name>
2019-08-26T19:20:21.2046970Z 
2019-08-26T19:20:21.2047143Z HEAD is now at 36143c39a Merge f651d33feb9f02bbe77174fd9ee579928b213b94 into 9fa8f140233047fb0211dbaee531a290bcfeae7e
2019-08-26T19:20:21.2200770Z ##[section]Starting: Collect CPU-usage statistics in the background
2019-08-26T19:20:21.2203632Z ==============================================================================
2019-08-26T19:20:21.2203684Z Task         : Bash
2019-08-26T19:20:21.2203727Z Description  : Run a Bash script on macOS, Linux, or Windows
---
2019-08-26T19:26:18.6826706Z     Checking crossbeam-epoch v0.3.1
2019-08-26T19:26:19.0347072Z     Checking lock_api v0.1.3
2019-08-26T19:26:19.3152652Z     Checking polonius-engine v0.9.0
2019-08-26T19:26:20.0850315Z     Checking chalk-engine v0.9.0
2019-08-26T19:26:20.1673910Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-08-26T19:26:20.1674471Z   --> <::chalk_macros::index::index_struct macros>:18:70
2019-08-26T19:26:20.1674716Z    |
2019-08-26T19:26:20.1675224Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-26T19:26:20.1675529Z 2  |   | {
2019-08-26T19:26:20.1675881Z 3  |   |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-26T19:26:20.1676223Z 4  |   |     struct $ n { $ vf value : usize , } impl $ n
2019-08-26T19:26:20.1676474Z ...    |
2019-08-26T19:26:20.1676823Z 18 |   |         { usize :: steps_between (& start . value , & end . value) } fn
2019-08-26T19:26:20.1677171Z    |  _|______________________________________________________________________^
2019-08-26T19:26:20.1677709Z 19 | | |         replace_one (& mut self) -> Self
2019-08-26T19:26:20.1678151Z 20 | | |         { Self { value : usize :: replace_one (& mut self . value) , } } fn
2019-08-26T19:26:20.1678561Z    | |_|________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-26T19:26:20.1678964Z ...    |
2019-08-26T19:26:20.1679301Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-26T19:26:20.1679615Z 34 |   | }
2019-08-26T19:26:20.1679928Z    |   |_- in this expansion of `index_struct!`
2019-08-26T19:26:20.1680520Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-08-26T19:26:20.1680768Z    |
2019-08-26T19:26:20.1680768Z    |
2019-08-26T19:26:20.1681079Z 15 |  /  index_struct! {
2019-08-26T19:26:20.1681545Z 16 |  |      pub(crate) struct StackIndex {
2019-08-26T19:26:20.1682435Z 17 |  |          value: usize,
2019-08-26T19:26:20.1683108Z 19 |  |  }
2019-08-26T19:26:20.1683422Z    |  |__- in this macro invocation
2019-08-26T19:26:20.1683461Z 
2019-08-26T19:26:20.1683461Z 
2019-08-26T19:26:20.1684093Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-08-26T19:26:20.1686436Z   --> <::chalk_macros::index::index_struct macros>:20:74
2019-08-26T19:26:20.1686704Z    |
2019-08-26T19:26:20.1689508Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-26T19:26:20.1689867Z 2  |   | {
2019-08-26T19:26:20.1690246Z 3  |   |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-26T19:26:20.1690568Z 4  |   |     struct $ n { $ vf value : usize , } impl $ n
2019-08-26T19:26:20.1690839Z ...    |
2019-08-26T19:26:20.1691176Z 20 |   |         { Self { value : usize :: replace_one (& mut self . value) , } } fn
2019-08-26T19:26:20.1692300Z    |  _|__________________________________________________________________________^
2019-08-26T19:26:20.1692788Z 21 | | |         replace_zero (& mut self) -> Self
2019-08-26T19:26:20.1693182Z 22 | | |         { Self { value : usize :: replace_zero (& mut self . value) , } } fn
2019-08-26T19:26:20.1693634Z    | |_|_________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-26T19:26:20.1694037Z ...    |
2019-08-26T19:26:20.1694414Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-26T19:26:20.1694720Z 34 |   | }
2019-08-26T19:26:20.1695190Z    |   |_- in this expansion of `index_struct!`
2019-08-26T19:26:20.1695827Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-08-26T19:26:20.1696065Z    |
2019-08-26T19:26:20.1696065Z    |
2019-08-26T19:26:20.1696334Z 15 | /   index_struct! {
2019-08-26T19:26:20.1696625Z 16 | |       pub(crate) struct StackIndex {
2019-08-26T19:26:20.1696932Z 17 | |           value: usize,
2019-08-26T19:26:20.1697461Z 19 | |   }
2019-08-26T19:26:20.1697753Z    | |___- in this macro invocation
2019-08-26T19:26:20.1697790Z 
2019-08-26T19:26:20.1789744Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-08-26T19:26:20.1789744Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-08-26T19:26:20.1797187Z   --> <::chalk_macros::index::index_struct macros>:22:75
2019-08-26T19:26:20.1797545Z    |
2019-08-26T19:26:20.1797917Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-26T19:26:20.1798237Z 2  |   | {
2019-08-26T19:26:20.1798642Z 3  |   |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-26T19:26:20.1798987Z 4  |   |     struct $ n { $ vf value : usize , } impl $ n
2019-08-26T19:26:20.1799270Z ...    |
2019-08-26T19:26:20.1799631Z 22 |   |         { Self { value : usize :: replace_zero (& mut self . value) , } } fn
2019-08-26T19:26:20.1800239Z    |  _|___________________________________________________________________________^
2019-08-26T19:26:20.1800725Z 23 | | |         add_one (& self) -> Self
2019-08-26T19:26:20.1801134Z 24 | | |         { Self { value : usize :: add_one (& self . value) , } } fn sub_one
2019-08-26T19:26:20.1801668Z    | |_|________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-26T19:26:20.1802677Z ...    |
2019-08-26T19:26:20.1803052Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-26T19:26:20.1803374Z 34 |   | }
2019-08-26T19:26:20.1803702Z    |   |_- in this expansion of `index_struct!`
2019-08-26T19:26:20.1804316Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-08-26T19:26:20.1804542Z    |
2019-08-26T19:26:20.1804542Z    |
2019-08-26T19:26:20.1804870Z 15 | /   index_struct! {
2019-08-26T19:26:20.1805187Z 16 | |       pub(crate) struct StackIndex {
2019-08-26T19:26:20.1805789Z 17 | |           value: usize,
2019-08-26T19:26:20.1806354Z 19 | |   }
2019-08-26T19:26:20.1806646Z    | |___- in this macro invocation
2019-08-26T19:26:20.1806723Z 
2019-08-26T19:26:20.1806723Z 
2019-08-26T19:26:20.1869087Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
2019-08-26T19:26:20.1869435Z   --> <::chalk_macros::index::index_struct macros>:24:66
2019-08-26T19:26:20.1870082Z    |
2019-08-26T19:26:20.1870430Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-26T19:26:20.1870723Z 2  |   | {
2019-08-26T19:26:20.1871100Z 3  |   |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-26T19:26:20.1871540Z 4  |   |     struct $ n { $ vf value : usize , } impl $ n
2019-08-26T19:26:20.1872442Z ...    |
2019-08-26T19:26:20.1872892Z 24 |   |         { Self { value : usize :: add_one (& self . value) , } } fn sub_one
2019-08-26T19:26:20.1873262Z    |  _|__________________________________________________________________^
2019-08-26T19:26:20.1873785Z 25 | | |         (& self) -> Self
2019-08-26T19:26:20.1874218Z 26 | | |         { Self { value : usize :: sub_one (& self . value) , } } fn add_usize
2019-08-26T19:26:20.1874656Z    | |_|________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-26T19:26:20.1875047Z ...    |
2019-08-26T19:26:20.1875524Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-26T19:26:20.1875852Z 34 |   | }
2019-08-26T19:26:20.1876174Z    |   |_- in this expansion of `index_struct!`
2019-08-26T19:26:20.1876714Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-08-26T19:26:20.1876930Z    |
2019-08-26T19:26:20.1876930Z    |
2019-08-26T19:26:20.1877348Z 15 | /   index_struct! {
2019-08-26T19:26:20.1877654Z 16 | |       pub(crate) struct StackIndex {
2019-08-26T19:26:20.1877939Z 17 | |           value: usize,
2019-08-26T19:26:20.1878502Z 19 | |   }
2019-08-26T19:26:20.1878795Z    | |___- in this macro invocation
2019-08-26T19:26:20.1879475Z 
2019-08-26T19:26:20.1879838Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-08-26T19:26:20.1879838Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-08-26T19:26:20.1880137Z   --> <::chalk_macros::index::index_struct macros>:26:66
2019-08-26T19:26:20.1880347Z    |
2019-08-26T19:26:20.1880670Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-26T19:26:20.1880967Z 2  |   | {
2019-08-26T19:26:20.1881312Z 3  |   |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-26T19:26:20.1882207Z 4  |   |     struct $ n { $ vf value : usize , } impl $ n
2019-08-26T19:26:20.1882546Z ...    |
2019-08-26T19:26:20.1882917Z 26 |   |         { Self { value : usize :: sub_one (& self . value) , } } fn add_usize
2019-08-26T19:26:20.1883320Z    |  _|__________________________________________________________________^
2019-08-26T19:26:20.1883807Z 27 | | |         (& self , n : usize) -> Option < Self >
2019-08-26T19:26:20.1884208Z 28 | | |         {
2019-08-26T19:26:20.1884577Z 29 | | |             usize :: add_usize (& self . value , n) . map
2019-08-26T19:26:20.1884949Z 30 | | |             (| value | Self { value })
2019-08-26T19:26:20.1885991Z    | |_|_________^ not a member of trait `std::iter::Step`
2019-08-26T19:26:20.1885991Z    | |_|_________^ not a member of trait `std::iter::Step`
2019-08-26T19:26:20.1886325Z 32 |   |     } impl From < usize > for $ n
2019-08-26T19:26:20.1886659Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-26T19:26:20.1886957Z 34 |   | }
2019-08-26T19:26:20.1887274Z    |   |_- in this expansion of `index_struct!`
2019-08-26T19:26:20.1887861Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-08-26T19:26:20.1888092Z    |
2019-08-26T19:26:20.1888092Z    |
2019-08-26T19:26:20.1888413Z 15 | /   index_struct! {
2019-08-26T19:26:20.1888738Z 16 | |       pub(crate) struct StackIndex {
2019-08-26T19:26:20.1889052Z 17 | |           value: usize,
2019-08-26T19:26:20.1889665Z 19 | |   }
2019-08-26T19:26:20.1889969Z    | |___- in this macro invocation
2019-08-26T19:26:20.1890024Z 
2019-08-26T19:26:20.1890024Z 
2019-08-26T19:26:20.2073425Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2073778Z   --> <::chalk_macros::index::index_struct macros>:18:70
2019-08-26T19:26:20.2074037Z    |
2019-08-26T19:26:20.2074395Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-26T19:26:20.2074699Z 2  |   | {
2019-08-26T19:26:20.2075099Z 3  |   |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-26T19:26:20.2075553Z 4  |   |     struct $ n { $ vf value : usize , } impl $ n
2019-08-26T19:26:20.2075805Z ...    |
2019-08-26T19:26:20.2076303Z 18 |   |         { usize :: steps_between (& start . value , & end . value) } fn
2019-08-26T19:26:20.2076704Z    |  _|______________________________________________________________________^
2019-08-26T19:26:20.2077060Z 19 | | |         replace_one (& mut self) -> Self
2019-08-26T19:26:20.2077541Z 20 | | |         { Self { value : usize :: replace_one (& mut self . value) , } } fn
2019-08-26T19:26:20.2077972Z    | |_|________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2078223Z ...    |
2019-08-26T19:26:20.2078556Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-26T19:26:20.2078857Z 34 |   | }
2019-08-26T19:26:20.2079175Z    |   |_- in this expansion of `index_struct!`
2019-08-26T19:26:20.2079757Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-08-26T19:26:20.2079986Z    |
2019-08-26T19:26:20.2079986Z    |
2019-08-26T19:26:20.2080314Z 34 | /   index_struct! {
2019-08-26T19:26:20.2080636Z 35 | |       pub(crate) struct AnswerIndex {
2019-08-26T19:26:20.2080947Z 36 | |           value: usize,
2019-08-26T19:26:20.2081673Z 38 | |   }
2019-08-26T19:26:20.2082488Z    | |___- in this macro invocation
2019-08-26T19:26:20.2082537Z 
2019-08-26T19:26:20.2082537Z 
2019-08-26T19:26:20.2082835Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2083132Z   --> <::chalk_macros::index::index_struct macros>:20:74
2019-08-26T19:26:20.2083377Z    |
2019-08-26T19:26:20.2083726Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-26T19:26:20.2084024Z 2  |   | {
2019-08-26T19:26:20.2084407Z 3  |   |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-26T19:26:20.2084765Z 4  |   |     struct $ n { $ vf value : usize , } impl $ n
2019-08-26T19:26:20.2085041Z ...    |
2019-08-26T19:26:20.2085621Z 20 |   |         { Self { value : usize :: replace_one (& mut self . value) , } } fn
2019-08-26T19:26:20.2086032Z    |  _|__________________________________________________________________________^
2019-08-26T19:26:20.2086372Z 21 | | |         replace_zero (& mut self) -> Self
2019-08-26T19:26:20.2086861Z 22 | | |         { Self { value : usize :: replace_zero (& mut self . value) , } } fn
2019-08-26T19:26:20.2087281Z    | |_|_________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2087546Z ...    |
2019-08-26T19:26:20.2087878Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-26T19:26:20.2088154Z 34 |   | }
2019-08-26T19:26:20.2088474Z    |   |_- in this expansion of `index_struct!`
2019-08-26T19:26:20.2089087Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-08-26T19:26:20.2089335Z    |
2019-08-26T19:26:20.2089335Z    |
2019-08-26T19:26:20.2089641Z 34 | /   index_struct! {
2019-08-26T19:26:20.2089968Z 35 | |       pub(crate) struct AnswerIndex {
2019-08-26T19:26:20.2090297Z 36 | |           value: usize,
2019-08-26T19:26:20.2090916Z 38 | |   }
2019-08-26T19:26:20.2091225Z    | |___- in this macro invocation
2019-08-26T19:26:20.2091262Z 
2019-08-26T19:26:20.2091664Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2091664Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2092469Z   --> <::chalk_macros::index::index_struct macros>:22:75
2019-08-26T19:26:20.2092713Z    |
2019-08-26T19:26:20.2093059Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-26T19:26:20.2093381Z 2  |   | {
2019-08-26T19:26:20.2093747Z 3  |   |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-26T19:26:20.2094117Z 4  |   |     struct $ n { $ vf value : usize , } impl $ n
2019-08-26T19:26:20.2094376Z ...    |
2019-08-26T19:26:20.2094847Z 22 |   |         { Self { value : usize :: replace_zero (& mut self . value) , } } fn
2019-08-26T19:26:20.2095406Z    |  _|___________________________________________________________________________^
2019-08-26T19:26:20.2095862Z 23 | | |         add_one (& self) -> Self
2019-08-26T19:26:20.2096339Z 24 | | |         { Self { value : usize :: add_one (& self . value) , } } fn sub_one
2019-08-26T19:26:20.2096751Z    | |_|________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2096996Z ...    |
2019-08-26T19:26:20.2097340Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-26T19:26:20.2097738Z 34 |   | }
2019-08-26T19:26:20.2098063Z    |   |_- in this expansion of `index_struct!`
2019-08-26T19:26:20.2098639Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-08-26T19:26:20.2098887Z    |
2019-08-26T19:26:20.2098887Z    |
2019-08-26T19:26:20.2099205Z 34 | /   index_struct! {
2019-08-26T19:26:20.2099541Z 35 | |       pub(crate) struct AnswerIndex {
2019-08-26T19:26:20.2099880Z 36 | |           value: usize,
2019-08-26T19:26:20.2100491Z 38 | |   }
2019-08-26T19:26:20.2100946Z    | |___- in this macro invocation
2019-08-26T19:26:20.2100983Z 
2019-08-26T19:26:20.2100983Z 
2019-08-26T19:26:20.2189484Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2189835Z   --> <::chalk_macros::index::index_struct macros>:24:66
2019-08-26T19:26:20.2190056Z    |
2019-08-26T19:26:20.2190768Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-26T19:26:20.2191079Z 2  |   | {
2019-08-26T19:26:20.2191421Z 3  |   |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-26T19:26:20.2192488Z 4  |   |     struct $ n { $ vf value : usize , } impl $ n
2019-08-26T19:26:20.2192811Z ...    |
2019-08-26T19:26:20.2193340Z 24 |   |         { Self { value : usize :: add_one (& self . value) , } } fn sub_one
2019-08-26T19:26:20.2193786Z    |  _|__________________________________________________________________^
2019-08-26T19:26:20.2194129Z 25 | | |         (& self) -> Self
2019-08-26T19:26:20.2194532Z 26 | | |         { Self { value : usize :: sub_one (& self . value) , } } fn add_usize
2019-08-26T19:26:20.2195079Z    | |_|________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2195463Z ...    |
2019-08-26T19:26:20.2195939Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-26T19:26:20.2196213Z 34 |   | }
2019-08-26T19:26:20.2196513Z    |   |_- in this expansion of `index_struct!`
2019-08-26T19:26:20.2197043Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-08-26T19:26:20.2197266Z    |
2019-08-26T19:26:20.2197266Z    |
2019-08-26T19:26:20.2197540Z 34 | /   index_struct! {
2019-08-26T19:26:20.2197841Z 35 | |       pub(crate) struct AnswerIndex {
2019-08-26T19:26:20.2198142Z 36 | |           value: usize,
2019-08-26T19:26:20.2198676Z 38 | |   }
2019-08-26T19:26:20.2198983Z    | |___- in this macro invocation
2019-08-26T19:26:20.2199660Z 
2019-08-26T19:26:20.2200019Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2200019Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2200305Z   --> <::chalk_macros::index::index_struct macros>:26:66
2019-08-26T19:26:20.2200522Z    |
2019-08-26T19:26:20.2200847Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-26T19:26:20.2201142Z 2  |   | {
2019-08-26T19:26:20.2201606Z 3  |   |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-26T19:26:20.2202781Z 4  |   |     struct $ n { $ vf value : usize , } impl $ n
2019-08-26T19:26:20.2203090Z ...    |
2019-08-26T19:26:20.2203581Z 26 |   |         { Self { value : usize :: sub_one (& self . value) , } } fn add_usize
2019-08-26T19:26:20.2204015Z    |  _|__________________________________________________________________^
2019-08-26T19:26:20.2204378Z 27 | | |         (& self , n : usize) -> Option < Self >
2019-08-26T19:26:20.2204700Z 28 | | |         {
2019-08-26T19:26:20.2205319Z 29 | | |             usize :: add_usize (& self . value , n) . map
2019-08-26T19:26:20.2205773Z 30 | | |             (| value | Self { value })
2019-08-26T19:26:20.2206451Z    | |_|_________^ not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2206451Z    | |_|_________^ not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2206754Z 32 |   |     } impl From < usize > for $ n
2019-08-26T19:26:20.2207114Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-26T19:26:20.2207393Z 34 |   | }
2019-08-26T19:26:20.2207712Z    |   |_- in this expansion of `index_struct!`
2019-08-26T19:26:20.2208272Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-08-26T19:26:20.2208518Z    |
2019-08-26T19:26:20.2208518Z    |
2019-08-26T19:26:20.2208815Z 34 | /   index_struct! {
2019-08-26T19:26:20.2209135Z 35 | |       pub(crate) struct AnswerIndex {
2019-08-26T19:26:20.2209473Z 36 | |           value: usize,
2019-08-26T19:26:20.2210070Z 38 | |   }
2019-08-26T19:26:20.2210393Z    | |___- in this macro invocation
2019-08-26T19:26:20.2210431Z 
2019-08-26T19:26:20.2210431Z 
2019-08-26T19:26:20.2350229Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2350561Z   --> <::chalk_macros::index::index_struct macros>:18:70
2019-08-26T19:26:20.2350777Z    |
2019-08-26T19:26:20.2351660Z 1  |  / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-26T19:26:20.2352598Z 2  |  | {
2019-08-26T19:26:20.2353152Z 3  |  |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-26T19:26:20.2353578Z 4  |  |     struct $ n { $ vf value : usize , } impl $ n
2019-08-26T19:26:20.2353827Z ...   |
2019-08-26T19:26:20.2354182Z 18 |  |         { usize :: steps_between (& start . value , & end . value) } fn
2019-08-26T19:26:20.2354672Z    |  |______________________________________________________________________^
2019-08-26T19:26:20.2355016Z 19 | ||         replace_one (& mut self) -> Self
2019-08-26T19:26:20.2355522Z 20 | ||         { Self { value : usize :: replace_one (& mut self . value) , } } fn
2019-08-26T19:26:20.2355930Z    | ||________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2356169Z ...   |
2019-08-26T19:26:20.2356521Z 33 |  |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-26T19:26:20.2356811Z 34 |  | }
2019-08-26T19:26:20.2357125Z    |  |_- in this expansion of `index_struct!`
2019-08-26T19:26:20.2357633Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-08-26T19:26:20.2357855Z    |
2019-08-26T19:26:20.2357855Z    |
2019-08-26T19:26:20.2358128Z 81 | /  index_struct! {
2019-08-26T19:26:20.2358434Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-08-26T19:26:20.2358744Z 83 | |          value: usize,
2019-08-26T19:26:20.2359271Z 85 | |  }
2019-08-26T19:26:20.2359574Z    | |__- in this macro invocation
2019-08-26T19:26:20.2360379Z 
2019-08-26T19:26:20.2360379Z 
2019-08-26T19:26:20.2360741Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2361027Z   --> <::chalk_macros::index::index_struct macros>:20:74
2019-08-26T19:26:20.2361235Z    |
2019-08-26T19:26:20.2361698Z 1  |  / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-26T19:26:20.2362642Z 2  |  | {
2019-08-26T19:26:20.2363432Z 3  |  |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-26T19:26:20.2363930Z 4  |  |     struct $ n { $ vf value : usize , } impl $ n
2019-08-26T19:26:20.2364226Z ...   |
2019-08-26T19:26:20.2364585Z 20 |  |         { Self { value : usize :: replace_one (& mut self . value) , } } fn
2019-08-26T19:26:20.2364953Z    |  |__________________________________________________________________________^
2019-08-26T19:26:20.2365406Z 21 | ||         replace_zero (& mut self) -> Self
2019-08-26T19:26:20.2365909Z 22 | ||         { Self { value : usize :: replace_zero (& mut self . value) , } } fn
2019-08-26T19:26:20.2366316Z    | ||_________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2366557Z ...   |
2019-08-26T19:26:20.2366898Z 33 |  |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-26T19:26:20.2367184Z 34 |  | }
2019-08-26T19:26:20.2367496Z    |  |_- in this expansion of `index_struct!`
2019-08-26T19:26:20.2368054Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-08-26T19:26:20.2368297Z    |
2019-08-26T19:26:20.2368297Z    |
2019-08-26T19:26:20.2368595Z 81 | /  index_struct! {
2019-08-26T19:26:20.2368925Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-08-26T19:26:20.2369249Z 83 | |          value: usize,
2019-08-26T19:26:20.2369845Z 85 | |  }
2019-08-26T19:26:20.2370176Z    | |__- in this macro invocation
2019-08-26T19:26:20.2370215Z 
2019-08-26T19:26:20.2370498Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2370498Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2370791Z   --> <::chalk_macros::index::index_struct macros>:22:75
2019-08-26T19:26:20.2371410Z    |
2019-08-26T19:26:20.2372376Z 1  |  / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-26T19:26:20.2372761Z 2  |  | {
2019-08-26T19:26:20.2373127Z 3  |  |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-26T19:26:20.2373586Z 4  |  |     struct $ n { $ vf value : usize , } impl $ n
2019-08-26T19:26:20.2373906Z ...   |
2019-08-26T19:26:20.2374266Z 22 |  |         { Self { value : usize :: replace_zero (& mut self . value) , } } fn
2019-08-26T19:26:20.2374630Z    |  |___________________________________________________________________________^
2019-08-26T19:26:20.2375074Z 23 | ||         add_one (& self) -> Self
2019-08-26T19:26:20.2375552Z 24 | ||         { Self { value : usize :: add_one (& self . value) , } } fn sub_one
2019-08-26T19:26:20.2375974Z    | ||________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2376217Z ...   |
2019-08-26T19:26:20.2376558Z 33 |  |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-26T19:26:20.2376847Z 34 |  | }
2019-08-26T19:26:20.2377144Z    |  |_- in this expansion of `index_struct!`
2019-08-26T19:26:20.2377705Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-08-26T19:26:20.2377937Z    |
2019-08-26T19:26:20.2377937Z    |
2019-08-26T19:26:20.2378251Z 81 | /  index_struct! {
2019-08-26T19:26:20.2378584Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-08-26T19:26:20.2378893Z 83 | |          value: usize,
2019-08-26T19:26:20.2379504Z 85 | |  }
2019-08-26T19:26:20.2379820Z    | |__- in this macro invocation
2019-08-26T19:26:20.2380423Z 
2019-08-26T19:26:20.2380423Z 
2019-08-26T19:26:20.2494132Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2494496Z   --> <::chalk_macros::index::index_struct macros>:24:66
2019-08-26T19:26:20.2495282Z    |
2019-08-26T19:26:20.2495755Z 1  |  / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-26T19:26:20.2496058Z 2  |  | {
2019-08-26T19:26:20.2496415Z 3  |  |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-26T19:26:20.2496751Z 4  |  |     struct $ n { $ vf value : usize , } impl $ n
2019-08-26T19:26:20.2497131Z ...   |
2019-08-26T19:26:20.2497517Z 24 |  |         { Self { value : usize :: add_one (& self . value) , } } fn sub_one
2019-08-26T19:26:20.2497860Z    |  |__________________________________________________________________^
2019-08-26T19:26:20.2498170Z 25 | ||         (& self) -> Self
2019-08-26T19:26:20.2498655Z 26 | ||         { Self { value : usize :: sub_one (& self . value) , } } fn add_usize
2019-08-26T19:26:20.2499060Z    | ||________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2499305Z ...   |
2019-08-26T19:26:20.2499654Z 33 |  |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-26T19:26:20.2499932Z 34 |  | }
2019-08-26T19:26:20.2500259Z    |  |_- in this expansion of `index_struct!`
2019-08-26T19:26:20.2500813Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-08-26T19:26:20.2501060Z    |
2019-08-26T19:26:20.2501060Z    |
2019-08-26T19:26:20.2501367Z 81 | /  index_struct! {
2019-08-26T19:26:20.2502290Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-08-26T19:26:20.2502679Z 83 | |          value: usize,
2019-08-26T19:26:20.2503282Z 85 | |  }
2019-08-26T19:26:20.2503767Z    | |__- in this macro invocation
2019-08-26T19:26:20.2504502Z 
2019-08-26T19:26:20.2504903Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2504903Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2505317Z   --> <::chalk_macros::index::index_struct macros>:26:66
2019-08-26T19:26:20.2505530Z    |
2019-08-26T19:26:20.2505867Z 1  |  / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-26T19:26:20.2506142Z 2  |  | {
2019-08-26T19:26:20.2506485Z 3  |  |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-26T19:26:20.2506823Z 4  |  |     struct $ n { $ vf value : usize , } impl $ n
2019-08-26T19:26:20.2507060Z ...   |
2019-08-26T19:26:20.2507535Z 26 |  |         { Self { value : usize :: sub_one (& self . value) , } } fn add_usize
2019-08-26T19:26:20.2507904Z    |  |__________________________________________________________________^
2019-08-26T19:26:20.2508250Z 27 | ||         (& self , n : usize) -> Option < Self >
2019-08-26T19:26:20.2508712Z 28 | ||         {
2019-08-26T19:26:20.2509065Z 29 | ||             usize :: add_usize (& self . value , n) . map
2019-08-26T19:26:20.2509401Z 30 | ||             (| value | Self { value })
2019-08-26T19:26:20.2509701Z 31 | ||         }
2019-08-26T19:26:20.2510054Z    | ||_________^ not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2510356Z 32 |  |     } impl From < usize > for $ n
2019-08-26T19:26:20.2510710Z 33 |  |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-26T19:26:20.2510986Z 34 |  | }
2019-08-26T19:26:20.2511292Z    |  |_- in this expansion of `index_struct!`
2019-08-26T19:26:20.2512378Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-08-26T19:26:20.2512614Z    |
2019-08-26T19:26:20.2512614Z    |
2019-08-26T19:26:20.2512926Z 81 | /  index_struct! {
2019-08-26T19:26:20.2513275Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-08-26T19:26:20.2513596Z 83 | |          value: usize,
2019-08-26T19:26:20.2514175Z 85 | |  }
2019-08-26T19:26:20.2514494Z    | |__- in this macro invocation
2019-08-26T19:26:20.2514533Z 
2019-08-26T19:26:20.2514533Z 
2019-08-26T19:26:20.2628854Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2629194Z   --> <::chalk_macros::index::index_struct macros>:18:70
2019-08-26T19:26:20.2629833Z    |
2019-08-26T19:26:20.2630192Z 1  |  / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-26T19:26:20.2630477Z 2  |  | {
2019-08-26T19:26:20.2630970Z 3  |  |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-26T19:26:20.2631371Z 4  |  |     struct $ n { $ vf value : usize , } impl $ n
2019-08-26T19:26:20.2631733Z ...   |
2019-08-26T19:26:20.2632961Z 18 |  |         { usize :: steps_between (& start . value , & end . value) } fn
2019-08-26T19:26:20.2633509Z    |  |______________________________________________________________________^
2019-08-26T19:26:20.2633854Z 19 | ||         replace_one (& mut self) -> Self
2019-08-26T19:26:20.2634265Z 20 | ||         { Self { value : usize :: replace_one (& mut self . value) , } } fn
2019-08-26T19:26:20.2634695Z    | ||________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2634979Z ...   |
2019-08-26T19:26:20.2635338Z 33 |  |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-26T19:26:20.2635915Z 34 |  | }
2019-08-26T19:26:20.2636225Z    |  |_- in this expansion of `index_struct!`
2019-08-26T19:26:20.2636741Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:91:1
2019-08-26T19:26:20.2636950Z    |
2019-08-26T19:26:20.2636950Z    |
2019-08-26T19:26:20.2637220Z 91 | /  index_struct! {
2019-08-26T19:26:20.2637813Z 93 | |          value: usize,
2019-08-26T19:26:20.2638080Z 94 | |      }
2019-08-26T19:26:20.2638369Z 95 | |  }
2019-08-26T19:26:20.2638649Z    | |__- in this macro invocation
2019-08-26T19:26:20.2638649Z    | |__- in this macro invocation
2019-08-26T19:26:20.2639313Z 
2019-08-26T19:26:20.2640065Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2640362Z   --> <::chalk_macros::index::index_struct macros>:20:74
2019-08-26T19:26:20.2640568Z    |
2019-08-26T19:26:20.2640930Z 1  |  / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-26T19:26:20.2641207Z 2  |  | {
2019-08-26T19:26:20.2642229Z 3  |  |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-26T19:26:20.2642695Z 4  |  |     struct $ n { $ vf value : usize , } impl $ n
2019-08-26T19:26:20.2642951Z ...   |
2019-08-26T19:26:20.2643341Z 20 |  |         { Self { value : usize :: replace_one (& mut self . value) , } } fn
2019-08-26T19:26:20.2643827Z    |  |__________________________________________________________________________^
2019-08-26T19:26:20.2644197Z 21 | ||         replace_zero (& mut self) -> Self
2019-08-26T19:26:20.2644589Z 22 | ||         { Self { value : usize :: replace_zero (& mut self . value) , } } fn
2019-08-26T19:26:20.2645039Z    | ||_________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2645429Z ...   |
2019-08-26T19:26:20.2645897Z 33 |  |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-26T19:26:20.2646184Z 34 |  | }
2019-08-26T19:26:20.2646482Z    |  |_- in this expansion of `index_struct!`
2019-08-26T19:26:20.2647001Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:91:1
2019-08-26T19:26:20.2647205Z    |
2019-08-26T19:26:20.2647205Z    |
2019-08-26T19:26:20.2647492Z 91 | /  index_struct! {
2019-08-26T19:26:20.2648077Z 93 | |          value: usize,
2019-08-26T19:26:20.2648346Z 94 | |      }
2019-08-26T19:26:20.2648606Z 95 | |  }
2019-08-26T19:26:20.2648905Z    | |__- in this macro invocation
2019-08-26T19:26:20.2648905Z    | |__- in this macro invocation
2019-08-26T19:26:20.2648942Z 
2019-08-26T19:26:20.2649866Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2650154Z   --> <::chalk_macros::index::index_struct macros>:22:75
2019-08-26T19:26:20.2650363Z    |
2019-08-26T19:26:20.2650684Z 1  |  / ($ v : vis struct $ n : ident { $ vf : vis value : usize , }) =>
2019-08-26T19:26:20.2650986Z 2  |  | {
2019-08-26T19:26:20.2651323Z 3  |  |     # [derive (Copy , Clone , PartialEq , Eq , PartialOrd , Ord , Hash)] $ v
2019-08-26T19:26:20.2652300Z 4  |  |     struct $ n { $ vf value : usize , } impl $ n
2019-08-26T19:26:20.2652662Z ...   |
2019-08-26T19:26:20.2653018Z 22 |  |         { Self { value : usize :: replace_zero (& mut self . value) , } } fn
2019-08-26T19:26:20.2653386Z    |  |___________________________________________________________________________^
2019-08-26T19:26:20.2653832Z 23 | ||         add_one (& self) -> Self
2019-08-26T19:26:20.2654208Z 24 | ||         { Self { value : usize :: add_one (& self . value) , } } fn sub_one
2019-08-26T19:26:20.2654656Z    | ||________________________________________________________________^ not a member of trait `std::iter::Step`
2019-08-26T19:26:20.2654913Z ...   |
2019-08-26T19:26:20.2655426Z 33 |  |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-08-26T19:26:20.2655724Z 34 |  | }
2019-08-26T19:26:20.2656026Z    |  |_- in this expansion of `index_struct!`
2019-08-26T19:26:20.2656545Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:91:1
2019-08-26T19:26:20.2656751Z    |
2019-08-26T19:26:20.2656751Z    |
2019-08-26T19:26:20.2657039Z 91 | /  index_struct! {
2019-08-26T19:26:20.2657603Z 93 | |          value: usize,
2019-08-26T19:26:20.2657896Z 94 | |      }
2019-08-26T19:26:20.2658157Z 95 | |  }
2019-08-26T19:26:20.2658435Z    | |__- in this macro invocation
2019-08-26T19:26:20.2658435Z    | |__- in this macro invocation
2019-08-26T19:26:20.2658487Z 
2019-08-26T19:26:20.2788995Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
---
2019-08-26T19:26:21.8452992Z == clock drift check ==
2019-08-26T19:26:21.8474864Z   local time: Mon Aug 26 19:26:21 UTC 2019
2019-08-26T19:26:22.0027517Z   network time: Mon, 26 Aug 2019 19:26:21 GMT
2019-08-26T19:26:22.0028902Z == end clock drift check ==
2019-08-26T19:26:24.8457161Z ##[error]Bash exited with code '1'.
2019-08-26T19:26:24.8497575Z ##[section]Starting: Checkout
2019-08-26T19:26:24.8498994Z ==============================================================================
2019-08-26T19:26:24.8499054Z Task         : Get sources
2019-08-26T19:26:24.8499095Z Description  : Get sources from a repository. Supports Git, TfsVC, and SVN repositories.

I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact @TimNN. (Feature Requests)

@rust-highfive
Copy link
Collaborator

The job mingw-check of your PR failed (pretty log, raw log). Through arcane magic we have determined that the following fragments from the build log may contain information about the problem.

Click to expand the log.
2019-10-01T23:24:47.1733016Z ##[command]git remote add origin https://github.com/rust-lang/rust
2019-10-01T23:24:47.1974818Z ##[command]git config gc.auto 0
2019-10-01T23:24:47.2075106Z ##[command]git config --get-all http.https://github.com/rust-lang/rust.extraheader
2019-10-01T23:24:47.2145593Z ##[command]git config --get-all http.proxy
2019-10-01T23:24:47.2293540Z ##[command]git -c http.extraheader="AUTHORIZATION: basic ***" fetch --force --tags --prune --progress --no-recurse-submodules --depth=2 origin +refs/heads/*:refs/remotes/origin/* +refs/pull/62886/merge:refs/remotes/pull/62886/merge
---
2019-10-01T23:32:00.4648133Z    Compiling parking_lot v0.9.0
2019-10-01T23:32:00.7185453Z    Compiling quote v0.6.12
2019-10-01T23:32:00.8841722Z     Checking rustc_apfloat v0.0.0 (/checkout/src/librustc_apfloat)
2019-10-01T23:32:02.0039110Z     Checking chalk-engine v0.9.0
2019-10-01T23:32:02.1013258Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1013673Z   --> <::chalk_macros::index::index_struct macros>:18:69
2019-10-01T23:32:02.1013986Z    |
2019-10-01T23:32:02.1014367Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize, }) =>
2019-10-01T23:32:02.1014691Z 2  |   | {
2019-10-01T23:32:02.1015086Z 3  |   |     # [derive (Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] $ v struct
2019-10-01T23:32:02.1015436Z 4  |   |     $ n { $ vf value : usize, } impl $ n
2019-10-01T23:32:02.1015713Z ...    |
2019-10-01T23:32:02.1016337Z 18 |   |         { usize :: steps_between (& start . value, & end . value) } fn
2019-10-01T23:32:02.1016818Z    |  _|_____________________________________________________________________^
2019-10-01T23:32:02.1017184Z 19 | | |         replace_one (& mut self) -> Self
2019-10-01T23:32:02.1017578Z 20 | | |         { Self { value : usize :: replace_one (& mut self . value), } } fn
2019-10-01T23:32:02.1018088Z    | |_|_______________________________________________________________________^ not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1018366Z ...    |
2019-10-01T23:32:02.1018747Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-10-01T23:32:02.1019232Z 34 |   | }
2019-10-01T23:32:02.1019586Z    |   |_- in this expansion of `index_struct!`
2019-10-01T23:32:02.1020208Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-10-01T23:32:02.1020475Z    |
2019-10-01T23:32:02.1020475Z    |
2019-10-01T23:32:02.1020819Z 15 |  /  index_struct! {
2019-10-01T23:32:02.1021191Z 16 |  |      pub(crate) struct StackIndex {
2019-10-01T23:32:02.1021570Z 17 |  |          value: usize,
2019-10-01T23:32:02.1022934Z 19 |  |  }
2019-10-01T23:32:02.1023306Z    |  |__- in this macro invocation
2019-10-01T23:32:02.1023350Z 
2019-10-01T23:32:02.1023350Z 
2019-10-01T23:32:02.1023639Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1023940Z   --> <::chalk_macros::index::index_struct macros>:20:73
2019-10-01T23:32:02.1024177Z    |
2019-10-01T23:32:02.1024542Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize, }) =>
2019-10-01T23:32:02.1024865Z 2  |   | {
2019-10-01T23:32:02.1025237Z 3  |   |     # [derive (Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] $ v struct
2019-10-01T23:32:02.1025602Z 4  |   |     $ n { $ vf value : usize, } impl $ n
2019-10-01T23:32:02.1025864Z ...    |
2019-10-01T23:32:02.1026372Z 20 |   |         { Self { value : usize :: replace_one (& mut self . value), } } fn
2019-10-01T23:32:02.1026839Z    |  _|_________________________________________________________________________^
2019-10-01T23:32:02.1027208Z 21 | | |         replace_zero (& mut self) -> Self
2019-10-01T23:32:02.1027620Z 22 | | |         { Self { value : usize :: replace_zero (& mut self . value), } } fn
2019-10-01T23:32:02.1028056Z    | |_|________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1028350Z ...    |
2019-10-01T23:32:02.1028709Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-10-01T23:32:02.1029163Z 34 |   | }
2019-10-01T23:32:02.1029521Z    |   |_- in this expansion of `index_struct!`
2019-10-01T23:32:02.1030124Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-10-01T23:32:02.1030374Z    |
2019-10-01T23:32:02.1030374Z    |
2019-10-01T23:32:02.1030697Z 15 | /   index_struct! {
2019-10-01T23:32:02.1031078Z 16 | |       pub(crate) struct StackIndex {
2019-10-01T23:32:02.1031428Z 17 | |           value: usize,
2019-10-01T23:32:02.1032076Z 19 | |   }
2019-10-01T23:32:02.1032403Z    | |___- in this macro invocation
2019-10-01T23:32:02.1032446Z 
2019-10-01T23:32:02.1033087Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1033087Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1033374Z   --> <::chalk_macros::index::index_struct macros>:22:74
2019-10-01T23:32:02.1033609Z    |
2019-10-01T23:32:02.1033985Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize, }) =>
2019-10-01T23:32:02.1034299Z 2  |   | {
2019-10-01T23:32:02.1034670Z 3  |   |     # [derive (Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] $ v struct
2019-10-01T23:32:02.1035038Z 4  |   |     $ n { $ vf value : usize, } impl $ n
2019-10-01T23:32:02.1035292Z ...    |
2019-10-01T23:32:02.1035795Z 22 |   |         { Self { value : usize :: replace_zero (& mut self . value), } } fn
2019-10-01T23:32:02.1036222Z    |  _|__________________________________________________________________________^
2019-10-01T23:32:02.1036612Z 23 | | |         add_one (& self) -> Self
2019-10-01T23:32:02.1037004Z 24 | | |         { Self { value : usize :: add_one (& self . value), } } fn sub_one
2019-10-01T23:32:02.1037430Z    | |_|_______________________________________________________________^ not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1037712Z ...    |
2019-10-01T23:32:02.1038078Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-10-01T23:32:02.1038570Z 34 |   | }
2019-10-01T23:32:02.1038902Z    |   |_- in this expansion of `index_struct!`
2019-10-01T23:32:02.1039510Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-10-01T23:32:02.1039758Z    |
2019-10-01T23:32:02.1039758Z    |
2019-10-01T23:32:02.1040101Z 15 | /   index_struct! {
2019-10-01T23:32:02.1040462Z 16 | |       pub(crate) struct StackIndex {
2019-10-01T23:32:02.1040810Z 17 | |           value: usize,
2019-10-01T23:32:02.1041540Z 19 | |   }
2019-10-01T23:32:02.1041868Z    | |___- in this macro invocation
2019-10-01T23:32:02.1041927Z 
2019-10-01T23:32:02.1041927Z 
2019-10-01T23:32:02.1155135Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1155531Z   --> <::chalk_macros::index::index_struct macros>:24:65
2019-10-01T23:32:02.1155796Z    |
2019-10-01T23:32:02.1156188Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize, }) =>
2019-10-01T23:32:02.1156538Z 2  |   | {
2019-10-01T23:32:02.1156920Z 3  |   |     # [derive (Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] $ v struct
2019-10-01T23:32:02.1157277Z 4  |   |     $ n { $ vf value : usize, } impl $ n
2019-10-01T23:32:02.1157556Z ...    |
2019-10-01T23:32:02.1157927Z 24 |   |         { Self { value : usize :: add_one (& self . value), } } fn sub_one
2019-10-01T23:32:02.1158527Z    |  _|_________________________________________________________________^
2019-10-01T23:32:02.1158969Z 25 | | |         (& self) -> Self
2019-10-01T23:32:02.1159383Z 26 | | |         { Self { value : usize :: sub_one (& self . value), } } fn add_usize
2019-10-01T23:32:02.1159811Z    | |_|_______________________________________________________________^ not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1160072Z ...    |
2019-10-01T23:32:02.1160463Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-10-01T23:32:02.1160933Z 34 |   | }
2019-10-01T23:32:02.1161318Z    |   |_- in this expansion of `index_struct!`
2019-10-01T23:32:02.1161942Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-10-01T23:32:02.1162211Z    |
2019-10-01T23:32:02.1162211Z    |
2019-10-01T23:32:02.1163207Z 15 | /   index_struct! {
2019-10-01T23:32:02.1163571Z 16 | |       pub(crate) struct StackIndex {
2019-10-01T23:32:02.1163921Z 17 | |           value: usize,
2019-10-01T23:32:02.1164529Z 19 | |   }
2019-10-01T23:32:02.1164834Z    | |___- in this macro invocation
2019-10-01T23:32:02.1182726Z 
2019-10-01T23:32:02.1201590Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1201590Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1202001Z   --> <::chalk_macros::index::index_struct macros>:26:65
2019-10-01T23:32:02.1202235Z    |
2019-10-01T23:32:02.1202922Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize, }) =>
2019-10-01T23:32:02.1203278Z 2  |   | {
2019-10-01T23:32:02.1203653Z 3  |   |     # [derive (Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] $ v struct
2019-10-01T23:32:02.1204018Z 4  |   |     $ n { $ vf value : usize, } impl $ n
2019-10-01T23:32:02.1204272Z ...    |
2019-10-01T23:32:02.1204661Z 26 |   |         { Self { value : usize :: sub_one (& self . value), } } fn add_usize
2019-10-01T23:32:02.1205298Z    |  _|_________________________________________________________________^
2019-10-01T23:32:02.1205770Z 27 | | |         (& self, n : usize) -> Option < Self >
2019-10-01T23:32:02.1206102Z 28 | | |         {
2019-10-01T23:32:02.1206470Z 29 | | |             usize :: add_usize (& self . value, n) . map
2019-10-01T23:32:02.1206847Z 30 | | |             (| value | Self { value })
2019-10-01T23:32:02.1207568Z    | |_|_________^ not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1207568Z    | |_|_________^ not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1208050Z 32 |   |     } impl From < usize > for $ n
2019-10-01T23:32:02.1208408Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-10-01T23:32:02.1208742Z 34 |   | }
2019-10-01T23:32:02.1209062Z    |   |_- in this expansion of `index_struct!`
2019-10-01T23:32:02.1209746Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/stack.rs:15:1
2019-10-01T23:32:02.1210009Z    |
2019-10-01T23:32:02.1210009Z    |
2019-10-01T23:32:02.1210354Z 15 | /   index_struct! {
2019-10-01T23:32:02.1210703Z 16 | |       pub(crate) struct StackIndex {
2019-10-01T23:32:02.1211038Z 17 | |           value: usize,
2019-10-01T23:32:02.1211690Z 19 | |   }
2019-10-01T23:32:02.1212027Z    | |___- in this macro invocation
2019-10-01T23:32:02.1212091Z 
2019-10-01T23:32:02.1353468Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1353468Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1360167Z   --> <::chalk_macros::index::index_struct macros>:18:69
2019-10-01T23:32:02.1371106Z    |
2019-10-01T23:32:02.1391818Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize, }) =>
2019-10-01T23:32:02.1394630Z 2  |   | {
2019-10-01T23:32:02.1397148Z 3  |   |     # [derive (Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] $ v struct
2019-10-01T23:32:02.1399808Z 4  |   |     $ n { $ vf value : usize, } impl $ n
2019-10-01T23:32:02.1403010Z ...    |
2019-10-01T23:32:02.1406055Z 18 |   |         { usize :: steps_between (& start . value, & end . value) } fn
2019-10-01T23:32:02.1408593Z    |  _|_____________________________________________________________________^
2019-10-01T23:32:02.1410981Z 19 | | |         replace_one (& mut self) -> Self
2019-10-01T23:32:02.1413531Z 20 | | |         { Self { value : usize :: replace_one (& mut self . value), } } fn
2019-10-01T23:32:02.1416126Z    | |_|_______________________________________________________________________^ not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1419251Z ...    |
2019-10-01T23:32:02.1421598Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-10-01T23:32:02.1422753Z 34 |   | }
2019-10-01T23:32:02.1425000Z    |   |_- in this expansion of `index_struct!`
2019-10-01T23:32:02.1425714Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-10-01T23:32:02.1426088Z    |
2019-10-01T23:32:02.1426088Z    |
2019-10-01T23:32:02.1426391Z 34 | /   index_struct! {
2019-10-01T23:32:02.1426712Z 35 | |       pub(crate) struct AnswerIndex {
2019-10-01T23:32:02.1427047Z 36 | |           value: usize,
2019-10-01T23:32:02.1427620Z 38 | |   }
2019-10-01T23:32:02.1427946Z    | |___- in this macro invocation
2019-10-01T23:32:02.1427996Z 
2019-10-01T23:32:02.1427996Z 
2019-10-01T23:32:02.1428287Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1428602Z   --> <::chalk_macros::index::index_struct macros>:20:73
2019-10-01T23:32:02.1428822Z    |
2019-10-01T23:32:02.1429174Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize, }) =>
2019-10-01T23:32:02.1429491Z 2  |   | {
2019-10-01T23:32:02.1429873Z 3  |   |     # [derive (Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] $ v struct
2019-10-01T23:32:02.1430481Z 4  |   |     $ n { $ vf value : usize, } impl $ n
2019-10-01T23:32:02.1430816Z ...    |
2019-10-01T23:32:02.1431200Z 20 |   |         { Self { value : usize :: replace_one (& mut self . value), } } fn
2019-10-01T23:32:02.1431608Z    |  _|_________________________________________________________________________^
2019-10-01T23:32:02.1431970Z 21 | | |         replace_zero (& mut self) -> Self
2019-10-01T23:32:02.1432381Z 22 | | |         { Self { value : usize :: replace_zero (& mut self . value), } } fn
2019-10-01T23:32:02.1433095Z    | |_|________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1433563Z ...    |
2019-10-01T23:32:02.1433919Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-10-01T23:32:02.1434239Z 34 |   | }
2019-10-01T23:32:02.1434571Z    |   |_- in this expansion of `index_struct!`
2019-10-01T23:32:02.1436610Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-10-01T23:32:02.1436857Z    |
2019-10-01T23:32:02.1436857Z    |
2019-10-01T23:32:02.1437165Z 34 | /   index_struct! {
2019-10-01T23:32:02.1437506Z 35 | |       pub(crate) struct AnswerIndex {
2019-10-01T23:32:02.1437815Z 36 | |           value: usize,
2019-10-01T23:32:02.1438414Z 38 | |   }
2019-10-01T23:32:02.1438715Z    | |___- in this macro invocation
2019-10-01T23:32:02.1438756Z 
2019-10-01T23:32:02.1439066Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1439066Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1439356Z   --> <::chalk_macros::index::index_struct macros>:22:74
2019-10-01T23:32:02.1439578Z    |
2019-10-01T23:32:02.1439945Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize, }) =>
2019-10-01T23:32:02.1440243Z 2  |   | {
2019-10-01T23:32:02.1440612Z 3  |   |     # [derive (Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] $ v struct
2019-10-01T23:32:02.1440974Z 4  |   |     $ n { $ vf value : usize, } impl $ n
2019-10-01T23:32:02.1441361Z ...    |
2019-10-01T23:32:02.1441811Z 22 |   |         { Self { value : usize :: replace_zero (& mut self . value), } } fn
2019-10-01T23:32:02.1442185Z    |  _|__________________________________________________________________________^
2019-10-01T23:32:02.1442777Z 23 | | |         add_one (& self) -> Self
2019-10-01T23:32:02.1443197Z 24 | | |         { Self { value : usize :: add_one (& self . value), } } fn sub_one
2019-10-01T23:32:02.1443651Z    | |_|_______________________________________________________________^ not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1444054Z ...    |
2019-10-01T23:32:02.1444407Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-10-01T23:32:02.1444736Z 34 |   | }
2019-10-01T23:32:02.1445063Z    |   |_- in this expansion of `index_struct!`
2019-10-01T23:32:02.1445680Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-10-01T23:32:02.1445939Z    |
2019-10-01T23:32:02.1445939Z    |
2019-10-01T23:32:02.1446285Z 34 | /   index_struct! {
2019-10-01T23:32:02.1446650Z 35 | |       pub(crate) struct AnswerIndex {
2019-10-01T23:32:02.1446985Z 36 | |           value: usize,
2019-10-01T23:32:02.1447638Z 38 | |   }
2019-10-01T23:32:02.1447965Z    | |___- in this macro invocation
2019-10-01T23:32:02.1448027Z 
2019-10-01T23:32:02.1448027Z 
2019-10-01T23:32:02.1448340Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1448654Z   --> <::chalk_macros::index::index_struct macros>:24:65
2019-10-01T23:32:02.1448911Z    |
2019-10-01T23:32:02.1449285Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize, }) =>
2019-10-01T23:32:02.1449610Z 2  |   | {
2019-10-01T23:32:02.1450023Z 3  |   |     # [derive (Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] $ v struct
2019-10-01T23:32:02.1450390Z 4  |   |     $ n { $ vf value : usize, } impl $ n
2019-10-01T23:32:02.1450786Z ...    |
2019-10-01T23:32:02.1451221Z 24 |   |         { Self { value : usize :: add_one (& self . value), } } fn sub_one
2019-10-01T23:32:02.1451648Z    |  _|_________________________________________________________________^
2019-10-01T23:32:02.1452652Z 25 | | |         (& self) -> Self
2019-10-01T23:32:02.1453657Z 26 | | |         { Self { value : usize :: sub_one (& self . value), } } fn add_usize
2019-10-01T23:32:02.1454124Z    | |_|_______________________________________________________________^ not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1454558Z ...    |
2019-10-01T23:32:02.1454936Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-10-01T23:32:02.1455242Z 34 |   | }
2019-10-01T23:32:02.1455589Z    |   |_- in this expansion of `index_struct!`
2019-10-01T23:32:02.1456171Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-10-01T23:32:02.1456433Z    |
2019-10-01T23:32:02.1456433Z    |
2019-10-01T23:32:02.1456762Z 34 | /   index_struct! {
2019-10-01T23:32:02.1457121Z 35 | |       pub(crate) struct AnswerIndex {
2019-10-01T23:32:02.1457481Z 36 | |           value: usize,
2019-10-01T23:32:02.1458103Z 38 | |   }
2019-10-01T23:32:02.1458449Z    | |___- in this macro invocation
2019-10-01T23:32:02.1458491Z 
2019-10-01T23:32:02.1552970Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1552970Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1554336Z   --> <::chalk_macros::index::index_struct macros>:26:65
2019-10-01T23:32:02.1554726Z    |
2019-10-01T23:32:02.1555284Z 1  |   / ($ v : vis struct $ n : ident { $ vf : vis value : usize, }) =>
2019-10-01T23:32:02.1555704Z 2  |   | {
2019-10-01T23:32:02.1556327Z 3  |   |     # [derive (Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] $ v struct
2019-10-01T23:32:02.1556901Z 4  |   |     $ n { $ vf value : usize, } impl $ n
2019-10-01T23:32:02.1557256Z ...    |
2019-10-01T23:32:02.1558205Z 26 |   |         { Self { value : usize :: sub_one (& self . value), } } fn add_usize
2019-10-01T23:32:02.1558997Z    |  _|_________________________________________________________________^
2019-10-01T23:32:02.1559423Z 27 | | |         (& self, n : usize) -> Option < Self >
2019-10-01T23:32:02.1560084Z 28 | | |         {
2019-10-01T23:32:02.1560839Z 29 | | |             usize :: add_usize (& self . value, n) . map
2019-10-01T23:32:02.1562120Z 30 | | |             (| value | Self { value })
2019-10-01T23:32:02.1563376Z    | |_|_________^ not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1563376Z    | |_|_________^ not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1563710Z 32 |   |     } impl From < usize > for $ n
2019-10-01T23:32:02.1564068Z 33 |   |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-10-01T23:32:02.1564398Z 34 |   | }
2019-10-01T23:32:02.1564724Z    |   |_- in this expansion of `index_struct!`
2019-10-01T23:32:02.1565310Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/table.rs:34:1
2019-10-01T23:32:02.1565534Z    |
2019-10-01T23:32:02.1565534Z    |
2019-10-01T23:32:02.1565827Z 34 | /   index_struct! {
2019-10-01T23:32:02.1566168Z 35 | |       pub(crate) struct AnswerIndex {
2019-10-01T23:32:02.1566480Z 36 | |           value: usize,
2019-10-01T23:32:02.1569117Z 38 | |   }
2019-10-01T23:32:02.1569536Z    | |___- in this macro invocation
2019-10-01T23:32:02.1569580Z 
2019-10-01T23:32:02.1569958Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1569958Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1570237Z   --> <::chalk_macros::index::index_struct macros>:18:69
2019-10-01T23:32:02.1570478Z    |
2019-10-01T23:32:02.1570826Z 1  |  / ($ v : vis struct $ n : ident { $ vf : vis value : usize, }) =>
2019-10-01T23:32:02.1571121Z 2  |  | {
2019-10-01T23:32:02.1571663Z 3  |  |     # [derive (Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] $ v struct
2019-10-01T23:32:02.1572064Z 4  |  |     $ n { $ vf value : usize, } impl $ n
2019-10-01T23:32:02.1572312Z ...   |
2019-10-01T23:32:02.1572952Z 18 |  |         { usize :: steps_between (& start . value, & end . value) } fn
2019-10-01T23:32:02.1573305Z    |  |_____________________________________________________________________^
2019-10-01T23:32:02.1573685Z 19 | ||         replace_one (& mut self) -> Self
2019-10-01T23:32:02.1574070Z 20 | ||         { Self { value : usize :: replace_one (& mut self . value), } } fn
2019-10-01T23:32:02.1574652Z    | ||_______________________________________________________________________^ not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1574944Z ...   |
2019-10-01T23:32:02.1575297Z 33 |  |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-10-01T23:32:02.1575627Z 34 |  | }
2019-10-01T23:32:02.1575962Z    |  |_- in this expansion of `index_struct!`
2019-10-01T23:32:02.1576529Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-10-01T23:32:02.1576751Z    |
2019-10-01T23:32:02.1576751Z    |
2019-10-01T23:32:02.1578515Z 81 | /  index_struct! {
2019-10-01T23:32:02.1579740Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-10-01T23:32:02.1580091Z 83 | |          value: usize,
2019-10-01T23:32:02.1580700Z 85 | |  }
2019-10-01T23:32:02.1581013Z    | |__- in this macro invocation
2019-10-01T23:32:02.1581073Z 
2019-10-01T23:32:02.1581073Z 
2019-10-01T23:32:02.1594250Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1596243Z   --> <::chalk_macros::index::index_struct macros>:20:73
2019-10-01T23:32:02.1597221Z    |
2019-10-01T23:32:02.1597577Z 1  |  / ($ v : vis struct $ n : ident { $ vf : vis value : usize, }) =>
2019-10-01T23:32:02.1597898Z 2  |  | {
2019-10-01T23:32:02.1598494Z 3  |  |     # [derive (Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] $ v struct
2019-10-01T23:32:02.1598920Z 4  |  |     $ n { $ vf value : usize, } impl $ n
2019-10-01T23:32:02.1599203Z ...   |
2019-10-01T23:32:02.1599573Z 20 |  |         { Self { value : usize :: replace_one (& mut self . value), } } fn
2019-10-01T23:32:02.1599948Z    |  |_________________________________________________________________________^
2019-10-01T23:32:02.1600303Z 21 | ||         replace_zero (& mut self) -> Self
2019-10-01T23:32:02.1600712Z 22 | ||         { Self { value : usize :: replace_zero (& mut self . value), } } fn
2019-10-01T23:32:02.1601288Z    | ||________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1601551Z ...   |
2019-10-01T23:32:02.1601936Z 33 |  |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-10-01T23:32:02.1602239Z 34 |  | }
2019-10-01T23:32:02.1602847Z    |  |_- in this expansion of `index_struct!`
2019-10-01T23:32:02.1603421Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-10-01T23:32:02.1603670Z    |
2019-10-01T23:32:02.1603670Z    |
2019-10-01T23:32:02.1603963Z 81 | /  index_struct! {
2019-10-01T23:32:02.1604297Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-10-01T23:32:02.1604627Z 83 | |          value: usize,
2019-10-01T23:32:02.1605216Z 85 | |  }
2019-10-01T23:32:02.1605527Z    | |__- in this macro invocation
2019-10-01T23:32:02.1605615Z 
2019-10-01T23:32:02.1751607Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1751607Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1752884Z   --> <::chalk_macros::index::index_struct macros>:22:74
2019-10-01T23:32:02.1753375Z    |
2019-10-01T23:32:02.1753962Z 1  |  / ($ v : vis struct $ n : ident { $ vf : vis value : usize, }) =>
2019-10-01T23:32:02.1754273Z 2  |  | {
2019-10-01T23:32:02.1754895Z 3  |  |     # [derive (Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] $ v struct
2019-10-01T23:32:02.1755527Z 4  |  |     $ n { $ vf value : usize, } impl $ n
2019-10-01T23:32:02.1755931Z ...   |
2019-10-01T23:32:02.1756592Z 22 |  |         { Self { value : usize :: replace_zero (& mut self . value), } } fn
2019-10-01T23:32:02.1757134Z    |  |__________________________________________________________________________^
2019-10-01T23:32:02.1757609Z 23 | ||         add_one (& self) -> Self
2019-10-01T23:32:02.1758396Z 24 | ||         { Self { value : usize :: add_one (& self . value), } } fn sub_one
2019-10-01T23:32:02.1760295Z    | ||_______________________________________________________________^ not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1760997Z ...   |
2019-10-01T23:32:02.1761430Z 33 |  |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-10-01T23:32:02.1762895Z 34 |  | }
2019-10-01T23:32:02.1763259Z    |  |_- in this expansion of `index_struct!`
2019-10-01T23:32:02.1764140Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-10-01T23:32:02.1764640Z    |
2019-10-01T23:32:02.1764640Z    |
2019-10-01T23:32:02.1764987Z 81 | /  index_struct! {
2019-10-01T23:32:02.1765562Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-10-01T23:32:02.1766240Z 83 | |          value: usize,
2019-10-01T23:32:02.1767166Z 85 | |  }
2019-10-01T23:32:02.1768496Z    | |__- in this macro invocation
2019-10-01T23:32:02.1768648Z 
2019-10-01T23:32:02.1768648Z 
2019-10-01T23:32:02.1769393Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1769727Z   --> <::chalk_macros::index::index_struct macros>:24:65
2019-10-01T23:32:02.1770208Z    |
2019-10-01T23:32:02.1770576Z 1  |  / ($ v : vis struct $ n : ident { $ vf : vis value : usize, }) =>
2019-10-01T23:32:02.1770898Z 2  |  | {
2019-10-01T23:32:02.1771269Z 3  |  |     # [derive (Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] $ v struct
2019-10-01T23:32:02.1771806Z 4  |  |     $ n { $ vf value : usize, } impl $ n
2019-10-01T23:32:02.1772162Z ...   |
2019-10-01T23:32:02.1772857Z 24 |  |         { Self { value : usize :: add_one (& self . value), } } fn sub_one
2019-10-01T23:32:02.1773254Z    |  |_________________________________________________________________^
2019-10-01T23:32:02.1773592Z 25 | ||         (& self) -> Self
2019-10-01T23:32:02.1773991Z 26 | ||         { Self { value : usize :: sub_one (& self . value), } } fn add_usize
2019-10-01T23:32:02.1774433Z    | ||_______________________________________________________________^ not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1774907Z ...   |
2019-10-01T23:32:02.1775297Z 33 |  |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-10-01T23:32:02.1775600Z 34 |  | }
2019-10-01T23:32:02.1775948Z    |  |_- in this expansion of `index_struct!`
2019-10-01T23:32:02.1776494Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-10-01T23:32:02.1776744Z    |
2019-10-01T23:32:02.1776744Z    |
2019-10-01T23:32:02.1777049Z 81 | /  index_struct! {
2019-10-01T23:32:02.1777380Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-10-01T23:32:02.1777709Z 83 | |          value: usize,
2019-10-01T23:32:02.1778302Z 85 | |  }
2019-10-01T23:32:02.1778606Z    | |__- in this macro invocation
2019-10-01T23:32:02.1778647Z 
2019-10-01T23:32:02.1778938Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1778938Z error[E0407]: method `add_usize` is not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1779248Z   --> <::chalk_macros::index::index_struct macros>:26:65
2019-10-01T23:32:02.1779468Z    |
2019-10-01T23:32:02.1779813Z 1  |  / ($ v : vis struct $ n : ident { $ vf : vis value : usize, }) =>
2019-10-01T23:32:02.1780131Z 2  |  | {
2019-10-01T23:32:02.1780499Z 3  |  |     # [derive (Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] $ v struct
2019-10-01T23:32:02.1780857Z 4  |  |     $ n { $ vf value : usize, } impl $ n
2019-10-01T23:32:02.1781197Z ...   |
2019-10-01T23:32:02.1781632Z 26 |  |         { Self { value : usize :: sub_one (& self . value), } } fn add_usize
2019-10-01T23:32:02.1782158Z    |  |_________________________________________________________________^
2019-10-01T23:32:02.1782781Z 27 | ||         (& self, n : usize) -> Option < Self >
2019-10-01T23:32:02.1783158Z 28 | ||         {
2019-10-01T23:32:02.1783518Z 29 | ||             usize :: add_usize (& self . value, n) . map
2019-10-01T23:32:02.1783894Z 30 | ||             (| value | Self { value })
2019-10-01T23:32:02.1784378Z 31 | ||         }
2019-10-01T23:32:02.1784744Z    | ||_________^ not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1785096Z 32 |  |     } impl From < usize > for $ n
2019-10-01T23:32:02.1785451Z 33 |  |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-10-01T23:32:02.1785775Z 34 |  | }
2019-10-01T23:32:02.1786099Z    |  |_- in this expansion of `index_struct!`
2019-10-01T23:32:02.1786663Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:81:1
2019-10-01T23:32:02.1786887Z    |
2019-10-01T23:32:02.1786887Z    |
2019-10-01T23:32:02.1787179Z 81 | /  index_struct! {
2019-10-01T23:32:02.1787532Z 82 | |      pub struct TableIndex { // FIXME: pub b/c Fold
2019-10-01T23:32:02.1787841Z 83 | |          value: usize,
2019-10-01T23:32:02.1788454Z 85 | |  }
2019-10-01T23:32:02.1788751Z    | |__- in this macro invocation
2019-10-01T23:32:02.1788833Z 
2019-10-01T23:32:02.1857220Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1857220Z error[E0407]: method `replace_one` is not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1857697Z   --> <::chalk_macros::index::index_struct macros>:18:69
2019-10-01T23:32:02.1857964Z    |
2019-10-01T23:32:02.1858323Z 1  |  / ($ v : vis struct $ n : ident { $ vf : vis value : usize, }) =>
2019-10-01T23:32:02.1858859Z 2  |  | {
2019-10-01T23:32:02.1859326Z 3  |  |     # [derive (Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] $ v struct
2019-10-01T23:32:02.1859684Z 4  |  |     $ n { $ vf value : usize, } impl $ n
2019-10-01T23:32:02.1859933Z ...   |
2019-10-01T23:32:02.1860307Z 18 |  |         { usize :: steps_between (& start . value, & end . value) } fn
2019-10-01T23:32:02.1860650Z    |  |_____________________________________________________________________^
2019-10-01T23:32:02.1861022Z 19 | ||         replace_one (& mut self) -> Self
2019-10-01T23:32:02.1863700Z 20 | ||         { Self { value : usize :: replace_one (& mut self . value), } } fn
2019-10-01T23:32:02.1864272Z    | ||_______________________________________________________________________^ not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1864577Z ...   |
2019-10-01T23:32:02.1864931Z 33 |  |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-10-01T23:32:02.1865259Z 34 |  | }
2019-10-01T23:32:02.1865601Z    |  |_- in this expansion of `index_struct!`
2019-10-01T23:32:02.1866178Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:91:1
2019-10-01T23:32:02.1866400Z    |
2019-10-01T23:32:02.1866400Z    |
2019-10-01T23:32:02.1866708Z 91 | /  index_struct! {
2019-10-01T23:32:02.1867320Z 93 | |          value: usize,
2019-10-01T23:32:02.1867625Z 94 | |      }
2019-10-01T23:32:02.1867915Z 95 | |  }
2019-10-01T23:32:02.1868224Z    | |__- in this macro invocation
2019-10-01T23:32:02.1868224Z    | |__- in this macro invocation
2019-10-01T23:32:02.1868286Z 
2019-10-01T23:32:02.1898372Z error[E0407]: method `replace_zero` is not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1899363Z   --> <::chalk_macros::index::index_struct macros>:20:73
2019-10-01T23:32:02.1900331Z    |
2019-10-01T23:32:02.1901100Z 1  |  / ($ v : vis struct $ n : ident { $ vf : vis value : usize, }) =>
2019-10-01T23:32:02.1901478Z 2  |  | {
2019-10-01T23:32:02.1902286Z 3  |  |     # [derive (Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] $ v struct
2019-10-01T23:32:02.1903521Z 4  |  |     $ n { $ vf value : usize, } impl $ n
2019-10-01T23:32:02.1904200Z ...   |
2019-10-01T23:32:02.1904890Z 20 |  |         { Self { value : usize :: replace_one (& mut self . value), } } fn
2019-10-01T23:32:02.1905315Z    |  |_________________________________________________________________________^
2019-10-01T23:32:02.1905670Z 21 | ||         replace_zero (& mut self) -> Self
2019-10-01T23:32:02.1906085Z 22 | ||         { Self { value : usize :: replace_zero (& mut self . value), } } fn
2019-10-01T23:32:02.1906747Z    | ||________________________________________________________________________^ not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1907031Z ...   |
2019-10-01T23:32:02.1907382Z 33 |  |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-10-01T23:32:02.1907703Z 34 |  | }
2019-10-01T23:32:02.1908038Z    |  |_- in this expansion of `index_struct!`
2019-10-01T23:32:02.1908682Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:91:1
2019-10-01T23:32:02.1909082Z    |
2019-10-01T23:32:02.1909082Z    |
2019-10-01T23:32:02.1909369Z 91 | /  index_struct! {
2019-10-01T23:32:02.1910165Z 93 | |          value: usize,
2019-10-01T23:32:02.1910452Z 94 | |      }
2019-10-01T23:32:02.1910760Z 95 | |  }
2019-10-01T23:32:02.1911069Z    | |__- in this macro invocation
2019-10-01T23:32:02.1911069Z    | |__- in this macro invocation
2019-10-01T23:32:02.1911156Z 
2019-10-01T23:32:02.1980402Z error[E0407]: method `add_one` is not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1982110Z   --> <::chalk_macros::index::index_struct macros>:22:74
2019-10-01T23:32:02.1982401Z    |
2019-10-01T23:32:02.1983089Z 1  |  / ($ v : vis struct $ n : ident { $ vf : vis value : usize, }) =>
2019-10-01T23:32:02.1983514Z 2  |  | {
2019-10-01T23:32:02.1984131Z 3  |  |     # [derive (Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] $ v struct
2019-10-01T23:32:02.1984548Z 4  |  |     $ n { $ vf value : usize, } impl $ n
2019-10-01T23:32:02.1984850Z ...   |
2019-10-01T23:32:02.1985219Z 22 |  |         { Self { value : usize :: replace_zero (& mut self . value), } } fn
2019-10-01T23:32:02.1985592Z    |  |__________________________________________________________________________^
2019-10-01T23:32:02.1985941Z 23 | ||         add_one (& self) -> Self
2019-10-01T23:32:02.1986327Z 24 | ||         { Self { value : usize :: add_one (& self . value), } } fn sub_one
2019-10-01T23:32:02.1986926Z    | ||_______________________________________________________________^ not a member of trait `std::iter::Step`
2019-10-01T23:32:02.1987190Z ...   |
2019-10-01T23:32:02.1987568Z 33 |  |     { fn from (value : usize) -> Self { Self { value : value } } }
2019-10-01T23:32:02.1987871Z 34 |  | }
2019-10-01T23:32:02.1988217Z    |  |_- in this expansion of `index_struct!`
2019-10-01T23:32:02.1988765Z   ::: /cargo/registry/src/github.com-1ecc6299db9ec823/chalk-engine-0.9.0/src/lib.rs:91:1
2019-10-01T23:32:02.1989026Z    |
2019-10-01T23:32:02.1989026Z    |
2019-10-01T23:32:02.1989321Z 91 | /  index_struct! {
2019-10-01T23:32:02.1989956Z 93 | |          value: usize,
2019-10-01T23:32:02.1990243Z 94 | |      }
2019-10-01T23:32:02.1990529Z 95 | |  }
2019-10-01T23:32:02.1990851Z    | |__- in this macro invocation
2019-10-01T23:32:02.1990851Z    | |__- in this macro invocation
2019-10-01T23:32:02.1995134Z 
2019-10-01T23:32:02.2002076Z error[E0407]: method `sub_one` is not a member of trait `std::iter::Step`
---
2019-10-01T23:32:02.4986358Z == clock drift check ==
2019-10-01T23:32:02.4995675Z   local time: Tue Oct  1 23:32:02 UTC 2019
2019-10-01T23:32:02.5853118Z   network time: Tue, 01 Oct 2019 23:32:02 GMT
2019-10-01T23:32:02.5853262Z == end clock drift check ==
2019-10-01T23:32:05.5210987Z ##[error]Bash exited with code '1'.
2019-10-01T23:32:05.5245543Z ##[section]Starting: Checkout
2019-10-01T23:32:05.5247356Z ==============================================================================
2019-10-01T23:32:05.5247425Z Task         : Get sources
2019-10-01T23:32:05.5247471Z Description  : Get sources from a repository. Supports Git, TfsVC, and SVN repositories.

I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact @TimNN. (Feature Requests)

@scottmcm
Copy link
Member

This means that this PR now has the observable effect of changing RangeFrom's behavior when overflowing (which is explicitly called out as unspecified and able to change)

While that's allowed to be changed, I'd request that this PR not change any observable behaviour on stable in order to reduce the sign-offs it needs to go through. I'm willing to sign-off on a Step redesign, but I think changing visible behaviour ought to be decided more officially by someone on libs. (That statement is a procedural one, not me taking a stance on whether the change is good.)

Phlosioneer added a commit to Phlosioneer/rust that referenced this pull request Nov 20, 2019
While the redesign is in progress (rust-lang#62886), clarify the purpose of replace_zero and replace_one.
Centril added a commit to Centril/rust that referenced this pull request Nov 23, 2019
Clarify Step Documentation

While the redesign is in progress (rust-lang#62886), clarify the purpose of replace_zero and replace_one.

First, "returning itself" is technically impossible due to the function signature of &mut self -> Self. A clone or copy operation must be used. So this is now explicitly stated in the documentation.

Second, the added docs give some guidance about the actual contract around implementation of replace_zero and replace one. Specifically, the only usage is to create a range with no more steps, by setting start to replace_one and end to replace_zero. So the only property that is actually used is `replace_one > replace_zero`. See rust-lang#42168 (comment)

The new documentation does not say that is the *only* contract, and so it should not be considered an api change. It just highlights the most important detail for implementors.

The redesign doesn't seem to be landing any time soon, so this is a stopgap measure to reduce confusion in the meantime.
@bors
Copy link
Contributor

bors commented Nov 23, 2019

☔ The latest upstream changes (presumably #66656) made this pull request unmergeable. Please resolve the merge conflicts.

@CAD97 CAD97 force-pushed the master branch 2 times, most recently from ac5394d to a79b7c2 Compare November 25, 2019 21:17
@rust-highfive
Copy link
Collaborator

The job x86_64-gnu-llvm-6.0 of your PR failed (pretty log, raw log). Through arcane magic we have determined that the following fragments from the build log may contain information about the problem.

Click to expand the log.
2019-11-25T21:17:51.7379112Z ##[command]git remote add origin https://github.com/rust-lang/rust
2019-11-25T21:17:51.7567325Z ##[command]git config gc.auto 0
2019-11-25T21:17:51.7650187Z ##[command]git config --get-all http.https://github.com/rust-lang/rust.extraheader
2019-11-25T21:17:51.7709650Z ##[command]git config --get-all http.proxy
2019-11-25T21:17:52.5027394Z ##[command]git -c http.extraheader="AUTHORIZATION: basic ***" fetch --force --tags --prune --progress --no-recurse-submodules --depth=2 origin +refs/heads/*:refs/remotes/origin/* +refs/pull/62886/merge:refs/remotes/pull/62886/merge
---
2019-11-25T21:23:56.4278745Z Found 0 error codes with no tests
2019-11-25T21:23:56.4278805Z Done!
2019-11-25T21:23:56.4283704Z 
2019-11-25T21:23:56.4284091Z 
2019-11-25T21:23:56.4285138Z command did not execute successfully: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage0-tools-bin/tidy" "/checkout/src" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage0/bin/cargo" "--no-vendor"
2019-11-25T21:23:56.4286830Z 
2019-11-25T21:23:56.4287145Z 
2019-11-25T21:23:56.4297451Z failed to run: /checkout/obj/build/bootstrap/debug/bootstrap test src/tools/tidy
2019-11-25T21:23:56.4297531Z Build completed unsuccessfully in 0:01:30
2019-11-25T21:23:56.4297531Z Build completed unsuccessfully in 0:01:30
2019-11-25T21:23:56.4358533Z == clock drift check ==
2019-11-25T21:23:56.4369701Z   local time: Mon Nov 25 21:23:56 UTC 2019
2019-11-25T21:23:56.7976483Z   network time: Mon, 25 Nov 2019 21:23:56 GMT
2019-11-25T21:23:56.7983789Z == end clock drift check ==
2019-11-25T21:23:58.1016691Z 
2019-11-25T21:23:58.1117877Z ##[error]Bash exited with code '1'.
2019-11-25T21:23:58.1148040Z ##[section]Starting: Checkout
2019-11-25T21:23:58.1149854Z ==============================================================================
2019-11-25T21:23:58.1149914Z Task         : Get sources
2019-11-25T21:23:58.1149962Z Description  : Get sources from a repository. Supports Git, TfsVC, and SVN repositories.

I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact @TimNN. (Feature Requests)

@CAD97
Copy link
Contributor Author

CAD97 commented Nov 25, 2019

Rebased and backed out the change to observable behavior.

@rust-highfive
Copy link
Collaborator

The job x86_64-gnu-llvm-6.0 of your PR failed (pretty log, raw log). Through arcane magic we have determined that the following fragments from the build log may contain information about the problem.

Click to expand the log.
2019-11-25T21:27:33.5821856Z ##[command]git remote add origin https://github.com/rust-lang/rust
2019-11-25T21:27:33.5841313Z ##[command]git config gc.auto 0
2019-11-25T21:27:33.5843627Z ##[command]git config --get-all http.https://github.com/rust-lang/rust.extraheader
2019-11-25T21:27:33.5845867Z ##[command]git config --get-all http.proxy
2019-11-25T21:27:33.5848363Z ##[command]git -c http.extraheader="AUTHORIZATION: basic ***" fetch --force --tags --prune --progress --no-recurse-submodules --depth=2 origin +refs/heads/*:refs/remotes/origin/* +refs/pull/62886/merge:refs/remotes/pull/62886/merge
---
2019-11-25T21:33:43.1191187Z Found 0 error codes with no tests
2019-11-25T21:33:43.1191281Z Done!
2019-11-25T21:33:43.1191311Z 
2019-11-25T21:33:43.1191338Z 
2019-11-25T21:33:43.1192473Z command did not execute successfully: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage0-tools-bin/tidy" "/checkout/src" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage0/bin/cargo" "--no-vendor"
2019-11-25T21:33:43.1192587Z 
2019-11-25T21:33:43.1192639Z 
2019-11-25T21:33:43.1197605Z failed to run: /checkout/obj/build/bootstrap/debug/bootstrap test src/tools/tidy
2019-11-25T21:33:43.1197666Z Build completed unsuccessfully in 0:01:31
2019-11-25T21:33:43.1197666Z Build completed unsuccessfully in 0:01:31
2019-11-25T21:33:43.1250992Z == clock drift check ==
2019-11-25T21:33:43.1270770Z   local time: Mon Nov 25 21:33:43 UTC 2019
2019-11-25T21:33:43.4010680Z   network time: Mon, 25 Nov 2019 21:33:43 GMT
2019-11-25T21:33:43.4017573Z == end clock drift check ==
2019-11-25T21:33:44.6810780Z 
2019-11-25T21:33:44.6919398Z ##[error]Bash exited with code '1'.
2019-11-25T21:33:44.6947087Z ##[section]Starting: Checkout
2019-11-25T21:33:44.6948978Z ==============================================================================
2019-11-25T21:33:44.6949055Z Task         : Get sources
2019-11-25T21:33:44.6949104Z Description  : Get sources from a repository. Supports Git, TfsVC, and SVN repositories.

I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact @TimNN. (Feature Requests)

@CAD97
Copy link
Contributor Author

CAD97 commented Nov 25, 2019

If I'm reading the failure correctly, tidy failed, though I'm not certain why.

This is still blocked on a new chalk version, anyway, though.

@bors
Copy link
Contributor

bors commented Dec 23, 2019

☔ The latest upstream changes (presumably #67540) made this pull request unmergeable. Please resolve the merge conflicts.

@CAD97
Copy link
Contributor Author

CAD97 commented Feb 3, 2020

I'm closing this because I've messed up git and will resubmit it in a bit.

@CAD97 CAD97 closed this Feb 3, 2020
Dylan-DPC-zz pushed a commit to Dylan-DPC-zz/rust that referenced this pull request May 14, 2020
Rework the std::iter::Step trait

Previous attempts: rust-lang#43127 rust-lang#62886 rust-lang#68807
Tracking issue: rust-lang#42168

This PR reworks the `Step` trait to be phrased in terms of the *successor* and *predecessor* operations. With this, `Step` hopefully has a consistent identity that can have a path towards stabilization. The proposed trait:

```rust
/// Objects that have a notion of *successor* and *predecessor* operations.
///
/// The *successor* operation moves towards values that compare greater.
/// The *predecessor* operation moves towards values that compare lesser.
///
/// # Safety
///
/// This trait is `unsafe` because its implementation must be correct for
/// the safety of `unsafe trait TrustedLen` implementations, and the results
/// of using this trait can otherwise be trusted by `unsafe` code to be correct
/// and fulful the listed obligations.
pub unsafe trait Step: Clone + PartialOrd + Sized {
    /// Returns the number of *successor* steps required to get from `start` to `end`.
    ///
    /// Returns `None` if the number of steps would overflow `usize`
    /// (or is infinite, or if `end` would never be reached).
    ///
    /// # Invariants
    ///
    /// For any `a`, `b`, and `n`:
    ///
    /// * `steps_between(&a, &b) == Some(n)` if and only if `Step::forward(&a, n) == Some(b)`
    /// * `steps_between(&a, &b) == Some(n)` if and only if `Step::backward(&a, n) == Some(a)`
    /// * `steps_between(&a, &b) == Some(n)` only if `a <= b`
    ///   * Corollary: `steps_between(&a, &b) == Some(0)` if and only if `a == b`
    ///   * Note that `a <= b` does _not_ imply `steps_between(&a, &b) != None`;
    ///     this is the case wheen it would require more than `usize::MAX` steps to get to `b`
    /// * `steps_between(&a, &b) == None` if `a > b`
    fn steps_between(start: &Self, end: &Self) -> Option<usize>;

    /// Returns the value that would be obtained by taking the *successor*
    /// of `self` `count` times.
    ///
    /// If this would overflow the range of values supported by `Self`, returns `None`.
    ///
    /// # Invariants
    ///
    /// For any `a`, `n`, and `m`:
    ///
    /// * `Step::forward_checked(a, n).and_then(|x| Step::forward_checked(x, m)) == Step::forward_checked(a, m).and_then(|x| Step::forward_checked(x, n))`
    ///
    /// For any `a`, `n`, and `m` where `n + m` does not overflow:
    ///
    /// * `Step::forward_checked(a, n).and_then(|x| Step::forward_checked(x, m)) == Step::forward_checked(a, n + m)`
    ///
    /// For any `a` and `n`:
    ///
    /// * `Step::forward_checked(a, n) == (0..n).try_fold(a, |x, _| Step::forward_checked(&x, 1))`
    ///   * Corollary: `Step::forward_checked(&a, 0) == Some(a)`
    fn forward_checked(start: Self, count: usize) -> Option<Self>;

    /// Returns the value that would be obtained by taking the *successor*
    /// of `self` `count` times.
    ///
    /// If this would overflow the range of values supported by `Self`,
    /// this function is allowed to panic, wrap, or saturate.
    /// The suggested behavior is to panic when debug assertions are enabled,
    /// and to wrap or saturate otherwise.
    ///
    /// Unsafe code should not rely on the correctness of behavior after overflow.
    ///
    /// # Invariants
    ///
    /// For any `a`, `n`, and `m`, where no overflow occurs:
    ///
    /// * `Step::forward(Step::forward(a, n), m) == Step::forward(a, n + m)`
    ///
    /// For any `a` and `n`, where no overflow occurs:
    ///
    /// * `Step::forward_checked(a, n) == Some(Step::forward(a, n))`
    /// * `Step::forward(a, n) == (0..n).fold(a, |x, _| Step::forward(x, 1))`
    ///   * Corollary: `Step::forward(a, 0) == a`
    /// * `Step::forward(a, n) >= a`
    /// * `Step::backward(Step::forward(a, n), n) == a`
    fn forward(start: Self, count: usize) -> Self {
        Step::forward_checked(start, count).expect("overflow in `Step::forward`")
    }

    /// Returns the value that would be obtained by taking the *successor*
    /// of `self` `count` times.
    ///
    /// # Safety
    ///
    /// It is undefined behavior for this operation to overflow the
    /// range of values supported by `Self`. If you cannot guarantee that this
    /// will not overflow, use `forward` or `forward_checked` instead.
    ///
    /// # Invariants
    ///
    /// For any `a`:
    ///
    /// * if there exists `b` such that `b > a`, it is safe to call `Step::forward_unchecked(a, 1)`
    /// * if there exists `b`, `n` such that `steps_between(&a, &b) == Some(n)`,
    ///   it is safe to call `Step::forward_unchecked(a, m)` for any `m <= n`.
    ///
    /// For any `a` and `n`, where no overflow occurs:
    ///
    /// * `Step::forward_unchecked(a, n)` is equivalent to `Step::forward(a, n)`
    #[unstable(feature = "unchecked_math", reason = "niche optimization path", issue = "none")]
    unsafe fn forward_unchecked(start: Self, count: usize) -> Self {
        Step::forward(start, count)
    }

    /// Returns the value that would be obtained by taking the *successor*
    /// of `self` `count` times.
    ///
    /// If this would overflow the range of values supported by `Self`, returns `None`.
    ///
    /// # Invariants
    ///
    /// For any `a`, `n`, and `m`:
    ///
    /// * `Step::backward_checked(a, n).and_then(|x| Step::backward_checked(x, m)) == n.checked_add(m).and_then(|x| Step::backward_checked(a, x))`
    /// * `Step::backward_checked(a, n).and_then(|x| Step::backward_checked(x, m)) == try { Step::backward_checked(a, n.checked_add(m)?) }`
    ///
    /// For any `a` and `n`:
    ///
    /// * `Step::backward_checked(a, n) == (0..n).try_fold(a, |x, _| Step::backward_checked(&x, 1))`
    ///   * Corollary: `Step::backward_checked(&a, 0) == Some(a)`
    fn backward_checked(start: Self, count: usize) -> Option<Self>;

    /// Returns the value that would be obtained by taking the *predecessor*
    /// of `self` `count` times.
    ///
    /// If this would overflow the range of values supported by `Self`,
    /// this function is allowed to panic, wrap, or saturate.
    /// The suggested behavior is to panic when debug assertions are enabled,
    /// and to wrap or saturate otherwise.
    ///
    /// Unsafe code should not rely on the correctness of behavior after overflow.
    ///
    /// # Invariants
    ///
    /// For any `a`, `n`, and `m`, where no overflow occurs:
    ///
    /// * `Step::backward(Step::backward(a, n), m) == Step::backward(a, n + m)`
    ///
    /// For any `a` and `n`, where no overflow occurs:
    ///
    /// * `Step::backward_checked(a, n) == Some(Step::backward(a, n))`
    /// * `Step::backward(a, n) == (0..n).fold(a, |x, _| Step::backward(x, 1))`
    ///   * Corollary: `Step::backward(a, 0) == a`
    /// * `Step::backward(a, n) <= a`
    /// * `Step::forward(Step::backward(a, n), n) == a`
    fn backward(start: Self, count: usize) -> Self {
        Step::backward_checked(start, count).expect("overflow in `Step::backward`")
    }

    /// Returns the value that would be obtained by taking the *predecessor*
    /// of `self` `count` times.
    ///
    /// # Safety
    ///
    /// It is undefined behavior for this operation to overflow the
    /// range of values supported by `Self`. If you cannot guarantee that this
    /// will not overflow, use `backward` or `backward_checked` instead.
    ///
    /// # Invariants
    ///
    /// For any `a`:
    ///
    /// * if there exists `b` such that `b < a`, it is safe to call `Step::backward_unchecked(a, 1)`
    /// * if there exists `b`, `n` such that `steps_between(&b, &a) == Some(n)`,
    ///   it is safe to call `Step::backward_unchecked(a, m)` for any `m <= n`.
    ///
    /// For any `a` and `n`, where no overflow occurs:
    ///
    /// * `Step::backward_unchecked(a, n)` is equivalent to `Step::backward(a, n)`
    #[unstable(feature = "unchecked_math", reason = "niche optimization path", issue = "none")]
    unsafe fn backward_unchecked(start: Self, count: usize) -> Self {
        Step::backward(start, count)
    }
}
```

Note that all of these are associated functions and not callable via method syntax; the calling syntax is always `Step::forward(start, n)`. This version of the trait additionally changes the stepping functions to talk their arguments by value.

As opposed to previous attempts which provided a "step by one" method directly, this version of the trait only exposes "step by n". There are a few reasons for this:

- `Range*`, the primary consumer of `Step`, assumes that the "step by n" operation is cheap. If a single step function is provided, it will be a lot more enticing to implement "step by n" as n repeated calls to "step by one". While this is not strictly incorrect, this behavior would be surprising for anyone used to using `Range<{primitive integer}>`.
- With a trivial default impl, this can be easily added backwards-compatibly later.
- The debug-wrapping "step by n" needs to exist for `RangeFrom` to be consistent between "step by n" and "step by one" operation. (Note: the behavior is not changed by this PR, but making the behavior consistent is made tenable by this PR.)

Three "kinds" of step are provided: `_checked`, which returns an `Option` indicating attempted overflow; (unsuffixed), which provides "safe overflow" behavior (is allowed to panic, wrap, or saturate, depending on what is most convenient for a given type); and `_unchecked`, which is a version which assumes overflow does not happen.

Review is appreciated to check that:

- The invariants as described on the `Step` functions are enough to specify the "common sense" consistency for successor/predecessor.
- Implementation of `Step` functions is correct in the face of overflow and the edges of representable integers.
- Added tests of `Step` functions are asserting the correct behavior (and not just the implemented behavior).
RalfJung added a commit to RalfJung/rust that referenced this pull request May 15, 2020
Rework the std::iter::Step trait

Previous attempts: rust-lang#43127 rust-lang#62886 rust-lang#68807
Tracking issue: rust-lang#42168

This PR reworks the `Step` trait to be phrased in terms of the *successor* and *predecessor* operations. With this, `Step` hopefully has a consistent identity that can have a path towards stabilization. The proposed trait:

```rust
/// Objects that have a notion of *successor* and *predecessor* operations.
///
/// The *successor* operation moves towards values that compare greater.
/// The *predecessor* operation moves towards values that compare lesser.
///
/// # Safety
///
/// This trait is `unsafe` because its implementation must be correct for
/// the safety of `unsafe trait TrustedLen` implementations, and the results
/// of using this trait can otherwise be trusted by `unsafe` code to be correct
/// and fulful the listed obligations.
pub unsafe trait Step: Clone + PartialOrd + Sized {
    /// Returns the number of *successor* steps required to get from `start` to `end`.
    ///
    /// Returns `None` if the number of steps would overflow `usize`
    /// (or is infinite, or if `end` would never be reached).
    ///
    /// # Invariants
    ///
    /// For any `a`, `b`, and `n`:
    ///
    /// * `steps_between(&a, &b) == Some(n)` if and only if `Step::forward(&a, n) == Some(b)`
    /// * `steps_between(&a, &b) == Some(n)` if and only if `Step::backward(&a, n) == Some(a)`
    /// * `steps_between(&a, &b) == Some(n)` only if `a <= b`
    ///   * Corollary: `steps_between(&a, &b) == Some(0)` if and only if `a == b`
    ///   * Note that `a <= b` does _not_ imply `steps_between(&a, &b) != None`;
    ///     this is the case wheen it would require more than `usize::MAX` steps to get to `b`
    /// * `steps_between(&a, &b) == None` if `a > b`
    fn steps_between(start: &Self, end: &Self) -> Option<usize>;

    /// Returns the value that would be obtained by taking the *successor*
    /// of `self` `count` times.
    ///
    /// If this would overflow the range of values supported by `Self`, returns `None`.
    ///
    /// # Invariants
    ///
    /// For any `a`, `n`, and `m`:
    ///
    /// * `Step::forward_checked(a, n).and_then(|x| Step::forward_checked(x, m)) == Step::forward_checked(a, m).and_then(|x| Step::forward_checked(x, n))`
    ///
    /// For any `a`, `n`, and `m` where `n + m` does not overflow:
    ///
    /// * `Step::forward_checked(a, n).and_then(|x| Step::forward_checked(x, m)) == Step::forward_checked(a, n + m)`
    ///
    /// For any `a` and `n`:
    ///
    /// * `Step::forward_checked(a, n) == (0..n).try_fold(a, |x, _| Step::forward_checked(&x, 1))`
    ///   * Corollary: `Step::forward_checked(&a, 0) == Some(a)`
    fn forward_checked(start: Self, count: usize) -> Option<Self>;

    /// Returns the value that would be obtained by taking the *successor*
    /// of `self` `count` times.
    ///
    /// If this would overflow the range of values supported by `Self`,
    /// this function is allowed to panic, wrap, or saturate.
    /// The suggested behavior is to panic when debug assertions are enabled,
    /// and to wrap or saturate otherwise.
    ///
    /// Unsafe code should not rely on the correctness of behavior after overflow.
    ///
    /// # Invariants
    ///
    /// For any `a`, `n`, and `m`, where no overflow occurs:
    ///
    /// * `Step::forward(Step::forward(a, n), m) == Step::forward(a, n + m)`
    ///
    /// For any `a` and `n`, where no overflow occurs:
    ///
    /// * `Step::forward_checked(a, n) == Some(Step::forward(a, n))`
    /// * `Step::forward(a, n) == (0..n).fold(a, |x, _| Step::forward(x, 1))`
    ///   * Corollary: `Step::forward(a, 0) == a`
    /// * `Step::forward(a, n) >= a`
    /// * `Step::backward(Step::forward(a, n), n) == a`
    fn forward(start: Self, count: usize) -> Self {
        Step::forward_checked(start, count).expect("overflow in `Step::forward`")
    }

    /// Returns the value that would be obtained by taking the *successor*
    /// of `self` `count` times.
    ///
    /// # Safety
    ///
    /// It is undefined behavior for this operation to overflow the
    /// range of values supported by `Self`. If you cannot guarantee that this
    /// will not overflow, use `forward` or `forward_checked` instead.
    ///
    /// # Invariants
    ///
    /// For any `a`:
    ///
    /// * if there exists `b` such that `b > a`, it is safe to call `Step::forward_unchecked(a, 1)`
    /// * if there exists `b`, `n` such that `steps_between(&a, &b) == Some(n)`,
    ///   it is safe to call `Step::forward_unchecked(a, m)` for any `m <= n`.
    ///
    /// For any `a` and `n`, where no overflow occurs:
    ///
    /// * `Step::forward_unchecked(a, n)` is equivalent to `Step::forward(a, n)`
    #[unstable(feature = "unchecked_math", reason = "niche optimization path", issue = "none")]
    unsafe fn forward_unchecked(start: Self, count: usize) -> Self {
        Step::forward(start, count)
    }

    /// Returns the value that would be obtained by taking the *successor*
    /// of `self` `count` times.
    ///
    /// If this would overflow the range of values supported by `Self`, returns `None`.
    ///
    /// # Invariants
    ///
    /// For any `a`, `n`, and `m`:
    ///
    /// * `Step::backward_checked(a, n).and_then(|x| Step::backward_checked(x, m)) == n.checked_add(m).and_then(|x| Step::backward_checked(a, x))`
    /// * `Step::backward_checked(a, n).and_then(|x| Step::backward_checked(x, m)) == try { Step::backward_checked(a, n.checked_add(m)?) }`
    ///
    /// For any `a` and `n`:
    ///
    /// * `Step::backward_checked(a, n) == (0..n).try_fold(a, |x, _| Step::backward_checked(&x, 1))`
    ///   * Corollary: `Step::backward_checked(&a, 0) == Some(a)`
    fn backward_checked(start: Self, count: usize) -> Option<Self>;

    /// Returns the value that would be obtained by taking the *predecessor*
    /// of `self` `count` times.
    ///
    /// If this would overflow the range of values supported by `Self`,
    /// this function is allowed to panic, wrap, or saturate.
    /// The suggested behavior is to panic when debug assertions are enabled,
    /// and to wrap or saturate otherwise.
    ///
    /// Unsafe code should not rely on the correctness of behavior after overflow.
    ///
    /// # Invariants
    ///
    /// For any `a`, `n`, and `m`, where no overflow occurs:
    ///
    /// * `Step::backward(Step::backward(a, n), m) == Step::backward(a, n + m)`
    ///
    /// For any `a` and `n`, where no overflow occurs:
    ///
    /// * `Step::backward_checked(a, n) == Some(Step::backward(a, n))`
    /// * `Step::backward(a, n) == (0..n).fold(a, |x, _| Step::backward(x, 1))`
    ///   * Corollary: `Step::backward(a, 0) == a`
    /// * `Step::backward(a, n) <= a`
    /// * `Step::forward(Step::backward(a, n), n) == a`
    fn backward(start: Self, count: usize) -> Self {
        Step::backward_checked(start, count).expect("overflow in `Step::backward`")
    }

    /// Returns the value that would be obtained by taking the *predecessor*
    /// of `self` `count` times.
    ///
    /// # Safety
    ///
    /// It is undefined behavior for this operation to overflow the
    /// range of values supported by `Self`. If you cannot guarantee that this
    /// will not overflow, use `backward` or `backward_checked` instead.
    ///
    /// # Invariants
    ///
    /// For any `a`:
    ///
    /// * if there exists `b` such that `b < a`, it is safe to call `Step::backward_unchecked(a, 1)`
    /// * if there exists `b`, `n` such that `steps_between(&b, &a) == Some(n)`,
    ///   it is safe to call `Step::backward_unchecked(a, m)` for any `m <= n`.
    ///
    /// For any `a` and `n`, where no overflow occurs:
    ///
    /// * `Step::backward_unchecked(a, n)` is equivalent to `Step::backward(a, n)`
    #[unstable(feature = "unchecked_math", reason = "niche optimization path", issue = "none")]
    unsafe fn backward_unchecked(start: Self, count: usize) -> Self {
        Step::backward(start, count)
    }
}
```

Note that all of these are associated functions and not callable via method syntax; the calling syntax is always `Step::forward(start, n)`. This version of the trait additionally changes the stepping functions to talk their arguments by value.

As opposed to previous attempts which provided a "step by one" method directly, this version of the trait only exposes "step by n". There are a few reasons for this:

- `Range*`, the primary consumer of `Step`, assumes that the "step by n" operation is cheap. If a single step function is provided, it will be a lot more enticing to implement "step by n" as n repeated calls to "step by one". While this is not strictly incorrect, this behavior would be surprising for anyone used to using `Range<{primitive integer}>`.
- With a trivial default impl, this can be easily added backwards-compatibly later.
- The debug-wrapping "step by n" needs to exist for `RangeFrom` to be consistent between "step by n" and "step by one" operation. (Note: the behavior is not changed by this PR, but making the behavior consistent is made tenable by this PR.)

Three "kinds" of step are provided: `_checked`, which returns an `Option` indicating attempted overflow; (unsuffixed), which provides "safe overflow" behavior (is allowed to panic, wrap, or saturate, depending on what is most convenient for a given type); and `_unchecked`, which is a version which assumes overflow does not happen.

Review is appreciated to check that:

- The invariants as described on the `Step` functions are enough to specify the "common sense" consistency for successor/predecessor.
- Implementation of `Step` functions is correct in the face of overflow and the edges of representable integers.
- Added tests of `Step` functions are asserting the correct behavior (and not just the implemented behavior).
RalfJung added a commit to RalfJung/rust that referenced this pull request May 15, 2020
Rework the std::iter::Step trait

Previous attempts: rust-lang#43127 rust-lang#62886 rust-lang#68807
Tracking issue: rust-lang#42168

This PR reworks the `Step` trait to be phrased in terms of the *successor* and *predecessor* operations. With this, `Step` hopefully has a consistent identity that can have a path towards stabilization. The proposed trait:

```rust
/// Objects that have a notion of *successor* and *predecessor* operations.
///
/// The *successor* operation moves towards values that compare greater.
/// The *predecessor* operation moves towards values that compare lesser.
///
/// # Safety
///
/// This trait is `unsafe` because its implementation must be correct for
/// the safety of `unsafe trait TrustedLen` implementations, and the results
/// of using this trait can otherwise be trusted by `unsafe` code to be correct
/// and fulful the listed obligations.
pub unsafe trait Step: Clone + PartialOrd + Sized {
    /// Returns the number of *successor* steps required to get from `start` to `end`.
    ///
    /// Returns `None` if the number of steps would overflow `usize`
    /// (or is infinite, or if `end` would never be reached).
    ///
    /// # Invariants
    ///
    /// For any `a`, `b`, and `n`:
    ///
    /// * `steps_between(&a, &b) == Some(n)` if and only if `Step::forward(&a, n) == Some(b)`
    /// * `steps_between(&a, &b) == Some(n)` if and only if `Step::backward(&a, n) == Some(a)`
    /// * `steps_between(&a, &b) == Some(n)` only if `a <= b`
    ///   * Corollary: `steps_between(&a, &b) == Some(0)` if and only if `a == b`
    ///   * Note that `a <= b` does _not_ imply `steps_between(&a, &b) != None`;
    ///     this is the case wheen it would require more than `usize::MAX` steps to get to `b`
    /// * `steps_between(&a, &b) == None` if `a > b`
    fn steps_between(start: &Self, end: &Self) -> Option<usize>;

    /// Returns the value that would be obtained by taking the *successor*
    /// of `self` `count` times.
    ///
    /// If this would overflow the range of values supported by `Self`, returns `None`.
    ///
    /// # Invariants
    ///
    /// For any `a`, `n`, and `m`:
    ///
    /// * `Step::forward_checked(a, n).and_then(|x| Step::forward_checked(x, m)) == Step::forward_checked(a, m).and_then(|x| Step::forward_checked(x, n))`
    ///
    /// For any `a`, `n`, and `m` where `n + m` does not overflow:
    ///
    /// * `Step::forward_checked(a, n).and_then(|x| Step::forward_checked(x, m)) == Step::forward_checked(a, n + m)`
    ///
    /// For any `a` and `n`:
    ///
    /// * `Step::forward_checked(a, n) == (0..n).try_fold(a, |x, _| Step::forward_checked(&x, 1))`
    ///   * Corollary: `Step::forward_checked(&a, 0) == Some(a)`
    fn forward_checked(start: Self, count: usize) -> Option<Self>;

    /// Returns the value that would be obtained by taking the *successor*
    /// of `self` `count` times.
    ///
    /// If this would overflow the range of values supported by `Self`,
    /// this function is allowed to panic, wrap, or saturate.
    /// The suggested behavior is to panic when debug assertions are enabled,
    /// and to wrap or saturate otherwise.
    ///
    /// Unsafe code should not rely on the correctness of behavior after overflow.
    ///
    /// # Invariants
    ///
    /// For any `a`, `n`, and `m`, where no overflow occurs:
    ///
    /// * `Step::forward(Step::forward(a, n), m) == Step::forward(a, n + m)`
    ///
    /// For any `a` and `n`, where no overflow occurs:
    ///
    /// * `Step::forward_checked(a, n) == Some(Step::forward(a, n))`
    /// * `Step::forward(a, n) == (0..n).fold(a, |x, _| Step::forward(x, 1))`
    ///   * Corollary: `Step::forward(a, 0) == a`
    /// * `Step::forward(a, n) >= a`
    /// * `Step::backward(Step::forward(a, n), n) == a`
    fn forward(start: Self, count: usize) -> Self {
        Step::forward_checked(start, count).expect("overflow in `Step::forward`")
    }

    /// Returns the value that would be obtained by taking the *successor*
    /// of `self` `count` times.
    ///
    /// # Safety
    ///
    /// It is undefined behavior for this operation to overflow the
    /// range of values supported by `Self`. If you cannot guarantee that this
    /// will not overflow, use `forward` or `forward_checked` instead.
    ///
    /// # Invariants
    ///
    /// For any `a`:
    ///
    /// * if there exists `b` such that `b > a`, it is safe to call `Step::forward_unchecked(a, 1)`
    /// * if there exists `b`, `n` such that `steps_between(&a, &b) == Some(n)`,
    ///   it is safe to call `Step::forward_unchecked(a, m)` for any `m <= n`.
    ///
    /// For any `a` and `n`, where no overflow occurs:
    ///
    /// * `Step::forward_unchecked(a, n)` is equivalent to `Step::forward(a, n)`
    #[unstable(feature = "unchecked_math", reason = "niche optimization path", issue = "none")]
    unsafe fn forward_unchecked(start: Self, count: usize) -> Self {
        Step::forward(start, count)
    }

    /// Returns the value that would be obtained by taking the *successor*
    /// of `self` `count` times.
    ///
    /// If this would overflow the range of values supported by `Self`, returns `None`.
    ///
    /// # Invariants
    ///
    /// For any `a`, `n`, and `m`:
    ///
    /// * `Step::backward_checked(a, n).and_then(|x| Step::backward_checked(x, m)) == n.checked_add(m).and_then(|x| Step::backward_checked(a, x))`
    /// * `Step::backward_checked(a, n).and_then(|x| Step::backward_checked(x, m)) == try { Step::backward_checked(a, n.checked_add(m)?) }`
    ///
    /// For any `a` and `n`:
    ///
    /// * `Step::backward_checked(a, n) == (0..n).try_fold(a, |x, _| Step::backward_checked(&x, 1))`
    ///   * Corollary: `Step::backward_checked(&a, 0) == Some(a)`
    fn backward_checked(start: Self, count: usize) -> Option<Self>;

    /// Returns the value that would be obtained by taking the *predecessor*
    /// of `self` `count` times.
    ///
    /// If this would overflow the range of values supported by `Self`,
    /// this function is allowed to panic, wrap, or saturate.
    /// The suggested behavior is to panic when debug assertions are enabled,
    /// and to wrap or saturate otherwise.
    ///
    /// Unsafe code should not rely on the correctness of behavior after overflow.
    ///
    /// # Invariants
    ///
    /// For any `a`, `n`, and `m`, where no overflow occurs:
    ///
    /// * `Step::backward(Step::backward(a, n), m) == Step::backward(a, n + m)`
    ///
    /// For any `a` and `n`, where no overflow occurs:
    ///
    /// * `Step::backward_checked(a, n) == Some(Step::backward(a, n))`
    /// * `Step::backward(a, n) == (0..n).fold(a, |x, _| Step::backward(x, 1))`
    ///   * Corollary: `Step::backward(a, 0) == a`
    /// * `Step::backward(a, n) <= a`
    /// * `Step::forward(Step::backward(a, n), n) == a`
    fn backward(start: Self, count: usize) -> Self {
        Step::backward_checked(start, count).expect("overflow in `Step::backward`")
    }

    /// Returns the value that would be obtained by taking the *predecessor*
    /// of `self` `count` times.
    ///
    /// # Safety
    ///
    /// It is undefined behavior for this operation to overflow the
    /// range of values supported by `Self`. If you cannot guarantee that this
    /// will not overflow, use `backward` or `backward_checked` instead.
    ///
    /// # Invariants
    ///
    /// For any `a`:
    ///
    /// * if there exists `b` such that `b < a`, it is safe to call `Step::backward_unchecked(a, 1)`
    /// * if there exists `b`, `n` such that `steps_between(&b, &a) == Some(n)`,
    ///   it is safe to call `Step::backward_unchecked(a, m)` for any `m <= n`.
    ///
    /// For any `a` and `n`, where no overflow occurs:
    ///
    /// * `Step::backward_unchecked(a, n)` is equivalent to `Step::backward(a, n)`
    #[unstable(feature = "unchecked_math", reason = "niche optimization path", issue = "none")]
    unsafe fn backward_unchecked(start: Self, count: usize) -> Self {
        Step::backward(start, count)
    }
}
```

Note that all of these are associated functions and not callable via method syntax; the calling syntax is always `Step::forward(start, n)`. This version of the trait additionally changes the stepping functions to talk their arguments by value.

As opposed to previous attempts which provided a "step by one" method directly, this version of the trait only exposes "step by n". There are a few reasons for this:

- `Range*`, the primary consumer of `Step`, assumes that the "step by n" operation is cheap. If a single step function is provided, it will be a lot more enticing to implement "step by n" as n repeated calls to "step by one". While this is not strictly incorrect, this behavior would be surprising for anyone used to using `Range<{primitive integer}>`.
- With a trivial default impl, this can be easily added backwards-compatibly later.
- The debug-wrapping "step by n" needs to exist for `RangeFrom` to be consistent between "step by n" and "step by one" operation. (Note: the behavior is not changed by this PR, but making the behavior consistent is made tenable by this PR.)

Three "kinds" of step are provided: `_checked`, which returns an `Option` indicating attempted overflow; (unsuffixed), which provides "safe overflow" behavior (is allowed to panic, wrap, or saturate, depending on what is most convenient for a given type); and `_unchecked`, which is a version which assumes overflow does not happen.

Review is appreciated to check that:

- The invariants as described on the `Step` functions are enough to specify the "common sense" consistency for successor/predecessor.
- Implementation of `Step` functions is correct in the face of overflow and the edges of representable integers.
- Added tests of `Step` functions are asserting the correct behavior (and not just the implemented behavior).
bors added a commit to rust-lang-ci/rust that referenced this pull request May 15, 2020
Rework the std::iter::Step trait

Previous attempts: rust-lang#43127 rust-lang#62886 rust-lang#68807
Tracking issue: rust-lang#42168

This PR reworks the `Step` trait to be phrased in terms of the *successor* and *predecessor* operations. With this, `Step` hopefully has a consistent identity that can have a path towards stabilization. The proposed trait:

```rust
/// Objects that have a notion of *successor* and *predecessor* operations.
///
/// The *successor* operation moves towards values that compare greater.
/// The *predecessor* operation moves towards values that compare lesser.
///
/// # Safety
///
/// This trait is `unsafe` because its implementation must be correct for
/// the safety of `unsafe trait TrustedLen` implementations, and the results
/// of using this trait can otherwise be trusted by `unsafe` code to be correct
/// and fulful the listed obligations.
pub unsafe trait Step: Clone + PartialOrd + Sized {
    /// Returns the number of *successor* steps required to get from `start` to `end`.
    ///
    /// Returns `None` if the number of steps would overflow `usize`
    /// (or is infinite, or if `end` would never be reached).
    ///
    /// # Invariants
    ///
    /// For any `a`, `b`, and `n`:
    ///
    /// * `steps_between(&a, &b) == Some(n)` if and only if `Step::forward(&a, n) == Some(b)`
    /// * `steps_between(&a, &b) == Some(n)` if and only if `Step::backward(&a, n) == Some(a)`
    /// * `steps_between(&a, &b) == Some(n)` only if `a <= b`
    ///   * Corollary: `steps_between(&a, &b) == Some(0)` if and only if `a == b`
    ///   * Note that `a <= b` does _not_ imply `steps_between(&a, &b) != None`;
    ///     this is the case wheen it would require more than `usize::MAX` steps to get to `b`
    /// * `steps_between(&a, &b) == None` if `a > b`
    fn steps_between(start: &Self, end: &Self) -> Option<usize>;

    /// Returns the value that would be obtained by taking the *successor*
    /// of `self` `count` times.
    ///
    /// If this would overflow the range of values supported by `Self`, returns `None`.
    ///
    /// # Invariants
    ///
    /// For any `a`, `n`, and `m`:
    ///
    /// * `Step::forward_checked(a, n).and_then(|x| Step::forward_checked(x, m)) == Step::forward_checked(a, m).and_then(|x| Step::forward_checked(x, n))`
    ///
    /// For any `a`, `n`, and `m` where `n + m` does not overflow:
    ///
    /// * `Step::forward_checked(a, n).and_then(|x| Step::forward_checked(x, m)) == Step::forward_checked(a, n + m)`
    ///
    /// For any `a` and `n`:
    ///
    /// * `Step::forward_checked(a, n) == (0..n).try_fold(a, |x, _| Step::forward_checked(&x, 1))`
    ///   * Corollary: `Step::forward_checked(&a, 0) == Some(a)`
    fn forward_checked(start: Self, count: usize) -> Option<Self>;

    /// Returns the value that would be obtained by taking the *successor*
    /// of `self` `count` times.
    ///
    /// If this would overflow the range of values supported by `Self`,
    /// this function is allowed to panic, wrap, or saturate.
    /// The suggested behavior is to panic when debug assertions are enabled,
    /// and to wrap or saturate otherwise.
    ///
    /// Unsafe code should not rely on the correctness of behavior after overflow.
    ///
    /// # Invariants
    ///
    /// For any `a`, `n`, and `m`, where no overflow occurs:
    ///
    /// * `Step::forward(Step::forward(a, n), m) == Step::forward(a, n + m)`
    ///
    /// For any `a` and `n`, where no overflow occurs:
    ///
    /// * `Step::forward_checked(a, n) == Some(Step::forward(a, n))`
    /// * `Step::forward(a, n) == (0..n).fold(a, |x, _| Step::forward(x, 1))`
    ///   * Corollary: `Step::forward(a, 0) == a`
    /// * `Step::forward(a, n) >= a`
    /// * `Step::backward(Step::forward(a, n), n) == a`
    fn forward(start: Self, count: usize) -> Self {
        Step::forward_checked(start, count).expect("overflow in `Step::forward`")
    }

    /// Returns the value that would be obtained by taking the *successor*
    /// of `self` `count` times.
    ///
    /// # Safety
    ///
    /// It is undefined behavior for this operation to overflow the
    /// range of values supported by `Self`. If you cannot guarantee that this
    /// will not overflow, use `forward` or `forward_checked` instead.
    ///
    /// # Invariants
    ///
    /// For any `a`:
    ///
    /// * if there exists `b` such that `b > a`, it is safe to call `Step::forward_unchecked(a, 1)`
    /// * if there exists `b`, `n` such that `steps_between(&a, &b) == Some(n)`,
    ///   it is safe to call `Step::forward_unchecked(a, m)` for any `m <= n`.
    ///
    /// For any `a` and `n`, where no overflow occurs:
    ///
    /// * `Step::forward_unchecked(a, n)` is equivalent to `Step::forward(a, n)`
    #[unstable(feature = "unchecked_math", reason = "niche optimization path", issue = "none")]
    unsafe fn forward_unchecked(start: Self, count: usize) -> Self {
        Step::forward(start, count)
    }

    /// Returns the value that would be obtained by taking the *successor*
    /// of `self` `count` times.
    ///
    /// If this would overflow the range of values supported by `Self`, returns `None`.
    ///
    /// # Invariants
    ///
    /// For any `a`, `n`, and `m`:
    ///
    /// * `Step::backward_checked(a, n).and_then(|x| Step::backward_checked(x, m)) == n.checked_add(m).and_then(|x| Step::backward_checked(a, x))`
    /// * `Step::backward_checked(a, n).and_then(|x| Step::backward_checked(x, m)) == try { Step::backward_checked(a, n.checked_add(m)?) }`
    ///
    /// For any `a` and `n`:
    ///
    /// * `Step::backward_checked(a, n) == (0..n).try_fold(a, |x, _| Step::backward_checked(&x, 1))`
    ///   * Corollary: `Step::backward_checked(&a, 0) == Some(a)`
    fn backward_checked(start: Self, count: usize) -> Option<Self>;

    /// Returns the value that would be obtained by taking the *predecessor*
    /// of `self` `count` times.
    ///
    /// If this would overflow the range of values supported by `Self`,
    /// this function is allowed to panic, wrap, or saturate.
    /// The suggested behavior is to panic when debug assertions are enabled,
    /// and to wrap or saturate otherwise.
    ///
    /// Unsafe code should not rely on the correctness of behavior after overflow.
    ///
    /// # Invariants
    ///
    /// For any `a`, `n`, and `m`, where no overflow occurs:
    ///
    /// * `Step::backward(Step::backward(a, n), m) == Step::backward(a, n + m)`
    ///
    /// For any `a` and `n`, where no overflow occurs:
    ///
    /// * `Step::backward_checked(a, n) == Some(Step::backward(a, n))`
    /// * `Step::backward(a, n) == (0..n).fold(a, |x, _| Step::backward(x, 1))`
    ///   * Corollary: `Step::backward(a, 0) == a`
    /// * `Step::backward(a, n) <= a`
    /// * `Step::forward(Step::backward(a, n), n) == a`
    fn backward(start: Self, count: usize) -> Self {
        Step::backward_checked(start, count).expect("overflow in `Step::backward`")
    }

    /// Returns the value that would be obtained by taking the *predecessor*
    /// of `self` `count` times.
    ///
    /// # Safety
    ///
    /// It is undefined behavior for this operation to overflow the
    /// range of values supported by `Self`. If you cannot guarantee that this
    /// will not overflow, use `backward` or `backward_checked` instead.
    ///
    /// # Invariants
    ///
    /// For any `a`:
    ///
    /// * if there exists `b` such that `b < a`, it is safe to call `Step::backward_unchecked(a, 1)`
    /// * if there exists `b`, `n` such that `steps_between(&b, &a) == Some(n)`,
    ///   it is safe to call `Step::backward_unchecked(a, m)` for any `m <= n`.
    ///
    /// For any `a` and `n`, where no overflow occurs:
    ///
    /// * `Step::backward_unchecked(a, n)` is equivalent to `Step::backward(a, n)`
    #[unstable(feature = "unchecked_math", reason = "niche optimization path", issue = "none")]
    unsafe fn backward_unchecked(start: Self, count: usize) -> Self {
        Step::backward(start, count)
    }
}
```

Note that all of these are associated functions and not callable via method syntax; the calling syntax is always `Step::forward(start, n)`. This version of the trait additionally changes the stepping functions to talk their arguments by value.

As opposed to previous attempts which provided a "step by one" method directly, this version of the trait only exposes "step by n". There are a few reasons for this:

- `Range*`, the primary consumer of `Step`, assumes that the "step by n" operation is cheap. If a single step function is provided, it will be a lot more enticing to implement "step by n" as n repeated calls to "step by one". While this is not strictly incorrect, this behavior would be surprising for anyone used to using `Range<{primitive integer}>`.
- With a trivial default impl, this can be easily added backwards-compatibly later.
- The debug-wrapping "step by n" needs to exist for `RangeFrom` to be consistent between "step by n" and "step by one" operation. (Note: the behavior is not changed by this PR, but making the behavior consistent is made tenable by this PR.)

Three "kinds" of step are provided: `_checked`, which returns an `Option` indicating attempted overflow; (unsuffixed), which provides "safe overflow" behavior (is allowed to panic, wrap, or saturate, depending on what is most convenient for a given type); and `_unchecked`, which is a version which assumes overflow does not happen.

Review is appreciated to check that:

- The invariants as described on the `Step` functions are enough to specify the "common sense" consistency for successor/predecessor.
- Implementation of `Step` functions is correct in the face of overflow and the edges of representable integers.
- Added tests of `Step` functions are asserting the correct behavior (and not just the implemented behavior).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-blocked Status: Blocked on something else such as an RFC or other implementation work.
Projects
None yet
Development

Successfully merging this pull request may close these issues.