Skip to content

Commit a16252b

Browse files
authored
Merge pull request #390 from dtolnay/rawaddr
Add support for raw addr syntax
2 parents 6c52daa + fcf2ef8 commit a16252b

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

src/ensure.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,14 @@ macro_rules! __parse_ensure {
155155
$crate::__parse_ensure!(0 $stack $bail ($($fuel)*) {($($buf)* $and $mut) $($parse)*} ($($rest)*) $($rest)*)
156156
};
157157

158+
(0 $stack:tt $bail:tt (~$($fuel:tt)*) {($($buf:tt)*) $($parse:tt)*} ($and:tt $raw:tt $mut:tt $($dup:tt)*) &raw mut $($rest:tt)*) => {
159+
$crate::__parse_ensure!(0 $stack $bail ($($fuel)*) {($($buf)* $and $raw $mut) $($parse)*} ($($rest)*) $($rest)*)
160+
};
161+
162+
(0 $stack:tt $bail:tt (~$($fuel:tt)*) {($($buf:tt)*) $($parse:tt)*} ($and:tt $raw:tt $const:tt $($dup:tt)*) &raw const $($rest:tt)*) => {
163+
$crate::__parse_ensure!(0 $stack $bail ($($fuel)*) {($($buf)* $and $raw $const) $($parse)*} ($($rest)*) $($rest)*)
164+
};
165+
158166
(0 $stack:tt $bail:tt (~$($fuel:tt)*) {($($buf:tt)*) $($parse:tt)*} ($and:tt $($dup:tt)*) & $($rest:tt)*) => {
159167
$crate::__parse_ensure!(0 $stack $bail ($($fuel)*) {($($buf)* $and) $($parse)*} ($($rest)*) $($rest)*)
160168
};
@@ -163,6 +171,14 @@ macro_rules! __parse_ensure {
163171
$crate::__parse_ensure!(0 $stack $bail ($($fuel)*) {($($buf)* $andand $mut) $($parse)*} ($($rest)*) $($rest)*)
164172
};
165173

174+
(0 $stack:tt $bail:tt (~$($fuel:tt)*) {($($buf:tt)*) $($parse:tt)*} ($andand:tt $raw:tt $mut:tt $($dup:tt)*) &&raw mut $($rest:tt)*) => {
175+
$crate::__parse_ensure!(0 $stack $bail ($($fuel)*) {($($buf)* $andand $raw $mut) $($parse)*} ($($rest)*) $($rest)*)
176+
};
177+
178+
(0 $stack:tt $bail:tt (~$($fuel:tt)*) {($($buf:tt)*) $($parse:tt)*} ($andand:tt $raw:tt $const:tt $($dup:tt)*) &&raw const $($rest:tt)*) => {
179+
$crate::__parse_ensure!(0 $stack $bail ($($fuel)*) {($($buf)* $andand $raw $const) $($parse)*} ($($rest)*) $($rest)*)
180+
};
181+
166182
(0 $stack:tt $bail:tt (~$($fuel:tt)*) {($($buf:tt)*) $($parse:tt)*} ($andand:tt $($dup:tt)*) && $($rest:tt)*) => {
167183
$crate::__parse_ensure!(0 $stack $bail ($($fuel)*) {($($buf)* $andand) $($parse)*} ($($rest)*) $($rest)*)
168184
};

tests/test_ensure.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,17 @@ fn test_unary() {
186186
assert_err(test, "Condition failed: `&mut x == *&&mut &2` (1 vs 2)");
187187
}
188188

189+
#[rustversion::since(1.82)]
190+
#[test]
191+
fn test_raw_addr() {
192+
let mut x = 1;
193+
let test = || Ok(ensure!(S + &raw const x != S + &raw mut x));
194+
assert_err(
195+
test,
196+
"Condition failed: `S + &raw const x != S + &raw mut x` (false vs false)",
197+
);
198+
}
199+
189200
#[test]
190201
fn test_if() {
191202
#[rustfmt::skip]

0 commit comments

Comments
 (0)