Skip to content

Commit

Permalink
Rollup merge of rust-lang#81241 - m-ou-se:force-expr-macro-rules, r=o…
Browse files Browse the repository at this point in the history
…li-obk

Turn alloc's force_expr macro into a regular macro_rules.

This turns `alloc`'s `force_expr` macro into a regular `macro_rules`.

Otherwise rust-analyzer doesn't understand `vec![]`. See rust-lang/rust-analyzer#7349 and rust-lang#81080 (comment)

Edit: See rust-lang#81241 (comment) for a discussion of alternatives.
  • Loading branch information
m-ou-se committed Jan 22, 2021
2 parents 3682a06 + 1934eaf commit 70597f2
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 10 deletions.
7 changes: 0 additions & 7 deletions library/alloc/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -189,11 +189,4 @@ pub mod vec;
#[unstable(feature = "liballoc_internals", issue = "none", reason = "implementation detail")]
pub mod __export {
pub use core::format_args;

/// Force AST node to an expression to improve diagnostics in pattern position.
#[rustc_macro_transparency = "semitransparent"]
#[unstable(feature = "liballoc_internals", issue = "none", reason = "implementation detail")]
pub macro force_expr($e:expr) {
$e
}
}
16 changes: 13 additions & 3 deletions library/alloc/src/macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,13 @@
#[allow_internal_unstable(box_syntax, liballoc_internals)]
macro_rules! vec {
() => (
$crate::__export::force_expr!($crate::vec::Vec::new())
$crate::__rust_force_expr!($crate::vec::Vec::new())
);
($elem:expr; $n:expr) => (
$crate::__export::force_expr!($crate::vec::from_elem($elem, $n))
$crate::__rust_force_expr!($crate::vec::from_elem($elem, $n))
);
($($x:expr),+ $(,)?) => (
$crate::__export::force_expr!(<[_]>::into_vec(box [$($x),+]))
$crate::__rust_force_expr!(<[_]>::into_vec(box [$($x),+]))
);
}

Expand Down Expand Up @@ -111,3 +111,13 @@ macro_rules! format {
res
}}
}

/// Force AST node to an expression to improve diagnostics in pattern position.
#[doc(hidden)]
#[macro_export]
#[unstable(feature = "liballoc_internals", issue = "none", reason = "implementation detail")]
macro_rules! __rust_force_expr {
($e:expr) => {
$e
};
}

0 comments on commit 70597f2

Please sign in to comment.