From 1e7e9fe1edeb6e28767ac52c32f778462b181a19 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Thu, 31 Oct 2024 22:30:43 -0700 Subject: [PATCH] Parse raw address expression syntax --- src/ensure.rs | 16 ++++++++++++++++ tests/test_ensure.rs | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/ensure.rs b/src/ensure.rs index 9d0a676..795757d 100644 --- a/src/ensure.rs +++ b/src/ensure.rs @@ -155,6 +155,14 @@ macro_rules! __parse_ensure { $crate::__parse_ensure!(0 $stack $bail ($($fuel)*) {($($buf)* $and $mut) $($parse)*} ($($rest)*) $($rest)*) }; + (0 $stack:tt $bail:tt (~$($fuel:tt)*) {($($buf:tt)*) $($parse:tt)*} ($and:tt $raw:tt $mut:tt $($dup:tt)*) &raw mut $($rest:tt)*) => { + $crate::__parse_ensure!(0 $stack $bail ($($fuel)*) {($($buf)* $and $raw $mut) $($parse)*} ($($rest)*) $($rest)*) + }; + + (0 $stack:tt $bail:tt (~$($fuel:tt)*) {($($buf:tt)*) $($parse:tt)*} ($and:tt $raw:tt $const:tt $($dup:tt)*) &raw const $($rest:tt)*) => { + $crate::__parse_ensure!(0 $stack $bail ($($fuel)*) {($($buf)* $and $raw $const) $($parse)*} ($($rest)*) $($rest)*) + }; + (0 $stack:tt $bail:tt (~$($fuel:tt)*) {($($buf:tt)*) $($parse:tt)*} ($and:tt $($dup:tt)*) & $($rest:tt)*) => { $crate::__parse_ensure!(0 $stack $bail ($($fuel)*) {($($buf)* $and) $($parse)*} ($($rest)*) $($rest)*) }; @@ -163,6 +171,14 @@ macro_rules! __parse_ensure { $crate::__parse_ensure!(0 $stack $bail ($($fuel)*) {($($buf)* $andand $mut) $($parse)*} ($($rest)*) $($rest)*) }; + (0 $stack:tt $bail:tt (~$($fuel:tt)*) {($($buf:tt)*) $($parse:tt)*} ($andand:tt $raw:tt $mut:tt $($dup:tt)*) &&raw mut $($rest:tt)*) => { + $crate::__parse_ensure!(0 $stack $bail ($($fuel)*) {($($buf)* $andand $raw $mut) $($parse)*} ($($rest)*) $($rest)*) + }; + + (0 $stack:tt $bail:tt (~$($fuel:tt)*) {($($buf:tt)*) $($parse:tt)*} ($andand:tt $raw:tt $const:tt $($dup:tt)*) &&raw const $($rest:tt)*) => { + $crate::__parse_ensure!(0 $stack $bail ($($fuel)*) {($($buf)* $andand $raw $const) $($parse)*} ($($rest)*) $($rest)*) + }; + (0 $stack:tt $bail:tt (~$($fuel:tt)*) {($($buf:tt)*) $($parse:tt)*} ($andand:tt $($dup:tt)*) && $($rest:tt)*) => { $crate::__parse_ensure!(0 $stack $bail ($($fuel)*) {($($buf)* $andand) $($parse)*} ($($rest)*) $($rest)*) }; diff --git a/tests/test_ensure.rs b/tests/test_ensure.rs index 4fc80e6..9660df7 100644 --- a/tests/test_ensure.rs +++ b/tests/test_ensure.rs @@ -188,7 +188,7 @@ fn test_unary() { let test = || Ok(ensure!(S + &raw const x != S + &raw mut x)); assert_err( test, - "Condition failed: `S + &raw const x != S + &raw mut x`", // FIXME + "Condition failed: `S + &raw const x != S + &raw mut x` (false vs false)", ); }