rhs_first_assign

Crates.iorhs_first_assign
lib.rsrhs_first_assign
version0.1.0
sourcesrc
created_at2020-02-17 09:34:43.745949
updated_at2020-02-17 09:34:43.745949
descriptionAn attribute macro to hack compound assignment.
homepage
repositoryhttps://github.com/qryxip/rhs_first_assign
max_upload_size
id209988
size23,020
Ryo Yamashita (qryxip)

documentation

README

rhs_first_assign

CI codecov dependency status Crates.io License

An attribute macro to hack compound assignment.

Motivation

use std::num::Wrapping;

fn main() {
    let mut xs = vec![Wrapping(1), Wrapping(2)];

    // OK
    xs[1] = xs[0] + xs[1];

    // Error
    xs[1] += xs[0];
}
error[E0502]: cannot borrow `xs` as immutable because it is also borrowed as mutable
  --> src/main.rs:10:14
   |
10 |     xs[1] += xs[0];
   |     ---------^^---
   |     |        |
   |     |        immutable borrow occurs here
   |     mutable borrow occurs here
   |     mutable borrow later used here

Usage

use rhs_first_assign::rhs_first_assign;

use std::num::Wrapping;

#[rhs_first_assign]
fn main() {
    let mut xs = vec![Wrapping(1), Wrapping(2)];

    xs[1] = xs[0] + xs[1];

    xs[1] += xs[0];
}

use std::num::Wrapping;

fn main() {
    let mut xs = vec![Wrapping(1), Wrapping(2)];

    xs[1] = xs[0] + xs[1];

    {
        let __rhs_first_assign_rhs_l11_c10 = xs[0];
        xs[1] += __rhs_first_assign_rhs_l11_c10;
    };
}

License

Licensed under MIT OR Apache-2.0.

Commit count: 7

cargo fmt