]> git.lizzy.rs Git - rust.git/commitdiff
make macros hygienic
authorJohn Clements <clements@racket-lang.org>
Wed, 25 Jun 2014 01:57:00 +0000 (18:57 -0700)
committerJohn Clements <clements@racket-lang.org>
Wed, 25 Jun 2014 21:36:16 +0000 (14:36 -0700)
src/librand/isaac.rs

index 3fff27d479225554d8755a39c2e58339d9f806a3..6caa936636a710528017b09d81a4ab008fb3c3a5 100644 (file)
@@ -130,37 +130,39 @@ fn isaac(&mut self) {
         macro_rules! ind (($x:expr) => {
             self.mem[(($x >> 2) as uint & ((RAND_SIZE - 1) as uint))]
         });
-        macro_rules! rngstepp(
-            ($j:expr, $shift:expr) => {{
-                let base = $j;
-                let mix = a << $shift as uint;
-
-                let x = self.mem[base  + mr_offset];
-                a = (a ^ mix) + self.mem[base + m2_offset];
-                let y = ind!(x) + a + b;
-                self.mem[base + mr_offset] = y;
-
-                b = ind!(y >> RAND_SIZE_LEN as uint) + x;
-                self.rsl[base + mr_offset] = b;
-            }}
-        );
-        macro_rules! rngstepn(
-            ($j:expr, $shift:expr) => {{
-                let base = $j;
-                let mix = a >> $shift as uint;
-
-                let x = self.mem[base  + mr_offset];
-                a = (a ^ mix) + self.mem[base + m2_offset];
-                let y = ind!(x) + a + b;
-                self.mem[base + mr_offset] = y;
-
-                b = ind!(y >> RAND_SIZE_LEN as uint) + x;
-                self.rsl[base + mr_offset] = b;
-            }}
-        );
 
         let r = [(0, MIDPOINT), (MIDPOINT, 0)];
         for &(mr_offset, m2_offset) in r.iter() {
+
+            macro_rules! rngstepp(
+                ($j:expr, $shift:expr) => {{
+                        let base = $j;
+                        let mix = a << $shift as uint;
+
+                        let x = self.mem[base  + mr_offset];
+                        a = (a ^ mix) + self.mem[base + m2_offset];
+                        let y = ind!(x) + a + b;
+                        self.mem[base + mr_offset] = y;
+
+                        b = ind!(y >> RAND_SIZE_LEN as uint) + x;
+                        self.rsl[base + mr_offset] = b;
+                    }}
+                );
+            macro_rules! rngstepn(
+                ($j:expr, $shift:expr) => {{
+                        let base = $j;
+                        let mix = a >> $shift as uint;
+
+                        let x = self.mem[base  + mr_offset];
+                        a = (a ^ mix) + self.mem[base + m2_offset];
+                        let y = ind!(x) + a + b;
+                        self.mem[base + mr_offset] = y;
+
+                        b = ind!(y >> RAND_SIZE_LEN as uint) + x;
+                        self.rsl[base + mr_offset] = b;
+                    }}
+                );
+
             for i in range_step(0u, MIDPOINT, 4) {
                 rngstepp!(i + 0, 13);
                 rngstepn!(i + 1, 6);
@@ -349,43 +351,44 @@ macro_rules! ind (
                 *self.mem.unsafe_ref(($x as uint >> 3) & (RAND_SIZE_64 - 1))
             }
         );
-        macro_rules! rngstepp(
-            ($j:expr, $shift:expr) => {{
-                let base = base + $j;
-                let mix = a ^ (a << $shift as uint);
-                let mix = if $j == 0 {!mix} else {mix};
-
-                unsafe {
-                    let x = *self.mem.unsafe_ref(base + mr_offset);
-                    a = mix + *self.mem.unsafe_ref(base + m2_offset);
-                    let y = ind!(x) + a + b;
-                    self.mem.unsafe_set(base + mr_offset, y);
-
-                    b = ind!(y >> RAND_SIZE_64_LEN) + x;
-                    self.rsl.unsafe_set(base + mr_offset, b);
-                }
-            }}
-        );
-        macro_rules! rngstepn(
-            ($j:expr, $shift:expr) => {{
-                let base = base + $j;
-                let mix = a ^ (a >> $shift as uint);
-                let mix = if $j == 0 {!mix} else {mix};
-
-                unsafe {
-                    let x = *self.mem.unsafe_ref(base + mr_offset);
-                    a = mix + *self.mem.unsafe_ref(base + m2_offset);
-                    let y = ind!(x) + a + b;
-                    self.mem.unsafe_set(base + mr_offset, y);
-
-                    b = ind!(y >> RAND_SIZE_64_LEN) + x;
-                    self.rsl.unsafe_set(base + mr_offset, b);
-                }
-            }}
-        );
 
         for &(mr_offset, m2_offset) in MP_VEC.iter() {
             for base in range(0, MIDPOINT / 4).map(|i| i * 4) {
+
+                macro_rules! rngstepp(
+                    ($j:expr, $shift:expr) => {{
+                            let base = base + $j;
+                            let mix = a ^ (a << $shift as uint);
+                            let mix = if $j == 0 {!mix} else {mix};
+
+                            unsafe {
+                                let x = *self.mem.unsafe_ref(base + mr_offset);
+                                a = mix + *self.mem.unsafe_ref(base + m2_offset);
+                                let y = ind!(x) + a + b;
+                                self.mem.unsafe_set(base + mr_offset, y);
+
+                                b = ind!(y >> RAND_SIZE_64_LEN) + x;
+                                self.rsl.unsafe_set(base + mr_offset, b);
+                            }
+                        }}
+                    );
+                macro_rules! rngstepn(
+                    ($j:expr, $shift:expr) => {{
+                            let base = base + $j;
+                            let mix = a ^ (a >> $shift as uint);
+                            let mix = if $j == 0 {!mix} else {mix};
+
+                            unsafe {
+                                let x = *self.mem.unsafe_ref(base + mr_offset);
+                                a = mix + *self.mem.unsafe_ref(base + m2_offset);
+                                let y = ind!(x) + a + b;
+                                self.mem.unsafe_set(base + mr_offset, y);
+
+                                b = ind!(y >> RAND_SIZE_64_LEN) + x;
+                                self.rsl.unsafe_set(base + mr_offset, b);
+                            }
+                        }}
+                    );
                 rngstepp!(0, 21);
                 rngstepn!(1, 5);
                 rngstepp!(2, 12);