Skip to content

Commit

Permalink
Merge pull request #204 from dtolnay/assoc
Browse files Browse the repository at this point in the history
Parse associated type constraints in dyn trait object types
  • Loading branch information
dtolnay committed Nov 27, 2021
2 parents 210d741 + 6f18821 commit 11d3eb7
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 4 deletions.
4 changes: 4 additions & 0 deletions src/ensure.rs
Expand Up @@ -503,6 +503,10 @@ macro_rules! __parse_ensure {
$crate::__parse_ensure!(arglist $stack $bail ($($fuel)*) {($($buf)* $life) $($parse)*} ($($rest)*) $($rest)*)
};

(generic $stack:tt $bail:tt (~$($fuel:tt)*) {($($buf:tt)*) $($parse:tt)*} ($assoc:ident $eq:tt $($dup:tt)*) $ident:ident = $($rest:tt)*) => {
$crate::__parse_ensure!(type (arglist $stack) $bail ($($fuel)*) {($($buf)* $assoc $eq) $($parse)*} ($($rest)*) $($rest)*)
};

(generic $stack:tt $bail:tt (~$($fuel:tt)*) $parse:tt $dup:tt $($rest:tt)*) => {
$crate::__parse_ensure!(type (arglist $stack) $bail ($($fuel)*) $parse $dup $($rest)*)
};
Expand Down
16 changes: 12 additions & 4 deletions tests/test_ensure.rs
Expand Up @@ -536,13 +536,21 @@ fn test_as() {
"Condition failed: `f as fn() -> ! as usize * 0 != 0` (0 vs 0)",
);

trait EqDebug<T>: PartialEq<T> + Debug {}
impl<S, T> EqDebug<T> for S where S: PartialEq<T> + Debug {}
trait EqDebug<T>: PartialEq<T> + Debug {
type Assoc;
}

impl<S, T> EqDebug<T> for S
where
S: PartialEq<T> + Debug,
{
type Assoc = bool;
}

let test = || Ok(ensure!(&0 as &dyn EqDebug<i32> != &0));
let test = || Ok(ensure!(&0 as &dyn EqDebug<i32, Assoc = bool> != &0));
assert_err(
test,
"Condition failed: `&0 as &dyn EqDebug<i32> != &0` (0 vs 0)",
"Condition failed: `&0 as &dyn EqDebug<i32, Assoc = bool> != &0` (0 vs 0)",
);

let test = || {
Expand Down

0 comments on commit 11d3eb7

Please sign in to comment.