Skip to content
💝 A macro for wrapping arithmetic
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src
tests
.gitignore
.travis.yml
Cargo.toml
README.md

README.md

wrapping_macros Build Status Cargo

A macro for wrapping arithmetic.

Any code within a wrapping! { .. } block will be transformed as follows:

  • a + b becomes a.wrapping_add(b). Similarly for -, *, /, %, <<, >>.
  • a += b becomes a = a.wrapping_add(b). Similarly for -=, *=, /=, %=, <<=, >>=.
  • -a becomes a.wrapping_neg().

See this Internals thread for the motivation behind this crate.

Note: This crate uses internal compiler APIs, and so requires the Nightly version of Rust.

Cargo

Add this to your Cargo.toml:

wrapping_macros = "*"

Example

#![feature(plugin)]
#![plugin(wrapping_macros)]

fn main() {
    let mut sum = 0u8;
    for x in 0u8..50 {
        wrapping! {
            sum += x;
        }
    }
}

Caveats

  • This crate uses unstable APIs, and will only work on Rust Nightly.

  • You cannot nest another macro invocation within a wrapping! block. For example, this will not work:

    let x = 41i32;
    wrapping! {
        println!("The answer is {}", x + 1);  //~ ERROR
    }

    Instead, move the macro call out of the block:

    let x = 41i32;
    println!("The answer is {}", wrapping! { x + 1 });
You can’t perform that action at this time.