diff options
author | bors-servo <release+servo@mozilla.com> | 2014-03-25 12:37:49 -0400 |
---|---|---|
committer | bors-servo <release+servo@mozilla.com> | 2014-03-25 12:37:49 -0400 |
commit | 11639c34e65bedfcc34b8734e691b5b720f085e6 (patch) | |
tree | b5e2d57d6d1ba8db1da5d03963b38e44463f70a9 /src/components/macros/macros.rs | |
parent | 3401a568f276c55f90ec050df605492b900f79ac (diff) | |
parent | 79ca9b6eb00e5a5945f03221227a43919f67caa4 (diff) | |
download | servo-11639c34e65bedfcc34b8734e691b5b720f085e6.tar.gz servo-11639c34e65bedfcc34b8734e691b5b720f085e6.zip |
auto merge of #1958 : mbrubeck/servo/macro-crate, r=kmcallister
This moves the bitfield! macro into a new shared `macros` crate as suggested in #1882.
Diffstat (limited to 'src/components/macros/macros.rs')
-rw-r--r-- | src/components/macros/macros.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/components/macros/macros.rs b/src/components/macros/macros.rs new file mode 100644 index 00000000000..4ae1923d1f3 --- /dev/null +++ b/src/components/macros/macros.rs @@ -0,0 +1,32 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#[crate_id = "github.com/mozilla/servo#macros:0.1"]; +#[crate_type = "lib"]; + +#[feature(macro_rules)]; + +// Spawn a task, capturing the listed variables in a way that avoids the +// move-from-closure error. This is sugar around the function spawn_with, +// taking care of building a tuple and a lambda. + +#[macro_export] +macro_rules! bitfield( + ($bitfieldname:ident, $getter:ident, $setter:ident, $value:expr) => ( + impl $bitfieldname { + #[inline] + pub fn $getter(self) -> bool { + let $bitfieldname(this) = self; + (this & $value) != 0 + } + + #[inline] + pub fn $setter(&mut self, value: bool) { + let $bitfieldname(this) = *self; + *self = $bitfieldname((this & !$value) | (if value { $value } else { 0 })) + } + } + ) +) + |